From 80256012ad5b2de549d10e43ca4cfd40ac38dbf4 Mon Sep 17 00:00:00 2001 From: veguAI <152010387+vegu-ai-tools@users.noreply.github.com> Date: Sun, 24 Nov 2024 15:43:27 +0200 Subject: [PATCH] 0.28.0 (#148) * fix issue where saving a new scene would save into a "new scenario" directory instead instead of a relevantly named directory * implement function to fork new scene file from specific message * dynamic choice generation * dynamic choice generation progress * prompt tweaks * disable choice generation by default prompt tweaks * prompt tweaks for assisted RAG tasks * allow analyze_text_and_extract_context to include character context * more prompt tweaks for RAG assist during conversation generation * open director settings from dynamic action dialog * adjust wording * remove player choice message if the trigger message is removed (or regenerated) * fix issue with dialogue cleaqup where narration over multiple lines would end up being marked incorrectly * dynamic action generation custom instructions dynamic action generation narration for sensory actions * fix actions when acting as another character * 0.28.0 * conversation agent: split out generation settings, add actor instructions extension, add actor instruction offset slider * prompt tweaks * fix ai message regenerate if generated from choice * cruft * layered history implementation through summarizer summarization tweaks * show layered history in ux * layered history fixes and tweaks conversation actor instruction fixes * more summarization fixes * fix missing actor instructions * prompt tweaks * prompt tweaks * force lower case when checking sensory type * agent modal polish implement find-natural-scene-termination summarizer action some summarization tweaks * integrate find_natural_scene_termination with layered history * collect all denouements at once * relock * fix some issues with screenplay type formatting in conversation agent * cleanup * revert layered history summarization to use max_process_tokens instead of using ai to fine scene termination as that process falls apart in layer 1 and higher, at that point every item is a scene in itself. * implement ai assisted digging through layered history to answer queries * dig_layered_history tweaks and improvements * prompt tweaks * adjust budget * adjust budget for RAG context * layered_history disabled by default * prompt tweaks to reinforcement updates * prompt tweaks * dig layered history - response without function call to be treated as answer * clarify style keywords to avoid bleeding into the prompt as subject matter * fix issue with cover image updates * fix missing dialogue from context history * fix issue where new scenes wouldn't load * fix crash with layered summarization * more context history fixes * fix assured dialogue message in context history * prompt tweaks * tweaks to layered history generation * prompt tweaks * conversation agent can dig layered history for extra context * some fixes to dig layered history * scene fork adjust layered history * layered history status indication * allow configuration of message styles and colors * fix issue where layered history generate would get stuck on layer 0 * dig layered history default to false * prompt tweaks * context investigation messages * tweaks to context investigation * context investigation polish of UX and allow specifying trigger * prompt tweaks * allow hiding of ci and director messages * wire ci shrotcut buttons * prompt tweaks * prompt tweaks * carry on analysis when digging layered history * improve quality of generate choices by anchoring to last line in the scene * update hint message * prompt tweaks * change default value for max_process_tokens * docs * dig layered history only if there are layers * always enforce num choices limit * relock * typos * prompt tweaks * docs for forking a scene * prompt tweaks * world editor rubber banding fixes follow up * layered history cleanup fixes * gracefully handle malformed dig() call * handle malformed answer() call * only generate choices if last content isn't player message * include more context in autocomplete prompts * prompt tweaks * typo * fix issue where inactive characters could not be deleted * more character delete bugs * dig layered history fixes * discard empty content investigations * fix issue with autocomplete no longer working in world editor * prompt tweaks * support single quotes * prompt tweaks * fix issue with context investigation if final message was narrator text * Include the query in the context investigation message * context investigvations should note when historic events occured * instructions on how to use internal notes * time_diff return empty string no time supplied * prompt tweaks * fix date calculations for historic entries * change default values * prompt tweaks * fix history regenerate continuing through page reload * reorganize websocket tasks * allow cancelling of history regenerate * Capitalize first letter of summarization * include base layer in context investigations * prompt tweaks * fix issue where context investigations would expand too much of the history at once * attempt to determine character knowledge during context investigation * prompt tweaks * prompt tweaks * fix mising timestamps * more context during layer history digging * fix issue with act-as not being able to select past the first npc if a scene had more than one active npcs in it * docs * error handling for malformed answer call * timestamp calculation fixes and summarization improvements * lock message manipulation while the ux is busy * prompt tweaks * toggling 'log debug messages' will log all messages to console even if no filter is specified * layered history generation cancellable from ux * prevent loading scene while another scene is currently loading * improvements to choice generation prompt and error handling * prompt tweaks * prompt tweaks * prompt tweaks * fix issue with successive scene load not working * correctly display timestamps and generated layers during history regen * summarization improvements * clean up context investigation prompt * prompt tweaks * increase response token size for dig_layered_history * define missing presets * missing preset * prompt tweaks * fix simulation suite * attach punkt download to backend start, not frontend start * dig layered history fixes * prompt tweaks * fix summarize_and_pin * more fixes for time calculations * relock * prompt tweaks * remove dupe entry from layered history * bash version of update script * prompt tweaks * layered history defaults to enabled * default decreased to 0.3 chance * fix multi character natural flow selection with clients that don't support LLM coercion * fix simulation suite call to change a character * typo * remove deprecated test * use python3 * add missing 4o models * add proper configs for 4o models * prompt tweaks * update reinforcement prompt ignores context investigations * scene.snapshot formatting and dig_layered_history ignores reinforcments * use end date instead of start date * Reword 'Moments ago' to 'Recently' as it is more forgiving and applicable to longer time ranges * fix time calculation issues during summarization of new entries * no need for scoping * dont display as range if start and end of entry are identical * prompt tweaks --- docs/dev/index.md | 2 +- ...rsation-context-investigation-settings.png | Bin 0 -> 33807 bytes .../0.28.0/conversation-general-settings.png | Bin 0 -> 51471 bytes .../conversation-generation-settings.png | Bin 0 -> 42578 bytes .../director-dynamic-actions-settings.png | Bin 0 -> 54484 bytes docs/img/0.28.0/director-general-settings.png | Bin 0 -> 45645 bytes .../0.28.0/quick-action-generated-text.png | Bin 0 -> 27850 bytes docs/img/0.28.0/quick-action.png | Bin 0 -> 12417 bytes .../0.28.0/summarizer-general-settings.png | Bin 0 -> 61201 bytes .../summarizer-layered-history-settings.png | Bin 0 -> 59139 bytes .../agents/conversation/settings.md | 96 +- docs/user-guide/agents/director/settings.md | 36 +- docs/user-guide/agents/summarizer/settings.md | 41 +- docs/user-guide/agents/voice/elevenlabs.md | 2 +- docs/user-guide/interacting.md | 10 + docs/user-guide/saving.md | 8 +- poetry.lock | 3571 +++++++++-------- scenes/simulation-suite/game.py | 6 +- src/talemate/agents/base.py | 2 + src/talemate/agents/conversation.py | 146 +- src/talemate/agents/creator/assistant.py | 86 + src/talemate/agents/director.py | 140 +- src/talemate/agents/memory/__init__.py | 6 +- src/talemate/agents/summarize.py | 890 +++- src/talemate/agents/visual/style.py | 8 +- src/talemate/agents/world_state.py | 13 +- src/talemate/client/openai.py | 10 + src/talemate/client/presets.py | 8 +- src/talemate/commands/__init__.py | 2 +- src/talemate/commands/cmd_debug_tools.py | 70 + src/talemate/commands/cmd_director.py | 24 + src/talemate/commands/cmd_rebuild_archive.py | 12 +- src/talemate/config.py | 29 + src/talemate/context.py | 13 + src/talemate/emit/base.py | 12 +- src/talemate/emit/signals.py | 4 + src/talemate/events.py | 5 + src/talemate/game/engine/api/scene.py | 2 +- src/talemate/history.py | 25 +- src/talemate/load.py | 3 +- src/talemate/prompts/base.py | 46 +- .../conversation/dialogue-chat.jinja2 | 22 +- .../conversation/dialogue-movie_script.jinja2 | 26 +- .../conversation/select-talking-actor.jinja2 | 4 +- .../creator/autocomplete-dialogue.jinja2 | 2 +- .../director/character-context.jinja2 | 12 + .../director/generate-choices.jinja2 | 50 + .../narrator/character-context.jinja2 | 12 + .../templates/narrator/narrate-query.jinja2 | 1 + .../summarizer/analyze-dialogue.jinja2 | 6 +- .../summarizer/character-context.jinja2 | 12 + .../summarizer/dig-layered-history.jinja2 | 135 + ...nd-natural-scene-termination-events.jinja2 | 22 + .../summarizer/summarize-dialogue.jinja2 | 77 +- .../summarize-events-list-milestones.jinja2 | 14 + .../summarizer/summarize-events.jinja2 | 49 +- .../templates/summarizer/timeline.jinja2 | 14 + .../analyze-text-and-extract-context.jinja2 | 14 +- ...alyze-text-and-generate-rag-queries.jinja2 | 40 +- .../world_state/character-context.jinja2 | 12 + .../world_state/update-reinforcements.jinja2 | 11 +- src/talemate/scene_message.py | 50 +- src/talemate/server/api.py | 337 +- src/talemate/server/assistant.py | 25 + src/talemate/server/director.py | 45 + src/talemate/server/run.py | 5 +- src/talemate/server/websocket_server.py | 14 + src/talemate/server/world_state_manager.py | 70 +- src/talemate/tale_mate.py | 464 ++- src/talemate/util/__init__.py | 98 +- src/talemate/util/response.py | 4 +- src/talemate/version.py | 2 +- talemate_frontend/package-lock.json | 36 +- talemate_frontend/package.json | 2 +- talemate_frontend/src/components/AIAgent.vue | 10 +- .../src/components/AgentModal.vue | 56 +- .../src/components/AppConfig.vue | 25 + .../src/components/AppConfigAppearance.vue | 51 + .../components/AppConfigAppearanceScene.vue | 189 + .../src/components/CharacterMessage.vue | 21 +- .../ContextInvestigationMessage.vue | 75 + .../src/components/DebugTools.vue | 4 +- .../src/components/DirectorMessage.vue | 37 +- .../src/components/IntroRecentScenes.vue | 7 +- .../src/components/IntroView.vue | 3 +- .../src/components/NarratorMessage.vue | 8 +- .../src/components/PlayerChoiceMessage.vue | 80 + .../src/components/RequestInput.vue | 12 +- .../src/components/SceneMessages.vue | 130 +- .../src/components/StatusNotification.vue | 7 +- .../src/components/TalemateApp.vue | 68 +- .../src/components/TimePassageMessage.vue | 6 +- .../src/components/WorldStateManager.vue | 1 + .../components/WorldStateManagerCharacter.vue | 2 +- .../WorldStateManagerCharacterActor.vue | 24 +- .../WorldStateManagerCharacterAttributes.vue | 18 +- .../WorldStateManagerCharacterDescription.vue | 17 +- .../WorldStateManagerCharacterDetails.vue | 19 +- ...rldStateManagerCharacterReinforcements.vue | 30 +- .../components/WorldStateManagerHistory.vue | 129 +- .../WorldStateManagerSceneOutline.vue | 26 +- .../WorldStateManagerWorldEntries.vue | 12 +- .../WorldStateManagerWorldStates.vue | 16 +- talemate_frontend/src/plugins/vuetify.js | 6 +- tests/test_dialogue_cleanup.py | 1 + tests/test_isodate.py | 67 +- tests/test_system_messages.py | 1 - update.sh | 43 + 108 files changed, 5715 insertions(+), 2501 deletions(-) create mode 100644 docs/img/0.28.0/conversation-context-investigation-settings.png create mode 100644 docs/img/0.28.0/conversation-general-settings.png create mode 100644 docs/img/0.28.0/conversation-generation-settings.png create mode 100644 docs/img/0.28.0/director-dynamic-actions-settings.png create mode 100644 docs/img/0.28.0/director-general-settings.png create mode 100644 docs/img/0.28.0/quick-action-generated-text.png create mode 100644 docs/img/0.28.0/quick-action.png create mode 100644 docs/img/0.28.0/summarizer-general-settings.png create mode 100644 docs/img/0.28.0/summarizer-layered-history-settings.png create mode 100644 src/talemate/prompts/templates/director/character-context.jinja2 create mode 100644 src/talemate/prompts/templates/director/generate-choices.jinja2 create mode 100644 src/talemate/prompts/templates/narrator/character-context.jinja2 create mode 100644 src/talemate/prompts/templates/summarizer/character-context.jinja2 create mode 100644 src/talemate/prompts/templates/summarizer/dig-layered-history.jinja2 create mode 100644 src/talemate/prompts/templates/summarizer/find-natural-scene-termination-events.jinja2 create mode 100644 src/talemate/prompts/templates/summarizer/summarize-events-list-milestones.jinja2 create mode 100644 src/talemate/prompts/templates/summarizer/timeline.jinja2 create mode 100644 src/talemate/prompts/templates/world_state/character-context.jinja2 create mode 100644 src/talemate/server/director.py create mode 100644 talemate_frontend/src/components/AppConfigAppearance.vue create mode 100644 talemate_frontend/src/components/AppConfigAppearanceScene.vue create mode 100644 talemate_frontend/src/components/ContextInvestigationMessage.vue create mode 100644 talemate_frontend/src/components/PlayerChoiceMessage.vue create mode 100644 update.sh diff --git a/docs/dev/index.md b/docs/dev/index.md index c5f5d1fb..1521cfe1 100644 --- a/docs/dev/index.md +++ b/docs/dev/index.md @@ -1,3 +1,3 @@ -# Coning soon +# Coming soon Developer documentation is coming soon. Stay tuned! \ No newline at end of file diff --git a/docs/img/0.28.0/conversation-context-investigation-settings.png b/docs/img/0.28.0/conversation-context-investigation-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..f865da7856b7302ee7643d3a2feca17e2292ddc4 GIT binary patch literal 33807 zcmc$`WmH^Cw>6xEKnPB7m*DR1?gV$Iafe`y1cC)8xCe*e?vT)U1C6@`2sBP`hp%%U zx#yfa?t6ZIgV8^BH?{Yws#R5M%{kZp^iD+<6^Rh(*|TS;@^Vt@&z`}BJbU(B84&^Y zjV@1~)3ayf&*Y`VHNBr7bVdP*b^M>69&~240JAIlgE(%M*faZsDO*;XQnAq;jpow2 z36(Y(gfCvVCWK(yd`L0SQ23Eoh)vfZ=G_7>@nsp#F932k z;%5cP;%^shZ>wx@7LF5cujjNLyYVxIj`-y6KY_R0dIB4s6OhAMen5$T&LM^{`0V$^ zmn;11Ko8$z{%nyF$j~2O{m<{u;IKmuC;;f}e{Uu{{0!bKP9TR_!U2==Z+H9<93LEC zDgM{Td_Xy;gWXJc&$|hsmOJ9l7W{r3k_3`O6GFoOnDvJZ;{_=1FfL0s7YKW2$^UEd zzs;jVq(@vJl=^o!{$sOP9EX_rd_k0=GRjFLRZKU!*z8#A$hdQIM*hVgcYi(J;m5tw+ni5}~%;gT(8Uef$|$Zh(?27)mp z1-q~NSdn^{6&?dF%1wrpc~_`**!@n2XqDfIKJ2Q-3_9StJ~lm?n)qxbpKg*p&0p_; zO&&Smfp|!s+ff$~yas+pmH&>WgB60nn~+qKfL6b&_BEqVXwk=w@as^KtJc_;>oYng z%oudtj~CUW5BOoXAhO4INA1TV1Oxf(vs=M9CX~PW*|%-;FK@-K(;tX|n~?)ko;M*4W}ZZo+6_2=9_VjYre7Sz`2+P*3wpi7+_f^V} ztphV^>IXW=0JiY%1z&D3u3=DsjE+1I>2TZSua^Vhyylr#d6(*)ux!O>HHW9jOGp z=UsM@Bo51&YyBKSyYUS3;12Y@dDXYPbq&`P5swl%kU^kU_*K*HH?oZvu4U%vxrg4% z{#Pp}&c2ml;iPLCB`O37uQ4kbyEeT1`biV2eMapGkt8C-*KjE#@Or*2zcb=)BFVh< z8+K>v{p*_lw#QyWDIQ^#9+UMv;R7kx;d780aGG#sYV0P{xr^Ue3c;Kf+!--tEqbT- z_6vCj+ZE=Ok!v4LF%(5~zB8uDJLs41Ot~?js{8SFAD%I91D&yw62;()$o(&ns~@@c z$*boP#^Q!itK9b#N+|9#d^XNsoZ8KhB@h|U@5PxUvcyeo`EQK2f~2p zIAMjp)>~hD0WU?l;SCYKO5S;Nx`ze3HoV&!NPA zr;J0(8JZ5bL{2Ck+q z_obz)b33;(Cm){8=Dcf^Z|9k@K5Ov|edegR^!a}__b*-qHU=0kQe;VesBnQ8tUK@@ zpG^dk-T!#CdE+BPq4#8lNEt9^e-W`BbLfDXmk%#)jT7RF9x?{oRJKFD)%V3-`Ymqs z`G+A%kaWFn-}&|KoI}EoQW<~G79DTKJw;xfOe-&TDe{nb znN-Zc)Z>%@#8&HOgKO=@VL6Q(a_t~GfXlZz0v(Z^h{?l6Q92Jud#u)#?i(anq_~VtRu9g{M&_>ne?nmr$ zuRWnI?Wp1V9a&Kh_Y2MF#ytv6v#C$s6YGf)iI3^xv@w!8HZ(NEci1%V z21JBHp`&}*JG=Ga-90Rbc!3yZy6LIN}QzpQ}#%_!{$q=(VqI+>uiY#)(pHGj+Pb00Ye(T6qbo5f! z-S^<`UdmSoo_ZcBCl>IS<3epx~(MP3Hls)mWsny2-Niu>BVA7 z6ZQWD0AkJ@HCDkGV&WdA6j&&L-ie&4Z8$VaxIlrm5w95FQPlu*y`r<8_<;C-1cfeT#fa;afJo>3(~@>z%f#Ks@t_y!VU^iUGV5kNANuTVeN! zKNdsVDQi3vAt6}W==`=M$CrWIt9ELYiG*hl4X<%CD5oRN|G=Uciq?bj#71_uavb30 zplI;n<|Rc>`|V!&XuPuE;SRe8)Jy`q;7SFa%2%%T>Wgp(He`y=&YAiEPLO*kjr2+k zTOz9ewq%Z}RnzDvn=IHe4NHBb@B{*AX61AP;E~i;IuMh(L%)mjQ{__Y`He zNNSqy0A}yJjhuTFyQhx-=4b#E4=O}(_5m)dehK5_~`+ zmD}7$+W+x`-=Vub7OylA+*b@m)|}+|JuS?G&)wqvk#SjvNNVv+_>#yfEVwzYhEdlnP#0s(~G1`2Ex0 z+mQl31lP!tbgwd_`;i*7|20?;yJ8m;mlGfS-?@fw(sQI9()U6J)@{}A!$k5_|I%E z;9)WD|IUhb)L?c1r%xQRce`c@ZbL*U{_Iq`&i`Pg$#Kdnk+@2uzfQuJJN*AM+xl1P zSjo9ECm@+SPWzXJ`=kG0<^Ia)H)w5R)L&=TgY1tPcR>AHr!Bw8!m_>twSoHg#drGF zJ6N|Ne{N{n`G4nxe^?pNX+U}{)a3csKJwZD{T(?w>v{-(~s=4^Hg`R{@gI=!s`ER<@JS=&yTbDMd|-$ zeScWn7WWVCydW^;U&(p?+F#<&4Qp2a!OH)C7TsJw2OE_}vY4H$>}S^YN7r=Z7kYeY zsySro3Ht96%J4!0_Q~kweS8fOnxzAXGn2`6KTm$ReJ`d^0{1#Ljv6GN#0saL#R6Uz zeo(HO_|>*G&-xZG1>pPigC?@xv7J2~^@Sb-YK8dy9EXD-s{NDCmjEPcNCdD{zq@ixdGt&x6r6JFYDE#Uz$FC>v#!1a!=EA&r3s_TY}+JO4!(kvL<@t|X~0v;{C1i8l?9I8E`_h8&y0w{|MLFKD>!(FY@4 z>xZq-#n`(CG`=)r$h9=@A6Qu|bk}Mj$@r{*F}N|oPO!{Q9(owF(Y7kY6FFcdcwE0E zQ(|VZF)d(HHO>MHqLD!0q_riVei}w1ZQ+N*dAqGSbqpuBS5?Evu{=AINVmhBd^e>_ zY=JHm6sM+{2?gA*$7TwfgcvOr?^40?m>VaSSeQw^309aP7cCwoCOjKk?HM@CCc5jb zg@Z=Sq7{Joa-0E&^@b|%Du6z3aJz%&$@Y}ysx$Vi@7X*ZY35-E#EB?7EasEOzF(_E zyQP&+C}g)KwsmMYEOx3@?NV99O9SyYu2Z6#o1$N7^|;PC=7YSie1uU<|C;Vl99TgJ z$0`O6@W;1d!9#m%M3-zi=HBIINylO_62+gE%+740&N|5y%w|-^)0t9&4&GUV{FUo+iSXQGvjRb2_>lg4|sVn{Xm zD5|5K=v19E3oZP7A)!dY_VPZ*1YgDAHeQUv$$b8F3f$`ydv$&h7Wne#-$Hcg6ntt4 z7fZC0`*zia+UI&N!vZHCrT8A&72hwltRKjuN%KHfcxdXuL7FUOXDRlWsWth0%$uo9 zXZ_SW zq&v&dq!_sH@pmm$;jg&;A2{@@6kMFNBbPG!=-)7=#)7Bi=f7o0#Bb2qcC)SF74mgr zxDmY!=4i)WVr4SuspGR89oyV~oOfDptPk%8%wG2}$QoR;kBDk_6tEror7{8U0K{)) zSQvdz*MpVz?s_*F+Ye;#4Z7|KyAr2Wg=qM7TZMT-$vaMm8Mg*RA8U8WL^hZ0h(4}Y z64Ncl^Bfo>$P{%D4{n4`_|*k{W=c=>Hl|V0KO6B>8kE40ySZ;;ZG6!{6YRntzqrv5 zeK-vMb|jx(j_{_}yxOE+)kc~(Qk9DQz$flwk@V{nM)g%*x*L*@907VWngIiw!w2z7 z+27+A=m{3mQ}3(T)A@1a-eo6XM&xt_3?1XAlog4k#G)t$$Qs{9l(PC`&GDV2i^K9g&bO$$-)4dMo5^zTidetKpT~_V zaF-7I*-9aJq6`iu?5x_TSVz`|nMvc6Z)Gs4giGFsp^wSqoXMc;B@Z21a73+loKaik z1_^7_AtqRHBNgWCVuch>P{jAWjqox?7_jPb(L8V@N=SECX<>LX!$PoO?){Rt1kBOe zOjq#HOj;;vrDuIyD_xL}c(IAg`5*y+M$zlRDOh~^n$SpK1LpEm1=T1&0WKzb41?X& z_9FJ0wiR020J}i7$acwGTqWv2m41s8yiZciltemT-9Ixb4feQY2c_+66nP)HtX+2e zyn>_;KTZ4i3_-JH@KBv4y&cT#dq>T{Di%V49!p=6-tlD7E4tzhN1oIu)rHNJyOe8L z0o<;{I)(W0l4%o2^ivftIA(uVhk1f*(2{KR`%woY)|(jWEvgWe!xjY4;LLngRYFi5 z)JSvM$&s4PvhwR(TWJ&rXo_0AG!ecpUAm^j$)?7Df1s5ssn*P~S`3uG(S#OZC&%@< z=^BTfP2Lp-${L5oG0E3(QG*0eKR3Vhsbh*9Zqb+CW+h17SY2l$A-Lbc3aK29e?;D< za*>(FceRcwwbi>UCwI6!vcFbQxaGA)er$RJbU+fn)(O1OIX%mLGQ9Y56Yb6@&vy*y zr-1A17o)om-jvqxOv5t(D1XeXy(B%HYmgA)4PZ(OJ{jN1=vLkQ z=v%py5kul3=cjOm!`$FYcWT#-cEmS~@QGUT?DR!_j%e(j#$tnfx;t ziq{h=KgDOs+jY$_;mLOa*&ne$FaWl)U(HxrQ8i?zzar%0;f}$*$SE9$jBytmelsVP%Z`l0Gr{**g2cKsx`o-bsphEPoN9Gq81os>ku0mZExm>o~KKI4hrf?=v zOh`Cf)QK=@?DvZ2HFMCWWpVVU`D!Wj8_BZqp?zUX5k3bqb4;`Z)5;x-!xEMuFMYzrsfp&qvvhMjH+i8Xae2YJ!~TmiQF z{HI!revs%e#=Z@XH=SD(maVpFHU3%D!bjW!T*IfeuXVy%!a*tfN|sSk&H4DRU$k2b z0-6!#yg~KXI-)b11jSP|7)xs5b9x7M=w|K9(l{PC^sYX{uiMk`KwS?)je)&^)8)x_ zn(~FHS17~l)a61EfvUWug^UxoN>?qbLQTV)`ZOV^=C#V34Phr&+s?8t3x{D~&wSmf zVzJv$BS9DNVB5Bk^TbQKG%>{iV1XZAqk}9tj8{2Rz#Wjo*GQpl2qYk_lm-*tcM0-=Mwy6=qM?vVlyYOlAdC6Fl3AMcJ;@7veIh&J}g z8-86)MeJfDObxXU{aRmG`M)^Xta)J`f=B`Flhm!m3s}iX zgK&NJ&KV1rk3>?H-tX9TK`h9`^)q1smp1o2j}-U%=%VPWR*XSIk=u^W7p4*RyN2sork5?)YDe#?>aCbP5_smdzB&J zF_#dN@nVPY@2-XCW!wBzqtHCYth!?(aQZy@i&y8o_^c~zoiw{e|EAYp<&BIn-&&fkH8AZE@6V@Pghhqzx;jh_XF}WSDQW#;2^WE_a>z9#2!dlZc!<*eUWw&e9=+ z#{pM@t!HC`n`gT5+p?m!2|^F&Q*Jj~shMYbp-D&*LdS|Gx1SG|njy<;au{u$VHZ8r z9v#PBOU~UZg%_V_b0Rh?t|)|mvxq;_t#jmiO#&eqXq`C&F^~`E-v#c(4CLZWg9w1J zYPz-+#OWMoC@XpLWq96SdoqgZaI_f?hE1DN^DkcTD6SevZvQ&vc1=(G^kRFR|A}zK zb&nART$pZc<5;xr7^7SQ?p>&SR>+i~8U)^2guc)2t)C?uIp03X7gV(-@i8q3rUd7?>fNGU&o+*|Sq#4Un z7~8i|RxESN-(ROoTBw?P=in5}ThB|TJ7nOuItShNMS%Xla$5qRA&hl@;$KfMLaweP$;+kQSVEQHPWQPBZEAoS+1_k#8%96 z(K}>dECV?H7#8*)Ex^TT{zx?HEEp|(>is^2!#eCp8&MDY)=%S{NBkOmbL*lu&uFla zd$MNPoDxCV~uDLA=!e~z9$Z~;l?6}(#l*Sn^_OxIikzubHu{F(;=G%AFKib zR#Dhz%nI~Ev0qYzWo<;{bb58}8afQPV0kuau3@wHvtD>_XkD}FLU}vYxA*@ z>aw8&V{6w?KMG^&dS_=nhGaLlQ0cSNX6S=7>snNWw4ji1Zodkcc^jj+XH4E{sYXes zq7NADSP(gD%*eWTKOiMEey0{MA?X@+Cu|0I6T(mM{l0c8e6vro$8Ul)RCh%GBr0tj zIs>1V`~3L6V^AbW@CwTviL^U49IR( zIC_8WbkK$Cj_BAl7eBz%#IxMeM5i=p2v9>iM)SAZwv}OYSo9pmTgC|{X(uXXc1_7M ztOHdCUjE!vfnr$2fCi)WdXe5rjZhkw)qTS%K?okF^|-x)Sf@$q#(%=X(d%gGQms5m z<@C>UqGe9ZZ=v2clRa~UAtR|6!cg1i@ZH=)UZH;c~p3y_iT$cAR>feE|s@RyE> zSP%>F*uu!$I#a#*GXayEIM+38TS+52aC&_Bm4#)DYtrR5+g^6)d7UVMT!xoi+Kr5I zs}ir6(6AT4#?E_Qg(K0y5h8oMl70(5~JdfbuqAMygf)u`hBw6yftz8V|I2zLKr0%NfRc{ z4#~VA6I{ED<>|b7OHAmLWExmH>Ss%omzaZ9M3fGO`AGqCEupW-nH@^?Z@;y&k{JV9+#i__%hYkVMNFOu2!?!_mlV4t~hdTnfsHi3~FZiYNJf}R;w zkBK#D{k%Zquua2aP2*=fm9yq5j<&bvmOkP%`Ht}F0kJKpI*!^vOS;rImy>sXp7ssH zHq4FGs-J^UT<38wZQ$D??RtaI;!r_nzjM`3(k&kA1z$&!Wh`BwHP{K=<8)@M3Mq=! z9Cq4f{r7#|cTrg(Q58%>(?=cHrz#&!90a?`M>c+M3c6w6Xx8Ho&M#S7qXB_D;yXZE zdRieGJ(E`9Hgycj1Ptz5Xyn`bSod2fmRJ>e2wljxDN&#+9*+7EagSHmS@ucIyO_jP zFBtKQA9T5^8mRvZLPCmEYYjo4_6aE+FT?WB$3zC3c5Md1z1rAk4d1}LKk;6NZ zMW^&-tnR#AycSRnhmhVXk?Q2w+JHtKK`t$^)_nR6tY(Jn5hg7;c`juNd9r+ZSK%Xt z@KQ~w<~GN-S#-G%i9km)=Wh#=V>ynOtGZTX5?*L#Dz~!5fT0ogX=yvcLVK6|t~uk6 z{)ietoFk%SknWg>{+8C+#J8Z*o}VM=4Ocx#b~t)zEX7x79u8S(jE?R?bMq^t2oWyC zcbY0Hb62(=Ia7nVtz8u94VTUaLfT0aQRI_WMK+ZJ5qG0C6TL2K;A-ZLNjVJ4%*vM((K^l^57RnHtzTwbCJ;QG8)Quwjt#B^AtolI zQz&;1**}PvB8YR94jOIdo35%sq&_7zol-{e-VX!5Ju+qz;99$t>c zcNv61F&YF;7aP;Gi2jl?D~_}WcjHmN#V`vI zqBzZRSeK-|e$pf?Um-FX2g0v2i$J7bzh0dUBK?*xWwX7Tw`VS2wXq>##Lhv2Z{qz< zNsG(@K>fbo`>LbFbrlsVKU?VL*RjQBu~=J6VoS6bhH{Pu2b=fjxtB@eHV?OR-6|Id z5)_Nwc~?sCNyx0)q@jbsd?2zO&{cVLmq37CdHgB8>iLFkniD$3n1#~@Y*!$uCO;3g zMppPu^P26WIOOHMz`Mhw^zU+{s~M(mnh{f_J911x1F{n-qsMh7PVCy>X8f5v`8FV? zgCsEm-*GW(umxZRrl;dYIO38=o}=fwqRp)n8rnn1&Z(22Y0v+{mi=)dj{w`a+Em)~;JtbwH4fhLNuQsnLe*Zsb@czdmJs)ZN*1(}ndrK27yvXO3U<*gE)UWy3FmF}{zBfc zU@qNgb~BSdvdiSGfzjlA?1USlx282>eR#LRQqr_-jnso1%9OW|@nfp`+};ymGP(HR z$|))PA-E=UW2J&Nf5CYrDQqSJ89pytR#(jkwYV-kfn~{;{ut1#kuh;}K%sOul`FH& z*=^(?dbMf|(~tHjue6ORtpG!{2SmvJ#p8%s*4rR%9z2@SXP1V6#O<}xyDeK*;dThN z(@GJsBh_c~3c=iES#(1#=5lsaBP=ATWr^JTH)@P$;`VfQm6Yy9X1m8kpXGb4`QyKZ z@Fx&%EOfV1xm#lxlZ#g}L`@ZZo-_MGlYKcp;+yf1+!;W?@|)rDR;_G$}dIa@N#J)|J0;@5A-HE(PUW6q2-fT5nsr(H*E=Y=2srQh&|B!EGtZ z`LmXXQ~j!Xvla1+N91jjjMAEXjK?iV`3WG>8NCt3Rh;xp^3iK2waO-A~r!; zKzmV^ot~(!n7dv0?C2}zF=;NLh^mU5NWf~mlGckd;@XW#Q5JV`a(BFW6upzUtk@NSQOK<&ytb( z*`r$|Ejn+iR8OI*108unSt=-s&gz~^u6PNW&Nvgfa$=OXcD6& z^3tJ^oE>=cFn%=fv^x2Bz@}A;MYr}e5>{OevE2JEs<(n?pJ9;tX}Vaj2DRchX`Cup z$4N4iHdfULxROhMg%VHW0(>3bozB*mYeh`L$g_mh@Ba1bud@^`k&8!K``*6g_+Z~} zWjRq5adiO$?D3&RZ$UI;{%Y`CdJD)?d~OX4-`%8#?=a$?6VQ)l<~7z^TtwEFDKWoN zH^@qO_=HYP(+qWHky~EB)PXPO(#Y^L&wA^@`+*a=@EU-izT5Sk^4)| ziXyK30cA|D>U0UC!O-8xwr)-`J3x|gz`EE{?nbDaNxUZBvBd+Sy}?TPEP$KAgv*)V zbBTwJy2ihlNqQbI=bhHCq$flW;2naV~Szwt5#VKJ(#cf z)d6t=$YxM6Vy*N*CcRbE*V!a;=1*8te>@x!!44_69Bgz!10A5)Eyj4Bag2*$un^bvN$5@}Yv#M}Dq!`H!Eosh zNF~}5YAM(>fbW_pr)mK14&I5k7Qg?U!ENyPBzZQmOuS?afF9J|ZI_Q#bhI)H= zq^CYwvwC8Q@TQ|df-%+nR*bO{c_OMy{kW3LLh!-ztD4gW%=eRNeID>l0gl&8!AkuS z6tu0F=L$1GLH}ezEJ*JQ<_8WpGri$g6*-h8BfJo|N!&}R=}-;aOzS9j;h5pls~a@{ z|53~;JH;6|h)Oqx!KNyX+mJXsR`X31IYF*o07*`j0HxrYXDKbG{pj~(mGbY(kXg=F za7|;g{U3)f;^cO9^=Qm7cM&B_sJTig``&m7(pY}qtL1VP>7-J`Wvya%5Nyq@pD*IJ zHzQR#SO2QYbeGW@7zAp=oO?gpDdN)G+1hU$K`+WupBy=o<;>3OJ37q`r>7 zq%T~4>z`}nsRtR{q5=lUr;x$j6&LxPl+H|LqUZn-v2Ms2c=vC0X237D_z1$~#&rRzxM3Xu%3GPYz#=XF?6d1BfZ%;jlNxSrwftdXRkW)+)~5 zfi1^8laZbJDe>~Ff7h>HS-;?SfS#xP6Yprt^Vc`u8u4F<@@g$CMVU2d_vwQrW&Mgk z5c#orPQARdzRHPKO~dmASLaNurm|;qj6-%HUuiblMf-X_VHS|!T@eIniY!jfg^aby z2(69hq?i^5%C)rJl@yr0Dr~VYO@G*MJl7J=SnoS!%}~$4Bf+yjB4d~;n`p~>HGOyx zXQJY^El?>Wcyh651bmJQAQWbtcp)+5Er=ue*7RW5JLyp_Y5FW~6qq&^`caaGm4#Sp zQ^|V_$9l-R+_8QEHeH@sTn8SYu=Sm!m9)e}L#_^PrQF+A{sQAiLs2PVhpLqW4q6hG z^ZU{Pjv1nTk%I4DyxlhFW?SAv=h6Fg2;HibcSRdc}}$$^6|cE**@1OOFeDs zh$ha6fwuH6@li4GK0@1)g|C1kHMPn{*o7M(-0G3xDK<>z1(}gg?uR3p49!QYm6ERl zG6y`z_c`a6?G*=N%UrbXY5Y>HSPrD?prQJ?M(la6JOdQz0w41nZsaWIHy8|yxVHxu z&zgVQ&QnXw*%H^Za#u8Wg51Lw~q8t~b1 zB2BTpvX-=y^ibgE^6FgqGRO`sc-qN@NA=F2-`|<;ERS_4jTm%!_| zWlt>Yjwma2 z;0c@8ylXe!io%?uIc9>c&OBj+Q07co$RJvy{8zuBeg%eHz@=WjP27GH1lEe3Ty1g7o%w^Cmf_xp*AO>1;KXiAQw-H#tc& zlsVgEstd%e7PlllA;b?l%2LAKTk`BR@cx;}#PpFO^2gTC5ERpZB5p%Xy=p^&H_q^H z!du_63h2y|b+eJs91JHZ{UC50qdi=za`!x}G|d|B*rk{@mIHeVD%Rn@RLA2{gX?qC z>o;Yr+yOnNJvCY@FwC-zreQiubBqX99(+awfipzWxBYzfVHoehq0V`IdUaOJ1a{zq zbUMfoTwuY0f7Rc%rP4Mc9|}h#Z8l1h72gW5k8PX_z;w6D%&`I_Z9yFU)yI8?&Mr5^ zX1QGh-0pK2>R~?5SJg;9P1=)B5S$T{XXV5AU8mno|IDNAWU@A|R(4TFZ93@$BGz$ha(iz3QZ~L{W)VbDi6#cb{xEY(qm_O*DY;3grbIb z34KwY&)^d;6*+Bkw#F!68U7!@sM7)7-1fpo*2&EgvBYLc#>mn8ZO1L-ix~j(9rZ9F z)@;W}whJ!jgilQgx6CXDdCu1D z_)X4xG>RMxUj#;Vev1-L?AfT26m>=bjf3R?XQEME4X##vCA{x1rKv>QPa5?$;8s0) zfhah$ZjBfVdl}(QIVYcRE+?|on~->wR9fTMMq&xof=nIaCEJC~$j_DmyNR_HIAuwR z$WvUtO^X!5e)Tz``v8ZXGfNAj?&tzq9;Z?RA9ORA%KUAbMc3yJz!J9w|H|NH?ZXCJ zw%_cJmBe#BO;7HjGm;X1jRg#0Q5CrEl7}{q%y$@Xs;-Ob7hTvpk^w4<&dG;R?f85= zgZxyAnZ;oS1I-V2D3`+)-FRsj{nu z?re2UA4#IpVL!4g2S?Z6)lIt}ydPOSYgeo1ki$H-_jJqNfnJ^^P##T#%e0p|QP)Yx zG|5AKrezI~G`SsLikNY(l-8LZD>bzUUGxr}$pSIN0}%E;u;cqre$ahTc60ZTKg zv_<7#Z`3kJhF296R9BRPXfdk{)JEkCv}97%mkgvv1SKU$CGbCm=D2YP7$pohaC%L~ zx+AoQ^i&bptF>ZQ%kY!8?Kw(RoX05;FkUWte*c;bp4}@az*mN8G$Qr@)C3FMmaeb%YC?PJFMu#{g=FC>J7>uzz4`lJVsy6T!PjkPd@9nZGz%y%))_Wb!7|PoJ zm|&~NaThm(_x42RQvbkt3$tjuZxgBKta#KDXJOmc$CsO!a^DhBv~x(BiNXWHg?bcGS75_5_9|eT)y`SvrTh`ny33J<1E@BNN19Ft{73)F z?8`4S$%#{+gfT$Z{82f&SD7{SFj@Q666YO8Q<@~caLJ5FNQN=iTyM?%IVDTWESHP! zhS;$xvBB@CNo}>;qoWH#e+iReqi6}XdGd!IYGj~XXj zB)~Z$_H^ZsEEt^HEc*|j+`u=fT;l*utA>ds&O`KpU>TsOiaE6v7;0R#;`MSeX7Vh*yTyg&x;hqh~)e(ei2hTB2XY zGAVXQS5Gw5SCV`ja?bf%u51dA64Dv4u8_l69be%IKR{-T4ej;hw8y-Xi4nIysc1x> zs`$DW>A0PZ^E12gDn0ipS;UKT`zE=#mG`KG+%jnPBfP$|rAQM0fo~ky*cbry-v)z~S|y2W2L@veBr(toBi47g%ZSNRgBw2yGA^v>s<+dm^ zkzrv1pFe)@Uw06PZMMagYtb>OgE7$+q__|s953cf|7GcG+W1xH*4_6?rgxZXkV>vm902T5Rn>-@Uw~a~RT!Wz+@1d=F{K7qJHpeG8YJ0O4srWSa=7}b z*?}+Y71~$Ug$Q!C3c&*wFt$jjyp3)O3f=UG8JVUkRT_$a5VClRR6;FVaZ{f+Na?e) znajYEVQCidQ9@j7}v|dAz6BE4?OQ$9Y|Y^;8dRnrvb^X6|j` z5{YE!NyHmbfX^aF4VBkJe39P%ZJRuD3DAcP%Bz-CYx9^WHB)ia;1_W^A-*Yjmvm~* zJ%;xiG>c1z1SmfpeIAkaEYsR9YzWj(dE-Mx+j?KBlpTF)`Yv(LTrV>(v7(!FsfTWm<`RU?g0S8G*D-4?R(2EC~<7EQ8@6Nf*^6YNb{L#cjRX!koB zXh8vAwMdw|+4La@Tz(}Q}*@NwW1 zu=Xk7b}DxmR)x*)vz>1J6IQ=nmnG=Ma`R$EN=2^gV2|~6P6_kiHwKO$+QIpeQt!$K z55Aib%(K&3$l_5W+Huqm_#T;cRQoy)2lYsx zETBfTBe14{?hix?fx6q`T|aBNLX8mZ=7~^$0D&kbOoW>FZ+K^DC&L^Yfx)Z~3>&b) z5Un7)2PQ^kDC#j+S`h}iQa05&i z>d?=oAuRBwEA{sD^BOygJBG{MNvp{%Wo9g~v`})wZxD^BeI!;-0#ZXHSINPuaTle& zjQU+SekfEd7;E$WNeQKE?tAARFSR}dN;6+21TU1q|A1w6QahLI>F}Fpu&Cwrc1e$r zi)HC!&Zyg{Sen<@ROR8C*R&&oLo$i5#1Bi(#co)LvD;qBN+sxufS{J4-&1cs6`~mM zl=bp^R`l_pVgPV@u+CA+>TA$T>tS`S8(S%bGp*NO>p5_ttpbS`Y%?r4^v7|-!HPe^ z#c4;Sk zz#pF`-3wtxcIUUvCUfU-p*XeC+E(%@t7yt_&l+Pbj@CmfY~o|KXg}qs0dh19^%PB;9Q<*4HxG0=TSI(91HUPM@XMsR@&AQ8a2b zGR$xS2wt%Y%Kl^{e47gG4RCGu*)#?S6HtESdi_qWJwa%;VJq?v~buo4YQU(=#%@c2_J%j~+Lm z{;r!_R(PkGAg3AP{+7d?W#QJEfz?U6FQkziOYq%%IP1)!lID%h*dO{ynS~}}t&f=WB#hvY%O-$NN`HA@Z6i5x3aEsEBXCf^#oSKpXAs)iyOEF4el=l&LzI zJjUs!A!o2m@+~*)u=0aKI3-iRoEl#l>0?+8#X04mJ+S%N7WL(G?B1IX#EVl9g}?G&!RmwBXV7X)hpPP z#;maikkrcc_m!|RXYLs4AoYM*yA8Ww@0J*L4mcz7dAeI;4Go@=z$3WQ z$h}RvzlVyZrgqucK+Oh@{ zzwW#@dDzoYR;BJO%K>4|kykY@yD9pSLj3|gg;wmxk#Aw|&Coq+*+g^Bpz!X7aoFJM zfD6Xf-Qvs*YYH^4HUH*g*Asr_S7A#%P1jJg&Q4e{>Q>+*G%&g{qpyfWaNcvny5!x8 z6ntOGuWTQA0~{t3Y0Yr@en~)><<~cZlhPM>CX2Z1irg2cTo8k#NtLDJ31rcabY(j6 zjo~h8#S_51P6{5;Y!NWp+uMW6AKq1pixfsdY@GxG4%3?2lTEBk5`3vx?yC1aMnOiM zml0uJjR4^FSd8qoFa=XVPRQ`d=iQT?dIsnBf}uQL@3?7OJ9Q7$h;W%y4B1U5H_Mo= zWIJPJ-dUNJi%Uabg>Q;UU8go1Bv{&fGvSOa{XYd!U)jd`B0@$KUU$;!8LSHP(3{KE zXr*f}5t$LX0~YwV7dMH{GmJhM%QXU1xJp1gO~P9hi$piddcR)Bz1x}hR0z+mY6*8$ zN|ttd1KzN!7rO>?B|NVLGb&A88|sOl>$q9b0~gyMg+n8&%c#qrbL*(W`+ zB(A!_2*Zn4sM_D?DahjZZlu<1k8n=K*S}3@t|MuwSol`HxZdRm=iHTa+M1WI%@s0e zk>U*)4Ky~fjCrDIsbYj*ht+VnzEyy|uB7WH@({=W*WPF|C>^9XsiF5?-v`hCoTF#m^ZNbX%ZIGR zO6Hk8d-lxiXV0GB%m4|l46aM1gitZ_Z*m}^ohZx!UVD9KBBBXLBW;NS<68kf2tz=Y z&x-r#K6(gwd>Dj0p;>saqrgXk+VltuQnNomv;qgl0j>aCqz?LKr=@ZlAfn`wvChKx zZhAoBws4nmWfJs}e_qQT8|8<((ca3f!kzfkl$Ts;T95+(`?0?EGQtB-*{yJ(EnQ%E zHjFcZid;OzY``?kYO+#(m@#zKZ{Npq%^=j1FhZAl!SYQ3A?zt8i`-zeHTk~bk=jk^ zhlHzt@Bqi!gs=}WAy1x0UbSe|?J+SzG-pM+EPsh;oU}_QS5ekT<~HY1MesU3nwk2; zMBO86G|fz;Vd`_Jn`ei=jw=1<72PP241>3KwJu#cpclWwf_+z&4JK&yH*|ny6rx?Yq7-eP|HTrE?}@G4_#oyLMw~Qg zG2_2jzPvSPBg(xBq}txDBbhy+{UH3C23DPM-6L>~o8x7QK46600g$M<9E@@Aeys6^ zRH|lcn!FyE ze@tEVEaOhITjZUQ8rU_x?Udk&t!IOZ2tiRjLsD3;f+2JCy9QBp8brs&j`1CPiERH; zI=V-JyG0AkoBqZbk;Y$~sn+g)lXH1OaAzKT3Tu4D*&^H%i4RQgiJlZxa*8M`4qe?* zJ!Itc?2U7IYS4>sDwH#+48ep5vQExhnys!z7g3-I{)EDud1-uGp#p z9I*JVQO|~yTM=(ZWGHJ+&WO?VwzjoV;KQj|t!{x08m|(+yoUCuZFO!9OIv1HBsmyo ztcnY~(fOi4YIibft#TVHu<9W?eWfk=rjXzl| z-tC`r)Jq%*mf!GkB7np1H$5^^uU}s=@s0iThEqMNAG=jSTd>ABmmyqc2WKmaXsW>8 z*~)&!r^Yaq+sb%z)j_xKDcWesq6MP`xwAWBQf!609+p(N`fzYXd|JW64VK_~K_a%3 zJ-8gp<>%7)oqVCJRvhIdpgT}yt&pu;AO5&GS#E2tVD_$}+SMV8-NY<$l$UH=$aE+1 zllQoUhPP{_xCa~MtFC;Y6!FkBn#<~v@;1*P)~6a>9{7u+Jl&ffrN7Rq6O@V`RFfz` z=&Qr?7zP}&2;jG+3D*|Jry1$e?DHQvFcf|P+OU@TRE4!9xrG*%?!owZ_IdkrYDDTm z$ya;OFd`L}N7#dw)o;1p1-)_aG`h84*%XsQCpVF@v$fn%p(0tO=!$Iqy5HfBWB97y za1BYts;l+X@_VUuY5df1=gjcbJS3E1DxG~hM?c<&I5VVA#lqIfH);wOMHd|UU!&ZM={+aON?E#vI(gR9U;8qB{1~yfQC&!ss$&;h9LhO8qk>EJTX&OG6vXo4{HG*U`yDkJ3cYd&#g;zc z=zE!&85yAln_7ld`8Td7`(P6+k{>HZ9|KJtY^#lH`V+WRi(#7ED`y%mn)mziOoj1@SC7 zj_5jD)?C?`k6=^z#eA-X*u06yWajJFy}R8Pw|&Abzf`*#%f?+@Vs>o?=iJ{F(8XKa zNp&K8h>Z9e@15L?j*kjDt;`(Vcy{<0IKlx3ftx#gXJk(&8r0ESY>o4|Q7v`DN9a)l z6sco7OU?u^kfysF8sNvRO%Hb&fo=~O60Rs8TrkuR)0!7XHU^mURc>__M8o$FRvvjv<@bt6qr%`Cw^ zin4sS!@%+J7UVwv-B%CzTs%e;#nC}#4bFGo?W`4IMK5@0#f(Gv7z%5kD6rrb%x}c` z9{%3k@Kg+)if_;|RzHmI_Cj&c_G_H02xoxfhaNi`S2iXmn@Rk z_V+*C1y1x~!0{}`DUcNNDs`uJTNg?S@d0nAnX9DD_~Q-jO7!QNw;IH?k4;tWH+v3B zo0}%%fLJosGp@q7_HKjJdzZ_RW$NJMTgrr8#LgA`tD~`e>Z^YFC!UR4u|d0n5r@Z0 z4a)ShANx`-N4*mht_pr2G4-UzRgY+ZNOyv@4& zHW;rmbn`VE%tP#Dr4tDR-LaH>od=}VU-RHbl}THC0lihB8S~71toLx8t?w#6_s*V! zu;)N5=j)f}L}H2qXu9e%%nbb%(2X*p*V`|rG<=Bfdi z(b>I=Ec!AUx5wGWgV7Qi2mM$i=+<%RpiM9 zVl#zq-;(l|JY?Mmg8+mZGK$7)#n)I^wXd~!5p@kj>vTbK#@=$sFU@UNZx%-}EPD}zb^;2#loi8uSb;4{)pmq9p&)!@! z0;Y^+cGMFfGy71_^}F}k(DvFR?@D5sE8`M@$yzqpZub@d_!rvv$a@z^)*tX_xU|5M zx&=0;dGA@E5UmV`>w6L;M_0+=l5B^T6jy;H-__F9de)W|4f>L@QEoh@UL)ekOZq|c zL}%r;vA#PrkR=NfLpMqGlH!-_3offS^mu;FlT9pVn$eWq0puAqR^oDNhwXk*uGf-3 z#bwFpO|Ni*59*4V+0v)|yyO#llqmgcF0YL9^>#-eFitjalh_|IfSehV%Q=6P6ib7g zxr3kHKxIgdCI4%q1SY5?+}ChT~(?VWvD zUd0H`&>5$A+%En9B=GHrWfbT4e2@M`&eJ-9oMg-3A;rHI`iWDzWQpxz-+K-Fg_vX- z`V&`=%m8kAHeFCqyPIGJRvM<7UNoUDLmG<8b{Cijcd*FBJkN z`4{VGxaWG!PHy2Z`*;AKNBVaZp-rPhEj?5Ff%u;{022p)qkzgm%}Y$2MKS-P2yL4D zw*vk|!1^00owb^XCvZKVvl04(civzR>`H}Qk|&TkRR>{f zwN@Kuy*sa`qrH5OCMovXgb;-PWU}vOajLIgG)w%?6Zx2iNZUr62OE7aE zKvVwl!-yC5?o!;ay57~vVPO#wPJ&pRSlcuAj5AB~S*d5Wxj9bbbN?7Sqag4~r`#z^ zQ&&e>*5z=sw<$pS0O9?x40w@ik@lz;KPVcI%7|28(YUdYIp&nXwNZC`a?rsHRc$A1 zMIuD0Vkvs*e29W;oBN32(b&2L{3;;y3cHq|Jq`vI) z!Q;Ex;qr(yAKOB|&}D^6T_0OxW5ssXoo#?3``M%o9e2Z{5;*WX>3xwLwv|_AD$0QtOeiSC>VB|&myaFT=_2R3IJ>oUN~W}QK9BFhG$^Z2?VkNK>CW_ zqExLDMy@g*StwjI~+Dp_OO)2$9bewbg<~wjX9+NFyk0iCA%G_oT3?%zB`%EpPuEGau+pHc_2~ z9c|qB%VqMDiA#p?V@JDQz{L1{>y2|(#g3M}FnSJyr3OB49!jHmm~Sisap0oNdH01~^l?Sxi9lkUyOS^G%5V{<#DeX62>@JcQKmNzWa_Jtzt?tT(H1?Naz(56{p9F ztoZZE+c;a{rLB(3pm%k<;~@efZFzp82cZQQ_(8047LZIXCB$|y@V+`N=@Bs6(G)zQ z9w-B{>^o&I0$I=}3KYWVXv+rXB9w5l zZB~Qp>pfQkX7BC2qRbRHIdxQgjL_A6e&AG^xAsKq*p_DLqRc!6c=3U|jWFpspWMBY z3a?U_K)bHOM$aV!+lxN!OFA8Gn#>xqAfb;=7&Kah9!Y=xW2jtX;#s8}*&G^TKY!l~ z#Al~BW`)5-;72UsyddQS2_v`A1(W&6huB-V&I_$3v?vy8VpOm+%G(5j9tZ*Dk-YSs z-(;S-R)|Sj?I{>9L}S$kB&{{ZTV_M}A>TnAAJ0|%o>2bbBe8nwv@A0im)H!0iFxSP$$9#lEmWX9ZK?%doLaBY~ z*?r%mBJ`~B+XUpsnbOr}=^%E22RL3v&ezgkrKP>H-4{76=cA_j2OqfEMX+zV`tDB_ znj9+}JwM`~jUaZ<*ckWPNh@&H)x~Z^)Z46Z9)OVMJLdM7MO*61+QM9jW%|~)eY=9) zYUqlz*eRMV$355a1H(%&6WtAe)bS>B*!Y>jT5Hg)iL6Z1zKoVc|0Y9sl4pFNjP0-A zw&EvAZDKXblXLx;h|eZ$f%h1qI~2q`=#g2bgV8pO3M@ z6bDvvsRY+2KQT_Bfy|GvW*c5+;T+^=dK5x{C*pd+?#mto$*_bmN&GOw4hYBaazG9= zw)0h^vU8&zfCZcA9Uv}ffw{Anfk^*kwKq{-gy(iCqTFLQ?wh>}>5|?9O!?~A_SRRa zfsif0y-S=Y9y5oR&PV87LApQ0yZkOYDs!7OD9_s>W5MA4Q=U-pJbOsi}65ekxDFK(ftY zaUodhAlv6*U39SNXkqSU;^JUID$XMOA^52q|2;Qa4*BoG0+oY9`vm0HBfy+EqcjAd zJZ%E;Cbe!}2xrS2-tZxP^!lrbV?7UQgY#`_TBSbi(-UhU#{*Jl+vFs4Z$8D?d{|Z7 z%a|H$wzn2rN7Sruitdmd`HZI4E3-l@_BX!oA~`4wV(C$N43y?WE|xio%4F~jSYNWB zFOzliie@bC^RPYIfuo{M(wg#P3RqF zm_1fQ^ep8Iwv-H>WX|6zg!((1+gu$FsB;%wVDMqU;^WSy+pX7)7VWRBWP z2%@zpn(^^OnDnuV^q3gm5y9Jg;0e|Mgmq^H<^JM!=y1$NX+_X5UT+wR-`&4ogPhZvmUypJ>kY9_r` z7f$a-NbZ(j9oCc~b;Td{n$bXbzJ?vVRsb6Wa=Br0tKzRQ*ec=bJC>4a*9(ei*3Upf z)j%J)@X(n$INQp*LmC{*ViKAK+1w7%tTAG`U$6Ccg-@O1gBfnvig*8d%*4m zXZ5M+Fz#zi{2`;BtGA?vIN&$`FpVf!uH^Gb-%)h}hoewevO!Bl|`F@~tyA?-1iR0nOolLS`bUaZ?!z9gq(Ytj` z*<$xRTPPkRA9QV!ORQbe#dtbQkyKwV?kKM^BZM9N`Fg-LM0gS8XSJ1e2cXlAaPS(?nWy~@!oTLoQd6eHBZMq z99Hb5u@8{W<7|RQMm4TMd64nSOUp$Qu98NC@T70KDjQDRp6+dumM;0M^fx)gcyNm# zc-XO~kZD5%=3N!&oKHKw-(d3R_kK+BZwgd=+OsBcqf1hP+C&{)t!!{@3UBXd87qJO z(#dl-(pq3?7)NxR}=&ud1hk3 zx$*pdHuyG&RMXVGI?izbFk;UG64uEWv-c#8XlWAp^Qdkj?TJUxk>T)kR$%Irp^eg^ zT*N3^8c1p>_Z#!oVB6KQkJ#FQCAMwUC>!UY#K(d{6jhEqM5X)iWN;0wR-7)iUae7+J5#%M z=nJlwx}8Aby6`X(T(t#F0M!;6w}*2|?|WuC-64Z(oHqvh^3tLz#Zd!vlj>`q2@(6z=3#{1-j7o|M;hl;HVjKRmf`v?OATgnOT&K&koR0@5#(?UlUw7{KJ#esCm)c z4=Qbk3&zV?Z*5Cvuad#pMaaubpdb47P7@%xU`{-3r5u~{;(!q`o5%JEFMyKKKVdl9 z$aB@Xj=fg#Er8qb3~y0lsC3}?LmjH1&7~c!+9$VIqzUU?ak11b>VOr{0BQLdfKny!rePl+Lwg<$M~Ehe)7$Z= z4Ub@@hdp01du2jh2KIx{_eJ?xVp#ok)9ebL&dP&}aEY*Y4Lt%xIRGm|%01`)Vy2B$ zPUcMsrvbT->$rs!>g8r`5XAUlM}UkB)5q_lwm2%q60?Y~qj2(4Pj>&+s~57l@UDTp z!vSDKN&}eJdq9qN(+kQC>$9L)tsW9N@cmwm4&d3ay#_Ps56FE?1F3~8GZMdsHe^2? zg0R_LBaW%R!x)#>wp-inF!$%kBG944XjVf?k$u5%9Im5~3dQSBY(WFbu0i{P^^3w5 z#Ze{oVO6{!J1Q31ZyGB(4k7eQ6&gxQ#U7gy z{dnQoKMA9uK-E(Gp!0_T%VIepFA|+8ahD+HR@$D(390Fj>~rWUQlPMd#J+q+Sf`v*MP@gWT1D(gx3>IhZur?(rRbPz)-fZ@17-x7UL@_k|Yy!VgwnqH=FCdjpn|; zh^9Mhl4y6)4L4qhjN?nzeNiu6cVv5g!O0~>^EEO+;56&L#Ru|RS&b==!qEkJV-zhE z6i`!Rw0;59*CN+e<;|pd;uGd`SnaKY94E$&+yHw6Nz&%2uAPBsk1%CkyBGzoBn?XF zO9?f#fbg_|&cUI__&rSF+7kdw8&MT>+(@bIxHY8~scUA4*w2Ka5rv^(xb+R_F55|Au_he;yl?E%VrakQQapl4!;2WqtHKiObTO zb1mO-F$L>;a;wQXIn}&iKDV8j{j7QSy_m|2Cwz7wH^CT+`uI@~y1g9)@dcj>;~4?s zr^+mDpK`5aW2`Paydw&{vjN*HO2{RFT#sBj3rhNy&gBpg3U}xmRGJZ?oVh4x!{FAO z%YAX&zy^`TTow)Lp5KU50FP^K+)g$*XSPWOr<_&DVfJcZgHm4THkqN_7QQFIR4u~w zWQ-oCCUk#&rsfmvT8XlTWcP~gf;`yZ=xR~k3rt5o**n91GD}q-MI!dOPwq6py5^a^ z#Z`_?OaQ?j+#sIT6#Qs6o#*I%eBc{VAI34T)A40B`t1B*XZuptq7tiBMVKIpZe7B$ z@k&v7wYEGZXDU);M0(@2C-A0TttkWqjdP#EA)OCZdRxA9SonMHvXIfBgbxm|#&+id zDb$KI3=Q2h!0<$bH7ie80y$jIPu0D#fU$GL9&FZyC36I@Gv&aHx;ygSL zuB_upH&uIa3J=}O=_q3P(K>m81rMi?oou|4aut8!A<4oZzb}gk$NZ6nX^0h&#l6;m z4c#l*OmIJ(vU$yD-L%3NlIFiUCTxdJ32QtLSnEjy&b!-0UzH55gC~LdFu{VxlE>f| zivMtxh5YFwu~n((hj^qg=pcz5hbq<;+)%aHy}(RV6R zZ=ycDgZwA52(;3n_BZ7BgaVEgjv|SF1yQr=epAe{zhCp3Y zpXP6hwZ$Z4b$^yac4B@plLWz&LxNGD6%LAe{!IUwe4%TC1(J*Z+;s+YN&AD}NICi->s%;>)|X!@Ypkvp{J-DD zAf=@*l1k$5ls5d!C@Bm2jg;l-kA3VAyv+Zyhm)@RzutOB(Oh3p-M&;H`Ex-T(cj!_ z;UQXhSCHTG;)P!iFtOtP8d@^SLhZf1y{fZQO^$}T+5c!SqorE28vzJK`b7K^5wzwM zdB@^l@jVzOmR-_mh12SX#r>G*EO|&D2FU6d7y1Eb>FZ>a1HHSglMpWNGP-F<2*5pf z6%QWIs1`gb_{Zj8qz}`cK2Z6A<^kY5MN&kj57y~FN;NQE`@40y%*-;w#)T4BPDD_r zO6~SpJGNQ&(w*ShmVR+8ty4x%tb+<>9a|%*s`K;nNxD5n!Jhtlq>jq(T(;@ZOlV{* zZmd_tuUAN8>|2@Abcc&2nqzVDiwpB5`Nb_m*Q-wvQCgaCWm!GXsv(AZ3$mtaUkSSa zo)*a+ewRKv*zw~Bg4HrQRFj$lWT-PqGL6-JtRLrDv5Q5w5id@YGU>nYUZez}7*-9d z0^9tC#3aH8u`eqFN2?Cjn(W5$LAUkv@H_Pdg8Kja@iVSo7L9<1xy}Ap8ShSjY)h#Y zoEyZYr8$djMn~3`_m`_8L`OaBuk0j1-9;D}87HvYBdmLeUd1(siwDeqJ|)qdtJm!g z*Le^LoV0#KX0yd!dbA3Fi7NE%fA^(9K`}aYK)VEi#s!$ma1{h{?kjlkPu6$X4Jm^% zN4B4OuZ-7)yp-_k&C!eacISTa9qF{3*-BMa)eh_8iC#TqScXPUeHg2#(_t|Nc_eN< zTt;tiZ@)TVkwZV+=;!BW5RdWNn|y*n zR*WEn*?qPG^3aaPao8lhJs z2YRBVY89bKi?9s2D^JK{C_}N{+BQRjj-X-+RDOQGLL@I|6${9DZ!n+VAWFj5q&1!v z#Hvlk&%SFe^z}r^kv}@WA3Rz6j4h!g1?ZV@`y6lEH2&{O$a?`XsW|wpVy%GoGy309 zm^UZg_tt`|x9lEZ0q6OcncRs=onqXnP?8CkOS(o+?x_Q|EI7G6A7D)4sF@FEQX+!w zLG0HDhS-t(4fTjXKo3kbL}!u|4*CSf?IEJ!tw!1Gqq+dyd}xg)rRs1?%LC9sUH9!# zul>d3{o>(KUANf}acFcn@b#>12XHwb8H$>5xKp^*Xi#h-PwZyI^h}9k*ni>( zDKR``Cr=MgfLpV%*Ww1oK1BHM9IUrZ02fkTg(>GQY=|PVhCqt60z`H9=nUQcjTInfSv>%&I6KNf5G5AY8+BOySdDVXnt3}F+ z{iX6j|Jw7UU8BY2%j*ZQKgZdhT5emvG!Jvy`O{Jbb2W(C$o&MkDN`5E0S1*1Y4rOd zCSiB0yIOa&`FMV@O`uLu-eI}rS=Pp3Z$pb~bj!V_jvysIy{{$tRRv5LG%N8YxvNooP@wN}T+>~2(8 zf1tH8*_-cWu7Kxm3JGqJeqOpMt#h?ZpEp)3?=_1bvbh0o3YHiN-W`?f@EoxC!--Si z*8X-@LPZdguYN#p*sC~?HDQ#H;#g7T%PZkRYq41R#7nBAr5;-v$H!p<>2cd0Iyi0} zp0&cwPDW2XL3UQnMr}T^&as9*+i-BpY}K!5xF@tO-OaxAtaG8twJwN2P4*j9NmQQ+MC@eZxu*Qam}7 zVN!0gGd6(ueGQy(ym-tIMbH#-mL_S5j+5*SzOiiCm9-Gj?OAX>zs~SlgQATuDFMuZ z37@KZgw_hFi_q%WD`B6X6^R%;Jf#WCIe*3^xp23lEYE52nT<;BMKC(l@2pv*Ql{>` z?KjLQT#G&ERzpJ2R*C~=(=?XA%>a=~wnxHJTMG@QHOcd7hoz@U5gU=tU&X_i@7Wri ztR;P6z<0_veK zy^7YU^#ziJ!Y3b5m9wlFc}_M-+a=MX%hnuc+d3Ap3_k{=qc9g(6CZKN4P$&hF$11< zOIap)AJ}~?;Ecwulc_Q;K4ZT7RSudHT|Dc_PHla-4`nLtoSt$JGnalJJ>j9np5|P2 z{mKV|u$1*?(bV>!l)BIn7nq@DDQ7B<2XkxB?GyVvZC*@K(ohjHW&$=bZ_34otQ7MY zOtJ?qQF|BF;iXL$W)!f}@tn`YL-2t0q)AJ~&d+IHRAIXFOH>!4-MI*wKo(@p07NS8-09cZZi5q&2CJ(&2BFA zxz|L;s9h|Bhp@&EZHfQlX`sYM93m1l`O1vsyg#hrrXdlBT%t4FTTX5`@7&(P`4LP+ zPiapKGHMpi|AuI68j)?}!b*-hjNB?=XGG^g>q>*#h9Q}#sUt%TBE+&_*QV*Q=lp#8 zUR9J<8?BVrb^Zg3bZ4&#j8#Br%=)awRPHm17QSWI`$BcqFMrhwTS!WjXlG3nFquiP zXd4@dCwLXR*2ImtdP!pB`j$mf_bJ(r#F!adw{x=JTmy5249CkoiLcsmfHE{ul%A*X z4l+%!*@X9t5WuM+0}h=0^=};ZJE+I30n$kuu0j{uw({hDJhr`Rd@g9b_U7=}5MSK$ zCOIQRi*2C>ZC1HNgOefg(f71>JGa*Y<7#On>#YFWW1G1{`vG(&zWD}Es?ihe-GXAG zgd=A=s^+7|iY5kQBR8_I572l_Jyz6WG)YN-p_9s4){o2gsS)$)FBJ`^^s-89i=NxP zn{$eZ=&t%Y(_9#xrNIpCE}xs7eyrFQJ&2{fhg5E}*f3926>>Mh?tsDzZT1n?H^CgN zrC&{V*;Gv&*LhNW2RE{H-)3_U3|59|VJYVBk1Y7DhLvM8LY1P~Yj5EocE{_MrzeG< z{b)nPFK*O=JE3RUz>0%GlS*rL|7h&}u=|Ze+`UWNN8+gT;~j!I-%-kO2W|NRki9O< z$ct4@2^`n1>adzWK9Iu5F(I?+I-|`A)|2aJFqZhakR7(#w1g++s$L@o147F9Z<~cP zuL(M-Z4d|Qv6s@X%|?%htql81HlJp`<+ZP?4*7L-a_msg?%*3sZ4RjocULJH%4#Y9 zbTcUdz*e?!Hg%Hz)hE}1m4;dbj1JsAJ3Ir^4f5MKz5FgfR~=UEiIIHa>j@JmDw{2J z@%+=5b%Fit%}|edFPkd0)pg>O9J&Jf(vBS^^VFdQkGRz6jZc&VxDB2xzxXQNXKOtx zYX(OM8L!=jE3AKvk_Xp+nNvi}2;WOJDTPiP3&D0uqSBrc36#$V{V#wgpKEAYAKoGL z&g93lFERh(U$$YSIgebafLc$g){m#0)SQ?DlgId6{9mh2JZ#FF-(JY{wFk95RuK$e zV*TlxO+b0%s86y#WcuGn`$M8L2)WC;^l6ok+3Zc0{`YL4g6BZpB=Byo6G48o6!th%_6;YU^rNRDoBmUf9c_A&iH}M@ ziTF?tFe90dEcm~R1J9rWIzYr>{IT7fR-KUZbogIt)#r-+Z$V0V$m>-SeiAXU67X-m z9}1uN-hX!u3-DfLIfKs_|5ltjtgU?N6jACOd0Dk!!=+~SzZy_2!~fqx**`uXnj-Pn zYZ}mG8BajRXOhgpe;5D9wlwO}ZRi_@-bnr}fw%U53q|;Jh3S@K@IT^u?*Tgg58KKK zRvqODFTLUXj|r3li_Cur^25mI&i^Fh|8L~~pD^J zD8XU3h=_mm zB9S4zC;j(_neHar1*L0GuMi6`|Mj^>91JtgG)8li@l*w~{q?8F_D4_+Y$iPFKi=Z| z{FrRTM3cetx9+Uc$B5E`!bfV*oGjOJg}Hu2I-e)TZfR{~Df= z1N}|l8|N_pF*Jdjf-m7Tffq<~&#Nu=K=+2LWBwQkIVlY$7$%?c^Tj_$&`m)R03URp zO2AFTAQOGoUqRBQl2DS~6WmCp5L({1VHEOnUD*u(`7XXYq{S6*7_-le3Q`$$w1?L` z+^WDI@YwX_$s|voJM*80?hB+?S7TeO+8VZ;Xp6S|`23oIw{7*#`**}zrSP+as9?a@k@o%o<5E8ffAy-ql>#nM-1Le%-&2}@oa{Oq^y zhy@iz!@GkL_HH6)xc{)QuZHPMb8M+aXUh8gyN=sXkZ)f$(Ok2iRjE`soDJ3I&~KTc zjk`@LHlMdX9*MX;3QFE?VU6GfSD-Il21~pQ>p!OEX?FYf5xDz&%G3)-^#szE)#73AtsxBg19X?v;YtL?xeq&V>&tsN zZwm%ggv90@gTp#9h`t0-phJD2d7}Fz?^(^H*El0b)wzicW`x9smKpcl*&E|eE)UK2 zWM^j;+uL!fqz?<6C>hkSfH=eMrcWJCp$^R#)+(#pGLN<*vNFhU54aUo2{)6t{&c*l)p9raNPR&`Dmc|3BEX+c1X%&w+G4{T3RFv zjvW#@A?Yq#n$SSo(viUO9R1JxI~}M`&YByH`OXI$y*e|x4!KM-pCtF@%R}!#whT=; zgqcI*58L^=b9^jFSgLGT#U&j&sbJC4)*cBbT{K9yo;TqhRIFHPCY668j{j>nQ3U!{qhaYz z#k0)*#MokVRDNiSUbgs9PR(-t={d3<=0~EfA!>x($*mDUH)g23%ILk`sqG(j#$8K* zRtTLh`04s9Wz_CW21jCT8wBB&7OG!3?737`Btd@XkSYL1siZ;^F4cA~*t(BOqrvS2 zoCgfjgOP)tkPE|fq8j8p!htRO`i1`WKpPn2tNA6sFBCDFCph2kk&3Fa#HII7-o~jp zdalAp&87Cf&N^R;BBmC+Q8@2$CO+Z*sCd0$=LglBv;E2;aV)pe@yKDPmz5^dqh$AOvmY*|f0 zYLX7uGn}I+G@2j-RHK@3LSC%WV4z z&H>(<{Z*%416S>Kaqk@oUMX7dk%8Fz7k2KZ*_n~0T!*HQMA~{^aIP2>CL=w_N&3Be z00%v-%Xa)Du*r2!OOu@G6o4st6a1G3p@iGNNE|OCF0hQCYU8Zp1!VQw5^{gJ@`}9pxcXLV6|rM4V`kFJ;NzZ#2p$*NC(hg!&|9rl81n1Tfc*(< zb>1;NODyQ?M8*tLZ5~$%{fO(3b8io2)5#=O0ZiW{BGG%fjx75y#n6AjwPtVV@+ke* z-Ay^RNi+Wh7BH)5{~N@si!pvuoYSV>e+1XakF}vN=rYyDnB}vY-Jaat%jZE?Co~n} zjV7{^?UCP{DBtdUwDZv%+M_*gQw}#lCm52bsa7?nqlKHaH2Xoq%+qaLIc8$<{#J2; zc(nYY{9vWKEG-=An}Kd=>M7o-97sc-!nh4%Q<%`JPwDGBx$9EG8=Kz0|t(^FNA~>c-1Ib30AH}3Q?TDtQL+iIaffJ3(%1FFB zAwvc3k#z!Vc#dNgUvG5Rc^=!5t6h0S+oo6PW$a3$6IJ-ZT0J1?5pe#jgZdKDn~yIsUv>&TW}?EB9I&SMLyjR*F7n378*I-53;$ z>(#5~SV@a9e4WuQP*u?539i6+ypPgUyYr(0|GGz05v3~HHr>Hdd>R(Ys9RWP{=G{2K6 zC51u6_C*(2)vnOI!;Nh}Kglo6zwr`Z9K{DX8}vH*VgR2EocZBhHTDIX0=E@$SwGA8 zgh|1nd$QIw153ZZ0D#}mQl$6Uz-7%578*OvRsJe5JPS&L2JREl&QT$m%#?}w4ST&K zySI>SKM~~*a9c=#B(aDa!TpKM{L$f7TSOo)Wq8B+})~!}v$- ze}A(@`iKtjpOafr@4YQ|$_2{%KH8Ct9&F)}_(=1ht=xu=ieCBDdDd0y54Z*FQ(q-hBLyh`i=L$|Hia^tA(r3X|3~yP8W8wQi?ztG8BoXJ zclCbz6~gH?x=FzaK2jhcW>PhP;VGGh-EFujIRqKMybTBx?H3eD>{nW#_*H-=K2=g8U6A|d2><`PRJGEuQM0*3Wv|M+e4;w1fz^6& zi_Wbl+c4Ut&p1fP>Pt=`PF-xLlkC^gVtr3!O4lS1YDs#{N0ZIty^+zwGpFvhYk%Hs zBO=p$pIqM;@^kO;ou%MQr;oZx$asPLm5-m|VUNv4^;5-lbzwh`0TBgX@yy1kdxcjp z>_okE?E|ueflv}#UeZvghph8W_J5u=)<|R;FB6&#WVMaHkFJs5xvFV@LzA>=Ce=vq z;`pxwyS7%fSy62V*kHi_>LH1rqj4XIKZZz8RQ+{go5Fl$LUaGgj#Vj$$6RjZNt|{1 zwVX7Vvy&Y6`J~AEuHxY79JdguzotIcRLk5{ssKKhcnU!uOGnzYkZR<4ar)QWIl+t{ z5FdmvR!iRyV^ z-;%9S3&ui7=AT)zC&>jHLKxQd01VCMhsU=0vtEL5{7dA@{t`dy-s`>9p-1ivu?C>0pBxE>F z?N>{*H0mX`1_ceAd$a)zuQo#r*_LjTA61=$)U-UEA~UKPFZVxPWOR9~06w zzehs?VQemrwKmEX4ijycMN6%}7KoNNM|BO@)l>yvoP_cpsq4;td84w0N1@JnS8jaK zJ{ynXZX-lK%0qKoz9nB9 zjBN3w7P0Po^0ss|c-B)43%`()OE~QnQ|L+gEN9W#a;JsfuDT_I+qthC;f|fN99?4g0=ue2 zXJf1CRHoSwuN~nwNz<5f0O%o6WQhZO5I zji0$V@3^N=h$T%)zokLe2 zPL|CUm1^;iEK5l3Xm4PmxC*?7w1H2zAGv&}iJYeAE5_i)MS0kE--O%lC+dmqB+doX zy*uAyoKY7YU1O=Uh5Tqd^62gQ%()1ga{;ViIE*ji)THc6llu<6)BDW=FR-?{mPB#t!fOBP%%BL zyxzrQ&C&(eT2ssQR7~LM?;NLG-R>ldY5Mn?O-osV#Ec5n(cB0Y+tJchJ}rCaBh0NHDXwI zC?XE==Dnmp^JBh#29?A>k8g&}-J`iU7mDMY?OKn{3KB=Ubmdi@jru448tv25HTGEn zTet!*TH^EAoF~xjCIy0fqQRBqmbE#iuit8O|1RH1q1(fcl@d~-X5KuT@ZPM_%WD&q zU%5^g--s^EqHY)J>xfia3mSbAkyVs~6xxc~ZOyI>9Q$AjfphSdu`Ddl_G&H66*8(7 zm#Sk$K2f-(Ts)#q^R|Zk$W5#fq~Q{qeT6{OoxP?TA$90B_H-e2E+)Z`uHwua_?0Ea z4*^CMOKMx})y7jL+FOhEyb#1`_TZLmKD7Aih0}`*4P`8E+h)>Jd6B*#Y~wVIVVbXz z4HyGr56w!y(yn7PzJqpotM8`EPA<1RN;w?XQo(Hc+Ok_Me%19-v6Z6a$7`z*@cS=}t~p&BbqK8Fz!hCV>&p4LHGW@oaP@Z%Mt zuEMlut|YpZujZ*_2US0bSlteL6k5pg_Bo8Rvl_0W0M_lO3Wtb|P6A7&WymAY4u?*x zT%a^`1f|4mv3FIc>zK?RgrA6ppktqw7>KQsO~O3&FM~M(d=1Z5PTEubs*`-aN~|Vp zPjwtrLCPP_@BrIV6|mHAbF|)+V6L-8zqpmyz@1E!a=Noov z@zL+MpC%@MPkVdVmYy5#i)B+?MZJaty`B^vMJoVhtOPKD4&_VLdlwdVR%2>j9BwyD zrEkpjir6j{8Lr)U^iPiAYtsP))@&fKl8q3xU*rWDq56{+=%#xybBUgdS+G9A4)I9a z%9WO>JN)gFD7u$THa0jM&c`lA+QWI{LH zj0tHOA#la(WgXtO+$-R6=G&yOdr$61oa3uCA8x<__qIOiG zNs|F$KcNs8cvS_STfSWZz}As3|9$ z4GJ3J%#;o{{8JzDxD>UjGa*gZ9FEtxrYIxD;8*NqOC)KkN0=3k?84ga0iS z7LZY|NqQ;J*XKoE|H&MxfYju-+aFDHU)eSeAbVPd9oBKZ}nBEz1!p+_-`f znAB9nSU@Fn0mxK7zxGKi_wH7oX@vHi+oLn1YwwZ{tP@DZ`iofRoyr!}7kBR>f4H0v z{y^UDw}YYoKzZDyUFhlcNaBa%HXM1fG=ZfdcmRSn(_jP9AsHbBXIK=S_-4`QZt7I~;F^$7Y-YEG%t3Il#y!9aK}zAdEOK=kGhL=J2JJlaSGr)d+<2G zhrURUC+m&E!kBJFDuQ=>b|zwUaGId!E4pP4X0p@QFy*({1kz|Ko*$NyJsEw{_!W#eMDI+m0CKaCGvW_P@+Jl6`1-jwW zShyGuh;iIAGLu_=w72GPsQCUKppPPd^JycW2ja)$K^&j3V13p z`IiB3HgIeW2bSyu0AHD$?!I&WV-p%470O4`CCCrty7_;QBaFr=>OA(IQ5p z7afzaRpAHzCy;!nIsTaLXtCr-01()e2EVx6!B4-KUieAdywn4rebcq4naf&kZMBVj zpBH3Y(`U|M5~t1Ep6r;xe*jO>zpXdwME2FkPKV9IWJyHx8Hc6-Gq<$^l;|HV03i!y z|9eR}DPJFM!nl7C2eSZU_D3$=s3CRIqK26MR~URs$Oy^6N*Dc;pUn^fJibvnMHHDf z$}=VUCr3r+OnP5b@|39B{2`hqgCJ+ye0@WM zGr4Mh`;-4yBf0m#jHFp|Gk;tW@{4{5rT&vRxUq|s-uo>1n>qzbKt^mDBU#J8fAzyw zzZ47F_m_3d*7GHQQ}f5@>0JJu5Hs$}wXjIi8T!Sa5PmRP2G;LiSUx`;Gg6ec0%Xqg zr(KNHAfN?sG6gLC7ek0O4$1TT1Uo`_mZdO#%#|i#oWigEcee3(h(FCRd8{DW5E%; zyD}}5WT|4Qy3n{G&iA{=U&-rq(-C?;?_)*rn(X#ob3V? z$(w5OSB+)vNFJ=?qMyLDo|*$B42IJz)$9WIPW)jeN0&DszsQ9?C;xJ%`KeGJAp-W! z>GrP24Ctn_+}$0(9|{`)MY=E>1(G8|@&2bmLa#UAOv$i^m8SDXxdoY~^UBpEhyKOg zjX7KdYJaRvXTf@=iLxwdfB1+|H)&S$&xP^f=j(>9gdq1#*tHfb*FJH{a@y^m)6vHo zdd#FL^A!cNL8(xH9z@%+dNn#X74XC*U`6tmicIdQJYuj>LZBs7R@HW1cyE4n7HtHf zRGri2^D?60jXcE@X2Sqa<=hx)! z+Qt^8YYRK4!lG1u8;UIe`S&7G-Uds-=eS?D+}G6+@!_;t+jq|RG*iA0{h>!IAoWHc-`P+U!j3>}TbIf5B!*Sc>MCW5St|JGThAI#8SKnjmb!_g; za0U1i6~>Iw%&-x(MMF4t(MAn{X(}-;&IqWB!a*8bd_J$C3w6+o((ddaXk644JyMd% zHJ^cOO^vKT2J zi;*I_)b&K<8;`sRtUcvL`u>Cjrq|HZMj|cBLGGdk-lk;eHb$7~c|%5MvGM7Ya5Eo( zDLWe&X3c$se(G>E4#*q~GEDmyA^-)H@)gC@2so?BZnq}l4NksnK$*>DG$^k%jg0ZP zF#yc`!yeDR`Ac7ZPm{v6s5_o~rScSOM0GSyO(|qrE{}yY9tMTxZ9@g(JY%;riX4z*W;%6|0} z$c+PN4dH}xWml#9T6$rw9v03x1aJ$mQ70eHfq6Sh$zNI8cdGLR1w|2je1k@{XFMV! zZk6WNV%1n{s@Lk?GF1pV4UqAq`xL>XX$Lq%&~zHGbO-Q()$^{q>LTpkm7D!WwfAUTZB}|X0S9L zjI6}-QFO$h6}woXcq--#nuM}-a^L#vpg++fz4CWIhK#++L9;2O3LqzCvz6GO<%fGU zM->`ulM{_w`ufpW*!&GZ)bu**9gD}9_Y?B^JdtPOC!gtfQJn~NzT$~tdrFzK4`hpP zNkr>oGO`Q-H>?S}F;l)GXB&f;Ao?p{)h-M0twUGHq_$<8BUrG-yxub^8*`T*1?%W6 zv*8GZO|Xzzs>*U8t@vJ3^`Gni#CPPLk%c@|Q_1}dDK=+60?w>)T@psT!#e8r@mjAc zCgtSd!{g>PecwsxUzsxBAO*!6IK@M^5eZF%J7+sV|5pvTx7*kTz%TL~G^6$vi^9<+ z0FgIX`&DZ5XF1}BNhw5#<#@p-EJ}|RpynZep9@|9Ash)AGR~fTfclSO;P~Hef~r;u_ynRa$jWjnaPa@(SHT# zP_lpj(zocOmC{vHDVN@ecP@kM3CkndxHPMpXFPgaTD_1}Y?8yew`+ATa`$HyHZYP< zf9>>rL!l}}e0sR1+{(C*?Gjfr_0Yq_>3P~c`F~t}xha5kq#qh_6H|Yz9VJ#@2!W@* zm{FH*kKsk=6zI5XR<+-0NmO~tW@!!9IYsXpHT>~i9?0!Kp=Bjn%DA-RHSD-L52NiTDp+PsI< zGAWl)UFNX8OyQLfUfNbHBd32F)xn6KuJ__{O_N#&#^A>H(!h- zfT?vrnwc5|@hN>StQ?nLrC$ujkc*@^a3s2!M2pOq&lj{`2A#*r&U_+Eb(^Qj!;VEBP40(FlVpaGfJVKRsgCYXz`Z&<#4Db z6d+m_oxb^!-QMcp&pY}YB&oG0*+>Fqmda;_ZZmttHnptZY&>IPFsM@ip^^js+FIXq99cVq2?;M@Uk;~j1+ozKUB zb8}PzFm}*ObPJr;nLq(-l=n3Wz)YA%M#Wrs3@b}NQM=ennT2@Su8*r zeg2uDUN8{oX`!!k=lMo}`{IXI%no_^xeSNbjF2wfWaEVDl+K~ z1bxg2k-P&`lFyla7zn3&H4mpg#0VSP<%9_3jCtC+a)HGb6x)*DtlMn|P7BRVj~1p;d3}*(d423;8=Usx7JU^ zt&M%|x&Mhd)~9r2yHvMR&4+yU7IfqrWFIMrG6jNDu6~(lr^4*`S)qfmWFQ*E^)nR? zAebRciHC?Q-a?nhe|2}8$yq_S^Zcp?6R24LvBQ9hs(;qfPe9=E*Iy;h%!iaWM2vHL zD_m%+<25EbkgqW&n|r=bJy#CGBy6&pH5GozJ6Tf@ZkFRX^X=vj_Tmy@Ba@%KOxVbr z@=&sFeNGoB)c~duO~q2V%JEzQhMr08{>pacj#L8NIy#q&cWzYkRPmjT!kdeoA>{X> zAobx+s*dB;&9`z^#FAE(2B;Fu`Z+_)R1?@9y8^UR_hx{^1Q^v=sAerU4o;vrHk{?% zZ4i8Q^_C>=o-3eUbplvu;bN?dz*U!}s;#$sSNmb~BkycsCYp&Bo}V5;S0EHYDE(RL z?~X@`IJnXJGn>%?nQGE3&e)t829@Pa!SsdR6gT}kIm?y4{|RzSu76eThMJApF5B@; zrJMOY=>o;zlV#E`_iqitNP;c&4W*8gvdA5Jd3)KhgH^;vU3nh2sKle$3M7siz1<5L zKnni6i_zTeDXJt)AQ;nQzv~|%*3`w5D*cg)+^m;9=iZd4W7yQqku!?3oCIqpSGhCn ze2UWJA&Rm|d2y#V3_f27Ifr4=Tsx>+S_NVXA18rHXlyz*{_@c~eaia{P0~DImE`R< zoyyn!Qt8y_aVvIk*%IGkLwf)z^c0BpaS&PmLrNsirrWlPWDy7-@DMZe5|lN+kqB#R z-%G8G;U_^P@+`KGCG&MdcHFlq5JG3fEJcoU7b`{yw3*O%R=RyYBWbx6-gJxYmW%4t zgz>fg#coLwBY-npIZ=P^7=w*btDkczS>)14Ql=PECm6=`)Q^r$4Lv}$lCb#-+G)zU z50uG(fanMGXH3_9i3}rz^)&dE027Ym`O)yuz23W3FCAK>jcB3HG#XBL%GFB+cqWh9p;u^OKk z;TKoE)OZORbMl-Qc&9AzK6nm~k&PUDR8BPelqK;eBd z^y_%QLFr)jm#IyjaNwG{``kD|2nqRZRu{SJ1SeR*fAyJo8a%aHeOCiJUCW1u?DJ3( zCImkb~0%Po${Jp{mT<+(RJy5Bx)5PjBG3nWsr%bkXfZi*g_@)j*8tnZzXi6}D@W^-lKTDTz?5FK z5cG0)D4i5QMmC$ZVw$9PF^w}YkWJZnXWJ3HwNc?uoXOV- zcmTz@)Sg_KK&ZXIUKMixPWV26d_%N7y%*YK4pkH_bFqFPZ1k=Kuen7h%Mpq>cukBfnM5JL$J2Zl&I-hIi^*Y*H6`^&Yk-! zMF1YNO-4-33MPn25`A`O)>qqkGYG`oOi9gwP5EN^T-PVDC2{$ipAsd+Z2Aki4pt&i zs{7bOLR|tk`aUEh)e|5gUM~>k~$a-H8_>9|g&kw)zV(k;2xF6+< zha>fb>dtyQ@=)La=-N>K-j1@gJC~a~zu$`RdAbRZ0B>inxCRnf#T4-p?*8RDec?Td*sp`MI`n-WVC(ReB3;4O@?U~a`qbwf);NFsH@h2xnA`Kx|9;Tjx-dx^-8CG z@thp`v}ral?ULm1!yBe zWr^dLEJIdOWmKM#d5#qN77;JnasY-$M zK8nngD(*zA(;g7g7wu8uC0x91dDi(>cJ3&Ca?%Fjm^YOEy9)T<$$qUAT`W0v`weii z!MDkCruQ`w5=CH!pM1vajr_$p^TaH&)l@}Js%y{!njJZ|6!`b#9?WcQbzxgEkxGv| z^iB+~Zj$2jRhtz?&??Y{l>t_VQRScEj|?e+w>y-Jt`&OOfqgVcZRD5rf%GZ*K+RI; zt-kKbSNiA?Z_E5_|d+r{F#^SgRP&(GYsSvJcrs z=_an|6<;CLg_Hn3crYr2*qTy35nx9zE5C3A?X2zI-LULy6Ihl1>Sw|?YrhlW_pz!y!R3He{$Uij(|$Y2 zncP9L)Nhyd?MQ&H5Q?3q)|3KTOO|XmSOnY-ccyxAOfw&VdVB`Jx4v$p#>#vNdcyVI zl$r>{c;$qlCOr!{w|aM0S%@W3U2LI{UJ)aY2IzCXYv;`3C5E%S%1vfEJze>t0|~bU73(nIJDrFjpQmvcMdLY zGeNU8v2NWOirUZ$YROE$J+6F?#Ww^USvvV>o}U>n)c!NYnPxJw1-sr0>_-pKnSF!!Q{t>J_Y8rYT2Ep;&_UJ> zWXyU%C}O-$iVeQ7kvCshMK0^lau9kmbx5^rfue4i3F9y#&iX}QA2Abd^)Sr{`N`dj`uj_pHv zoNfQCVTlV)4Ro`wQNp)x*$=W0=;rgIU$%&ymH8l~$W_*Q@rO{rKq(~2YM_nY$vPIl2 zkc=XF6JT2ppD!BB%d?$*UN;!yv*rIscog{DNN}BWMpMMAXi|Zj9HTCTj=Xv_oMG!? z(`G@kDnh<{908udM2W`<)FkB$1O<+3vbtX**&=O1Mj9ok=Q%^4qZ6@bWrE?smKhV- z*Xzk}J@hjs1pb3Y6S;p4$PP+7IgG8kLG3gB?Glg4zZD?m$eWzLa7LI}vqEEXr#$(z zpOGQdKwrD6_mjoZE!)emo=cqTz}^03f&SLECPGQ&NZ6!&aK4El2Wg^uw}GTZ~x=hl@B z{OQjXsz8=JuhOc}jTVBM56J3_`sTYL|A*-a#BPv_kS?i;O^BFaw@8b@tf@QQ8Isx( z*8X)O5Ry+oI4bEOzFF>$b>{+uYzDcTk-5~o`c9VH+v2OwDPoFWb-qA*N$3G`cG$zrNOMc zq)YKT+CUy@t6h_qF7$}SBuEzFHi8ZTaP#NK;(aX~5F0uIRIFB~bR!E;nBV2XfiZU{ za5wd?4Q?#b{C49%c5L1?VpeW&`zIJ(6EWPai&Jy6P3Um=0+DwL;%haR`0{{Ab4jvl{94B}e+i)1PtyUq>NZ_nIyN}%_uF);1*$fS za@BI(-g95r`+VTOzS*iViqM;|8l~Bj3IP&77o}}X#2rQ zqs85~2m)}4%s~LScLAK0CMKYPQmWF!`P4xk;D|U3OQ=(@9NX1ET{U~nxl4!8`;*N< zta*NhYYx!8ER?@cpM4M$xH*Zi`h>Hkj90E1f5U%G^QRVIlVaBMtGW-aW^btmrQ?0K zKgQ8F$+5VtaAGNsWt+2PYtGfyl*4TGAy1-37*RW}WQ-FblDRaGnwQ!R6W#2$%6)Kj zR!n7Y^}zk6u&ymC;_I#^s;zbtpjWS_=%@}^7UR`lEh+YHQCxCYUIu!=hacR;Sm+l$ z(7t+VW&n`3(B_$grirU$pkfmd-2qPxx@j->J6I^Wv2^ z(Vf~X&Mj=l`-ufk>v?k%AAGM^zi{Ys<(NBCPe%l`XP|54&fZ8JJv3PI&>`?y8!~(X zJx@4I&@En1@LBMCuLpd|m}1?ICY3l6qQb>jTL?WCm%**&kqF7MU8?-iXu*~Ea-)Fh zOSy=V4Q`4L4d+RCioM5KAz5wdSB4{%_2BJGZWgq~Jjm)w<%l!nBc%ui5ViB92HmVe z&b6=WK)tWZ1IcNov8Xq^`mAY8A-h;pnAl@B{D6gYx$pU2fKyb%sz0@QrWd@>HO9at zYxOBpg)Xg4gCZK`13~St%!Ju_nHo?Iq+GPlNYX13q;=c&Tp4|@9oMIr)FhgMdjOrx6hYvCpb0rOA_HLT3D#3Q_X?Cr+Q&DmLZyL&2cL!#5l!yETFI z-}fpO(%(u15i_}|UXdqNB37*^VT@xKUJh&{ZOgcl&NOKzFZpbtU)|k3q3lc=G7n;` z;tne~E3y7rdHE))aA9c4$JLCoo?Pn5vxV+_KyUThred+&%FHvWL6`?@Wc5}3OTI+E zS^}Ze8y#Lvp`pl#=H36a1#}vhtdeaBJ~JENhk4FqmtF@Q$W#wra!VcRQo+&oz3m|fV1@JzXQy&j@*cEPJzY*=F@CS*2`{aIg_)K`w_E&WRQc&JTv z>f+$-)e*Vb_m}#&fo!g{Ajr9J&Bo4Cuj&j$5moYlbw`%ymdIgChJVcFN<1Rfrn#@b z$ST|W6vOmf9*5m4yhJV`WflZdW_c6m`itf*Ht}RDFMR3d1^Dh$wLfA61-TjJg-LsU zv@+COpq+Rr0C_a|7|NSuagUtzi(qZ2uO(NYa&o=htRm4F20Wj4Uh+^H|o4D=`?blruE9mHT?$>%44) zD3u5~#j`Xj&H!0MN@A}@YM<1L{b1p!g?pasTn7j?E<024?!W@h$bwcsI}l=Ij?>TP zh7@cZt_Y*~LS>)YDrE-Iq@4iqUotQhuF*}}(rf{xajm*Mq3I>PhGt>G~52J)G3v}OB(+3;p$#K8DX``ISC%*R>O zqUv1xsTQO!*3m&vFIp%XUc$HgTyAe^zt2$f$^f`$;6kT436rMSSJDU#j-67AN6WSx zU{GtSF(g?sy;^}r()!hv>X@Xi+xt|)O#=J3H(9DFo(&Y`f6ytANhtGnN99TGk`Am% z^0sr$aShBaz1c%1O;gj;c>{;|42MV^lXu>N++H3dv8uD_Wfo%jlxyUQDHkbTn?B&& zS(7ol@sN$zuepE;Mg$dFOl~K8wIdznm3GrI*hqdS?Ga~t8`+n>U~(hI9rFuH9|De5 zKRBmk-Rt5duO*b?u|rgCeOe#^}9n*sGEl&&1mOfZMHHoH{E9KKgb2`{A7YqQMN zIIGb{<&+P5IEBmS;_jMiAEeC5sDANE+=i=u6>gF({IuqS&f+U~RHWomM8TjfUAxWJ zp44^^?XE0oQ^+xS6PL&57grt+92QFH@z;7gQ+PPaz)3=bo-`6ARPMYixcKOq-?z+= z0(uHZ{JE_)7IChi1#-poPJZ%9krX1CRwB_=!84#b<@LaY{rfi!PoW*Ybu6K)jkqg|ogIyC?PrhIpTa+s4txVTGSr3E+tvF-m?bb(u_A=9Sg|_s=^&=HRI=; zoFMtGuJC2^#F(YDH-!m@8K}(D1DMs-1n0gOd?cEZs`O1ioKe;IJ(6GI#pZ-{)QhQu zPHxk_(=}-|ZJT=oYe1#CHWQGZYO$%)(}jwD?q8BAqb8-Yqs{p;(wRCIj^Sm(!RVNXNUl+K+M#LXGO8#x2e{gD48MgG(i%D8CoA4 zB$ZX-Fto**iv%8X+Q>(-tQ&L0Neq%baF16ZSQ0rcvMQi0h-%~XZl+e4f%N;@jrw#{ zhQ5I8`^6f!acyxts~!_^cJL*#S57dia{rpzjDXoSAlA=lm=<^9*FCo*La6KX4bP6A z;g3~RYmK;`S}D*5_a0dSgg|CZLIymazr8bhD)|bPN9?)gQfOtWum3W^i}x$%jgGxn zI!#6pu~#*gF%WM8B_9s(o)Wd5k0Swjiy$f86~QNA(_gM9Rx0GH!62+{;=!AgZIidA zDPJ?SJ2UeV=*I-W&==p;B`>?4t*P$P8Ebn4wcqZ$>&V>(C+L!-=-EV-!@#vq%U8yn0jpph?-XDd!AIRFnjKJ0Y_a0`CsxBkR+*^MuH-1d&zhB~HctD?& zEw!2E&GnnF75L0e2#f!{8~O8GH0hdq^q;-bK&RRN+Rfdut$&cuyP)!iEqo3Co#qWR z%oU35$kzHR4dIjgcbog^pqi#;BfKsDYW!aZR{!7bz*_f6tMf8U`?D+iiSG)bMEWl_ zuiO=s)IrUw?A`h;i@Wzy=iiq%xtIIQ16$tni+ZhEG7I&LI6Mix}@tcw4(>I*Y(#`2Gi01m0JIP?b!5&vfoan^3NXV zAA=lg_;;JT{ofqWqo zDh|)pNwaUiQKppKHu_!*n*aJPBQ*{XER_SqMi+3|3()7Md1JtladQZDbYMAB9}woE zzyJZRv(oahfGq5fb4cm#_!bVlyZU9}rP@DkBb|_(OFyi=1W2r;bD=9KJ&4rPw-5BL z@&S}1&^7D3^75`r6ncAgCIQ*`V0ha@Q}KpCZiowmP!YVY8F z_i8$1d4|;+DBFEL1Gp8$U}C8mLHHuimRK@+dM3f{EAK*i`v6Y2y+ljaUKC5XaxE25 zkBhN9A7z%Xg@RTt*l@=vfEiyzsc!3CBDfDDH-e|8x_fqZ&_2kuxyWv}S7a!-kqW&o zBLZES&CY$Bu4f1km)iHj_SK;FTSKl0K&NQmUtp$k&Dn8n@}o9QxP^XdM~0IRAW6^N zG=9ckB)HAV8V(}??mLUk3uw8o>L@W8YuW_}&f};Ga%up1OP358qZWig6zJCH24jQ? zSI}rDbcdbkdwftBBTVS{vIOK-nO_*)zWGLfuAY6J{a}E=Q}{;^t~mqr*Lbs|P3nIx z&@(Fd?)Mn)v;q>4&tY(Db}IKLADys`010)K#g+=it@Ad=iz$V-@j^Xk7jx;eE4sH% ziY{8}SGd@)zd*x)#xmnVllQ?wcEgpgbJXRbCKSo&OagBL+}QQ%bpcgiw<{pD$@nfQ zx3j05V1|u8K5@D$T`j%~sGCHVB0ze!WfRX{+s+&DJq`mbgxn>_jSj*+A^E7q!Lpum zf^H}p(Yi!*zkrnQ=OqY!|H$vy344PF%=>@Xd+VU6*S~LELO?}Q1*Df$kkqA1mXa1F zM7otmx$E(D?^*dHR&N<1=PMjWL;xf&NX2LB8G4~gxHNSFXsj;0^P{?Fl3>%Q3M+gc7W+DY zc`-(M8KLx&G}Y4lre}s)Sj@qLUS?u1Quxns)rK`!jF4f`)|sE|E-q9&_nqpbJq?-P6TI zxzcWdI5+OL)iLk|h{MFN>u4VY*~`fqJuyG%A1spd6rlOdyIh5~96`zTv~ptmQsRaD zo?SJ6gpW3YcmYfWSsPqUk#pAZCD26*hw80XBp3xw*c3<&K2a)>isy_IyHXNNMV`82Z^))I;K&EcB3I z4ELWG0HO_M`9oXTH?oeBR{JdI!!fo2DTRfW1Qu=&N~7=B@abKAabU5&oT0lHE-OA;LVboO&*$HJeiwttuK=U;*xoO5uYA>gOYT!dGT(c38L z1cfWnBbot-AyO^)vcRDN>e-@u9~EJLxyTN#4?zDyt4YHZ(qw%+ zLvfp=(sQR+MW!uFug|JAJig^eV^vB1*#of=dK&(Q3;&5Q{uZH54?SWN6t9(Z)V}(a z9m(N=C(rp87$^YhpG}8f>Pg;eevEUAuiPzuu}aT6vOe@~}o{zVg4oAOOUw)pNRca(h1uSmT+5SqCE ztaD{*&rrLgZS?odqvhW+5B}SHYJSU44UR+dRCX@4KJ=%zIh>CC3?v!u;+UCG*GNM6nqEHAU>6c}!W9FR-)(q=7g$dUO&G zWJMO3$Vla}9Dq>lHfWR$8;m(n5f9_1mY)VM*(ipWCF0{uUyNSa6y*uVtz5Owmu;eS zd^`+DH6Lob0cfN38EAi}`a;_yYI?0QP|1d(d9o{uj~8z@=~@12zy-l0gdiy zPZgwVJD><;OBs=Qe-Qi-^A{8&oo$5V;ZZ%r9uyUrEI zKF7Ks3R{4nB)b>N+V>hfc2A!fL6G&~HAVh~v=!sJXYk#pu0w#tHCO^j=sZ-!F7J6- zgAKGYjUr3z-&j59ot+CW%Kh5z`+YWoHu4*eO zY*>|PO;|qbAR5oM7^Jk14!@(&FAx86ykeyY#dWPIqotLzw?djiDpv*-=;8So)k)T0 zFFfQc4lnsC45tL0n0y`zcif?$^_joo-rYr$M{2ul3yj1q_9b=4T(A9Y;5XW%NZl7nEvQ2fi zR$(2Dr@RZc2G~FM53W`BTDrBs_hFva9qpLCMY#_>Utu@Sb;PU1c!^9#xs{7-xyNiy zh6#rrU%aNFHY~xHxXWX<PEJ+`ad) zJp8w`2G=&J4~==Ml<1AIKUq?k439tWvqD<9a@Sn&jbO&WRv5>9PWr%Za|*Nd0tXi5 z!P`%QH|ChOD&^PQ<^-~Dq+7Z4#eeX+Ioog!PHi6HM=XdD#(Sd(&sD!hOe0~Pz$iSr z`4VWEF{xs*dtXOjsc4Y#>an1E)!sG}0lX2_l|V0XVbc~1tD=R=R!-tZ7_%zZFf@m+ z7|kA}u2{K_j1XbSA6@s>F#jrywK(X{n=IgHd55$n=EzvcgO1WjdH31DCK{o)P;1KS z`dD7Y>Z2&{u)64l){YT`2lDwQbIc}L)=#tjarx6pDYrU5t_`(ujz7jpmCt*AN`b3AY9pk8Sf9L}5!=;iMbz2`VBim^=^Ip-jCJ$h_g5%>9&KIXv|j?5~4iT#tOEvDl?9afm#$MbH@!k3@U z?G@ch3&S7LpU~B+s{S+`>K-f&JG@|FsMKC1C-S4IjG1_+z+8=L#7<}SU|+%0rX6SF z+@=1PibK_Qc`|j+6OAfPn%fL@zIqHl)Xr+}f0b5`V&|xJ|r6OE67Z z4?hZUj|@nbCf_OMkB&^3*gE>d^3d3umDYE4p8c%2D6d zl4Qx$s(&mry_bEZH(EI8vqp546|_#9#2dcYyOf#nC(}n!hh;Hqfa<}~9fZ-*CqfE@ za7R^ft-1K7{OLY;o%g=uL#GBKBz3+56WNGi>Nzq@8tEuzMVLMwVxpXVl_5wN?Twi? zMfW&9BJuhnrqlgd|vX<@r;tt8KkZi9bOO z>f^QT#_pata`($h>*We{E}_t7rBOc_@8A(s!$o-ut!?fPf2JR=zykQb zCrT2%_vSB*!QUG%%nJx9$XuRK?|MB=+PAM8WuVA&EPpbenPEUs6=HA>K6m8!Swxrm zSiC-8i(K|v;pODs?{4d2<9p_G^4acb?}gIlREiSpsLTMSt-{VhMpn~|`@oKR7PTVS zo5~6}cRWf1>7&j4I%bO~o65C}##YpC9&>38Px|xoI@Gg<^zN+;Klm0`N}OEBk~2Bs z7C%uzZ2+m4t|GWNY;djbykW^Jr=f=t;!pWU$aqY#E2bQ@2=;zVGgt5#B`4b30w;vD zl2eNrYa*eZATog<6*r^Z`o;82i-QOEr@*x_1X20xgo%h)d^l;=taofyypdVovpw5c zXEGWe(hygJ6zvil{4Rmi9R&T_?5xY~@%XRlEO?IVCjBp6bz4{I6AI`#u{6I$mL9zBS>X`r z9_n5k;p)52KqBn_K-pucbKxjy&tm^(w0V%bxBbBhoYHZby5O3(!Y(1QVnLg=H3>RN zdOED)I88zU%hmlIFEQMDf!?|Qu9B(-wthes_Mrg9E5^ks{Yy){#soJEHFm8=FE!Z& zdjz8Kn^i1WEkX~v$ugg?Y0_x$y|)yHj~w?|cc*m)cMXQS^FkPcB1wV^scq3{kW|%$ zA-9!1`Zm(P8$2m~$>1JS`qA96lMM!6wWwEhBXiyoHh;phkj1j-1BQ(_3OL=gC1~xJ zs+xR0gzwfhLf~Q5V8fz1QuqLwt~Ff14T>c$o#%;=1%f=1!x``>d&x(w=^gDv7lGRP zf_E=Txz5q}BSEmbI4XFsRn}a`Ywp~_ReG;T@M--$X6x$$qKWV2v?(4P$i%InR@rc} zu_o$9Sfn56bbTjW;Q_9`b0Ag9OM7ezYtg7{KN_vD@WOqcZA1!xb7UbRd!UDH(UH8{ z`24z9`{Ya8_dKVO@E`2MM2cxaS&x$Z){4W3MN~ZYyLU;O3q!n&1aW>cOaPJOw?m5ik3e zcFMlRwDh|zY-Nb@LUT3k)okfxc0I-$Qf!Ppxt|#3|Xfl?y4-Q24%@pyk$J1KYJodO#t3^RU4D={SCW zi*WP#3$3kTaYlSN^t_W(Ol?O_$)%}Rn~a?M$65+gx7(hL(!!?8UYGiv1PKSaXFrT@ zA?rCA5?oK-C(^d20hTuq% z4(VeU4H+{Bhk( zEIkpWI4P0WqwV{${-xT{m5m=gJHYy1uK+IvrG$U(y|W0VI;S^ze4O}mgh-&A^pDNs ztwnDm=R3cd^=B`YMDgqYbKPhCUYDu%LgBZflJ;-4d8MJMF*VP?bZ3&0%FT(ERzyH6RpZ26pj-RG;wEmq4>P=Z$jQ$5bQm%w zs;fWid5NQHGH=ggRIHSYIFR_$UN1C?#UdDb`*? zw}TsA@+C$=AZkRR{7zyHDAu*3xK=$ZeP>mqTco@Ilj18$uiqx8i2Ug|d8X>#4U`V* zuVHvAB$!-x9Ok7>fLR4b{f%QLYy}fT9!yrV$G}vo} z4K#oHLBK=p{%RfGP3W{Wm;T+EBfRMb8Pi8>qdo0Rw})L$1n+o-0s;FX0}UO?&{upmH{2j%XU`F>{BX}9pcfyydlA{ZwV3%1|yd7Sr? zrhfw(TG-!I6lKwd7Odz3@E$R_cRx8C!#30%0dH>3$wBbd0{dOnx9`xpw${i=Ox?&# zcnuYOiUF6beox`No(eyx^t2SLG7U4tb8&c}PNgKl+0J~#!2x(7fPSS0v&ldw?8%a* zs1}RGczXB%H2T!Ru`eMd#eM2$7K4pq@eVrRwj=1-G>Ygc0g`a1?&+Hp@39;eddmtA zN9sOk3=x3$s~m3n%dQM8B4~_IDRG;0Ce#ZMZFK?d$lk3;6`&gUO@_L7*kcc8ceeC02 zYRbTdirla<8QpCu1D6#fG$xTkh>1F5Ue~~yz$Xuy`$dcCrEy z`3h&X{cSHVNK+6ZGxc2*SrwzFT%a@z*`sMY`Q!=qog@Hs=u=~1r4AnquXv$uE@Yc1 z(_Lk+L7n8bf)hxu#Ovhja59{^M7#~dEhY}USbu_VNI`KXyEP9HyoK>_F^f;1FRHlT z1Tz+hd;5aK`4rYLSlcjbDWo(GA*6n9J**m0wkuctBlwzatu3m-NP};JcR<6%mAs0z zvMY)@Y{y14J}_DL5uJ%e#bXpO3DpCYem04^6Sz1;v9xzSs4YyOA-{`FO=1NgRVP|& zX28X{T|YbdTejqEa>2iUkyBGzzC1FV7}A;s16`e2n|?K@YDXvi@+U6w0;u!7(6+o4bd;GKnubUJVwE0Mu1Ak6fQQ_*Uu}u z1K*M0LIf+0A(9*qJM)eX8<@?D3g6El<~E0B0PBdRlLvy5#^HORPD1CJ1v zn&A-IeDgH#ef<8!jQE}Fr5+q>e3aCy~D0Udx7p)ng%Kz%w{3bj9L(A1E{ixH-5qoz@up}8g(vJu%btZgqJpT zLHmTpm_P!tShfZ{+1L|`!f2}0A*!ZJ>$ASpQ2r0CejGDYwSfA;cYL~%=vPYF5S4#= z*_E%ONN9IbBiLj;maJxyFc^*2_BAdJfj`YFhIg#5(ZV@@$b6;8Xnfwx$CSyVFql-p znBT%TM{$^&f8?N2Iv>$hzUQ-+XRkWZH}()1LwuiG)>&B;hM1-a<}(1ZAK_FEI`*$8 zA$ZMwvewm*fibymBU3F<&+*+6vhtpen zrj`Tp08Bif!)QJPtfX5;t((guK*28pQ|;vWwfcvKbp@1Yjl%T?hUX3mIdN!xuEZ5P zJ(ss+valx#NKgs9y&E2$W{C+~bCw|Y?;%#;eK$_sv}Lhx^-50vMmu3ZaiWMc4)sjc zECqtz{VP>bE{;UKo8?5o2|g!JaC!zUo0a-j)M5dKLTyu>z9`VLR}z@i*QV(I-mZ}SNyhGMA>X1J<4dFq6RFg))&vGC=g0) zMDgb4L{9`~W*0J(72-HonQ)c+9#ol8$KByFt!&1!#d~p06K*yBSf@+g!hq*%;H_EE ze;@iv@Yeazd1C8$_O$$T(?I^PZP%dO>;{J{n)H_hfK_Owe|?@ooPQB})<=4@{71(- zBO*tOBg;=to)RfjgDt2i-zf;qNB_i~U+0tsJU}j?kGr8+3S4a0CTnhx^C#sB^v5eH ztS`J0KvBKf%A(R3lpbzVt;1&c_1bFUH1Awfm1Sx8LR+#aO8urw01WkqbtD08 z*$mjRGPgzDSVa3F6udEncG1tpTYYq%VO4Ftxn`b>xdB&}nvlwnm{7(rht%&reNi$l z1-?@Nu1?%a%45MCU%M9O*BZ-4j|qioMcXW@=s(IVN8Qc8Vm9d2J(VQ4>e{}d?`&?U z49!~l>6BC7Nzt(wLch4~+9@~QpsX>c2t4OhoL<{~yiL4~zG!s2`}k@AR{cjx0)dmz zYTU|(=WX&={pl{~`(DM>=$d~SAWTI~9i#8-*G+?0K5=>DipXOfaCb0-19`{e1cq?K z3W8hy> z|F*gRE}aVBvMbS+AHbp&ZaZ|#!90G*lYglK+)G*6ps`v{(;OVdyLOOKS>nYiq?0d1(H zq`WwGo-u$RJMLGi;&3v(Jj9md(&|cu@E+6v4UXwp>n_?oDoHr^Y3~Izvg#F5efFf1 zd%gskn}^ITWrc3h$uYb@5FuL}U+DHu{=!0rAYY{4){F)GSO>}88Q^-u*|f{|GI_7c zJu~uZ-?Am1i00V!+YgYwW$8&^gF0U(_btC1?lg#&34NCsSdXr4Y{H`$L6Bx`10@X3 zOL&L&DYKR5jC5T{O^Ns*#0e42fw$hhaDSZ7;69Gvm`N%dt8n}dvj&D~3m4w|a~3_f zNq%hDt4}Qw@74W-mXkpRhZgaqDy>)$TkOh^LZ=k-7vMW9V6_(an_Okpe5ueNi3xtS zq2>d?Eq{D&?~>eE)`yP;i*F{DnKofXj@|duKwz}U;L?B6ur$);2jRpnA*mCm++4$C z8Gjyl=6~S;N=dkrWKvo^rAle6_RK`H`6MTTYT6+FkVIv~rdVeN#cvg{?lM;a;(MMd zg|lD~xrQ{`CdKG9@x#R%9sWf(3Xg zH8wsUOl4-1=O5j*?}*}2J)&rlAklhI?ex4mOIuLLvE?;G=*Bq%!G+qST^4mPcnC^A zALHxgeRi8a$MsP%9Ab{EB?v+_3>_<{DF=W|rRK)=@O=u{6)6V1HkTMStwmmZ-p(&r z8c9~Vz-o^JisFyIa+sdwd89-b>FNj$k7WbuY;NDJC?VGK`jry^3`n^|8?uvzxrT*%7J-TzpDQGNu~ATmmo1_1|LNuM=jHy%g80d9yBR2f2kGLGYh}2<~5=baaNg1mR`&OWzhDC<7kwEdnmL z$OrZSc!pQ}Y+yE{?$TRa$sIt0sDYAq3O!wpj>$nD5mE>z^i}{1i!cC+SL}g=hnj!G zWpelfAQ|V>utw$Zd9Pr=Mnd1wfN=x~pdq^7P$6u`ui!ZNm6sR-rcvLgDDvgn%Ss(U zd_As;A~pY{6K*;wu;i70ym$Q-DxePK015CaO}`@QUEYw9BIuJKaeIjKYeMw?DL8F` zi0X>OL5R!Y6%G=ED+S@`@D8tJca=dfLy*r9Yy(6&Iia8v{!DQS!kHEx6+etFh(9(a zGAbcA7Lrl`8|9BuQ4J32V_X*B4}j?JX8jbvb$)>2BB<9oaTjF2lP2pZ+Q}FI34uxJ z?l|WZO7a0(5jh@=W8j=HQt}XhQ$`c82dq8yJ;L;PhU$(eB&MEy{Am&}4GJwBtp9Bt z-s*%q0qMhsObOO^?ICQb+!RntRAICMM%BhdQoP!A7YlNlbhW@#z6Mi?lrXS9E4y&q z#X?>UFg!=-dmt15^ziNx1v@(w#GH1}UoTd$?f$T`$%3)f1n4k6US2d^)Xitw{=qC5 z-v0I4n7TZ3H;KL|H16>Cunk3eZJ^Ib&8%P^ue?kD?TacJ)+-4QI$IA3bw(;@K(kvvp@7grN$9;q7mRN z6gu~vbNN)Ek3q3seqYnN!DP)Z!8<&+yANbMqqWFlp&e&H0d9TyZw)g}eA?h8srn%M z9#Q_J_XTVcXh{fAqrjqoey718uBm~9V4KX)8*iYqmST;7{}<5?kcI3N-gwaE^5@TQ zr$qWL2h)m=_Gj<#>t7Cvza1}9u61#dZSjW{F<#x)=(NXK)Tk*~0UzE3j(dNp_Xox8 z0I+&F;OwujCu=C@9&hIk+?lJszcRXR?6M(p$a`(BBT#2KGZ_u~2oBG`?Yze4zf$kq z_^OHB2EM?CgG;fv3aH8xE4V)?ylZr$pMT8vsDbX(nh}tBmu<$fj9jc^{2?93oNqO; zs`*Rh;H@Lp8>QD-zp(&+-JN6@z%(vf8~BVYLOuw<>*L!z`L12U7O$spwHw$u55Iua zY5=h5`-`+fZ90u&w4yr$_99oBR2QA6LwJU(khvAqt{J&tH_1Dn4i){>1 z^3uAo;QM@>w2lq^#K!)BELILYK&yap$N*5s9cTWK2ZUq-r$54=TqqK8LqFpC>R3fK zQ?gspBj8=}#S_#mL#j6U=iMl2h&15WU*u0%unG;#CA#PRvKcK#2?X3O0DG~SRFuBz zXtQk~JHP4?R8|-OMON-6kxI|`cYYrrx0Nr(v=Qna;p2efFfbh^qJ0B*#IrWq zBSoJC)FWjm8aE!FUFO7!g5gEM03-Ei2eMItaCRauK`g?A4hXTv`}D~3j6I-rSuL9mec)R( zwy6v_7H>d2{q!4s?M^#)7d`F3ViIC_97M@Qv!Hq+yQ|N$>uAvS7Dng==3(z4P~(*# z>Y*hf%-JU=2V!M;7vH%9;ad6$^U*TS1M=jaIiQDrb0|zHO=Jvd6+4$`zdSH-i^MH; z&M2h6WF&X~&Z}{M zb{*dQZO(7HfE1_pg>)rA<7GoyM}h6sn&T6Ipm9SM5Mv>&=QMLFvQGss<dEmBI%=$5|i~>V~%hTC0Ks4Be|JwEF5jqd{|@RTKNAs&<>@*rEsJ|e~F$Ga{%IvPwbLR=uhHRPkv z^yFLw?674x+!?oGTDwjC`t`&35^u1K9?FiZTZ1IBD$}DNyNGL8wTzjQbgvs!TM*f zKD#TPmuf}X)bD1!I)I8?_l?63FXHphzb!Q);`0E0M;Xf`d;JZHk~4Aj^IcF8@L9r^ zfllcNW4QXo3I*5(Br&&gNx(q!Vkcw8wY&8CO(4Kna%I;DY<)dYHutfmQ+bu#SGv;Z zxby@0cMo?=n2qzNnRDC$eMB_F_zj`B?QpQ;8yP0&|A;HjYqIYe2!2&q0#H6(|0QG4mp`d%+J&(Cqz`AmG%bt~8tcyIbz(*%wxL^7MHcCD|?j zp&LV`&8_26Kv~U=3Qv%v*5&WfKjF<+)?}`sJIc9I_uVg`nIzz2ZEB}3yB~<)3I!7> zcGJHAlEOO<7H1fTi)Q&MM#hND{&$1lLaGbfB5;J(xGUtX2wlK z@1{)pm#R#>kN&BY?D^QoP`u58iV%JoJbRtj2kNwBHQb?}Q>@-eYb+|!U$5!BckZc( zkrtLD$oFl$&@pPMZVe*UPC52UZ1-6OXDn3hvyAtrla2XReiA-`aI|PGKGX{Wg6CDdH0yD4#S&Qm| zq#FEF#(S5vD9j+CuKZ$sPe@Sv5@1<)X`l$=f5quoXIbr6_WCIS;N!MPx#lG0vf+6H zPs{iTfk3uc&T+Im87U>`zHs8;V!Azhz68kxadDX8M(PvRs#g*C28s_Q-7fj0W^AN; zMzQ!SQ=`T3Z+Oh{^Xsc)EX@dFb3WBjz-9*al^~3&tI_SH>D3n5hj#d1KcGSa*~rzqO+r#cmL5AyL(N}dp6;}akdx!g*lOM9G5gi-PBw7 zry~D6=z9MXM`PYGqt>?bzme;=|Ah_Gc_P=f9A>bfewL+!_yGJsm7{-z5(xC^@|pZM z%J$jp{bziHiD!n%Zd2hi*0VEkHt)!P5ez^kniV8`{BPWPp+AqrAHn=@*3L(fKJLS5 zb^hpIQ9LRqIQ|=E;lEb>Es!E+#=V1k+<9BQQ{(R<2(eUuhX1IkIh&w*fB9TEE=2-G0Iw9r`z6hw6Wx2=Qv}%h7hx zf7d|B_!okU^{$DFu_uLW)8FI*bpClF-c7_|weiXRomt=aFQlFSo8$Dx5NmgTJ!!yK zW%YvtD9YO}WvuNTrBKYiH+co~oDCuThpp5gR z_5df`AGC{LIBo3p5bKkRr`GB=H!^^<-$Go33rT``1H$d>6zp^~}0}D_%TTNkXc0 z!t&E13e5?DBxpK0PEp&<>QYH1!QAQH{<%wYTL7($gJ?95g>69n(j-8=El%46FVBV? zHu&^!VU9xPP>?;SnZ_(|3f0j9jz)HQKOnu)Y1R(6h4h#YAP=I~8|bk8ZtC5x-(qMv z0cCV!0Dn0EN?wtjmk1p}Q{(~2bJSld8Qfs8cpX;>x^0WB)FoD9pFg#(%(!)$wG!w{ z^?QQcBHab@2<6+=YXV*4M?e}({QX+FbXq55uw+T?TEH@Vy5aG&I`MfX0Bg~XVi z<7x~rAFC{}2h6MYhh80#?8mEzFAvST_mJA4ViS!z&6n>1OFW32e&)*XN^S~_FUF@4 zX!kwN1%2%cIl!Zb@j@Py^o8KV(0}+f50_YIJ|aQ_dEbmZRGwlsq87XCozfo5O zJV4+@q&tvbn&KWM3`hKJuN5*t2rz-QT77^zIXvs|o2He#g&y}B6oL(>upbXfS3~LR z1CkY>ZzuRkY^*pyOV4p3Cf=%w@4{E8OPNRliwW@3z>{9CKtowK218fT`4?gV&{-&# zt~_{=oPE-Tv>MnW`>Duj!9;*f7~p@Is%&$+Pf-mbvI$)S+Q}Y7!r^zs_i20vsdZ9N zta?9beI3J8RUqh_Y_~gPk{LWj10&@0$-2aOPZNidD-NXnwzquer3`y`{opOe`r?+{ z`Z2Tb3h@gO*KQ%N9~zMB2OSbRTVM8QK0gZ?PzmkytH|hnd<;jxPU=@j^9T%WtPHB* zjr%kNb)BTL!-7A2h#w(e2Ao3@2>b7;>A2f#sr4^7xS=yPeJupXBbEVNViz%iX=AJz zs7u&d(Y8t94<4>BX4vZ_(_Im`P%nm4G11@oq22pb^z2Rq7aCZb`DuXVMR^n$;LQdVIRKrHqQ3 zbgO

7-FX1yJuHsRhmWGZ(i}`UML-nkv;Fkh$`BA*p*qFui&P$ zTiY`dbBTai7QZ#CndO5lV5CzLrm^3sHHN8CMelcqEjp$E4rsu0ubI*YDpA7)+%Fg8 zb)fm%#`}8R6IAiG?N<3=M0xmFy#6u0clI$Gs8EgiDq4|4y?aG(?|zx>WP>hwv>T`a zG1)c8!&z80{c4_k%~g66NTF_T@wsoA6;YVzZoJaq(mNQ89a{m_h$@lSvmoe!MpjU; z0k>?x)@cia@POyKAEkCl0oP$XOKl1$50D7eyXoa=-0xLyWCP^^dQXlIJ!+EN=HpRv zSD8Y=UG?r0pGHv19d#Ku&}}QdL2Ut)NANl;FJBO8t$zOwOxEBVjf?VU`3lR0JMW1HCdzgPFaezQ7E3=&TWe0 zXLcZ;xpNe%$A}f0!=U3B<=M4#YjSD@sx0w; zx!dS-+=@8iN4H12QLjf9tE;=&8tW7rsL0zx$t@|owgz^10=H+vL?(8alCy8w!DqvH z!R|;KDi>}~R<8Wu(j~F^72Vw$bxLeQ1V-_XgKZ@Xamo2V z*ByK*vhk8EWxDTwO7(`eet_rAiZpH*rO3orHz=-q&E0WD`1yzdn=F(2_aTxiTT{(^ z5#m~iQm|xrezDH z)2(MN=K78pl2x2cvz<&|PWi+tVGl;(>WT5-A65no!?%@%rbA%Q5Jey8+*Rm(Fk7)G zcP#ThW7X)FVfGah2NPOaNk|{j*duzsUzkMH4GtIA%L~>l#vRM}m|E?B&KCX>inaK$ zs(G(0VGqZ$HU*{Qc?w0ety@FNBHu!Ng8gm|A9VIQE6wcQauG(>t~;T?pCVAk0aE(m zj#7h!UW(JSFCrtKb=lz#icNReCg8-n0wBks-Z6aMWeGkDZlqW!V2ciA$fK^b}L~ zcOHApR%sJME&kYz!OX@lALEa--RIeN#I~_kCDsZzIx1Qlp1(N~^DY!mY1$1hDcm5P zryOG$ooL-vKwPr4bstJ}mr$*Unq3|%55;n>Qwi}55x@LMV|Jaq-FrmPXZEl+2#oQ) z;|b?QjYO@&hQ?9PUccUg;Z^er?Za@9yNiB_!)rFIg1ap`u*g*+diYB*=hwKEt3r>FyEAy5U&xy;gCcO4qR<+?6sC2-Lzloak5k&pEU zK2u_sHwl-fxo!AL!4Z@N6B%7TKkDC6{Ei42Gzsr~yULyz6<+%4hKXrXSxUO?BRnq& zm_)#1x*?~~a_M;QSrsO=mdlf~*R|*}7K!H4@F@FoQ4iu_d1k{o+i4UV9$Ts+qoc{J z9ACPqiOBMuOD^9)vUs)knboRiQqz z?NELNr}Pzh{~WKKwTg&jwgJDKE%}%JctHfw#hShnOV65eoznWCwE+xIj;E#aq5?NE zOl1oT6<78`(@$$}?h}3>TfpY?$G?y3v(a&CG2wJ{sy-BUy)$t*5!Q#n7(k_zhxaKI zI!+#*=TUrC%M#hA%8nm-s4c>vB$(I!4!@J4pQ5DT$^(fP72d}O&OsWU+>G9)D<(1h zYY%AhFKh~}xhZR9Kg4`-bFO`jwucrTetS7)Y;K&LwALAQ(?U(8G{$MZ5{&#)ql1zE9#gcraO_R`V?MadgG5T#8H_t$4fG zMyi5Mo@1e3>Jf=Jp}B z#pFFwZqBEZiEeNJ$jXnocfjAIG8|aEC*q?qJ~k#=!ihJT)hJ5OlADXG`bI_T4&sZwItc|lyG*sJi=*dt|d4 zRltP0g?-g@8-Kz10ThTgF-}9yTRY515)Clm39gGK<};bo68Kw1T+4g&nk?dcvJlOO z1rvfh;+(jn-Lln%YCIzC>hAL@v|`(?g%KG+ExHT5rT5z|ha+^n=fh2RTuZJZ>jOGP zC)g9qFLDceNFnhTa_&0cp_aCZ&A2u>LslOLclS%?GxnhEpPfTlmRMU?O6tvS_-2?1 zur^APT+@hVT7sE`Y2oc#FdY`BtOkED;Fy!785wKkUiuh;uG4V_{Dy*1ofPvR&YG6& z&oOC0kG-=^cOE2#3$9K{$uY+U^yfr;9)Iv>qIwFP7_(jkO8U+6Z%kj;t z!>cL4|MTqU-C9!isX1O8UE$S@p6zNdr!Ymm61xY+G1-M% zWLr(-OGDJtgcB#NvJ_i)t=vwtwYGU&fkX1I90{JmRG3x*#z>+|crBq40klknLfDrV zw&)*pi9MfoW}Fz2`FNwdnC1fGAeo|rf-HJu431lOUd&X2|( zwGnSzO(@m0z4p>^3a`Ls%Hc>1N22e5poDOMikqfB{c8|^sz{#gpsesRgVrT(cm31i zxWOAOywg%l@RovEwZ4rP*OrU#_xPV%H~=UqzH+tK_n3u`$L?(VvW_sfT3vf%PU!#b z!j{*8GO;}`GsOr}vVB$FQQvbADfaB70W+7_@@>5#R1$&dX=>1&%Xkn*II zxk27^)uVkT$GuvT)b^Fy$D;S_5zLXzoeS4C5t<+xZ=SyDLGi&VNvPw?$8&eb>v~^D z^Cs`U&=#eSYRMrdwCfZ1q#~l_cb_lTBbCveaL+D<$+~Zz@)^Gjm{p#W3*;DpeSh_Y0L0FqWHJWOvyxXmIM5wdzMaM~p{Bg+23guUr==-QT7OyZG&6Qu_ zTO|xD_#@&X2b1-AtsS!O(nN+tctK#nf(mWMCg>^ANK$kg7y^mB>inon$d~iy!m!c-+)G zlKyldf|f_*mW7WZURlt*Wk-3f|8Q2s358nkT!QMTd3g4PoR1Lub~fU+oNIzXPwFe-rFh-^PyJ1b45^o1#Kug z8y+npGoh$~`mu#W(@*jshF|xdw(gN5xqt%bOTC5h-#-7GgB^WhYo)-&4ELOB8SfK9j;d@Znc>;+F z`29TzLZ2;ZpYr_(%KeC)=3Rx$^+}E!C93KFcPgikJzSPXg2RW(pZ+EN%RK535Z80# z=hIiQu6+2F%sTtw+uC-HmV>ZW2AgkfkInhWvi&TG_Y3%Y8-4}!A)TpW-+ll7?cW!L zkz2*MD6BcK= znD5ceV^&DCpx>YOkbkCVHWBBGVD14;WfK3)LY)1V>)bO6(t4*Ig{Xh^?sMC74O}7d z@0v7!Htw&44YQiuhj~4I8ca8abrtNn>i(q}X(kuIt1OL@`-!YQ) zu2fTOLHU2$%+G`kxSA@n?%u=+{Z})4ZvF3JaWmffI(k?2Uwv00!_ej1!tpf?{8ty6 zKuZj)E3Dm;Km04F(7gTCvpq5AcB3!^3`crx`mbHu;8KmuBl-&?`b zf0y@P&14Vz-@~#HF`#AIFY(VD7MOcc>%Xil<}$|0*8)ob`~CtGaxZsV&dok5!TYP* z`i1PGxZMO!qTj0Qj2yr>YS`Qaf8CKlH@wx&=lF1{ zarhLiUo1w8yCAAp@XO=`^M_X>4WEvZD3IrkhD96AlKj~&KMqkPaT~QEW#9|KADw?h z^d{z>t7x&0`WofakvhXF_eN67o%r8F!|p*sl}%llOG*YENAI4$yQI{eP%maSVf68C zz^0AgwoBvR(tHMQoo$Tl&A|1@=-H(?h3Gx@!^On%-%r!W$-jtcvA_*pjVUjV^EIux zrgyYP^)rPi`Q+%UqM0ezUyFsA?AOOY8zFeW+nsYYRyP3x;m;|KB&Nwrv+M$jtgcRha;zVSZK~ ztr0sx7~aoS=&RZC`@x;>pd0lZq31ibvgT6*2W1%wk_w*+g^%Ws0C+9|#N=M) zo|F9=!fVEV_JM>P|fnXuzec-kwvSb{4`wM_}QljA8mQJWfRR4p@WdY zhO)I^wi0vk&o5^F`r=JnK~S4Usg{NpfwNQFCP%ZKF6fiuY3R_!n9Zf3Z7110aB>pw zjNAlbzF*$}n%fS1?aG;z_gwlp*baoQ46KpL*HAO9yLPDa599bi?af4nWY@Gxr*g_m zFvsMBj)HKIE>!<# zGrr$5%a`h_*~*w@k@c|$0Gd6FfGYvQgTZE}vUe%U_MYSFoml zJ*6pWFgvs?6UR@cCo9QkrZ@_dka18t`WX*&Dg7Qx#pa11PZfxNOAx6tx9sURV1|L% zF?}q}ioCCzO^RJutb6?51+c!y?z3>}tbo2+ctf03=yScJY{yVgSpsxvPzxvz9MRXdUI4&C-c zHKG$Cq3_<$1;sz%gDRbL7G4hys$-Pi-D!}y$F`q(7k^mR6O-6D*e{Mvk?E3>-eGJ zxauz^4!%}a%&oVQ0kIlgR^$Ykr|X_2WJ2&TaiDmdl= z?$amgfHhj%WyKL*nUzX9{5gCMhQQx3+!zHptbKBuU9hUg1y5;&g7F%=KUQi5d971xY(MnlG*8_~D zhr2ioDg(?-(XtP+-l)z9#YHTFPwJgw!sN#3M@4LL&?HvB?;lL zbhv|wRfKw0uaD8UoYo_Y+tKtyVAyU-o_#JvFaFuKlx5@sUnI-o zWvR#el(Pa`m;&XpRs(S7bd;wwF8Z2jS2~kx1`5iO3z4>{SmO=m&DNelaWpe02QfDW zE?g(N+wpR75O3pBje%cfbi??9!|D;TA)fo^PBfJzjMA?W!lPSluPEQ zeU(ol^mXx*J*xAMUNgmSz$EZF+qiweJ`nf)2Pjt zQW+r0vx)d%5-|DUaIMWrt#Hpfo!955`LL-^)iGXla7$V<(G3J^VZ2XL=u9`Z3r6pe zN9q^0@*l-8lgs9h8j=JmMTy7|TSdai-_Kcx>qf{#@CH2}u%X2$57B)y^F*mMJ^9#E zHhvM#Z1m}Uj@D7~_Gep9MxFQeU09nZ88l)*_X`FdIwDkcCr@|#o%2Pf=76j9RZ?2%x+f=`JE$v%h6yA&@yNH8od#7A zig&|px-sA!>|OxYC)&@yl0V<%i$O#U?~wFn2`-il`-0gyboo3JGk^9BD3^%*a$j8p zz5KE(DwNNFyxcxcW0N*)Haa@E>UBnRvsg_rO{;U$VE6w+-Ft;K)pk+4C<>xwkks}TYE?aOk=V|$1eS(ikqJUPy=C4B-(0G0RJ5b;_Uv)Q%k@Sn!a zL6+f(eagoEWi@UoTTxrkbJrGTNT;{smF-$LI>QdA86;t#qE*R^+JsY?&FTTfpZ@o- z#ies=F*V@j5}CAgqjPq1pnhDtaixncg_OXaG#gikBFt<^&t`!+dL+U-ps>WHQ-rqk zRB8HX`*rl^Ob)gwPI`>b-OPd9=;L(e8FE!M)-d1g2*B0H5N_lYHM6)%_ zzvPA;tkSF=s`7|SVu!{&z-j0GDaG&9+^d_cG_T>4%98{hLJ=RLo1y;h}{KFVaeeeMy* zub-apN+4~46@+>5cLlMy$B83P+)6iu!{VOYKYnM}luN4}uYi=tMtv@SGrKAgNY-x1 zmv#|lM$xgC+To~vK<%X5{-DR(44rfT<5SYLqPPc{g!x-?L!j5xj(xs~{$T@-hXr%) z8FK)Y1A0bzM{~D4lfk?EGti55z8(xEX(9nvg}j<{xKSf ziJMyu%Utb>w}G6-3HcM8;HCpRNugz9&V|CO71?N8lMfVK;uT5}Jyj1=CUL{Gom+O_ z2t1fUIx(n`ewrEj7~+_pDSezti*F_1`=VuIMlFJwig+}7MlF61ID$q>l_l=1N|gS& zerQ&&y{k0S;1&%H*+LHCX`yhCZcElq16;x8mA8R#6m&12EDEkzxK+v&(o5 z?-La`oI#Co=xN@tZ*@8d4^+w1Z_nJ{JC(01v1z~tfhd7kF}bE5VeP}I&|4!NU_3#) zH>6iP@8(}f8@JB19+e5+XTmN1&UVb#&M%_Ue|&%LcxD5_VMQEaHCd4K?r86LG^m%L+q#nA z^ri=NWPA@&d=W%Sd(r*uEdBg%hX&Xo{@WoXd44VbE--iBfh-%C7jN#q`?KvchTNye zbJjd2Ex^j+KiY!r-)4w3BlHfwdPwjzKDX#ybJO5iIp!axbwC3Ah~#ZZuPcd9%atUT zS4WW-uz&TS;!eDJ1wj)RgU9`3XsYyT4cQh7jACOh;zg7>NHYI(r0Om+5Nqi^>J4pS={;~x) zAx+~gYpPsre1g1@$8jF>ts8t;7QtYHOAj~iS$}Wv8~|*A%^ysLsi`~|xCjaw5D8}X zWpj|r0`fqa!1Lpqzkl)W>@Tj60hOtb#E0W9$D)1PfBM|=(=Xds+&nX;FW+aj+LLAP zQ#KlNg+Wfb${r#%#HbmlF_=qLL1pfcCs7;+42 z@Z-0r)AT4v+@sLyYG;e_TAJMD-%`8*|L=`k&2IBeDoq6?xl}e?3s;N>@9xfb47>rl zL3xY9RLl@1=dvno{F`aa3%GP)M4ARE*C%gPFZ6Hm+Cso)Y->Q`y*2IGp7IDAKa_|v zIChK z=M@B!X4_+t(t3;wxv_9f^vYB}iaDsMnKZu7gf3o_0U85(K4ZhN0Zen{LDJ4FOPHvp z7PK6UsLzNv*Dobet*erG3>+@HAV20Zd+p}38hl$2E&!*xIFd zPYxRJI<|`->#R03MZb@JgGTU~kVGJ0Z%K<|zT-9*t!bv@xhTK3>$C^Rp+s1T*!(Sz zuf6J$u~O}+uutq_Ki{8I&vY2B(gqZ`iGR)*NE7{a&_CJ!JH5m3GZ%Jf+%O{&3RH3j z3<0|t=eS3n>Y(E-z?~|LCR|Ff%pOt+?2h)QA}U?@aP)~+()!k({Pxk-jG-kV{qV=4 z;WGeYU>Y)dMEKhnLCL*7fa{l0GeHCyZ`_wU_p|a8&*CqwL7fKjA zX19QvoKnbi-A#&i1%SRAzS8}^*}?%yfnm<89>6ryTILc-p&0D!iJABJ8u{PPZrOfe zoV-eS&=~HtMt2C0#-;_v3h}deCsf>E2%VR!kcVzlt-g&ONzJ>@8ARMjtK&R*%xk>Y zlcFF)h`_qGcoRn|B-AF&wb>6G0dG^{&sRTlirsS%7uM>-tW4vtHXWBHsHk{zBsD{qECh-C0L(C3nzXM!9xcS%L@>w@aYnSC ztYppkmEJsQu&OHAz;$}R^>0KNYP735t0uVA&A&xz_E3nk@FEjiQTZfkljiTy44#!4 z#-y!#Wa5^Dq1Vn-qf{gxx9~!)<(;eF-b@_m>E0$`5UCb{KX8ljiZ27lfeBwn?y%~D z&5mDVS31V;!!676pN2mR z`Mq`m#21khs=IsCEr>F#&em6Hw2ZjIaXBrUrq6U2RB)cgDk19>I3uwqY-J7e!l1-l zWV_3}y zqVnqohchDWu?sknXGTf%Kvv*@+;y>s|JsQj)$MAua8$Lz%t1YFQ1`0)xq8%USZ9>c zUYhvy_pjHr+i9hZw(9V@mFXkP%hZc^nHMFbmoKxO^3!86<$cX6bsxS5F1kbs%tg4O zQG!}#3vo-OV>{FJfa;I7a((fH_f?}ARl6z-kO{?A%^Z69IVj;}U;$2;_gB`iBCkaX<9gy16@o-!olKj%>$37~J1KRMU`0Qe$!TfBli&>~xH982 zb8LYS`19Uef(J(!_!amAJaz!AGhAl+G2O$Ek}iS*%{QbYKM14LNUf_3Htpfw(@O)| zbhG$u9^~*)!q`b*%d(_kRMj5&vc_(_y1WXEi*Z3`tMe$aPHDEhon~uE6#X&$d4lnX z#nyeD>`JV)scn0yBYpre-`)A46z)U0F3ro3CYEHd;g&ntZg?;d^CIO3PIcK}F0p4# zL%*8*2x~m$Z~f{lEm}O_x^S=cl|{IBl#CH;ydnKTZvb(WEIIv9zNm;IHfR5&aI&** zQPg0!a$xnXOMDL9=hhLXfW+8yR1N>jSR@6$KT$<~2LDSqNnX^g5x*L1oe3i=lWm2` zt`oW}oo%Ha^rFDZ0%0Q^FWoQCOxK&aWnx6XLKd&H1G8S@gIQrU(5j_XPWfDhr!5g1%AYqX39nMQ9Emf>_Pj$2OjP<0 zS`iYlLIc0ih`MuVq_eZyAZ0i`(}$QTHQ}%UBZs##oVuetYw@rc6Kbxv}JdRCQG^)f#N;@8)?Om@Mt)?SlO)Mm}#8unWN))m;;0Ml*Xm zL#d}sV=wS!ewrMH@cR~(Z2H-BO6ylDVe@`_YBdy@ALzG=G>{fu|QWUROK`0-Wn$Ox096qHH*NZV?;|mURs2a`s4;vCb_#a&z=F2b7HB zAC>Lxt6-L#4>D+Z1k zGui|ZjMc&ClQIoIRYh!=t@Jvnwsbj93osvb(>OpL5!73@jFn7gJ4&MrBA3c@>k?EU zv-oZr?1N!la+Tw!HyaEUz)-_&bCNI=!RI6=3CTK)x+Z|^@*a4=TM>!U&{gxb@!1nC zdJDcg2}0}eu=WudT}IF9ZeoCC-Y=%gQgp94Tb?{o@u}1((@I{6xPVk0!4$?=Z$aJ- z)Tgcu{{a#REV?iX+p*`W)utS@xq>cSmnBeXpE^Zdla)!;DLpWhIK7wJ8AH}u5v!l2 zS_0}W`DD)=0Aq`0X5-n;t@R)JoQQGj54dao%^MwiIZ-dyqMMf2ZBnUpYOMJUjIb$+ z@)(P+OU}ILdTX^vAq2K?T>-URorrs|8Otmc`N^%iZNEY?@}~63eXFZ>5H|G&QVF)S zr+lp418`yRrLtixO&BaDq_&OXmk9Q zgi60BKNG7H_{|eqc98#t3w!&Y`T^eR0NV<$eT+b+3;Z(6i1h_ZEKkOuct)9@EL!C+G^MEr8#-Bg zP5-&T9oJH7h)ZY8r+l`^&hh|dmMpvGFfE~Jgv7*YDL-Vt-wkmsKKoH}$s_W+@Vm_{ zoLp3J1^Q-vgt0OFAcef>`%9ZhYEgUh<(yE7zK@a(if)CSuNtO>)Mvo77f2@_*ASye zGV5*LQ#>%!5%!5TX}d$7$Q_lsVOC_DJ^oCx%K08w(alvxDpolB*hEB6i|E!0#$kH# z7qI%#w7z>-5X=w7=v|Felo~Z3&B-V9+T+x&80l>S zztNsq22-18=QvEt`?i|3SlM{55z`xcQrl|>=a8_)7ZI$dnCpG-%HF)o%R4b@rOsdt zpZ?f%;))Tsuwl^(T`%>rT!LLDm+ap#2%+M&NbS6KnqzjwyF2{>lS;(%>o`BW1R&WY%qgo`|mq z7QBkpYPBT1zD3C#?QXWf;^PpYxbt2-1@s~9k>(1}#xpcsSOpb7#N9XtC+&$NLv^65 z(aZ$HJ8!>+R?4&Gi|lJkaz^?d#VC?sDG;1vvCwt+F-2D3&;wm*gu-Bap)Pc2xtvWU zEj`w0RU(1|%?bs23?~SO@lSuGa8mS~s-kLj#g&s{aJRnvT7>p4mvnEXsu~Oydak>f zTgD@-MX3T;)r}rpRq9t7uW`#cN_c>F&Onh4x-y=rXBpAHmW8SK`LnpEBWC>{OEmfD z9uipH61wlG&f}y~dN9;l0Obrzj}`d}HFAoEvWRiW>QQ97knI zpb>&PTCG&PJ4ZpJ1+*!6>_4d_pohS{D5=ZFH?oo7JX~8`4bfgWGC$F>z5?|p?zSZi zxSqwvwN3ujlX2{$5Cr49xzQPHcBO)(mz@1z^j4V|%6qV@CHn{~7~9%;H`dtl1$m~8 z!U6l11{}oJs{ZG893`J>9x1iZ>WFsdKe$v2l*GE|z${+bymt99UhG!Cr3-rObuTum z{^5)$kUc8CS@`~EH6H>!jXNhEA9u-I;xXQYANN;fj0Yf598&w&d|ni5Md@c2va-gw zY}E{D9i#@pviimURajbr|LvfQ=k9;_lm!I63!g9CtG&Kv#lSgpW<>H8`P0-nHKncf5W(`tuRq`f(G88PSm(U}dT? zN9*_-rcT$n+sj*a5Ks~~Q@#biH!-b-I+Ez|_(A#nT#LE&s6Id%P>*p3_;0Rwq~q0> zO4JG7Z^Zp1@$o7K2UK^(U#-W8;9o&Xs>7Zbmslms?tAgAB3i5TU%La4P5-OUSUwLA zCPYp#PJW2C122j0(*No>3HKjK)Z%hwz`wsO{s_yKdyCJ1^Il)7|Nb9AqdTzs zC0grVcE8>NMW|=-Q_=C5XzRaboO0rSj|SfZ?#@3l*{aa2hhrXs_g`y`rI+A8pN9KO zKZBjT2$9dbJ^+2iz2@&R6%PNZW_0)*|Ng-LhwEvnNh($BZ8oeI+6HNU%WhNwJaun0uuKuRw;0#QfT?XzE z$f(SrUd}1jZwui2Jjba}ncIuKCYV#4F7qeC87p)7(*68+?@ve;kk>|vf&RoYopy?= z!*OFIs4@y*#FRi@{FKEhS^`lPZG*tceOfewD1VeD#JTE{K{A+k_o2!JF2cdssto`* zgO>=_3YsSfcf>uEyU%Qm*cnhMrG-nmM&O*V;OTbTT0`i7QXvP3qO0`BiIyY0y5dP{?GIlE_k-2pua|MXHk1Eu+cHiJ0+M@`_C7^UK}>z# zYcf-%O5m`MnZEXs)VuA!9IJwUYv@(YC7;$0lCX!Ri8$E= z1Bt*~rie=gGO5v70N_JXq)-%JPi)(GkhK{Ge32>T-_owOpX^!%4&5^tlu1_}iXgx* z0CBEk?yr+$uK%wRTHT#3eUHBQ;C|8PtyjQU9Siqv`lrR=QW4Tc0gkko4sW|t)fai0 zjuNlAe`?17Ql>GGHsWM;WGpc2U1#^HFiptv{NC*6?G9jI4n1B)$*(#$tbKUvFxmNz zMsycAs;M_5O957*c zG3>Wed%Br6-|>3Y&bp~@B&!QFS07%n*}@SY4IPIhcACaz-d#a8!5OUMT6qnCwAjSW z-?}kJxDXXJ(0vMkV@uw)a|m`x!$_pxD738HbEaT_GSI≦8y!)-1&NyvX4<{RauL z!3x&E1EqyQ!Yo#1>bUXBH!WV9giBxGwW^K-B&I5PgHZ~<#h17^6Ot~^J7T<_ecrPN%GNQMS)^hM~+(yF?;;CcZB+ zOLpx;=B8Q~t93s69gZ2+ZuN;)xG2kXHB`zRojuFjjHnFdIJ^R5MxA6xc$d=k-KOnT zKeFG0N*&l~z^E%NG;*CTdR4Ll#p2C|?Yd~B=(NAsg0ww$I)3>bZ9YFkbkm()ec1$b z-D!YaRJ#>XL&pzt4{dG+(0zViYq&SvlR< zD9Op-cYEddRFq-4?FRC_kCHJsj=U3_vhMYhHm(Na4FXLe-wqPd>ZQUm26uj_8KpLy zh|((4R$&?7%#Lq)uqD^@;3VDQfpc5`AEQFcv1%a zq@C(_;b;d)tnRVdBQ!@NBAv!gp2LkFg{33PlZ0DvaDT4kjPr3db>fAmm({xm#=?a@o@xTk@T%aeD%x zvKPs~^f5XSbJ=mMy`Xe%tSKOhchRY2i6vQn>>;&=Z?Xv{o5c}&T(9~`DzVG!q+>3k z;590`8q~A=t7gJ{hBxnMmm@%asCV6;>01hMuFUu|e8<-${zzJedi}r z`*CEe=MKI}!WHPx2-nEDo*ZqKr*V$GgS{VdJ|QuMwhZbxwE#(?G`lN5fi!}Oh;XvU=f#2Vp!Q`VT0dN2~2TmKiSUqtaVRoiX``z7*f3`Dan5oie zIKpdP;+SB?wSe~bJoGe~^BK1`{rM;9@3u|Z0(XOz30hfSbR3{Ddl|iG!lM6C1g8OJ-*x)SL=a%UJ3-ilw zIxmwi({ z=yP8vqBMfLd&3x6I?!J6kI!&&15}0gV&hRV@l+P?g|Q!A#?#+!?9oJcs@H_4Tt%49 zRPH2*aq}z^FgvYqs^{jVmB8byBDDF#{8ftK(lzl^DY}(x-(hKh);CG%f~_=ZKvnv4 zRj|8;YOFY%4)n62Z$*?0y57#wdp)l2(uGLF{R%Rv!0`i}GSj>kcFlPL`qH%%z{({q>M35Yl%i&1 zNmqB4RLi29ndM*FH`2XJwS;Z9NQLvwbN6NkN(%(+06-C%$VKFpdj0cI!e5P{{WN3m`5?EEI+N-?+(6sZ~1jc?cF zt`2>^DJnIPy{s5Imw>L?5p;djo?v){9cW4j#T2UM2H`*{gkHqF@?QyV2p&8uE z;P6@USbs6XpDEyDLr4s`w)jccR`^}!+Vx7^uU)hpQnwYljIk#rof@`ZR1Sh$Zq0oz zS`^#zYy)3zP6xeRGglk5C4?fK<@?pPKBb@EJ_D>v0{S9X|F zNcY;WVWyVk-BR}o&0b1`m1_jH@n;zj>@v)XktelfxTdqHAW4Zo)pbnpc1=&CsZ%gf zh$E_Sn-Aph$6g%PJScbzua=Y(jsR@BS3KYi;|XSJH&WwcL`_v#Mc0pKwYHv;?jM!w zR*o#4l=6es(S{nnyF3v-8sw@yu&c&ciJ2v=a9ER$j)2VSX}TG0^K<5m%CZB0t<15v z#Y*y>2I8CZU9{l5Nj0~-jTm>hS;mGN##kAn?Ei>NsCPZyK%ntd-q*5ddWW_u%HlqJ z>uM1s2Voksh)kwZUbu2H?q2@q^{c9AJ=Y1X9*Wek(IZlC=+RmpnY~?|q zZVkpi%H!fi?m%D1BAqPnEkl#p8Ex(N-rrebgLW zoDrYbI<1eM|HYZ`)z z8q&%cnZ0gU)+Et3LCB2T@Lohi@JBZy#WE zd)+>Ps1%}*_VDtXT5cm;Cf&GlhdQhD;%VHrrPz_C6g%|>x%H`;malD@KmC~kIyt>> z%adMUlr+HctCx8qLRt`6Z`Qk=jeFwtF(Kfj-|!p?ouBC&qG`d76~un zrBxWBv`1V=1ItcNQqJm6@s7GHJ9=1c4I^dNZGwW=REX7WPrL5@3Zv92C%Za0NypXs zh4UBr>Ai~RV=Ke!uHn{MoKp++ft7j86Icn63CB4g4Oada=yw|c`W@jtF_GyLUIth# zmge`r*j!Qd4kYj~KLDh4mAulkRcXk^|1DbpB2aM_0s!mK0VpgZRVx%;(c~#~8}aPv z9U)E9@6ZpyRjNpxKf1{uO#~hDd}`m-9q3WSxA!T$QD|2of_1A`PMJ-w!tbT{YB^+H zIJg;+G3-Z$_>4FIQ(irDd-hkl+4mQ&*wzaFk92c_`d{hh%Ly|cD%uKo&6)<7&ZYdp zy8V;ja{a%h8&?AN2~VN_&|m2A7h(UTMsQ|)%h|z|(|ws&6HKzv5htin>s7kHR-=C5 ze}%CBh$P}eqEs8(HvdUCr3C$J6T&4z@X~)@c`-{j&LoQ(Lmft|{wweR6c@sO!V@^$ z(H~csA0Fe=``%_;|AU{o&;R%1a5h0DOd$dxIvgwDZ&B$!pSI&<`g}zb#<$ z5nA>lEaXDHvCu5ox%g7cgC zT>>brt$4SGj(6uv!4tn;&o5e{UDAvGXe%Itwet(Sjr}}tud~vY9YEmQr_AFmt;_WR zhR-p?6b&0kxRiv(r^%?QYKW%;t;dNyOj5vBm_{4m1mh@JjxzpPZy66lB;#3|mxDph z)776K9;=T!Y~s&7fmtX>YkUM0;3!?*TqqQ(dJ#G*Z&?PIOuXP5fM>^f5P<610cnZ> zfS}@g6a}0oBNRA^0D{W*g|xG4b<4Abmr;jmb^FcP+jSQI$cM!vCyTN_cRVGUFN}w> zY6!n7#YR(FAUb^MOg;KFdRwNAKuSYCTwxq(6%i46#ukFsiM-l;iJSC?vz3UBz@mt} zQ+FdNL`TD~gn!rt8 zawgOtj+^+I3{S>%MFqHI9Wo<@94pk99ZN`OTgKC;PMn1zSXBS zuqAMEH*F0JkPwc&JWit~Lr0xgZSHM@QfZ;|AJ4Z5rNOJ*(*yS+I1I#Sw2CqM-aXWjF zfp~H(F3wWK;52WzsUWkiYp~T-;%b^l?6rV+N#cX06`2LhO}zfG8pu`(!|A9!9TSRH zc*)BfL&wp`c#gEmL6Q%~7bEp@C@ZlX=jt${s&$2PLbMWUGPZ(sdNkJGv*vk<)*bKL z3Lc3rORdGN=M0CBjm`R6Bkmb>3HSpk9pk8)ZU&rw_PpX-EO-JdH*S1HdCTgZ`=sKW zjS?+`4SSK#ouOT#i9aE?X<1SqV0o< z3dSM)T13;i9K^9L*%1L}A~KkuuRoxa-1oRz8j~^6piMsWSFU z*2|x->gHWkq%I6qi>CEntDBWlxU389v0@`+GG8u4c-^{tBp13TRq-fIg8&4uf&k!) z-;>`tqDOlS=ap|LvfM~B6uqd){3H49tDm_p$V$ga+gEvPzD5A#@A9rYGxinG%c(|h z7qVE6sa3j)P?B~upe>9|8-1SW`oJ&#X^#7Cb%9uKP<=o&<1c`!PGk)|Y7PvMJJ5C=KM`5<8kqTnRWPqo%Tf^H0BPdBnzT z@#w8MTW)$7csD)=6cOaXj}q9J%MC1apf$sEkK;c znIRtFZp2Kvl|q^#k5v*`!))gn$2G{ja;r*Hz6+SES|TcLN%5WdB;^dk#Yi*m9-Dz$ zW`bBwD_oOO2(ATp&7ishPk%Z3j=YGvIrx1^!5m!TruUjtY>N^oEp{t7)6h{ zE8TI9sL=Snd3J8%^~f+#$B&+Dl?DYGi$>j%Ud?59T8O2r9|o{IOd8YAgj9TcQ6b%G zC$a$1d@bFkJFhn<>%OQXAK!ebjm0O^b7& z;1V0CbiBL4Kbt&aMFTSQ*r@svoqs0mxKS}bWVJNNDzWMm2vYG{?9KLAF;XKh=iuz= zuX~z$%1CtcTG-TcAvKbt7cpDOJ)>$SqpX2k^)}ZdwqVnNpY+2^Pm^G|lU+7t z;4;kbD3bNW-8LIM8!?pJWE^QVh10S`D4~4#MaPZigF&QCK1ZcPG6`g%2HljMHuaxfY;CNVkMve)VCj5P)Uv7aSM)OOjT8D$?RG z<%#L=k2Oo>Tk_g>S!2E!DQo6mG$dj67^Z06gCY%&%AFGQm3I3+3-CUDud*g&&`U_c zTi|Xlz-%Z%lk~!{vg~oGx@mbv2439RWb4_9z)aPR){4dtjQ>qg+v*xJ0Fl(M)2Eth z=301-oX^#43I)C!LHbQD>y+VAj(*dHL|0BnK2Z7`j1a<7o(>f_@Z|IpNw)$XWB4cQ zSubTsrpe+I69?mHFgJFV2K^q%{rMsgYCyt@2VR#H{m@w&*|MtKOos@JFiSGT%DB1B z3Q4oHg3TpoxY;rfflC*^WuQB-?-%!>?u}^jlBh3gt2}*Ug2|Qx-$dvn-W**0&Ovg) zuVj1d2}F^Z(#wE-%08vGNNvsv1vD;Ui3*z$hZP~{sMXk)89N1-#@oM5wOh~rtUq30 z{c+3|n#IufrBiV}7X57yu-+?RFHqK$J5!#hfQjA+;TInv6?vW>&v>HJzhBiiDF{5t zWEd(;(%{n30YiVW-G3J!In}9@^=B`e1dRG`CCTwW8E#U;SxcIVZ8@?su2h zNoGZVJ?{AxD(r){9&TDj1tmWv{UlRL_Q38Lu^gw74V-&DTt*0Ttu>*q7Oy*TNR|@X2_`sB+z^}*H2YQo!81$-ZzGSkCy8vGl>sDOo@;)l)ymEo%lP+`k zNYaZ)7gpEMjo`mfG1hpWPb-4DW=sU}t+=Z4nuz{`hJQVwV*D5%{Gu)(L6OR|tJ0pA zNi{t05}a4vCLBJJm8gSs!j4P*C`a>d4D+rRU8}p@n6f$Sg=C&v3gxj5@ug>ugJkA} z;O#eoU6r{ulbATp70)>G`tIJ@yY3B+t^R0~JRK>rGWj{cCcE{=HhSFhviZs}1t}1W zqGs+T`qi01cay8fP!iTUFZr@<{QNbEL8gzfa{9}-Oi<&`YZmhTwq$$lH0RVr+6jHX zbS-$hWG24t1d6yeM{0d0^P05RFkRK_e0Zkqw4PGYe*)YLiScML3Z?_3?y1D0rn#Kq z#mfW|NNK{_0)DSt{-+@m_cu!2iG|jm%5;+}SYz~`Kx_^*d`TI2#|&}16g)Zh*z%#Z z6_GbkGE_=qxdOr_N1pCIW!i9SRyx&W{`?$=hqcm|9lQ3?HudLNH_oMo3`D?_slKG2 ze=CKDr02U*aj|md=&@;5YFw3n9ipvTjO{f+)4)Y3jn*G!2^DnaD3bE1GgK=DP=f8k zR3EE3xt1n8O1c4XS31+inBuRZp@u5z8edq6&9ZnRPZ#wJD2-L){MUk=z@o)ZY=3iK z=_Vc1+k{mbRx%qyfJL8ePQ<+Tn`Hr?Qt*CGNyr=d zcc5TWjSyocfjyR;75lgWV$E@+TJ{A_Gl+72Hkd!leVMSyX*Fb1cRQpIAK1e}g@&0p zZ+}(45bpctGRaCo#Wg|v=Z@9 z%#LqfZ1XorjRxf!Ae$b_4ntitOa_8t<8(O{$?T^X*ZVMT>-te|wUyj~6A7brap0W{ zE$*(TRSck0NPW?k?4MGOo3uH-$5x6(iANqWf+nib|D&;x{*T5&OO0QATTTOO;!Hbc z9zS1~+kaCq|5aj)Pj#csH_2(in8Bl9)T-;Q@TZ2qCd2wBRn5;K#@jHmbAUOpXj`$j za2&&IVeo(-@b7sg;=%IoRY$IyY%Zqq8H5-MB5f6j2(7&P|J3zK$XdFcvF(D@4@#u^Y_Moyo!xH|pUof7hY3omjZ zHDxDu|6xqi;Uj?ch$CZk0{)w}e2I@sLzg7L%Xd9xD6pTA9ragNv5fy~i1{D;jZ(|h zqzISZzfPAgn}21HKRgBe*-f$+h!~x}-%9X*JTw14`c{X0W{u159o_?(t_Q%(@}vIF zQ(!!FTAh}mMSv$RhxfMb+mAxQ`g3ew8Zf}R83IfWf+oq${7FRtq-wjx?r14U=Q1#P z+L0fSS$@>(9P*8AEUe(>pVsUE2A=eAQjX^3i`fRxjrX`QP=G1IeY5K3udh!696_eT zglmxp=s-8MfI5q*=UJ^lRQ)|Jp@oWNc8Ot>7~h<&ufm0zPN#*OE@ppVZaCxaWqEtH z-4|`r-J_BK6Dr(p@V-G)cU%bGfde3LylwObaFaN{O>x!W9f<05^>aNOq?$nfzE(PJ zdedK320G3c*8x!Vt2FP{0$BIEXDpexd8_#KAe2CruJ^+W%sbxFXA##>&o^WQ0tMEH z489OgTq%Xwd}ln-=_&bS>uM#rQEZyv0sNLgEjvo z9K)C%MB&K(z)CT9E-X-dR^rJ8NypgRB`dm=1jwFM$&x}36?jgV^~d=})4Bq6v3*U) z&G}EAbRT22lidr9wB7p)x59AjUPkRjH4%~Vl+pDC?POyUH{<^(pFi6ioCwQ|cY}aW zp>bT##aF#L!|T#=viw7&4;S^a;!R$!TDo1SEdS9R1cb}R0zG2p`p@S88idnA8_fqm zc-aiqe`v6Q6F+{?aM_hFt}||ZWisI#elxk-*f*|hlNW;2PPAdy&awh~;EWwJ2{Hg@ zxZ~z~gQIej278ljmZ0tuGhCERWf~*F5qkV+B`&cxaYRHs`<6(hK5_kLb_h;h2}s{4 z0zucLdxi=os~Dr5o;zwINZTWO`&vQl&f&s>I%Y7X{(M833&5o`jAPb!8Hk;%;1CaE z$sk5;=@ZQIxQUC?Zmmc3<(*~xHL5M0C>vg(@Q`wFGt2FfkVPQsJ+WbZ06~hNHbTzt z^d+{aCl`J^=hwh8NM`>ALU@y>U}x*3k`RN0hE>2?aB-lBD)j3tfhn3f(gHZIY+ly_ znMX0mCFaxK4DTOP8@vex7OxZl=tV-VLy?NK?=xSQz{&k`Zc=@xKy6i zYQwYRJcdPV6Uv8UD1B^LHsYa7&m&;q_z?x@fszaIsqz$%THKPNQeiMO^VClR&%Nj% zxyQ3rTXSsotCpFQQ3xu%;hynr^l%; z*NyL;5Hte`yHWziHlG-VEpo!%dG~`aGQ*ixflA%kLoBU%WEVu|a)n<=eMeTdTYq2v z7?(dK3!MiT(gMgaeUzN^&PT3Oa;k+0moM*bJl?iuvp?R!kyJMJqPSAH2(VO#VyLR7 zW7F2Nc!l-DNY7-Ev0n=*;R39s#~Fgx%#H_a(hs6ga)GNtElS4zsJTwD^-dovT1Sld zrBq$nKw8kBXIg<^(FZ^L(5#qr=jC|xQ{0oipx}l#PeGyRB9$jE)aAlKd3tX~MGQ95 z=1uuk<)_NK>Rfp#8;lUx99$45l86>}jTTDKKRYQL)^M^2^-`YW=NvTaTv`w z1^a*2`Yk*e`s6+FId$Blaxi2Kb0n)I zki$TFXG;UsV;qN1N*B|5-4lunsaB}fqZuk8BC8E0-WpU;Kj@OSaW%6ITg-3NB?+tCvlg3C#DD{#l{PyM zJ`VYGuGB|vWr}Q^ymzS(F-FiM=*a~ob>f&HS4cV+Br;#g)^qbC`vlO+7^@wCxtLj5 z9X+j=v`rq?l*CmUPdqELNu2IGP4W*Z)*v-b4Ytg=l`sZ*Rc)L01rGY^ z610<4SUr4q#ER{JzgVNjk)9Nc^y=Z4ah^9=1tU7u+^`hbyT38)Ceamnkz{cu?~44{ z=ZY>sqDbYHm#WPE9}|!G1N9j$Vuq9N>WySLu=xQn)kvXGnHe^Eanf%UkwfwN|6DD# z3!VwwEcqvX+`QkjQN1L3T9^GRt0vCT`^>E1@+nwI;B~ zAND~?r&U^TQNABKNv%UqrMr#vguVW&Z9L2h8RbI(cr5Wgr1E#Qh&aldCA&QFJrSx} zYR4sD3n#@BVsJfCzl?xPEvM_PTyH}$0QzX z(w>3xbc1?5d8leX_r29^Z1`Y}wlJGcAgv%%=Y)1gjkxz!5YKTCnt1||3zX>CFhv0N zofL1Q#x_Qkacs}k)vfsNQM-#JR<=S6|BbbAj4kdhc&@>gkOieA(s657qn|lp+k4F? z2ZynBdUKpq%5XjD=~v}0vg&z?%<@ez-a_iGdj@cROjuR5U{sxCW%Y+)Gd=rStD1Xw zYq(%?0lnO;QJ0DaVEPl$!|I1|4mvRyx6(PT4K0XAG;g)BcIm!+>T&mwDFLL1GqsDq zhAcHiEW2t@?*5k$Bz_;+#leas?|ty)9>f?O2?dbsp^}+|Ll-?#OO<3|VL^N9=iYdg zCM|{x5UonVnQK#tOlB9KMNS#j1EE>7S&uD-mgm16Yvh-rtZ5k=k3p#%Qq*T9CbgyE zw6=Mdt8%U3fre%$Mnfz>n#n2#*hmUOPVev8MkQ!rZJ(!)K8%4QF1~vDM^+x2`zAd` zT#ah3ZwmUwEW9!-itD*Lu85BLTnqO!|3CJS*Kf7}W=c0Wv-27ydgIsB>+Ts5Rqn(a zRxUhi=m;Jck|-BmTLK13iaGB02ss->y3&X)Rv>~06A~Jg4@L7~YjnZJka|A!qA_1H zTNe03EjlNU1xxC&bi4u>t|K6*a&1>H8N;A;$!!HL0;|$E$5K z$`$|5TDKp4Wc+1ujktUOpY?$z;N30zCceK~*C+k_=XX{??=?=3o#(kapVzDVdvpHZ zo7>hGghc<0_+9BY%QL31=MRERT zCW$8-txkQrXVWV^adX^~E9d!Rk8jW6PZk$8kP99;*@?E2d#TTGhs{C}}Tc-w~7 zBXU75LY_^oLDr{EDQ^1o|CN%bVB>=-KQ_zjtuoV678g&^jTC5`bEO!#(ec>_{vQfE z(^U&~=UcYS@s<~|Tlq5&nNi~1mCav36 z94l1%VZrOeU#?%flo;)$+Ao@St36~f_hj}fS5LR@`oR$SLiNw7sw@)L)fX>)szOS#rldzI^j&S{d zvDD1cEw*FUmjlPYL<9G{KRVs75&UaP(%q%LiRP0Izv0f2{sugV$iBd?f9}$cYg2@U zxqMz_{7I8ptiMv{$ox*}W2JLHZ|v!>{Ok?xY@I(~n15iyzV3?$Wsjdcwh`EMuJARB z`}V%**YvBN9p{Yl+LM>=(C&PF%Ra(VDDzcRdfchZP@i9)W`}Yt>}@xZ|t>2Yk{||E=@c-$vpmA*8Hp1 z|I*c0M;3Y)=>E*sWUtxab>bacn8M9}XS!mq%Q9!L+et}#-HNwuo^wYgWfxtq`W(VH=R=Ok zZ7<3DH~Y?t-KyMla97nCd2!h43I0XUqbIH2HN5-f#|2yR09?i*gR~N(=kmvxaznOv zx0qKHZj{(jAS3GzJwdY)x&a7$Ix^&F&gWmlB< zW3g+;x{n!%@ebG`65vi;*qW8cd@t6$Ujjev*MRL9u%`(h@34?PUn-vbV4ZD)lz4X| z_wkE`&}Az#!Z9}Xl*Hw$T)XW#0k$P+g9Pjp8y#N54+=XZnjcscuCZEuF!=yOv&QBeo)vE{e+S>-3cI+g@(@Ui zPi~UOy;M-(1A`xNa1Z3}s$;;by;Q=~bS`VhA;Jc_0LUPpz^S^uXQSiKJHXQe%zy(b z26zuQ_G>DPUY1^jNRrTWkZ=#bzH`#Ex9^+Rh`BD0 z&)h7()|NRHBhV%vz<;_i=ds+G^G+g8R)WXJVf^~?bMF1BV#7QYS*;QO;nYGsw~cHk zV>#5i4Zps7H}-t}%7b~RwGR{UtYzG%K0j2E*q&OYb{vuVp;7sa7r(we8!KPGmefG3 z_JSTy3|u9L^_DSki~$er_B6;l{ly2%sn*i?^;IT+zINR>0G2LcDc;b46LIV_Mk)j* ziOC6froEgggXvCl{Q5p0d$x9c`T`6i6NJz*(ue=IHYZCnBuKO+{*Rv<^U#q&Uc;)O z^9%zskHG;T5dpmPZ@c+a88(T821Y2cLUMzQ7K@f3R0&v}L4xI)*w6n~I~am=L4*z* zIMnboKrx^bNiWcp(+?j#`nGJ+VT3vcW>e;A&aDorNpL$rw&}EQ&AwMJs)1~GgalT* zV`A>y3n@aj2ROo6v_fEo3(PHG+Zvv3C_DRmJ=0NSyScI1{f@E1tY7Yb#D!i4AnM3(jhcCNN-X@4TALEdr?B@y>|qJ z&_fHIa34J9`#tCU?)v{;+&A~dy=y&-1tBxf-ZOje+4K4AnLuSF8KOHhcdlHyLL~b} z^6ix?ctKaLTzho;Ch*DaN0NqDt~|UVEBQ**hju zo1}Usv7owj`ftKxkY^UK< zNAo{~<>C?`?5<;$BW>DC#*AO!Fc;cqm>z*8eb_4X=> zIIMgjA|g^;-}@B>p7c5&^SU8(hPlAmoUVesw4<#j2Eb=8bhVvhfgzxbJ9z*-7! zHRTWYx5py|XV~?zDX`~mlya*V4((-~C}1N^5h3;O$@YGX$3u!r7I99H{6=$O1Uc)O zJL@qIPW!Ajl_N8Fv068}Q*WH}0k>9!%RTSAI0JvNgF)rH{1eHd@&BRoOCBDsCy=vk zB#BSd>T$C;Zc)7QbgRxr8>z&nP(dRB1}6y`UhHySEO=^`s`mZDju{w~FPav9-0j6D zx%uwOKc08bZ$76$H8zT!b~T-KJv51w1bq`6>D~2AS$)q>Bb{@;p7L3FFk28i;9M}& zBz_zvUJ^EgW9Ke%=EXv?`tCo)V!-<2_7q3L|8X@b3K+NhzS0X1K0UW={5nF|&)=M1KJ zo~#xtxq7Um`oE?b@yYEoI71nX6A4Ve^Cx*wDSqT5e!I`yqG5M?o7`-PJoaR`e;Z77zt|JMuy5CKA9~2q zl!bsjj}C1X+i4*~ouA;e?9zPy>E7Ox@4h~hw0*`!C;0I@4ltfZW>85wvp!Z(E`j$+ zo@a0dR5*>fW`M_IRa`c8_B;+3btP9u#XR6Jp3;9oy(l}_fNl(PK8rCi^&Bbly;I}` z_`pR(Jfk}I%5k_9By!_I_dxf~xlP8^IP_|YBc_yE z+7t(b4u)8qE373$Ef=r91}T&LZRh=QgsM{Hd$3(PD(t6*qlMsuqKlKFSES{`bJ`d~ z(^}Q=q^_v+P1?C5X<2X*=1FYjYET+Xc*JsSbkub2WV9;ibXep;QQcPUmy|@C#+taX zaIq8S{NTf!)MDpZS2N8b4b|%R&(ELBpbEk(N5o^s_{Ma}n&q85mg}_wh_)W~o=+?qkTC?yNuhy5HpKXKaORti2GMy>BkdOnA!it#3?Eivz$PL4II zDj~Lu{LmHXe$M1Ml zmoI_7#of_iGvY8~06#a}5o01nxugWiyv_Buj>2evYl?ds<*)bNL&&qf(IL$lH1Kd@U+{d~2>RvF~!nz!$lX zg4XEOZBlWv?}qRlb-811&OB^CJ=zNiF!Df9Jr~*<_p9~$uP=GG8orZGW4=3#%$QGJ ztH{gbvbaXklPh%JYRy{}oNhW0Vs^g2$&1X!^*D?Um78&HmDmgIdDOmfEz)Mo0;X%Z zBgeCA9iplqL!ub)4J`@^t1oX^fBR_E$(#nn(XnE4abV-m9nAD=XKoS7x0kCQMS2nI zDML<+ejhQ)?xj-ox8nWPm&*c^&l3b8W1P%>%HcL@D$jqnplbFxan9L1iB}x;E|otP zgR4(UU#^_8W{sfe>CN%tfR&UVzvp4lK$I&!6)p+riD6cXrcmTwjJn~fy|Aw+L(Z44 z2J(&cBw{}(4TNLr_mr52>bb{4@lssXrWB%=1;rW#w($LGGpr5&8^FJcQOBu4$jNE0 ztrZo01OpD6aw`;8{xskOt`r+dIcxS))dg#jOZnE8c|%P@@BXY~_FOr*K~AE{)h5A| z4jV7ZN0!saOe4-I7_rjwc-d}wb?>O*kSkWj0ByMUOSNeU%X}g%I}P|H(M||JIKJ- z+(#fU7jTX{!TN8C80u+l>Pwgd@8s#Dj%LD0WkK+))Yub^ytM3cH7}UF8Nae8l2ET@t~dIF1+XThPgOwy~R=o79eKsZC`(?FzG5C-uM9X^TYfAgLFKuToLp-)!?n z1R_+1&{^W=<{doNt2{QVa|sVoDfTLy83@MfUng${oTPgGJ$IL@{0CmUX>Er3uo4f?#^6s;2YJApe4ET^r4>kKZ=_ zJsW^d{d9z?Y(dxFrW@L4l1& z-dY)gUv55N*a{qOSq|4RL5djJ2K`v0=|DR#WH)PZBMB$NH^0ihuw z^^`cbkq4_qzJmJxM0>mEy1uAXEk#i|0=izXxv274eu6~+=TP?x^L_bEO2L~^4SgGv z%J?;1%r9iqQ<{Xa&^kODk?~UDe^Wgf#=r7nJ=6*IiYT zZdG}59TDe=_H7Owk7b9jIn-!F5reN=JeDwQ{9RwEEu`DHG)(dZ+^27U{Ac@Dth=eO zd+A7>Jtm}aoFx4RmAMZ!8LJjTCs-X0x5lEea0tUBFyEIF(IMXVQ zyQsBj8&8P>VcWi)8piMr7$r(BoJG?1?B;7B6HQ=m(6yMEv>RW+MdW~sui#Et+*=Vv ze=C%<9Y~X^w3!p5rJ=d=z++5U>3Yu%cC4aDUx4>g13x$SJ6bQHEILZ|vKVx-r96eH zmyUye5tf8Fln6q=iI~s6v@kcv;=y!r@sy|L+4_4PMB5|gtDaRq~ z3-}@jOBg~J*2jz6{QSP@XYf!=bVASh1%DymJ8O<<5!^ASsw=iUvf8oV3EJ7OU@JG7 zS(K>u;|QSv_&`qArn2{5Oiz;N)I#e0|bn;cukQsy3+$m=?N6`^$m zNg;$2@4Si%bXBwc`vt?+UQpkmMw|TF{`B%BN zZ#b!&rC=%jvSS%2hjK2&62%OBPv(jTYaMW$!>_V0ZWK6Kho@9I<{w5AYjLmyXK$q~ z=Gs90u|zBGx>S6TqcZc=LGkpbTMFSLKhn{Qcg=9eOz^t>N$zo*hK@zrRF1=fDtkvF z_Thp4C6Cd0v?w~<#GzL%4DQO2SWAk+yG1-ccX2+KcroN$khq)9+vlrrVnF~~`&P65 zT8RF@d&D0d~*V?<~Gx^u!k4PN6e6WAg-wH#*hWqTQ!!MDGg~N%Pa{c(K#vYiN)d zjaJtwHCoryHg;tdDq7}k&kV}yucL*(3hr9e@-5A)p4PVNthF>RL80>sZ$f3V>rkVk z4XlLn9B68(4nwcL@&0NPOQ+A92l@0(u3DXwT9rGy_h={TUU2o-IsjoZuaakGJ+OVsFmCW8Dv4NL;B&T0{@G1*zx zHdy+hpfZ%P=wbMjyxT~dreGI8v82FrZS8Ja%wluNcc>i)`GoPT&1sS*2)=uQ^ zlIuFAzO$>h&ey-HgY)f_7)1C@waa!Qb-tv9=9*+?vO(&ovjz$7=l3WvTq zUPH!16w=3c(JLvHaEx(E&B-d3%ds_5ndAxlaI#aGgTB(3tMP@hpjV4P_#FY`gM60h z?F8;HQHbsb)+%%|{9t^ofBlPrPSWYCb)6TUDvzW0wgZUnhfNtVEGCk#mh{f?E%7-r z294?3hn}xD;qu&!jtU(;f0l*NWYB&1conaP@R#29Gco57kTYNT2rW{$^-idj&3kg1 z#*&BSIha~hP#Y!sP6sa2b{L7xAp7I9pTus+ zLVO-{Y&*bYQ2k4pAk-WO*BiINtE=UXs>ufyr*!87dD{0&Ekl*A%xf`k7meGcIS%!6 zDK4$BGrR6J$b@E}oxO5{0MBHJuS+VgU^aO(rDd*q`@IF9p>@YV06u+$ni z6yc5eV);sMYR71 zb0(qh?C8ok$7)30_P9d)oxZTpr;ZHPl_7^ueP@3PvZqeB*03;zMed_x)|>g)XGbmb zf+HD{%kGSQ{UO;^_f=QYne`8 z0pmiS)g~WcRy|h>4}t3lp%-JX^{rwbE%mPFyC|{z$~iicp2sMQckmVPP4CO~68LVL ziygVu&V~h16b@h{Tu+Y6(OYO!K14Jz5|Cow@8-xiDhJD zHp4HD!Z({PPMeUKq`hzh&xy&&R@zTAgD0E-KF#20dW<{8P%e%%;tsto#`Ha~BMZW6 zUz^X+Ubw7eQPN4Y2aghVLTMb~qnKgrmz1$DRoOdQo!Y4~JG)}*>LhW8Z%sOdWyq1C-W$sO%7r)P zS%b_N@E&cwPNr-rlBDB4#nJI*eo|F*LJQOb5Q ztwuuFKBlC4sP_5&REn;phri6v;*zrsLF!_VYKOY*!~O7{=$tR%4JFK>U3L+{5BnCM z&^0T5n#n7uP{x>`A~Ks$Zsey0=)Ep0Ti&2Ypyjp;eWUfmwuXNFz6=4a-8ExThPgsi zy-Z1y49J-P`U<}bSRUn$I)(K0B+qFeZ&b9MU5{Cacw%uzdN7>ansL2C5Xj#|p_^h& zEUNeHEINH%w1-sGvn(|Z{!yO_-N=i>4>Reb?6RUwz1jIKQ_A*nM^MJ|a|VKBA6D73 zHm|d`hw7KSPs45}>j5yq=vN1`mk35i^*dQ51DAQ!xbL)vis`)SipU&x132|Qg@n>!s;>m1g;ql*25M*zJ*wo z#D;U06$YQzWZa{joHEM`?n}&VRB@^|R7+5T?-@Pe_P+|=)AZ3c(pV1t;~}N-wIbRl zsfXqLW!Y#qiEyc>w1`**u%te$Q&``w_nt{xj9nZKMB)75yR>5r)3X}7&kik)5h@0# zz2;BQ{n?85b#mc~;$EQ*4Btl7F$q79Mnh7iAXHJcC5Fw$0>-Uwn9h(VvR*&s`jieg zSQ?v+KD-NuhNR4e^|8#mdFnA2+N~kAl;FX=>m?u*I_H*EpWo30=FDRm!|8_W7O%?M zSsL>~JTzHXqT?t=Z9*o4(N%)<#;2?di~5F!aL|FKZNszXFZ zN~80@PC8zqXFTCoi@sfx5gE;|q(_o%V+@gYZ1m^o6k7eUc_OtX+jkN=F4p`{d|g4E zuB$BTE`hr%=Fde6qmh3GmE2lpKiRTY+HS@j4Hv6S1z&gF(n$)FUPa$U&{_$xz@1@M zI(?CdP5kGqVP9sM#q~LTm;MMpEt`mH5PqL8^MXE;);erOYlfu-WM8Os@W4~2xcEpE zdt|AdsdCYA%mW|cZA@Am>ATTUBU(_W%!E9zbVQNvS-#AX4BhMtZ!)6(HQM%Cq{?~Y z7~6e!^R-rtvsiB*IN>0+{~J{}Gc#Qo{-Jk4I-T5JoP9ldgmYca{cAgtEmpB7Xki}d zFHvN`=Dl`5`X%hgO5G^xVpt^`3hG|&Nt6(EC7aurtY9Tn!_H@Q-wX=+Pc6XGomfeT zghqub_-D~sXVK^LC47TfVQ?bnUb9QlJm#zyL%x@`Etc9x;&mk9b}(Vab9#8x+2ikT z)*+i)L$!@B)yf2BUKVdSI@xollqB<8`Fyq`RoPB!SQ8pJ7z}lBGM+nG_)KJcs{0|B zA{0D)m!q|YawOebJ+6am$mO;=5mm%{WIF(Rl5Y578_=mpMTiKcz6=xoIXw^D53bEFWtZ&n%~QM zRx}MRW;|8A(a6J@&=<<8*rrLMt*%6&?GIbXyc?zLbviZ`nN2AFx#-J*)tT@7s+fbu zR2DjRTX)tWyr=o2X3FtkiVA4jj5VqwN1IZLhsW|_Ui!zU&Fc4F9fZ~MT4Om2Z-$!6 zrw$1Br(l>DL?+R(=YsP3Df2FclRQE4`EGrmum(T-o=CSD?uZH}pMb-XOOHCu1i)Vg z_g?A8`KHXpoQ4=J>!!4+1cPT|kgC~^Fq*{X zY)hybLm{uru))mC%c}zN$6*rZ&P=5f$feiMQkqXbD*0Og3CsM16#jb~8=H;;1|@k) zw(vgqY9*;8$k^p@#@XKtA8VD4$m%8&E9g2s+#do{4nr)2x0-VvVV+%m{`~xY9z$QcLDd<69+Cv&wBojCAVTQT-UM({6`^9}eF(Y3P99 ztaVj>{Tc7FL)K}%Nu`TS9liJD`jC8|AnIR=`?CZru;hQ z?(zIAV1MbiYX(X#WUf47^S_6;N?6G*cCS^er?RG9n}AJ;cYPJ-@@z7P=AB_=R78nk zdVDRb$-|_wYbwUb@iW)T*k=2PSNuG-Kyo~850i*BES+9tB&!NmXCyjq?(v)VoO0=1 z;IjNExW(ITa|c3~=wRFg6|EbgsGtbTQH{HkMrGxUIWB zqAZbuRW0KPo}YI(7-;74UHv8g9Bl`fmY1KnjZPf2LU78ScbdOI;v6)PpLH6AZ#{Uv zgj(tgrZk)FPD!2UlTaD+Vsu|hTJPEbUK?W3@8nQ55eeofi%Fezunr%3;iPNQi+vtk z?tZ6Cf@D*d-c*^r*Ar%HSyDCFWw^Tsn|B@fb*9oh^SKN`Y@&~fWJ2yUD}8KC{|{x(_b^+-9)%9$3L{5 zJKu6vOmT?IdCKL9>rYV`-s96hcID2&hwh7-n38VAu10)ifb}M!js|6&0~ttb4fH)T>iNWDQTC!bEdN$y!e& z_>1ez&gfyDWBf9$+C$E56^@^siMGPslC>$O){=dU`?yS>^>j4mL4SR0!WJmbHo^73 zQY5MEDizyv_FF!UoK5X^5=!F=b!jfn?k*n6W_ZpfKrawAs`uuCaP}KjpTb%w@{QOo zjYhn)x!)mkW*>9qcylGg)Pvdexa5teQE=JWZ*i-R!RsG>$W28wRx;v1=ZHq>M`sA0 zoi~~(Di^K_N@$nBAu^g)TRd1A+Q)uy9&%nC)u`EHU^}8t=>~f~@=*9XyFo&~Algx{FE0%OVmUSbK<>C$-)Pcv2OEQu>M+>4# zGNA$n-GBDgHYe(+Wg#6?^2UNf8A^6om>~gX)FBnePyF2P3-$#v67!VCfxpc z=FIiMpfHo&47h%2(@9>_on15q^JZLO7hy?775h@S^90`XcJ?`4$Fe z9cQju7P|I(iF7-xDDo&^R=kE}Ds$aIQSz)C&#P41-C&*JK)5i)G&^XTGh~}nWf-`I zGj$F)(U|68FKYz!lU}J6t@LjXrJVg@s`NZR`O;*!7XhajRdad>v5uxCRBir#O(*-2 zM&c>-y^GAj1nB)U`-X&j1_avB4xyQOlUckSWwp-gJ0>B_y#b0;`PY16lH4Y4T6Y{Cdnv`l6?d;g;wjnh2h_<>KNg-9_o9dniX$*Kwr{?oy z;nTOt_m?t$cj-&GzHwP)B?luh3EQz*gW8wKc@HUMM{>$0;#kDaJy7>G$T7>+@0O@@ zVCSN}DE4onb%c)Fe zd$99V81W#s!u8`@&S8RolzM%4f1x~-mTg7^P7#9w)lw!dTgpW~U)YYt0XW-Ng~~TH z1)Nm$+N6oD|DQA;@H@8qrDCv=cCk5FYnm1Aw`4=C@OPofpCyRdA>Os5Qi`JsNHNC1 zlP$99D=$s1C|^$Mzp58scD~dLG)i#6-Td%>>p={tEL7p4WLllSl83u09sf4-pJHI! z|97?#>r&;zYY!*>7d@TZ^}jco4$Rp~rs|B^{runhkgHVLG5}R7c@Of>&n}hpCIke0 z`TkROTOECRe4WETrQ=f8``;V=R8nxnv?wE@nf@^#FG1X&0D?E*@jpKMU5NRf>LvNr z$9R&U+0BPN(-}VhknWTB+W+3@y0cNP8KLkkT z+jprSuI*UgGGFGP|Cc1HaBr=9sG%nh;>9du4Z8igfni`yysET40{Wry4^>`f0Q@oU zLYH;R6WsJs9Q5XMP(%qm<*UD^IGY2n?0Hb|#T@sd1T|n0(a29vqsiPI!Q0VHOZflc zs+C!Q5#|o=M!rBs1-%L8+k1J{IzWIX$)Kfo*|N6IT3NQ(>+4!{HZ#lt!eG3wI-aISyI3VOuj?w@6w_5LTfU!h;PWbZK4wiI# zXuKh;;#p9N_8tuN2UXV+eAI!KvgWw19dZy2`i~f`e|d#68R2jOvuEY$l-fO1V(n=r zV~~%J&jGMAo&d^pG7vl7bucfCQ?*N#AZKb6R8m8X+(oe#)pJji z_uJ*3A7hq=;_hKQj|InAO4AN@K$fj5WyLm%N1}1gG!mX1A2HWcq@E0|&(=hND340)} zuMplTfz93>5R2~1D{7q7cU_9%+R${&Jy8KUIXX_*_krNlVP}_Ru#0OLOcgrCODsBh zH`7kJv7V#85EXEcQ_7O1;Ncd_8+++_UyrG>MIdL>6EjZ8Mh&FQT*Rl7FIUzAVF^Lr zwG=4)r;w=0Zt3u}V7TPwRvo5trp}pi2@NEqckCXU`uohM~6Elc@=o8&jxcmM5^w6Ixhgr__sqAExU)ysIS^ot!;awV1#B7Ho z5Fsb24Q&zdnyp z7s2QksSLI6Vy}ur+#9Y`fjY1Br+%U6fOkU72lo6+eq|gVc*wf*m8+VZHWP4OH=nL` zv}~7n9z;4@&;5nXb4?|sR56j?ms>-NwGk-V_IFX$$PK@&gM>^#Gpvp4r+0_@ZJvvvYt|RekJFu!B5IgT!LY*)B?n$pv3UiXo z4{|YuyMOow7lUr5OlXF*?L}~?J(GiXGUGPklwQ4sbsN443D~;bOb5#p2K}@~SM1jr zyW=S*i=)%bb1&PmD2l_Q=bm8aT7^ZO(iNV{0!zW@ie^vO6+Dsh&GMXlj})NNkz*71 zvd!d;&AMO#lFEEBy20`$bZ>X1&KMoFPSbIr(YT;>V_$>nXg)Ksm>I43tP#6BLvi9; zt)$naD6F?%Dz)PWpx6 zqPuTi=tHwaWygVf?Nui5$sjbkP?Nkt1_FXVH^AVBE-I~C&D1&?w&%R(CuUL~7TLhY zS)&b^SXD@nrRAP1WS!T6a6nC!?Fu>T9wZiNT;IWGL`uCfB`ty+*&hdt27O zv26#NFQ)pKzESDgk|FlIOJa`TZG~&k*JCqeu7?!9LrvX6q(2g)Ge&r$X3*0(M;7U- ztBr6|*BCdWF&*`3x56rr?&~_O6#gb!GELd0FJw?wo-xU%~*ix$L_q11%T+e!!L(+9&=`~q! znxDEH#eTQ;w8*M0_$f)r*NilmDQK0+LeQe3RL>9su7A-3hf(ab1d^f57(ug|8&BV^ zF-AR=`*>Eh)CKo9gf}YI4(~-zf}aO1S-~|5gIHt4`usUr?@2-P>dgak{Q`4mpJwma z$C@W+U>8rv-eLuTnqSpSTT%C{SA>`OQBTKZiar(;ym{a=m-LoYkK(@iR65a#os?}y z8h=!^EdM@m>|*a|c*q&MWft5JM20V;UzFH3FAuNNB7@vqD}3axR7_FJw!N8wG8-#?`I^+i%IR)Kb5=tDE)ix41dxc3A$ELKObP57 z$Vy)*#cQ_rVd|~QX+1*c`CMGcPjp8^TZf&K$;Z;&0xbyLal4XRQCio+eDg-;iAciy zaG%sp=^%p?yrw?b9^sPl`rD)QwVgq?6Zh;4dEd5VIsb#D1|OP(9K+DYP=f5rfqvDD zS52q~L>|NZ<_UX)iGBlj--1-KWsU2Z*zb#gY_iY<4?K_Ni$nZpxZ!-oz>nTSADO#D-+ zYiXFsxazA(Ok6vd69khp2SR|}WoR-PPvM{Nd+_ds z1Asbq%0A1fJcrxTub#&x_^Oh!X&s6(_t=U~N~g_^jZro;+laZX0zgUYj?0<$rD;+% z4!yhFLU}J=?#>5jH|&M>RsYDIPoPIz5nonNfrDdV6uaYLGDx04flaR`qGa$p{@0&v zLAEhCh13PxREXyJX5W&mXt?g#%Mzv`q$^!xh;IkdMHiue&hD+#WC4Cgf~$+=2x73Q z4N1vUbwR}+++3UZk>?~%yPJ>3FRK0(!L@InChPZ%ObS)R+hTG*OQlayE_-j#Zj?!5 zd>dsz;HqAf+I$2coqC3Ea$%Z#zh;pobev^19Ki`&5Y-~1$uhv(EfVFVUSOzE>^hZk zpC5zkbt{Kg#!%BtJP?~`g!523GbsyESBMnEE2|74C+U832-vifK8cU`45I z-D)s>QuJtk6}xTAnQpq}FcERa5;B7 z0H8$I1V=Jf^;oSwC!oz0d;{F1_$=r|&-HLDiCHg!UClAmj6#or?@?GYb3P1QF(X-q zSaYQ22+!RMl(bFb4&6f@E?Yi)iyjsNFr6MCN_obL#4Cy_@LKh!II)-HaWIq@ zYzq_giXB+oHQQdOE;j)C#GcgYLWcJ~F;vBN!k=Zyb}8Cs0-3Ha!_WI3uSgk#Co%n~ zL$ngNsv<<8%Ou3=Y;xsz3gkP zDn)EekkLs}GVZ{yF&Ive!m$jbfQ|KsvQu(t`*OD%y1qqmQVkgn%MxwsO(C`w-4ct{A=wQmLnTo?~{jV3^e?o}ump0_ zG6Tmu`$u*_yx?Lp=ej&c`Eu`tGQc40RDYPc@6?uRP=@IBe)u?{hZ{hg`ab4x-N}Ov zBJ%AdAqyF@%5Qf9n51nZwjZVCNFHOzI-)PcMwuBBvBNi%B^Vina$IVeGfCqpHE5)5 z5mc}_;l7!Kd+jbd7>Fu0YMrUmSjcrq8H^25dYTgzxFFfbuf)4Q?5i7f)nm03&Ry2m zdOYC#U^F3Cg(j>CEkm^~O-^=Cp^tiXZs@)gM@y7J0N-)Ydkr$IvU(I;t!7CgUOkJh zi`}LfGJ6U8G{5W#N~2j{(^4Tx{Ji*cRAv5HKylFS&n%yj5y;U7X9aDx!N4(}t{<~* zKA#Vgz3RuyDjQCN4Vf*@>Jt}|-lVyEEw!sY|Fky$77W+#ndk9+-pC6a{nB6djnC__ z+Goo^^*#-37u6t6L)u2Q8AuL2w+nvAne4y@J_gVw` zMOdGIX{O=wE|x0Ns-gF_<45ckx|uBtmvAS>Ro`a$ecH-SXyC>8I{(u(n%>-#aQ~}W zuM1D!f-_;>jG_ABjgsV+Dt8+^EfmScE0(d5_imco0Q{1dxuO8bKnO#fw1qkZj%N`g z+4-W(M3d}mckX)D&&$Mz!Efj)Q(VGJ%AJ>fOA`_4&*_eP`32;4!>>tLf;(-Fyp=X- z^{r9l*w-PLFBV>eZs>dkGK!2nsvuknFq*|Jq~>xsmoT4fB+=;CttBD8@RPtPQ(9zJ z!N?D#u>-}<(m%Dr1v@QOBJZp)r$l}-fB2tO*$;pS?xueGzHcOrB*$>vtxNlk%$k^60 zsWjVP{qOmV4^MBd$&rt=53}BtK4Bny;E|F)-(eGgPdH2h07aBz(zVr*lrDdMJ=^)_ zni9GB(HIz+Qkzzo3E*1oH!5a1v(q2={fQ6J1YVVV0b@CJpsDyQ^~bxfwE!HXt4q7O zAgBNH&r>a5X90-fo|GS^`A-1qRly;_^HqPt-#C`Hw9#Mq(@JulHAWW{%aqoRs)*ny z{B;BI=Ns0N{{q>*J_9hBny;g$H)8gYT)$zLmrq^*SRX#$BYf;Qo^(Rq6hRQPoh>vy znAO$W?9Ug#E&;B;(W`8%=PSl@uHWe$SO1&;f>-tUqhUPA$WXhQv&un z8RBCNj#Bbq&Io`oJbQu{{D^2Tk=;v(c=?mJ)_p0yvm@o3fTJyO zzm%ZY`s{rS;D?N?K^`7CTg`c;!uuvog$7m0LLf-~uTDAPA7T~a_ z9pvigM%8ZiPF*shxtG(b)7Q=$NP7Sr+2rQ4`>4gXjcpu#rK1Pj(P{!t2mx79I#=kp zogSIZFv{F944e2aH8VPqIwzcOxo9o2i`uXh2xAzxULSMRbUUS(5Nfrpq}r-^xEC-*zD!`DRuj23s>YJ6*by(ce?oZOX) z>MtDq8eUXjTHhbAUy*bW(bBHkI*v-DP@1#*$|rg%Vf_v7Zfma=r=&R(N)l5yDh~r! zdC8JWnn>P_91^Mzy1-n}+~U3ar*ph}XPPEhJ~QfASW?&r7Om%fGq;1RY^X!>V<}s9 zR;+cJU_Q`^aT9u)%34#OO@;(rntP~LX!K*cVRph{3czYY@n`}rqvGYMH693^(0lkM zeet(887Oc2ySjoo$MW%DLE&5kvII>zW;JUjb54zVB4VZImIa+~<0TXU)mF6$k6HI^ z#_!Kc{jXxi5ev1Q1ru>^Lv)2Cheh7vJhlYw% z8v{{`Q+{V{w3PoH#S`5Dlvr~M^@ z?QtL-L5~aD7qjXj=YQKzF8AH8$B}Q0Yi4P?fK@dy=5jt?snOo*fjx|{;dp$h^B0rv zCJ}*_rAybCqA#iBhRYECH^bF^2k+wW0yn1>Sfx*+l}`5PGESQPo<7}{zv2WiNq;{7 z<))4cZ<(VD{|7hq+t&U|XnnOHbl)(3P}U*F`!jdw(>FR68DQ%!+b;sXzocbb20MxodsmWDvt<-5fvNqKkkf7yX)S>bVJPyyu zm-zFm5#i6ynF*WUJR!da#QAKG-@@M)AQt>?d2uBxEc?mjd*6R&v_15reHMchbsgq! zJh#e>s22LI*H`ZU4k|O(S4y8Ifc7{5z-q-K*Zl#RuIELwv-)lT@3JvzS;Wrj&c|Ui zIriRs%qB}InH!wgsA1eR6e?kI1XK}eX=sdv92A}9Hmcf?W&GF^hGV%P+BDDxd40yn zm4yH{^-&i~-q>~$y6-Qcmz*I!8Go_h2g|*$8TzJ0`n^JEx+wt9zRQB&dVV-(1MF05 z=|x?NtF6yZuqO08dykk|H451>RZhJY0+}{|%L9rpk^3?EUQuYk!bZt3VOtJR2KPqq zD%q1iw9wm(eCEwinDs-GpXLdUR zBPE!NB;2jax&W>&Fq|vl zVom8R8axA#@F|U^6E&R*3$+)DwER}LZCxjr4cfx!S#gC9=BFZC)yPY9{caxsslLBF z0qzHBTsUXuh^ZP}a_yysPiqGDY)O*z5k><*8PQhZi2{0}{I zq+@u1nR~FHUK`B`%E~ru=uB)D-|Oa)npf3?E}lY!^6FDO4z$*{wupDq)5ZZ%s8iY` z-Nl0z|G+(H0TC)N5s1X}xddd&kGQjgL(je|5qXK%Z!NU+J8vRVF>35!nB&ccAYIN( z;jA5zkni88e-qs*{QN@9=!386^_E%nOr%mB(Xbrd6;(4*0sLv8Fe>^UJANl{E6syv zdIN*&&Y0PT)V3}ZTbRV@$egxZ>?IR2ZSCN|o1bWPjdHF{HSGvn(Q1oMcBb$@mJ^Jrq%?3J;D=7C zcGq>jT1qVrVgj~9;B~3ATm}GB3;lv;~Nu{26ZBhXKK+-mhz@38??$NXPL()}1 z-xVF0_EZ|=75ThFO&1d>nbI>Pwa#jAEcb<$XnweoL4V=#s;%oF4BHAi{uL#q)iu?0 z9fEubK#L{a<`<;Zs^rE$1|%YGBF2yBp%}>GQ4Ne4<3aL7I>8Ve1kbO&*5D%Hb4P8 zmkQ8$WdE2Q6A58CkbkTe*d&Y^l)F_ptbI zv_O)LN_qK|H!DSWtR85IEB2|mfkyKVU6fD*%7(w*%xGa{ey(k^P}#6gN`VNA-^zFG zibxT@q%t=!G|wlcST%%}0%714!WjQ)Dr@V{Q9^U#E>x`M(e_911O0DP^89_b`7-k? z*mQ%zQ*K=f0HVFn1>4l56ii?lGkP{Kd+!#Iv8FVHX4)m6D*N7Lbhiiu0+Ex6r-Efc zsaNxcQkTPv3jP_;T#OVsMGqnqRwDnE*ibheC(;{sU>~djC~)PiE;G$^JHqr8$wKj? z8!h}FvkQb8kNlBY0e2JuWz9cv-b{1+fAd>&P?OoQf1Jn@${Zl4B4g|7cW{Y(SbmUme&7D)7%(d529D z82Mf=rLpy61z;37rXDq_3eYSjbr^Yj@yZ?FiU#BylL}jG9%Y`RF>2Pcopf9R3jTUW zSJ5gvOMdzIjDImB&%P7NIac9MxS#KU6&;*nmNfV}fK;ZDY#~#Hr@OYLYXuKTMA`#( z=mu4AaeP;foSW`cC!~`V@WvjYu)Tmqtt#eoHkihPkq=I#n}8B)lCf}5r7_9uyCmIg ziB1743KZ#Bfwp!OlpioE6D-F4<=wWnR^nUB0c7#wQ|$s3+^V9Lx7bE4-$gPLSb^Xi zKt+Ja#@mD)Ee9EYnTrlk&(^p4tV`t=Kvu$W_3>v&&a1$g_p=oK!M%^WL8njQPlx{H znJ`-*0?QvI?XtR^rMBu2!%n==*Kv*$nh8%qOoB8t-835j)G#5IY_MrXO1F`DGWN;= z83>?A5cO1VzG`1Qx~@yT=2E|%4%|B$c;U^qV7DeXDq{O<2NoMw>`T>l=?4>)rdXv4 z_Rx@!!EKT2vF4XjoU=A=V-I1y>=8rxZN@Pf6j$q~nLx}-Q@ZeG&KOu%EQz2 zI2$(nYm83HSj+O_p&E5p*9M2AMKk#Bk7uT+J}DGMr}Uu!Jmce2&pZb460NWEgE{c9 zQ9p$hLqWHyDIO$+ka1aNW_Ir#oHep70G2i(BlKV?yVC}N*mF!E+jHO-@ulr(b6L9Jnc zl~6dAxnQym1jl$}p!YB2Ku0GhgZ4XsJJ|5JiPbom@6@aso{{?OMU?tc@J>Lu{7Hoo z@V@`2$eEXqUYfidFQ5JM>!6izlImjjz&(jICYdKM)O>#l_{EeD_xFjHKeG}eS^kXv z?}+xNS#n{`RC6YwrP`L^zZ=G2$y!ADWZw13}D`5KUwIGU41c`@2T z=2VYcSk2L(Crph=DE>A4^mv`|QW}w*H&N-i>taYpA6(bJ(Aw%6=K+cmKf}{2`(o^O z8NF5wARKF((|A4UcP$8$#b4n+5JC_Jz@k=jA)7=9FL{6lKH*Lq^W@`a*Q@Uk{-|SB z_k#=-SBEwmc~6JW|5uIt^lrtFC{$e?eExsmF14KJ?oU+t$Tvav$}ZXSteZs{73MsL z|2;!~D`bDnt3m=fMYV!q;}>XaR>go#sAIN1g2nQG&;cKP9pI*8#z66Q4bJ^(vUjSl zfEO{MB(?qt$6!<+a)O_wLxR3&N=o=8bsGtEtD}4bwgII|5>p#5Nr71;D5!AhNI)zZ^XdewuqQX5&82a;l{2P7VZyFaBAx%oMRNT$rkib^7hd zPR$(b>r(EzOKVCkFPL^h>VKPwJR11OUW$k(X5$7$TENQiZ;|VyWmBWPl=4ld@E6r< z^3$vu^#??^)b_U)1OJfKdA_eIgc;sp+OG`i^!-1-f5x&@o@WSR-xYhQr!ECpf~_ps zfzQ;8Xo`Oc3yAx)5pfw*K2eQGTbcr5Li?1%_n`LEB=k{Iedhju1g3Kan7IFH;jiG9 z6$p|Zgu{JqV6AXc_9@Rc{}cQIw4aNqZoZF^?s+XU#r!+D^{3wdtrzU@jJ}(xHKS-2 zJQkc}&i(sbN4gh4^3paZx^I}GvMBA)41)}8Fch@$->{5t`1^y?wSKp0<1-u{zgXIr zgOeVSNDpj8-7f=mIu*EQUjO|K5_m@c2F^L=eBzDX%<98EvvdI&!mvqLoC26bdpw`% zH(`DiHqt-;A`JF3wV12dSPp>rDz#c(CbcOS-ktBw8lm$Zd^$ZnReCjOnqBl^b$e&0 z93Z6)0+sHR6b!5Fx8)mvYLj~doQst}0_IS0)7ebK$>|wDH7sfRU}sV?UQeSLY?o5> zwcftBPzY0#I9xdH+oKqx*QmgpRT*)Pms;{mj5IBJy_9hQaLZ;KCN*PS-RA5^rE(Sv zUj@Ke&VCC0YD~FmV%kLkD+dSGc@qBj03)iXp`js58bf%{x5}27U7wpOfbiYUi1PM` zZ#suQLBwVkzb~MjdSa_z;ad*T-FBQ;xMOGw@V5497OT6-Jm&z`4QsdGoySq{i@jjZ zg(s<|XSDK6Sd;xih6+GMFVc>DORDDqqa{%PH##6gE)v8>&axyU%v?;-&gDa?7pPyp zPJ@5Ne6NF-z@K8+Y;BXJ5UD%}(STqS9Z`48`lqw!V>IF?pSN1NGo}_7t%msT-L@>; zfM8^|tedm~m5AfZ9yJ?`8Fw-78q3z9D5yf_ej>-SnPk^?(4oReMFb1zf$T?3-F)(( zr=Gi0EU?lgi{lk^WlC`q6BDIO*4`HOb^dD}CBBU-I6W>&^Mpku4mec!c_yW2|b4hER7wI=sQb?}><|5&m=JuGZ z0$B>rv}3a;@Hl@xM%o+YBDH9-)$P$-!MXsr?Ae;&ShbSGCw+w@ncT{Ar0-qiH7`ZB zmAG%6v^SyyN51jCbPrHJEvld3(35d+2bg)-t4BB2Qm8D}tHGSOE*ShPtm&8rkuQN+Q?{l}CwEb11&^ zg>-Mo#G=RbUOXu!D$|%_L=voys!wP$5G}`R^#b_^7;jN&t?BYEXf z2YI|y8jPX=GN*@Q3NrC)+J=RVg=pAaqg#+lvRKif!WbATaC$!?!SvPkgGPXYjTza~ z3Xfaxu`Lk^Nfkgy#2LltUcWxE4UYl= zVj_n&rnlDZOxGU62yn{|crSdK&CXHWOH9qT#|cj8DFW?WJdz3l`z{A>Q~Wgf)|%DJ zYsRpZTH;sqJ>Ps7Y=xc5q)?J@7Za8x?*#Bu6RD(8ZA!G+CstGFko+ga=&2|$(`w06 zy7F6a-hW=R5$7En#XhIk1aD^x(2VsczZvqbKHt;G(-7Cdhb8Un;h)Zlz17D!Os~d_ zihik#+YW9d4ejg8mR!bOa76|ML1$}{^F&yJH#_mPE0LKROKYuqLr3yYzyMhD(qnuW z1`FY7+RIHzkK|dbAO%omkpdF8g_uajUV&m`O)1Y~e1NCahPDl0gIuggbO-HqJmj+;qN=Y}( z%q8{JZO2XU?yrE_1mTCFx3~Lvan!ipd`Cn!DYt*Z`Iy+q7*;0py5A>+=eWY_%E2zZ zpA4YWMyUfRVv?%>rSHt< z^)H9+o1Iw5K`Ws^*~PsOQV`*ewBfSu*vswhQC757lc0V|v_dH6t5f_R{4>^MGn^-voOVwR&z+=Qz z!5+-;LTbbnpE_h8u<@AngnUGrR)QkJNrR7dfrtp^)=+MCMsB02ah8Yj#T%$e(iP7< zpLD7fB-j%#q>(uV4}EpEqiso7qhHbEMZ}h}O-Rh>ndhM%C?;&$@@Y(Y9 zIdlG#ZK%p;UbltjTTYAB!;5COMHgMzpAq+$L9q~_Sr@BxA4@PkNHD)Li)=g=)^nL$ zrX~><(ga9Lehn*ZxJencuJ}MhgnR{Vbjf@|6YU+_m}Zzl{z+3Or3Fq!PKUwA`9?1t zUQ;qPzmd8sK6=)zrw9t#hT0u+3d&$~s^WBdw|oQ`w<=Yn!l)q43SuC!!$<^^031L& z*#Fg;k@0L--?C|VqWR47^@etaEfi5!!y}AffhK=>Zm3Ql(H)l822Rx4f71u7Y;3WlV)6z{m z6TR2Osu8W_4TAD8rKq%4Hnlm|T{s@vxje<<&&)d-hbCatrZg#;{Im;s3cd8}ZyzOO zGCC&cjH2699?CVnuuEbDIRX6~CnDUOO^ptUmnZJ47w&ph|4hzRSX@xcLExI~u0 zDBLcq9cqm5`F>)oRIdr!@HqQM-!~z=Yrg|ZGN&96dIN3~(+|S!cbT_l8)B&2qd{?3 z>R8ixlkY3icc5(2wNyd4sI5ko_cL`x93t zL_BlLH(FeHNlQv5IY>hT6OIaQfkh1d#W0{T&_?H9S`la!%L&Qv7^9vuN;*}Q0ih-| zDY_iEb*wMD_{YK!qLT}R*H25F6(9!~((Q?Udn zTl))Aw9{Vb--L|3IjunshjKEx=UdZ$OVJ)>_!fbbt%>R}Ftr01K|nu7){i!>#}@Oy zU0RWbc0(WlYdy3rUowhREV&~)0Te)3Owi&9ko$%vI|1GmH`UPHo#2p&25CyHeZD}o zH`-rZfKsru?4>L(kavm$B!9D^-R@nVlt-4D@SJK$ps{~bjGV|jmtDc@ULI<{Dpk0b zvgrU`H($s=0|5%X?r26Eh;LL`z3P-y^8pG^vjsq+;XH#oneJAYW~8nclgb$A(K^=; zC(P=?EJL<=fv_acD^B_Cx7F4^bOUNcw|9vb4#ZVad?Rg#@(>i~l8le^$=e4XVA#}; zN$%t59CTop;k8r#%SZluZ^V9aEOuGb7T$qU^Ogs84v#0RW%n!8_oJ*~@ z?&Ukn^DJ;4XG}Q$e&n!V0ojY(AQl zQpc?dt`^38`O>qtDAZOE8LtjFhb3gZlDF~Gjgpk2@ zvhg_o#DjSfh%v9!IiSF<8-OVZwwK8rZ#4xn21Rt8tiH=H4OT;2Lxv0a1;bgF{{?o{ z8@z4j(;VAy?R_@ZWvnCdP~RkI{h5Gy5O;{MA2f234#2t67>OPePeqbVMg69?p`d73 ze}BYI86Yn4I*Q9>ZSEobz^^K?wz~g$?E^XU6vUUd?=;(6=KySC@T;3^pF9oDd|W+yYR<3co=dKr1#zSR!a5KK*&BqyFv4>N_#9JbF|%oj*ac&@KOjfJq6!|gCp z*a-iHqrTN-m2IXat&NXRZzrkWTADW_T?6 z7czCHwuhTQ69j>4hk}lW+@8%g!4^$77Z=rxiM^P>Qb#C-*@G@g8Ni0NQ*P7R8~6vS zd8?Y?yvsT}7S5|rE5{3fcyxUWFs6y7uJg7HWN}P)K9(2_)8(eea<&rOv`3mQ60RSj zkA|2K_YGAZy=OLSaXT1ZM%o$f0omTIToAncyj9-wb9Cg&OBKim*-8BG#>I(ahiX>$a%U*( z)sB5NJSpw~$R@0j(?Mv^ilRHx&Je~~`|WV^Py?HuomyUsfYbTs?~U{L|Dr6!2E(Im zjCjYhrb`0zHzC+7Ux(GA!8e`M|fn}9bF&twDA8{k} z7i~e41MQ8;k3})>^4whjdoleAG!xhCtMCY1VDP_Fjb&p2tcGonsLVz>WvTwdFU)$( za5e1%+Vhd`y~Hr|8}?3{yFSu=I#+ySHyHl*clxkby@3v}t)?*eUTpx$j3!XRBz<}A z0@Y|Ij@yz3xD&8LQ-9eZMgo;;bJYRAjFAyZRMDdV=I?J;f6d^fw%_yV0lY(hD`09i zG;yO52?v4~jdMcsS3l~*SPre7sDFU?odh`4YhL>;S*5Rs31-FdtbBWs=()|xb(Cm2m`8QX*AT3_86KxYA7B`k_Y zCjWz>vOR)d?*UjKtIZ2U=Ku?&5U2tT=nNg<<8f{sKi^0u*nMN1zc4zLMTh<}vD@!& z9e(jD|At0^#6VsEfGeDB&H66w()RZDS0{}N05er|#cv|#I|h91EjzxSA%@tOd{bs& zV(T$u7^~nvb*-g(KlNwC1W&Y5@{0mV?yZu)t*gzSq;0PpL!IxRA4w&i$8%6jlVW&z zb^W4(v_8W8Bcwkve}MQG62~JL>~7?DmF@9Q8cH8fp!*jk^EXOrOpnNSRu(#KkZMaP z`z1Xc*j4zs1=9|+gaVtNTaVc;S2KQD8LZb!w$67hJbOQ@M;(v7YIaj7$pC!8EZO7O zI%>VcP;6S3gZbyhzx#wb@F_5rO7@*IknJnR|J0kA!-EokI6XvH$M%<^paO%2zF@@q8Wjd<#DeR@H2UJ(p-RPkcmjK z#EE_}#_j;ZfM*PVkuqRus&x`;B31;MxXEC}*GrHrOg4UBOZIglJEDn|po*_#41jtg?dz*0q5IAOl zf^8O|{CBlgRaJ(4BA)!fj`ta`H~K|}-4)vi{4TX*?Z=N9xdxi>^wX`h4PJQ_~ zdojoZodT#8A7K=b*+Qe8c%u}g79gk8*MU&4fczV9P)Qyv7nsH-z?JUw98%I^3CKcO zr5V6A$#2T^yUmS_Y2B2EaymZfs;R3BHi}2C44#7rBHFmBn*(HY&ee^=m>{s)QUm9?2Q!S)fwB2#nYZ~r zptY+ZvP^y5Ffxiw(<{yT%8Q1P{3CfjrHzyi+Tc28kIEBPg-aM?rL#VcfizTR7M3_% z3Og=k%zxw@NOO(r>uPrfrSiFRe>r4Tyo!?E6WM--Jkv5+VdZ(UCFcqh{D60=|4z;^ z`AtJI5Se8HY^UVZ%c&Mxx?SYAneiYcQ)wG!9yI{?xA@w?Dh`u) zYHjUqdH*gf75Xz{nZmS7Q$s6Va9?iUhqm1M36DyCJhAbHZl+}g!sffv65p$%3s_>? zPoiSyD88?9yafu`!l&zVQc8RUk9&*XM13kuQsU5)HC%_`On>+`u_$yP_9J*6_M6*- z`amqf#VS{yW@XH-POEx}CT?%7&MvC5v?R+WUgo7Q6BHzLaZ3^`0sfqyrQv?T+&+!{>Zo-aL zSoy``hLaHq!FKJ4bnBGI7SLH2XzF>0%h0q%&HM+H(NUmk&pn|UM9|Vbuc*Upy)U}6 zl(ZyfMkYZfT9ZNWY3_mwQef_AO=P2}qY~rQzKui|j@IlYw}03KU8vd%xv0_(EOffN zHy|Kdx60!c!^LUoPGnS)KIGu@3P+GX-CA~_6ach_`Ihq)PH5jUpxF$Tc0hF%1h^9; z9VIjqzNT+fPNb=4g|A)X+{WF7 z+sM`BG6oB)FEwzbmvXV9;qhXPt4|9*;Ozyh>^*KVG*dROaY&uj1&-{>bx5rVL^lN7 zC+0#F`&ZD4>{MEkTh`f4)ljluM6YMQpAGGvVxIDSfZAlLfb22Zq4|+nby;~fWaoG5 z(W!(hWu>%1;BdFNH1JSkjd)A8O}%L65kcr>U|?KmVd_C@}V=nzjw(fD~|sK zr@PE(9S|M;yar%ObisZ;gD zILTI+51l%ToX3#2Aewhgq&f6tEdmq*wSzd$`26dp~01@Rw} z(2rN}5uJ6s-Cfr}kO$)kA%;VHOp2JFNyG$3f^Deq)WFbS!lg3W9VgUfMSZpQC$|JO zirCRIAer1n9KJy(LZg(o9oxqiW>VOrC(hheQAxFFw4Qux@`B{63*$gyZK6*Rm@7vD z)UbKj`7YPNq%MC`YGvIa6Rc2DiY^sAy1A(ET>{e8?xJZ5$?G zocFWqWtmr#;8*U8j7f(cw+-N+(emRK&9;6zvOS5WW3bBaR?1-xvP>35secR;L2HFzoP$jG?13(xXR8BxAhK2zm0t(?5~ zY-+DM|%zqL=Op;t4hUds!e`wdfwmCdljz6>u z;#(VUzu=hhogBY6f?BxFy(zc<-ooO|!zAj}{;>ax@l(UTv6!h0sXC!xx+>bynhrWO z^LLF=Z#rk`9I3&~2c1B{uubnWc<3OZ$`fOJV|;w=G;*CK0m0U{WM}<)Wu7|>(v1f1 zg%Eqc(SO7#yl|s62>%iE#%9n?I_bsg9waYOsP1B8P38ddFIKv;S7|Lsg4LgiY z?px8iNwo$V7B@}z$7|>I=cIB28Dv_=J!TH~&lhi6PFily z?-QF{Z|}ba)83u8-$&kEmE5bD8%H`_%ko{x>O8=oLO{{kq4O(<<~4svOAh~e)ljch z>Qj6ebNo$GV;JU zx%TMrJmJKIwFBW(ZVzkk$}l(S>B`U?qI;-^59Fs|YBcRpJ(uOnnn02J+D74q6xPd; z%sk8MxGCo4u{G7u<{eF$_`HKCxe2=1q0@^esj7^#fxRT58s%jg zqgso`oUj({N(fzSrcHY4r1Au(%=nr~Vk2GnLi9MX6vz7bkd4cYyg+}E6UY#B+$DC! z*W?&c)_XO)Zs#u9>;j^Iek$l+K07vE2dV^nc8C;w8wsrrT=*U{`<*giBM|G=P>zO+ zlRS+BI?>SNd+a)fXTm2kiJxtH;25+J5Z_`8V6T2zrFh`W{cMVZ1fGwgi^sw?!$O*8 zZ7ro`^}0?FvWtc?@fh&G9oQOuu4L4bfC|Bh2#K|(A@8NQ!OeCMwLse3~ z)sRqTorpGD*7#*P^53H3;Cd;ywi)-v_+3^%&mLF64KXBWeO->_?uV`Iv}D`q%$rfP zLO+UF-4x0mgZN%9h~TV1znNB@RyE#Y$)q5wi+)5ef>>S;HgbREviN_ z7x!jGg^Xo!EW}BSF1664xMfXW8aFw!$M*OMWy_RK)5Xr=c6TLpjaON=w)IxE<%klQ z{-Ltxsq)Fd$$VWeMeKLOZClR#qOeD|^vn-X*1p0$6MokDM(hW&0WBUJ3jPDcY8-e; z?ARjc+=nI&p@!2u3aBD@hD3V)x(+3Xh9X20!BXzAb+s5iaHJ9JLi_{=XkZT#{PTd= z*b|eC9!jsw?tA->I@bwFp2N_$F z{ld$_k)16Ufh}p;psV@(UJCy9q0dxW#UxBmnerYxA|jfje4_nKt49R~H1F5vYGd$! z3WbXx#2flU0quPN4>a4lh$XF;LWbP%C>Lop_5Lz-6jrp&pZ{)=+Aq%bDTVdC|AU#wK}_wy za}nNV$;1rs{2qeVzXYYzz`TU{o+fyoEK=}U$6ni`l?S`1zr^q)1Gs*F-~oy`4q_a0 zLe?;q?+qy8z30f2rngM3t&X}6gfM#HxP<_D|B=JrKNtWBJ$#1y{2<4;VFCO5LMi88 z&HdHtPw0R+VAn6P|LVq{-aJ52fsN#IhPM|BG)p{014}X=J}9ngBK+`u}cnDKn5^_g3Z8L6cOglXE}9UtRyxHgmlH{b*}q#vWJ!!L@zi z-@W4dr7fRnAHqiK?{5Bju?|dxpGqGryC!~u9>gI1mmH@U|M#O_oWirGIZw`fn*QA@ zw|`HFzvcG{PN%gEP=yD&aBb%taEr^Yu>Px2rJDcy(T7$6)etF+T~t^2fA#7DCdPlN z&VR=C6KrZfXnXhtYVokSU7hB?h5%5-|M@7w0=C6uBE=NZ8REaR;s7Q_*!5rXgLN9F zE)Tvuda^i+;O1K+`CmiuTZ#Y2qm6Vk#ekHJp{7;hu(N+fjxUokXxqr_|1p@#PvMi= ztr^?7q*CgLf$6DN{GcDJk(MaytP+3eQ{VThanoVoq};^^*M2}c)n5{~UT1FQLfK?Z z8eJ2^6~JC5RvzS%mO!)Sf0Etxpv8T)wSa&1sri3o*s9d|V3RFrc8!`J_6^IWKIBTk zOx}LOU*fdF7enwE3?Souy!)5ZVj{lDU7n+1iifQ)cJRttX~K0+MvOWil!);{DxA@3 z;r|w+msI=PlsbUka>LZAK6a?d-2)Gx2nA{_(DFwrn>Zx861> z-?1<1?k>E7b@hMW_m5Tq2CtMIzvp$FrCK+fOW2RUg)&J7@3O%G7!xFQLCj|iC7z`k zhO4~Z+vWAhJk<1iF?p2=pIXQ_{xkbpXMoOG!e=~5D@M)h$27b_jHpI}y;*JVWmLXn zi$uGa=rJutG3RBX!W#nlbAe>~M@wxZL@O*SEPoFiJ<3}AEMVh;avxGga8sQr6TrJ5 zDx}8}Q5QJ9$4-gsuu?$2sfjR-t9s*@}2 z+btoQ&R(!J=j0}On*4IE7neVa=bB6&qq&m3* z%Ee-H?z!hx2-=WB7hx*Sp1WNVUA4{i;!RUwY~Y2Pq}4)8wiT(SkY=7f)+&aoiqE`r)L;OkQ{?_6X5s#j2z=!gRdUf^vfZ6(s0zJ1UeS;oe=&Xxw7K%b|5-P0aP7k z_i&`}8*lXOivb?+`A2D|066!98tu_gs7H>K>j+H(Ew1M!YSZm#;+KwvgrAB0w~~wZ zH9U$83+Y_3hx5I?iLq^&s&a`C*#3jNZdlB ztB6$_&pWF<&ztZCt`4nkxR`iQ`OFw|cAw5yUhR^>>E0_dBlO^IWp68X5i!bmBU5&oX~KmYeUzOmDKF9(VE0 zkQcU)P1TK>`y1Mc7Gvl=dw43zbWF@k`(w)682|LJ@zVS9GbZy@rY(r4tBlpXp->U} zDKe5KNAZkD?L%ZhETz&Y-*{?R4B_Q8X2RinXjBgP53I*oN*8q0GQ9Eb@^dtX>h83N zWle(1=xC(%q%w$Ez*l=iw%9)?0F|&mLA||znu=$~k>-mKQQz@j`I2qldN!x)vx5|L z^ni*0qkJ)(6TTDy(7W5mSBFJX*qxxR6IqsMB`j0lp!oGi-ye_N4LF@d{#^c?pW9Z= zAy?V2qxqWd+^TXFQ&^yj-9(E%QK49bbEZ4C+Ea`u@EZPVJ~4HRq{O{*Y&7nNS<^~@ z2R5*f0V~+)21m8~TkOfWprY9W+9AZ3Cvfgbc<>O^oa?b6=DiciFNaw&*JeRdNJ!xg zNp~0Mc2{@FGmpk8kY%=Kf$_8QI7a3o{CJBiD@!~K7~6P{t5oPWjG_}l;VP~0+13u> z(2ngPn*7UKUM;4$p6ze0V?(d#yN9Edq)o>dohcu1o;;q2x6mAeD= ztDki0I@Z(#kI<>!5y4IFZklQmr!!i6Ls>lnN}g;-vNmY~ADvRr+961epk zeBQk%H=8Ty_81chwgR=PF_$jPb%mS)e$lqtTkrw`>CkKllKWa_Xcgk4SP!uhZ1`L%~)L>A4yzC{>2KQK>H+3*Sd^iVZw+aC$|l$+YOXji)V2D4z^(I zSF{1)wN6$c+ky*I8~mObC8st-8a^~O8~4Q8u^7TMMo^D5t`divB|7)xZUcDSK(}K0 zZvRz_g(w=DwCM?2M1k=4_gB)AVmO-uM_Z8V)a`5K#)V>0vb#yEt$`YNv9#D{!le1` z=hurPOwJvr-nkNfD?+59hZ2UH*=9%<3|W)3&6%8@R^Q~tgpy9nD>aOQR~GN2zkzT@ z?PDuFb%{D(gWU_%R-b10@l71coLE)!3zGfpc3~-Gm*HfIw@ePuIo^Tsf4jOuWTmbsK{&o~!LyXoqxei`g++ zT;s6VJ2c_=#xm4y*+}Aq`(vwqKfMDC63^7#_gC}h{9QZ_YKFxO-NWO#fCZdGl#*xN z2NTYvjG{|MUE8`R$N3aGf~s=l7|8-Qri3e|nnv;t!#|x6vfC4U-dlPfATBe@|iWrcX4?Lm{NC7wpE95OU z$=B!U^;$?cyGX7H_$pS+1I_Ob$AoMK%&?_MmhKCoSkD8L7kv%{r=G#)&(~k`M-%3E z)|{dKs3*o=pAs;PJS|($NpPPWRlw?Ghl1;SIlRo3yFGPYPCbQrk6r`qtzbK%2KPU) zVe5pB&iwb2f}~8pkoo*?&(1%D5Ii;Ze%!2V?4`}iTeG8ViG!l<~B zxW;~Y%XFU1t&#gq=tl|YDr-*iQ>}&PjQ@#n-qOGp*)3i?A&log5ZW?(?>^H{vo^ zuil%qF6nA%xa1cn{|GySyyk2ZpFjW8!zX!9@_ze?P0Gj73KFV5V~dC6;{uo%fj`OM z{tCfzJAV1_D|Eqd<-moap^36aAo+;VGAeI@KrT+#n@9jx<{cqWN4d>jfeLXe@GpPd z>$T2v09F$^L_vg;tF0G;15SOPT_=!yWscLQ*sz$rOqEq9K`66g!#8aZ2HF`4$DQPir}F-SH^)kw%OctQF)c>86$?6?efVpB3Ms1ZFeBNNh1fJ zMP9F?mBE{C)z0F}VoT*K^!DbKM`>^WWDB6>YZL1Ks5K56h6olg5#Bb*<+e|LnnUs=hm$F$9;kTV zDARO3t}wO5dpDK_=ZK(P0D;9OoiA5<{Jm4UrwQZ3*JGOljv+v%p+feE z`=i=dCQ+(1lT zdlKBTz4|;La0S&50Dx~wY#wIRK1Kc&JZ*}-J22k}vBBv%Y(Vp?-SGd)>ur)^n_6Qo z_S0vKp8JCSgUP*Cq-nz20)zV{%TSv1x$h2qMDm-C;ZI#H2uTYyHMNI~FItlw6|>Zg zL|?PqvSzrvNne^y4nkoPPg<^nU{W(d#YF$_guG*)4D(mA9a*o&{azqPdNDTP;@M)jrt1`;=R-!^Sq=!drtTQDC zjJmK_SIMi+pYEivR&`?t52@o$iHNVOkB#2dx{ZfbF{-AGBt+M6`Lfc?kw3o1i=+$T1*wHuZGn~2x_%q>M66_@&htV|Mo*=5O)0}GkFdlRWtai-X*sauP zoX`0#vA(J?SV0pVoIjCq8?q07{>bZU?#}-0>y!;reeyIz+rG0GVE?j=nM7)u4hJMp zN%QCKQo60z86w-Z(Ip?-irNk%X{u1oku-75d3_^Onr2UhI~J8erXT|39}QEZ5)Z#5 zqXwCN>$*Z6xr-ub`PvkvHM6UXC_Pd(EQ2j2ImIG2tuPB|KC-hM<;@z#B54?NCs>tK zEADvAbY1f+te5%OWbU1LH(RUiC+}H3q)ar8e^eY7=Y2Kauh^R;|snn``7pv5Qz$b$V{wu4XIy9S`(xhkJ&z}!7 zYPG}_l!y+LPz1D*SE;0OnvLDjXKfisK2At-y?UO^<||@RFwY>j?wIJq>+lAJj(1-H z;`mjZ6LJ#gUoLzw*7LET`3ph}+0j<{<;dIcZfc~;qz^_SIKgo;A!ISq__xE@OH^~h+FYu){dn=y%RUvQ_82;*M|~c zcZFCoF3pAJucb^EJ~Wq$OP7VHhwolD<}`>t${zi}LQX@Jf=7|S>rw9KY;-U#Sv!76 zm*v%FA$2K%@52VE$&y)gk<@qc`Rqr=)x8+$w^4F6);yVYTL3kD|Mn|MRZhxbZycC8 z!v%XJE#0BUkG6b1cDY7$fHFiCi+jvnEcH5K6sxm5jym(&A5)2cdvup7L#*4`EC1Gx zPoX+5VmEff-uZ<;D1IgA42s&c0Rvnt^M(fok?vohp=!Rx+x-4E<@*V*t!76BFJ`A1 zW~QH$CW-9kf);p8fQp{dG@cUGft1>AVX#mx@(>=Rr;^#tWW)wG4nbsBAbK_>X7|=4 zLnTuSfB2@<@)=9?NvBwvr2MWc?uBqbt;_x~jpv|y7wEK|OSR+qROWt}_z#6smxV8Q zkTI8uTzGGThBG{H!f9R(lGwAbB)(lqEZpAnBs7Tl0%qvkz}7)Ax#wwFlj_huT(Feu z&JZ%z)~68!0n3lW_dlLfX6)?~3Qv2)su)oOa1yfVwCRUTJc1ipr;;AL+<76LRIr@EVOz)Za=IT7JmfBrhHv9gJSn4_ zl|S#dP;F^r4pVgqNh0q%{V1kBM@~J=IO$SKb6!gcijrdr-BAMsP%!*nyU+ai>wUI! z23th04vBXM1l`m6pSkF%Z>e3#DfrZxlu*bp_6C*;-xG^klb1y|E`_BUX^#cre*j`R z4B^+SU*A0oYkfM~IpQ>UIN2!>1ZwwDBW*6gV>wehtK>IqD;Y^8wTR_rkPn>X={lUR zLiTht&*VU})Ax2midjF}tX=UP3w)Q1_YJ@7%P9Fl3&s>9*+t@hTo`mm zmug4{Onsn3I!m6jEV-L+(QL4oNX$i2!|9j<6{8-=;G@L&;BYFHk%?9C=FkDFg8Gep z|9S7WMXExMODKLa`+J1}13slx((E`{s7EmUp=hE)GiB^gg*hz;tAbr&N;~Q4oZSpk z_MN=gJMY8r>fbY#LFT#g8N7}1mh7mh31Yu zR+i;!hS?O$LJzLecTNl3qh;eq!nzG7pknBjQR5Vr;TFMD_nDfH7FoBw>ONufttG8p zU${9fc%RHC`OpT$YWGT@&4;{gItjR)Ead6d+9Ac$4z$OaTt5u$zj+1o{A}8T+~eO0 z&O07_<||I+J3`4(Mq|q6c6dL?CaN8=xo18qCb~r2^1XhenI_#92J){W`efUM~ zi(K3SBL{*N@JOyZMoDsrhboFw|M@(`BGua+LaN$AI*d&j1g7dzCMzM>4UViztYC3S zu1aKdY!nM9F_&PZvs=zl3*1OrBzPgia=1Di!+=!DP~%o2vg%AS7t|$_-|=OF~`Z!R@j@$hC0?8ESyR$rg~45@FH)fMI5ux ziGaa)o~DzX#1Ly%^Xaof2LjRKfQ!y*H5&vph%T_kezypCBkq1}AKT_51B}HGhNr#; z)f>^?bmo#=r>@tydfKA;eZVMy4wpYq5zMp(&_lm$p%Rfe#QFf}i4 z^st)sTZSaio^|41B%*(5eEZ2(_u2wx)9mdWRI+xO%Rcl3x$IYVynaD%du4c`lxS+$ z#5b@V=J45^X28;yiTjM;bbrdspo1XlFd^H%4%q=3V^ytr50#=xid&ka%z1N&T@0)| zG8BY6CW$Y1UhZzOvyz|kIqv*CG6vNlC6}0s6sOUy$Gc6Zneu|Ssbn-l>#Z)9KKZ;j z11Ep2A3MScIOMJ^HIgjBI;s;(%e7?ej#iJ_n^Kz7k7SIIqRR5I6pAphU~UIHK%xy3 zh2HU=-+bybC5h>XYnv}{Xnf&rYVBG@%!D$`p4_ z>!}>C@Qs5t-gT6>+?ib2#CZJGD;A)DzT^cCOIsXa!HK(R2JKam!Bgj5JWd`qmfR$x zGUcu}Sd+Rs29eGEF!X&+Hq#380eSz*7qt31wfbIQUx5*KEYV@Xx?Sa%W=)AmvSZZJ zt+%3P%z=?$6R7LMKc+Bg(b&6#gIrRUs;C0zmkUE2xD+s?%#hNOvH? z^ISh9MmdzRs|r6(>#_+D(K@91<00S;oOZuhwn7t=n4Zh!ne6`BD2;MBA9<8}B7wWN zNyl~aUZ#XpVf@IbsHPI6U|5>;j*;?i=k%wkh>oh~of-DPGzBe%)P$DOH7U<4L1SqfeFkz)l^Hgji&W zu>T)(Z~fLryY+A1H7K+|@uC&ni))}Q?gW=Y(Bkf1Dio)<69^K57I&!NT1aqfae@^I zF5iK6?|r|=^AEhg=a@`pCNtMM*ZEnqHlydrU(k!pnnCp7-g6m4vhrtod4M>!G@zdE zwHh;Rnw<3H-zKZr-8xU7#l+ixUn(1q5x9%$pdTPXo+J@%cVnsYl%5b-)erT=H`FR> zavpnTl6ZL#+jnyMMJJ#1HOkEvftR#1CI|C(@7^btKp3iyICOA{;t)D{g0w_8_0y7> z`?_ef*)$uuJX5QpDt@rJZA?7PZ<*maJK`7)fF_9+7^*ss7E~`As=}8Y zS~Kf17{lbDm3#wUeuLpTiVa-XOd&R+LH?h2>{F8QH8Z0?85=oP(ir^PU5;2h;43wF zhrxSxVAMN@=JtSaI59e~LN)sM=!O|_q$bZVA~w?KlD+a}UdqG1z3H>iWSvWx-=1B~ z;$`xe!UJvr^+2D^G*#@U)*ks1$CGB6Bb{x#LUa6Kqr%~SSg)HIJOJBnm@JjAFZTJp zv~f%G-4qK1f7pu;_yG*vMyNR*E?RQJ_BU@`;!bu_{QWr1!hOm%2v;97tAoA^hrPf& z7MA^up%?_4PcOH~%oR&-pc>gTT+zYsi83>@#V>V*(k0prGlihVF+) zTq?!cY5mAZ-PWbp4CQbT!rIZMIirzrsCf`1V2+%;BGwPe5qrmS=H6KDZm|Jj z24hrYsW}~KdRo4Da<=&2nG7UTKPuwnci4$H24VPeFAU94+pp6Y%iyS$1=*u4FMcgy z1)7u_enw4rT&gP{)DzGdPd*IoTF*}9#`QYdewe(f0e858rtTU7&P0sXUyr2j*&(4^MlPD+xl5smC78l1P#YwK_voFew#1Qs-Z$EA6y#YBAL#Argi#WFxF zS0#9DwtkY`EWKL`OGg!cmVVVr_EIpj<57D&6^t!syg3|~aCICAF0lVJe6Khv`QMf} z{dQ7j6QoKqyJZt^9%vZ zW@?2($(^R|rse;5qZ9c5HkrfG57Y=^3I5Z8|L5V4zn_sGr;N>_!5!PgEB*iLE}hre zP)oN77@P^_seD+s|M57?Y7)U7Y1!`c@uZnd%dr?T>bD8WJz4Qb&y;c6Lt1#)$Mp1T zOO;ts-lSkRRNWf^FLWUv;&6j|#51v$t`eV(CRK(IkJ6Uaals`9m*3al#}Dpx<3J=D z-!MG`Ud%qIU{?~xpW^Ih;*sRj(Bjo^+IZ)%SXAIuvU1$Pb?@Kk?F&J!H}uBu?0&Sn zcU-O7Dlv(cE^&~F4;e%W9vDb?uo4z@G-6vp^Fc0`L51##ozzfw2)>8l_d&J{7U?n( z&GM5cke52JcVMZZ)i(;G&1pmU9RXLnEw;!}TjPa3sgpG!QQuyWvJ5z9YV8!C0Z=Jk zfk{sq8@O)}UZ*@UX$X|B;PIl2SmtFmU%R+*GR^_9gYa#`PDk>Y7Wb|`i=+9ThMt!B zB`;G+O3SpFj_VskHP)wotYNKN;=l~~D_i5;T7!k5qqjGspm(DE$(M@vP7{u=Dbg^2 zW!}n(lVM978mCAF-rvUroclhjNRS%J!H&j9I-_CpL5YLyDHq~p>(aH3hMRSq&K8Cz zbw*3q2k14f-`G91wJ%WzFPNr+uD+$iRF1xWd0!c1s4>wroqIu_E3CSc{*iBOQ$t?0 zpB=UKEW#=Pl?#hXNWfQCd73I-sQ$TXL4SZL@2We@c%84wwNIU#m-0FPdGrFnles3>SsycN9Y;-BKQCj5mLuU5%x!aMAdJq z46&(~@aCr2NX#K;*$RdzShyCzmphsQFJ47#$AXLbx?>OV3)~wezfZi1=OvIuxi2wq zfKQLvN4ppG;wHuNJiAHMxR(w;2>aB_≥1!hO3})xlA}@g)*AM|bIS97>yq?SG&2 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 0 will offset the instructions for the actor (both broad and character specific) into the history by that many turns. Some LLMs struggle to generate coherent continuations if the scene is interrupted by instructions right before the AI is asked to generate dialogue. This allows to shift the instruction backwards. + +## Context Investigation + +A new :material-flask: experimental feature introduced in `0.28.0` alongside the [layered history summarization](/talemate/user-guide/agents/summarizer/settings#layered-history). + +If enabled, the AI will investigate the history for relevant information to include in the conversation prompt. Investigation works by digging through the various layers of the history, and extracting relevant information based on the final message in the scene. + +This can be **very slow** depending on how many layers are enabled and generated. It can lead to a great improvement in the quality of the generated dialogue, but it currently still is a mixed bag. A strong LLM is almost a hard requirement for it produce anything useful. 22B+ models are recommended. + +![Conversation agent context investigation settings](/talemate/img/0.28.0/conversation-context-investigation-settings.png) + +!!! note "Tips" + - This is experimental and results WILL vary in quality. + - Requires a strong LLM. 22B+ models are recommended. + - Good, clean summarization of the history is a hard requirement for this to work well. Regenerate your history if it's messy. (World Editor -> History -> Regenerate) + +##### Enable context investigation + +Enable or disable the context investigation feature. + +##### Trigger + +Allows you to specify when the context investigation should be triggered. + +- Agent decides - the AI will decide when to trigger the context investigation based on the scene. +- Only when a question is asked - the AI will only trigger the context investigation when a question is asked. + diff --git a/docs/user-guide/agents/director/settings.md b/docs/user-guide/agents/director/settings.md index 0d424dc0..101994e1 100644 --- a/docs/user-guide/agents/director/settings.md +++ b/docs/user-guide/agents/director/settings.md @@ -1,6 +1,8 @@ # Settings -![Director agent settings](/talemate/img/0.26.0/director-agent-settings.png) +## General + +![Director agent settings](/talemate/img/0.28.0/director-general-settings.png) ##### Direct @@ -31,4 +33,34 @@ When an actor is given a direction, how is it to be injected into the context If `Direction` is selected, the actor will be given the direction as a direct instruction, by the director. -If `Inner Monologue` is selected, the actor will be given the direction as a thought. \ No newline at end of file +If `Inner Monologue` is selected, the actor will be given the direction as a thought. + +## Dynamic Actions + +Dynamic actions are introduced in `0.28.0` and allow the director to generate a set of clickable choices for the player to choose from. + +![Director agent dynamic actions settings](/talemate/img/0.28.0/director-dynamic-actions-settings.png) + +##### Enable Dynamic Actions + +If enabled the director will generate a set of clickable choices for the player to choose from. + +##### Chance + +The chance that the director will generate a set of dynamic actions when its the players turn. + +This ranges from `0` to `1`. `0` means the director will never generate dynamic actions, `1` means the director will always generate dynamic actions. + +##### Number of Actions + +The number of actions to generate. + +##### Never auto progress on action selection + +If this is checked and you pick an action, the scene will NOT automatically pass the turn to the next actor. + +##### Instructions + +Allows you to provide extra specific instructions to director on how to generate the dynamic actions. + +For example you could provide a list of actions to choose from, or a list of actions to avoid. Or specify that you always want a certain action to be included. \ No newline at end of file diff --git a/docs/user-guide/agents/summarizer/settings.md b/docs/user-guide/agents/summarizer/settings.md index 3d8307ae..bc2296a0 100644 --- a/docs/user-guide/agents/summarizer/settings.md +++ b/docs/user-guide/agents/summarizer/settings.md @@ -1,6 +1,10 @@ # Settings -![Summarizer agent settings](/talemate/img/0.26.0/summarizer-agent-settings.png) +## General + +General summarization settings. + +![Summarizer agent general settings](/talemate/img/0.28.0/summarizer-general-settings.png) ##### Summarize to long term memory archive @@ -21,4 +25,37 @@ The method used to summarize the scene dialogue. ###### Use preceeding summaries to strengthen context -Help the AI summarize by including the last few summaries as additional context. Some models may incorporate this context into the new summary directly, so if you find yourself with a bunch of similar history entries, try setting this to 0. \ No newline at end of file +Help the AI summarize by including the last few summaries as additional context. Some models may incorporate this context into the new summary directly, so if you find yourself with a bunch of similar history entries, try setting this to 0. + +## Layered History + +Settings for the layered history summarization. + +Talemate `0.28.0` introduces a new feature called layered history summarization. This feature allows the AI to summarize the scene dialogue in layers, with each layer providing a different level of detail. + +Not only does this allow to keep more context in the history, albeit with earlier layers containing less detail, but it also allows us to do history investgations to extract relevant information from the history during conversation and narration prompts. + +Right now this is considered an experimental feature, and whether or not its feasible in the long term will depend on how well it works in practice. + +![Summarizer agent layered history settings](/talemate/img/0.28.0/summarizer-layered-history-settings.png) + +##### Enable layered history + +Allows you to enable or disable the layered history summarization. + +!!! note "Enabling this on big scenes" + If you enable this on a big established scene, the next time the summarization agent runs, it will take a while to process the entire history and generate the layers. + +##### Token threshold + +The number of tokens in the layer that will trigger the summarization process to the next layer. + +##### Maximum number of layers + +The maximum number of layers that can be created. Raising this limit past 3 is likely to have dimishing returns. We have observed that usually by layer 3 you are down to single sentences for individual events, making it difficult to summarize further in a meaningful way. + +##### Maximum tokens to process + +Smaller LLMs may struggle with accurately summarizing long texts. This setting will split the text into chunks and summarize each chunk separately, then stitch them together in the next layer. If you're using a strong LLM (70B+), you can try setting this to be the same as the threshold. + +Setting this higher than the token threshold does nothing. \ No newline at end of file diff --git a/docs/user-guide/agents/voice/elevenlabs.md b/docs/user-guide/agents/voice/elevenlabs.md index 658fcdda..828f41db 100644 --- a/docs/user-guide/agents/voice/elevenlabs.md +++ b/docs/user-guide/agents/voice/elevenlabs.md @@ -4,4 +4,4 @@ If you have not configured the ElevenLabs TTS API, the voice agent will show tha ![Elevenlaps api key missing](/talemate/img/0.26.0/voice-agent-missing-api-key.png) -See the [ElevenLabs API setup](/apis/elevenlabs.md) for instructions on how to set up the API key. \ No newline at end of file +See the [ElevenLabs API setup](/talemate/user-guide/apis/elevenlabs/) for instructions on how to set up the API key. \ No newline at end of file diff --git a/docs/user-guide/interacting.md b/docs/user-guide/interacting.md index 078f11cd..1f16d908 100644 --- a/docs/user-guide/interacting.md +++ b/docs/user-guide/interacting.md @@ -34,6 +34,16 @@ Version `0.26` introduces a new `act-as` feature, which allows you to act as ano ![Dialogue input - act as narrator](/talemate/img/0.26.0/interacting-input-act-as-narrator.png) +### Quick action + +If you start a message with the `@` character you can have the AI generate the response based on what action you are taking. This is useful if you want to quickly generate a response without having to type out the full action and narration yourself. + +![Quick action](/talemate/img/0.28.0/quick-action.png) + +![Quick action generated text](/talemate/img/0.28.0/quick-action-generated-text.png) + +This functionality was added in version `0.28.0` + ### Autocomplete When typing out your action / dialogue, you can hit the `ctrl+enter` key combination to generate an autocompletion of your current text. diff --git a/docs/user-guide/saving.md b/docs/user-guide/saving.md index e080a03f..308d2685 100644 --- a/docs/user-guide/saving.md +++ b/docs/user-guide/saving.md @@ -28,4 +28,10 @@ Some scenes start out with a locked save file. This is so that this particular s !!! info - Alternatively you can also unlock the save file through the [Scene editor](/talemate/user-guide/world-editor/scene/settings) found in **:material-earth-box: World Editor** :material-arrow-right: **:material-script: Scene** :material-arrow-right: **:material-cogs: Settings**. \ No newline at end of file + Alternatively you can also unlock the save file through the [Scene editor](/talemate/user-guide/world-editor/scene/settings) found in **:material-earth-box: World Editor** :material-arrow-right: **:material-script: Scene** :material-arrow-right: **:material-cogs: Settings**. + +## Forking a copy of a scene + +You can create a new copy of a scene from any message in the scene by clicking the :material-source-fork: **Fork** button underneath the message. + +All progress after the target message will be removed and a new scene will be created with the previous messages. \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index 68080a01..9420a912 100644 --- a/poetry.lock +++ b/poetry.lock @@ -16,139 +16,125 @@ pycares = ">=4.0.0" [[package]] name = "aiohappyeyeballs" -version = "2.4.0" +version = "2.4.3" description = "Happy Eyeballs for asyncio" optional = false python-versions = ">=3.8" files = [ - {file = "aiohappyeyeballs-2.4.0-py3-none-any.whl", hash = "sha256:7ce92076e249169a13c2f49320d1967425eaf1f407522d707d59cac7628d62bd"}, - {file = "aiohappyeyeballs-2.4.0.tar.gz", hash = "sha256:55a1714f084e63d49639800f95716da97a1f173d46a16dfcfda0016abb93b6b2"}, + {file = "aiohappyeyeballs-2.4.3-py3-none-any.whl", hash = "sha256:8a7a83727b2756f394ab2895ea0765a0a8c475e3c71e98d43d76f22b4b435572"}, + {file = "aiohappyeyeballs-2.4.3.tar.gz", hash = "sha256:75cf88a15106a5002a8eb1dab212525c00d1f4c0fa96e551c9fbe6f09a621586"}, ] [[package]] name = "aiohttp" -version = "3.10.5" +version = "3.11.7" description = "Async http client/server framework (asyncio)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "aiohttp-3.10.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:18a01eba2574fb9edd5f6e5fb25f66e6ce061da5dab5db75e13fe1558142e0a3"}, - {file = "aiohttp-3.10.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:94fac7c6e77ccb1ca91e9eb4cb0ac0270b9fb9b289738654120ba8cebb1189c6"}, - {file = "aiohttp-3.10.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2f1f1c75c395991ce9c94d3e4aa96e5c59c8356a15b1c9231e783865e2772699"}, - {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f7acae3cf1a2a2361ec4c8e787eaaa86a94171d2417aae53c0cca6ca3118ff6"}, - {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:94c4381ffba9cc508b37d2e536b418d5ea9cfdc2848b9a7fea6aebad4ec6aac1"}, - {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c31ad0c0c507894e3eaa843415841995bf8de4d6b2d24c6e33099f4bc9fc0d4f"}, - {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0912b8a8fadeb32ff67a3ed44249448c20148397c1ed905d5dac185b4ca547bb"}, - {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d93400c18596b7dc4794d48a63fb361b01a0d8eb39f28800dc900c8fbdaca91"}, - {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d00f3c5e0d764a5c9aa5a62d99728c56d455310bcc288a79cab10157b3af426f"}, - {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d742c36ed44f2798c8d3f4bc511f479b9ceef2b93f348671184139e7d708042c"}, - {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:814375093edae5f1cb31e3407997cf3eacefb9010f96df10d64829362ae2df69"}, - {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8224f98be68a84b19f48e0bdc14224b5a71339aff3a27df69989fa47d01296f3"}, - {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d9a487ef090aea982d748b1b0d74fe7c3950b109df967630a20584f9a99c0683"}, - {file = "aiohttp-3.10.5-cp310-cp310-win32.whl", hash = "sha256:d9ef084e3dc690ad50137cc05831c52b6ca428096e6deb3c43e95827f531d5ef"}, - {file = "aiohttp-3.10.5-cp310-cp310-win_amd64.whl", hash = "sha256:66bf9234e08fe561dccd62083bf67400bdbf1c67ba9efdc3dac03650e97c6088"}, - {file = "aiohttp-3.10.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8c6a4e5e40156d72a40241a25cc226051c0a8d816610097a8e8f517aeacd59a2"}, - {file = "aiohttp-3.10.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c634a3207a5445be65536d38c13791904fda0748b9eabf908d3fe86a52941cf"}, - {file = "aiohttp-3.10.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4aff049b5e629ef9b3e9e617fa6e2dfeda1bf87e01bcfecaf3949af9e210105e"}, - {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1942244f00baaacaa8155eca94dbd9e8cc7017deb69b75ef67c78e89fdad3c77"}, - {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e04a1f2a65ad2f93aa20f9ff9f1b672bf912413e5547f60749fa2ef8a644e061"}, - {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7f2bfc0032a00405d4af2ba27f3c429e851d04fad1e5ceee4080a1c570476697"}, - {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:424ae21498790e12eb759040bbb504e5e280cab64693d14775c54269fd1d2bb7"}, - {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:975218eee0e6d24eb336d0328c768ebc5d617609affaca5dbbd6dd1984f16ed0"}, - {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4120d7fefa1e2d8fb6f650b11489710091788de554e2b6f8347c7a20ceb003f5"}, - {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b90078989ef3fc45cf9221d3859acd1108af7560c52397ff4ace8ad7052a132e"}, - {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ba5a8b74c2a8af7d862399cdedce1533642fa727def0b8c3e3e02fcb52dca1b1"}, - {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:02594361128f780eecc2a29939d9dfc870e17b45178a867bf61a11b2a4367277"}, - {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8fb4fc029e135859f533025bc82047334e24b0d489e75513144f25408ecaf058"}, - {file = "aiohttp-3.10.5-cp311-cp311-win32.whl", hash = "sha256:e1ca1ef5ba129718a8fc827b0867f6aa4e893c56eb00003b7367f8a733a9b072"}, - {file = "aiohttp-3.10.5-cp311-cp311-win_amd64.whl", hash = "sha256:349ef8a73a7c5665cca65c88ab24abe75447e28aa3bc4c93ea5093474dfdf0ff"}, - {file = "aiohttp-3.10.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:305be5ff2081fa1d283a76113b8df7a14c10d75602a38d9f012935df20731487"}, - {file = "aiohttp-3.10.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3a1c32a19ee6bbde02f1cb189e13a71b321256cc1d431196a9f824050b160d5a"}, - {file = "aiohttp-3.10.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:61645818edd40cc6f455b851277a21bf420ce347baa0b86eaa41d51ef58ba23d"}, - {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c225286f2b13bab5987425558baa5cbdb2bc925b2998038fa028245ef421e75"}, - {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ba01ebc6175e1e6b7275c907a3a36be48a2d487549b656aa90c8a910d9f3178"}, - {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8eaf44ccbc4e35762683078b72bf293f476561d8b68ec8a64f98cf32811c323e"}, - {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c43eb1ab7cbf411b8e387dc169acb31f0ca0d8c09ba63f9eac67829585b44f"}, - {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de7a5299827253023c55ea549444e058c0eb496931fa05d693b95140a947cb73"}, - {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4790f0e15f00058f7599dab2b206d3049d7ac464dc2e5eae0e93fa18aee9e7bf"}, - {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:44b324a6b8376a23e6ba25d368726ee3bc281e6ab306db80b5819999c737d820"}, - {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0d277cfb304118079e7044aad0b76685d30ecb86f83a0711fc5fb257ffe832ca"}, - {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:54d9ddea424cd19d3ff6128601a4a4d23d54a421f9b4c0fff740505813739a91"}, - {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4f1c9866ccf48a6df2b06823e6ae80573529f2af3a0992ec4fe75b1a510df8a6"}, - {file = "aiohttp-3.10.5-cp312-cp312-win32.whl", hash = "sha256:dc4826823121783dccc0871e3f405417ac116055bf184ac04c36f98b75aacd12"}, - {file = "aiohttp-3.10.5-cp312-cp312-win_amd64.whl", hash = "sha256:22c0a23a3b3138a6bf76fc553789cb1a703836da86b0f306b6f0dc1617398abc"}, - {file = "aiohttp-3.10.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7f6b639c36734eaa80a6c152a238242bedcee9b953f23bb887e9102976343092"}, - {file = "aiohttp-3.10.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f29930bc2921cef955ba39a3ff87d2c4398a0394ae217f41cb02d5c26c8b1b77"}, - {file = "aiohttp-3.10.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f489a2c9e6455d87eabf907ac0b7d230a9786be43fbe884ad184ddf9e9c1e385"}, - {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:123dd5b16b75b2962d0fff566effb7a065e33cd4538c1692fb31c3bda2bfb972"}, - {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b98e698dc34966e5976e10bbca6d26d6724e6bdea853c7c10162a3235aba6e16"}, - {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3b9162bab7e42f21243effc822652dc5bb5e8ff42a4eb62fe7782bcbcdfacf6"}, - {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1923a5c44061bffd5eebeef58cecf68096e35003907d8201a4d0d6f6e387ccaa"}, - {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d55f011da0a843c3d3df2c2cf4e537b8070a419f891c930245f05d329c4b0689"}, - {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:afe16a84498441d05e9189a15900640a2d2b5e76cf4efe8cbb088ab4f112ee57"}, - {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f8112fb501b1e0567a1251a2fd0747baae60a4ab325a871e975b7bb67e59221f"}, - {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:1e72589da4c90337837fdfe2026ae1952c0f4a6e793adbbfbdd40efed7c63599"}, - {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:4d46c7b4173415d8e583045fbc4daa48b40e31b19ce595b8d92cf639396c15d5"}, - {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:33e6bc4bab477c772a541f76cd91e11ccb6d2efa2b8d7d7883591dfb523e5987"}, - {file = "aiohttp-3.10.5-cp313-cp313-win32.whl", hash = "sha256:c58c6837a2c2a7cf3133983e64173aec11f9c2cd8e87ec2fdc16ce727bcf1a04"}, - {file = "aiohttp-3.10.5-cp313-cp313-win_amd64.whl", hash = "sha256:38172a70005252b6893088c0f5e8a47d173df7cc2b2bd88650957eb84fcf5022"}, - {file = "aiohttp-3.10.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f6f18898ace4bcd2d41a122916475344a87f1dfdec626ecde9ee802a711bc569"}, - {file = "aiohttp-3.10.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5ede29d91a40ba22ac1b922ef510aab871652f6c88ef60b9dcdf773c6d32ad7a"}, - {file = "aiohttp-3.10.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:673f988370f5954df96cc31fd99c7312a3af0a97f09e407399f61583f30da9bc"}, - {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58718e181c56a3c02d25b09d4115eb02aafe1a732ce5714ab70326d9776457c3"}, - {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b38b1570242fbab8d86a84128fb5b5234a2f70c2e32f3070143a6d94bc854cf"}, - {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:074d1bff0163e107e97bd48cad9f928fa5a3eb4b9d33366137ffce08a63e37fe"}, - {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd31f176429cecbc1ba499d4aba31aaccfea488f418d60376b911269d3b883c5"}, - {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7384d0b87d4635ec38db9263e6a3f1eb609e2e06087f0aa7f63b76833737b471"}, - {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8989f46f3d7ef79585e98fa991e6ded55d2f48ae56d2c9fa5e491a6e4effb589"}, - {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:c83f7a107abb89a227d6c454c613e7606c12a42b9a4ca9c5d7dad25d47c776ae"}, - {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:cde98f323d6bf161041e7627a5fd763f9fd829bcfcd089804a5fdce7bb6e1b7d"}, - {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:676f94c5480d8eefd97c0c7e3953315e4d8c2b71f3b49539beb2aa676c58272f"}, - {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2d21ac12dc943c68135ff858c3a989f2194a709e6e10b4c8977d7fcd67dfd511"}, - {file = "aiohttp-3.10.5-cp38-cp38-win32.whl", hash = "sha256:17e997105bd1a260850272bfb50e2a328e029c941c2708170d9d978d5a30ad9a"}, - {file = "aiohttp-3.10.5-cp38-cp38-win_amd64.whl", hash = "sha256:1c19de68896747a2aa6257ae4cf6ef59d73917a36a35ee9d0a6f48cff0f94db8"}, - {file = "aiohttp-3.10.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7e2fe37ac654032db1f3499fe56e77190282534810e2a8e833141a021faaab0e"}, - {file = "aiohttp-3.10.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f5bf3ead3cb66ab990ee2561373b009db5bc0e857549b6c9ba84b20bc462e172"}, - {file = "aiohttp-3.10.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1b2c16a919d936ca87a3c5f0e43af12a89a3ce7ccbce59a2d6784caba945b68b"}, - {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad146dae5977c4dd435eb31373b3fe9b0b1bf26858c6fc452bf6af394067e10b"}, - {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c5c6fa16412b35999320f5c9690c0f554392dc222c04e559217e0f9ae244b92"}, - {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:95c4dc6f61d610bc0ee1edc6f29d993f10febfe5b76bb470b486d90bbece6b22"}, - {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da452c2c322e9ce0cfef392e469a26d63d42860f829026a63374fde6b5c5876f"}, - {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:898715cf566ec2869d5cb4d5fb4be408964704c46c96b4be267442d265390f32"}, - {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:391cc3a9c1527e424c6865e087897e766a917f15dddb360174a70467572ac6ce"}, - {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:380f926b51b92d02a34119d072f178d80bbda334d1a7e10fa22d467a66e494db"}, - {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce91db90dbf37bb6fa0997f26574107e1b9d5ff939315247b7e615baa8ec313b"}, - {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9093a81e18c45227eebe4c16124ebf3e0d893830c6aca7cc310bfca8fe59d857"}, - {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ee40b40aa753d844162dcc80d0fe256b87cba48ca0054f64e68000453caead11"}, - {file = "aiohttp-3.10.5-cp39-cp39-win32.whl", hash = "sha256:03f2645adbe17f274444953bdea69f8327e9d278d961d85657cb0d06864814c1"}, - {file = "aiohttp-3.10.5-cp39-cp39-win_amd64.whl", hash = "sha256:d17920f18e6ee090bdd3d0bfffd769d9f2cb4c8ffde3eb203777a3895c128862"}, - {file = "aiohttp-3.10.5.tar.gz", hash = "sha256:f071854b47d39591ce9a17981c46790acb30518e2f83dfca8db2dfa091178691"}, + {file = "aiohttp-3.11.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8bedb1f6cb919af3b6353921c71281b1491f948ca64408871465d889b4ee1b66"}, + {file = "aiohttp-3.11.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f5022504adab881e2d801a88b748ea63f2a9d130e0b2c430824682a96f6534be"}, + {file = "aiohttp-3.11.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e22d1721c978a6494adc824e0916f9d187fa57baeda34b55140315fa2f740184"}, + {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e993676c71288618eb07e20622572b1250d8713e7e00ab3aabae28cb70f3640d"}, + {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e13a05db87d3b241c186d0936808d0e4e12decc267c617d54e9c643807e968b6"}, + {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ba8d043fed7ffa117024d7ba66fdea011c0e7602327c6d73cacaea38abe4491"}, + {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dda3ed0a7869d2fa16aa41f9961ade73aa2c2e3b2fcb0a352524e7b744881889"}, + {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43bfd25113c1e98aec6c70e26d5f4331efbf4aa9037ba9ad88f090853bf64d7f"}, + {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3dd3e7e7c9ef3e7214f014f1ae260892286647b3cf7c7f1b644a568fd410f8ca"}, + {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:78c657ece7a73b976905ab9ec8be9ef2df12ed8984c24598a1791c58ce3b4ce4"}, + {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:db70a47987e34494b451a334605bee57a126fe8d290511349e86810b4be53b01"}, + {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:9e67531370a3b07e49b280c1f8c2df67985c790ad2834d1b288a2f13cd341c5f"}, + {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9202f184cc0582b1db15056f2225ab4c1e3dac4d9ade50dd0613ac3c46352ac2"}, + {file = "aiohttp-3.11.7-cp310-cp310-win32.whl", hash = "sha256:2257bdd5cf54a4039a4337162cd8048f05a724380a2283df34620f55d4e29341"}, + {file = "aiohttp-3.11.7-cp310-cp310-win_amd64.whl", hash = "sha256:b7215bf2b53bc6cb35808149980c2ae80a4ae4e273890ac85459c014d5aa60ac"}, + {file = "aiohttp-3.11.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cea52d11e02123f125f9055dfe0ccf1c3857225fb879e4a944fae12989e2aef2"}, + {file = "aiohttp-3.11.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3ce18f703b7298e7f7633efd6a90138d99a3f9a656cb52c1201e76cb5d79cf08"}, + {file = "aiohttp-3.11.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:670847ee6aeb3a569cd7cdfbe0c3bec1d44828bbfbe78c5d305f7f804870ef9e"}, + {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4dda726f89bfa5c465ba45b76515135a3ece0088dfa2da49b8bb278f3bdeea12"}, + {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c25b74a811dba37c7ea6a14d99eb9402d89c8d739d50748a75f3cf994cf19c43"}, + {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5522ee72f95661e79db691310290c4618b86dff2d9b90baedf343fd7a08bf79"}, + {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fbf41a6bbc319a7816ae0f0177c265b62f2a59ad301a0e49b395746eb2a9884"}, + {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:59ee1925b5a5efdf6c4e7be51deee93984d0ac14a6897bd521b498b9916f1544"}, + {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:24054fce8c6d6f33a3e35d1c603ef1b91bbcba73e3f04a22b4f2f27dac59b347"}, + {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:351849aca2c6f814575c1a485c01c17a4240413f960df1bf9f5deb0003c61a53"}, + {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:12724f3a211fa243570e601f65a8831372caf1a149d2f1859f68479f07efec3d"}, + {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:7ea4490360b605804bea8173d2d086b6c379d6bb22ac434de605a9cbce006e7d"}, + {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e0bf378db07df0a713a1e32381a1b277e62ad106d0dbe17b5479e76ec706d720"}, + {file = "aiohttp-3.11.7-cp311-cp311-win32.whl", hash = "sha256:cd8d62cab363dfe713067027a5adb4907515861f1e4ce63e7be810b83668b847"}, + {file = "aiohttp-3.11.7-cp311-cp311-win_amd64.whl", hash = "sha256:bf0e6cce113596377cadda4e3ac5fb89f095bd492226e46d91b4baef1dd16f60"}, + {file = "aiohttp-3.11.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:4bb7493c3e3a36d3012b8564bd0e2783259ddd7ef3a81a74f0dbfa000fce48b7"}, + {file = "aiohttp-3.11.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e143b0ef9cb1a2b4f74f56d4fbe50caa7c2bb93390aff52f9398d21d89bc73ea"}, + {file = "aiohttp-3.11.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f7c58a240260822dc07f6ae32a0293dd5bccd618bb2d0f36d51c5dbd526f89c0"}, + {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d20cfe63a1c135d26bde8c1d0ea46fd1200884afbc523466d2f1cf517d1fe33"}, + {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12e4d45847a174f77b2b9919719203769f220058f642b08504cf8b1cf185dacf"}, + {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf4efa2d01f697a7dbd0509891a286a4af0d86902fc594e20e3b1712c28c0106"}, + {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee6a4cdcbf54b8083dc9723cdf5f41f722c00db40ccf9ec2616e27869151129"}, + {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c6095aaf852c34f42e1bd0cf0dc32d1e4b48a90bfb5054abdbb9d64b36acadcb"}, + {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1cf03d27885f8c5ebf3993a220cc84fc66375e1e6e812731f51aab2b2748f4a6"}, + {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:1a17f6a230f81eb53282503823f59d61dff14fb2a93847bf0399dc8e87817307"}, + {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:481f10a1a45c5f4c4a578bbd74cff22eb64460a6549819242a87a80788461fba"}, + {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:db37248535d1ae40735d15bdf26ad43be19e3d93ab3f3dad8507eb0f85bb8124"}, + {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9d18a8b44ec8502a7fde91446cd9c9b95ce7c49f1eacc1fb2358b8907d4369fd"}, + {file = "aiohttp-3.11.7-cp312-cp312-win32.whl", hash = "sha256:3d1c9c15d3999107cbb9b2d76ca6172e6710a12fda22434ee8bd3f432b7b17e8"}, + {file = "aiohttp-3.11.7-cp312-cp312-win_amd64.whl", hash = "sha256:018f1b04883a12e77e7fc161934c0f298865d3a484aea536a6a2ca8d909f0ba0"}, + {file = "aiohttp-3.11.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:241a6ca732d2766836d62c58c49ca7a93d08251daef0c1e3c850df1d1ca0cbc4"}, + {file = "aiohttp-3.11.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:aa3705a8d14de39898da0fbad920b2a37b7547c3afd2a18b9b81f0223b7d0f68"}, + {file = "aiohttp-3.11.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9acfc7f652b31853eed3b92095b0acf06fd5597eeea42e939bd23a17137679d5"}, + {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcefcf2915a2dbdbce37e2fc1622129a1918abfe3d06721ce9f6cdac9b6d2eaa"}, + {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c1f6490dd1862af5aae6cfcf2a274bffa9a5b32a8f5acb519a7ecf5a99a88866"}, + {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac5462582d6561c1c1708853a9faf612ff4e5ea5e679e99be36143d6eabd8e"}, + {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c1a6309005acc4b2bcc577ba3b9169fea52638709ffacbd071f3503264620da"}, + {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5b973cce96793725ef63eb449adfb74f99c043c718acb76e0d2a447ae369962"}, + {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ce91a24aac80de6be8512fb1c4838a9881aa713f44f4e91dd7bb3b34061b497d"}, + {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:875f7100ce0e74af51d4139495eec4025affa1a605280f23990b6434b81df1bd"}, + {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c171fc35d3174bbf4787381716564042a4cbc008824d8195eede3d9b938e29a8"}, + {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ee9afa1b0d2293c46954f47f33e150798ad68b78925e3710044e0d67a9487791"}, + {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8360c7cc620abb320e1b8d603c39095101391a82b1d0be05fb2225471c9c5c52"}, + {file = "aiohttp-3.11.7-cp313-cp313-win32.whl", hash = "sha256:7a9318da4b4ada9a67c1dd84d1c0834123081e746bee311a16bb449f363d965e"}, + {file = "aiohttp-3.11.7-cp313-cp313-win_amd64.whl", hash = "sha256:fc6da202068e0a268e298d7cd09b6e9f3997736cd9b060e2750963754552a0a9"}, + {file = "aiohttp-3.11.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:17829f37c0d31d89aa6b8b010475a10233774771f9b6dc2cc352ea4f8ce95d9a"}, + {file = "aiohttp-3.11.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d6177077a31b1aecfc3c9070bd2f11419dbb4a70f30f4c65b124714f525c2e48"}, + {file = "aiohttp-3.11.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:badda65ac99555791eed75e234afb94686ed2317670c68bff8a4498acdaee935"}, + {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0de6466b9d742b4ee56fe1b2440706e225eb48c77c63152b1584864a236e7a50"}, + {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04b0cc74d5a882c9dacaeeccc1444f0233212b6f5be8bc90833feef1e1ce14b9"}, + {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c7af3e50e5903d21d7b935aceed901cc2475463bc16ddd5587653548661fdb"}, + {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c63f898f683d1379b9be5afc3dd139e20b30b0b1e0bf69a3fc3681f364cf1629"}, + {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fdadc3f6a32d6eca45f9a900a254757fd7855dfb2d8f8dcf0e88f0fae3ff8eb1"}, + {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d329300fb23e14ed1f8c6d688dfd867d1dcc3b1d7cd49b7f8c5b44e797ce0932"}, + {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:5578cf40440eafcb054cf859964bc120ab52ebe0e0562d2b898126d868749629"}, + {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:7b2f8107a3c329789f3c00b2daad0e35f548d0a55cda6291579136622099a46e"}, + {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:43dd89a6194f6ab02a3fe36b09e42e2df19c211fc2050ce37374d96f39604997"}, + {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d2fa6fc7cc865d26ff42480ac9b52b8c9b7da30a10a6442a9cdf429de840e949"}, + {file = "aiohttp-3.11.7-cp39-cp39-win32.whl", hash = "sha256:a7d9a606355655617fee25dd7e54d3af50804d002f1fd3118dd6312d26692d70"}, + {file = "aiohttp-3.11.7-cp39-cp39-win_amd64.whl", hash = "sha256:53c921b58fdc6485d6b2603e0132bb01cd59b8f0620ffc0907f525e0ba071687"}, + {file = "aiohttp-3.11.7.tar.gz", hash = "sha256:01a8aca4af3da85cea5c90141d23f4b0eee3cbecfd33b029a45a80f28c66c668"}, ] [package.dependencies] aiodns = {version = ">=3.2.0", optional = true, markers = "(sys_platform == \"linux\" or sys_platform == \"darwin\") and extra == \"speedups\""} aiohappyeyeballs = ">=2.3.0" aiosignal = ">=1.1.2" -async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} +async-timeout = {version = ">=4.0,<6.0", markers = "python_version < \"3.11\""} attrs = ">=17.3.0" Brotli = {version = "*", optional = true, markers = "platform_python_implementation == \"CPython\" and extra == \"speedups\""} brotlicffi = {version = "*", optional = true, markers = "platform_python_implementation != \"CPython\" and extra == \"speedups\""} frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" -yarl = ">=1.0,<2.0" +propcache = ">=0.2.0" +yarl = ">=1.17.0,<2.0" [package.extras] speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] [[package]] name = "aiohttp-retry" -version = "2.8.3" +version = "2.9.1" description = "Simple retry client for aiohttp" optional = false python-versions = ">=3.7" files = [ - {file = "aiohttp_retry-2.8.3-py3-none-any.whl", hash = "sha256:3aeeead8f6afe48272db93ced9440cf4eda8b6fd7ee2abb25357b7eb28525b45"}, - {file = "aiohttp_retry-2.8.3.tar.gz", hash = "sha256:9a8e637e31682ad36e1ff9f8bcba912fcfc7d7041722bc901a4b948da4d71ea9"}, + {file = "aiohttp_retry-2.9.1-py3-none-any.whl", hash = "sha256:66d2759d1921838256a05a3f80ad7e724936f083e35be5abb5e16eed6be6dc54"}, + {file = "aiohttp_retry-2.9.1.tar.gz", hash = "sha256:8eb75e904ed4ee5c2ec242fefe85bf04240f685391c4879d8f541d6028ff01f1"}, ] [package.dependencies] @@ -181,13 +167,13 @@ files = [ [[package]] name = "anthropic" -version = "0.34.2" +version = "0.39.0" description = "The official Python library for the anthropic API" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "anthropic-0.34.2-py3-none-any.whl", hash = "sha256:f50a628eb71e2c76858b106c8cbea278c45c6bd2077cb3aff716a112abddc9fc"}, - {file = "anthropic-0.34.2.tar.gz", hash = "sha256:808ea19276f26646bfde9ee535669735519376e4eeb301a2974fc69892be1d6e"}, + {file = "anthropic-0.39.0-py3-none-any.whl", hash = "sha256:ea17093ae0ce0e1768b0c46501d6086b5bcd74ff39d68cd2d6396374e9de7c09"}, + {file = "anthropic-0.39.0.tar.gz", hash = "sha256:94671cc80765f9ce693f76d63a97ee9bef4c2d6063c044e983d21a2e262f63ba"}, ] [package.dependencies] @@ -197,7 +183,6 @@ httpx = ">=0.23.0,<1" jiter = ">=0.4.0,<1" pydantic = ">=1.9.0,<3" sniffio = "*" -tokenizers = ">=0.13.0" typing-extensions = ">=4.7,<5" [package.extras] @@ -206,13 +191,13 @@ vertex = ["google-auth (>=2,<3)"] [[package]] name = "anyio" -version = "4.6.0" +version = "4.6.2.post1" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.9" files = [ - {file = "anyio-4.6.0-py3-none-any.whl", hash = "sha256:c7d2e9d63e31599eeb636c8c5c03a7e108d73b345f064f1c19fdc87b79036a9a"}, - {file = "anyio-4.6.0.tar.gz", hash = "sha256:137b4559cbb034c477165047febb6ff83f390fc3b20bf181c1fc0a728cb8beeb"}, + {file = "anyio-4.6.2.post1-py3-none-any.whl", hash = "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d"}, + {file = "anyio-4.6.2.post1.tar.gz", hash = "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c"}, ] [package.dependencies] @@ -223,7 +208,7 @@ typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.21.0b1)"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] trio = ["trio (>=0.26.1)"] [[package]] @@ -264,13 +249,13 @@ wrapt = [ [[package]] name = "async-timeout" -version = "4.0.3" +version = "5.0.1" description = "Timeout context manager for asyncio programs" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, - {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, + {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, + {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, ] [[package]] @@ -329,38 +314,36 @@ files = [ [[package]] name = "bcrypt" -version = "4.2.0" +version = "4.2.1" description = "Modern password hashing for your software and your servers" optional = false python-versions = ">=3.7" files = [ - {file = "bcrypt-4.2.0-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:096a15d26ed6ce37a14c1ac1e48119660f21b24cba457f160a4b830f3fe6b5cb"}, - {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c02d944ca89d9b1922ceb8a46460dd17df1ba37ab66feac4870f6862a1533c00"}, - {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d84cf6d877918620b687b8fd1bf7781d11e8a0998f576c7aa939776b512b98d"}, - {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:1bb429fedbe0249465cdd85a58e8376f31bb315e484f16e68ca4c786dcc04291"}, - {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:655ea221910bcac76ea08aaa76df427ef8625f92e55a8ee44fbf7753dbabb328"}, - {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:1ee38e858bf5d0287c39b7a1fc59eec64bbf880c7d504d3a06a96c16e14058e7"}, - {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:0da52759f7f30e83f1e30a888d9163a81353ef224d82dc58eb5bb52efcabc399"}, - {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3698393a1b1f1fd5714524193849d0c6d524d33523acca37cd28f02899285060"}, - {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:762a2c5fb35f89606a9fde5e51392dad0cd1ab7ae64149a8b935fe8d79dd5ed7"}, - {file = "bcrypt-4.2.0-cp37-abi3-win32.whl", hash = "sha256:5a1e8aa9b28ae28020a3ac4b053117fb51c57a010b9f969603ed885f23841458"}, - {file = "bcrypt-4.2.0-cp37-abi3-win_amd64.whl", hash = "sha256:8f6ede91359e5df88d1f5c1ef47428a4420136f3ce97763e31b86dd8280fbdf5"}, - {file = "bcrypt-4.2.0-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:c52aac18ea1f4a4f65963ea4f9530c306b56ccd0c6f8c8da0c06976e34a6e841"}, - {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3bbbfb2734f0e4f37c5136130405332640a1e46e6b23e000eeff2ba8d005da68"}, - {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3413bd60460f76097ee2e0a493ccebe4a7601918219c02f503984f0a7ee0aebe"}, - {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8d7bb9c42801035e61c109c345a28ed7e84426ae4865511eb82e913df18f58c2"}, - {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3d3a6d28cb2305b43feac298774b997e372e56c7c7afd90a12b3dc49b189151c"}, - {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:9c1c4ad86351339c5f320ca372dfba6cb6beb25e8efc659bedd918d921956bae"}, - {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:27fe0f57bb5573104b5a6de5e4153c60814c711b29364c10a75a54bb6d7ff48d"}, - {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8ac68872c82f1add6a20bd489870c71b00ebacd2e9134a8aa3f98a0052ab4b0e"}, - {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:cb2a8ec2bc07d3553ccebf0746bbf3d19426d1c6d1adbd4fa48925f66af7b9e8"}, - {file = "bcrypt-4.2.0-cp39-abi3-win32.whl", hash = "sha256:77800b7147c9dc905db1cba26abe31e504d8247ac73580b4aa179f98e6608f34"}, - {file = "bcrypt-4.2.0-cp39-abi3-win_amd64.whl", hash = "sha256:61ed14326ee023917ecd093ee6ef422a72f3aec6f07e21ea5f10622b735538a9"}, - {file = "bcrypt-4.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:39e1d30c7233cfc54f5c3f2c825156fe044efdd3e0b9d309512cc514a263ec2a"}, - {file = "bcrypt-4.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f4f4acf526fcd1c34e7ce851147deedd4e26e6402369304220250598b26448db"}, - {file = "bcrypt-4.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:1ff39b78a52cf03fdf902635e4c81e544714861ba3f0efc56558979dd4f09170"}, - {file = "bcrypt-4.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:373db9abe198e8e2c70d12b479464e0d5092cc122b20ec504097b5f2297ed184"}, - {file = "bcrypt-4.2.0.tar.gz", hash = "sha256:cf69eaf5185fd58f268f805b505ce31f9b9fc2d64b376642164e9244540c1221"}, + {file = "bcrypt-4.2.1-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:1340411a0894b7d3ef562fb233e4b6ed58add185228650942bdc885362f32c17"}, + {file = "bcrypt-4.2.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ee315739bc8387aa36ff127afc99120ee452924e0df517a8f3e4c0187a0f5f"}, + {file = "bcrypt-4.2.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dbd0747208912b1e4ce730c6725cb56c07ac734b3629b60d4398f082ea718ad"}, + {file = "bcrypt-4.2.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:aaa2e285be097050dba798d537b6efd9b698aa88eef52ec98d23dcd6d7cf6fea"}, + {file = "bcrypt-4.2.1-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:76d3e352b32f4eeb34703370e370997065d28a561e4a18afe4fef07249cb4396"}, + {file = "bcrypt-4.2.1-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:b7703ede632dc945ed1172d6f24e9f30f27b1b1a067f32f68bf169c5f08d0425"}, + {file = "bcrypt-4.2.1-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:89df2aea2c43be1e1fa066df5f86c8ce822ab70a30e4c210968669565c0f4685"}, + {file = "bcrypt-4.2.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:04e56e3fe8308a88b77e0afd20bec516f74aecf391cdd6e374f15cbed32783d6"}, + {file = "bcrypt-4.2.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:cfdf3d7530c790432046c40cda41dfee8c83e29482e6a604f8930b9930e94139"}, + {file = "bcrypt-4.2.1-cp37-abi3-win32.whl", hash = "sha256:adadd36274510a01f33e6dc08f5824b97c9580583bd4487c564fc4617b328005"}, + {file = "bcrypt-4.2.1-cp37-abi3-win_amd64.whl", hash = "sha256:8c458cd103e6c5d1d85cf600e546a639f234964d0228909d8f8dbeebff82d526"}, + {file = "bcrypt-4.2.1-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:8ad2f4528cbf0febe80e5a3a57d7a74e6635e41af1ea5675282a33d769fba413"}, + {file = "bcrypt-4.2.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:909faa1027900f2252a9ca5dfebd25fc0ef1417943824783d1c8418dd7d6df4a"}, + {file = "bcrypt-4.2.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cde78d385d5e93ece5479a0a87f73cd6fa26b171c786a884f955e165032b262c"}, + {file = "bcrypt-4.2.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:533e7f3bcf2f07caee7ad98124fab7499cb3333ba2274f7a36cf1daee7409d99"}, + {file = "bcrypt-4.2.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:687cf30e6681eeda39548a93ce9bfbb300e48b4d445a43db4298d2474d2a1e54"}, + {file = "bcrypt-4.2.1-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:041fa0155c9004eb98a232d54da05c0b41d4b8e66b6fc3cb71b4b3f6144ba837"}, + {file = "bcrypt-4.2.1-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f85b1ffa09240c89aa2e1ae9f3b1c687104f7b2b9d2098da4e923f1b7082d331"}, + {file = "bcrypt-4.2.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c6f5fa3775966cca251848d4d5393ab016b3afed251163c1436fefdec3b02c84"}, + {file = "bcrypt-4.2.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:807261df60a8b1ccd13e6599c779014a362ae4e795f5c59747f60208daddd96d"}, + {file = "bcrypt-4.2.1-cp39-abi3-win32.whl", hash = "sha256:b588af02b89d9fad33e5f98f7838bf590d6d692df7153647724a7f20c186f6bf"}, + {file = "bcrypt-4.2.1-cp39-abi3-win_amd64.whl", hash = "sha256:e84e0e6f8e40a242b11bce56c313edc2be121cec3e0ec2d76fce01f6af33c07c"}, + {file = "bcrypt-4.2.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:76132c176a6d9953cdc83c296aeaed65e1a708485fd55abf163e0d9f8f16ce0e"}, + {file = "bcrypt-4.2.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e158009a54c4c8bc91d5e0da80920d048f918c61a581f0a63e4e93bb556d362f"}, + {file = "bcrypt-4.2.1.tar.gz", hash = "sha256:6765386e3ab87f569b276988742039baab087b2cdb01e809d74e74503c2faafe"}, ] [package.extras] @@ -390,33 +373,33 @@ lxml = ["lxml"] [[package]] name = "black" -version = "24.8.0" +version = "24.10.0" description = "The uncompromising code formatter." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "black-24.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09cdeb74d494ec023ded657f7092ba518e8cf78fa8386155e4a03fdcc44679e6"}, - {file = "black-24.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:81c6742da39f33b08e791da38410f32e27d632260e599df7245cccee2064afeb"}, - {file = "black-24.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:707a1ca89221bc8a1a64fb5e15ef39cd755633daa672a9db7498d1c19de66a42"}, - {file = "black-24.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d6417535d99c37cee4091a2f24eb2b6d5ec42b144d50f1f2e436d9fe1916fe1a"}, - {file = "black-24.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fb6e2c0b86bbd43dee042e48059c9ad7830abd5c94b0bc518c0eeec57c3eddc1"}, - {file = "black-24.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:837fd281f1908d0076844bc2b801ad2d369c78c45cf800cad7b61686051041af"}, - {file = "black-24.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62e8730977f0b77998029da7971fa896ceefa2c4c4933fcd593fa599ecbf97a4"}, - {file = "black-24.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:72901b4913cbac8972ad911dc4098d5753704d1f3c56e44ae8dce99eecb0e3af"}, - {file = "black-24.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7c046c1d1eeb7aea9335da62472481d3bbf3fd986e093cffd35f4385c94ae368"}, - {file = "black-24.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:649f6d84ccbae73ab767e206772cc2d7a393a001070a4c814a546afd0d423aed"}, - {file = "black-24.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2b59b250fdba5f9a9cd9d0ece6e6d993d91ce877d121d161e4698af3eb9c1018"}, - {file = "black-24.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:6e55d30d44bed36593c3163b9bc63bf58b3b30e4611e4d88a0c3c239930ed5b2"}, - {file = "black-24.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:505289f17ceda596658ae81b61ebbe2d9b25aa78067035184ed0a9d855d18afd"}, - {file = "black-24.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b19c9ad992c7883ad84c9b22aaa73562a16b819c1d8db7a1a1a49fb7ec13c7d2"}, - {file = "black-24.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1f13f7f386f86f8121d76599114bb8c17b69d962137fc70efe56137727c7047e"}, - {file = "black-24.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:f490dbd59680d809ca31efdae20e634f3fae27fba3ce0ba3208333b713bc3920"}, - {file = "black-24.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:eab4dd44ce80dea27dc69db40dab62d4ca96112f87996bca68cd75639aeb2e4c"}, - {file = "black-24.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3c4285573d4897a7610054af5a890bde7c65cb466040c5f0c8b732812d7f0e5e"}, - {file = "black-24.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e84e33b37be070ba135176c123ae52a51f82306def9f7d063ee302ecab2cf47"}, - {file = "black-24.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:73bbf84ed136e45d451a260c6b73ed674652f90a2b3211d6a35e78054563a9bb"}, - {file = "black-24.8.0-py3-none-any.whl", hash = "sha256:972085c618ee94f402da1af548a4f218c754ea7e5dc70acb168bfaca4c2542ed"}, - {file = "black-24.8.0.tar.gz", hash = "sha256:2500945420b6784c38b9ee885af039f5e7471ef284ab03fa35ecdde4688cd83f"}, + {file = "black-24.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6668650ea4b685440857138e5fe40cde4d652633b1bdffc62933d0db4ed9812"}, + {file = "black-24.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1c536fcf674217e87b8cc3657b81809d3c085d7bf3ef262ead700da345bfa6ea"}, + {file = "black-24.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:649fff99a20bd06c6f727d2a27f401331dc0cc861fb69cde910fe95b01b5928f"}, + {file = "black-24.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:fe4d6476887de70546212c99ac9bd803d90b42fc4767f058a0baa895013fbb3e"}, + {file = "black-24.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5a2221696a8224e335c28816a9d331a6c2ae15a2ee34ec857dcf3e45dbfa99ad"}, + {file = "black-24.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f9da3333530dbcecc1be13e69c250ed8dfa67f43c4005fb537bb426e19200d50"}, + {file = "black-24.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4007b1393d902b48b36958a216c20c4482f601569d19ed1df294a496eb366392"}, + {file = "black-24.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:394d4ddc64782e51153eadcaaca95144ac4c35e27ef9b0a42e121ae7e57a9175"}, + {file = "black-24.10.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b5e39e0fae001df40f95bd8cc36b9165c5e2ea88900167bddf258bacef9bbdc3"}, + {file = "black-24.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d37d422772111794b26757c5b55a3eade028aa3fde43121ab7b673d050949d65"}, + {file = "black-24.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:14b3502784f09ce2443830e3133dacf2c0110d45191ed470ecb04d0f5f6fcb0f"}, + {file = "black-24.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:30d2c30dc5139211dda799758559d1b049f7f14c580c409d6ad925b74a4208a8"}, + {file = "black-24.10.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cbacacb19e922a1d75ef2b6ccaefcd6e93a2c05ede32f06a21386a04cedb981"}, + {file = "black-24.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1f93102e0c5bb3907451063e08b9876dbeac810e7da5a8bfb7aeb5a9ef89066b"}, + {file = "black-24.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ddacb691cdcdf77b96f549cf9591701d8db36b2f19519373d60d31746068dbf2"}, + {file = "black-24.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:680359d932801c76d2e9c9068d05c6b107f2584b2a5b88831c83962eb9984c1b"}, + {file = "black-24.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:17374989640fbca88b6a448129cd1745c5eb8d9547b464f281b251dd00155ccd"}, + {file = "black-24.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:63f626344343083322233f175aaf372d326de8436f5928c042639a4afbbf1d3f"}, + {file = "black-24.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfa1d0cb6200857f1923b602f978386a3a2758a65b52e0950299ea014be6800"}, + {file = "black-24.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:2cd9c95431d94adc56600710f8813ee27eea544dd118d45896bb734e9d7a0dc7"}, + {file = "black-24.10.0-py3-none-any.whl", hash = "sha256:3bb2b7a1f7b685f85b11fed1ef10f8a9148bceb49853e47a294a3dd963c1dd7d"}, + {file = "black-24.10.0.tar.gz", hash = "sha256:846ea64c97afe3bc677b761787993be4991810ecc7a4a937816dd6bddedc4875"}, ] [package.dependencies] @@ -430,34 +413,34 @@ typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] +d = ["aiohttp (>=3.10)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "blinker" -version = "1.8.2" +version = "1.9.0" description = "Fast, simple object-to-object and broadcast signaling" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "blinker-1.8.2-py3-none-any.whl", hash = "sha256:1779309f71bf239144b9399d06ae925637cf6634cf6bd131104184531bf67c01"}, - {file = "blinker-1.8.2.tar.gz", hash = "sha256:8f77b09d3bf7c795e969e9486f39c2c5e9c39d4ee07424be2bc594ece9642d83"}, + {file = "blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc"}, + {file = "blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf"}, ] [[package]] name = "boto3" -version = "1.35.24" +version = "1.35.67" description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" files = [ - {file = "boto3-1.35.24-py3-none-any.whl", hash = "sha256:97fcc1a14cbc759e4ba9535ced703a99fcf652c9c4b8dfcd06f292c80551684b"}, - {file = "boto3-1.35.24.tar.gz", hash = "sha256:be7807f30f26d6c0057e45cfd09dad5968e664488bf4f9138d0bb7a0f6d8ed40"}, + {file = "boto3-1.35.67-py3-none-any.whl", hash = "sha256:db4d8736ef9b0f1972740d464d77edbdf35cd9dcddf9291c645691920f8fa50d"}, + {file = "boto3-1.35.67.tar.gz", hash = "sha256:4eb793c45123fbca1b2b152ce0d18272d19126cf89809cd6698bf2dfc66270fb"}, ] [package.dependencies] -botocore = ">=1.35.24,<1.36.0" +botocore = ">=1.35.67,<1.36.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -466,13 +449,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.35.24" +version = "1.35.67" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" files = [ - {file = "botocore-1.35.24-py3-none-any.whl", hash = "sha256:eb9ccc068255cc3d24c36693fda6aec7786db05ae6c2b13bcba66dce6a13e2e3"}, - {file = "botocore-1.35.24.tar.gz", hash = "sha256:1e59b0f14f4890c4f70bd6a58a634b9464bed1c4c6171f87c8795d974ade614b"}, + {file = "botocore-1.35.67-py3-none-any.whl", hash = "sha256:c83983c196b4452dd7f298e68a9a224bc8fd58075b60133532848813826611af"}, + {file = "botocore-1.35.67.tar.gz", hash = "sha256:d782e02f2949889cf97a140a89cd5e9363d0e4b0153db51faf7fc16305c6e0e1"}, ] [package.dependencies] @@ -481,17 +464,17 @@ python-dateutil = ">=2.1,<3.0.0" urllib3 = {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""} [package.extras] -crt = ["awscrt (==0.21.5)"] +crt = ["awscrt (==0.22.0)"] [[package]] name = "bracex" -version = "2.5" +version = "2.5.post1" description = "Bash style brace expander." optional = false python-versions = ">=3.8" files = [ - {file = "bracex-2.5-py3-none-any.whl", hash = "sha256:d2fcf4b606a82ac325471affe1706dd9bbaa3536c91ef86a31f6b766f3dad1d0"}, - {file = "bracex-2.5.tar.gz", hash = "sha256:0725da5045e8d37ea9592ab3614d8b561e22c3c5fde3964699be672e072ab611"}, + {file = "bracex-2.5.post1-py3-none-any.whl", hash = "sha256:13e5732fec27828d6af308628285ad358047cec36801598368cb28bc631dbaf6"}, + {file = "bracex-2.5.post1.tar.gz", hash = "sha256:12c50952415bfa773d2d9ccb8e79651b8cdb1f31a42f6091b804f6ba2b4a66b6"}, ] [[package]] @@ -627,13 +610,13 @@ cffi = ">=1.0.0" [[package]] name = "build" -version = "1.2.2" +version = "1.2.2.post1" description = "A simple, correct Python build frontend" optional = false python-versions = ">=3.8" files = [ - {file = "build-1.2.2-py3-none-any.whl", hash = "sha256:277ccc71619d98afdd841a0e96ac9fe1593b823af481d3b0cea748e8894e0613"}, - {file = "build-1.2.2.tar.gz", hash = "sha256:119b2fb462adef986483438377a13b2f42064a2a3a4161f24a0cca698a07ac8c"}, + {file = "build-1.2.2.post1-py3-none-any.whl", hash = "sha256:1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5"}, + {file = "build-1.2.2.post1.tar.gz", hash = "sha256:b36993e92ca9375a219c99e606a122ff365a760a2d4bba0caa09bd5278b608b7"}, ] [package.dependencies] @@ -753,101 +736,116 @@ pycparser = "*" [[package]] name = "charset-normalizer" -version = "3.3.2" +version = "3.4.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, + {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, + {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, ] [[package]] @@ -893,13 +891,13 @@ numpy = "*" [[package]] name = "chromadb" -version = "0.5.7" +version = "0.5.20" description = "Chroma." optional = false python-versions = ">=3.8" files = [ - {file = "chromadb-0.5.7-py3-none-any.whl", hash = "sha256:2358f92804cd198b125de73076ec48f9f55c729df119919a76a6716ad0e465f6"}, - {file = "chromadb-0.5.7.tar.gz", hash = "sha256:3432865025ef3ceeaee0a59b265a784d8b5978cb7c41593c74ddd2427c776c94"}, + {file = "chromadb-0.5.20-py3-none-any.whl", hash = "sha256:9550ba1b6dce911e35cac2568b301badf4b42f457b99a432bdeec2b6b9dd3680"}, + {file = "chromadb-0.5.20.tar.gz", hash = "sha256:19513a23b2d20059866216bfd80195d1d4a160ffba234b8899f5e80978160ca7"}, ] [package.dependencies] @@ -948,17 +946,16 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "cohere" -version = "5.9.4" +version = "5.11.4" description = "" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "cohere-5.9.4-py3-none-any.whl", hash = "sha256:d1b31d8ba32e338b3aa91737aa98dc74de8778ed8e397ab799739b5f060f44e7"}, - {file = "cohere-5.9.4.tar.gz", hash = "sha256:ed0fa256c51423175c208650dffcb534ae112dc3ab7703de352e2adaf99dd50b"}, + {file = "cohere-5.11.4-py3-none-any.whl", hash = "sha256:59fb427e5426e0ee1c25b9deec83f0418a1c082240c57007f41384b34cd41552"}, + {file = "cohere-5.11.4.tar.gz", hash = "sha256:5586335a20de3bf6816f34151f9d9f2928880cdf776c57aae793b5cca58d1826"}, ] [package.dependencies] -boto3 = ">=1.34.0,<2.0.0" fastavro = ">=1.9.4,<2.0.0" httpx = ">=0.21.2" httpx-sse = "0.4.0" @@ -970,6 +967,9 @@ tokenizers = ">=0.15,<1" types-requests = ">=2.0.0,<3.0.0" typing_extensions = ">=4.0.0" +[package.extras] +aws = ["boto3 (>=1.34.0,<2.0.0)", "sagemaker (>=2.232.1,<3.0.0)"] + [[package]] name = "colorama" version = "0.4.6" @@ -1000,43 +1000,38 @@ cron = ["capturer (>=2.4)"] [[package]] name = "cryptography" -version = "42.0.8" +version = "43.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e"}, - {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7"}, - {file = "cryptography-42.0.8-cp37-abi3-win32.whl", hash = "sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2"}, - {file = "cryptography-42.0.8-cp37-abi3-win_amd64.whl", hash = "sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba"}, - {file = "cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14"}, - {file = "cryptography-42.0.8-cp39-abi3-win32.whl", hash = "sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c"}, - {file = "cryptography-42.0.8-cp39-abi3-win_amd64.whl", hash = "sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5a94eccb2a81a309806027e1670a358b99b8fe8bfe9f8d329f27d72c094dde8c"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dec9b018df185f08483f294cae6ccac29e7a6e0678996587363dc352dc65c842"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:343728aac38decfdeecf55ecab3264b015be68fc2816ca800db649607aeee648"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:013629ae70b40af70c9a7a5db40abe5d9054e6f4380e50ce769947b73bf3caad"}, - {file = "cryptography-42.0.8.tar.gz", hash = "sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2"}, + {file = "cryptography-43.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e1ce50266f4f70bf41a2c6dc4358afadae90e2a1e5342d3c08883df1675374f"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:443c4a81bb10daed9a8f334365fe52542771f25aedaf889fd323a853ce7377d6"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:74f57f24754fe349223792466a709f8e0c093205ff0dca557af51072ff47ab18"}, + {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9762ea51a8fc2a88b70cf2995e5675b38d93bf36bd67d91721c309df184f49bd"}, + {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:81ef806b1fef6b06dcebad789f988d3b37ccaee225695cf3e07648eee0fc6b73"}, + {file = "cryptography-43.0.3-cp37-abi3-win32.whl", hash = "sha256:cbeb489927bd7af4aa98d4b261af9a5bc025bd87f0e3547e11584be9e9427be2"}, + {file = "cryptography-43.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:f46304d6f0c6ab8e52770addfa2fc41e6629495548862279641972b6215451cd"}, + {file = "cryptography-43.0.3-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:8ac43ae87929a5982f5948ceda07001ee5e83227fd69cf55b109144938d96984"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405"}, + {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16"}, + {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73"}, + {file = "cryptography-43.0.3-cp39-abi3-win32.whl", hash = "sha256:d56e96520b1020449bbace2b78b603442e7e378a9b3bd68de65c782db1507995"}, + {file = "cryptography-43.0.3-cp39-abi3-win_amd64.whl", hash = "sha256:0c580952eef9bf68c4747774cde7ec1d85a6e61de97281f2dba83c7d2c806362"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d03b5621a135bffecad2c73e9f4deb1a0f977b9a8ffe6f8e002bf6c9d07b918c"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a2a431ee15799d6db9fe80c82b055bae5a752bef645bba795e8e52687c69efe3"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:281c945d0e28c92ca5e5930664c1cefd85efe80e5c0d2bc58dd63383fda29f83"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f18c716be16bc1fea8e95def49edf46b82fccaa88587a45f8dc0ff6ab5d8e0a7"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4a02ded6cd4f0a5562a8887df8b3bd14e822a90f97ac5e544c162899bc467664"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:53a583b6637ab4c4e3591a15bc9db855b8d9dee9a669b550f311480acab6eb08"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1ec0bcf7e17c0c5669d881b1cd38c4972fade441b27bda1051665faaa89bdcaa"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff"}, + {file = "cryptography-43.0.3.tar.gz", hash = "sha256:315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805"}, ] [package.dependencies] @@ -1049,25 +1044,25 @@ nox = ["nox"] pep8test = ["check-sdist", "click", "mypy", "ruff"] sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test = ["certifi", "cryptography-vectors (==43.0.3)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] [[package]] name = "deprecated" -version = "1.2.14" +version = "1.2.15" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" files = [ - {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, - {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, + {file = "Deprecated-1.2.15-py2.py3-none-any.whl", hash = "sha256:353bc4a8ac4bfc96800ddab349d89c25dec1079f65fd53acdcc1e0b975b21320"}, + {file = "deprecated-1.2.15.tar.gz", hash = "sha256:683e561a90de76239796e6b6feac66b99030d2dd3fcf61ef996330f14bbb9b0d"}, ] [package.dependencies] wrapt = ">=1.10,<2" [package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "jinja2 (>=3.0.3,<3.1.0)", "setuptools", "sphinx (<2)", "tox"] [[package]] name = "distro" @@ -1082,21 +1077,21 @@ files = [ [[package]] name = "dnspython" -version = "2.6.1" +version = "2.7.0" description = "DNS toolkit" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "dnspython-2.6.1-py3-none-any.whl", hash = "sha256:5ef3b9680161f6fa89daf8ad451b5f1a33b18ae8a1c6778cdf4b43f08c0a6e50"}, - {file = "dnspython-2.6.1.tar.gz", hash = "sha256:e8f0f9c23a7b7cb99ded64e6c3a6f3e701d78f50c55e002b839dea7225cff7cc"}, + {file = "dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86"}, + {file = "dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1"}, ] [package.extras] -dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "mypy (>=1.8)", "pylint (>=3)", "pytest (>=7.4)", "pytest-cov (>=4.1.0)", "sphinx (>=7.2.0)", "twine (>=4.0.0)", "wheel (>=0.42.0)"] -dnssec = ["cryptography (>=41)"] +dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "hypercorn (>=0.16.0)", "mypy (>=1.8)", "pylint (>=3)", "pytest (>=7.4)", "pytest-cov (>=4.1.0)", "quart-trio (>=0.11.0)", "sphinx (>=7.2.0)", "sphinx-rtd-theme (>=2.0.0)", "twine (>=4.0.0)", "wheel (>=0.42.0)"] +dnssec = ["cryptography (>=43)"] doh = ["h2 (>=4.1.0)", "httpcore (>=1.0.0)", "httpx (>=0.26.0)"] -doq = ["aioquic (>=0.9.25)"] -idna = ["idna (>=3.6)"] +doq = ["aioquic (>=1.0.0)"] +idna = ["idna (>=3.7)"] trio = ["trio (>=0.23)"] wmi = ["wmi (>=1.5.1)"] @@ -1113,12 +1108,13 @@ files = [ [[package]] name = "durationpy" -version = "0.7" +version = "0.9" description = "Module for converting between datetime.timedelta and Go's Duration strings." optional = false python-versions = "*" files = [ - {file = "durationpy-0.7.tar.gz", hash = "sha256:8447c43df4f1a0b434e70c15a38d77f5c9bd17284bfc1ff1d430f233d5083732"}, + {file = "durationpy-0.9-py3-none-any.whl", hash = "sha256:e65359a7af5cedad07fb77a2dd3f390f8eb0b74cb845589fa6c057086834dd38"}, + {file = "durationpy-0.9.tar.gz", hash = "sha256:fd3feb0a69a0057d582ef643c355c40d2fa1c942191f914d12203b1a01ac722a"}, ] [[package]] @@ -1152,13 +1148,13 @@ test = ["pytest (>=6)"] [[package]] name = "fastapi" -version = "0.115.0" +version = "0.115.5" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = false python-versions = ">=3.8" files = [ - {file = "fastapi-0.115.0-py3-none-any.whl", hash = "sha256:17ea427674467486e997206a5ab25760f6b09e069f099b96f5b55a32fb6f1631"}, - {file = "fastapi-0.115.0.tar.gz", hash = "sha256:f93b4ca3529a8ebc6fc3fcf710e5efa8de3df9b41570958abf1d97d843138004"}, + {file = "fastapi-0.115.5-py3-none-any.whl", hash = "sha256:596b95adbe1474da47049e802f9a65ab2ffa9c2b07e7efee70eb8a66c9f2f796"}, + {file = "fastapi-0.115.5.tar.gz", hash = "sha256:0e7a4d0dc0d01c68df21887cce0945e72d3c48b9f4f79dfe7a7d53aa08fbb289"}, ] [package.dependencies] @@ -1173,7 +1169,7 @@ pydantic-extra-types = {version = ">=2.0.0", optional = true, markers = "extra = pydantic-settings = {version = ">=2.0.0", optional = true, markers = "extra == \"all\""} python-multipart = {version = ">=0.0.7", optional = true, markers = "extra == \"all\""} pyyaml = {version = ">=5.3.1", optional = true, markers = "extra == \"all\""} -starlette = ">=0.37.2,<0.39.0" +starlette = ">=0.40.0,<0.42.0" typing-extensions = ">=4.8.0" ujson = {version = ">=4.0.1,<4.0.2 || >4.0.2,<4.1.0 || >4.1.0,<4.2.0 || >4.2.0,<4.3.0 || >4.3.0,<5.0.0 || >5.0.0,<5.1.0 || >5.1.0", optional = true, markers = "extra == \"all\""} uvicorn = {version = ">=0.12.0", extras = ["standard"], optional = true, markers = "extra == \"all\""} @@ -1275,99 +1271,114 @@ files = [ [[package]] name = "frozenlist" -version = "1.4.1" +version = "1.5.0" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false python-versions = ">=3.8" files = [ - {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"}, - {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"}, - {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"}, - {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"}, - {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"}, - {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"}, - {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"}, - {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"}, - {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"}, - {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"}, - {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"}, - {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"}, - {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"}, - {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"}, - {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, + {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, + {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, + {file = "frozenlist-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15538c0cbf0e4fa11d1e3a71f823524b0c46299aed6e10ebb4c2089abd8c3bec"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e79225373c317ff1e35f210dd5f1344ff31066ba8067c307ab60254cd3a78ad5"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9272fa73ca71266702c4c3e2d4a28553ea03418e591e377a03b8e3659d94fa76"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:498524025a5b8ba81695761d78c8dd7382ac0b052f34e66939c42df860b8ff17"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92b5278ed9d50fe610185ecd23c55d8b307d75ca18e94c0e7de328089ac5dcba"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f3c8c1dacd037df16e85227bac13cca58c30da836c6f936ba1df0c05d046d8d"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f2ac49a9bedb996086057b75bf93538240538c6d9b38e57c82d51f75a73409d2"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e66cc454f97053b79c2ab09c17fbe3c825ea6b4de20baf1be28919460dd7877f"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3ba5f9a0dfed20337d3e966dc359784c9f96503674c2faf015f7fe8e96798c"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6321899477db90bdeb9299ac3627a6a53c7399c8cd58d25da094007402b039ab"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:76e4753701248476e6286f2ef492af900ea67d9706a0155335a40ea21bf3b2f5"}, + {file = "frozenlist-1.5.0-cp310-cp310-win32.whl", hash = "sha256:977701c081c0241d0955c9586ffdd9ce44f7a7795df39b9151cd9a6fd0ce4cfb"}, + {file = "frozenlist-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:189f03b53e64144f90990d29a27ec4f7997d91ed3d01b51fa39d2dbe77540fd4"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0996c66760924da6e88922756d99b47512a71cfd45215f3570bf1e0b694c206a"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2fe128eb4edeabe11896cb6af88fca5346059f6c8d807e3b910069f39157869"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a8ea951bbb6cacd492e3948b8da8c502a3f814f5d20935aae74b5df2b19cf3d"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de537c11e4aa01d37db0d403b57bd6f0546e71a82347a97c6a9f0dcc532b3a45"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c2623347b933fcb9095841f1cc5d4ff0b278addd743e0e966cb3d460278840d"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cee6798eaf8b1416ef6909b06f7dc04b60755206bddc599f52232606e18179d3"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f5f9da7f5dbc00a604fe74aa02ae7c98bcede8a3b8b9666f9f86fc13993bc71a"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:90646abbc7a5d5c7c19461d2e3eeb76eb0b204919e6ece342feb6032c9325ae9"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bdac3c7d9b705d253b2ce370fde941836a5f8b3c5c2b8fd70940a3ea3af7f4f2"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03d33c2ddbc1816237a67f66336616416e2bbb6beb306e5f890f2eb22b959cdf"}, + {file = "frozenlist-1.5.0-cp311-cp311-win32.whl", hash = "sha256:237f6b23ee0f44066219dae14c70ae38a63f0440ce6750f868ee08775073f942"}, + {file = "frozenlist-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:0cc974cc93d32c42e7b0f6cf242a6bd941c57c61b618e78b6c0a96cb72788c1d"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:31115ba75889723431aa9a4e77d5f398f5cf976eea3bdf61749731f62d4a4a21"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7437601c4d89d070eac8323f121fcf25f88674627505334654fd027b091db09d"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feeb64bc9bcc6b45c6311c9e9b99406660a9c05ca8a5b30d14a78555088b0b3a"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:683173d371daad49cffb8309779e886e59c2f369430ad28fe715f66d08d4ab1a"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d57d8f702221405a9d9b40f9da8ac2e4a1a8b5285aac6100f3393675f0a85ee"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c72000fbcc35b129cb09956836c7d7abf78ab5416595e4857d1cae8d6251a6"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5d7f5a50342475962eb18b740f3beecc685a15b52c91f7d975257e13e029eca9"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:87f724d055eb4785d9be84e9ebf0f24e392ddfad00b3fe036e43f489fafc9039"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:6e9080bb2fb195a046e5177f10d9d82b8a204c0736a97a153c2466127de87784"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b93d7aaa36c966fa42efcaf716e6b3900438632a626fb09c049f6a2f09fc631"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:52ef692a4bc60a6dd57f507429636c2af8b6046db8b31b18dac02cbc8f507f7f"}, + {file = "frozenlist-1.5.0-cp312-cp312-win32.whl", hash = "sha256:29d94c256679247b33a3dc96cce0f93cbc69c23bf75ff715919332fdbb6a32b8"}, + {file = "frozenlist-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a1a048f9215c90973402e26c01d1cff8a209e1f1b53f72b95c13db61b00f953"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dd47a5181ce5fcb463b5d9e17ecfdb02b678cca31280639255ce9d0e5aa67af0"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1431d60b36d15cda188ea222033eec8e0eab488f39a272461f2e6d9e1a8e63c2"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6482a5851f5d72767fbd0e507e80737f9c8646ae7fd303def99bfe813f76cf7f"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44c49271a937625619e862baacbd037a7ef86dd1ee215afc298a417ff3270608"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12f78f98c2f1c2429d42e6a485f433722b0061d5c0b0139efa64f396efb5886b"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce3aa154c452d2467487765e3adc730a8c153af77ad84096bc19ce19a2400840"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b7dc0c4338e6b8b091e8faf0db3168a37101943e687f373dce00959583f7439"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:45e0896250900b5aa25180f9aec243e84e92ac84bd4a74d9ad4138ef3f5c97de"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:561eb1c9579d495fddb6da8959fd2a1fca2c6d060d4113f5844b433fc02f2641"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:df6e2f325bfee1f49f81aaac97d2aa757c7646534a06f8f577ce184afe2f0a9e"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:140228863501b44b809fb39ec56b5d4071f4d0aa6d216c19cbb08b8c5a7eadb9"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7707a25d6a77f5d27ea7dc7d1fc608aa0a478193823f88511ef5e6b8a48f9d03"}, + {file = "frozenlist-1.5.0-cp313-cp313-win32.whl", hash = "sha256:31a9ac2b38ab9b5a8933b693db4939764ad3f299fcaa931a3e605bc3460e693c"}, + {file = "frozenlist-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:dd94994fc91a6177bfaafd7d9fd951bc8689b0a98168aa26b5f543868548d3ca"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0da8bbec082bf6bf18345b180958775363588678f64998c2b7609e34719b10"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:73f2e31ea8dd7df61a359b731716018c2be196e5bb3b74ddba107f694fbd7604"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:828afae9f17e6de596825cf4228ff28fbdf6065974e5ac1410cecc22f699d2b3"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1577515d35ed5649d52ab4319db757bb881ce3b2b796d7283e6634d99ace307"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2150cc6305a2c2ab33299453e2968611dacb970d2283a14955923062c8d00b10"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a72b7a6e3cd2725eff67cd64c8f13335ee18fc3c7befc05aed043d24c7b9ccb9"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c16d2fa63e0800723139137d667e1056bee1a1cf7965153d2d104b62855e9b99"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:17dcc32fc7bda7ce5875435003220a457bcfa34ab7924a49a1c19f55b6ee185c"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:97160e245ea33d8609cd2b8fd997c850b56db147a304a262abc2b3be021a9171"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f1e6540b7fa044eee0bb5111ada694cf3dc15f2b0347ca125ee9ca984d5e9e6e"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:91d6c171862df0a6c61479d9724f22efb6109111017c87567cfeb7b5d1449fdf"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c1fac3e2ace2eb1052e9f7c7db480818371134410e1f5c55d65e8f3ac6d1407e"}, + {file = "frozenlist-1.5.0-cp38-cp38-win32.whl", hash = "sha256:b97f7b575ab4a8af9b7bc1d2ef7f29d3afee2226bd03ca3875c16451ad5a7723"}, + {file = "frozenlist-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:374ca2dabdccad8e2a76d40b1d037f5bd16824933bf7bcea3e59c891fd4a0923"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9bbcdfaf4af7ce002694a4e10a0159d5a8d20056a12b05b45cea944a4953f972"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1893f948bf6681733aaccf36c5232c231e3b5166d607c5fa77773611df6dc336"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2b5e23253bb709ef57a8e95e6ae48daa9ac5f265637529e4ce6b003a37b2621f"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f253985bb515ecd89629db13cb58d702035ecd8cfbca7d7a7e29a0e6d39af5f"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04a5c6babd5e8fb7d3c871dc8b321166b80e41b637c31a995ed844a6139942b6"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fe0f1c29ba24ba6ff6abf688cb0b7cf1efab6b6aa6adc55441773c252f7411"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:226d72559fa19babe2ccd920273e767c96a49b9d3d38badd7c91a0fdeda8ea08"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b731db116ab3aedec558573c1a5eec78822b32292fe4f2f0345b7f697745c2"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:366d8f93e3edfe5a918c874702f78faac300209a4d5bf38352b2c1bdc07a766d"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1b96af8c582b94d381a1c1f51ffaedeb77c821c690ea5f01da3d70a487dd0a9b"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c03eff4a41bd4e38415cbed054bbaff4a075b093e2394b6915dca34a40d1e38b"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:50cf5e7ee9b98f22bdecbabf3800ae78ddcc26e4a435515fc72d97903e8488e0"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1e76bfbc72353269c44e0bc2cfe171900fbf7f722ad74c9a7b638052afe6a00c"}, + {file = "frozenlist-1.5.0-cp39-cp39-win32.whl", hash = "sha256:666534d15ba8f0fda3f53969117383d5dc021266b3c1a42c9ec4855e4b58b9d3"}, + {file = "frozenlist-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:5c28f4b5dbef8a0d8aad0d4de24d1e9e981728628afaf4ea0792f5d0939372f0"}, + {file = "frozenlist-1.5.0-py3-none-any.whl", hash = "sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3"}, + {file = "frozenlist-1.5.0.tar.gz", hash = "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817"}, ] [[package]] name = "fsspec" -version = "2024.9.0" +version = "2024.10.0" description = "File-system specification" optional = false python-versions = ">=3.8" files = [ - {file = "fsspec-2024.9.0-py3-none-any.whl", hash = "sha256:a0947d552d8a6efa72cc2c730b12c41d043509156966cca4fb157b0f2a0c574b"}, - {file = "fsspec-2024.9.0.tar.gz", hash = "sha256:4b0afb90c2f21832df142f292649035d80b421f60a9e1c027802e5a0da2b04e8"}, + {file = "fsspec-2024.10.0-py3-none-any.whl", hash = "sha256:03b9a6785766a4de40368b88906366755e2819e758b83705c88cd7cb5fe81871"}, + {file = "fsspec-2024.10.0.tar.gz", hash = "sha256:eda2d8a4116d4f2429db8550f2457da57279247dd930bb12f821b58391359493"}, ] [package.extras] @@ -1417,13 +1428,13 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "google-api-core" -version = "2.20.0" +version = "2.23.0" description = "Google API client core library" optional = false python-versions = ">=3.7" files = [ - {file = "google_api_core-2.20.0-py3-none-any.whl", hash = "sha256:ef0591ef03c30bb83f79b3d0575c3f31219001fc9c5cf37024d08310aeffed8a"}, - {file = "google_api_core-2.20.0.tar.gz", hash = "sha256:f74dff1889ba291a4b76c5079df0711810e2d9da81abfdc99957bc961c1eb28f"}, + {file = "google_api_core-2.23.0-py3-none-any.whl", hash = "sha256:c20100d4c4c41070cf365f1d8ddf5365915291b5eb11b83829fbd1c999b5122f"}, + {file = "google_api_core-2.23.0.tar.gz", hash = "sha256:2ceb087315e6af43f256704b871d99326b1f12a9d6ce99beaedec99ba26a0ace"}, ] [package.dependencies] @@ -1442,19 +1453,20 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4 requests = ">=2.18.0,<3.0.0.dev0" [package.extras] +async-rest = ["google-auth[aiohttp] (>=2.35.0,<3.0.dev0)"] grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0)"] grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-auth" -version = "2.35.0" +version = "2.36.0" description = "Google Authentication Library" optional = false python-versions = ">=3.7" files = [ - {file = "google_auth-2.35.0-py2.py3-none-any.whl", hash = "sha256:25df55f327ef021de8be50bad0dfd4a916ad0de96da86cd05661c9297723ad3f"}, - {file = "google_auth-2.35.0.tar.gz", hash = "sha256:f4c64ed4e01e8e8b646ef34c018f8bf3338df0c8e37d8b3bba40e7f574a3278a"}, + {file = "google_auth-2.36.0-py2.py3-none-any.whl", hash = "sha256:51a15d47028b66fd36e5c64a82d2d57480075bccc7da37cde257fc94177a61fb"}, + {file = "google_auth-2.36.0.tar.gz", hash = "sha256:545e9618f2df0bcbb7dcbc45a546485b1212624716975a1ea5ae8149ce769ab1"}, ] [package.dependencies] @@ -1471,13 +1483,13 @@ requests = ["requests (>=2.20.0,<3.0.0.dev0)"] [[package]] name = "google-cloud-aiplatform" -version = "1.67.1" +version = "1.73.0" description = "Vertex AI API client library" optional = false python-versions = ">=3.8" files = [ - {file = "google-cloud-aiplatform-1.67.1.tar.gz", hash = "sha256:701a19061c8c670baa93464ca0b8a1a8720494f802187cef06bc9fcf952db315"}, - {file = "google_cloud_aiplatform-1.67.1-py2.py3-none-any.whl", hash = "sha256:2ff0e1794839fcf74d644f3f54ff2de5d8099b3e388edecc48f6d620c1f3582c"}, + {file = "google_cloud_aiplatform-1.73.0-py2.py3-none-any.whl", hash = "sha256:6f9aebc1cb2277048093f17214c5f4ec9129fa347b8b22d784f780b12b8865a9"}, + {file = "google_cloud_aiplatform-1.73.0.tar.gz", hash = "sha256:687d4d6dd26439db42d38b835ea0da7ebb75c20ca8e17666669536b253637e74"}, ] [package.dependencies] @@ -1495,53 +1507,53 @@ shapely = "<3.0.0dev" [package.extras] autologging = ["mlflow (>=1.27.0,<=2.16.0)"] -cloud-profiler = ["tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "werkzeug (>=2.0.0,<2.1.0dev)"] +cloud-profiler = ["tensorboard-plugin-profile (>=2.4.0,<2.18.0)", "tensorflow (>=2.4.0,<3.0.0dev)", "werkzeug (>=2.0.0,<2.1.0dev)"] datasets = ["pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)"] endpoint = ["requests (>=2.28.1)"] -evaluation = ["pandas (>=1.0.0,<2.2.0)", "tqdm (>=4.23.0)"] -full = ["docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<=0.114.0)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-vizier (>=0.1.6)", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.16.0)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || >=2.33.dev0,<=2.33.0)", "ray[default] (>=2.5,<=2.33.0)", "requests (>=2.28.1)", "setuptools (<70.0.0)", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "tqdm (>=4.23.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)"] -langchain = ["langchain (>=0.1.16,<0.3)", "langchain-core (<0.3)", "langchain-google-vertexai (<2)", "openinference-instrumentation-langchain (>=0.1.19,<0.2)", "orjson (<=3.10.6)", "tenacity (<=8.3)"] -langchain-testing = ["absl-py", "cloudpickle (>=3.0,<4.0)", "google-cloud-trace (<2)", "langchain (>=0.1.16,<0.3)", "langchain-core (<0.3)", "langchain-google-vertexai (<2)", "openinference-instrumentation-langchain (>=0.1.19,<0.2)", "opentelemetry-exporter-gcp-trace (<2)", "opentelemetry-sdk (<2)", "orjson (<=3.10.6)", "pydantic (>=2.6.3,<3)", "pytest-xdist", "tenacity (<=8.3)"] +evaluation = ["pandas (>=1.0.0)", "tqdm (>=4.23.0)"] +full = ["docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<=0.114.0)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-vizier (>=0.1.6)", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.16.0)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || >=2.33.dev0,<=2.33.0)", "ray[default] (>=2.5,<=2.33.0)", "requests (>=2.28.1)", "setuptools (<70.0.0)", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<2.18.0)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "tqdm (>=4.23.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)"] +langchain = ["langchain (>=0.1.16,<0.4)", "langchain-core (<0.4)", "langchain-google-vertexai (<3)", "openinference-instrumentation-langchain (>=0.1.19,<0.2)"] +langchain-testing = ["absl-py", "cloudpickle (>=3.0,<4.0)", "google-cloud-trace (<2)", "langchain (>=0.1.16,<0.4)", "langchain-core (<0.4)", "langchain-google-vertexai (<3)", "openinference-instrumentation-langchain (>=0.1.19,<0.2)", "opentelemetry-exporter-gcp-trace (<2)", "opentelemetry-sdk (<2)", "pydantic (>=2.6.3,<3)", "pytest-xdist"] lit = ["explainable-ai-sdk (>=1.0.0)", "lit-nlp (==0.4.0)", "pandas (>=1.0.0)", "tensorflow (>=2.3.0,<3.0.0dev)"] metadata = ["numpy (>=1.15.0)", "pandas (>=1.0.0)"] pipelines = ["pyyaml (>=5.3.1,<7)"] prediction = ["docker (>=5.0.3)", "fastapi (>=0.71.0,<=0.114.0)", "httpx (>=0.23.0,<0.25.0)", "starlette (>=0.17.1)", "uvicorn[standard] (>=0.16.0)"] private-endpoints = ["requests (>=2.28.1)", "urllib3 (>=1.21.1,<1.27)"] -ray = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=6.0.1)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || >=2.33.dev0,<=2.33.0)", "ray[default] (>=2.5,<=2.33.0)", "setuptools (<70.0.0)"] -ray-testing = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=6.0.1)", "pytest-xdist", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || >=2.33.dev0,<=2.33.0)", "ray[default] (>=2.5,<=2.33.0)", "ray[train] (==2.9.3)", "scikit-learn", "setuptools (<70.0.0)", "tensorflow", "torch (>=2.0.0,<2.1.0)", "xgboost", "xgboost-ray"] +ray = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0)", "pyarrow (>=6.0.1)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || >=2.33.dev0,<=2.33.0)", "ray[default] (>=2.5,<=2.33.0)", "setuptools (<70.0.0)"] +ray-testing = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0)", "pyarrow (>=6.0.1)", "pytest-xdist", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || >=2.33.dev0,<=2.33.0)", "ray[default] (>=2.5,<=2.33.0)", "ray[train]", "scikit-learn", "setuptools (<70.0.0)", "tensorflow", "torch (>=2.0.0,<2.1.0)", "xgboost", "xgboost-ray"] reasoningengine = ["cloudpickle (>=3.0,<4.0)", "google-cloud-trace (<2)", "opentelemetry-exporter-gcp-trace (<2)", "opentelemetry-sdk (<2)", "pydantic (>=2.6.3,<3)"] -tensorboard = ["tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "werkzeug (>=2.0.0,<2.1.0dev)"] -testing = ["bigframes", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<=0.114.0)", "google-api-core (>=2.11,<3.0.0)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-vizier (>=0.1.6)", "grpcio-testing", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "ipython", "kfp (>=2.6.0,<3.0.0)", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.16.0)", "nltk", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pytest-asyncio", "pytest-xdist", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || >=2.33.dev0,<=2.33.0)", "ray[default] (>=2.5,<=2.33.0)", "requests (>=2.28.1)", "requests-toolbelt (<1.0.0)", "scikit-learn", "sentencepiece (>=0.2.0)", "setuptools (<70.0.0)", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (==2.13.0)", "tensorflow (==2.16.1)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "torch (>=2.0.0,<2.1.0)", "torch (>=2.2.0)", "tqdm (>=4.23.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)", "xgboost"] +tensorboard = ["tensorboard-plugin-profile (>=2.4.0,<2.18.0)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "werkzeug (>=2.0.0,<2.1.0dev)"] +testing = ["aiohttp", "bigframes", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<=0.114.0)", "google-api-core (>=2.11,<3.0.0)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-vizier (>=0.1.6)", "grpcio-testing", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "ipython", "kfp (>=2.6.0,<3.0.0)", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.16.0)", "nltk", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pytest-asyncio", "pytest-xdist", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<2.10.dev0 || >=2.33.dev0,<=2.33.0)", "ray[default] (>=2.5,<=2.33.0)", "requests (>=2.28.1)", "requests-toolbelt (<1.0.0)", "scikit-learn", "sentencepiece (>=0.2.0)", "setuptools (<70.0.0)", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<2.18.0)", "tensorflow (==2.13.0)", "tensorflow (==2.16.1)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "torch (>=2.0.0,<2.1.0)", "torch (>=2.2.0)", "tqdm (>=4.23.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)", "xgboost"] tokenization = ["sentencepiece (>=0.2.0)"] vizier = ["google-vizier (>=0.1.6)"] xai = ["tensorflow (>=2.3.0,<3.0.0dev)"] [[package]] name = "google-cloud-bigquery" -version = "3.25.0" +version = "3.27.0" description = "Google BigQuery API client library" optional = false python-versions = ">=3.7" files = [ - {file = "google-cloud-bigquery-3.25.0.tar.gz", hash = "sha256:5b2aff3205a854481117436836ae1403f11f2594e6810a98886afd57eda28509"}, - {file = "google_cloud_bigquery-3.25.0-py2.py3-none-any.whl", hash = "sha256:7f0c371bc74d2a7fb74dacbc00ac0f90c8c2bec2289b51dd6685a275873b1ce9"}, + {file = "google_cloud_bigquery-3.27.0-py2.py3-none-any.whl", hash = "sha256:b53b0431e5ba362976a4cd8acce72194b4116cdf8115030c7b339b884603fcc3"}, + {file = "google_cloud_bigquery-3.27.0.tar.gz", hash = "sha256:379c524054d7b090fa56d0c22662cc6e6458a6229b6754c0e7177e3a73421d2c"}, ] [package.dependencies] -google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]} +google-api-core = {version = ">=2.11.1,<3.0.0dev", extras = ["grpc"]} google-auth = ">=2.14.1,<3.0.0dev" -google-cloud-core = ">=1.6.0,<3.0.0dev" -google-resumable-media = ">=0.6.0,<3.0dev" +google-cloud-core = ">=2.4.1,<3.0.0dev" +google-resumable-media = ">=2.0.0,<3.0dev" packaging = ">=20.0.0" -python-dateutil = ">=2.7.2,<3.0dev" +python-dateutil = ">=2.7.3,<3.0dev" requests = ">=2.21.0,<3.0.0dev" [package.extras] -all = ["Shapely (>=1.8.4,<3.0.0dev)", "db-dtypes (>=0.3.0,<2.0.0dev)", "geopandas (>=0.9.0,<1.0dev)", "google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "importlib-metadata (>=1.0.0)", "ipykernel (>=6.0.0)", "ipython (>=7.23.1,!=8.1.0)", "ipywidgets (>=7.7.0)", "opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)", "pandas (>=1.1.0)", "proto-plus (>=1.15.0,<2.0.0dev)", "protobuf (>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev)", "pyarrow (>=3.0.0)", "tqdm (>=4.7.4,<5.0.0dev)"] -bigquery-v2 = ["proto-plus (>=1.15.0,<2.0.0dev)", "protobuf (>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev)"] +all = ["Shapely (>=1.8.4,<3.0.0dev)", "bigquery-magics (>=0.1.0)", "db-dtypes (>=0.3.0,<2.0.0dev)", "geopandas (>=0.9.0,<1.0dev)", "google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "importlib-metadata (>=1.0.0)", "ipykernel (>=6.0.0)", "ipywidgets (>=7.7.0)", "opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)", "pandas (>=1.1.0)", "proto-plus (>=1.22.3,<2.0.0dev)", "protobuf (>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0dev)", "pyarrow (>=3.0.0)", "tqdm (>=4.7.4,<5.0.0dev)"] +bigquery-v2 = ["proto-plus (>=1.22.3,<2.0.0dev)", "protobuf (>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0dev)"] bqstorage = ["google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "pyarrow (>=3.0.0)"] geopandas = ["Shapely (>=1.8.4,<3.0.0dev)", "geopandas (>=0.9.0,<1.0dev)"] -ipython = ["ipykernel (>=6.0.0)", "ipython (>=7.23.1,!=8.1.0)"] +ipython = ["bigquery-magics (>=0.1.0)"] ipywidgets = ["ipykernel (>=6.0.0)", "ipywidgets (>=7.7.0)"] opentelemetry = ["opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)"] pandas = ["db-dtypes (>=0.3.0,<2.0.0dev)", "importlib-metadata (>=1.0.0)", "pandas (>=1.1.0)", "pyarrow (>=3.0.0)"] @@ -1567,13 +1579,13 @@ grpc = ["grpcio (>=1.38.0,<2.0dev)", "grpcio-status (>=1.38.0,<2.0.dev0)"] [[package]] name = "google-cloud-resource-manager" -version = "1.12.5" +version = "1.13.1" description = "Google Cloud Resource Manager API client library" optional = false python-versions = ">=3.7" files = [ - {file = "google_cloud_resource_manager-1.12.5-py2.py3-none-any.whl", hash = "sha256:2708a718b45c79464b7b21559c701b5c92e6b0b1ab2146d0a256277a623dc175"}, - {file = "google_cloud_resource_manager-1.12.5.tar.gz", hash = "sha256:b7af4254401ed4efa3aba3a929cb3ddb803fa6baf91a78485e45583597de5891"}, + {file = "google_cloud_resource_manager-1.13.1-py2.py3-none-any.whl", hash = "sha256:abdc7d443ab6c0763b8ed49ab59203e223f14c683df69e3748d5eb2237475f5f"}, + {file = "google_cloud_resource_manager-1.13.1.tar.gz", hash = "sha256:bee9f2fb1d856731182b7cc05980d216aae848947ccdadf2848a2c64ccd6bbea"}, ] [package.dependencies] @@ -1665,13 +1677,13 @@ requests = ["requests (>=2.18.0,<3.0.0dev)"] [[package]] name = "googleapis-common-protos" -version = "1.65.0" +version = "1.66.0" description = "Common protobufs used in Google APIs" optional = false python-versions = ">=3.7" files = [ - {file = "googleapis_common_protos-1.65.0-py2.py3-none-any.whl", hash = "sha256:2972e6c496f435b92590fd54045060867f3fe9be2c82ab148fc8885035479a63"}, - {file = "googleapis_common_protos-1.65.0.tar.gz", hash = "sha256:334a29d07cddc3aa01dee4988f9afd9b2916ee2ff49d6b757155dc0d197852c0"}, + {file = "googleapis_common_protos-1.66.0-py2.py3-none-any.whl", hash = "sha256:d7abcd75fabb2e0ec9f74466401f6c119a0b498e27370e9be4c94cb7e382b8ed"}, + {file = "googleapis_common_protos-1.66.0.tar.gz", hash = "sha256:c3e7b33d15fdca5374cc0a7346dd92ffa847425cc4ea941d970f13680052ec8c"}, ] [package.dependencies] @@ -1683,13 +1695,13 @@ grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] [[package]] name = "groq" -version = "0.11.0" +version = "0.12.0" description = "The official Python library for the groq API" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "groq-0.11.0-py3-none-any.whl", hash = "sha256:e328531c979542e563668c62260aec13b43a6ee0ca9e2fb22dff1d26f8c8ce54"}, - {file = "groq-0.11.0.tar.gz", hash = "sha256:dbb9aefedf388ddd4801ec7bf3eba7f5edb67948fec0cd2829d97244059f42a7"}, + {file = "groq-0.12.0-py3-none-any.whl", hash = "sha256:e8aa1529f82a01b2d15394b7ea242af9ee9387f65bdd1b91ce9a10f5a911dac1"}, + {file = "groq-0.12.0.tar.gz", hash = "sha256:569229e2dadfc428b0df3d2987407691a4e3bc035b5849a65ef4909514a4605e"}, ] [package.dependencies] @@ -1718,77 +1730,86 @@ protobuf = ">=3.20.2,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4 [[package]] name = "grpcio" -version = "1.66.1" +version = "1.68.0" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.8" files = [ - {file = "grpcio-1.66.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:4877ba180591acdf127afe21ec1c7ff8a5ecf0fe2600f0d3c50e8c4a1cbc6492"}, - {file = "grpcio-1.66.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:3750c5a00bd644c75f4507f77a804d0189d97a107eb1481945a0cf3af3e7a5ac"}, - {file = "grpcio-1.66.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:a013c5fbb12bfb5f927444b477a26f1080755a931d5d362e6a9a720ca7dbae60"}, - {file = "grpcio-1.66.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1b24c23d51a1e8790b25514157d43f0a4dce1ac12b3f0b8e9f66a5e2c4c132f"}, - {file = "grpcio-1.66.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7ffb8ea674d68de4cac6f57d2498fef477cef582f1fa849e9f844863af50083"}, - {file = "grpcio-1.66.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:307b1d538140f19ccbd3aed7a93d8f71103c5d525f3c96f8616111614b14bf2a"}, - {file = "grpcio-1.66.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1c17ebcec157cfb8dd445890a03e20caf6209a5bd4ac5b040ae9dbc59eef091d"}, - {file = "grpcio-1.66.1-cp310-cp310-win32.whl", hash = "sha256:ef82d361ed5849d34cf09105d00b94b6728d289d6b9235513cb2fcc79f7c432c"}, - {file = "grpcio-1.66.1-cp310-cp310-win_amd64.whl", hash = "sha256:292a846b92cdcd40ecca46e694997dd6b9be6c4c01a94a0dfb3fcb75d20da858"}, - {file = "grpcio-1.66.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:c30aeceeaff11cd5ddbc348f37c58bcb96da8d5aa93fed78ab329de5f37a0d7a"}, - {file = "grpcio-1.66.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8a1e224ce6f740dbb6b24c58f885422deebd7eb724aff0671a847f8951857c26"}, - {file = "grpcio-1.66.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:a66fe4dc35d2330c185cfbb42959f57ad36f257e0cc4557d11d9f0a3f14311df"}, - {file = "grpcio-1.66.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3ba04659e4fce609de2658fe4dbf7d6ed21987a94460f5f92df7579fd5d0e22"}, - {file = "grpcio-1.66.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4573608e23f7e091acfbe3e84ac2045680b69751d8d67685ffa193a4429fedb1"}, - {file = "grpcio-1.66.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7e06aa1f764ec8265b19d8f00140b8c4b6ca179a6dc67aa9413867c47e1fb04e"}, - {file = "grpcio-1.66.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3885f037eb11f1cacc41f207b705f38a44b69478086f40608959bf5ad85826dd"}, - {file = "grpcio-1.66.1-cp311-cp311-win32.whl", hash = "sha256:97ae7edd3f3f91480e48ede5d3e7d431ad6005bfdbd65c1b56913799ec79e791"}, - {file = "grpcio-1.66.1-cp311-cp311-win_amd64.whl", hash = "sha256:cfd349de4158d797db2bd82d2020554a121674e98fbe6b15328456b3bf2495bb"}, - {file = "grpcio-1.66.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:a92c4f58c01c77205df6ff999faa008540475c39b835277fb8883b11cada127a"}, - {file = "grpcio-1.66.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fdb14bad0835914f325349ed34a51940bc2ad965142eb3090081593c6e347be9"}, - {file = "grpcio-1.66.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:f03a5884c56256e08fd9e262e11b5cfacf1af96e2ce78dc095d2c41ccae2c80d"}, - {file = "grpcio-1.66.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ca2559692d8e7e245d456877a85ee41525f3ed425aa97eb7a70fc9a79df91a0"}, - {file = "grpcio-1.66.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84ca1be089fb4446490dd1135828bd42a7c7f8421e74fa581611f7afdf7ab761"}, - {file = "grpcio-1.66.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:d639c939ad7c440c7b2819a28d559179a4508783f7e5b991166f8d7a34b52815"}, - {file = "grpcio-1.66.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b9feb4e5ec8dc2d15709f4d5fc367794d69277f5d680baf1910fc9915c633524"}, - {file = "grpcio-1.66.1-cp312-cp312-win32.whl", hash = "sha256:7101db1bd4cd9b880294dec41a93fcdce465bdbb602cd8dc5bd2d6362b618759"}, - {file = "grpcio-1.66.1-cp312-cp312-win_amd64.whl", hash = "sha256:b0aa03d240b5539648d996cc60438f128c7f46050989e35b25f5c18286c86734"}, - {file = "grpcio-1.66.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:ecfe735e7a59e5a98208447293ff8580e9db1e890e232b8b292dc8bd15afc0d2"}, - {file = "grpcio-1.66.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:4825a3aa5648010842e1c9d35a082187746aa0cdbf1b7a2a930595a94fb10fce"}, - {file = "grpcio-1.66.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:f517fd7259fe823ef3bd21e508b653d5492e706e9f0ef82c16ce3347a8a5620c"}, - {file = "grpcio-1.66.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1fe60d0772831d96d263b53d83fb9a3d050a94b0e94b6d004a5ad111faa5b5b"}, - {file = "grpcio-1.66.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31a049daa428f928f21090403e5d18ea02670e3d5d172581670be006100db9ef"}, - {file = "grpcio-1.66.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f914386e52cbdeb5d2a7ce3bf1fdfacbe9d818dd81b6099a05b741aaf3848bb"}, - {file = "grpcio-1.66.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bff2096bdba686019fb32d2dde45b95981f0d1490e054400f70fc9a8af34b49d"}, - {file = "grpcio-1.66.1-cp38-cp38-win32.whl", hash = "sha256:aa8ba945c96e73de29d25331b26f3e416e0c0f621e984a3ebdb2d0d0b596a3b3"}, - {file = "grpcio-1.66.1-cp38-cp38-win_amd64.whl", hash = "sha256:161d5c535c2bdf61b95080e7f0f017a1dfcb812bf54093e71e5562b16225b4ce"}, - {file = "grpcio-1.66.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:d0cd7050397b3609ea51727b1811e663ffda8bda39c6a5bb69525ef12414b503"}, - {file = "grpcio-1.66.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0e6c9b42ded5d02b6b1fea3a25f036a2236eeb75d0579bfd43c0018c88bf0a3e"}, - {file = "grpcio-1.66.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:c9f80f9fad93a8cf71c7f161778ba47fd730d13a343a46258065c4deb4b550c0"}, - {file = "grpcio-1.66.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dd67ed9da78e5121efc5c510f0122a972216808d6de70953a740560c572eb44"}, - {file = "grpcio-1.66.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48b0d92d45ce3be2084b92fb5bae2f64c208fea8ceed7fccf6a7b524d3c4942e"}, - {file = "grpcio-1.66.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4d813316d1a752be6f5c4360c49f55b06d4fe212d7df03253dfdae90c8a402bb"}, - {file = "grpcio-1.66.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9c9bebc6627873ec27a70fc800f6083a13c70b23a5564788754b9ee52c5aef6c"}, - {file = "grpcio-1.66.1-cp39-cp39-win32.whl", hash = "sha256:30a1c2cf9390c894c90bbc70147f2372130ad189cffef161f0432d0157973f45"}, - {file = "grpcio-1.66.1-cp39-cp39-win_amd64.whl", hash = "sha256:17663598aadbedc3cacd7bbde432f541c8e07d2496564e22b214b22c7523dac8"}, - {file = "grpcio-1.66.1.tar.gz", hash = "sha256:35334f9c9745add3e357e3372756fd32d925bd52c41da97f4dfdafbde0bf0ee2"}, + {file = "grpcio-1.68.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:619b5d0f29f4f5351440e9343224c3e19912c21aeda44e0c49d0d147a8d01544"}, + {file = "grpcio-1.68.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:a59f5822f9459bed098ffbceb2713abbf7c6fd13f2b9243461da5c338d0cd6c3"}, + {file = "grpcio-1.68.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:c03d89df516128febc5a7e760d675b478ba25802447624edf7aa13b1e7b11e2a"}, + {file = "grpcio-1.68.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44bcbebb24363d587472089b89e2ea0ab2e2b4df0e4856ba4c0b087c82412121"}, + {file = "grpcio-1.68.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79f81b7fbfb136247b70465bd836fa1733043fdee539cd6031cb499e9608a110"}, + {file = "grpcio-1.68.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:88fb2925789cfe6daa20900260ef0a1d0a61283dfb2d2fffe6194396a354c618"}, + {file = "grpcio-1.68.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:99f06232b5c9138593ae6f2e355054318717d32a9c09cdc5a2885540835067a1"}, + {file = "grpcio-1.68.0-cp310-cp310-win32.whl", hash = "sha256:a6213d2f7a22c3c30a479fb5e249b6b7e648e17f364598ff64d08a5136fe488b"}, + {file = "grpcio-1.68.0-cp310-cp310-win_amd64.whl", hash = "sha256:15327ab81131ef9b94cb9f45b5bd98803a179c7c61205c8c0ac9aff9d6c4e82a"}, + {file = "grpcio-1.68.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:3b2b559beb2d433129441783e5f42e3be40a9e1a89ec906efabf26591c5cd415"}, + {file = "grpcio-1.68.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e46541de8425a4d6829ac6c5d9b16c03c292105fe9ebf78cb1c31e8d242f9155"}, + {file = "grpcio-1.68.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:c1245651f3c9ea92a2db4f95d37b7597db6b246d5892bca6ee8c0e90d76fb73c"}, + {file = "grpcio-1.68.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f1931c7aa85be0fa6cea6af388e576f3bf6baee9e5d481c586980c774debcb4"}, + {file = "grpcio-1.68.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b0ff09c81e3aded7a183bc6473639b46b6caa9c1901d6f5e2cba24b95e59e30"}, + {file = "grpcio-1.68.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8c73f9fbbaee1a132487e31585aa83987ddf626426d703ebcb9a528cf231c9b1"}, + {file = "grpcio-1.68.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6b2f98165ea2790ea159393a2246b56f580d24d7da0d0342c18a085299c40a75"}, + {file = "grpcio-1.68.0-cp311-cp311-win32.whl", hash = "sha256:e1e7ed311afb351ff0d0e583a66fcb39675be112d61e7cfd6c8269884a98afbc"}, + {file = "grpcio-1.68.0-cp311-cp311-win_amd64.whl", hash = "sha256:e0d2f68eaa0a755edd9a47d40e50dba6df2bceda66960dee1218da81a2834d27"}, + {file = "grpcio-1.68.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:8af6137cc4ae8e421690d276e7627cfc726d4293f6607acf9ea7260bd8fc3d7d"}, + {file = "grpcio-1.68.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4028b8e9a3bff6f377698587d642e24bd221810c06579a18420a17688e421af7"}, + {file = "grpcio-1.68.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:f60fa2adf281fd73ae3a50677572521edca34ba373a45b457b5ebe87c2d01e1d"}, + {file = "grpcio-1.68.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e18589e747c1e70b60fab6767ff99b2d0c359ea1db8a2cb524477f93cdbedf5b"}, + {file = "grpcio-1.68.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0d30f3fee9372796f54d3100b31ee70972eaadcc87314be369360248a3dcffe"}, + {file = "grpcio-1.68.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7e0a3e72c0e9a1acab77bef14a73a416630b7fd2cbd893c0a873edc47c42c8cd"}, + {file = "grpcio-1.68.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a831dcc343440969aaa812004685ed322cdb526cd197112d0db303b0da1e8659"}, + {file = "grpcio-1.68.0-cp312-cp312-win32.whl", hash = "sha256:5a180328e92b9a0050958ced34dddcb86fec5a8b332f5a229e353dafc16cd332"}, + {file = "grpcio-1.68.0-cp312-cp312-win_amd64.whl", hash = "sha256:2bddd04a790b69f7a7385f6a112f46ea0b34c4746f361ebafe9ca0be567c78e9"}, + {file = "grpcio-1.68.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:fc05759ffbd7875e0ff2bd877be1438dfe97c9312bbc558c8284a9afa1d0f40e"}, + {file = "grpcio-1.68.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:15fa1fe25d365a13bc6d52fcac0e3ee1f9baebdde2c9b3b2425f8a4979fccea1"}, + {file = "grpcio-1.68.0-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:32a9cb4686eb2e89d97022ecb9e1606d132f85c444354c17a7dbde4a455e4a3b"}, + {file = "grpcio-1.68.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dba037ff8d284c8e7ea9a510c8ae0f5b016004f13c3648f72411c464b67ff2fb"}, + {file = "grpcio-1.68.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0efbbd849867e0e569af09e165363ade75cf84f5229b2698d53cf22c7a4f9e21"}, + {file = "grpcio-1.68.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:4e300e6978df0b65cc2d100c54e097c10dfc7018b9bd890bbbf08022d47f766d"}, + {file = "grpcio-1.68.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:6f9c7ad1a23e1047f827385f4713b5b8c6c7d325705be1dd3e31fb00dcb2f665"}, + {file = "grpcio-1.68.0-cp313-cp313-win32.whl", hash = "sha256:3ac7f10850fd0487fcce169c3c55509101c3bde2a3b454869639df2176b60a03"}, + {file = "grpcio-1.68.0-cp313-cp313-win_amd64.whl", hash = "sha256:afbf45a62ba85a720491bfe9b2642f8761ff348006f5ef67e4622621f116b04a"}, + {file = "grpcio-1.68.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:f8f695d9576ce836eab27ba7401c60acaf9ef6cf2f70dfe5462055ba3df02cc3"}, + {file = "grpcio-1.68.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9fe1b141cda52f2ca73e17d2d3c6a9f3f3a0c255c216b50ce616e9dca7e3441d"}, + {file = "grpcio-1.68.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:4df81d78fd1646bf94ced4fb4cd0a7fe2e91608089c522ef17bc7db26e64effd"}, + {file = "grpcio-1.68.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46a2d74d4dd8993151c6cd585594c082abe74112c8e4175ddda4106f2ceb022f"}, + {file = "grpcio-1.68.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a17278d977746472698460c63abf333e1d806bd41f2224f90dbe9460101c9796"}, + {file = "grpcio-1.68.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:15377bce516b1c861c35e18eaa1c280692bf563264836cece693c0f169b48829"}, + {file = "grpcio-1.68.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cc5f0a4f5904b8c25729a0498886b797feb817d1fd3812554ffa39551112c161"}, + {file = "grpcio-1.68.0-cp38-cp38-win32.whl", hash = "sha256:def1a60a111d24376e4b753db39705adbe9483ef4ca4761f825639d884d5da78"}, + {file = "grpcio-1.68.0-cp38-cp38-win_amd64.whl", hash = "sha256:55d3b52fd41ec5772a953612db4e70ae741a6d6ed640c4c89a64f017a1ac02b5"}, + {file = "grpcio-1.68.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:0d230852ba97654453d290e98d6aa61cb48fa5fafb474fb4c4298d8721809354"}, + {file = "grpcio-1.68.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:50992f214264e207e07222703c17d9cfdcc2c46ed5a1ea86843d440148ebbe10"}, + {file = "grpcio-1.68.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:14331e5c27ed3545360464a139ed279aa09db088f6e9502e95ad4bfa852bb116"}, + {file = "grpcio-1.68.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f84890b205692ea813653ece4ac9afa2139eae136e419231b0eec7c39fdbe4c2"}, + {file = "grpcio-1.68.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0cf343c6f4f6aa44863e13ec9ddfe299e0be68f87d68e777328bff785897b05"}, + {file = "grpcio-1.68.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fd2c2d47969daa0e27eadaf15c13b5e92605c5e5953d23c06d0b5239a2f176d3"}, + {file = "grpcio-1.68.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:18668e36e7f4045820f069997834e94e8275910b1f03e078a6020bd464cb2363"}, + {file = "grpcio-1.68.0-cp39-cp39-win32.whl", hash = "sha256:2af76ab7c427aaa26aa9187c3e3c42f38d3771f91a20f99657d992afada2294a"}, + {file = "grpcio-1.68.0-cp39-cp39-win_amd64.whl", hash = "sha256:e694b5928b7b33ca2d3b4d5f9bf8b5888906f181daff6b406f4938f3a997a490"}, + {file = "grpcio-1.68.0.tar.gz", hash = "sha256:7e7483d39b4a4fddb9906671e9ea21aaad4f031cdfc349fec76bdfa1e404543a"}, ] [package.extras] -protobuf = ["grpcio-tools (>=1.66.1)"] +protobuf = ["grpcio-tools (>=1.68.0)"] [[package]] name = "grpcio-status" -version = "1.62.3" +version = "1.68.0" description = "Status proto mapping for gRPC" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "grpcio-status-1.62.3.tar.gz", hash = "sha256:289bdd7b2459794a12cf95dc0cb727bd4a1742c37bd823f760236c937e53a485"}, - {file = "grpcio_status-1.62.3-py3-none-any.whl", hash = "sha256:f9049b762ba8de6b1086789d8315846e094edac2c50beaf462338b301a8fd4b8"}, + {file = "grpcio_status-1.68.0-py3-none-any.whl", hash = "sha256:0a71b15d989f02df803b4ba85c5bf1f43aeaa58ac021e5f9974b8cadc41f784d"}, + {file = "grpcio_status-1.68.0.tar.gz", hash = "sha256:8369823de22ab6a2cddb3804669c149ae7a71819e127c2dca7c2322028d52bea"}, ] [package.dependencies] googleapis-common-protos = ">=1.5.5" -grpcio = ">=1.62.3" -protobuf = ">=4.21.6" +grpcio = ">=1.68.0" +protobuf = ">=5.26.1,<6.0dev" [[package]] name = "h11" @@ -1803,13 +1824,13 @@ files = [ [[package]] name = "httpcore" -version = "1.0.5" +version = "1.0.7" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, - {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, + {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, + {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, ] [package.dependencies] @@ -1820,55 +1841,62 @@ h11 = ">=0.13,<0.15" asyncio = ["anyio (>=4.0,<5.0)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<0.26.0)"] +trio = ["trio (>=0.22.0,<1.0)"] [[package]] name = "httptools" -version = "0.6.1" +version = "0.6.4" description = "A collection of framework independent HTTP protocol utils." optional = false python-versions = ">=3.8.0" files = [ - {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f"}, - {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563"}, - {file = "httptools-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:639dc4f381a870c9ec860ce5c45921db50205a37cc3334e756269736ff0aac58"}, - {file = "httptools-0.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e57997ac7fb7ee43140cc03664de5f268813a481dff6245e0075925adc6aa185"}, - {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0ac5a0ae3d9f4fe004318d64b8a854edd85ab76cffbf7ef5e32920faef62f142"}, - {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3f30d3ce413088a98b9db71c60a6ada2001a08945cb42dd65a9a9fe228627658"}, - {file = "httptools-0.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:1ed99a373e327f0107cb513b61820102ee4f3675656a37a50083eda05dc9541b"}, - {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7a7ea483c1a4485c71cb5f38be9db078f8b0e8b4c4dc0210f531cdd2ddac1ef1"}, - {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85ed077c995e942b6f1b07583e4eb0a8d324d418954fc6af913d36db7c05a5a0"}, - {file = "httptools-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b0bb634338334385351a1600a73e558ce619af390c2b38386206ac6a27fecfc"}, - {file = "httptools-0.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d9ceb2c957320def533671fc9c715a80c47025139c8d1f3797477decbc6edd2"}, - {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4f0f8271c0a4db459f9dc807acd0eadd4839934a4b9b892f6f160e94da309837"}, - {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6a4f5ccead6d18ec072ac0b84420e95d27c1cdf5c9f1bc8fbd8daf86bd94f43d"}, - {file = "httptools-0.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:5cceac09f164bcba55c0500a18fe3c47df29b62353198e4f37bbcc5d591172c3"}, - {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:75c8022dca7935cba14741a42744eee13ba05db00b27a4b940f0d646bd4d56d0"}, - {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:48ed8129cd9a0d62cf4d1575fcf90fb37e3ff7d5654d3a5814eb3d55f36478c2"}, - {file = "httptools-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f58e335a1402fb5a650e271e8c2d03cfa7cea46ae124649346d17bd30d59c90"}, - {file = "httptools-0.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93ad80d7176aa5788902f207a4e79885f0576134695dfb0fefc15b7a4648d503"}, - {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9bb68d3a085c2174c2477eb3ffe84ae9fb4fde8792edb7bcd09a1d8467e30a84"}, - {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b512aa728bc02354e5ac086ce76c3ce635b62f5fbc32ab7082b5e582d27867bb"}, - {file = "httptools-0.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:97662ce7fb196c785344d00d638fc9ad69e18ee4bfb4000b35a52efe5adcc949"}, - {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8e216a038d2d52ea13fdd9b9c9c7459fb80d78302b257828285eca1c773b99b3"}, - {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3e802e0b2378ade99cd666b5bffb8b2a7cc8f3d28988685dc300469ea8dd86cb"}, - {file = "httptools-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd3e488b447046e386a30f07af05f9b38d3d368d1f7b4d8f7e10af85393db97"}, - {file = "httptools-0.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe467eb086d80217b7584e61313ebadc8d187a4d95bb62031b7bab4b205c3ba3"}, - {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3c3b214ce057c54675b00108ac42bacf2ab8f85c58e3f324a4e963bbc46424f4"}, - {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ae5b97f690badd2ca27cbf668494ee1b6d34cf1c464271ef7bfa9ca6b83ffaf"}, - {file = "httptools-0.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:405784577ba6540fa7d6ff49e37daf104e04f4b4ff2d1ac0469eaa6a20fde084"}, - {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:95fb92dd3649f9cb139e9c56604cc2d7c7bf0fc2e7c8d7fbd58f96e35eddd2a3"}, - {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dcbab042cc3ef272adc11220517278519adf8f53fd3056d0e68f0a6f891ba94e"}, - {file = "httptools-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf2372e98406efb42e93bfe10f2948e467edfd792b015f1b4ecd897903d3e8d"}, - {file = "httptools-0.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678fcbae74477a17d103b7cae78b74800d795d702083867ce160fc202104d0da"}, - {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e0b281cf5a125c35f7f6722b65d8542d2e57331be573e9e88bc8b0115c4a7a81"}, - {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:95658c342529bba4e1d3d2b1a874db16c7cca435e8827422154c9da76ac4e13a"}, - {file = "httptools-0.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ebaec1bf683e4bf5e9fbb49b8cc36da482033596a415b3e4ebab5a4c0d7ec5e"}, - {file = "httptools-0.6.1.tar.gz", hash = "sha256:c6e26c30455600b95d94b1b836085138e82f177351454ee841c148f93a9bad5a"}, + {file = "httptools-0.6.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3c73ce323711a6ffb0d247dcd5a550b8babf0f757e86a52558fe5b86d6fefcc0"}, + {file = "httptools-0.6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:345c288418f0944a6fe67be8e6afa9262b18c7626c3ef3c28adc5eabc06a68da"}, + {file = "httptools-0.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deee0e3343f98ee8047e9f4c5bc7cedbf69f5734454a94c38ee829fb2d5fa3c1"}, + {file = "httptools-0.6.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca80b7485c76f768a3bc83ea58373f8db7b015551117375e4918e2aa77ea9b50"}, + {file = "httptools-0.6.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:90d96a385fa941283ebd231464045187a31ad932ebfa541be8edf5b3c2328959"}, + {file = "httptools-0.6.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:59e724f8b332319e2875efd360e61ac07f33b492889284a3e05e6d13746876f4"}, + {file = "httptools-0.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:c26f313951f6e26147833fc923f78f95604bbec812a43e5ee37f26dc9e5a686c"}, + {file = "httptools-0.6.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f47f8ed67cc0ff862b84a1189831d1d33c963fb3ce1ee0c65d3b0cbe7b711069"}, + {file = "httptools-0.6.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0614154d5454c21b6410fdf5262b4a3ddb0f53f1e1721cfd59d55f32138c578a"}, + {file = "httptools-0.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8787367fbdfccae38e35abf7641dafc5310310a5987b689f4c32cc8cc3ee975"}, + {file = "httptools-0.6.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40b0f7fe4fd38e6a507bdb751db0379df1e99120c65fbdc8ee6c1d044897a636"}, + {file = "httptools-0.6.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40a5ec98d3f49904b9fe36827dcf1aadfef3b89e2bd05b0e35e94f97c2b14721"}, + {file = "httptools-0.6.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dacdd3d10ea1b4ca9df97a0a303cbacafc04b5cd375fa98732678151643d4988"}, + {file = "httptools-0.6.4-cp311-cp311-win_amd64.whl", hash = "sha256:288cd628406cc53f9a541cfaf06041b4c71d751856bab45e3702191f931ccd17"}, + {file = "httptools-0.6.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:df017d6c780287d5c80601dafa31f17bddb170232d85c066604d8558683711a2"}, + {file = "httptools-0.6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:85071a1e8c2d051b507161f6c3e26155b5c790e4e28d7f236422dbacc2a9cc44"}, + {file = "httptools-0.6.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69422b7f458c5af875922cdb5bd586cc1f1033295aa9ff63ee196a87519ac8e1"}, + {file = "httptools-0.6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16e603a3bff50db08cd578d54f07032ca1631450ceb972c2f834c2b860c28ea2"}, + {file = "httptools-0.6.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec4f178901fa1834d4a060320d2f3abc5c9e39766953d038f1458cb885f47e81"}, + {file = "httptools-0.6.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f9eb89ecf8b290f2e293325c646a211ff1c2493222798bb80a530c5e7502494f"}, + {file = "httptools-0.6.4-cp312-cp312-win_amd64.whl", hash = "sha256:db78cb9ca56b59b016e64b6031eda5653be0589dba2b1b43453f6e8b405a0970"}, + {file = "httptools-0.6.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ade273d7e767d5fae13fa637f4d53b6e961fb7fd93c7797562663f0171c26660"}, + {file = "httptools-0.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:856f4bc0478ae143bad54a4242fccb1f3f86a6e1be5548fecfd4102061b3a083"}, + {file = "httptools-0.6.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:322d20ea9cdd1fa98bd6a74b77e2ec5b818abdc3d36695ab402a0de8ef2865a3"}, + {file = "httptools-0.6.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d87b29bd4486c0093fc64dea80231f7c7f7eb4dc70ae394d70a495ab8436071"}, + {file = "httptools-0.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:342dd6946aa6bda4b8f18c734576106b8a31f2fe31492881a9a160ec84ff4bd5"}, + {file = "httptools-0.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b36913ba52008249223042dca46e69967985fb4051951f94357ea681e1f5dc0"}, + {file = "httptools-0.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:28908df1b9bb8187393d5b5db91435ccc9c8e891657f9cbb42a2541b44c82fc8"}, + {file = "httptools-0.6.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d3f0d369e7ffbe59c4b6116a44d6a8eb4783aae027f2c0b366cf0aa964185dba"}, + {file = "httptools-0.6.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:94978a49b8f4569ad607cd4946b759d90b285e39c0d4640c6b36ca7a3ddf2efc"}, + {file = "httptools-0.6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40dc6a8e399e15ea525305a2ddba998b0af5caa2566bcd79dcbe8948181eeaff"}, + {file = "httptools-0.6.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab9ba8dcf59de5181f6be44a77458e45a578fc99c31510b8c65b7d5acc3cf490"}, + {file = "httptools-0.6.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:fc411e1c0a7dcd2f902c7c48cf079947a7e65b5485dea9decb82b9105ca71a43"}, + {file = "httptools-0.6.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:d54efd20338ac52ba31e7da78e4a72570cf729fac82bc31ff9199bedf1dc7440"}, + {file = "httptools-0.6.4-cp38-cp38-win_amd64.whl", hash = "sha256:df959752a0c2748a65ab5387d08287abf6779ae9165916fe053e68ae1fbdc47f"}, + {file = "httptools-0.6.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:85797e37e8eeaa5439d33e556662cc370e474445d5fab24dcadc65a8ffb04003"}, + {file = "httptools-0.6.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:db353d22843cf1028f43c3651581e4bb49374d85692a85f95f7b9a130e1b2cab"}, + {file = "httptools-0.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1ffd262a73d7c28424252381a5b854c19d9de5f56f075445d33919a637e3547"}, + {file = "httptools-0.6.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:703c346571fa50d2e9856a37d7cd9435a25e7fd15e236c397bf224afaa355fe9"}, + {file = "httptools-0.6.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aafe0f1918ed07b67c1e838f950b1c1fabc683030477e60b335649b8020e1076"}, + {file = "httptools-0.6.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0e563e54979e97b6d13f1bbc05a96109923e76b901f786a5eae36e99c01237bd"}, + {file = "httptools-0.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:b799de31416ecc589ad79dd85a0b2657a8fe39327944998dea368c1d4c9e55e6"}, + {file = "httptools-0.6.4.tar.gz", hash = "sha256:4e93eee4add6493b59a5c514da98c939b244fce4a0d8879cd3f466562f4b7d5c"}, ] [package.extras] -test = ["Cython (>=0.29.24,<0.30.0)"] +test = ["Cython (>=0.29.24)"] [[package]] name = "httpx" @@ -1908,13 +1936,13 @@ files = [ [[package]] name = "huggingface-hub" -version = "0.25.0" +version = "0.26.2" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = false python-versions = ">=3.8.0" files = [ - {file = "huggingface_hub-0.25.0-py3-none-any.whl", hash = "sha256:e2f357b35d72d5012cfd127108c4e14abcd61ba4ebc90a5a374dc2456cb34e12"}, - {file = "huggingface_hub-0.25.0.tar.gz", hash = "sha256:fb5fbe6c12fcd99d187ec7db95db9110fb1a20505f23040a5449a717c1a0db4d"}, + {file = "huggingface_hub-0.26.2-py3-none-any.whl", hash = "sha256:98c2a5a8e786c7b2cb6fdeb2740893cba4d53e312572ed3d8afafda65b128c46"}, + {file = "huggingface_hub-0.26.2.tar.gz", hash = "sha256:b100d853465d965733964d123939ba287da60a547087783ddff8a323f340332b"}, ] [package.dependencies] @@ -1927,16 +1955,16 @@ tqdm = ">=4.42.1" typing-extensions = ">=3.7.4.3" [package.extras] -all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.5.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio (>=4.0.0)", "jedi", "libcst (==1.4.0)", "mypy (==1.5.1)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.5.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] cli = ["InquirerPy (==0.3.4)"] -dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.5.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio (>=4.0.0)", "jedi", "libcst (==1.4.0)", "mypy (==1.5.1)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.5.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] hf-transfer = ["hf-transfer (>=0.1.4)"] -inference = ["aiohttp", "minijinja (>=1.0)"] -quality = ["mypy (==1.5.1)", "ruff (>=0.5.0)"] +inference = ["aiohttp"] +quality = ["libcst (==1.4.0)", "mypy (==1.5.1)", "ruff (>=0.5.0)"] tensorflow = ["graphviz", "pydot", "tensorflow"] tensorflow-testing = ["keras (<3.0)", "tensorflow"] -testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] +testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio (>=4.0.0)", "jedi", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] torch = ["safetensors[torch]", "torch"] typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"] @@ -1970,22 +1998,26 @@ all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2 [[package]] name = "importlib-metadata" -version = "8.4.0" +version = "8.5.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-8.4.0-py3-none-any.whl", hash = "sha256:66f342cc6ac9818fc6ff340576acd24d65ba0b3efabb2b4ac08b598965a4a2f1"}, - {file = "importlib_metadata-8.4.0.tar.gz", hash = "sha256:9a547d3bc3608b025f93d403fdd1aae741c24fbb8314df4b155675742ce303c5"}, + {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, + {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, ] [package.dependencies] -zipp = ">=0.5" +zipp = ">=3.20" [package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] perf = ["ipython"] -test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] +test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +type = ["pytest-mypy"] [[package]] name = "importlib-resources" @@ -2048,18 +2080,15 @@ files = [ [[package]] name = "isodate" -version = "0.6.1" +version = "0.7.2" description = "An ISO 8601 date/time/duration parser and formatter" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "isodate-0.6.1-py2.py3-none-any.whl", hash = "sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96"}, - {file = "isodate-0.6.1.tar.gz", hash = "sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9"}, + {file = "isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15"}, + {file = "isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6"}, ] -[package.dependencies] -six = "*" - [[package]] name = "isort" version = "5.13.2" @@ -2123,72 +2152,84 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "jiter" -version = "0.5.0" +version = "0.7.1" description = "Fast iterable JSON parser." optional = false python-versions = ">=3.8" files = [ - {file = "jiter-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b599f4e89b3def9a94091e6ee52e1d7ad7bc33e238ebb9c4c63f211d74822c3f"}, - {file = "jiter-0.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a063f71c4b06225543dddadbe09d203dc0c95ba352d8b85f1221173480a71d5"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acc0d5b8b3dd12e91dd184b87273f864b363dfabc90ef29a1092d269f18c7e28"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c22541f0b672f4d741382a97c65609332a783501551445ab2df137ada01e019e"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63314832e302cc10d8dfbda0333a384bf4bcfce80d65fe99b0f3c0da8945a91a"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a25fbd8a5a58061e433d6fae6d5298777c0814a8bcefa1e5ecfff20c594bd749"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:503b2c27d87dfff5ab717a8200fbbcf4714516c9d85558048b1fc14d2de7d8dc"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6d1f3d27cce923713933a844872d213d244e09b53ec99b7a7fdf73d543529d6d"}, - {file = "jiter-0.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c95980207b3998f2c3b3098f357994d3fd7661121f30669ca7cb945f09510a87"}, - {file = "jiter-0.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:afa66939d834b0ce063f57d9895e8036ffc41c4bd90e4a99631e5f261d9b518e"}, - {file = "jiter-0.5.0-cp310-none-win32.whl", hash = "sha256:f16ca8f10e62f25fd81d5310e852df6649af17824146ca74647a018424ddeccf"}, - {file = "jiter-0.5.0-cp310-none-win_amd64.whl", hash = "sha256:b2950e4798e82dd9176935ef6a55cf6a448b5c71515a556da3f6b811a7844f1e"}, - {file = "jiter-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4c8e1ed0ef31ad29cae5ea16b9e41529eb50a7fba70600008e9f8de6376d553"}, - {file = "jiter-0.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6f16e21276074a12d8421692515b3fd6d2ea9c94fd0734c39a12960a20e85f3"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5280e68e7740c8c128d3ae5ab63335ce6d1fb6603d3b809637b11713487af9e6"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:583c57fc30cc1fec360e66323aadd7fc3edeec01289bfafc35d3b9dcb29495e4"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26351cc14507bdf466b5f99aba3df3143a59da75799bf64a53a3ad3155ecded9"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829df14d656b3fb87e50ae8b48253a8851c707da9f30d45aacab2aa2ba2d614"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a42a4bdcf7307b86cb863b2fb9bb55029b422d8f86276a50487982d99eed7c6e"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04d461ad0aebf696f8da13c99bc1b3e06f66ecf6cfd56254cc402f6385231c06"}, - {file = "jiter-0.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e6375923c5f19888c9226582a124b77b622f8fd0018b843c45eeb19d9701c403"}, - {file = "jiter-0.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2cec323a853c24fd0472517113768c92ae0be8f8c384ef4441d3632da8baa646"}, - {file = "jiter-0.5.0-cp311-none-win32.whl", hash = "sha256:aa1db0967130b5cab63dfe4d6ff547c88b2a394c3410db64744d491df7f069bb"}, - {file = "jiter-0.5.0-cp311-none-win_amd64.whl", hash = "sha256:aa9d2b85b2ed7dc7697597dcfaac66e63c1b3028652f751c81c65a9f220899ae"}, - {file = "jiter-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9f664e7351604f91dcdd557603c57fc0d551bc65cc0a732fdacbf73ad335049a"}, - {file = "jiter-0.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:044f2f1148b5248ad2c8c3afb43430dccf676c5a5834d2f5089a4e6c5bbd64df"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:702e3520384c88b6e270c55c772d4bd6d7b150608dcc94dea87ceba1b6391248"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:528d742dcde73fad9d63e8242c036ab4a84389a56e04efd854062b660f559544"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cf80e5fe6ab582c82f0c3331df27a7e1565e2dcf06265afd5173d809cdbf9ba"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:44dfc9ddfb9b51a5626568ef4e55ada462b7328996294fe4d36de02fce42721f"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c451f7922992751a936b96c5f5b9bb9312243d9b754c34b33d0cb72c84669f4e"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:308fce789a2f093dca1ff91ac391f11a9f99c35369117ad5a5c6c4903e1b3e3a"}, - {file = "jiter-0.5.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7f5ad4a7c6b0d90776fdefa294f662e8a86871e601309643de30bf94bb93a64e"}, - {file = "jiter-0.5.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ea189db75f8eca08807d02ae27929e890c7d47599ce3d0a6a5d41f2419ecf338"}, - {file = "jiter-0.5.0-cp312-none-win32.whl", hash = "sha256:e3bbe3910c724b877846186c25fe3c802e105a2c1fc2b57d6688b9f8772026e4"}, - {file = "jiter-0.5.0-cp312-none-win_amd64.whl", hash = "sha256:a586832f70c3f1481732919215f36d41c59ca080fa27a65cf23d9490e75b2ef5"}, - {file = "jiter-0.5.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f04bc2fc50dc77be9d10f73fcc4e39346402ffe21726ff41028f36e179b587e6"}, - {file = "jiter-0.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6f433a4169ad22fcb550b11179bb2b4fd405de9b982601914ef448390b2954f3"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad4a6398c85d3a20067e6c69890ca01f68659da94d74c800298581724e426c7e"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6baa88334e7af3f4d7a5c66c3a63808e5efbc3698a1c57626541ddd22f8e4fbf"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ece0a115c05efca597c6d938f88c9357c843f8c245dbbb53361a1c01afd7148"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:335942557162ad372cc367ffaf93217117401bf930483b4b3ebdb1223dbddfa7"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:649b0ee97a6e6da174bffcb3c8c051a5935d7d4f2f52ea1583b5b3e7822fbf14"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f4be354c5de82157886ca7f5925dbda369b77344b4b4adf2723079715f823989"}, - {file = "jiter-0.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5206144578831a6de278a38896864ded4ed96af66e1e63ec5dd7f4a1fce38a3a"}, - {file = "jiter-0.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8120c60f8121ac3d6f072b97ef0e71770cc72b3c23084c72c4189428b1b1d3b6"}, - {file = "jiter-0.5.0-cp38-none-win32.whl", hash = "sha256:6f1223f88b6d76b519cb033a4d3687ca157c272ec5d6015c322fc5b3074d8a5e"}, - {file = "jiter-0.5.0-cp38-none-win_amd64.whl", hash = "sha256:c59614b225d9f434ea8fc0d0bec51ef5fa8c83679afedc0433905994fb36d631"}, - {file = "jiter-0.5.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0af3838cfb7e6afee3f00dc66fa24695199e20ba87df26e942820345b0afc566"}, - {file = "jiter-0.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:550b11d669600dbc342364fd4adbe987f14d0bbedaf06feb1b983383dcc4b961"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:489875bf1a0ffb3cb38a727b01e6673f0f2e395b2aad3c9387f94187cb214bbf"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b250ca2594f5599ca82ba7e68785a669b352156260c5362ea1b4e04a0f3e2389"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ea18e01f785c6667ca15407cd6dabbe029d77474d53595a189bdc813347218e"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:462a52be85b53cd9bffd94e2d788a09984274fe6cebb893d6287e1c296d50653"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92cc68b48d50fa472c79c93965e19bd48f40f207cb557a8346daa020d6ba973b"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1c834133e59a8521bc87ebcad773608c6fa6ab5c7a022df24a45030826cf10bc"}, - {file = "jiter-0.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab3a71ff31cf2d45cb216dc37af522d335211f3a972d2fe14ea99073de6cb104"}, - {file = "jiter-0.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cccd3af9c48ac500c95e1bcbc498020c87e1781ff0345dd371462d67b76643eb"}, - {file = "jiter-0.5.0-cp39-none-win32.whl", hash = "sha256:368084d8d5c4fc40ff7c3cc513c4f73e02c85f6009217922d0823a48ee7adf61"}, - {file = "jiter-0.5.0-cp39-none-win_amd64.whl", hash = "sha256:ce03f7b4129eb72f1687fa11300fbf677b02990618428934662406d2a76742a1"}, - {file = "jiter-0.5.0.tar.gz", hash = "sha256:1d916ba875bcab5c5f7d927df998c4cb694d27dceddf3392e58beaf10563368a"}, + {file = "jiter-0.7.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:262e96d06696b673fad6f257e6a0abb6e873dc22818ca0e0600f4a1189eb334f"}, + {file = "jiter-0.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be6de02939aac5be97eb437f45cfd279b1dc9de358b13ea6e040e63a3221c40d"}, + {file = "jiter-0.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:935f10b802bc1ce2b2f61843e498c7720aa7f4e4bb7797aa8121eab017293c3d"}, + {file = "jiter-0.7.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9cd3cccccabf5064e4bb3099c87bf67db94f805c1e62d1aefd2b7476e90e0ee2"}, + {file = "jiter-0.7.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4aa919ebfc5f7b027cc368fe3964c0015e1963b92e1db382419dadb098a05192"}, + {file = "jiter-0.7.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ae2d01e82c94491ce4d6f461a837f63b6c4e6dd5bb082553a70c509034ff3d4"}, + {file = "jiter-0.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f9568cd66dbbdab67ae1b4c99f3f7da1228c5682d65913e3f5f95586b3cb9a9"}, + {file = "jiter-0.7.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9ecbf4e20ec2c26512736284dc1a3f8ed79b6ca7188e3b99032757ad48db97dc"}, + {file = "jiter-0.7.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b1a0508fddc70ce00b872e463b387d49308ef02b0787992ca471c8d4ba1c0fa1"}, + {file = "jiter-0.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f84c9996664c460f24213ff1e5881530abd8fafd82058d39af3682d5fd2d6316"}, + {file = "jiter-0.7.1-cp310-none-win32.whl", hash = "sha256:c915e1a1960976ba4dfe06551ea87063b2d5b4d30759012210099e712a414d9f"}, + {file = "jiter-0.7.1-cp310-none-win_amd64.whl", hash = "sha256:75bf3b7fdc5c0faa6ffffcf8028a1f974d126bac86d96490d1b51b3210aa0f3f"}, + {file = "jiter-0.7.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ad04a23a91f3d10d69d6c87a5f4471b61c2c5cd6e112e85136594a02043f462c"}, + {file = "jiter-0.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e47a554de88dff701226bb5722b7f1b6bccd0b98f1748459b7e56acac2707a5"}, + {file = "jiter-0.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e44fff69c814a2e96a20b4ecee3e2365e9b15cf5fe4e00869d18396daa91dab"}, + {file = "jiter-0.7.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df0a1d05081541b45743c965436f8b5a1048d6fd726e4a030113a2699a6046ea"}, + {file = "jiter-0.7.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f22cf8f236a645cb6d8ffe2a64edb5d2b66fb148bf7c75eea0cb36d17014a7bc"}, + {file = "jiter-0.7.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da8589f50b728ea4bf22e0632eefa125c8aa9c38ed202a5ee6ca371f05eeb3ff"}, + {file = "jiter-0.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f20de711224f2ca2dbb166a8d512f6ff48c9c38cc06b51f796520eb4722cc2ce"}, + {file = "jiter-0.7.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8a9803396032117b85ec8cbf008a54590644a062fedd0425cbdb95e4b2b60479"}, + {file = "jiter-0.7.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3d8bae77c82741032e9d89a4026479061aba6e646de3bf5f2fc1ae2bbd9d06e0"}, + {file = "jiter-0.7.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3dc9939e576bbc68c813fc82f6620353ed68c194c7bcf3d58dc822591ec12490"}, + {file = "jiter-0.7.1-cp311-none-win32.whl", hash = "sha256:f7605d24cd6fab156ec89e7924578e21604feee9c4f1e9da34d8b67f63e54892"}, + {file = "jiter-0.7.1-cp311-none-win_amd64.whl", hash = "sha256:f3ea649e7751a1a29ea5ecc03c4ada0a833846c59c6da75d747899f9b48b7282"}, + {file = "jiter-0.7.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ad36a1155cbd92e7a084a568f7dc6023497df781adf2390c345dd77a120905ca"}, + {file = "jiter-0.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7ba52e6aaed2dc5c81a3d9b5e4ab95b039c4592c66ac973879ba57c3506492bb"}, + {file = "jiter-0.7.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b7de0b6f6728b678540c7927587e23f715284596724be203af952418acb8a2d"}, + {file = "jiter-0.7.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9463b62bd53c2fb85529c700c6a3beb2ee54fde8bef714b150601616dcb184a6"}, + {file = "jiter-0.7.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:627164ec01d28af56e1f549da84caf0fe06da3880ebc7b7ee1ca15df106ae172"}, + {file = "jiter-0.7.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25d0e5bf64e368b0aa9e0a559c3ab2f9b67e35fe7269e8a0d81f48bbd10e8963"}, + {file = "jiter-0.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c244261306f08f8008b3087059601997016549cb8bb23cf4317a4827f07b7d74"}, + {file = "jiter-0.7.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7ded4e4b75b68b843b7cea5cd7c55f738c20e1394c68c2cb10adb655526c5f1b"}, + {file = "jiter-0.7.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:80dae4f1889b9d09e5f4de6b58c490d9c8ce7730e35e0b8643ab62b1538f095c"}, + {file = "jiter-0.7.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5970cf8ec943b51bce7f4b98d2e1ed3ada170c2a789e2db3cb484486591a176a"}, + {file = "jiter-0.7.1-cp312-none-win32.whl", hash = "sha256:701d90220d6ecb3125d46853c8ca8a5bc158de8c49af60fd706475a49fee157e"}, + {file = "jiter-0.7.1-cp312-none-win_amd64.whl", hash = "sha256:7824c3ecf9ecf3321c37f4e4d4411aad49c666ee5bc2a937071bdd80917e4533"}, + {file = "jiter-0.7.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:097676a37778ba3c80cb53f34abd6943ceb0848263c21bf423ae98b090f6c6ba"}, + {file = "jiter-0.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3298af506d4271257c0a8f48668b0f47048d69351675dd8500f22420d4eec378"}, + {file = "jiter-0.7.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12fd88cfe6067e2199964839c19bd2b422ca3fd792949b8f44bb8a4e7d21946a"}, + {file = "jiter-0.7.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dacca921efcd21939123c8ea8883a54b9fa7f6545c8019ffcf4f762985b6d0c8"}, + {file = "jiter-0.7.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de3674a5fe1f6713a746d25ad9c32cd32fadc824e64b9d6159b3b34fd9134143"}, + {file = "jiter-0.7.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65df9dbae6d67e0788a05b4bad5706ad40f6f911e0137eb416b9eead6ba6f044"}, + {file = "jiter-0.7.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ba9a358d59a0a55cccaa4957e6ae10b1a25ffdabda863c0343c51817610501d"}, + {file = "jiter-0.7.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:576eb0f0c6207e9ede2b11ec01d9c2182973986514f9c60bc3b3b5d5798c8f50"}, + {file = "jiter-0.7.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:e550e29cdf3577d2c970a18f3959e6b8646fd60ef1b0507e5947dc73703b5627"}, + {file = "jiter-0.7.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:81d968dbf3ce0db2e0e4dec6b0a0d5d94f846ee84caf779b07cab49f5325ae43"}, + {file = "jiter-0.7.1-cp313-none-win32.whl", hash = "sha256:f892e547e6e79a1506eb571a676cf2f480a4533675f834e9ae98de84f9b941ac"}, + {file = "jiter-0.7.1-cp313-none-win_amd64.whl", hash = "sha256:0302f0940b1455b2a7fb0409b8d5b31183db70d2b07fd177906d83bf941385d1"}, + {file = "jiter-0.7.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:c65a3ce72b679958b79d556473f192a4dfc5895e8cc1030c9f4e434690906076"}, + {file = "jiter-0.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e80052d3db39f9bb8eb86d207a1be3d9ecee5e05fdec31380817f9609ad38e60"}, + {file = "jiter-0.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70a497859c4f3f7acd71c8bd89a6f9cf753ebacacf5e3e799138b8e1843084e3"}, + {file = "jiter-0.7.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c1288bc22b9e36854a0536ba83666c3b1fb066b811019d7b682c9cf0269cdf9f"}, + {file = "jiter-0.7.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b096ca72dd38ef35675e1d3b01785874315182243ef7aea9752cb62266ad516f"}, + {file = "jiter-0.7.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8dbbd52c50b605af13dbee1a08373c520e6fcc6b5d32f17738875847fea4e2cd"}, + {file = "jiter-0.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af29c5c6eb2517e71ffa15c7ae9509fa5e833ec2a99319ac88cc271eca865519"}, + {file = "jiter-0.7.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f114a4df1e40c03c0efbf974b376ed57756a1141eb27d04baee0680c5af3d424"}, + {file = "jiter-0.7.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:191fbaee7cf46a9dd9b817547bf556facde50f83199d07fc48ebeff4082f9df4"}, + {file = "jiter-0.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0e2b445e5ee627fb4ee6bbceeb486251e60a0c881a8e12398dfdff47c56f0723"}, + {file = "jiter-0.7.1-cp38-none-win32.whl", hash = "sha256:47ac4c3cf8135c83e64755b7276339b26cd3c7ddadf9e67306ace4832b283edf"}, + {file = "jiter-0.7.1-cp38-none-win_amd64.whl", hash = "sha256:60b49c245cd90cde4794f5c30f123ee06ccf42fb8730a019a2870cd005653ebd"}, + {file = "jiter-0.7.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8f212eeacc7203256f526f550d105d8efa24605828382cd7d296b703181ff11d"}, + {file = "jiter-0.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d9e247079d88c00e75e297e6cb3a18a039ebcd79fefc43be9ba4eb7fb43eb726"}, + {file = "jiter-0.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0aacaa56360139c53dcf352992b0331f4057a0373bbffd43f64ba0c32d2d155"}, + {file = "jiter-0.7.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc1b55314ca97dbb6c48d9144323896e9c1a25d41c65bcb9550b3e0c270ca560"}, + {file = "jiter-0.7.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f281aae41b47e90deb70e7386558e877a8e62e1693e0086f37d015fa1c102289"}, + {file = "jiter-0.7.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:93c20d2730a84d43f7c0b6fb2579dc54335db742a59cf9776d0b80e99d587382"}, + {file = "jiter-0.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e81ccccd8069110e150613496deafa10da2f6ff322a707cbec2b0d52a87b9671"}, + {file = "jiter-0.7.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0a7d5e85766eff4c9be481d77e2226b4c259999cb6862ccac5ef6621d3c8dcce"}, + {file = "jiter-0.7.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f52ce5799df5b6975439ecb16b1e879d7655e1685b6e3758c9b1b97696313bfb"}, + {file = "jiter-0.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e0c91a0304373fdf97d56f88356a010bba442e6d995eb7773cbe32885b71cdd8"}, + {file = "jiter-0.7.1-cp39-none-win32.whl", hash = "sha256:5c08adf93e41ce2755970e8aa95262298afe2bf58897fb9653c47cd93c3c6cdc"}, + {file = "jiter-0.7.1-cp39-none-win_amd64.whl", hash = "sha256:6592f4067c74176e5f369228fb2995ed01400c9e8e1225fb73417183a5e635f0"}, + {file = "jiter-0.7.1.tar.gz", hash = "sha256:448cf4f74f7363c34cdef26214da527e8eeffd88ba06d0b80b485ad0667baf5d"}, ] [[package]] @@ -2327,71 +2368,72 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" -version = "2.1.5" +version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, - {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, ] [[package]] @@ -2507,13 +2549,13 @@ files = [ [[package]] name = "mkdocs-material" -version = "9.5.36" +version = "9.5.45" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.36-py3-none-any.whl", hash = "sha256:36734c1fd9404bea74236242ba3359b267fc930c7233b9fd086b0898825d0ac9"}, - {file = "mkdocs_material-9.5.36.tar.gz", hash = "sha256:140456f761320f72b399effc073fa3f8aac744c77b0970797c201cae2f6c967f"}, + {file = "mkdocs_material-9.5.45-py3-none-any.whl", hash = "sha256:a9be237cfd0be14be75f40f1726d83aa3a81ce44808dc3594d47a7a592f44547"}, + {file = "mkdocs_material-9.5.45.tar.gz", hash = "sha256:286489cf0beca4a129d91d59d6417419c63bceed1ce5cd0ec1fc7e1ebffb8189"}, ] [package.dependencies] @@ -2869,20 +2911,21 @@ files = [ [[package]] name = "networkx" -version = "3.3" +version = "3.4.2" description = "Python package for creating and manipulating graphs and networks" optional = false python-versions = ">=3.10" files = [ - {file = "networkx-3.3-py3-none-any.whl", hash = "sha256:28575580c6ebdaf4505b22c6256a2b9de86b316dc63ba9e93abde3d78dfdbcf2"}, - {file = "networkx-3.3.tar.gz", hash = "sha256:0c127d8b2f4865f59ae9cb8aafcd60b5c70f3241ebd66f7defad7c4ab90126c9"}, + {file = "networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f"}, + {file = "networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1"}, ] [package.extras] -default = ["matplotlib (>=3.6)", "numpy (>=1.23)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] +default = ["matplotlib (>=3.7)", "numpy (>=1.24)", "pandas (>=2.0)", "scipy (>=1.10,!=1.11.0,!=1.11.1)"] developer = ["changelist (==0.5)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] -doc = ["myst-nb (>=1.0)", "numpydoc (>=1.7)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] -extra = ["lxml (>=4.6)", "pydot (>=2.0)", "pygraphviz (>=1.12)", "sympy (>=1.10)"] +doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.15)", "sphinx (>=7.3)", "sphinx-gallery (>=0.16)", "texext (>=0.6.7)"] +example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "momepy (>=0.7.2)", "osmnx (>=1.9)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] +extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] @@ -3078,14 +3121,14 @@ files = [ [[package]] name = "nvidia-nvjitlink-cu12" -version = "12.6.68" +version = "12.6.85" description = "Nvidia JIT LTO Library" optional = false python-versions = ">=3" files = [ - {file = "nvidia_nvjitlink_cu12-12.6.68-py3-none-manylinux2014_aarch64.whl", hash = "sha256:b3fd0779845f68b92063ab1393abab1ed0a23412fc520df79a8190d098b5cd6b"}, - {file = "nvidia_nvjitlink_cu12-12.6.68-py3-none-manylinux2014_x86_64.whl", hash = "sha256:125a6c2a44e96386dda634e13d944e60b07a0402d391a070e8fb4104b34ea1ab"}, - {file = "nvidia_nvjitlink_cu12-12.6.68-py3-none-win_amd64.whl", hash = "sha256:a55744c98d70317c5e23db14866a8cc2b733f7324509e941fc96276f9f37801d"}, + {file = "nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:eedc36df9e88b682efe4309aa16b5b4e78c2407eac59e8c10a6a47535164369a"}, + {file = "nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cf4eaa7d4b6b543ffd69d6abfb11efdeb2db48270d94dfd3a452c24150829e41"}, + {file = "nvidia_nvjitlink_cu12-12.6.85-py3-none-win_amd64.whl", hash = "sha256:e61120e52ed675747825cdd16febc6a0730537451d867ee58bee3853b1b13d1c"}, ] [[package]] @@ -3117,36 +3160,32 @@ signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] [[package]] name = "onnxruntime" -version = "1.19.2" +version = "1.20.1" description = "ONNX Runtime is a runtime accelerator for Machine Learning models" optional = false python-versions = "*" files = [ - {file = "onnxruntime-1.19.2-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:84fa57369c06cadd3c2a538ae2a26d76d583e7c34bdecd5769d71ca5c0fc750e"}, - {file = "onnxruntime-1.19.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bdc471a66df0c1cdef774accef69e9f2ca168c851ab5e4f2f3341512c7ef4666"}, - {file = "onnxruntime-1.19.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e3a4ce906105d99ebbe817f536d50a91ed8a4d1592553f49b3c23c4be2560ae6"}, - {file = "onnxruntime-1.19.2-cp310-cp310-win32.whl", hash = "sha256:4b3d723cc154c8ddeb9f6d0a8c0d6243774c6b5930847cc83170bfe4678fafb3"}, - {file = "onnxruntime-1.19.2-cp310-cp310-win_amd64.whl", hash = "sha256:17ed7382d2c58d4b7354fb2b301ff30b9bf308a1c7eac9546449cd122d21cae5"}, - {file = "onnxruntime-1.19.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:d863e8acdc7232d705d49e41087e10b274c42f09e259016a46f32c34e06dc4fd"}, - {file = "onnxruntime-1.19.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c1dfe4f660a71b31caa81fc298a25f9612815215a47b286236e61d540350d7b6"}, - {file = "onnxruntime-1.19.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a36511dc07c5c964b916697e42e366fa43c48cdb3d3503578d78cef30417cb84"}, - {file = "onnxruntime-1.19.2-cp311-cp311-win32.whl", hash = "sha256:50cbb8dc69d6befad4746a69760e5b00cc3ff0a59c6c3fb27f8afa20e2cab7e7"}, - {file = "onnxruntime-1.19.2-cp311-cp311-win_amd64.whl", hash = "sha256:1c3e5d415b78337fa0b1b75291e9ea9fb2a4c1f148eb5811e7212fed02cfffa8"}, - {file = "onnxruntime-1.19.2-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:68e7051bef9cfefcbb858d2d2646536829894d72a4130c24019219442b1dd2ed"}, - {file = "onnxruntime-1.19.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d2d366fbcc205ce68a8a3bde2185fd15c604d9645888703785b61ef174265168"}, - {file = "onnxruntime-1.19.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:477b93df4db467e9cbf34051662a4b27c18e131fa1836e05974eae0d6e4cf29b"}, - {file = "onnxruntime-1.19.2-cp312-cp312-win32.whl", hash = "sha256:9a174073dc5608fad05f7cf7f320b52e8035e73d80b0a23c80f840e5a97c0147"}, - {file = "onnxruntime-1.19.2-cp312-cp312-win_amd64.whl", hash = "sha256:190103273ea4507638ffc31d66a980594b237874b65379e273125150eb044857"}, - {file = "onnxruntime-1.19.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:636bc1d4cc051d40bc52e1f9da87fbb9c57d9d47164695dfb1c41646ea51ea66"}, - {file = "onnxruntime-1.19.2-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5bd8b875757ea941cbcfe01582970cc299893d1b65bd56731e326a8333f638a3"}, - {file = "onnxruntime-1.19.2-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b2046fc9560f97947bbc1acbe4c6d48585ef0f12742744307d3364b131ac5778"}, - {file = "onnxruntime-1.19.2-cp38-cp38-win32.whl", hash = "sha256:31c12840b1cde4ac1f7d27d540c44e13e34f2345cf3642762d2a3333621abb6a"}, - {file = "onnxruntime-1.19.2-cp38-cp38-win_amd64.whl", hash = "sha256:016229660adea180e9a32ce218b95f8f84860a200f0f13b50070d7d90e92956c"}, - {file = "onnxruntime-1.19.2-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:006c8d326835c017a9e9f74c9c77ebb570a71174a1e89fe078b29a557d9c3848"}, - {file = "onnxruntime-1.19.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df2a94179a42d530b936f154615b54748239c2908ee44f0d722cb4df10670f68"}, - {file = "onnxruntime-1.19.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fae4b4de45894b9ce7ae418c5484cbf0341db6813effec01bb2216091c52f7fb"}, - {file = "onnxruntime-1.19.2-cp39-cp39-win32.whl", hash = "sha256:dc5430f473e8706fff837ae01323be9dcfddd3ea471c900a91fa7c9b807ec5d3"}, - {file = "onnxruntime-1.19.2-cp39-cp39-win_amd64.whl", hash = "sha256:38475e29a95c5f6c62c2c603d69fc7d4c6ccbf4df602bd567b86ae1138881c49"}, + {file = "onnxruntime-1.20.1-cp310-cp310-macosx_13_0_universal2.whl", hash = "sha256:e50ba5ff7fed4f7d9253a6baf801ca2883cc08491f9d32d78a80da57256a5439"}, + {file = "onnxruntime-1.20.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7b2908b50101a19e99c4d4e97ebb9905561daf61829403061c1adc1b588bc0de"}, + {file = "onnxruntime-1.20.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d82daaec24045a2e87598b8ac2b417b1cce623244e80e663882e9fe1aae86410"}, + {file = "onnxruntime-1.20.1-cp310-cp310-win32.whl", hash = "sha256:4c4b251a725a3b8cf2aab284f7d940c26094ecd9d442f07dd81ab5470e99b83f"}, + {file = "onnxruntime-1.20.1-cp310-cp310-win_amd64.whl", hash = "sha256:d3b616bb53a77a9463707bb313637223380fc327f5064c9a782e8ec69c22e6a2"}, + {file = "onnxruntime-1.20.1-cp311-cp311-macosx_13_0_universal2.whl", hash = "sha256:06bfbf02ca9ab5f28946e0f912a562a5f005301d0c419283dc57b3ed7969bb7b"}, + {file = "onnxruntime-1.20.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f6243e34d74423bdd1edf0ae9596dd61023b260f546ee17d701723915f06a9f7"}, + {file = "onnxruntime-1.20.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5eec64c0269dcdb8d9a9a53dc4d64f87b9e0c19801d9321246a53b7eb5a7d1bc"}, + {file = "onnxruntime-1.20.1-cp311-cp311-win32.whl", hash = "sha256:a19bc6e8c70e2485a1725b3d517a2319603acc14c1f1a017dda0afe6d4665b41"}, + {file = "onnxruntime-1.20.1-cp311-cp311-win_amd64.whl", hash = "sha256:8508887eb1c5f9537a4071768723ec7c30c28eb2518a00d0adcd32c89dea3221"}, + {file = "onnxruntime-1.20.1-cp312-cp312-macosx_13_0_universal2.whl", hash = "sha256:22b0655e2bf4f2161d52706e31f517a0e54939dc393e92577df51808a7edc8c9"}, + {file = "onnxruntime-1.20.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f1f56e898815963d6dc4ee1c35fc6c36506466eff6d16f3cb9848cea4e8c8172"}, + {file = "onnxruntime-1.20.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bb71a814f66517a65628c9e4a2bb530a6edd2cd5d87ffa0af0f6f773a027d99e"}, + {file = "onnxruntime-1.20.1-cp312-cp312-win32.whl", hash = "sha256:bd386cc9ee5f686ee8a75ba74037750aca55183085bf1941da8efcfe12d5b120"}, + {file = "onnxruntime-1.20.1-cp312-cp312-win_amd64.whl", hash = "sha256:19c2d843eb074f385e8bbb753a40df780511061a63f9def1b216bf53860223fb"}, + {file = "onnxruntime-1.20.1-cp313-cp313-macosx_13_0_universal2.whl", hash = "sha256:cc01437a32d0042b606f462245c8bbae269e5442797f6213e36ce61d5abdd8cc"}, + {file = "onnxruntime-1.20.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb44b08e017a648924dbe91b82d89b0c105b1adcfe31e90d1dc06b8677ad37be"}, + {file = "onnxruntime-1.20.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bda6aebdf7917c1d811f21d41633df00c58aff2bef2f598f69289c1f1dabc4b3"}, + {file = "onnxruntime-1.20.1-cp313-cp313-win_amd64.whl", hash = "sha256:d30367df7e70f1d9fc5a6a68106f5961686d39b54d3221f760085524e8d38e16"}, + {file = "onnxruntime-1.20.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9158465745423b2b5d97ed25aa7740c7d38d2993ee2e5c3bfacb0c4145c49d8"}, + {file = "onnxruntime-1.20.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0df6f2df83d61f46e842dbcde610ede27218947c33e994545a22333491e72a3b"}, ] [package.dependencies] @@ -3159,13 +3198,13 @@ sympy = "*" [[package]] name = "openai" -version = "1.47.0" +version = "1.55.0" description = "The official Python library for the openai API" optional = false -python-versions = ">=3.7.1" +python-versions = ">=3.8" files = [ - {file = "openai-1.47.0-py3-none-any.whl", hash = "sha256:9ccc8737dfa791f7bd903db4758c176b8544a8cd89d3a3d2add3cea02a34c3a0"}, - {file = "openai-1.47.0.tar.gz", hash = "sha256:6e14d6f77c8cf546646afcd87a2ef752505b3710d2564a2e433e17307dfa86a0"}, + {file = "openai-1.55.0-py3-none-any.whl", hash = "sha256:446e08918f8dd70d8723274be860404c8c7cc46b91b93bbc0ef051f57eb503c1"}, + {file = "openai-1.55.0.tar.gz", hash = "sha256:6c0975ac8540fe639d12b4ff5a8e0bf1424c844c4a4251148f59f06c4b2bd5db"}, ] [package.dependencies] @@ -3183,231 +3222,233 @@ datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] [[package]] name = "opentelemetry-api" -version = "1.27.0" +version = "1.28.2" description = "OpenTelemetry Python API" optional = false python-versions = ">=3.8" files = [ - {file = "opentelemetry_api-1.27.0-py3-none-any.whl", hash = "sha256:953d5871815e7c30c81b56d910c707588000fff7a3ca1c73e6531911d53065e7"}, - {file = "opentelemetry_api-1.27.0.tar.gz", hash = "sha256:ed673583eaa5f81b5ce5e86ef7cdaf622f88ef65f0b9aab40b843dcae5bef342"}, + {file = "opentelemetry_api-1.28.2-py3-none-any.whl", hash = "sha256:6fcec89e265beb258fe6b1acaaa3c8c705a934bd977b9f534a2b7c0d2d4275a6"}, + {file = "opentelemetry_api-1.28.2.tar.gz", hash = "sha256:ecdc70c7139f17f9b0cf3742d57d7020e3e8315d6cffcdf1a12a905d45b19cc0"}, ] [package.dependencies] deprecated = ">=1.2.6" -importlib-metadata = ">=6.0,<=8.4.0" +importlib-metadata = ">=6.0,<=8.5.0" [[package]] name = "opentelemetry-exporter-otlp-proto-common" -version = "1.27.0" +version = "1.28.2" description = "OpenTelemetry Protobuf encoding" optional = false python-versions = ">=3.8" files = [ - {file = "opentelemetry_exporter_otlp_proto_common-1.27.0-py3-none-any.whl", hash = "sha256:675db7fffcb60946f3a5c43e17d1168a3307a94a930ecf8d2ea1f286f3d4f79a"}, - {file = "opentelemetry_exporter_otlp_proto_common-1.27.0.tar.gz", hash = "sha256:159d27cf49f359e3798c4c3eb8da6ef4020e292571bd8c5604a2a573231dd5c8"}, + {file = "opentelemetry_exporter_otlp_proto_common-1.28.2-py3-none-any.whl", hash = "sha256:545b1943b574f666c35b3d6cc67cb0b111060727e93a1e2866e346b33bff2a12"}, + {file = "opentelemetry_exporter_otlp_proto_common-1.28.2.tar.gz", hash = "sha256:7aebaa5fc9ff6029374546df1f3a62616fda07fccd9c6a8b7892ec130dd8baca"}, ] [package.dependencies] -opentelemetry-proto = "1.27.0" +opentelemetry-proto = "1.28.2" [[package]] name = "opentelemetry-exporter-otlp-proto-grpc" -version = "1.27.0" +version = "1.28.2" description = "OpenTelemetry Collector Protobuf over gRPC Exporter" optional = false python-versions = ">=3.8" files = [ - {file = "opentelemetry_exporter_otlp_proto_grpc-1.27.0-py3-none-any.whl", hash = "sha256:56b5bbd5d61aab05e300d9d62a6b3c134827bbd28d0b12f2649c2da368006c9e"}, - {file = "opentelemetry_exporter_otlp_proto_grpc-1.27.0.tar.gz", hash = "sha256:af6f72f76bcf425dfb5ad11c1a6d6eca2863b91e63575f89bb7b4b55099d968f"}, + {file = "opentelemetry_exporter_otlp_proto_grpc-1.28.2-py3-none-any.whl", hash = "sha256:6083d9300863aab35bfce7c172d5fc1007686e6f8dff366eae460cd9a21592e2"}, + {file = "opentelemetry_exporter_otlp_proto_grpc-1.28.2.tar.gz", hash = "sha256:07c10378380bbb01a7f621a5ce833fc1fab816e971140cd3ea1cd587840bc0e6"}, ] [package.dependencies] deprecated = ">=1.2.6" googleapis-common-protos = ">=1.52,<2.0" -grpcio = ">=1.0.0,<2.0.0" +grpcio = ">=1.63.2,<2.0.0" opentelemetry-api = ">=1.15,<2.0" -opentelemetry-exporter-otlp-proto-common = "1.27.0" -opentelemetry-proto = "1.27.0" -opentelemetry-sdk = ">=1.27.0,<1.28.0" +opentelemetry-exporter-otlp-proto-common = "1.28.2" +opentelemetry-proto = "1.28.2" +opentelemetry-sdk = ">=1.28.2,<1.29.0" [[package]] name = "opentelemetry-instrumentation" -version = "0.48b0" +version = "0.49b2" description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python" optional = false python-versions = ">=3.8" files = [ - {file = "opentelemetry_instrumentation-0.48b0-py3-none-any.whl", hash = "sha256:a69750dc4ba6a5c3eb67986a337185a25b739966d80479befe37b546fc870b44"}, - {file = "opentelemetry_instrumentation-0.48b0.tar.gz", hash = "sha256:94929685d906380743a71c3970f76b5f07476eea1834abd5dd9d17abfe23cc35"}, + {file = "opentelemetry_instrumentation-0.49b2-py3-none-any.whl", hash = "sha256:f6d782b0ef9fef4a4c745298651c65f5c532c34cd4c40d230ab5b9f3b3b4d151"}, + {file = "opentelemetry_instrumentation-0.49b2.tar.gz", hash = "sha256:8cf00cc8d9d479e4b72adb9bd267ec544308c602b7188598db5a687e77b298e2"}, ] [package.dependencies] opentelemetry-api = ">=1.4,<2.0" -setuptools = ">=16.0" +opentelemetry-semantic-conventions = "0.49b2" +packaging = ">=18.0" wrapt = ">=1.0.0,<2.0.0" [[package]] name = "opentelemetry-instrumentation-asgi" -version = "0.48b0" +version = "0.49b2" description = "ASGI instrumentation for OpenTelemetry" optional = false python-versions = ">=3.8" files = [ - {file = "opentelemetry_instrumentation_asgi-0.48b0-py3-none-any.whl", hash = "sha256:ddb1b5fc800ae66e85a4e2eca4d9ecd66367a8c7b556169d9e7b57e10676e44d"}, - {file = "opentelemetry_instrumentation_asgi-0.48b0.tar.gz", hash = "sha256:04c32174b23c7fa72ddfe192dad874954968a6a924608079af9952964ecdf785"}, + {file = "opentelemetry_instrumentation_asgi-0.49b2-py3-none-any.whl", hash = "sha256:c8ede13ed781402458a800411cb7ec16a25386dc21de8e5b9a568b386a1dc5f4"}, + {file = "opentelemetry_instrumentation_asgi-0.49b2.tar.gz", hash = "sha256:2af5faf062878330714efe700127b837038c4d9d3b70b451ab2424d5076d6c1c"}, ] [package.dependencies] asgiref = ">=3.0,<4.0" opentelemetry-api = ">=1.12,<2.0" -opentelemetry-instrumentation = "0.48b0" -opentelemetry-semantic-conventions = "0.48b0" -opentelemetry-util-http = "0.48b0" +opentelemetry-instrumentation = "0.49b2" +opentelemetry-semantic-conventions = "0.49b2" +opentelemetry-util-http = "0.49b2" [package.extras] instruments = ["asgiref (>=3.0,<4.0)"] [[package]] name = "opentelemetry-instrumentation-fastapi" -version = "0.48b0" +version = "0.49b2" description = "OpenTelemetry FastAPI Instrumentation" optional = false python-versions = ">=3.8" files = [ - {file = "opentelemetry_instrumentation_fastapi-0.48b0-py3-none-any.whl", hash = "sha256:afeb820a59e139d3e5d96619600f11ce0187658b8ae9e3480857dd790bc024f2"}, - {file = "opentelemetry_instrumentation_fastapi-0.48b0.tar.gz", hash = "sha256:21a72563ea412c0b535815aeed75fc580240f1f02ebc72381cfab672648637a2"}, + {file = "opentelemetry_instrumentation_fastapi-0.49b2-py3-none-any.whl", hash = "sha256:c66331d05bf806d7ca4f9579c1db7383aad31a9f6665dbaa2b7c9a4c1e830892"}, + {file = "opentelemetry_instrumentation_fastapi-0.49b2.tar.gz", hash = "sha256:3aa81ed7acf6aa5236d96e90a1218c5e84a9c0dce8fa63bf34ceee6218354b63"}, ] [package.dependencies] opentelemetry-api = ">=1.12,<2.0" -opentelemetry-instrumentation = "0.48b0" -opentelemetry-instrumentation-asgi = "0.48b0" -opentelemetry-semantic-conventions = "0.48b0" -opentelemetry-util-http = "0.48b0" +opentelemetry-instrumentation = "0.49b2" +opentelemetry-instrumentation-asgi = "0.49b2" +opentelemetry-semantic-conventions = "0.49b2" +opentelemetry-util-http = "0.49b2" [package.extras] instruments = ["fastapi (>=0.58,<1.0)"] [[package]] name = "opentelemetry-proto" -version = "1.27.0" +version = "1.28.2" description = "OpenTelemetry Python Proto" optional = false python-versions = ">=3.8" files = [ - {file = "opentelemetry_proto-1.27.0-py3-none-any.whl", hash = "sha256:b133873de5581a50063e1e4b29cdcf0c5e253a8c2d8dc1229add20a4c3830ace"}, - {file = "opentelemetry_proto-1.27.0.tar.gz", hash = "sha256:33c9345d91dafd8a74fc3d7576c5a38f18b7fdf8d02983ac67485386132aedd6"}, + {file = "opentelemetry_proto-1.28.2-py3-none-any.whl", hash = "sha256:0837498f59db55086462915e5898d0b1a18c1392f6db4d7e937143072a72370c"}, + {file = "opentelemetry_proto-1.28.2.tar.gz", hash = "sha256:7c0d125a6b71af88bfeeda16bfdd0ff63dc2cf0039baf6f49fa133b203e3f566"}, ] [package.dependencies] -protobuf = ">=3.19,<5.0" +protobuf = ">=5.0,<6.0" [[package]] name = "opentelemetry-sdk" -version = "1.27.0" +version = "1.28.2" description = "OpenTelemetry Python SDK" optional = false python-versions = ">=3.8" files = [ - {file = "opentelemetry_sdk-1.27.0-py3-none-any.whl", hash = "sha256:365f5e32f920faf0fd9e14fdfd92c086e317eaa5f860edba9cdc17a380d9197d"}, - {file = "opentelemetry_sdk-1.27.0.tar.gz", hash = "sha256:d525017dea0ccce9ba4e0245100ec46ecdc043f2d7b8315d56b19aff0904fa6f"}, + {file = "opentelemetry_sdk-1.28.2-py3-none-any.whl", hash = "sha256:93336c129556f1e3ccd21442b94d3521759541521861b2214c499571b85cb71b"}, + {file = "opentelemetry_sdk-1.28.2.tar.gz", hash = "sha256:5fed24c5497e10df30282456fe2910f83377797511de07d14cec0d3e0a1a3110"}, ] [package.dependencies] -opentelemetry-api = "1.27.0" -opentelemetry-semantic-conventions = "0.48b0" +opentelemetry-api = "1.28.2" +opentelemetry-semantic-conventions = "0.49b2" typing-extensions = ">=3.7.4" [[package]] name = "opentelemetry-semantic-conventions" -version = "0.48b0" +version = "0.49b2" description = "OpenTelemetry Semantic Conventions" optional = false python-versions = ">=3.8" files = [ - {file = "opentelemetry_semantic_conventions-0.48b0-py3-none-any.whl", hash = "sha256:a0de9f45c413a8669788a38569c7e0a11ce6ce97861a628cca785deecdc32a1f"}, - {file = "opentelemetry_semantic_conventions-0.48b0.tar.gz", hash = "sha256:12d74983783b6878162208be57c9effcb89dc88691c64992d70bb89dc00daa1a"}, + {file = "opentelemetry_semantic_conventions-0.49b2-py3-none-any.whl", hash = "sha256:51e7e1d0daa958782b6c2a8ed05e5f0e7dd0716fc327ac058777b8659649ee54"}, + {file = "opentelemetry_semantic_conventions-0.49b2.tar.gz", hash = "sha256:44e32ce6a5bb8d7c0c617f84b9dc1c8deda1045a07dc16a688cc7cbeab679997"}, ] [package.dependencies] deprecated = ">=1.2.6" -opentelemetry-api = "1.27.0" +opentelemetry-api = "1.28.2" [[package]] name = "opentelemetry-util-http" -version = "0.48b0" +version = "0.49b2" description = "Web util for OpenTelemetry" optional = false python-versions = ">=3.8" files = [ - {file = "opentelemetry_util_http-0.48b0-py3-none-any.whl", hash = "sha256:76f598af93aab50328d2a69c786beaedc8b6a7770f7a818cc307eb353debfffb"}, - {file = "opentelemetry_util_http-0.48b0.tar.gz", hash = "sha256:60312015153580cc20f322e5cdc3d3ecad80a71743235bdb77716e742814623c"}, + {file = "opentelemetry_util_http-0.49b2-py3-none-any.whl", hash = "sha256:e325d6511c6bee7b43170eb0c93261a210ec57e20ab1d7a99838515ef6d2bf58"}, + {file = "opentelemetry_util_http-0.49b2.tar.gz", hash = "sha256:5958c7009f79146bbe98b0fdb23d9d7bf1ea9cd154a1c199029b1a89e0557199"}, ] [[package]] name = "orjson" -version = "3.10.7" +version = "3.10.11" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.7-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:74f4544f5a6405b90da8ea724d15ac9c36da4d72a738c64685003337401f5c12"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34a566f22c28222b08875b18b0dfbf8a947e69df21a9ed5c51a6bf91cfb944ac"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf6ba8ebc8ef5792e2337fb0419f8009729335bb400ece005606336b7fd7bab7"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac7cf6222b29fbda9e3a472b41e6a5538b48f2c8f99261eecd60aafbdb60690c"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de817e2f5fc75a9e7dd350c4b0f54617b280e26d1631811a43e7e968fa71e3e9"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:348bdd16b32556cf8d7257b17cf2bdb7ab7976af4af41ebe79f9796c218f7e91"}, - {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:479fd0844ddc3ca77e0fd99644c7fe2de8e8be1efcd57705b5c92e5186e8a250"}, - {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fdf5197a21dd660cf19dfd2a3ce79574588f8f5e2dbf21bda9ee2d2b46924d84"}, - {file = "orjson-3.10.7-cp310-none-win32.whl", hash = "sha256:d374d36726746c81a49f3ff8daa2898dccab6596864ebe43d50733275c629175"}, - {file = "orjson-3.10.7-cp310-none-win_amd64.whl", hash = "sha256:cb61938aec8b0ffb6eef484d480188a1777e67b05d58e41b435c74b9d84e0b9c"}, - {file = "orjson-3.10.7-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7db8539039698ddfb9a524b4dd19508256107568cdad24f3682d5773e60504a2"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:480f455222cb7a1dea35c57a67578848537d2602b46c464472c995297117fa09"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8a9c9b168b3a19e37fe2778c0003359f07822c90fdff8f98d9d2a91b3144d8e0"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8de062de550f63185e4c1c54151bdddfc5625e37daf0aa1e75d2a1293e3b7d9a"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b0dd04483499d1de9c8f6203f8975caf17a6000b9c0c54630cef02e44ee624e"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b58d3795dafa334fc8fd46f7c5dc013e6ad06fd5b9a4cc98cb1456e7d3558bd6"}, - {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33cfb96c24034a878d83d1a9415799a73dc77480e6c40417e5dda0710d559ee6"}, - {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e724cebe1fadc2b23c6f7415bad5ee6239e00a69f30ee423f319c6af70e2a5c0"}, - {file = "orjson-3.10.7-cp311-none-win32.whl", hash = "sha256:82763b46053727a7168d29c772ed5c870fdae2f61aa8a25994c7984a19b1021f"}, - {file = "orjson-3.10.7-cp311-none-win_amd64.whl", hash = "sha256:eb8d384a24778abf29afb8e41d68fdd9a156cf6e5390c04cc07bbc24b89e98b5"}, - {file = "orjson-3.10.7-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:44a96f2d4c3af51bfac6bc4ef7b182aa33f2f054fd7f34cc0ee9a320d051d41f"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76ac14cd57df0572453543f8f2575e2d01ae9e790c21f57627803f5e79b0d3c3"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bdbb61dcc365dd9be94e8f7df91975edc9364d6a78c8f7adb69c1cdff318ec93"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b48b3db6bb6e0a08fa8c83b47bc169623f801e5cc4f24442ab2b6617da3b5313"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23820a1563a1d386414fef15c249040042b8e5d07b40ab3fe3efbfbbcbcb8864"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0c6a008e91d10a2564edbb6ee5069a9e66df3fbe11c9a005cb411f441fd2c09"}, - {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d352ee8ac1926d6193f602cbe36b1643bbd1bbcb25e3c1a657a4390f3000c9a5"}, - {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d2d9f990623f15c0ae7ac608103c33dfe1486d2ed974ac3f40b693bad1a22a7b"}, - {file = "orjson-3.10.7-cp312-none-win32.whl", hash = "sha256:7c4c17f8157bd520cdb7195f75ddbd31671997cbe10aee559c2d613592e7d7eb"}, - {file = "orjson-3.10.7-cp312-none-win_amd64.whl", hash = "sha256:1d9c0e733e02ada3ed6098a10a8ee0052dd55774de3d9110d29868d24b17faa1"}, - {file = "orjson-3.10.7-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:77d325ed866876c0fa6492598ec01fe30e803272a6e8b10e992288b009cbe149"}, - {file = "orjson-3.10.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ea2c232deedcb605e853ae1db2cc94f7390ac776743b699b50b071b02bea6fe"}, - {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3dcfbede6737fdbef3ce9c37af3fb6142e8e1ebc10336daa05872bfb1d87839c"}, - {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11748c135f281203f4ee695b7f80bb1358a82a63905f9f0b794769483ea854ad"}, - {file = "orjson-3.10.7-cp313-none-win32.whl", hash = "sha256:a7e19150d215c7a13f39eb787d84db274298d3f83d85463e61d277bbd7f401d2"}, - {file = "orjson-3.10.7-cp313-none-win_amd64.whl", hash = "sha256:eef44224729e9525d5261cc8d28d6b11cafc90e6bd0be2157bde69a52ec83024"}, - {file = "orjson-3.10.7-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6ea2b2258eff652c82652d5e0f02bd5e0463a6a52abb78e49ac288827aaa1469"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:430ee4d85841e1483d487e7b81401785a5dfd69db5de01314538f31f8fbf7ee1"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b6146e439af4c2472c56f8540d799a67a81226e11992008cb47e1267a9b3225"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:084e537806b458911137f76097e53ce7bf5806dda33ddf6aaa66a028f8d43a23"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829cf2195838e3f93b70fd3b4292156fc5e097aac3739859ac0dcc722b27ac0"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1193b2416cbad1a769f868b1749535d5da47626ac29445803dae7cc64b3f5c98"}, - {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:4e6c3da13e5a57e4b3dca2de059f243ebec705857522f188f0180ae88badd354"}, - {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c31008598424dfbe52ce8c5b47e0752dca918a4fdc4a2a32004efd9fab41d866"}, - {file = "orjson-3.10.7-cp38-none-win32.whl", hash = "sha256:7122a99831f9e7fe977dc45784d3b2edc821c172d545e6420c375e5a935f5a1c"}, - {file = "orjson-3.10.7-cp38-none-win_amd64.whl", hash = "sha256:a763bc0e58504cc803739e7df040685816145a6f3c8a589787084b54ebc9f16e"}, - {file = "orjson-3.10.7-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e76be12658a6fa376fcd331b1ea4e58f5a06fd0220653450f0d415b8fd0fbe20"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed350d6978d28b92939bfeb1a0570c523f6170efc3f0a0ef1f1df287cd4f4960"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:144888c76f8520e39bfa121b31fd637e18d4cc2f115727865fdf9fa325b10412"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09b2d92fd95ad2402188cf51573acde57eb269eddabaa60f69ea0d733e789fe9"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b24a579123fa884f3a3caadaed7b75eb5715ee2b17ab5c66ac97d29b18fe57f"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591bcfe7512353bd609875ab38050efe3d55e18934e2f18950c108334b4ff"}, - {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f4db56635b58cd1a200b0a23744ff44206ee6aa428185e2b6c4a65b3197abdcd"}, - {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0fa5886854673222618638c6df7718ea7fe2f3f2384c452c9ccedc70b4a510a5"}, - {file = "orjson-3.10.7-cp39-none-win32.whl", hash = "sha256:8272527d08450ab16eb405f47e0f4ef0e5ff5981c3d82afe0efd25dcbef2bcd2"}, - {file = "orjson-3.10.7-cp39-none-win_amd64.whl", hash = "sha256:974683d4618c0c7dbf4f69c95a979734bf183d0658611760017f6e70a145af58"}, - {file = "orjson-3.10.7.tar.gz", hash = "sha256:75ef0640403f945f3a1f9f6400686560dbfb0fb5b16589ad62cd477043c4eee3"}, + {file = "orjson-3.10.11-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6dade64687f2bd7c090281652fe18f1151292d567a9302b34c2dbb92a3872f1f"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82f07c550a6ccd2b9290849b22316a609023ed851a87ea888c0456485a7d196a"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd9a187742d3ead9df2e49240234d728c67c356516cf4db018833a86f20ec18c"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77b0fed6f209d76c1c39f032a70df2d7acf24b1812ca3e6078fd04e8972685a3"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63fc9d5fe1d4e8868f6aae547a7b8ba0a2e592929245fff61d633f4caccdcdd6"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65cd3e3bb4fbb4eddc3c1e8dce10dc0b73e808fcb875f9fab40c81903dd9323e"}, + {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f67c570602300c4befbda12d153113b8974a3340fdcf3d6de095ede86c06d92"}, + {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1f39728c7f7d766f1f5a769ce4d54b5aaa4c3f92d5b84817053cc9995b977acc"}, + {file = "orjson-3.10.11-cp310-none-win32.whl", hash = "sha256:1789d9db7968d805f3d94aae2c25d04014aae3a2fa65b1443117cd462c6da647"}, + {file = "orjson-3.10.11-cp310-none-win_amd64.whl", hash = "sha256:5576b1e5a53a5ba8f8df81872bb0878a112b3ebb1d392155f00f54dd86c83ff6"}, + {file = "orjson-3.10.11-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1444f9cb7c14055d595de1036f74ecd6ce15f04a715e73f33bb6326c9cef01b6"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdec57fe3b4bdebcc08a946db3365630332dbe575125ff3d80a3272ebd0ddafe"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4eed32f33a0ea6ef36ccc1d37f8d17f28a1d6e8eefae5928f76aff8f1df85e67"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80df27dd8697242b904f4ea54820e2d98d3f51f91e97e358fc13359721233e4b"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:705f03cee0cb797256d54de6695ef219e5bc8c8120b6654dd460848d57a9af3d"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03246774131701de8e7059b2e382597da43144a9a7400f178b2a32feafc54bd5"}, + {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8b5759063a6c940a69c728ea70d7c33583991c6982915a839c8da5f957e0103a"}, + {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:677f23e32491520eebb19c99bb34675daf5410c449c13416f7f0d93e2cf5f981"}, + {file = "orjson-3.10.11-cp311-none-win32.whl", hash = "sha256:a11225d7b30468dcb099498296ffac36b4673a8398ca30fdaec1e6c20df6aa55"}, + {file = "orjson-3.10.11-cp311-none-win_amd64.whl", hash = "sha256:df8c677df2f9f385fcc85ab859704045fa88d4668bc9991a527c86e710392bec"}, + {file = "orjson-3.10.11-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:360a4e2c0943da7c21505e47cf6bd725588962ff1d739b99b14e2f7f3545ba51"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:496e2cb45de21c369079ef2d662670a4892c81573bcc143c4205cae98282ba97"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7dfa8db55c9792d53c5952900c6a919cfa377b4f4534c7a786484a6a4a350c19"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51f3382415747e0dbda9dade6f1e1a01a9d37f630d8c9049a8ed0e385b7a90c0"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f35a1b9f50a219f470e0e497ca30b285c9f34948d3c8160d5ad3a755d9299433"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f3b7c5803138e67028dde33450e054c87e0703afbe730c105f1fcd873496d5"}, + {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f91d9eb554310472bd09f5347950b24442600594c2edc1421403d7610a0998fd"}, + {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dfbb2d460a855c9744bbc8e36f9c3a997c4b27d842f3d5559ed54326e6911f9b"}, + {file = "orjson-3.10.11-cp312-none-win32.whl", hash = "sha256:d4a62c49c506d4d73f59514986cadebb7e8d186ad510c518f439176cf8d5359d"}, + {file = "orjson-3.10.11-cp312-none-win_amd64.whl", hash = "sha256:f1eec3421a558ff7a9b010a6c7effcfa0ade65327a71bb9b02a1c3b77a247284"}, + {file = "orjson-3.10.11-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c46294faa4e4d0eb73ab68f1a794d2cbf7bab33b1dda2ac2959ffb7c61591899"}, + {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52e5834d7d6e58a36846e059d00559cb9ed20410664f3ad156cd2cc239a11230"}, + {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2fc947e5350fdce548bfc94f434e8760d5cafa97fb9c495d2fef6757aa02ec0"}, + {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0efabbf839388a1dab5b72b5d3baedbd6039ac83f3b55736eb9934ea5494d258"}, + {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a3f29634260708c200c4fe148e42b4aae97d7b9fee417fbdd74f8cfc265f15b0"}, + {file = "orjson-3.10.11-cp313-none-win32.whl", hash = "sha256:1a1222ffcee8a09476bbdd5d4f6f33d06d0d6642df2a3d78b7a195ca880d669b"}, + {file = "orjson-3.10.11-cp313-none-win_amd64.whl", hash = "sha256:bc274ac261cc69260913b2d1610760e55d3c0801bb3457ba7b9004420b6b4270"}, + {file = "orjson-3.10.11-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:19b3763e8bbf8ad797df6b6b5e0fc7c843ec2e2fc0621398534e0c6400098f87"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be83a13312e5e58d633580c5eb8d0495ae61f180da2722f20562974188af205"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:afacfd1ab81f46dedd7f6001b6d4e8de23396e4884cd3c3436bd05defb1a6446"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb4d0bea56bba596723d73f074c420aec3b2e5d7d30698bc56e6048066bd560c"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96ed1de70fcb15d5fed529a656df29f768187628727ee2788344e8a51e1c1350"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bfb30c891b530f3f80e801e3ad82ef150b964e5c38e1fb8482441c69c35c61c"}, + {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d496c74fc2b61341e3cefda7eec21b7854c5f672ee350bc55d9a4997a8a95204"}, + {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:655a493bac606655db9a47fe94d3d84fc7f3ad766d894197c94ccf0c5408e7d3"}, + {file = "orjson-3.10.11-cp38-none-win32.whl", hash = "sha256:b9546b278c9fb5d45380f4809e11b4dd9844ca7aaf1134024503e134ed226161"}, + {file = "orjson-3.10.11-cp38-none-win_amd64.whl", hash = "sha256:b592597fe551d518f42c5a2eb07422eb475aa8cfdc8c51e6da7054b836b26782"}, + {file = "orjson-3.10.11-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c95f2ecafe709b4e5c733b5e2768ac569bed308623c85806c395d9cca00e08af"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80c00d4acded0c51c98754fe8218cb49cb854f0f7eb39ea4641b7f71732d2cb7"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:461311b693d3d0a060439aa669c74f3603264d4e7a08faa68c47ae5a863f352d"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52ca832f17d86a78cbab86cdc25f8c13756ebe182b6fc1a97d534051c18a08de"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c57ea78a753812f528178aa2f1c57da633754c91d2124cb28991dab4c79a54"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7fcfc6f7ca046383fb954ba528587e0f9336828b568282b27579c49f8e16aad"}, + {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:86b9dd983857970c29e4c71bb3e95ff085c07d3e83e7c46ebe959bac07ebd80b"}, + {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4d83f87582d223e54efb2242a79547611ba4ebae3af8bae1e80fa9a0af83bb7f"}, + {file = "orjson-3.10.11-cp39-none-win32.whl", hash = "sha256:9fd0ad1c129bc9beb1154c2655f177620b5beaf9a11e0d10bac63ef3fce96950"}, + {file = "orjson-3.10.11-cp39-none-win_amd64.whl", hash = "sha256:10f416b2a017c8bd17f325fb9dee1fb5cdd7a54e814284896b7c3f2763faa017"}, + {file = "orjson-3.10.11.tar.gz", hash = "sha256:e35b6d730de6384d5b2dab5fd23f0d76fae8bbc8c353c2f78210aa5fa4beb3ef"}, ] [[package]] @@ -3423,13 +3464,13 @@ files = [ [[package]] name = "packaging" -version = "24.1" +version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, - {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] [[package]] @@ -3535,95 +3576,90 @@ files = [ [[package]] name = "pillow" -version = "10.4.0" +version = "11.0.0" description = "Python Imaging Library (Fork)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"}, - {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"}, - {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856"}, - {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f"}, - {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b"}, - {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc"}, - {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e"}, - {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46"}, - {file = "pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984"}, - {file = "pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141"}, - {file = "pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"}, - {file = "pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c"}, - {file = "pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be"}, - {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3"}, - {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6"}, - {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe"}, - {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319"}, - {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d"}, - {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696"}, - {file = "pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496"}, - {file = "pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91"}, - {file = "pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22"}, - {file = "pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94"}, - {file = "pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597"}, - {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80"}, - {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca"}, - {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef"}, - {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a"}, - {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b"}, - {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9"}, - {file = "pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42"}, - {file = "pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a"}, - {file = "pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9"}, - {file = "pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3"}, - {file = "pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb"}, - {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70"}, - {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be"}, - {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0"}, - {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc"}, - {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a"}, - {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309"}, - {file = "pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060"}, - {file = "pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea"}, - {file = "pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d"}, - {file = "pillow-10.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736"}, - {file = "pillow-10.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b"}, - {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2"}, - {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680"}, - {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b"}, - {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd"}, - {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84"}, - {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0"}, - {file = "pillow-10.4.0-cp38-cp38-win32.whl", hash = "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e"}, - {file = "pillow-10.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab"}, - {file = "pillow-10.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d"}, - {file = "pillow-10.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b"}, - {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd"}, - {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126"}, - {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b"}, - {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c"}, - {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1"}, - {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df"}, - {file = "pillow-10.4.0-cp39-cp39-win32.whl", hash = "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef"}, - {file = "pillow-10.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5"}, - {file = "pillow-10.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3"}, - {file = "pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06"}, + {file = "pillow-11.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947"}, + {file = "pillow-11.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba"}, + {file = "pillow-11.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a65149d8ada1055029fcb665452b2814fe7d7082fcb0c5bed6db851cb69b2086"}, + {file = "pillow-11.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88a58d8ac0cc0e7f3a014509f0455248a76629ca9b604eca7dc5927cc593c5e9"}, + {file = "pillow-11.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:c26845094b1af3c91852745ae78e3ea47abf3dbcd1cf962f16b9a5fbe3ee8488"}, + {file = "pillow-11.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:1a61b54f87ab5786b8479f81c4b11f4d61702830354520837f8cc791ebba0f5f"}, + {file = "pillow-11.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:674629ff60030d144b7bca2b8330225a9b11c482ed408813924619c6f302fdbb"}, + {file = "pillow-11.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:598b4e238f13276e0008299bd2482003f48158e2b11826862b1eb2ad7c768b97"}, + {file = "pillow-11.0.0-cp310-cp310-win32.whl", hash = "sha256:9a0f748eaa434a41fccf8e1ee7a3eed68af1b690e75328fd7a60af123c193b50"}, + {file = "pillow-11.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:a5629742881bcbc1f42e840af185fd4d83a5edeb96475a575f4da50d6ede337c"}, + {file = "pillow-11.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:ee217c198f2e41f184f3869f3e485557296d505b5195c513b2bfe0062dc537f1"}, + {file = "pillow-11.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1c1d72714f429a521d8d2d018badc42414c3077eb187a59579f28e4270b4b0fc"}, + {file = "pillow-11.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:499c3a1b0d6fc8213519e193796eb1a86a1be4b1877d678b30f83fd979811d1a"}, + {file = "pillow-11.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8b2351c85d855293a299038e1f89db92a2f35e8d2f783489c6f0b2b5f3fe8a3"}, + {file = "pillow-11.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f4dba50cfa56f910241eb7f883c20f1e7b1d8f7d91c750cd0b318bad443f4d5"}, + {file = "pillow-11.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:5ddbfd761ee00c12ee1be86c9c0683ecf5bb14c9772ddbd782085779a63dd55b"}, + {file = "pillow-11.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:45c566eb10b8967d71bf1ab8e4a525e5a93519e29ea071459ce517f6b903d7fa"}, + {file = "pillow-11.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b4fd7bd29610a83a8c9b564d457cf5bd92b4e11e79a4ee4716a63c959699b306"}, + {file = "pillow-11.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cb929ca942d0ec4fac404cbf520ee6cac37bf35be479b970c4ffadf2b6a1cad9"}, + {file = "pillow-11.0.0-cp311-cp311-win32.whl", hash = "sha256:006bcdd307cc47ba43e924099a038cbf9591062e6c50e570819743f5607404f5"}, + {file = "pillow-11.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:52a2d8323a465f84faaba5236567d212c3668f2ab53e1c74c15583cf507a0291"}, + {file = "pillow-11.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:16095692a253047fe3ec028e951fa4221a1f3ed3d80c397e83541a3037ff67c9"}, + {file = "pillow-11.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d2c0a187a92a1cb5ef2c8ed5412dd8d4334272617f532d4ad4de31e0495bd923"}, + {file = "pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:084a07ef0821cfe4858fe86652fffac8e187b6ae677e9906e192aafcc1b69903"}, + {file = "pillow-11.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8069c5179902dcdce0be9bfc8235347fdbac249d23bd90514b7a47a72d9fecf4"}, + {file = "pillow-11.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f02541ef64077f22bf4924f225c0fd1248c168f86e4b7abdedd87d6ebaceab0f"}, + {file = "pillow-11.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fcb4621042ac4b7865c179bb972ed0da0218a076dc1820ffc48b1d74c1e37fe9"}, + {file = "pillow-11.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:00177a63030d612148e659b55ba99527803288cea7c75fb05766ab7981a8c1b7"}, + {file = "pillow-11.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8853a3bf12afddfdf15f57c4b02d7ded92c7a75a5d7331d19f4f9572a89c17e6"}, + {file = "pillow-11.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3107c66e43bda25359d5ef446f59c497de2b5ed4c7fdba0894f8d6cf3822dafc"}, + {file = "pillow-11.0.0-cp312-cp312-win32.whl", hash = "sha256:86510e3f5eca0ab87429dd77fafc04693195eec7fd6a137c389c3eeb4cfb77c6"}, + {file = "pillow-11.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:8ec4a89295cd6cd4d1058a5e6aec6bf51e0eaaf9714774e1bfac7cfc9051db47"}, + {file = "pillow-11.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:27a7860107500d813fcd203b4ea19b04babe79448268403172782754870dac25"}, + {file = "pillow-11.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bcd1fb5bb7b07f64c15618c89efcc2cfa3e95f0e3bcdbaf4642509de1942a699"}, + {file = "pillow-11.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0e038b0745997c7dcaae350d35859c9715c71e92ffb7e0f4a8e8a16732150f38"}, + {file = "pillow-11.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ae08bd8ffc41aebf578c2af2f9d8749d91f448b3bfd41d7d9ff573d74f2a6b2"}, + {file = "pillow-11.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d69bfd8ec3219ae71bcde1f942b728903cad25fafe3100ba2258b973bd2bc1b2"}, + {file = "pillow-11.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:61b887f9ddba63ddf62fd02a3ba7add935d053b6dd7d58998c630e6dbade8527"}, + {file = "pillow-11.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:c6a660307ca9d4867caa8d9ca2c2658ab685de83792d1876274991adec7b93fa"}, + {file = "pillow-11.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:73e3a0200cdda995c7e43dd47436c1548f87a30bb27fb871f352a22ab8dcf45f"}, + {file = "pillow-11.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fba162b8872d30fea8c52b258a542c5dfd7b235fb5cb352240c8d63b414013eb"}, + {file = "pillow-11.0.0-cp313-cp313-win32.whl", hash = "sha256:f1b82c27e89fffc6da125d5eb0ca6e68017faf5efc078128cfaa42cf5cb38798"}, + {file = "pillow-11.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:8ba470552b48e5835f1d23ecb936bb7f71d206f9dfeee64245f30c3270b994de"}, + {file = "pillow-11.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:846e193e103b41e984ac921b335df59195356ce3f71dcfd155aa79c603873b84"}, + {file = "pillow-11.0.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4ad70c4214f67d7466bea6a08061eba35c01b1b89eaa098040a35272a8efb22b"}, + {file = "pillow-11.0.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:6ec0d5af64f2e3d64a165f490d96368bb5dea8b8f9ad04487f9ab60dc4bb6003"}, + {file = "pillow-11.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c809a70e43c7977c4a42aefd62f0131823ebf7dd73556fa5d5950f5b354087e2"}, + {file = "pillow-11.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:4b60c9520f7207aaf2e1d94de026682fc227806c6e1f55bba7606d1c94dd623a"}, + {file = "pillow-11.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:1e2688958a840c822279fda0086fec1fdab2f95bf2b717b66871c4ad9859d7e8"}, + {file = "pillow-11.0.0-cp313-cp313t-win32.whl", hash = "sha256:607bbe123c74e272e381a8d1957083a9463401f7bd01287f50521ecb05a313f8"}, + {file = "pillow-11.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5c39ed17edea3bc69c743a8dd3e9853b7509625c2462532e62baa0732163a904"}, + {file = "pillow-11.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:75acbbeb05b86bc53cbe7b7e6fe00fbcf82ad7c684b3ad82e3d711da9ba287d3"}, + {file = "pillow-11.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2e46773dc9f35a1dd28bd6981332fd7f27bec001a918a72a79b4133cf5291dba"}, + {file = "pillow-11.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2679d2258b7f1192b378e2893a8a0a0ca472234d4c2c0e6bdd3380e8dfa21b6a"}, + {file = "pillow-11.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda2616eb2313cbb3eebbe51f19362eb434b18e3bb599466a1ffa76a033fb916"}, + {file = "pillow-11.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ec184af98a121fb2da42642dea8a29ec80fc3efbaefb86d8fdd2606619045d"}, + {file = "pillow-11.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:8594f42df584e5b4bb9281799698403f7af489fba84c34d53d1c4bfb71b7c4e7"}, + {file = "pillow-11.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:c12b5ae868897c7338519c03049a806af85b9b8c237b7d675b8c5e089e4a618e"}, + {file = "pillow-11.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:70fbbdacd1d271b77b7721fe3cdd2d537bbbd75d29e6300c672ec6bb38d9672f"}, + {file = "pillow-11.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5178952973e588b3f1360868847334e9e3bf49d19e169bbbdfaf8398002419ae"}, + {file = "pillow-11.0.0-cp39-cp39-win32.whl", hash = "sha256:8c676b587da5673d3c75bd67dd2a8cdfeb282ca38a30f37950511766b26858c4"}, + {file = "pillow-11.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:94f3e1780abb45062287b4614a5bc0874519c86a777d4a7ad34978e86428b8dd"}, + {file = "pillow-11.0.0-cp39-cp39-win_arm64.whl", hash = "sha256:290f2cc809f9da7d6d622550bbf4c1e57518212da51b6a30fe8e0a270a5b78bd"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1187739620f2b365de756ce086fdb3604573337cc28a0d3ac4a01ab6b2d2a6d2"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fbbcb7b57dc9c794843e3d1258c0fbf0f48656d46ffe9e09b63bbd6e8cd5d0a2"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d203af30149ae339ad1b4f710d9844ed8796e97fda23ffbc4cc472968a47d0b"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a0d3b115009ebb8ac3d2ebec5c2982cc693da935f4ab7bb5c8ebe2f47d36f2"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:73853108f56df97baf2bb8b522f3578221e56f646ba345a372c78326710d3830"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e58876c91f97b0952eb766123bfef372792ab3f4e3e1f1a2267834c2ab131734"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:224aaa38177597bb179f3ec87eeefcce8e4f85e608025e9cfac60de237ba6316"}, + {file = "pillow-11.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5bd2d3bdb846d757055910f0a59792d33b555800813c3b39ada1829c372ccb06"}, + {file = "pillow-11.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:375b8dd15a1f5d2feafff536d47e22f69625c1aa92f12b339ec0b2ca40263273"}, + {file = "pillow-11.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:daffdf51ee5db69a82dd127eabecce20729e21f7a3680cf7cbb23f0829189790"}, + {file = "pillow-11.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7326a1787e3c7b0429659e0a944725e1b03eeaa10edd945a86dead1913383944"}, + {file = "pillow-11.0.0.tar.gz", hash = "sha256:72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739"}, ] [package.extras] -docs = ["furo", "olefile", "sphinx (>=7.3)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] +docs = ["furo", "olefile", "sphinx (>=8.1)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] fpx = ["olefile"] mic = ["olefile"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] @@ -3663,13 +3699,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "posthog" -version = "3.6.6" +version = "3.7.2" description = "Integrate PostHog into any python application." optional = false python-versions = "*" files = [ - {file = "posthog-3.6.6-py2.py3-none-any.whl", hash = "sha256:38834fd7f0732582a20d4eb4674c8d5c088e464d14d1b3f8c176e389aecaa4ef"}, - {file = "posthog-3.6.6.tar.gz", hash = "sha256:1e04783293117109189ad7048f3eedbe21caff0e39bee5e2d47a93dd790fefac"}, + {file = "posthog-3.7.2-py2.py3-none-any.whl", hash = "sha256:28bfc9d0b93956586067346c87d11d060fdc186159e9c700c375cab5c52402f8"}, + {file = "posthog-3.7.2.tar.gz", hash = "sha256:49e2bca912a20e5bf83e28ec199917a6d4e74188666c9c62f89c573bfbfe804d"}, ] [package.dependencies] @@ -3686,13 +3722,13 @@ test = ["coverage", "django", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)" [[package]] name = "prettytable" -version = "3.11.0" +version = "3.12.0" description = "A simple Python library for easily displaying tabular data in a visually appealing ASCII table format" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "prettytable-3.11.0-py3-none-any.whl", hash = "sha256:aa17083feb6c71da11a68b2c213b04675c4af4ce9c541762632ca3f2cb3546dd"}, - {file = "prettytable-3.11.0.tar.gz", hash = "sha256:7e23ca1e68bbfd06ba8de98bf553bf3493264c96d5e8a615c0471025deeba722"}, + {file = "prettytable-3.12.0-py3-none-any.whl", hash = "sha256:77ca0ad1c435b6e363d7e8623d7cc4fcf2cf15513bf77a1c1b2e814930ac57cc"}, + {file = "prettytable-3.12.0.tar.gz", hash = "sha256:f04b3e1ba35747ac86e96ec33e3bb9748ce08e254dc2a1c6253945901beec804"}, ] [package.dependencies] @@ -3703,27 +3739,134 @@ tests = ["pytest", "pytest-cov", "pytest-lazy-fixtures"] [[package]] name = "prompt-toolkit" -version = "3.0.47" +version = "3.0.48" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.47-py3-none-any.whl", hash = "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10"}, - {file = "prompt_toolkit-3.0.47.tar.gz", hash = "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360"}, + {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, + {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, ] [package.dependencies] wcwidth = "*" +[[package]] +name = "propcache" +version = "0.2.0" +description = "Accelerated property cache" +optional = false +python-versions = ">=3.8" +files = [ + {file = "propcache-0.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c5869b8fd70b81835a6f187c5fdbe67917a04d7e52b6e7cc4e5fe39d55c39d58"}, + {file = "propcache-0.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:952e0d9d07609d9c5be361f33b0d6d650cd2bae393aabb11d9b719364521984b"}, + {file = "propcache-0.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:33ac8f098df0585c0b53009f039dfd913b38c1d2edafed0cedcc0c32a05aa110"}, + {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97e48e8875e6c13909c800fa344cd54cc4b2b0db1d5f911f840458a500fde2c2"}, + {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:388f3217649d6d59292b722d940d4d2e1e6a7003259eb835724092a1cca0203a"}, + {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f571aea50ba5623c308aa146eb650eebf7dbe0fd8c5d946e28343cb3b5aad577"}, + {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3dfafb44f7bb35c0c06eda6b2ab4bfd58f02729e7c4045e179f9a861b07c9850"}, + {file = "propcache-0.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3ebe9a75be7ab0b7da2464a77bb27febcb4fab46a34f9288f39d74833db7f61"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d2f0d0f976985f85dfb5f3d685697ef769faa6b71993b46b295cdbbd6be8cc37"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a3dc1a4b165283bd865e8f8cb5f0c64c05001e0718ed06250d8cac9bec115b48"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9e0f07b42d2a50c7dd2d8675d50f7343d998c64008f1da5fef888396b7f84630"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e63e3e1e0271f374ed489ff5ee73d4b6e7c60710e1f76af5f0e1a6117cd26394"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:56bb5c98f058a41bb58eead194b4db8c05b088c93d94d5161728515bd52b052b"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7665f04d0c7f26ff8bb534e1c65068409bf4687aa2534faf7104d7182debb336"}, + {file = "propcache-0.2.0-cp310-cp310-win32.whl", hash = "sha256:7cf18abf9764746b9c8704774d8b06714bcb0a63641518a3a89c7f85cc02c2ad"}, + {file = "propcache-0.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:cfac69017ef97db2438efb854edf24f5a29fd09a536ff3a992b75990720cdc99"}, + {file = "propcache-0.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:63f13bf09cc3336eb04a837490b8f332e0db41da66995c9fd1ba04552e516354"}, + {file = "propcache-0.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608cce1da6f2672a56b24a015b42db4ac612ee709f3d29f27a00c943d9e851de"}, + {file = "propcache-0.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:466c219deee4536fbc83c08d09115249db301550625c7fef1c5563a584c9bc87"}, + {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc2db02409338bf36590aa985a461b2c96fce91f8e7e0f14c50c5fcc4f229016"}, + {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a6ed8db0a556343d566a5c124ee483ae113acc9a557a807d439bcecc44e7dfbb"}, + {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91997d9cb4a325b60d4e3f20967f8eb08dfcb32b22554d5ef78e6fd1dda743a2"}, + {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c7dde9e533c0a49d802b4f3f218fa9ad0a1ce21f2c2eb80d5216565202acab4"}, + {file = "propcache-0.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffcad6c564fe6b9b8916c1aefbb37a362deebf9394bd2974e9d84232e3e08504"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:97a58a28bcf63284e8b4d7b460cbee1edaab24634e82059c7b8c09e65284f178"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:945db8ee295d3af9dbdbb698cce9bbc5c59b5c3fe328bbc4387f59a8a35f998d"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:39e104da444a34830751715f45ef9fc537475ba21b7f1f5b0f4d71a3b60d7fe2"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c5ecca8f9bab618340c8e848d340baf68bcd8ad90a8ecd7a4524a81c1764b3db"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c436130cc779806bdf5d5fae0d848713105472b8566b75ff70048c47d3961c5b"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:191db28dc6dcd29d1a3e063c3be0b40688ed76434622c53a284e5427565bbd9b"}, + {file = "propcache-0.2.0-cp311-cp311-win32.whl", hash = "sha256:5f2564ec89058ee7c7989a7b719115bdfe2a2fb8e7a4543b8d1c0cc4cf6478c1"}, + {file = "propcache-0.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6e2e54267980349b723cff366d1e29b138b9a60fa376664a157a342689553f71"}, + {file = "propcache-0.2.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2ee7606193fb267be4b2e3b32714f2d58cad27217638db98a60f9efb5efeccc2"}, + {file = "propcache-0.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:91ee8fc02ca52e24bcb77b234f22afc03288e1dafbb1f88fe24db308910c4ac7"}, + {file = "propcache-0.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2e900bad2a8456d00a113cad8c13343f3b1f327534e3589acc2219729237a2e8"}, + {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f52a68c21363c45297aca15561812d542f8fc683c85201df0bebe209e349f793"}, + {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e41d67757ff4fbc8ef2af99b338bfb955010444b92929e9e55a6d4dcc3c4f09"}, + {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a64e32f8bd94c105cc27f42d3b658902b5bcc947ece3c8fe7bc1b05982f60e89"}, + {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55346705687dbd7ef0d77883ab4f6fabc48232f587925bdaf95219bae072491e"}, + {file = "propcache-0.2.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00181262b17e517df2cd85656fcd6b4e70946fe62cd625b9d74ac9977b64d8d9"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6994984550eaf25dd7fc7bd1b700ff45c894149341725bb4edc67f0ffa94efa4"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:56295eb1e5f3aecd516d91b00cfd8bf3a13991de5a479df9e27dd569ea23959c"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:439e76255daa0f8151d3cb325f6dd4a3e93043e6403e6491813bcaaaa8733887"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f6475a1b2ecb310c98c28d271a30df74f9dd436ee46d09236a6b750a7599ce57"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3444cdba6628accf384e349014084b1cacd866fbb88433cd9d279d90a54e0b23"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4a9d9b4d0a9b38d1c391bb4ad24aa65f306c6f01b512e10a8a34a2dc5675d348"}, + {file = "propcache-0.2.0-cp312-cp312-win32.whl", hash = "sha256:69d3a98eebae99a420d4b28756c8ce6ea5a29291baf2dc9ff9414b42676f61d5"}, + {file = "propcache-0.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:ad9c9b99b05f163109466638bd30ada1722abb01bbb85c739c50b6dc11f92dc3"}, + {file = "propcache-0.2.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ecddc221a077a8132cf7c747d5352a15ed763b674c0448d811f408bf803d9ad7"}, + {file = "propcache-0.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0e53cb83fdd61cbd67202735e6a6687a7b491c8742dfc39c9e01e80354956763"}, + {file = "propcache-0.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92fe151145a990c22cbccf9ae15cae8ae9eddabfc949a219c9f667877e40853d"}, + {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6a21ef516d36909931a2967621eecb256018aeb11fc48656e3257e73e2e247a"}, + {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f88a4095e913f98988f5b338c1d4d5d07dbb0b6bad19892fd447484e483ba6b"}, + {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a5b3bb545ead161be780ee85a2b54fdf7092815995661947812dde94a40f6fb"}, + {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67aeb72e0f482709991aa91345a831d0b707d16b0257e8ef88a2ad246a7280bf"}, + {file = "propcache-0.2.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c997f8c44ec9b9b0bcbf2d422cc00a1d9b9c681f56efa6ca149a941e5560da2"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2a66df3d4992bc1d725b9aa803e8c5a66c010c65c741ad901e260ece77f58d2f"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3ebbcf2a07621f29638799828b8d8668c421bfb94c6cb04269130d8de4fb7136"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1235c01ddaa80da8235741e80815ce381c5267f96cc49b1477fdcf8c047ef325"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3947483a381259c06921612550867b37d22e1df6d6d7e8361264b6d037595f44"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d5bed7f9805cc29c780f3aee05de3262ee7ce1f47083cfe9f77471e9d6777e83"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e4a91d44379f45f5e540971d41e4626dacd7f01004826a18cb048e7da7e96544"}, + {file = "propcache-0.2.0-cp313-cp313-win32.whl", hash = "sha256:f902804113e032e2cdf8c71015651c97af6418363bea8d78dc0911d56c335032"}, + {file = "propcache-0.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:8f188cfcc64fb1266f4684206c9de0e80f54622c3f22a910cbd200478aeae61e"}, + {file = "propcache-0.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:53d1bd3f979ed529f0805dd35ddaca330f80a9a6d90bc0121d2ff398f8ed8861"}, + {file = "propcache-0.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:83928404adf8fb3d26793665633ea79b7361efa0287dfbd372a7e74311d51ee6"}, + {file = "propcache-0.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:77a86c261679ea5f3896ec060be9dc8e365788248cc1e049632a1be682442063"}, + {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:218db2a3c297a3768c11a34812e63b3ac1c3234c3a086def9c0fee50d35add1f"}, + {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7735e82e3498c27bcb2d17cb65d62c14f1100b71723b68362872bca7d0913d90"}, + {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:20a617c776f520c3875cf4511e0d1db847a076d720714ae35ffe0df3e440be68"}, + {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67b69535c870670c9f9b14a75d28baa32221d06f6b6fa6f77a0a13c5a7b0a5b9"}, + {file = "propcache-0.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4569158070180c3855e9c0791c56be3ceeb192defa2cdf6a3f39e54319e56b89"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:db47514ffdbd91ccdc7e6f8407aac4ee94cc871b15b577c1c324236b013ddd04"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:2a60ad3e2553a74168d275a0ef35e8c0a965448ffbc3b300ab3a5bb9956c2162"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:662dd62358bdeaca0aee5761de8727cfd6861432e3bb828dc2a693aa0471a563"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:25a1f88b471b3bc911d18b935ecb7115dff3a192b6fef46f0bfaf71ff4f12418"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:f60f0ac7005b9f5a6091009b09a419ace1610e163fa5deaba5ce3484341840e7"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:74acd6e291f885678631b7ebc85d2d4aec458dd849b8c841b57ef04047833bed"}, + {file = "propcache-0.2.0-cp38-cp38-win32.whl", hash = "sha256:d9b6ddac6408194e934002a69bcaadbc88c10b5f38fb9307779d1c629181815d"}, + {file = "propcache-0.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:676135dcf3262c9c5081cc8f19ad55c8a64e3f7282a21266d05544450bffc3a5"}, + {file = "propcache-0.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:25c8d773a62ce0451b020c7b29a35cfbc05de8b291163a7a0f3b7904f27253e6"}, + {file = "propcache-0.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:375a12d7556d462dc64d70475a9ee5982465fbb3d2b364f16b86ba9135793638"}, + {file = "propcache-0.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1ec43d76b9677637a89d6ab86e1fef70d739217fefa208c65352ecf0282be957"}, + {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f45eec587dafd4b2d41ac189c2156461ebd0c1082d2fe7013571598abb8505d1"}, + {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc092ba439d91df90aea38168e11f75c655880c12782facf5cf9c00f3d42b562"}, + {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fa1076244f54bb76e65e22cb6910365779d5c3d71d1f18b275f1dfc7b0d71b4d"}, + {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:682a7c79a2fbf40f5dbb1eb6bfe2cd865376deeac65acf9beb607505dced9e12"}, + {file = "propcache-0.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e40876731f99b6f3c897b66b803c9e1c07a989b366c6b5b475fafd1f7ba3fb8"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:363ea8cd3c5cb6679f1c2f5f1f9669587361c062e4899fce56758efa928728f8"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:140fbf08ab3588b3468932974a9331aff43c0ab8a2ec2c608b6d7d1756dbb6cb"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e70fac33e8b4ac63dfc4c956fd7d85a0b1139adcfc0d964ce288b7c527537fea"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b33d7a286c0dc1a15f5fc864cc48ae92a846df287ceac2dd499926c3801054a6"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:f6d5749fdd33d90e34c2efb174c7e236829147a2713334d708746e94c4bde40d"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22aa8f2272d81d9317ff5756bb108021a056805ce63dd3630e27d042c8092798"}, + {file = "propcache-0.2.0-cp39-cp39-win32.whl", hash = "sha256:73e4b40ea0eda421b115248d7e79b59214411109a5bc47d0d48e4c73e3b8fcf9"}, + {file = "propcache-0.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:9517d5e9e0731957468c29dbfd0f976736a0e55afaea843726e887f36fe017df"}, + {file = "propcache-0.2.0-py3-none-any.whl", hash = "sha256:2ccc28197af5313706511fab3a8b66dcd6da067a1331372c82ea1cb74285e036"}, + {file = "propcache-0.2.0.tar.gz", hash = "sha256:df81779732feb9d01e5d513fad0122efb3d53bbc75f61b2a4f29a020bc985e70"}, +] + [[package]] name = "proto-plus" -version = "1.24.0" +version = "1.25.0" description = "Beautiful, Pythonic protocol buffers." optional = false python-versions = ">=3.7" files = [ - {file = "proto-plus-1.24.0.tar.gz", hash = "sha256:30b72a5ecafe4406b0d339db35b56c4059064e69227b8c3bda7462397f966445"}, - {file = "proto_plus-1.24.0-py3-none-any.whl", hash = "sha256:402576830425e5f6ce4c2a6702400ac79897dab0b4343821aa5188b0fab81a12"}, + {file = "proto_plus-1.25.0-py3-none-any.whl", hash = "sha256:c91fc4a65074ade8e458e95ef8bac34d4008daa7cce4a12d6707066fca648961"}, + {file = "proto_plus-1.25.0.tar.gz", hash = "sha256:fbb17f57f7bd05a68b7707e745e26528b0b3c34e378db91eef93912c54982d91"}, ] [package.dependencies] @@ -3734,22 +3877,22 @@ testing = ["google-api-core (>=1.31.5)"] [[package]] name = "protobuf" -version = "4.25.5" +version = "5.28.3" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "protobuf-4.25.5-cp310-abi3-win32.whl", hash = "sha256:5e61fd921603f58d2f5acb2806a929b4675f8874ff5f330b7d6f7e2e784bbcd8"}, - {file = "protobuf-4.25.5-cp310-abi3-win_amd64.whl", hash = "sha256:4be0571adcbe712b282a330c6e89eae24281344429ae95c6d85e79e84780f5ea"}, - {file = "protobuf-4.25.5-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:b2fde3d805354df675ea4c7c6338c1aecd254dfc9925e88c6d31a2bcb97eb173"}, - {file = "protobuf-4.25.5-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:919ad92d9b0310070f8356c24b855c98df2b8bd207ebc1c0c6fcc9ab1e007f3d"}, - {file = "protobuf-4.25.5-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:fe14e16c22be926d3abfcb500e60cab068baf10b542b8c858fa27e098123e331"}, - {file = "protobuf-4.25.5-cp38-cp38-win32.whl", hash = "sha256:98d8d8aa50de6a2747efd9cceba361c9034050ecce3e09136f90de37ddba66e1"}, - {file = "protobuf-4.25.5-cp38-cp38-win_amd64.whl", hash = "sha256:b0234dd5a03049e4ddd94b93400b67803c823cfc405689688f59b34e0742381a"}, - {file = "protobuf-4.25.5-cp39-cp39-win32.whl", hash = "sha256:abe32aad8561aa7cc94fc7ba4fdef646e576983edb94a73381b03c53728a626f"}, - {file = "protobuf-4.25.5-cp39-cp39-win_amd64.whl", hash = "sha256:7a183f592dc80aa7c8da7ad9e55091c4ffc9497b3054452d629bb85fa27c2a45"}, - {file = "protobuf-4.25.5-py3-none-any.whl", hash = "sha256:0aebecb809cae990f8129ada5ca273d9d670b76d9bfc9b1809f0a9c02b7dbf41"}, - {file = "protobuf-4.25.5.tar.gz", hash = "sha256:7f8249476b4a9473645db7f8ab42b02fe1488cbe5fb72fddd445e0665afd8584"}, + {file = "protobuf-5.28.3-cp310-abi3-win32.whl", hash = "sha256:0c4eec6f987338617072592b97943fdbe30d019c56126493111cf24344c1cc24"}, + {file = "protobuf-5.28.3-cp310-abi3-win_amd64.whl", hash = "sha256:91fba8f445723fcf400fdbe9ca796b19d3b1242cd873907979b9ed71e4afe868"}, + {file = "protobuf-5.28.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:a3f6857551e53ce35e60b403b8a27b0295f7d6eb63d10484f12bc6879c715687"}, + {file = "protobuf-5.28.3-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:3fa2de6b8b29d12c61911505d893afe7320ce7ccba4df913e2971461fa36d584"}, + {file = "protobuf-5.28.3-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:712319fbdddb46f21abb66cd33cb9e491a5763b2febd8f228251add221981135"}, + {file = "protobuf-5.28.3-cp38-cp38-win32.whl", hash = "sha256:3e6101d095dfd119513cde7259aa703d16c6bbdfae2554dfe5cfdbe94e32d548"}, + {file = "protobuf-5.28.3-cp38-cp38-win_amd64.whl", hash = "sha256:27b246b3723692bf1068d5734ddaf2fccc2cdd6e0c9b47fe099244d80200593b"}, + {file = "protobuf-5.28.3-cp39-cp39-win32.whl", hash = "sha256:135658402f71bbd49500322c0f736145731b16fc79dc8f367ab544a17eab4535"}, + {file = "protobuf-5.28.3-cp39-cp39-win_amd64.whl", hash = "sha256:70585a70fc2dd4818c51287ceef5bdba6387f88a578c86d47bb34669b5552c36"}, + {file = "protobuf-5.28.3-py3-none-any.whl", hash = "sha256:cee1757663fa32a1ee673434fcf3bf24dd54763c79690201208bafec62f19eed"}, + {file = "protobuf-5.28.3.tar.gz", hash = "sha256:64badbc49180a5e401f373f9ce7ab1d18b63f7dd4a9cdc43c92b9f0b481cef7b"}, ] [[package]] @@ -3878,19 +4021,19 @@ files = [ [[package]] name = "pydantic" -version = "2.9.2" +version = "2.10.1" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12"}, - {file = "pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f"}, + {file = "pydantic-2.10.1-py3-none-any.whl", hash = "sha256:a8d20db84de64cf4a7d59e899c2caf0fe9d660c7cfc482528e7020d7dd189a7e"}, + {file = "pydantic-2.10.1.tar.gz", hash = "sha256:a4daca2dc0aa429555e0656d6bf94873a7dc5f54ee42b1f5873d666fb3f35560"}, ] [package.dependencies] annotated-types = ">=0.6.0" -pydantic-core = "2.23.4" -typing-extensions = {version = ">=4.6.1", markers = "python_version < \"3.13\""} +pydantic-core = "2.27.1" +typing-extensions = ">=4.12.2" [package.extras] email = ["email-validator (>=2.0.0)"] @@ -3898,100 +4041,111 @@ timezone = ["tzdata"] [[package]] name = "pydantic-core" -version = "2.23.4" +version = "2.27.1" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.23.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b"}, - {file = "pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f"}, - {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3"}, - {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071"}, - {file = "pydantic_core-2.23.4-cp310-none-win32.whl", hash = "sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119"}, - {file = "pydantic_core-2.23.4-cp310-none-win_amd64.whl", hash = "sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f"}, - {file = "pydantic_core-2.23.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8"}, - {file = "pydantic_core-2.23.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b"}, - {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0"}, - {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64"}, - {file = "pydantic_core-2.23.4-cp311-none-win32.whl", hash = "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f"}, - {file = "pydantic_core-2.23.4-cp311-none-win_amd64.whl", hash = "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3"}, - {file = "pydantic_core-2.23.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231"}, - {file = "pydantic_core-2.23.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126"}, - {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e"}, - {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24"}, - {file = "pydantic_core-2.23.4-cp312-none-win32.whl", hash = "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84"}, - {file = "pydantic_core-2.23.4-cp312-none-win_amd64.whl", hash = "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9"}, - {file = "pydantic_core-2.23.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc"}, - {file = "pydantic_core-2.23.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327"}, - {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6"}, - {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f"}, - {file = "pydantic_core-2.23.4-cp313-none-win32.whl", hash = "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769"}, - {file = "pydantic_core-2.23.4-cp313-none-win_amd64.whl", hash = "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5"}, - {file = "pydantic_core-2.23.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d4488a93b071c04dc20f5cecc3631fc78b9789dd72483ba15d423b5b3689b555"}, - {file = "pydantic_core-2.23.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:81965a16b675b35e1d09dd14df53f190f9129c0202356ed44ab2728b1c905658"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ffa2ebd4c8530079140dd2d7f794a9d9a73cbb8e9d59ffe24c63436efa8f271"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61817945f2fe7d166e75fbfb28004034b48e44878177fc54d81688e7b85a3665"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29d2c342c4bc01b88402d60189f3df065fb0dda3654744d5a165a5288a657368"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e11661ce0fd30a6790e8bcdf263b9ec5988e95e63cf901972107efc49218b13"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d18368b137c6295db49ce7218b1a9ba15c5bc254c96d7c9f9e924a9bc7825ad"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec4e55f79b1c4ffb2eecd8a0cfba9955a2588497d96851f4c8f99aa4a1d39b12"}, - {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:374a5e5049eda9e0a44c696c7ade3ff355f06b1fe0bb945ea3cac2bc336478a2"}, - {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5c364564d17da23db1106787675fc7af45f2f7b58b4173bfdd105564e132e6fb"}, - {file = "pydantic_core-2.23.4-cp38-none-win32.whl", hash = "sha256:d7a80d21d613eec45e3d41eb22f8f94ddc758a6c4720842dc74c0581f54993d6"}, - {file = "pydantic_core-2.23.4-cp38-none-win_amd64.whl", hash = "sha256:5f5ff8d839f4566a474a969508fe1c5e59c31c80d9e140566f9a37bba7b8d556"}, - {file = "pydantic_core-2.23.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a4fa4fc04dff799089689f4fd502ce7d59de529fc2f40a2c8836886c03e0175a"}, - {file = "pydantic_core-2.23.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7df63886be5e270da67e0966cf4afbae86069501d35c8c1b3b6c168f42cb36"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcedcd19a557e182628afa1d553c3895a9f825b936415d0dbd3cd0bbcfd29b4b"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f54b118ce5de9ac21c363d9b3caa6c800341e8c47a508787e5868c6b79c9323"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86d2f57d3e1379a9525c5ab067b27dbb8a0642fb5d454e17a9ac434f9ce523e3"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de6d1d1b9e5101508cb37ab0d972357cac5235f5c6533d1071964c47139257df"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1278e0d324f6908e872730c9102b0112477a7f7cf88b308e4fc36ce1bdb6d58c"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a6b5099eeec78827553827f4c6b8615978bb4b6a88e5d9b93eddf8bb6790f55"}, - {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e55541f756f9b3ee346b840103f32779c695a19826a4c442b7954550a0972040"}, - {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a5c7ba8ffb6d6f8f2ab08743be203654bb1aaa8c9dcb09f82ddd34eadb695605"}, - {file = "pydantic_core-2.23.4-cp39-none-win32.whl", hash = "sha256:37b0fe330e4a58d3c58b24d91d1eb102aeec675a3db4c292ec3928ecd892a9a6"}, - {file = "pydantic_core-2.23.4-cp39-none-win_amd64.whl", hash = "sha256:1498bec4c05c9c787bde9125cfdcc63a41004ff167f495063191b863399b1a29"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:78ddaaa81421a29574a682b3179d4cf9e6d405a09b99d93ddcf7e5239c742e21"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:883a91b5dd7d26492ff2f04f40fbb652de40fcc0afe07e8129e8ae779c2110eb"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88ad334a15b32a791ea935af224b9de1bf99bcd62fabf745d5f3442199d86d59"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:233710f069d251feb12a56da21e14cca67994eab08362207785cf8c598e74577"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:19442362866a753485ba5e4be408964644dd6a09123d9416c54cd49171f50744"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:624e278a7d29b6445e4e813af92af37820fafb6dcc55c012c834f9e26f9aaaef"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f5ef8f42bec47f21d07668a043f077d507e5bf4e668d5c6dfe6aaba89de1a5b8"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:aea443fffa9fbe3af1a9ba721a87f926fe548d32cab71d188a6ede77d0ff244e"}, - {file = "pydantic_core-2.23.4.tar.gz", hash = "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863"}, + {file = "pydantic_core-2.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a"}, + {file = "pydantic_core-2.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206"}, + {file = "pydantic_core-2.27.1-cp310-none-win32.whl", hash = "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c"}, + {file = "pydantic_core-2.27.1-cp310-none-win_amd64.whl", hash = "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17"}, + {file = "pydantic_core-2.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8"}, + {file = "pydantic_core-2.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc"}, + {file = "pydantic_core-2.27.1-cp311-none-win32.whl", hash = "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9"}, + {file = "pydantic_core-2.27.1-cp311-none-win_amd64.whl", hash = "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5"}, + {file = "pydantic_core-2.27.1-cp311-none-win_arm64.whl", hash = "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89"}, + {file = "pydantic_core-2.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f"}, + {file = "pydantic_core-2.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae"}, + {file = "pydantic_core-2.27.1-cp312-none-win32.whl", hash = "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c"}, + {file = "pydantic_core-2.27.1-cp312-none-win_amd64.whl", hash = "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16"}, + {file = "pydantic_core-2.27.1-cp312-none-win_arm64.whl", hash = "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e"}, + {file = "pydantic_core-2.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073"}, + {file = "pydantic_core-2.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23"}, + {file = "pydantic_core-2.27.1-cp313-none-win32.whl", hash = "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05"}, + {file = "pydantic_core-2.27.1-cp313-none-win_amd64.whl", hash = "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337"}, + {file = "pydantic_core-2.27.1-cp313-none-win_arm64.whl", hash = "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5"}, + {file = "pydantic_core-2.27.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:5897bec80a09b4084aee23f9b73a9477a46c3304ad1d2d07acca19723fb1de62"}, + {file = "pydantic_core-2.27.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d0165ab2914379bd56908c02294ed8405c252250668ebcb438a55494c69f44ab"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b9af86e1d8e4cfc82c2022bfaa6f459381a50b94a29e95dcdda8442d6d83864"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f6c8a66741c5f5447e047ab0ba7a1c61d1e95580d64bce852e3df1f895c4067"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a42d6a8156ff78981f8aa56eb6394114e0dedb217cf8b729f438f643608cbcd"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64c65f40b4cd8b0e049a8edde07e38b476da7e3aaebe63287c899d2cff253fa5"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdcf339322a3fae5cbd504edcefddd5a50d9ee00d968696846f089b4432cf78"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf99c8404f008750c846cb4ac4667b798a9f7de673ff719d705d9b2d6de49c5f"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f1edcea27918d748c7e5e4d917297b2a0ab80cad10f86631e488b7cddf76a36"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:159cac0a3d096f79ab6a44d77a961917219707e2a130739c64d4dd46281f5c2a"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:029d9757eb621cc6e1848fa0b0310310de7301057f623985698ed7ebb014391b"}, + {file = "pydantic_core-2.27.1-cp38-none-win32.whl", hash = "sha256:a28af0695a45f7060e6f9b7092558a928a28553366519f64083c63a44f70e618"}, + {file = "pydantic_core-2.27.1-cp38-none-win_amd64.whl", hash = "sha256:2d4567c850905d5eaaed2f7a404e61012a51caf288292e016360aa2b96ff38d4"}, + {file = "pydantic_core-2.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e9386266798d64eeb19dd3677051f5705bf873e98e15897ddb7d76f477131967"}, + {file = "pydantic_core-2.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4228b5b646caa73f119b1ae756216b59cc6e2267201c27d3912b592c5e323b60"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b3dfe500de26c52abe0477dde16192ac39c98f05bf2d80e76102d394bd13854"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aee66be87825cdf72ac64cb03ad4c15ffef4143dbf5c113f64a5ff4f81477bf9"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b748c44bb9f53031c8cbc99a8a061bc181c1000c60a30f55393b6e9c45cc5bd"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ca038c7f6a0afd0b2448941b6ef9d5e1949e999f9e5517692eb6da58e9d44be"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e0bd57539da59a3e4671b90a502da9a28c72322a4f17866ba3ac63a82c4498e"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ac6c2c45c847bbf8f91930d88716a0fb924b51e0c6dad329b793d670ec5db792"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b94d4ba43739bbe8b0ce4262bcc3b7b9f31459ad120fb595627eaeb7f9b9ca01"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:00e6424f4b26fe82d44577b4c842d7df97c20be6439e8e685d0d715feceb9fb9"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:38de0a70160dd97540335b7ad3a74571b24f1dc3ed33f815f0880682e6880131"}, + {file = "pydantic_core-2.27.1-cp39-none-win32.whl", hash = "sha256:7ccebf51efc61634f6c2344da73e366c75e735960b5654b63d7e6f69a5885fa3"}, + {file = "pydantic_core-2.27.1-cp39-none-win_amd64.whl", hash = "sha256:a57847b090d7892f123726202b7daa20df6694cbd583b67a592e856bff603d6c"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5fde892e6c697ce3e30c61b239330fc5d569a71fefd4eb6512fc6caec9dd9e2f"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:816f5aa087094099fff7edabb5e01cc370eb21aa1a1d44fe2d2aefdfb5599b31"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c10c309e18e443ddb108f0ef64e8729363adbfd92d6d57beec680f6261556f3"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98476c98b02c8e9b2eec76ac4156fd006628b1b2d0ef27e548ffa978393fd154"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3027001c28434e7ca5a6e1e527487051136aa81803ac812be51802150d880dd"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7699b1df36a48169cdebda7ab5a2bac265204003f153b4bd17276153d997670a"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1c39b07d90be6b48968ddc8c19e7585052088fd7ec8d568bb31ff64c70ae3c97"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:46ccfe3032b3915586e469d4972973f893c0a2bb65669194a5bdea9bacc088c2"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:62ba45e21cf6571d7f716d903b5b7b6d2617e2d5d67c0923dc47b9d41369f840"}, + {file = "pydantic_core-2.27.1.tar.gz", hash = "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235"}, ] [package.dependencies] @@ -3999,20 +4153,21 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pydantic-extra-types" -version = "2.9.0" +version = "2.10.0" description = "Extra Pydantic types." optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_extra_types-2.9.0-py3-none-any.whl", hash = "sha256:f0bb975508572ba7bf3390b7337807588463b7248587e69f43b1ad7c797530d0"}, - {file = "pydantic_extra_types-2.9.0.tar.gz", hash = "sha256:e061c01636188743bb69f368dcd391f327b8cfbfede2fe1cbb1211b06601ba3b"}, + {file = "pydantic_extra_types-2.10.0-py3-none-any.whl", hash = "sha256:b19943914e6286548254f5079d1da094e9c0583ee91a8e611e9df24bfd07dbcd"}, + {file = "pydantic_extra_types-2.10.0.tar.gz", hash = "sha256:552c47dd18fe1d00cfed75d9981162a2f3203cf7e77e55a3d3e70936f59587b9"}, ] [package.dependencies] pydantic = ">=2.5.2" +typing-extensions = "*" [package.extras] -all = ["pendulum (>=3.0.0,<4.0.0)", "phonenumbers (>=8,<9)", "pycountry (>=23)", "python-ulid (>=1,<2)", "python-ulid (>=1,<3)", "pytz (>=2024.1)", "semver (>=3.0.2)", "tzdata (>=2024.1)"] +all = ["pendulum (>=3.0.0,<4.0.0)", "phonenumbers (>=8,<9)", "pycountry (>=23)", "python-ulid (>=1,<2)", "python-ulid (>=1,<4)", "pytz (>=2024.1)", "semver (>=3.0.2)", "semver (>=3.0.2,<3.1.0)", "tzdata (>=2024.1)"] pendulum = ["pendulum (>=3.0.0,<4.0.0)"] phonenumbers = ["phonenumbers (>=8,<9)"] pycountry = ["pycountry (>=23)"] @@ -4021,13 +4176,13 @@ semver = ["semver (>=3.0.2)"] [[package]] name = "pydantic-settings" -version = "2.5.2" +version = "2.6.1" description = "Settings management using Pydantic" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_settings-2.5.2-py3-none-any.whl", hash = "sha256:2c912e55fd5794a59bf8c832b9de832dcfdf4778d79ff79b708744eed499a907"}, - {file = "pydantic_settings-2.5.2.tar.gz", hash = "sha256:f90b139682bee4d2065273d5185d71d37ea46cfe57e1b5ae184fc6a0b2484ca0"}, + {file = "pydantic_settings-2.6.1-py3-none-any.whl", hash = "sha256:7fb0637c786a558d3103436278a7c4f1cfd29ba8973238a50c5bb9a55387da87"}, + {file = "pydantic_settings-2.6.1.tar.gz", hash = "sha256:e0f92546d8a9923cb8941689abf85d6601a8c19a23e97a34b2964a2e3f813ca0"}, ] [package.dependencies] @@ -4055,13 +4210,13 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymdown-extensions" -version = "10.10.1" +version = "10.12" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.10.1-py3-none-any.whl", hash = "sha256:6c74ea6c2e2285186a241417480fc2d3cc52941b3ec2dced4014c84dc78c5493"}, - {file = "pymdown_extensions-10.10.1.tar.gz", hash = "sha256:ad277ee4739ced051c3b6328d22ce782358a3bec39bc6ca52815ccbf44f7acdc"}, + {file = "pymdown_extensions-10.12-py3-none-any.whl", hash = "sha256:49f81412242d3527b8b4967b990df395c89563043bc51a3d2d7d500e52123b77"}, + {file = "pymdown_extensions-10.12.tar.gz", hash = "sha256:b0ee1e0b2bef1071a47891ab17003bfe5bf824a398e13f49f8ed653b699369a7"}, ] [package.dependencies] @@ -4109,13 +4264,13 @@ files = [ [[package]] name = "pyproject-hooks" -version = "1.1.0" +version = "1.2.0" description = "Wrappers to call pyproject.toml-based build backend hooks." optional = false python-versions = ">=3.7" files = [ - {file = "pyproject_hooks-1.1.0-py3-none-any.whl", hash = "sha256:7ceeefe9aec63a1064c18d939bdc3adf2d8aa1988a510afec15151578b232aa2"}, - {file = "pyproject_hooks-1.1.0.tar.gz", hash = "sha256:4b37730834edbd6bd37f26ece6b44802fb1c1ee2ece0e54ddff8bfc06db86965"}, + {file = "pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913"}, + {file = "pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8"}, ] [[package]] @@ -4186,13 +4341,13 @@ cli = ["click (>=5.0)"] [[package]] name = "python-multipart" -version = "0.0.10" +version = "0.0.17" description = "A streaming multipart parser for Python" optional = false python-versions = ">=3.8" files = [ - {file = "python_multipart-0.0.10-py3-none-any.whl", hash = "sha256:2b06ad9e8d50c7a8db80e3b56dab590137b323410605af2be20d62a5f1ba1dc8"}, - {file = "python_multipart-0.0.10.tar.gz", hash = "sha256:46eb3c6ce6fdda5fb1a03c7e11d490e407c6930a2703fe7aef4da71c374688fa"}, + {file = "python_multipart-0.0.17-py3-none-any.whl", hash = "sha256:15dc4f487e0a9476cc1201261188ee0940165cffc94429b6fc565c4d3045cb5d"}, + {file = "python_multipart-0.0.17.tar.gz", hash = "sha256:41330d831cae6e2f22902704ead2826ea038d0419530eadff3ea80175aec5538"}, ] [[package]] @@ -4273,225 +4428,205 @@ pyyaml = "*" [[package]] name = "rapidfuzz" -version = "3.9.7" +version = "3.10.1" description = "rapid fuzzy string matching" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "rapidfuzz-3.9.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ccf68e30b80e903f2309f90a438dbd640dd98e878eeb5ad361a288051ee5b75c"}, - {file = "rapidfuzz-3.9.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:696a79018ef989bf1c9abd9005841cee18005ccad4748bad8a4c274c47b6241a"}, - {file = "rapidfuzz-3.9.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4eebf6c93af0ae866c22b403a84747580bb5c10f0d7b51c82a87f25405d4dcb"}, - {file = "rapidfuzz-3.9.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e9125377fa3d21a8abd4fbdbcf1c27be73e8b1850f0b61b5b711364bf3b59db"}, - {file = "rapidfuzz-3.9.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c12d180b17a22d107c8747de9c68d0b9c1d15dcda5445ff9bf9f4ccfb67c3e16"}, - {file = "rapidfuzz-3.9.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1318d42610c26dcd68bd3279a1bf9e3605377260867c9a8ed22eafc1bd93a7c"}, - {file = "rapidfuzz-3.9.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd5fa6e3c6e0333051c1f3a49f0807b3366f4131c8d6ac8c3e05fd0d0ce3755c"}, - {file = "rapidfuzz-3.9.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fcf79b686962d7bec458a0babc904cb4fa319808805e036b9d5a531ee6b9b835"}, - {file = "rapidfuzz-3.9.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:8b01153c7466d0bad48fba77a303d5a768e66f24b763853469f47220b3de4661"}, - {file = "rapidfuzz-3.9.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:94baaeea0b4f8632a6da69348b1e741043eba18d4e3088d674d3f76586b6223d"}, - {file = "rapidfuzz-3.9.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6c5b32875646cb7f60c193ade99b2e4b124f19583492115293cd00f6fb198b17"}, - {file = "rapidfuzz-3.9.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:110b6294396bc0a447648627479c9320f095c2034c0537f687592e0f58622638"}, - {file = "rapidfuzz-3.9.7-cp310-cp310-win32.whl", hash = "sha256:3445a35c4c8d288f2b2011eb61bce1227c633ce85a3154e727170f37c0266bb2"}, - {file = "rapidfuzz-3.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:0d1415a732ee75e74a90af12020b77a0b396b36c60afae1bde3208a78cd2c9fc"}, - {file = "rapidfuzz-3.9.7-cp310-cp310-win_arm64.whl", hash = "sha256:836f4d88b8bd0fff2ebe815dcaab8aa6c8d07d1d566a7e21dd137cf6fe11ed5b"}, - {file = "rapidfuzz-3.9.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d098ce6162eb5e48fceb0745455bc950af059df6113eec83e916c129fca11408"}, - {file = "rapidfuzz-3.9.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:048d55d36c02c6685a2b2741688503c3d15149694506655b6169dcfd3b6c2585"}, - {file = "rapidfuzz-3.9.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c33211cfff9aec425bb1bfedaf94afcf337063aa273754f22779d6dadebef4c2"}, - {file = "rapidfuzz-3.9.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e6d9db2fa4e9be171e9bb31cf2d2575574774966b43f5b951062bb2e67885852"}, - {file = "rapidfuzz-3.9.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d4e049d5ad61448c9a020d1061eba20944c4887d720c4069724beb6ea1692507"}, - {file = "rapidfuzz-3.9.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cfa74aac64c85898b93d9c80bb935a96bf64985e28d4ee0f1a3d1f3bf11a5106"}, - {file = "rapidfuzz-3.9.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:965693c2e9efd425b0f059f5be50ef830129f82892fa1858e220e424d9d0160f"}, - {file = "rapidfuzz-3.9.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8501000a5eb8037c4b56857724797fe5a8b01853c363de91c8d0d0ad56bef319"}, - {file = "rapidfuzz-3.9.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d92c552c6b7577402afdd547dcf5d31ea6c8ae31ad03f78226e055cfa37f3c6"}, - {file = "rapidfuzz-3.9.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1ee2086f490cb501d86b7e386c1eb4e3a0ccbb0c99067089efaa8c79012c8952"}, - {file = "rapidfuzz-3.9.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1de91e7fd7f525e10ea79a6e62c559d1b0278ec097ad83d9da378b6fab65a265"}, - {file = "rapidfuzz-3.9.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a4da514d13f4433e16960a17f05b67e0af30ac771719c9a9fb877e5004f74477"}, - {file = "rapidfuzz-3.9.7-cp311-cp311-win32.whl", hash = "sha256:a40184c67db8252593ec518e17fb8a6e86d7259dc9f2d6c0bf4ff4db8cf1ad4b"}, - {file = "rapidfuzz-3.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:c4f28f1930b09a2c300357d8465b388cecb7e8b2f454a5d5425561710b7fd07f"}, - {file = "rapidfuzz-3.9.7-cp311-cp311-win_arm64.whl", hash = "sha256:675b75412a943bb83f1f53e2e54fd18c80ef15ed642dc6eb0382d1949419d904"}, - {file = "rapidfuzz-3.9.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1ef6a1a8f0b12f8722f595f15c62950c9a02d5abc64742561299ffd49f6c6944"}, - {file = "rapidfuzz-3.9.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:32532af1d70c6ec02ea5ac7ee2766dfff7c8ae8c761abfe8da9e527314e634e8"}, - {file = "rapidfuzz-3.9.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae1a38bade755aa9dd95a81cda949e1bf9cd92b79341ccc5e2189c9e7bdfc5ec"}, - {file = "rapidfuzz-3.9.7-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d73ee2df41224c87336448d279b5b6a3a75f36e41dd3dcf538c0c9cce36360d8"}, - {file = "rapidfuzz-3.9.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be3a1fc3e2ab3bdf93dc0c83c00acca8afd2a80602297d96cf4a0ba028333cdf"}, - {file = "rapidfuzz-3.9.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:603f48f621272a448ff58bb556feb4371252a02156593303391f5c3281dfaeac"}, - {file = "rapidfuzz-3.9.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:268f8e1ca50fc61c0736f3fe9d47891424adf62d96ed30196f30f4bd8216b41f"}, - {file = "rapidfuzz-3.9.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5f8bf3f0d02935751d8660abda6044821a861f6229f7d359f98bcdcc7e66c39b"}, - {file = "rapidfuzz-3.9.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b997ff3b39d4cee9fb025d6c46b0a24bd67595ce5a5b652a97fb3a9d60beb651"}, - {file = "rapidfuzz-3.9.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ca66676c8ef6557f9b81c5b2b519097817a7c776a6599b8d6fcc3e16edd216fe"}, - {file = "rapidfuzz-3.9.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:35d3044cb635ca6b1b2b7b67b3597bd19f34f1753b129eb6d2ae04cf98cd3945"}, - {file = "rapidfuzz-3.9.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5a93c9e60904cb76e7aefef67afffb8b37c4894f81415ed513db090f29d01101"}, - {file = "rapidfuzz-3.9.7-cp312-cp312-win32.whl", hash = "sha256:579d107102c0725f7c79b4e79f16d3cf4d7c9208f29c66b064fa1fd4641d5155"}, - {file = "rapidfuzz-3.9.7-cp312-cp312-win_amd64.whl", hash = "sha256:953b3780765c8846866faf891ee4290f6a41a6dacf4fbcd3926f78c9de412ca6"}, - {file = "rapidfuzz-3.9.7-cp312-cp312-win_arm64.whl", hash = "sha256:7c20c1474b068c4bd45bf2fd0ad548df284f74e9a14a68b06746c56e3aa8eb70"}, - {file = "rapidfuzz-3.9.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fde81b1da9a947f931711febe2e2bee694e891f6d3e6aa6bc02c1884702aea19"}, - {file = "rapidfuzz-3.9.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:47e92c155a14f44511ea8ebcc6bc1535a1fe8d0a7d67ad3cc47ba61606df7bcf"}, - {file = "rapidfuzz-3.9.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8772b745668260c5c4d069c678bbaa68812e6c69830f3771eaad521af7bc17f8"}, - {file = "rapidfuzz-3.9.7-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:578302828dd97ee2ba507d2f71d62164e28d2fc7bc73aad0d2d1d2afc021a5d5"}, - {file = "rapidfuzz-3.9.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc3e6081069eea61593f1d6839029da53d00c8c9b205c5534853eaa3f031085c"}, - {file = "rapidfuzz-3.9.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0b1c2d504eddf97bc0f2eba422c8915576dbf025062ceaca2d68aecd66324ad9"}, - {file = "rapidfuzz-3.9.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb76e5a21034f0307c51c5a2fc08856f698c53a4c593b17d291f7d6e9d09ca3"}, - {file = "rapidfuzz-3.9.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d4ba2318ef670ce505f42881a5d2af70f948124646947341a3c6ccb33cd70369"}, - {file = "rapidfuzz-3.9.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:057bb03f39e285047d7e9412e01ecf31bb2d42b9466a5409d715d587460dd59b"}, - {file = "rapidfuzz-3.9.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a8feac9006d5c9758438906f093befffc4290de75663dbb2098461df7c7d28dd"}, - {file = "rapidfuzz-3.9.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:95b8292383e717e10455f2c917df45032b611141e43d1adf70f71b1566136b11"}, - {file = "rapidfuzz-3.9.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e9fbf659537d246086d0297628b3795dc3e4a384101ecc01e5791c827b8d7345"}, - {file = "rapidfuzz-3.9.7-cp313-cp313-win32.whl", hash = "sha256:1dc516ac6d32027be2b0196bedf6d977ac26debd09ca182376322ad620460feb"}, - {file = "rapidfuzz-3.9.7-cp313-cp313-win_amd64.whl", hash = "sha256:b4f86e09d3064dca0b014cd48688964036a904a2d28048f00c8f4640796d06a8"}, - {file = "rapidfuzz-3.9.7-cp313-cp313-win_arm64.whl", hash = "sha256:19c64d8ddb2940b42a4567b23f1681af77f50a5ff6c9b8e85daba079c210716e"}, - {file = "rapidfuzz-3.9.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fbda3dd68d8b28ccb20ffb6f756fefd9b5ba570a772bedd7643ed441f5793308"}, - {file = "rapidfuzz-3.9.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2379e0b2578ad3ac7004f223251550f08bca873ff76c169b09410ec562ad78d8"}, - {file = "rapidfuzz-3.9.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d1eff95362f993b0276fd3839aee48625b09aac8938bb0c23b40d219cba5dc5"}, - {file = "rapidfuzz-3.9.7-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd9360e30041690912525a210e48a897b49b230768cc8af1c702e5395690464f"}, - {file = "rapidfuzz-3.9.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a93cd834b3c315ab437f0565ee3a2f42dd33768dc885ccbabf9710b131cf70d2"}, - {file = "rapidfuzz-3.9.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ff196996240db7075f62c7bc4506f40a3c80cd4ae3ab0e79ac6892283a90859"}, - {file = "rapidfuzz-3.9.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:948dcee7aaa1cd14358b2a7ef08bf0be42bf89049c3a906669874a715fc2c937"}, - {file = "rapidfuzz-3.9.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d95751f505a301af1aaf086c19f34536056d6c8efa91b2240de532a3db57b543"}, - {file = "rapidfuzz-3.9.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:90db86fa196eecf96cb6db09f1083912ea945c50c57188039392d810d0b784e1"}, - {file = "rapidfuzz-3.9.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:3171653212218a162540a3c8eb8ae7d3dcc8548540b69eaecaf3b47c14d89c90"}, - {file = "rapidfuzz-3.9.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:36dd6e820379c37a1ffefc8a52b648758e867cd9d78ee5b5dc0c9a6a10145378"}, - {file = "rapidfuzz-3.9.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:7b702de95666a1f7d5c6b47eacadfe2d2794af3742d63d2134767d13e5d1c713"}, - {file = "rapidfuzz-3.9.7-cp38-cp38-win32.whl", hash = "sha256:9030e7238c0df51aed5c9c5ed8eee2bdd47a2ae788e562c1454af2851c3d1906"}, - {file = "rapidfuzz-3.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:f847fb0fbfb72482b1c05c59cbb275c58a55b73708a7f77a83f8035ee3c86497"}, - {file = "rapidfuzz-3.9.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:97f2ce529d2a70a60c290f6ab269a2bbf1d3b47b9724dccc84339b85f7afb044"}, - {file = "rapidfuzz-3.9.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e2957fdad10bb83b1982b02deb3604a3f6911a5e545f518b59c741086f92d152"}, - {file = "rapidfuzz-3.9.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d5262383634626eb45c536017204b8163a03bc43bda880cf1bdd7885db9a163"}, - {file = "rapidfuzz-3.9.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:364587827d7cbd41afa0782adc2d2d19e3f07d355b0750a02a8e33ad27a9c368"}, - {file = "rapidfuzz-3.9.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ecc24af7f905f3d6efb371a01680116ffea8d64e266618fb9ad1602a9b4f7934"}, - {file = "rapidfuzz-3.9.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9dc86aa6b29d174713c5f4caac35ffb7f232e3e649113e8d13812b35ab078228"}, - {file = "rapidfuzz-3.9.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3dcfbe7266e74a707173a12a7b355a531f2dcfbdb32f09468e664330da14874"}, - {file = "rapidfuzz-3.9.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b23806fbdd6b510ba9ac93bb72d503066263b0fba44b71b835be9f063a84025f"}, - {file = "rapidfuzz-3.9.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:5551d68264c1bb6943f542da83a4dc8940ede52c5847ef158698799cc28d14f5"}, - {file = "rapidfuzz-3.9.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:13d8675a1fa7e2b19650ca7ef9a6ec01391d4bb12ab9e0793e8eb024538b4a34"}, - {file = "rapidfuzz-3.9.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9b6a5de507b9be6de688dae40143b656f7a93b10995fb8bd90deb555e7875c60"}, - {file = "rapidfuzz-3.9.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:111a20a3c090cf244d9406e60500b6c34b2375ba3a5009e2b38fd806fe38e337"}, - {file = "rapidfuzz-3.9.7-cp39-cp39-win32.whl", hash = "sha256:22589c0b8ccc6c391ce7f776c93a8c92c96ab8d34e1a19f1bd2b12a235332632"}, - {file = "rapidfuzz-3.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:6f83221db5755b8f34222e40607d87f1176a8d5d4dbda4a55a0f0b67d588a69c"}, - {file = "rapidfuzz-3.9.7-cp39-cp39-win_arm64.whl", hash = "sha256:3665b92e788578c3bb334bd5b5fa7ee1a84bafd68be438e3110861d1578c63a0"}, - {file = "rapidfuzz-3.9.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d7df9c2194c7ec930b33c991c55dbd0c10951bd25800c0b7a7b571994ebbced5"}, - {file = "rapidfuzz-3.9.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:68bd888eafd07b09585dcc8bc2716c5ecdb7eed62827470664d25588982b2873"}, - {file = "rapidfuzz-3.9.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1230e0f9026851a6a432beaa0ce575dda7b39fe689b576f99a0704fbb81fc9c"}, - {file = "rapidfuzz-3.9.7-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3b36e1c61b796ae1777f3e9e11fd39898b09d351c9384baf6e3b7e6191d8ced"}, - {file = "rapidfuzz-3.9.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9dba13d86806fcf3fe9c9919f58575e0090eadfb89c058bde02bcc7ab24e4548"}, - {file = "rapidfuzz-3.9.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1f1a33e84056b7892c721d84475d3bde49a145126bc4c6efe0d6d0d59cb31c29"}, - {file = "rapidfuzz-3.9.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3492c7a42b7fa9f0051d7fcce9893e95ed91c97c9ec7fb64346f3e070dd318ed"}, - {file = "rapidfuzz-3.9.7-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:ece45eb2af8b00f90d10f7419322e8804bd42fb1129026f9bfe712c37508b514"}, - {file = "rapidfuzz-3.9.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcd14cf4876f04b488f6e54a7abd3e9b31db5f5a6aba0ce90659917aaa8c088"}, - {file = "rapidfuzz-3.9.7-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:521c58c72ed8a612b25cda378ff10dee17e6deb4ee99a070b723519a345527b9"}, - {file = "rapidfuzz-3.9.7-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18669bb6cdf7d40738526d37e550df09ba065b5a7560f3d802287988b6cb63cf"}, - {file = "rapidfuzz-3.9.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7abe2dbae81120a64bb4f8d3fcafe9122f328c9f86d7f327f174187a5af4ed86"}, - {file = "rapidfuzz-3.9.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a3c0783910911f4f24655826d007c9f4360f08107410952c01ee3df98c713eb2"}, - {file = "rapidfuzz-3.9.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:03126f9a040ff21d2a110610bfd6b93b79377ce8b4121edcb791d61b7df6eec5"}, - {file = "rapidfuzz-3.9.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:591908240f4085e2ade5b685c6e8346e2ed44932cffeaac2fb32ddac95b55c7f"}, - {file = "rapidfuzz-3.9.7-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9012d86c6397edbc9da4ac0132de7f8ee9d6ce857f4194d5684c4ddbcdd1c5c"}, - {file = "rapidfuzz-3.9.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df596ddd3db38aa513d4c0995611267b3946e7cbe5a8761b50e9306dfec720ee"}, - {file = "rapidfuzz-3.9.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3ed5adb752f4308fcc8f4fb6f8eb7aa4082f9d12676fda0a74fa5564242a8107"}, - {file = "rapidfuzz-3.9.7.tar.gz", hash = "sha256:f1c7296534c1afb6f495aa95871f14ccdc197c6db42965854e483100df313030"}, + {file = "rapidfuzz-3.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f17d9f21bf2f2f785d74f7b0d407805468b4c173fa3e52c86ec94436b338e74a"}, + {file = "rapidfuzz-3.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b31f358a70efc143909fb3d75ac6cd3c139cd41339aa8f2a3a0ead8315731f2b"}, + {file = "rapidfuzz-3.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f4f43f2204b56a61448ec2dd061e26fd344c404da99fb19f3458200c5874ba2"}, + {file = "rapidfuzz-3.10.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d81bf186a453a2757472133b24915768abc7c3964194406ed93e170e16c21cb"}, + {file = "rapidfuzz-3.10.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3611c8f45379a12063d70075c75134f2a8bd2e4e9b8a7995112ddae95ca1c982"}, + {file = "rapidfuzz-3.10.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c3b537b97ac30da4b73930fa8a4fe2f79c6d1c10ad535c5c09726612cd6bed9"}, + {file = "rapidfuzz-3.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:231ef1ec9cf7b59809ce3301006500b9d564ddb324635f4ea8f16b3e2a1780da"}, + {file = "rapidfuzz-3.10.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed4f3adc1294834955b7e74edd3c6bd1aad5831c007f2d91ea839e76461a5879"}, + {file = "rapidfuzz-3.10.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:7b6015da2e707bf632a71772a2dbf0703cff6525732c005ad24987fe86e8ec32"}, + {file = "rapidfuzz-3.10.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:1b35a118d61d6f008e8e3fb3a77674d10806a8972c7b8be433d6598df4d60b01"}, + {file = "rapidfuzz-3.10.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:bc308d79a7e877226f36bdf4e149e3ed398d8277c140be5c1fd892ec41739e6d"}, + {file = "rapidfuzz-3.10.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f017dbfecc172e2d0c37cf9e3d519179d71a7f16094b57430dffc496a098aa17"}, + {file = "rapidfuzz-3.10.1-cp310-cp310-win32.whl", hash = "sha256:36c0e1483e21f918d0f2f26799fe5ac91c7b0c34220b73007301c4f831a9c4c7"}, + {file = "rapidfuzz-3.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:10746c1d4c8cd8881c28a87fd7ba0c9c102346dfe7ff1b0d021cdf093e9adbff"}, + {file = "rapidfuzz-3.10.1-cp310-cp310-win_arm64.whl", hash = "sha256:dfa64b89dcb906835e275187569e51aa9d546a444489e97aaf2cc84011565fbe"}, + {file = "rapidfuzz-3.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:92958ae075c87fef393f835ed02d4fe8d5ee2059a0934c6c447ea3417dfbf0e8"}, + {file = "rapidfuzz-3.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ba7521e072c53e33c384e78615d0718e645cab3c366ecd3cc8cb732befd94967"}, + {file = "rapidfuzz-3.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00d02cbd75d283c287471b5b3738b3e05c9096150f93f2d2dfa10b3d700f2db9"}, + {file = "rapidfuzz-3.10.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:efa1582a397da038e2f2576c9cd49b842f56fde37d84a6b0200ffebc08d82350"}, + {file = "rapidfuzz-3.10.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f12912acee1f506f974f58de9fdc2e62eea5667377a7e9156de53241c05fdba8"}, + {file = "rapidfuzz-3.10.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666d5d8b17becc3f53447bcb2b6b33ce6c2df78792495d1fa82b2924cd48701a"}, + {file = "rapidfuzz-3.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26f71582c0d62445067ee338ddad99b655a8f4e4ed517a90dcbfbb7d19310474"}, + {file = "rapidfuzz-3.10.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8a2ef08b27167bcff230ffbfeedd4c4fa6353563d6aaa015d725dd3632fc3de7"}, + {file = "rapidfuzz-3.10.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:365e4fc1a2b95082c890f5e98489b894e6bf8c338c6ac89bb6523c2ca6e9f086"}, + {file = "rapidfuzz-3.10.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1996feb7a61609fa842e6b5e0c549983222ffdedaf29644cc67e479902846dfe"}, + {file = "rapidfuzz-3.10.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:cf654702f144beaa093103841a2ea6910d617d0bb3fccb1d1fd63c54dde2cd49"}, + {file = "rapidfuzz-3.10.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec108bf25de674781d0a9a935030ba090c78d49def3d60f8724f3fc1e8e75024"}, + {file = "rapidfuzz-3.10.1-cp311-cp311-win32.whl", hash = "sha256:031f8b367e5d92f7a1e27f7322012f3c321c3110137b43cc3bf678505583ef48"}, + {file = "rapidfuzz-3.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:f98f36c6a1bb9a6c8bbec99ad87c8c0e364f34761739b5ea9adf7b48129ae8cf"}, + {file = "rapidfuzz-3.10.1-cp311-cp311-win_arm64.whl", hash = "sha256:f1da2028cb4e41be55ee797a82d6c1cf589442504244249dfeb32efc608edee7"}, + {file = "rapidfuzz-3.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1340b56340896bede246f612b6ecf685f661a56aabef3d2512481bfe23ac5835"}, + {file = "rapidfuzz-3.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2316515169b7b5a453f0ce3adbc46c42aa332cae9f2edb668e24d1fc92b2f2bb"}, + {file = "rapidfuzz-3.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e06fe6a12241ec1b72c0566c6b28cda714d61965d86569595ad24793d1ab259"}, + {file = "rapidfuzz-3.10.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d99c1cd9443b19164ec185a7d752f4b4db19c066c136f028991a480720472e23"}, + {file = "rapidfuzz-3.10.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1d9aa156ed52d3446388ba4c2f335e312191d1ca9d1f5762ee983cf23e4ecf6"}, + {file = "rapidfuzz-3.10.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:54bcf4efaaee8e015822be0c2c28214815f4f6b4f70d8362cfecbd58a71188ac"}, + {file = "rapidfuzz-3.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0c955e32afdbfdf6e9ee663d24afb25210152d98c26d22d399712d29a9b976b"}, + {file = "rapidfuzz-3.10.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:191633722203f5b7717efcb73a14f76f3b124877d0608c070b827c5226d0b972"}, + {file = "rapidfuzz-3.10.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:195baad28057ec9609e40385991004e470af9ef87401e24ebe72c064431524ab"}, + {file = "rapidfuzz-3.10.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0fff4a6b87c07366662b62ae994ffbeadc472e72f725923f94b72a3db49f4671"}, + {file = "rapidfuzz-3.10.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4ffed25f9fdc0b287f30a98467493d1e1ce5b583f6317f70ec0263b3c97dbba6"}, + {file = "rapidfuzz-3.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d02cf8e5af89a9ac8f53c438ddff6d773f62c25c6619b29db96f4aae248177c0"}, + {file = "rapidfuzz-3.10.1-cp312-cp312-win32.whl", hash = "sha256:f3bb81d4fe6a5d20650f8c0afcc8f6e1941f6fecdb434f11b874c42467baded0"}, + {file = "rapidfuzz-3.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:aaf83e9170cb1338922ae42d320699dccbbdca8ffed07faeb0b9257822c26e24"}, + {file = "rapidfuzz-3.10.1-cp312-cp312-win_arm64.whl", hash = "sha256:c5da802a0d085ad81b0f62828fb55557996c497b2d0b551bbdfeafd6d447892f"}, + {file = "rapidfuzz-3.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fc22d69a1c9cccd560a5c434c0371b2df0f47c309c635a01a913e03bbf183710"}, + {file = "rapidfuzz-3.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:38b0dac2c8e057562b8f0d8ae5b663d2d6a28c5ab624de5b73cef9abb6129a24"}, + {file = "rapidfuzz-3.10.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fde3bbb14e92ce8fcb5c2edfff72e474d0080cadda1c97785bf4822f037a309"}, + {file = "rapidfuzz-3.10.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9141fb0592e55f98fe9ac0f3ce883199b9c13e262e0bf40c5b18cdf926109d16"}, + {file = "rapidfuzz-3.10.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:237bec5dd1bfc9b40bbd786cd27949ef0c0eb5fab5eb491904c6b5df59d39d3c"}, + {file = "rapidfuzz-3.10.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18123168cba156ab5794ea6de66db50f21bb3c66ae748d03316e71b27d907b95"}, + {file = "rapidfuzz-3.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b75fe506c8e02769cc47f5ab21ce3e09b6211d3edaa8f8f27331cb6988779be"}, + {file = "rapidfuzz-3.10.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9da82aa4b46973aaf9e03bb4c3d6977004648c8638febfc0f9d237e865761270"}, + {file = "rapidfuzz-3.10.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c34c022d5ad564f1a5a57a4a89793bd70d7bad428150fb8ff2760b223407cdcf"}, + {file = "rapidfuzz-3.10.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:1e96c84d6c2a0ca94e15acb5399118fff669f4306beb98a6d8ec6f5dccab4412"}, + {file = "rapidfuzz-3.10.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e8e154b84a311263e1aca86818c962e1fa9eefdd643d1d5d197fcd2738f88cb9"}, + {file = "rapidfuzz-3.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:335fee93188f8cd585552bb8057228ce0111bd227fa81bfd40b7df6b75def8ab"}, + {file = "rapidfuzz-3.10.1-cp313-cp313-win32.whl", hash = "sha256:6729b856166a9e95c278410f73683957ea6100c8a9d0a8dbe434c49663689255"}, + {file = "rapidfuzz-3.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:0e06d99ad1ad97cb2ef7f51ec6b1fedd74a3a700e4949353871cf331d07b382a"}, + {file = "rapidfuzz-3.10.1-cp313-cp313-win_arm64.whl", hash = "sha256:8d1b7082104d596a3eb012e0549b2634ed15015b569f48879701e9d8db959dbb"}, + {file = "rapidfuzz-3.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:779027d3307e1a2b1dc0c03c34df87a470a368a1a0840a9d2908baf2d4067956"}, + {file = "rapidfuzz-3.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:440b5608ab12650d0390128d6858bc839ae77ffe5edf0b33a1551f2fa9860651"}, + {file = "rapidfuzz-3.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82cac41a411e07a6f3dc80dfbd33f6be70ea0abd72e99c59310819d09f07d945"}, + {file = "rapidfuzz-3.10.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:958473c9f0bca250590200fd520b75be0dbdbc4a7327dc87a55b6d7dc8d68552"}, + {file = "rapidfuzz-3.10.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ef60dfa73749ef91cb6073be1a3e135f4846ec809cc115f3cbfc6fe283a5584"}, + {file = "rapidfuzz-3.10.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7fbac18f2c19fc983838a60611e67e3262e36859994c26f2ee85bb268de2355"}, + {file = "rapidfuzz-3.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a0d519ff39db887cd73f4e297922786d548f5c05d6b51f4e6754f452a7f4296"}, + {file = "rapidfuzz-3.10.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bebb7bc6aeb91cc57e4881b222484c26759ca865794187217c9dcea6c33adae6"}, + {file = "rapidfuzz-3.10.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fe07f8b9c3bb5c5ad1d2c66884253e03800f4189a60eb6acd6119ebaf3eb9894"}, + {file = "rapidfuzz-3.10.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:bfa48a4a2d45a41457f0840c48e579db157a927f4e97acf6e20df8fc521c79de"}, + {file = "rapidfuzz-3.10.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2cf44d01bfe8ee605b7eaeecbc2b9ca64fc55765f17b304b40ed8995f69d7716"}, + {file = "rapidfuzz-3.10.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1e6bbca9246d9eedaa1c84e04a7f555493ba324d52ae4d9f3d9ddd1b740dcd87"}, + {file = "rapidfuzz-3.10.1-cp39-cp39-win32.whl", hash = "sha256:567f88180f2c1423b4fe3f3ad6e6310fc97b85bdba574801548597287fc07028"}, + {file = "rapidfuzz-3.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:6b2cd7c29d6ecdf0b780deb587198f13213ac01c430ada6913452fd0c40190fc"}, + {file = "rapidfuzz-3.10.1-cp39-cp39-win_arm64.whl", hash = "sha256:9f912d459e46607ce276128f52bea21ebc3e9a5ccf4cccfef30dd5bddcf47be8"}, + {file = "rapidfuzz-3.10.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ac4452f182243cfab30ba4668ef2de101effaedc30f9faabb06a095a8c90fd16"}, + {file = "rapidfuzz-3.10.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:565c2bd4f7d23c32834652b27b51dd711814ab614b4e12add8476be4e20d1cf5"}, + {file = "rapidfuzz-3.10.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:187d9747149321607be4ccd6f9f366730078bed806178ec3eeb31d05545e9e8f"}, + {file = "rapidfuzz-3.10.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:616290fb9a8fa87e48cb0326d26f98d4e29f17c3b762c2d586f2b35c1fd2034b"}, + {file = "rapidfuzz-3.10.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:073a5b107e17ebd264198b78614c0206fa438cce749692af5bc5f8f484883f50"}, + {file = "rapidfuzz-3.10.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:39c4983e2e2ccb9732f3ac7d81617088822f4a12291d416b09b8a1eadebb3e29"}, + {file = "rapidfuzz-3.10.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ac7adee6bcf0c6fee495d877edad1540a7e0f5fc208da03ccb64734b43522d7a"}, + {file = "rapidfuzz-3.10.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:425f4ac80b22153d391ee3f94bc854668a0c6c129f05cf2eaf5ee74474ddb69e"}, + {file = "rapidfuzz-3.10.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65a2fa13e8a219f9b5dcb9e74abe3ced5838a7327e629f426d333dfc8c5a6e66"}, + {file = "rapidfuzz-3.10.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:75561f3df9a906aaa23787e9992b228b1ab69007932dc42070f747103e177ba8"}, + {file = "rapidfuzz-3.10.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:edd062490537e97ca125bc6c7f2b7331c2b73d21dc304615afe61ad1691e15d5"}, + {file = "rapidfuzz-3.10.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfcc8feccf63245a22dfdd16e222f1a39771a44b870beb748117a0e09cbb4a62"}, + {file = "rapidfuzz-3.10.1.tar.gz", hash = "sha256:5a15546d847a915b3f42dc79ef9b0c78b998b4e2c53b252e7166284066585979"}, ] [package.extras] -full = ["numpy"] +all = ["numpy"] [[package]] name = "regex" -version = "2024.9.11" +version = "2024.11.6" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" files = [ - {file = "regex-2024.9.11-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1494fa8725c285a81d01dc8c06b55287a1ee5e0e382d8413adc0a9197aac6408"}, - {file = "regex-2024.9.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0e12c481ad92d129c78f13a2a3662317e46ee7ef96c94fd332e1c29131875b7d"}, - {file = "regex-2024.9.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:16e13a7929791ac1216afde26f712802e3df7bf0360b32e4914dca3ab8baeea5"}, - {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46989629904bad940bbec2106528140a218b4a36bb3042d8406980be1941429c"}, - {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a906ed5e47a0ce5f04b2c981af1c9acf9e8696066900bf03b9d7879a6f679fc8"}, - {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9a091b0550b3b0207784a7d6d0f1a00d1d1c8a11699c1a4d93db3fbefc3ad35"}, - {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ddcd9a179c0a6fa8add279a4444015acddcd7f232a49071ae57fa6e278f1f71"}, - {file = "regex-2024.9.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6b41e1adc61fa347662b09398e31ad446afadff932a24807d3ceb955ed865cc8"}, - {file = "regex-2024.9.11-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ced479f601cd2f8ca1fd7b23925a7e0ad512a56d6e9476f79b8f381d9d37090a"}, - {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:635a1d96665f84b292e401c3d62775851aedc31d4f8784117b3c68c4fcd4118d"}, - {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c0256beda696edcf7d97ef16b2a33a8e5a875affd6fa6567b54f7c577b30a137"}, - {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:3ce4f1185db3fbde8ed8aa223fc9620f276c58de8b0d4f8cc86fd1360829edb6"}, - {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:09d77559e80dcc9d24570da3745ab859a9cf91953062e4ab126ba9d5993688ca"}, - {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a22ccefd4db3f12b526eccb129390942fe874a3a9fdbdd24cf55773a1faab1a"}, - {file = "regex-2024.9.11-cp310-cp310-win32.whl", hash = "sha256:f745ec09bc1b0bd15cfc73df6fa4f726dcc26bb16c23a03f9e3367d357eeedd0"}, - {file = "regex-2024.9.11-cp310-cp310-win_amd64.whl", hash = "sha256:01c2acb51f8a7d6494c8c5eafe3d8e06d76563d8a8a4643b37e9b2dd8a2ff623"}, - {file = "regex-2024.9.11-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2cce2449e5927a0bf084d346da6cd5eb016b2beca10d0013ab50e3c226ffc0df"}, - {file = "regex-2024.9.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b37fa423beefa44919e009745ccbf353d8c981516e807995b2bd11c2c77d268"}, - {file = "regex-2024.9.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:64ce2799bd75039b480cc0360907c4fb2f50022f030bf9e7a8705b636e408fad"}, - {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4cc92bb6db56ab0c1cbd17294e14f5e9224f0cc6521167ef388332604e92679"}, - {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d05ac6fa06959c4172eccd99a222e1fbf17b5670c4d596cb1e5cde99600674c4"}, - {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:040562757795eeea356394a7fb13076ad4f99d3c62ab0f8bdfb21f99a1f85664"}, - {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6113c008a7780792efc80f9dfe10ba0cd043cbf8dc9a76ef757850f51b4edc50"}, - {file = "regex-2024.9.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e5fb5f77c8745a60105403a774fe2c1759b71d3e7b4ca237a5e67ad066c7199"}, - {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:54d9ff35d4515debf14bc27f1e3b38bfc453eff3220f5bce159642fa762fe5d4"}, - {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df5cbb1fbc74a8305b6065d4ade43b993be03dbe0f8b30032cced0d7740994bd"}, - {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:7fb89ee5d106e4a7a51bce305ac4efb981536301895f7bdcf93ec92ae0d91c7f"}, - {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a738b937d512b30bf75995c0159c0ddf9eec0775c9d72ac0202076c72f24aa96"}, - {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e28f9faeb14b6f23ac55bfbbfd3643f5c7c18ede093977f1df249f73fd22c7b1"}, - {file = "regex-2024.9.11-cp311-cp311-win32.whl", hash = "sha256:18e707ce6c92d7282dfce370cd205098384b8ee21544e7cb29b8aab955b66fa9"}, - {file = "regex-2024.9.11-cp311-cp311-win_amd64.whl", hash = "sha256:313ea15e5ff2a8cbbad96ccef6be638393041b0a7863183c2d31e0c6116688cf"}, - {file = "regex-2024.9.11-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b0d0a6c64fcc4ef9c69bd5b3b3626cc3776520a1637d8abaa62b9edc147a58f7"}, - {file = "regex-2024.9.11-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:49b0e06786ea663f933f3710a51e9385ce0cba0ea56b67107fd841a55d56a231"}, - {file = "regex-2024.9.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5b513b6997a0b2f10e4fd3a1313568e373926e8c252bd76c960f96fd039cd28d"}, - {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee439691d8c23e76f9802c42a95cfeebf9d47cf4ffd06f18489122dbb0a7ad64"}, - {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8f877c89719d759e52783f7fe6e1c67121076b87b40542966c02de5503ace42"}, - {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23b30c62d0f16827f2ae9f2bb87619bc4fba2044911e2e6c2eb1af0161cdb766"}, - {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85ab7824093d8f10d44330fe1e6493f756f252d145323dd17ab6b48733ff6c0a"}, - {file = "regex-2024.9.11-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8dee5b4810a89447151999428fe096977346cf2f29f4d5e29609d2e19e0199c9"}, - {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98eeee2f2e63edae2181c886d7911ce502e1292794f4c5ee71e60e23e8d26b5d"}, - {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:57fdd2e0b2694ce6fc2e5ccf189789c3e2962916fb38779d3e3521ff8fe7a822"}, - {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d552c78411f60b1fdaafd117a1fca2f02e562e309223b9d44b7de8be451ec5e0"}, - {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a0b2b80321c2ed3fcf0385ec9e51a12253c50f146fddb2abbb10f033fe3d049a"}, - {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:18406efb2f5a0e57e3a5881cd9354c1512d3bb4f5c45d96d110a66114d84d23a"}, - {file = "regex-2024.9.11-cp312-cp312-win32.whl", hash = "sha256:e464b467f1588e2c42d26814231edecbcfe77f5ac414d92cbf4e7b55b2c2a776"}, - {file = "regex-2024.9.11-cp312-cp312-win_amd64.whl", hash = "sha256:9e8719792ca63c6b8340380352c24dcb8cd7ec49dae36e963742a275dfae6009"}, - {file = "regex-2024.9.11-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c157bb447303070f256e084668b702073db99bbb61d44f85d811025fcf38f784"}, - {file = "regex-2024.9.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4db21ece84dfeefc5d8a3863f101995de646c6cb0536952c321a2650aa202c36"}, - {file = "regex-2024.9.11-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:220e92a30b426daf23bb67a7962900ed4613589bab80382be09b48896d211e92"}, - {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb1ae19e64c14c7ec1995f40bd932448713d3c73509e82d8cd7744dc00e29e86"}, - {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f47cd43a5bfa48f86925fe26fbdd0a488ff15b62468abb5d2a1e092a4fb10e85"}, - {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9d4a76b96f398697fe01117093613166e6aa8195d63f1b4ec3f21ab637632963"}, - {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ea51dcc0835eea2ea31d66456210a4e01a076d820e9039b04ae8d17ac11dee6"}, - {file = "regex-2024.9.11-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7aaa315101c6567a9a45d2839322c51c8d6e81f67683d529512f5bcfb99c802"}, - {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c57d08ad67aba97af57a7263c2d9006d5c404d721c5f7542f077f109ec2a4a29"}, - {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f8404bf61298bb6f8224bb9176c1424548ee1181130818fcd2cbffddc768bed8"}, - {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dd4490a33eb909ef5078ab20f5f000087afa2a4daa27b4c072ccb3cb3050ad84"}, - {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:eee9130eaad130649fd73e5cd92f60e55708952260ede70da64de420cdcad554"}, - {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6a2644a93da36c784e546de579ec1806bfd2763ef47babc1b03d765fe560c9f8"}, - {file = "regex-2024.9.11-cp313-cp313-win32.whl", hash = "sha256:e997fd30430c57138adc06bba4c7c2968fb13d101e57dd5bb9355bf8ce3fa7e8"}, - {file = "regex-2024.9.11-cp313-cp313-win_amd64.whl", hash = "sha256:042c55879cfeb21a8adacc84ea347721d3d83a159da6acdf1116859e2427c43f"}, - {file = "regex-2024.9.11-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:35f4a6f96aa6cb3f2f7247027b07b15a374f0d5b912c0001418d1d55024d5cb4"}, - {file = "regex-2024.9.11-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:55b96e7ce3a69a8449a66984c268062fbaa0d8ae437b285428e12797baefce7e"}, - {file = "regex-2024.9.11-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cb130fccd1a37ed894824b8c046321540263013da72745d755f2d35114b81a60"}, - {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:323c1f04be6b2968944d730e5c2091c8c89767903ecaa135203eec4565ed2b2b"}, - {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be1c8ed48c4c4065ecb19d882a0ce1afe0745dfad8ce48c49586b90a55f02366"}, - {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5b029322e6e7b94fff16cd120ab35a253236a5f99a79fb04fda7ae71ca20ae8"}, - {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6fff13ef6b5f29221d6904aa816c34701462956aa72a77f1f151a8ec4f56aeb"}, - {file = "regex-2024.9.11-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:587d4af3979376652010e400accc30404e6c16b7df574048ab1f581af82065e4"}, - {file = "regex-2024.9.11-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:079400a8269544b955ffa9e31f186f01d96829110a3bf79dc338e9910f794fca"}, - {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f9268774428ec173654985ce55fc6caf4c6d11ade0f6f914d48ef4719eb05ebb"}, - {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:23f9985c8784e544d53fc2930fc1ac1a7319f5d5332d228437acc9f418f2f168"}, - {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:ae2941333154baff9838e88aa71c1d84f4438189ecc6021a12c7573728b5838e"}, - {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:e93f1c331ca8e86fe877a48ad64e77882c0c4da0097f2212873a69bbfea95d0c"}, - {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:846bc79ee753acf93aef4184c040d709940c9d001029ceb7b7a52747b80ed2dd"}, - {file = "regex-2024.9.11-cp38-cp38-win32.whl", hash = "sha256:c94bb0a9f1db10a1d16c00880bdebd5f9faf267273b8f5bd1878126e0fbde771"}, - {file = "regex-2024.9.11-cp38-cp38-win_amd64.whl", hash = "sha256:2b08fce89fbd45664d3df6ad93e554b6c16933ffa9d55cb7e01182baaf971508"}, - {file = "regex-2024.9.11-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:07f45f287469039ffc2c53caf6803cd506eb5f5f637f1d4acb37a738f71dd066"}, - {file = "regex-2024.9.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4838e24ee015101d9f901988001038f7f0d90dc0c3b115541a1365fb439add62"}, - {file = "regex-2024.9.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6edd623bae6a737f10ce853ea076f56f507fd7726bee96a41ee3d68d347e4d16"}, - {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c69ada171c2d0e97a4b5aa78fbb835e0ffbb6b13fc5da968c09811346564f0d3"}, - {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02087ea0a03b4af1ed6ebab2c54d7118127fee8d71b26398e8e4b05b78963199"}, - {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:69dee6a020693d12a3cf892aba4808fe168d2a4cef368eb9bf74f5398bfd4ee8"}, - {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:297f54910247508e6e5cae669f2bc308985c60540a4edd1c77203ef19bfa63ca"}, - {file = "regex-2024.9.11-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ecea58b43a67b1b79805f1a0255730edaf5191ecef84dbc4cc85eb30bc8b63b9"}, - {file = "regex-2024.9.11-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eab4bb380f15e189d1313195b062a6aa908f5bd687a0ceccd47c8211e9cf0d4a"}, - {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0cbff728659ce4bbf4c30b2a1be040faafaa9eca6ecde40aaff86f7889f4ab39"}, - {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:54c4a097b8bc5bb0dfc83ae498061d53ad7b5762e00f4adaa23bee22b012e6ba"}, - {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:73d6d2f64f4d894c96626a75578b0bf7d9e56dcda8c3d037a2118fdfe9b1c664"}, - {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:e53b5fbab5d675aec9f0c501274c467c0f9a5d23696cfc94247e1fb56501ed89"}, - {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0ffbcf9221e04502fc35e54d1ce9567541979c3fdfb93d2c554f0ca583a19b35"}, - {file = "regex-2024.9.11-cp39-cp39-win32.whl", hash = "sha256:e4c22e1ac1f1ec1e09f72e6c44d8f2244173db7eb9629cc3a346a8d7ccc31142"}, - {file = "regex-2024.9.11-cp39-cp39-win_amd64.whl", hash = "sha256:faa3c142464efec496967359ca99696c896c591c56c53506bac1ad465f66e919"}, - {file = "regex-2024.9.11.tar.gz", hash = "sha256:6c188c307e8433bcb63dc1915022deb553b4203a70722fc542c363bf120a01fd"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62"}, + {file = "regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e"}, + {file = "regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45"}, + {file = "regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9"}, + {file = "regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad"}, + {file = "regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54"}, + {file = "regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d"}, + {file = "regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff"}, + {file = "regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f"}, + {file = "regex-2024.11.6-cp38-cp38-win32.whl", hash = "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4"}, + {file = "regex-2024.11.6-cp38-cp38-win_amd64.whl", hash = "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b"}, + {file = "regex-2024.11.6-cp39-cp39-win32.whl", hash = "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57"}, + {file = "regex-2024.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983"}, + {file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"}, ] [[package]] @@ -4535,33 +4670,34 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"] [[package]] name = "restrictedpython" -version = "7.2" +version = "7.4" description = "RestrictedPython is a defined subset of the Python language which allows to provide a program input into a trusted environment." optional = false -python-versions = "<3.13,>=3.7" +python-versions = "<3.14,>=3.8" files = [ - {file = "RestrictedPython-7.2-py3-none-any.whl", hash = "sha256:139cb41da6e57521745a566d05825f7a09e6a884f7fa922568cff0a70b84ce6b"}, - {file = "RestrictedPython-7.2.tar.gz", hash = "sha256:4d1d30f709a6621ca7c4236f08b67b732a651c8099145f137078c7dd4bed3d21"}, + {file = "RestrictedPython-7.4-py3-none-any.whl", hash = "sha256:f431c76f848f6f6d50ae21457cb503642db60889a273e4be439cf7ca4cbaf999"}, + {file = "restrictedpython-7.4.tar.gz", hash = "sha256:81b62924713dbd280917fceaecaf210fef7a49dddf1a08c8c214a3613fbeb425"}, ] [package.extras] -docs = ["Sphinx", "sphinx-rtd-theme"] +docs = ["Sphinx", "furo"] test = ["pytest", "pytest-mock"] [[package]] name = "rich" -version = "13.8.1" +version = "13.9.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "rich-13.8.1-py3-none-any.whl", hash = "sha256:1760a3c0848469b97b558fc61c85233e3dafb69c7a071b4d60c38099d3cd4c06"}, - {file = "rich-13.8.1.tar.gz", hash = "sha256:8260cda28e3db6bf04d2d1ef4dbc03ba80a824c88b0e7668a0f23126a424844a"}, + {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, + {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, ] [package.dependencies] markdown-it-py = ">=2.2.0" pygments = ">=2.13.0,<3.0.0" +typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.11\""} [package.extras] jupyter = ["ipywidgets (>=7.5.1,<9)"] @@ -4596,13 +4732,13 @@ pyasn1 = ">=0.1.3" [[package]] name = "runpod" -version = "1.7.0" +version = "1.7.5" description = "🐍 | Python library for RunPod API and serverless worker SDK." optional = false python-versions = ">=3.8" files = [ - {file = "runpod-1.7.0-py3-none-any.whl", hash = "sha256:1d2580fa2c6906263c686824ce25eac3edfeee6928b4e6b0690eb2a74ebb5999"}, - {file = "runpod-1.7.0.tar.gz", hash = "sha256:f340f57fcf803ed2126ecddcaa3ef51dec3d0eef63f3158852f6342123e480d6"}, + {file = "runpod-1.7.5-py3-none-any.whl", hash = "sha256:7b2c4abc5e9d5006a1597f22466d54b0deafd67b2e67a57f9272cf8cccd87d5b"}, + {file = "runpod-1.7.5.tar.gz", hash = "sha256:5fe8d3933cd7ca86998680e3e815521a61e9958d06886243b56dd49760c61c30"}, ] [package.dependencies] @@ -4612,7 +4748,7 @@ backoff = ">=2.2.1" boto3 = ">=1.26.165" click = ">=8.1.7" colorama = ">=0.2.5,<0.4.7" -cryptography = "<43.0.0" +cryptography = "<44.0.0" fastapi = {version = ">=0.94.0", extras = ["all"]} inquirerpy = "0.3.4" paramiko = ">=3.3.1" @@ -4626,17 +4762,17 @@ urllib3 = ">=1.26.6" watchdog = ">=3.0.0" [package.extras] -test = ["asynctest", "nest-asyncio", "pylint (==3.2.5)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-timeout", "pytest-watch"] +test = ["asynctest", "nest-asyncio", "pytest", "pytest-asyncio", "pytest-cov", "pytest-timeout", "pytest-watch"] [[package]] name = "s3transfer" -version = "0.10.2" +version = "0.10.4" description = "An Amazon S3 Transfer Manager" optional = false python-versions = ">=3.8" files = [ - {file = "s3transfer-0.10.2-py3-none-any.whl", hash = "sha256:eca1c20de70a39daee580aef4986996620f365c4e0fda6a86100231d62f1bf69"}, - {file = "s3transfer-0.10.2.tar.gz", hash = "sha256:0711534e9356d3cc692fdde846b4a1e4b0cb6519971860796e6bc4c7aea00ef6"}, + {file = "s3transfer-0.10.4-py3-none-any.whl", hash = "sha256:244a76a24355363a68164241438de1b72f8781664920260c48465896b712a41e"}, + {file = "s3transfer-0.10.4.tar.gz", hash = "sha256:29edc09801743c21eb5ecbc617a152df41d3c287f67b615f73e5f750583666a7"}, ] [package.dependencies] @@ -4874,47 +5010,50 @@ test = ["Cython", "array-api-strict (>=2.0)", "asv", "gmpy2", "hypothesis (>=6.3 [[package]] name = "sentence-transformers" -version = "3.1.1" +version = "3.3.1" description = "State-of-the-Art Text Embeddings" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "sentence_transformers-3.1.1-py3-none-any.whl", hash = "sha256:c73bf6f17e3676bb9372a6133a254ebfb5907586b470f2bac5a840c64c3cf97e"}, - {file = "sentence_transformers-3.1.1.tar.gz", hash = "sha256:8f00020ef4ad6b918475c38af545c22f61403b67eb22d994860bab06902db160"}, + {file = "sentence_transformers-3.3.1-py3-none-any.whl", hash = "sha256:abffcc79dab37b7d18d21a26d5914223dd42239cfe18cb5e111c66c54b658ae7"}, + {file = "sentence_transformers-3.3.1.tar.gz", hash = "sha256:9635dbfb11c6b01d036b9cfcee29f7716ab64cf2407ad9f403a2e607da2ac48b"}, ] [package.dependencies] -huggingface-hub = ">=0.19.3" +huggingface-hub = ">=0.20.0" Pillow = "*" scikit-learn = "*" scipy = "*" torch = ">=1.11.0" tqdm = "*" -transformers = ">=4.38.0,<5.0.0" +transformers = ">=4.41.0,<5.0.0" [package.extras] -dev = ["accelerate (>=0.20.3)", "datasets", "pre-commit", "pytest", "pytest-cov"] +dev = ["accelerate (>=0.20.3)", "datasets", "peft", "pre-commit", "pytest", "pytest-cov"] +onnx = ["optimum[onnxruntime] (>=1.23.1)"] +onnx-gpu = ["optimum[onnxruntime-gpu] (>=1.23.1)"] +openvino = ["optimum-intel[openvino] (>=1.20.0)"] train = ["accelerate (>=0.20.3)", "datasets"] [[package]] name = "setuptools" -version = "75.1.0" +version = "75.6.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "setuptools-75.1.0-py3-none-any.whl", hash = "sha256:35ab7fd3bcd95e6b7fd704e4a1539513edad446c097797f2985e0e4b960772f2"}, - {file = "setuptools-75.1.0.tar.gz", hash = "sha256:d59a21b17a275fb872a9c3dae73963160ae079f1049ed956880cd7c09b120538"}, + {file = "setuptools-75.6.0-py3-none-any.whl", hash = "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d"}, + {file = "setuptools-75.6.0.tar.gz", hash = "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"] -core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.collections", "jaraco.functools", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.7.0)"] +core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.11.*)", "pytest-mypy"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (>=1.12,<1.14)", "pytest-mypy"] [[package]] name = "shapely" @@ -5020,13 +5159,13 @@ files = [ [[package]] name = "starlette" -version = "0.38.6" +version = "0.41.3" description = "The little ASGI library that shines." optional = false python-versions = ">=3.8" files = [ - {file = "starlette-0.38.6-py3-none-any.whl", hash = "sha256:4517a1409e2e73ee4951214ba012052b9e16f60e90d73cfb06192c19203bbb05"}, - {file = "starlette-0.38.6.tar.gz", hash = "sha256:863a1588f5574e70a821dadefb41e4881ea451a47a3cd1b4df359d4ffefe5ead"}, + {file = "starlette-0.41.3-py3-none-any.whl", hash = "sha256:44cedb2b7c77a9de33a8b74b2b90e9f50d11fcf25d8270ea525ad71a25374ff7"}, + {file = "starlette-0.41.3.tar.gz", hash = "sha256:0e4ab3d16522a255be6b28260b938eae2482f98ce5cc934cb08dce8dc3ba5835"}, ] [package.dependencies] @@ -5111,47 +5250,42 @@ files = [ [[package]] name = "tiktoken" -version = "0.7.0" +version = "0.8.0" description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "tiktoken-0.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485f3cc6aba7c6b6ce388ba634fbba656d9ee27f766216f45146beb4ac18b25f"}, - {file = "tiktoken-0.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e54be9a2cd2f6d6ffa3517b064983fb695c9a9d8aa7d574d1ef3c3f931a99225"}, - {file = "tiktoken-0.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79383a6e2c654c6040e5f8506f3750db9ddd71b550c724e673203b4f6b4b4590"}, - {file = "tiktoken-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d4511c52caacf3c4981d1ae2df85908bd31853f33d30b345c8b6830763f769c"}, - {file = "tiktoken-0.7.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13c94efacdd3de9aff824a788353aa5749c0faee1fbe3816df365ea450b82311"}, - {file = "tiktoken-0.7.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8e58c7eb29d2ab35a7a8929cbeea60216a4ccdf42efa8974d8e176d50c9a3df5"}, - {file = "tiktoken-0.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:21a20c3bd1dd3e55b91c1331bf25f4af522c525e771691adbc9a69336fa7f702"}, - {file = "tiktoken-0.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:10c7674f81e6e350fcbed7c09a65bca9356eaab27fb2dac65a1e440f2bcfe30f"}, - {file = "tiktoken-0.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:084cec29713bc9d4189a937f8a35dbdfa785bd1235a34c1124fe2323821ee93f"}, - {file = "tiktoken-0.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:811229fde1652fedcca7c6dfe76724d0908775b353556d8a71ed74d866f73f7b"}, - {file = "tiktoken-0.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b6e7dc2e7ad1b3757e8a24597415bafcfb454cebf9a33a01f2e6ba2e663992"}, - {file = "tiktoken-0.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1063c5748be36344c7e18c7913c53e2cca116764c2080177e57d62c7ad4576d1"}, - {file = "tiktoken-0.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:20295d21419bfcca092644f7e2f2138ff947a6eb8cfc732c09cc7d76988d4a89"}, - {file = "tiktoken-0.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:959d993749b083acc57a317cbc643fb85c014d055b2119b739487288f4e5d1cb"}, - {file = "tiktoken-0.7.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:71c55d066388c55a9c00f61d2c456a6086673ab7dec22dd739c23f77195b1908"}, - {file = "tiktoken-0.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:09ed925bccaa8043e34c519fbb2f99110bd07c6fd67714793c21ac298e449410"}, - {file = "tiktoken-0.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03c6c40ff1db0f48a7b4d2dafeae73a5607aacb472fa11f125e7baf9dce73704"}, - {file = "tiktoken-0.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d20b5c6af30e621b4aca094ee61777a44118f52d886dbe4f02b70dfe05c15350"}, - {file = "tiktoken-0.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d427614c3e074004efa2f2411e16c826f9df427d3c70a54725cae860f09e4bf4"}, - {file = "tiktoken-0.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8c46d7af7b8c6987fac9b9f61041b452afe92eb087d29c9ce54951280f899a97"}, - {file = "tiktoken-0.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:0bc603c30b9e371e7c4c7935aba02af5994a909fc3c0fe66e7004070858d3f8f"}, - {file = "tiktoken-0.7.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2398fecd38c921bcd68418675a6d155fad5f5e14c2e92fcf5fe566fa5485a858"}, - {file = "tiktoken-0.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f5f6afb52fb8a7ea1c811e435e4188f2bef81b5e0f7a8635cc79b0eef0193d6"}, - {file = "tiktoken-0.7.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:861f9ee616766d736be4147abac500732b505bf7013cfaf019b85892637f235e"}, - {file = "tiktoken-0.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54031f95c6939f6b78122c0aa03a93273a96365103793a22e1793ee86da31685"}, - {file = "tiktoken-0.7.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:fffdcb319b614cf14f04d02a52e26b1d1ae14a570f90e9b55461a72672f7b13d"}, - {file = "tiktoken-0.7.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c72baaeaefa03ff9ba9688624143c858d1f6b755bb85d456d59e529e17234769"}, - {file = "tiktoken-0.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:131b8aeb043a8f112aad9f46011dced25d62629091e51d9dc1adbf4a1cc6aa98"}, - {file = "tiktoken-0.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cabc6dc77460df44ec5b879e68692c63551ae4fae7460dd4ff17181df75f1db7"}, - {file = "tiktoken-0.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8d57f29171255f74c0aeacd0651e29aa47dff6f070cb9f35ebc14c82278f3b25"}, - {file = "tiktoken-0.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ee92776fdbb3efa02a83f968c19d4997a55c8e9ce7be821ceee04a1d1ee149c"}, - {file = "tiktoken-0.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e215292e99cb41fbc96988ef62ea63bb0ce1e15f2c147a61acc319f8b4cbe5bf"}, - {file = "tiktoken-0.7.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8a81bac94769cab437dd3ab0b8a4bc4e0f9cf6835bcaa88de71f39af1791727a"}, - {file = "tiktoken-0.7.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d6d73ea93e91d5ca771256dfc9d1d29f5a554b83821a1dc0891987636e0ae226"}, - {file = "tiktoken-0.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:2bcb28ddf79ffa424f171dfeef9a4daff61a94c631ca6813f43967cb263b83b9"}, - {file = "tiktoken-0.7.0.tar.gz", hash = "sha256:1077266e949c24e0291f6c350433c6f0971365ece2b173a23bc3b9f9defef6b6"}, + {file = "tiktoken-0.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b07e33283463089c81ef1467180e3e00ab00d46c2c4bbcef0acab5f771d6695e"}, + {file = "tiktoken-0.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9269348cb650726f44dd3bbb3f9110ac19a8dcc8f54949ad3ef652ca22a38e21"}, + {file = "tiktoken-0.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e13f37bc4ef2d012731e93e0fef21dc3b7aea5bb9009618de9a4026844e560"}, + {file = "tiktoken-0.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f13d13c981511331eac0d01a59b5df7c0d4060a8be1e378672822213da51e0a2"}, + {file = "tiktoken-0.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6b2ddbc79a22621ce8b1166afa9f9a888a664a579350dc7c09346a3b5de837d9"}, + {file = "tiktoken-0.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d8c2d0e5ba6453a290b86cd65fc51fedf247e1ba170191715b049dac1f628005"}, + {file = "tiktoken-0.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d622d8011e6d6f239297efa42a2657043aaed06c4f68833550cac9e9bc723ef1"}, + {file = "tiktoken-0.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2efaf6199717b4485031b4d6edb94075e4d79177a172f38dd934d911b588d54a"}, + {file = "tiktoken-0.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5637e425ce1fc49cf716d88df3092048359a4b3bbb7da762840426e937ada06d"}, + {file = "tiktoken-0.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fb0e352d1dbe15aba082883058b3cce9e48d33101bdaac1eccf66424feb5b47"}, + {file = "tiktoken-0.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:56edfefe896c8f10aba372ab5706b9e3558e78db39dd497c940b47bf228bc419"}, + {file = "tiktoken-0.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:326624128590def898775b722ccc327e90b073714227175ea8febbc920ac0a99"}, + {file = "tiktoken-0.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:881839cfeae051b3628d9823b2e56b5cc93a9e2efb435f4cf15f17dc45f21586"}, + {file = "tiktoken-0.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fe9399bdc3f29d428f16a2f86c3c8ec20be3eac5f53693ce4980371c3245729b"}, + {file = "tiktoken-0.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a58deb7075d5b69237a3ff4bb51a726670419db6ea62bdcd8bd80c78497d7ab"}, + {file = "tiktoken-0.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2908c0d043a7d03ebd80347266b0e58440bdef5564f84f4d29fb235b5df3b04"}, + {file = "tiktoken-0.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:294440d21a2a51e12d4238e68a5972095534fe9878be57d905c476017bff99fc"}, + {file = "tiktoken-0.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:d8f3192733ac4d77977432947d563d7e1b310b96497acd3c196c9bddb36ed9db"}, + {file = "tiktoken-0.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:02be1666096aff7da6cbd7cdaa8e7917bfed3467cd64b38b1f112e96d3b06a24"}, + {file = "tiktoken-0.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94ff53c5c74b535b2cbf431d907fc13c678bbd009ee633a2aca269a04389f9a"}, + {file = "tiktoken-0.8.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b231f5e8982c245ee3065cd84a4712d64692348bc609d84467c57b4b72dcbc5"}, + {file = "tiktoken-0.8.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4177faa809bd55f699e88c96d9bb4635d22e3f59d635ba6fd9ffedf7150b9953"}, + {file = "tiktoken-0.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5376b6f8dc4753cd81ead935c5f518fa0fbe7e133d9e25f648d8c4dabdd4bad7"}, + {file = "tiktoken-0.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:18228d624807d66c87acd8f25fc135665617cab220671eb65b50f5d70fa51f69"}, + {file = "tiktoken-0.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7e17807445f0cf1f25771c9d86496bd8b5c376f7419912519699f3cc4dc5c12e"}, + {file = "tiktoken-0.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:886f80bd339578bbdba6ed6d0567a0d5c6cfe198d9e587ba6c447654c65b8edc"}, + {file = "tiktoken-0.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6adc8323016d7758d6de7313527f755b0fc6c72985b7d9291be5d96d73ecd1e1"}, + {file = "tiktoken-0.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b591fb2b30d6a72121a80be24ec7a0e9eb51c5500ddc7e4c2496516dd5e3816b"}, + {file = "tiktoken-0.8.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:845287b9798e476b4d762c3ebda5102be87ca26e5d2c9854002825d60cdb815d"}, + {file = "tiktoken-0.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:1473cfe584252dc3fa62adceb5b1c763c1874e04511b197da4e6de51d6ce5a02"}, + {file = "tiktoken-0.8.0.tar.gz", hash = "sha256:9ccbb2740f24542534369c5635cfd9b2b3c2490754a78ac8831d99f89f94eeb2"}, ] [package.dependencies] @@ -5163,111 +5297,123 @@ blobfile = ["blobfile (>=2)"] [[package]] name = "tokenizers" -version = "0.19.1" +version = "0.20.3" description = "" optional = false python-versions = ">=3.7" files = [ - {file = "tokenizers-0.19.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:952078130b3d101e05ecfc7fc3640282d74ed26bcf691400f872563fca15ac97"}, - {file = "tokenizers-0.19.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:82c8b8063de6c0468f08e82c4e198763e7b97aabfe573fd4cf7b33930ca4df77"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f03727225feaf340ceeb7e00604825addef622d551cbd46b7b775ac834c1e1c4"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:453e4422efdfc9c6b6bf2eae00d5e323f263fff62b29a8c9cd526c5003f3f642"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:02e81bf089ebf0e7f4df34fa0207519f07e66d8491d963618252f2e0729e0b46"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b07c538ba956843833fee1190cf769c60dc62e1cf934ed50d77d5502194d63b1"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28cab1582e0eec38b1f38c1c1fb2e56bce5dc180acb1724574fc5f47da2a4fe"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b01afb7193d47439f091cd8f070a1ced347ad0f9144952a30a41836902fe09e"}, - {file = "tokenizers-0.19.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7fb297edec6c6841ab2e4e8f357209519188e4a59b557ea4fafcf4691d1b4c98"}, - {file = "tokenizers-0.19.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2e8a3dd055e515df7054378dc9d6fa8c8c34e1f32777fb9a01fea81496b3f9d3"}, - {file = "tokenizers-0.19.1-cp310-none-win32.whl", hash = "sha256:7ff898780a155ea053f5d934925f3902be2ed1f4d916461e1a93019cc7250837"}, - {file = "tokenizers-0.19.1-cp310-none-win_amd64.whl", hash = "sha256:bea6f9947e9419c2fda21ae6c32871e3d398cba549b93f4a65a2d369662d9403"}, - {file = "tokenizers-0.19.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5c88d1481f1882c2e53e6bb06491e474e420d9ac7bdff172610c4f9ad3898059"}, - {file = "tokenizers-0.19.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ddf672ed719b4ed82b51499100f5417d7d9f6fb05a65e232249268f35de5ed14"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dadc509cc8a9fe460bd274c0e16ac4184d0958117cf026e0ea8b32b438171594"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfedf31824ca4915b511b03441784ff640378191918264268e6923da48104acc"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac11016d0a04aa6487b1513a3a36e7bee7eec0e5d30057c9c0408067345c48d2"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76951121890fea8330d3a0df9a954b3f2a37e3ec20e5b0530e9a0044ca2e11fe"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b342d2ce8fc8d00f376af068e3274e2e8649562e3bc6ae4a67784ded6b99428d"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d16ff18907f4909dca9b076b9c2d899114dd6abceeb074eca0c93e2353f943aa"}, - {file = "tokenizers-0.19.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:706a37cc5332f85f26efbe2bdc9ef8a9b372b77e4645331a405073e4b3a8c1c6"}, - {file = "tokenizers-0.19.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:16baac68651701364b0289979ecec728546133e8e8fe38f66fe48ad07996b88b"}, - {file = "tokenizers-0.19.1-cp311-none-win32.whl", hash = "sha256:9ed240c56b4403e22b9584ee37d87b8bfa14865134e3e1c3fb4b2c42fafd3256"}, - {file = "tokenizers-0.19.1-cp311-none-win_amd64.whl", hash = "sha256:ad57d59341710b94a7d9dbea13f5c1e7d76fd8d9bcd944a7a6ab0b0da6e0cc66"}, - {file = "tokenizers-0.19.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:621d670e1b1c281a1c9698ed89451395d318802ff88d1fc1accff0867a06f153"}, - {file = "tokenizers-0.19.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d924204a3dbe50b75630bd16f821ebda6a5f729928df30f582fb5aade90c818a"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4f3fefdc0446b1a1e6d81cd4c07088ac015665d2e812f6dbba4a06267d1a2c95"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9620b78e0b2d52ef07b0d428323fb34e8ea1219c5eac98c2596311f20f1f9266"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04ce49e82d100594715ac1b2ce87d1a36e61891a91de774755f743babcd0dd52"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5c2ff13d157afe413bf7e25789879dd463e5a4abfb529a2d8f8473d8042e28f"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3174c76efd9d08f836bfccaca7cfec3f4d1c0a4cf3acbc7236ad577cc423c840"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c9d5b6c0e7a1e979bec10ff960fae925e947aab95619a6fdb4c1d8ff3708ce3"}, - {file = "tokenizers-0.19.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a179856d1caee06577220ebcfa332af046d576fb73454b8f4d4b0ba8324423ea"}, - {file = "tokenizers-0.19.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:952b80dac1a6492170f8c2429bd11fcaa14377e097d12a1dbe0ef2fb2241e16c"}, - {file = "tokenizers-0.19.1-cp312-none-win32.whl", hash = "sha256:01d62812454c188306755c94755465505836fd616f75067abcae529c35edeb57"}, - {file = "tokenizers-0.19.1-cp312-none-win_amd64.whl", hash = "sha256:b70bfbe3a82d3e3fb2a5e9b22a39f8d1740c96c68b6ace0086b39074f08ab89a"}, - {file = "tokenizers-0.19.1-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:bb9dfe7dae85bc6119d705a76dc068c062b8b575abe3595e3c6276480e67e3f1"}, - {file = "tokenizers-0.19.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:1f0360cbea28ea99944ac089c00de7b2e3e1c58f479fb8613b6d8d511ce98267"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:71e3ec71f0e78780851fef28c2a9babe20270404c921b756d7c532d280349214"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b82931fa619dbad979c0ee8e54dd5278acc418209cc897e42fac041f5366d626"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e8ff5b90eabdcdaa19af697885f70fe0b714ce16709cf43d4952f1f85299e73a"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e742d76ad84acbdb1a8e4694f915fe59ff6edc381c97d6dfdd054954e3478ad4"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d8c5d59d7b59885eab559d5bc082b2985555a54cda04dda4c65528d90ad252ad"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b2da5c32ed869bebd990c9420df49813709e953674c0722ff471a116d97b22d"}, - {file = "tokenizers-0.19.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:638e43936cc8b2cbb9f9d8dde0fe5e7e30766a3318d2342999ae27f68fdc9bd6"}, - {file = "tokenizers-0.19.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:78e769eb3b2c79687d9cb0f89ef77223e8e279b75c0a968e637ca7043a84463f"}, - {file = "tokenizers-0.19.1-cp37-none-win32.whl", hash = "sha256:72791f9bb1ca78e3ae525d4782e85272c63faaef9940d92142aa3eb79f3407a3"}, - {file = "tokenizers-0.19.1-cp37-none-win_amd64.whl", hash = "sha256:f3bbb7a0c5fcb692950b041ae11067ac54826204318922da754f908d95619fbc"}, - {file = "tokenizers-0.19.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:07f9295349bbbcedae8cefdbcfa7f686aa420be8aca5d4f7d1ae6016c128c0c5"}, - {file = "tokenizers-0.19.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:10a707cc6c4b6b183ec5dbfc5c34f3064e18cf62b4a938cb41699e33a99e03c1"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6309271f57b397aa0aff0cbbe632ca9d70430839ca3178bf0f06f825924eca22"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ad23d37d68cf00d54af184586d79b84075ada495e7c5c0f601f051b162112dc"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:427c4f0f3df9109314d4f75b8d1f65d9477033e67ffaec4bca53293d3aca286d"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e83a31c9cf181a0a3ef0abad2b5f6b43399faf5da7e696196ddd110d332519ee"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c27b99889bd58b7e301468c0838c5ed75e60c66df0d4db80c08f43462f82e0d3"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bac0b0eb952412b0b196ca7a40e7dce4ed6f6926489313414010f2e6b9ec2adf"}, - {file = "tokenizers-0.19.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8a6298bde623725ca31c9035a04bf2ef63208d266acd2bed8c2cb7d2b7d53ce6"}, - {file = "tokenizers-0.19.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:08a44864e42fa6d7d76d7be4bec62c9982f6f6248b4aa42f7302aa01e0abfd26"}, - {file = "tokenizers-0.19.1-cp38-none-win32.whl", hash = "sha256:1de5bc8652252d9357a666e609cb1453d4f8e160eb1fb2830ee369dd658e8975"}, - {file = "tokenizers-0.19.1-cp38-none-win_amd64.whl", hash = "sha256:0bcce02bf1ad9882345b34d5bd25ed4949a480cf0e656bbd468f4d8986f7a3f1"}, - {file = "tokenizers-0.19.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0b9394bd204842a2a1fd37fe29935353742be4a3460b6ccbaefa93f58a8df43d"}, - {file = "tokenizers-0.19.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4692ab92f91b87769d950ca14dbb61f8a9ef36a62f94bad6c82cc84a51f76f6a"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6258c2ef6f06259f70a682491c78561d492e885adeaf9f64f5389f78aa49a051"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c85cf76561fbd01e0d9ea2d1cbe711a65400092bc52b5242b16cfd22e51f0c58"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:670b802d4d82bbbb832ddb0d41df7015b3e549714c0e77f9bed3e74d42400fbe"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:85aa3ab4b03d5e99fdd31660872249df5e855334b6c333e0bc13032ff4469c4a"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cbf001afbbed111a79ca47d75941e9e5361297a87d186cbfc11ed45e30b5daba"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c89aa46c269e4e70c4d4f9d6bc644fcc39bb409cb2a81227923404dd6f5227"}, - {file = "tokenizers-0.19.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:39c1ec76ea1027438fafe16ecb0fb84795e62e9d643444c1090179e63808c69d"}, - {file = "tokenizers-0.19.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c2a0d47a89b48d7daa241e004e71fb5a50533718897a4cd6235cb846d511a478"}, - {file = "tokenizers-0.19.1-cp39-none-win32.whl", hash = "sha256:61b7fe8886f2e104d4caf9218b157b106207e0f2a4905c9c7ac98890688aabeb"}, - {file = "tokenizers-0.19.1-cp39-none-win_amd64.whl", hash = "sha256:f97660f6c43efd3e0bfd3f2e3e5615bf215680bad6ee3d469df6454b8c6e8256"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3b11853f17b54c2fe47742c56d8a33bf49ce31caf531e87ac0d7d13d327c9334"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d26194ef6c13302f446d39972aaa36a1dda6450bc8949f5eb4c27f51191375bd"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e8d1ed93beda54bbd6131a2cb363a576eac746d5c26ba5b7556bc6f964425594"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca407133536f19bdec44b3da117ef0d12e43f6d4b56ac4c765f37eca501c7bda"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce05fde79d2bc2e46ac08aacbc142bead21614d937aac950be88dc79f9db9022"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:35583cd46d16f07c054efd18b5d46af4a2f070a2dd0a47914e66f3ff5efb2b1e"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:43350270bfc16b06ad3f6f07eab21f089adb835544417afda0f83256a8bf8b75"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b4399b59d1af5645bcee2072a463318114c39b8547437a7c2d6a186a1b5a0e2d"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6852c5b2a853b8b0ddc5993cd4f33bfffdca4fcc5d52f89dd4b8eada99379285"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcd266ae85c3d39df2f7e7d0e07f6c41a55e9a3123bb11f854412952deacd828"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecb2651956eea2aa0a2d099434134b1b68f1c31f9a5084d6d53f08ed43d45ff2"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:b279ab506ec4445166ac476fb4d3cc383accde1ea152998509a94d82547c8e2a"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:89183e55fb86e61d848ff83753f64cded119f5d6e1f553d14ffee3700d0a4a49"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b2edbc75744235eea94d595a8b70fe279dd42f3296f76d5a86dde1d46e35f574"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:0e64bfde9a723274e9a71630c3e9494ed7b4c0f76a1faacf7fe294cd26f7ae7c"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b5ca92bfa717759c052e345770792d02d1f43b06f9e790ca0a1db62838816f3"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f8a20266e695ec9d7a946a019c1d5ca4eddb6613d4f466888eee04f16eedb85"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63c38f45d8f2a2ec0f3a20073cccb335b9f99f73b3c69483cd52ebc75369d8a1"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:dd26e3afe8a7b61422df3176e06664503d3f5973b94f45d5c45987e1cb711876"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:eddd5783a4a6309ce23432353cdb36220e25cbb779bfa9122320666508b44b88"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:56ae39d4036b753994476a1b935584071093b55c7a72e3b8288e68c313ca26e7"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f9939ca7e58c2758c01b40324a59c034ce0cebad18e0d4563a9b1beab3018243"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c330c0eb815d212893c67a032e9dc1b38a803eccb32f3e8172c19cc69fbb439"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec11802450a2487cdf0e634b750a04cbdc1c4d066b97d94ce7dd2cb51ebb325b"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2b718f316b596f36e1dae097a7d5b91fc5b85e90bf08b01ff139bd8953b25af"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:ed69af290c2b65169f0ba9034d1dc39a5db9459b32f1dd8b5f3f32a3fcf06eab"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f8a9c828277133af13f3859d1b6bf1c3cb6e9e1637df0e45312e6b7c2e622b1f"}, - {file = "tokenizers-0.19.1.tar.gz", hash = "sha256:ee59e6680ed0fdbe6b724cf38bd70400a0c1dd623b07ac729087270caeac88e3"}, + {file = "tokenizers-0.20.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:31ccab28dbb1a9fe539787210b0026e22debeab1662970f61c2d921f7557f7e4"}, + {file = "tokenizers-0.20.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c6361191f762bda98c773da418cf511cbaa0cb8d0a1196f16f8c0119bde68ff8"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f128d5da1202b78fa0a10d8d938610472487da01b57098d48f7e944384362514"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79c4121a2e9433ad7ef0769b9ca1f7dd7fa4c0cd501763d0a030afcbc6384481"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7850fde24197fe5cd6556e2fdba53a6d3bae67c531ea33a3d7c420b90904141"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b357970c095dc134978a68c67d845a1e3803ab7c4fbb39195bde914e7e13cf8b"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a333d878c4970b72d6c07848b90c05f6b045cf9273fc2bc04a27211721ad6118"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fd9fee817f655a8f50049f685e224828abfadd436b8ff67979fc1d054b435f1"}, + {file = "tokenizers-0.20.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9e7816808b402129393a435ea2a509679b41246175d6e5e9f25b8692bfaa272b"}, + {file = "tokenizers-0.20.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba96367db9d8a730d3a1d5996b4b7babb846c3994b8ef14008cd8660f55db59d"}, + {file = "tokenizers-0.20.3-cp310-none-win32.whl", hash = "sha256:ee31ba9d7df6a98619426283e80c6359f167e2e9882d9ce1b0254937dbd32f3f"}, + {file = "tokenizers-0.20.3-cp310-none-win_amd64.whl", hash = "sha256:a845c08fdad554fe0871d1255df85772f91236e5fd6b9287ef8b64f5807dbd0c"}, + {file = "tokenizers-0.20.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:585b51e06ca1f4839ce7759941e66766d7b060dccfdc57c4ca1e5b9a33013a90"}, + {file = "tokenizers-0.20.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:61cbf11954f3b481d08723ebd048ba4b11e582986f9be74d2c3bdd9293a4538d"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef820880d5e4e8484e2fa54ff8d297bb32519eaa7815694dc835ace9130a3eea"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:67ef4dcb8841a4988cd00dd288fb95dfc8e22ed021f01f37348fd51c2b055ba9"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff1ef8bd47a02b0dc191688ccb4da53600df5d4c9a05a4b68e1e3de4823e78eb"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:444d188186eab3148baf0615b522461b41b1f0cd58cd57b862ec94b6ac9780f1"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37c04c032c1442740b2c2d925f1857885c07619224a533123ac7ea71ca5713da"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:453c7769d22231960ee0e883d1005c93c68015025a5e4ae56275406d94a3c907"}, + {file = "tokenizers-0.20.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4bb31f7b2847e439766aaa9cc7bccf7ac7088052deccdb2275c952d96f691c6a"}, + {file = "tokenizers-0.20.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:843729bf0f991b29655a069a2ff58a4c24375a553c70955e15e37a90dd4e045c"}, + {file = "tokenizers-0.20.3-cp311-none-win32.whl", hash = "sha256:efcce3a927b1e20ca694ba13f7a68c59b0bd859ef71e441db68ee42cf20c2442"}, + {file = "tokenizers-0.20.3-cp311-none-win_amd64.whl", hash = "sha256:88301aa0801f225725b6df5dea3d77c80365ff2362ca7e252583f2b4809c4cc0"}, + {file = "tokenizers-0.20.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:49d12a32e190fad0e79e5bdb788d05da2f20d8e006b13a70859ac47fecf6ab2f"}, + {file = "tokenizers-0.20.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:282848cacfb9c06d5e51489f38ec5aa0b3cd1e247a023061945f71f41d949d73"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abe4e08c7d0cd6154c795deb5bf81d2122f36daf075e0c12a8b050d824ef0a64"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca94fc1b73b3883c98f0c88c77700b13d55b49f1071dfd57df2b06f3ff7afd64"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef279c7e239f95c8bdd6ff319d9870f30f0d24915b04895f55b1adcf96d6c60d"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16384073973f6ccbde9852157a4fdfe632bb65208139c9d0c0bd0176a71fd67f"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:312d522caeb8a1a42ebdec87118d99b22667782b67898a76c963c058a7e41d4f"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2b7cb962564785a83dafbba0144ecb7f579f1d57d8c406cdaa7f32fe32f18ad"}, + {file = "tokenizers-0.20.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:124c5882ebb88dadae1fc788a582299fcd3a8bd84fc3e260b9918cf28b8751f5"}, + {file = "tokenizers-0.20.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2b6e54e71f84c4202111a489879005cb14b92616a87417f6c102c833af961ea2"}, + {file = "tokenizers-0.20.3-cp312-none-win32.whl", hash = "sha256:83d9bfbe9af86f2d9df4833c22e94d94750f1d0cd9bfb22a7bb90a86f61cdb1c"}, + {file = "tokenizers-0.20.3-cp312-none-win_amd64.whl", hash = "sha256:44def74cee574d609a36e17c8914311d1b5dbcfe37c55fd29369d42591b91cf2"}, + {file = "tokenizers-0.20.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e0b630e0b536ef0e3c8b42c685c1bc93bd19e98c0f1543db52911f8ede42cf84"}, + {file = "tokenizers-0.20.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a02d160d2b19bcbfdf28bd9a4bf11be4cb97d0499c000d95d4c4b1a4312740b6"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e3d80d89b068bc30034034b5319218c7c0a91b00af19679833f55f3becb6945"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:174a54910bed1b089226512b4458ea60d6d6fd93060254734d3bc3540953c51c"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:098b8a632b8656aa5802c46689462c5c48f02510f24029d71c208ec2c822e771"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:78c8c143e3ae41e718588281eb3e212c2b31623c9d6d40410ec464d7d6221fb5"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b26b0aadb18cd8701077362ba359a06683662d5cafe3e8e8aba10eb05c037f1"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07d7851a72717321022f3774e84aa9d595a041d643fafa2e87fbc9b18711dac0"}, + {file = "tokenizers-0.20.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:bd44e48a430ada902c6266a8245f5036c4fe744fcb51f699999fbe82aa438797"}, + {file = "tokenizers-0.20.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a4c186bb006ccbe1f5cc4e0380d1ce7806f5955c244074fd96abc55e27b77f01"}, + {file = "tokenizers-0.20.3-cp313-none-win32.whl", hash = "sha256:6e19e0f1d854d6ab7ea0c743d06e764d1d9a546932be0a67f33087645f00fe13"}, + {file = "tokenizers-0.20.3-cp313-none-win_amd64.whl", hash = "sha256:d50ede425c7e60966a9680d41b58b3a0950afa1bb570488e2972fa61662c4273"}, + {file = "tokenizers-0.20.3-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:9adda1ff5fb9dcdf899ceca672a4e2ce9e797adb512a6467305ca3d8bfcfbdd0"}, + {file = "tokenizers-0.20.3-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:6dde2cae6004ba7a3badff4a11911cae03ebf23e97eebfc0e71fef2530e5074f"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4a7fd678b35614fca708579eb95b7587a5e8a6d328171bd2488fd9f27d82be4"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1b80e3c7283a01a356bd2210f53d1a4a5d32b269c2024389ed0173137708d50e"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a8cc0e8176b762973758a77f0d9c4467d310e33165fb74173418ca3734944da4"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5634b2e2f5f3d2b4439d2d74066e22eb4b1f04f3fea05cb2a3c12d89b5a3bcd"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b4ba635165bc1ea46f2da8e5d80b5f70f6ec42161e38d96dbef33bb39df73964"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18e4c7c64172e7789bd8b07aa3087ea87c4c4de7e90937a2aa036b5d92332536"}, + {file = "tokenizers-0.20.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1f74909ef7675c26d4095a817ec3393d67f3158ca4836c233212e5613ef640c4"}, + {file = "tokenizers-0.20.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0e9b81321a1e05b16487d312b4264984513f8b4a7556229cafac6e88c2036b09"}, + {file = "tokenizers-0.20.3-cp37-none-win32.whl", hash = "sha256:ab48184cd58b4a03022a2ec75b54c9f600ffea9a733612c02325ed636f353729"}, + {file = "tokenizers-0.20.3-cp37-none-win_amd64.whl", hash = "sha256:60ac483cebee1c12c71878523e768df02fa17e4c54412966cb3ac862c91b36c1"}, + {file = "tokenizers-0.20.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3229ef103c89583d10b9378afa5d601b91e6337530a0988e17ca8d635329a996"}, + {file = "tokenizers-0.20.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6ac52cc24bad3de865c7e65b1c4e7b70d00938a8ae09a92a453b8f676e714ad5"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04627b7b502fa6a2a005e1bd446fa4247d89abcb1afaa1b81eb90e21aba9a60f"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c27ceb887f0e81a3c377eb4605dca7a95a81262761c0fba308d627b2abb98f2b"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65ab780194da4e1fcf5670523a2f377c4838ebf5249efe41fa1eddd2a84fb49d"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98d343134f47159e81f7f242264b0eb222e6b802f37173c8d7d7b64d5c9d1388"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2475bb004ab2009d29aff13b5047bfdb3d4b474f0aa9d4faa13a7f34dbbbb43"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b6583a65c01db1197c1eb36857ceba8ec329d53afadd268b42a6b04f4965724"}, + {file = "tokenizers-0.20.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:62d00ba208358c037eeab7bfc00a905adc67b2d31b68ab40ed09d75881e114ea"}, + {file = "tokenizers-0.20.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0fc7a39e5bedc817bda395a798dfe2d9c5f7c71153c90d381b5135a0328d9520"}, + {file = "tokenizers-0.20.3-cp38-none-win32.whl", hash = "sha256:84d40ee0f8550d64d3ea92dd7d24a8557a9172165bdb986c9fb2503b4fe4e3b6"}, + {file = "tokenizers-0.20.3-cp38-none-win_amd64.whl", hash = "sha256:205a45246ed7f1718cf3785cff88450ba603352412aaf220ace026384aa3f1c0"}, + {file = "tokenizers-0.20.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:93e37f0269a11dc3b1a953f1fca9707f0929ebf8b4063c591c71a0664219988e"}, + {file = "tokenizers-0.20.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f4cb0c614b0135e781de96c2af87e73da0389ac1458e2a97562ed26e29490d8d"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7eb2fb1c432f5746b22f8a7f09fc18c4156cb0031c77f53cb19379d82d43297a"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bfa8d029bb156181b006643309d6b673615a24e4ed24cf03aa191d599b996f51"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f90549622de3bf476ad9f1dd6f3f952ec3ed6ab8615ae88ef060d0c5bfad55d"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1d469c74eebf5c43fd61cd9b030e271d17198edd7bd45392e03a3c091d7d6d4"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bee8f53b2594749f4460d53253bae55d718f04e9b633efa0f5df8938bd98e4f0"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:938441babf3e5720e4459e306ef2809fb267680df9d1ff2873458b22aef60248"}, + {file = "tokenizers-0.20.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7310ab23d7b0caebecc0e8be11a1146f320f5f07284000f6ea54793e83de1b75"}, + {file = "tokenizers-0.20.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:16121eb030a2b13094cfec936b0c12e8b4063c5f839591ea7d0212336d8f9921"}, + {file = "tokenizers-0.20.3-cp39-none-win32.whl", hash = "sha256:401cc21ef642ee235985d747f65e18f639464d377c70836c9003df208d582064"}, + {file = "tokenizers-0.20.3-cp39-none-win_amd64.whl", hash = "sha256:7498f3ea7746133335a6adb67a77cf77227a8b82c8483f644a2e5f86fea42b8d"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e919f2e3e68bb51dc31de4fcbbeff3bdf9c1cad489044c75e2b982a91059bd3c"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b8e9608f2773996cc272156e305bd79066163a66b0390fe21750aff62df1ac07"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39270a7050deaf50f7caff4c532c01b3c48f6608d42b3eacdebdc6795478c8df"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e005466632b1c5d2d2120f6de8aa768cc9d36cd1ab7d51d0c27a114c91a1e6ee"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a07962340b36189b6c8feda552ea1bfeee6cf067ff922a1d7760662c2ee229e5"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:55046ad3dd5f2b3c67501fcc8c9cbe3e901d8355f08a3b745e9b57894855f85b"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:efcf0eb939988b627558aaf2b9dc3e56d759cad2e0cfa04fcab378e4b48fc4fd"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f3558a7ae6a6d38a77dfce12172a1e2e1bf3e8871e744a1861cd7591ea9ebe24"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d53029fe44bc70c3ff14ef512460a0cf583495a0f8e2f4b70e26eb9438e38a9"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57a2a56397b2bec5a629b516b23f0f8a3e4f978c7488d4a299980f8375954b85"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e5bfaae740ef9ece000f8a07e78ac0e2b085c5ce9648f8593ddf0243c9f76d"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fbaf3ea28fedfb2283da60e710aff25492e795a7397cad8a50f1e079b65a5a70"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c47c037116310dc976eb96b008e41b9cfaba002ed8005848d4d632ee0b7ba9ae"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c31751f0721f58f5e19bb27c1acc259aeff860d8629c4e1a900b26a1979ada8e"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:c697cbd3be7a79ea250ea5f380d6f12e534c543cfb137d5c734966b3ee4f34cc"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b48971b88ef9130bf35b41b35fd857c3c4dae4a9cd7990ebc7fc03e59cc92438"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e615de179bbe060ab33773f0d98a8a8572b5883dd7dac66c1de8c056c7e748c"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da1ec842035ed9999c62e45fbe0ff14b7e8a7e02bb97688cc6313cf65e5cd755"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:6ee4954c1dd23aadc27958dad759006e71659d497dcb0ef0c7c87ea992c16ebd"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3eda46ca402751ec82553a321bf35a617b76bbed7586e768c02ccacbdda94d6d"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:de082392a85eb0055cc055c535bff2f0cc15d7a000bdc36fbf601a0f3cf8507a"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c3db46cc0647bfd88263afdb739b92017a02a87ee30945cb3e86c7e25c7c9917"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a292392f24ab9abac5cfa8197e5a6208f2e43723420217e1ceba0b4ec77816ac"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8dcd91f4e60f62b20d83a87a84fe062035a1e3ff49a8c2bbdeb2d441c8e311f4"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:900991a2b8ee35961b1095db7e265342e0e42a84c1a594823d5ee9f8fb791958"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:5a8d8261ca2133d4f98aa9627c748189502b3787537ba3d7e2beb4f7cfc5d627"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c4fd4d71e6deb6ddf99d8d0eab87d1d16f635898906e631914a9bae8ae9f2cfb"}, + {file = "tokenizers-0.20.3.tar.gz", hash = "sha256:2278b34c5d0dd78e087e1ca7f9b1dcbf129d80211afa645f214bd6e051037539"}, ] [package.dependencies] @@ -5291,13 +5437,13 @@ files = [ [[package]] name = "tomli" -version = "2.0.1" +version = "2.1.0" description = "A lil' TOML parser" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, + {file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"}, + {file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"}, ] [[package]] @@ -5399,13 +5545,13 @@ torch = "2.4.1" [[package]] name = "tqdm" -version = "4.66.5" +version = "4.67.0" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.5-py3-none-any.whl", hash = "sha256:90279a3770753eafc9194a0364852159802111925aa30eb3f9d85b0e805ac7cd"}, - {file = "tqdm-4.66.5.tar.gz", hash = "sha256:e1020aef2e5096702d8a025ac7d16b1577279c9d63f8375b63083e9a5f0fcbad"}, + {file = "tqdm-4.67.0-py3-none-any.whl", hash = "sha256:0cd8af9d56911acab92182e88d763100d4788bdf421d251616040cc4d44863be"}, + {file = "tqdm-4.67.0.tar.gz", hash = "sha256:fe5a6f95e6fe0b9755e9469b77b9c3cf850048224ecaa8293d7d2d31f97d869a"}, ] [package.dependencies] @@ -5413,6 +5559,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +discord = ["requests"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] @@ -5433,13 +5580,13 @@ tqdm = ">4.64" [[package]] name = "transformers" -version = "4.44.2" +version = "4.46.3" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" optional = false python-versions = ">=3.8.0" files = [ - {file = "transformers-4.44.2-py3-none-any.whl", hash = "sha256:1c02c65e7bfa5e52a634aff3da52138b583fc6f263c1f28d547dc144ba3d412d"}, - {file = "transformers-4.44.2.tar.gz", hash = "sha256:36aa17cc92ee154058e426d951684a2dab48751b35b49437896f898931270826"}, + {file = "transformers-4.46.3-py3-none-any.whl", hash = "sha256:a12ef6f52841fd190a3e5602145b542d03507222f2c64ebb7ee92e8788093aef"}, + {file = "transformers-4.46.3.tar.gz", hash = "sha256:8ee4b3ae943fe33e82afff8e837f4b052058b07ca9be3cb5b729ed31295f72cc"}, ] [package.dependencies] @@ -5451,21 +5598,21 @@ pyyaml = ">=5.1" regex = "!=2019.12.17" requests = "*" safetensors = ">=0.4.1" -tokenizers = ">=0.19,<0.20" +tokenizers = ">=0.20,<0.21" tqdm = ">=4.27" [package.extras] -accelerate = ["accelerate (>=0.21.0)"] -agents = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch"] -all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision"] +accelerate = ["accelerate (>=0.26.0)"] +agents = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch"] +all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm (<=0.9.16)", "tokenizers (>=0.20,<0.21)", "torch", "torchaudio", "torchvision"] audio = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] -benchmark = ["optimum-benchmark (>=0.2.0)"] +benchmark = ["optimum-benchmark (>=0.3.0)"] codecarbon = ["codecarbon (==1.2.0)"] -deepspeed = ["accelerate (>=0.21.0)", "deepspeed (>=0.9.3)"] -deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.21.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk", "optuna", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] -dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] -dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.19,<0.20)", "urllib3 (<2.0.0)"] -dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +deepspeed = ["accelerate (>=0.26.0)", "deepspeed (>=0.9.3)"] +deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.26.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk (<=3.8.1)", "optuna", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] +dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "libcst", "librosa", "nltk (<=3.8.1)", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.20,<0.21)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "libcst", "librosa", "nltk (<=3.8.1)", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.20,<0.21)", "urllib3 (<2.0.0)"] +dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "libcst", "librosa", "nltk (<=3.8.1)", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.20,<0.21)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] flax = ["flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "optax (>=0.0.8,<=0.1.4)", "scipy (<1.13.0)"] flax-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] ftfy = ["ftfy"] @@ -5476,7 +5623,7 @@ natten = ["natten (>=0.14.6,<0.15.0)"] onnx = ["onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "tf2onnx"] onnxruntime = ["onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"] optuna = ["optuna"] -quality = ["GitPython (<3.1.19)", "datasets (!=2.5.0)", "isort (>=5.5.4)", "ruff (==0.5.1)", "urllib3 (<2.0.0)"] +quality = ["GitPython (<3.1.19)", "datasets (!=2.5.0)", "isort (>=5.5.4)", "libcst", "rich", "ruff (==0.5.1)", "urllib3 (<2.0.0)"] ray = ["ray[tune] (>=2.7.0)"] retrieval = ["datasets (!=2.5.0)", "faiss-cpu"] ruff = ["ruff (==0.5.1)"] @@ -5486,17 +5633,18 @@ serving = ["fastapi", "pydantic", "starlette", "uvicorn"] sigopt = ["sigopt"] sklearn = ["scikit-learn"] speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] -testing = ["GitPython (<3.1.19)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk", "parameterized", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] +testing = ["GitPython (<3.1.19)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk (<=3.8.1)", "parameterized", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] tf = ["keras-nlp (>=0.3.1,<0.14.0)", "onnxconverter-common", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx"] tf-cpu = ["keras (>2.9,<2.16)", "keras-nlp (>=0.3.1,<0.14.0)", "onnxconverter-common", "tensorflow-cpu (>2.9,<2.16)", "tensorflow-probability (<0.24)", "tensorflow-text (<2.16)", "tf2onnx"] tf-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] +tiktoken = ["blobfile", "tiktoken"] timm = ["timm (<=0.9.16)"] -tokenizers = ["tokenizers (>=0.19,<0.20)"] -torch = ["accelerate (>=0.21.0)", "torch"] +tokenizers = ["tokenizers (>=0.20,<0.21)"] +torch = ["accelerate (>=0.26.0)", "torch"] torch-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] torch-vision = ["Pillow (>=10.0.1,<=15.0)", "torchvision"] -torchhub = ["filelock", "huggingface-hub (>=0.23.2,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.19,<0.20)", "torch", "tqdm (>=4.27)"] -video = ["av (==9.2.0)", "decord (==0.6.0)"] +torchhub = ["filelock", "huggingface-hub (>=0.23.2,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.20,<0.21)", "torch", "tqdm (>=4.27)"] +video = ["av (==9.2.0)"] vision = ["Pillow (>=10.0.1,<=15.0)"] [[package]] @@ -5528,13 +5676,13 @@ tutorials = ["matplotlib", "pandas", "tabulate"] [[package]] name = "typer" -version = "0.12.5" +version = "0.13.1" description = "Typer, build great CLIs. Easy to code. Based on Python type hints." optional = false python-versions = ">=3.7" files = [ - {file = "typer-0.12.5-py3-none-any.whl", hash = "sha256:62fe4e471711b147e3365034133904df3e235698399bc4de2b36c8579298d52b"}, - {file = "typer-0.12.5.tar.gz", hash = "sha256:f592f089bedcc8ec1b974125d64851029c3b1af145f04aca64d69410f0c9b722"}, + {file = "typer-0.13.1-py3-none-any.whl", hash = "sha256:5b59580fd925e89463a29d363e0a43245ec02765bde9fb77d39e5d0f29dd7157"}, + {file = "typer-0.13.1.tar.gz", hash = "sha256:9d444cb96cc268ce6f8b94e13b4335084cef4c079998a9f4851a90229a3bd25c"}, ] [package.dependencies] @@ -5545,13 +5693,13 @@ typing-extensions = ">=3.7.4.3" [[package]] name = "types-requests" -version = "2.32.0.20240914" +version = "2.32.0.20241016" description = "Typing stubs for requests" optional = false python-versions = ">=3.8" files = [ - {file = "types-requests-2.32.0.20240914.tar.gz", hash = "sha256:2850e178db3919d9bf809e434eef65ba49d0e7e33ac92d588f4a5e295fffd405"}, - {file = "types_requests-2.32.0.20240914-py3-none-any.whl", hash = "sha256:59c2f673eb55f32a99b2894faf6020e1a9f4a402ad0f192bfee0b64469054310"}, + {file = "types-requests-2.32.0.20241016.tar.gz", hash = "sha256:0d9cad2f27515d0e3e3da7134a1b6f28fb97129d86b867f24d9c726452634d95"}, + {file = "types_requests-2.32.0.20241016-py3-none-any.whl", hash = "sha256:4195d62d6d3e043a4eaaf08ff8a62184584d2e8684e9d2aa178c7915a7da3747"}, ] [package.dependencies] @@ -5715,85 +5863,92 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", [[package]] name = "uvloop" -version = "0.20.0" +version = "0.21.0" description = "Fast implementation of asyncio event loop on top of libuv" optional = false python-versions = ">=3.8.0" files = [ - {file = "uvloop-0.20.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9ebafa0b96c62881d5cafa02d9da2e44c23f9f0cd829f3a32a6aff771449c996"}, - {file = "uvloop-0.20.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:35968fc697b0527a06e134999eef859b4034b37aebca537daeb598b9d45a137b"}, - {file = "uvloop-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b16696f10e59d7580979b420eedf6650010a4a9c3bd8113f24a103dfdb770b10"}, - {file = "uvloop-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b04d96188d365151d1af41fa2d23257b674e7ead68cfd61c725a422764062ae"}, - {file = "uvloop-0.20.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:94707205efbe809dfa3a0d09c08bef1352f5d3d6612a506f10a319933757c006"}, - {file = "uvloop-0.20.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:89e8d33bb88d7263f74dc57d69f0063e06b5a5ce50bb9a6b32f5fcbe655f9e73"}, - {file = "uvloop-0.20.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e50289c101495e0d1bb0bfcb4a60adde56e32f4449a67216a1ab2750aa84f037"}, - {file = "uvloop-0.20.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e237f9c1e8a00e7d9ddaa288e535dc337a39bcbf679f290aee9d26df9e72bce9"}, - {file = "uvloop-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:746242cd703dc2b37f9d8b9f173749c15e9a918ddb021575a0205ec29a38d31e"}, - {file = "uvloop-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82edbfd3df39fb3d108fc079ebc461330f7c2e33dbd002d146bf7c445ba6e756"}, - {file = "uvloop-0.20.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:80dc1b139516be2077b3e57ce1cb65bfed09149e1d175e0478e7a987863b68f0"}, - {file = "uvloop-0.20.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4f44af67bf39af25db4c1ac27e82e9665717f9c26af2369c404be865c8818dcf"}, - {file = "uvloop-0.20.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4b75f2950ddb6feed85336412b9a0c310a2edbcf4cf931aa5cfe29034829676d"}, - {file = "uvloop-0.20.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:77fbc69c287596880ecec2d4c7a62346bef08b6209749bf6ce8c22bbaca0239e"}, - {file = "uvloop-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6462c95f48e2d8d4c993a2950cd3d31ab061864d1c226bbf0ee2f1a8f36674b9"}, - {file = "uvloop-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:649c33034979273fa71aa25d0fe120ad1777c551d8c4cd2c0c9851d88fcb13ab"}, - {file = "uvloop-0.20.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3a609780e942d43a275a617c0839d85f95c334bad29c4c0918252085113285b5"}, - {file = "uvloop-0.20.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aea15c78e0d9ad6555ed201344ae36db5c63d428818b4b2a42842b3870127c00"}, - {file = "uvloop-0.20.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0e94b221295b5e69de57a1bd4aeb0b3a29f61be6e1b478bb8a69a73377db7ba"}, - {file = "uvloop-0.20.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fee6044b64c965c425b65a4e17719953b96e065c5b7e09b599ff332bb2744bdf"}, - {file = "uvloop-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:265a99a2ff41a0fd56c19c3838b29bf54d1d177964c300dad388b27e84fd7847"}, - {file = "uvloop-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b10c2956efcecb981bf9cfb8184d27d5d64b9033f917115a960b83f11bfa0d6b"}, - {file = "uvloop-0.20.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e7d61fe8e8d9335fac1bf8d5d82820b4808dd7a43020c149b63a1ada953d48a6"}, - {file = "uvloop-0.20.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2beee18efd33fa6fdb0976e18475a4042cd31c7433c866e8a09ab604c7c22ff2"}, - {file = "uvloop-0.20.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d8c36fdf3e02cec92aed2d44f63565ad1522a499c654f07935c8f9d04db69e95"}, - {file = "uvloop-0.20.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0fac7be202596c7126146660725157d4813aa29a4cc990fe51346f75ff8fde7"}, - {file = "uvloop-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d0fba61846f294bce41eb44d60d58136090ea2b5b99efd21cbdf4e21927c56a"}, - {file = "uvloop-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95720bae002ac357202e0d866128eb1ac82545bcf0b549b9abe91b5178d9b541"}, - {file = "uvloop-0.20.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:36c530d8fa03bfa7085af54a48f2ca16ab74df3ec7108a46ba82fd8b411a2315"}, - {file = "uvloop-0.20.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e97152983442b499d7a71e44f29baa75b3b02e65d9c44ba53b10338e98dedb66"}, - {file = "uvloop-0.20.0.tar.gz", hash = "sha256:4603ca714a754fc8d9b197e325db25b2ea045385e8a3ad05d3463de725fdf469"}, + {file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f"}, + {file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d"}, + {file = "uvloop-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f38b2e090258d051d68a5b14d1da7203a3c3677321cf32a95a6f4db4dd8b6f26"}, + {file = "uvloop-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87c43e0f13022b998eb9b973b5e97200c8b90823454d4bc06ab33829e09fb9bb"}, + {file = "uvloop-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:10d66943def5fcb6e7b37310eb6b5639fd2ccbc38df1177262b0640c3ca68c1f"}, + {file = "uvloop-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:67dd654b8ca23aed0a8e99010b4c34aca62f4b7fce88f39d452ed7622c94845c"}, + {file = "uvloop-0.21.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c0f3fa6200b3108919f8bdabb9a7f87f20e7097ea3c543754cabc7d717d95cf8"}, + {file = "uvloop-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0878c2640cf341b269b7e128b1a5fed890adc4455513ca710d77d5e93aa6d6a0"}, + {file = "uvloop-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9fb766bb57b7388745d8bcc53a359b116b8a04c83a2288069809d2b3466c37e"}, + {file = "uvloop-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a375441696e2eda1c43c44ccb66e04d61ceeffcd76e4929e527b7fa401b90fb"}, + {file = "uvloop-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:baa0e6291d91649c6ba4ed4b2f982f9fa165b5bbd50a9e203c416a2797bab3c6"}, + {file = "uvloop-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4509360fcc4c3bd2c70d87573ad472de40c13387f5fda8cb58350a1d7475e58d"}, + {file = "uvloop-0.21.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:359ec2c888397b9e592a889c4d72ba3d6befba8b2bb01743f72fffbde663b59c"}, + {file = "uvloop-0.21.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7089d2dc73179ce5ac255bdf37c236a9f914b264825fdaacaded6990a7fb4c2"}, + {file = "uvloop-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baa4dcdbd9ae0a372f2167a207cd98c9f9a1ea1188a8a526431eef2f8116cc8d"}, + {file = "uvloop-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86975dca1c773a2c9864f4c52c5a55631038e387b47eaf56210f873887b6c8dc"}, + {file = "uvloop-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:461d9ae6660fbbafedd07559c6a2e57cd553b34b0065b6550685f6653a98c1cb"}, + {file = "uvloop-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:183aef7c8730e54c9a3ee3227464daed66e37ba13040bb3f350bc2ddc040f22f"}, + {file = "uvloop-0.21.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bfd55dfcc2a512316e65f16e503e9e450cab148ef11df4e4e679b5e8253a5281"}, + {file = "uvloop-0.21.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:787ae31ad8a2856fc4e7c095341cccc7209bd657d0e71ad0dc2ea83c4a6fa8af"}, + {file = "uvloop-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ee4d4ef48036ff6e5cfffb09dd192c7a5027153948d85b8da7ff705065bacc6"}, + {file = "uvloop-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3df876acd7ec037a3d005b3ab85a7e4110422e4d9c1571d4fc89b0fc41b6816"}, + {file = "uvloop-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd53ecc9a0f3d87ab847503c2e1552b690362e005ab54e8a48ba97da3924c0dc"}, + {file = "uvloop-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a5c39f217ab3c663dc699c04cbd50c13813e31d917642d459fdcec07555cc553"}, + {file = "uvloop-0.21.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:17df489689befc72c39a08359efac29bbee8eee5209650d4b9f34df73d22e414"}, + {file = "uvloop-0.21.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc09f0ff191e61c2d592a752423c767b4ebb2986daa9ed62908e2b1b9a9ae206"}, + {file = "uvloop-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0ce1b49560b1d2d8a2977e3ba4afb2414fb46b86a1b64056bc4ab929efdafbe"}, + {file = "uvloop-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e678ad6fe52af2c58d2ae3c73dc85524ba8abe637f134bf3564ed07f555c5e79"}, + {file = "uvloop-0.21.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:460def4412e473896ef179a1671b40c039c7012184b627898eea5072ef6f017a"}, + {file = "uvloop-0.21.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:10da8046cc4a8f12c91a1c39d1dd1585c41162a15caaef165c2174db9ef18bdc"}, + {file = "uvloop-0.21.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c097078b8031190c934ed0ebfee8cc5f9ba9642e6eb88322b9958b649750f72b"}, + {file = "uvloop-0.21.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:46923b0b5ee7fc0020bef24afe7836cb068f5050ca04caf6b487c513dc1a20b2"}, + {file = "uvloop-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53e420a3afe22cdcf2a0f4846e377d16e718bc70103d7088a4f7623567ba5fb0"}, + {file = "uvloop-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88cb67cdbc0e483da00af0b2c3cdad4b7c61ceb1ee0f33fe00e09c81e3a6cb75"}, + {file = "uvloop-0.21.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:221f4f2a1f46032b403bf3be628011caf75428ee3cc204a22addf96f586b19fd"}, + {file = "uvloop-0.21.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2d1f581393673ce119355d56da84fe1dd9d2bb8b3d13ce792524e1607139feff"}, + {file = "uvloop-0.21.0.tar.gz", hash = "sha256:3bf12b0fda68447806a7ad847bfa591613177275d35b6724b1ee573faa3704e3"}, ] [package.extras] +dev = ["Cython (>=3.0,<4.0)", "setuptools (>=60)"] docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] -test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] +test = ["aiohttp (>=3.10.5)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] [[package]] name = "watchdog" -version = "5.0.2" +version = "6.0.0" description = "Filesystem events monitoring" optional = false python-versions = ">=3.9" files = [ - {file = "watchdog-5.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d961f4123bb3c447d9fcdcb67e1530c366f10ab3a0c7d1c0c9943050936d4877"}, - {file = "watchdog-5.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72990192cb63872c47d5e5fefe230a401b87fd59d257ee577d61c9e5564c62e5"}, - {file = "watchdog-5.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6bec703ad90b35a848e05e1b40bf0050da7ca28ead7ac4be724ae5ac2653a1a0"}, - {file = "watchdog-5.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:dae7a1879918f6544201d33666909b040a46421054a50e0f773e0d870ed7438d"}, - {file = "watchdog-5.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c4a440f725f3b99133de610bfec93d570b13826f89616377715b9cd60424db6e"}, - {file = "watchdog-5.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8b2918c19e0d48f5f20df458c84692e2a054f02d9df25e6c3c930063eca64c1"}, - {file = "watchdog-5.0.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:aa9cd6e24126d4afb3752a3e70fce39f92d0e1a58a236ddf6ee823ff7dba28ee"}, - {file = "watchdog-5.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f627c5bf5759fdd90195b0c0431f99cff4867d212a67b384442c51136a098ed7"}, - {file = "watchdog-5.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d7594a6d32cda2b49df3fd9abf9b37c8d2f3eab5df45c24056b4a671ac661619"}, - {file = "watchdog-5.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba32efcccfe2c58f4d01115440d1672b4eb26cdd6fc5b5818f1fb41f7c3e1889"}, - {file = "watchdog-5.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:963f7c4c91e3f51c998eeff1b3fb24a52a8a34da4f956e470f4b068bb47b78ee"}, - {file = "watchdog-5.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8c47150aa12f775e22efff1eee9f0f6beee542a7aa1a985c271b1997d340184f"}, - {file = "watchdog-5.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:14dd4ed023d79d1f670aa659f449bcd2733c33a35c8ffd88689d9d243885198b"}, - {file = "watchdog-5.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b84bff0391ad4abe25c2740c7aec0e3de316fdf7764007f41e248422a7760a7f"}, - {file = "watchdog-5.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e8d5ff39f0a9968952cce548e8e08f849141a4fcc1290b1c17c032ba697b9d7"}, - {file = "watchdog-5.0.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fb223456db6e5f7bd9bbd5cd969f05aae82ae21acc00643b60d81c770abd402b"}, - {file = "watchdog-5.0.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9814adb768c23727a27792c77812cf4e2fd9853cd280eafa2bcfa62a99e8bd6e"}, - {file = "watchdog-5.0.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:901ee48c23f70193d1a7bc2d9ee297df66081dd5f46f0ca011be4f70dec80dab"}, - {file = "watchdog-5.0.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:638bcca3d5b1885c6ec47be67bf712b00a9ab3d4b22ec0881f4889ad870bc7e8"}, - {file = "watchdog-5.0.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:5597c051587f8757798216f2485e85eac583c3b343e9aa09127a3a6f82c65ee8"}, - {file = "watchdog-5.0.2-py3-none-manylinux2014_armv7l.whl", hash = "sha256:53ed1bf71fcb8475dd0ef4912ab139c294c87b903724b6f4a8bd98e026862e6d"}, - {file = "watchdog-5.0.2-py3-none-manylinux2014_i686.whl", hash = "sha256:29e4a2607bd407d9552c502d38b45a05ec26a8e40cc7e94db9bb48f861fa5abc"}, - {file = "watchdog-5.0.2-py3-none-manylinux2014_ppc64.whl", hash = "sha256:b6dc8f1d770a8280997e4beae7b9a75a33b268c59e033e72c8a10990097e5fde"}, - {file = "watchdog-5.0.2-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:d2ab34adc9bf1489452965cdb16a924e97d4452fcf88a50b21859068b50b5c3b"}, - {file = "watchdog-5.0.2-py3-none-manylinux2014_s390x.whl", hash = "sha256:7d1aa7e4bb0f0c65a1a91ba37c10e19dabf7eaaa282c5787e51371f090748f4b"}, - {file = "watchdog-5.0.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:726eef8f8c634ac6584f86c9c53353a010d9f311f6c15a034f3800a7a891d941"}, - {file = "watchdog-5.0.2-py3-none-win32.whl", hash = "sha256:bda40c57115684d0216556671875e008279dea2dc00fcd3dde126ac8e0d7a2fb"}, - {file = "watchdog-5.0.2-py3-none-win_amd64.whl", hash = "sha256:d010be060c996db725fbce7e3ef14687cdcc76f4ca0e4339a68cc4532c382a73"}, - {file = "watchdog-5.0.2-py3-none-win_ia64.whl", hash = "sha256:3960136b2b619510569b90f0cd96408591d6c251a75c97690f4553ca88889769"}, - {file = "watchdog-5.0.2.tar.gz", hash = "sha256:dcebf7e475001d2cdeb020be630dc5b687e9acdd60d16fea6bb4508e7b94cf76"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e6f0e77c9417e7cd62af82529b10563db3423625c5fce018430b249bf977f9e8"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:90c8e78f3b94014f7aaae121e6b909674df5b46ec24d6bebc45c44c56729af2a"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7631a77ffb1f7d2eefa4445ebbee491c720a5661ddf6df3498ebecae5ed375c"}, + {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881"}, + {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11"}, + {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7a0e56874cfbc4b9b05c60c8a1926fedf56324bb08cfbc188969777940aef3aa"}, + {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6439e374fc012255b4ec786ae3c4bc838cd7309a540e5fe0952d03687d8804e"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2"}, + {file = "watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a"}, + {file = "watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680"}, + {file = "watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f"}, + {file = "watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282"}, ] [package.extras] @@ -5896,13 +6051,13 @@ anyio = ">=3.0.0" [[package]] name = "wcmatch" -version = "9.0" +version = "10.0" description = "Wildcard/glob file name matcher." optional = false python-versions = ">=3.8" files = [ - {file = "wcmatch-9.0-py3-none-any.whl", hash = "sha256:af25922e2b6dbd1550fa37a4c8de7dd558d6c1bb330c641de9b907b9776cb3c4"}, - {file = "wcmatch-9.0.tar.gz", hash = "sha256:567d66b11ad74384954c8af86f607857c3bdf93682349ad32066231abd556c92"}, + {file = "wcmatch-10.0-py3-none-any.whl", hash = "sha256:0dd927072d03c0a6527a20d2e6ad5ba8d0380e60870c383bc533b71744df7b7a"}, + {file = "wcmatch-10.0.tar.gz", hash = "sha256:e72f0de09bba6a04e0de70937b0cf06e55f36f37b3deb422dfaf854b867b840a"}, ] [package.dependencies] @@ -6016,197 +6171,183 @@ files = [ [[package]] name = "wrapt" -version = "1.16.0" +version = "1.17.0" description = "Module for decorators, wrappers and monkey patching." optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, - {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, - {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, - {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, - {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, - {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, - {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, - {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, - {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, - {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, - {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, - {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, - {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, - {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, - {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, - {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, - {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, - {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, + {file = "wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8"}, + {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d"}, + {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e185ec6060e301a7e5f8461c86fb3640a7beb1a0f0208ffde7a65ec4074931df"}, + {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb90765dd91aed05b53cd7a87bd7f5c188fcd95960914bae0d32c5e7f899719d"}, + {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:879591c2b5ab0a7184258274c42a126b74a2c3d5a329df16d69f9cee07bba6ea"}, + {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fce6fee67c318fdfb7f285c29a82d84782ae2579c0e1b385b7f36c6e8074fffb"}, + {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0698d3a86f68abc894d537887b9bbf84d29bcfbc759e23f4644be27acf6da301"}, + {file = "wrapt-1.17.0-cp310-cp310-win32.whl", hash = "sha256:69d093792dc34a9c4c8a70e4973a3361c7a7578e9cd86961b2bbf38ca71e4e22"}, + {file = "wrapt-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:f28b29dc158ca5d6ac396c8e0a2ef45c4e97bb7e65522bfc04c989e6fe814575"}, + {file = "wrapt-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:74bf625b1b4caaa7bad51d9003f8b07a468a704e0644a700e936c357c17dd45a"}, + {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f2a28eb35cf99d5f5bd12f5dd44a0f41d206db226535b37b0c60e9da162c3ed"}, + {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81b1289e99cf4bad07c23393ab447e5e96db0ab50974a280f7954b071d41b489"}, + {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f2939cd4a2a52ca32bc0b359015718472d7f6de870760342e7ba295be9ebaf9"}, + {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a9653131bda68a1f029c52157fd81e11f07d485df55410401f745007bd6d339"}, + {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4e4b4385363de9052dac1a67bfb535c376f3d19c238b5f36bddc95efae15e12d"}, + {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bdf62d25234290db1837875d4dceb2151e4ea7f9fff2ed41c0fde23ed542eb5b"}, + {file = "wrapt-1.17.0-cp311-cp311-win32.whl", hash = "sha256:5d8fd17635b262448ab8f99230fe4dac991af1dabdbb92f7a70a6afac8a7e346"}, + {file = "wrapt-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:92a3d214d5e53cb1db8b015f30d544bc9d3f7179a05feb8f16df713cecc2620a"}, + {file = "wrapt-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:89fc28495896097622c3fc238915c79365dd0ede02f9a82ce436b13bd0ab7569"}, + {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:875d240fdbdbe9e11f9831901fb8719da0bd4e6131f83aa9f69b96d18fae7504"}, + {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5ed16d95fd142e9c72b6c10b06514ad30e846a0d0917ab406186541fe68b451"}, + {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18b956061b8db634120b58f668592a772e87e2e78bc1f6a906cfcaa0cc7991c1"}, + {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:daba396199399ccabafbfc509037ac635a6bc18510ad1add8fd16d4739cdd106"}, + {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4d63f4d446e10ad19ed01188d6c1e1bb134cde8c18b0aa2acfd973d41fcc5ada"}, + {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8a5e7cc39a45fc430af1aefc4d77ee6bad72c5bcdb1322cfde852c15192b8bd4"}, + {file = "wrapt-1.17.0-cp312-cp312-win32.whl", hash = "sha256:0a0a1a1ec28b641f2a3a2c35cbe86c00051c04fffcfcc577ffcdd707df3f8635"}, + {file = "wrapt-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:3c34f6896a01b84bab196f7119770fd8466c8ae3dfa73c59c0bb281e7b588ce7"}, + {file = "wrapt-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:714c12485aa52efbc0fc0ade1e9ab3a70343db82627f90f2ecbc898fdf0bb181"}, + {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da427d311782324a376cacb47c1a4adc43f99fd9d996ffc1b3e8529c4074d393"}, + {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba1739fb38441a27a676f4de4123d3e858e494fac05868b7a281c0a383c098f4"}, + {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e711fc1acc7468463bc084d1b68561e40d1eaa135d8c509a65dd534403d83d7b"}, + {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:140ea00c87fafc42739bd74a94a5a9003f8e72c27c47cd4f61d8e05e6dec8721"}, + {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:73a96fd11d2b2e77d623a7f26e004cc31f131a365add1ce1ce9a19e55a1eef90"}, + {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0b48554952f0f387984da81ccfa73b62e52817a4386d070c75e4db7d43a28c4a"}, + {file = "wrapt-1.17.0-cp313-cp313-win32.whl", hash = "sha256:498fec8da10e3e62edd1e7368f4b24aa362ac0ad931e678332d1b209aec93045"}, + {file = "wrapt-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:fd136bb85f4568fffca995bd3c8d52080b1e5b225dbf1c2b17b66b4c5fa02838"}, + {file = "wrapt-1.17.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:17fcf043d0b4724858f25b8826c36e08f9fb2e475410bece0ec44a22d533da9b"}, + {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4a557d97f12813dc5e18dad9fa765ae44ddd56a672bb5de4825527c847d6379"}, + {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0229b247b0fc7dee0d36176cbb79dbaf2a9eb7ecc50ec3121f40ef443155fb1d"}, + {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8425cfce27b8b20c9b89d77fb50e368d8306a90bf2b6eef2cdf5cd5083adf83f"}, + {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9c900108df470060174108012de06d45f514aa4ec21a191e7ab42988ff42a86c"}, + {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:4e547b447073fc0dbfcbff15154c1be8823d10dab4ad401bdb1575e3fdedff1b"}, + {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:914f66f3b6fc7b915d46c1cc424bc2441841083de01b90f9e81109c9759e43ab"}, + {file = "wrapt-1.17.0-cp313-cp313t-win32.whl", hash = "sha256:a4192b45dff127c7d69b3bdfb4d3e47b64179a0b9900b6351859f3001397dabf"}, + {file = "wrapt-1.17.0-cp313-cp313t-win_amd64.whl", hash = "sha256:4f643df3d4419ea3f856c5c3f40fec1d65ea2e89ec812c83f7767c8730f9827a"}, + {file = "wrapt-1.17.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:69c40d4655e078ede067a7095544bcec5a963566e17503e75a3a3e0fe2803b13"}, + {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f495b6754358979379f84534f8dd7a43ff8cff2558dcdea4a148a6e713a758f"}, + {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:baa7ef4e0886a6f482e00d1d5bcd37c201b383f1d314643dfb0367169f94f04c"}, + {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8fc931382e56627ec4acb01e09ce66e5c03c384ca52606111cee50d931a342d"}, + {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8f8909cdb9f1b237786c09a810e24ee5e15ef17019f7cecb207ce205b9b5fcce"}, + {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ad47b095f0bdc5585bced35bd088cbfe4177236c7df9984b3cc46b391cc60627"}, + {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:948a9bd0fb2c5120457b07e59c8d7210cbc8703243225dbd78f4dfc13c8d2d1f"}, + {file = "wrapt-1.17.0-cp38-cp38-win32.whl", hash = "sha256:5ae271862b2142f4bc687bdbfcc942e2473a89999a54231aa1c2c676e28f29ea"}, + {file = "wrapt-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:f335579a1b485c834849e9075191c9898e0731af45705c2ebf70e0cd5d58beed"}, + {file = "wrapt-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d751300b94e35b6016d4b1e7d0e7bbc3b5e1751e2405ef908316c2a9024008a1"}, + {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7264cbb4a18dc4acfd73b63e4bcfec9c9802614572025bdd44d0721983fc1d9c"}, + {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33539c6f5b96cf0b1105a0ff4cf5db9332e773bb521cc804a90e58dc49b10578"}, + {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c30970bdee1cad6a8da2044febd824ef6dc4cc0b19e39af3085c763fdec7de33"}, + {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bc7f729a72b16ee21795a943f85c6244971724819819a41ddbaeb691b2dd85ad"}, + {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6ff02a91c4fc9b6a94e1c9c20f62ea06a7e375f42fe57587f004d1078ac86ca9"}, + {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dfb7cff84e72e7bf975b06b4989477873dcf160b2fd89959c629535df53d4e0"}, + {file = "wrapt-1.17.0-cp39-cp39-win32.whl", hash = "sha256:2399408ac33ffd5b200480ee858baa58d77dd30e0dd0cab6a8a9547135f30a88"}, + {file = "wrapt-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:4f763a29ee6a20c529496a20a7bcb16a73de27f5da6a843249c7047daf135977"}, + {file = "wrapt-1.17.0-py3-none-any.whl", hash = "sha256:d2c63b93548eda58abf5188e505ffed0229bf675f7c3090f8e36ad55b8cbc371"}, + {file = "wrapt-1.17.0.tar.gz", hash = "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801"}, ] [[package]] name = "yarl" -version = "1.11.1" +version = "1.18.0" description = "Yet another URL library" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "yarl-1.11.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:400cd42185f92de559d29eeb529e71d80dfbd2f45c36844914a4a34297ca6f00"}, - {file = "yarl-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8258c86f47e080a258993eed877d579c71da7bda26af86ce6c2d2d072c11320d"}, - {file = "yarl-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2164cd9725092761fed26f299e3f276bb4b537ca58e6ff6b252eae9631b5c96e"}, - {file = "yarl-1.11.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08ea567c16f140af8ddc7cb58e27e9138a1386e3e6e53982abaa6f2377b38cc"}, - {file = "yarl-1.11.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:768ecc550096b028754ea28bf90fde071c379c62c43afa574edc6f33ee5daaec"}, - {file = "yarl-1.11.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2909fa3a7d249ef64eeb2faa04b7957e34fefb6ec9966506312349ed8a7e77bf"}, - {file = "yarl-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01a8697ec24f17c349c4f655763c4db70eebc56a5f82995e5e26e837c6eb0e49"}, - {file = "yarl-1.11.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e286580b6511aac7c3268a78cdb861ec739d3e5a2a53b4809faef6b49778eaff"}, - {file = "yarl-1.11.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4179522dc0305c3fc9782549175c8e8849252fefeb077c92a73889ccbcd508ad"}, - {file = "yarl-1.11.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:27fcb271a41b746bd0e2a92182df507e1c204759f460ff784ca614e12dd85145"}, - {file = "yarl-1.11.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f61db3b7e870914dbd9434b560075e0366771eecbe6d2b5561f5bc7485f39efd"}, - {file = "yarl-1.11.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:c92261eb2ad367629dc437536463dc934030c9e7caca861cc51990fe6c565f26"}, - {file = "yarl-1.11.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d95b52fbef190ca87d8c42f49e314eace4fc52070f3dfa5f87a6594b0c1c6e46"}, - {file = "yarl-1.11.1-cp310-cp310-win32.whl", hash = "sha256:489fa8bde4f1244ad6c5f6d11bb33e09cf0d1d0367edb197619c3e3fc06f3d91"}, - {file = "yarl-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:476e20c433b356e16e9a141449f25161e6b69984fb4cdbd7cd4bd54c17844998"}, - {file = "yarl-1.11.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:946eedc12895873891aaceb39bceb484b4977f70373e0122da483f6c38faaa68"}, - {file = "yarl-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:21a7c12321436b066c11ec19c7e3cb9aec18884fe0d5b25d03d756a9e654edfe"}, - {file = "yarl-1.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c35f493b867912f6fda721a59cc7c4766d382040bdf1ddaeeaa7fa4d072f4675"}, - {file = "yarl-1.11.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25861303e0be76b60fddc1250ec5986c42f0a5c0c50ff57cc30b1be199c00e63"}, - {file = "yarl-1.11.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4b53f73077e839b3f89c992223f15b1d2ab314bdbdf502afdc7bb18e95eae27"}, - {file = "yarl-1.11.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:327c724b01b8641a1bf1ab3b232fb638706e50f76c0b5bf16051ab65c868fac5"}, - {file = "yarl-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4307d9a3417eea87715c9736d050c83e8c1904e9b7aada6ce61b46361b733d92"}, - {file = "yarl-1.11.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48a28bed68ab8fb7e380775f0029a079f08a17799cb3387a65d14ace16c12e2b"}, - {file = "yarl-1.11.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:067b961853c8e62725ff2893226fef3d0da060656a9827f3f520fb1d19b2b68a"}, - {file = "yarl-1.11.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8215f6f21394d1f46e222abeb06316e77ef328d628f593502d8fc2a9117bde83"}, - {file = "yarl-1.11.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:498442e3af2a860a663baa14fbf23fb04b0dd758039c0e7c8f91cb9279799bff"}, - {file = "yarl-1.11.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:69721b8effdb588cb055cc22f7c5105ca6fdaa5aeb3ea09021d517882c4a904c"}, - {file = "yarl-1.11.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e969fa4c1e0b1a391f3fcbcb9ec31e84440253325b534519be0d28f4b6b533e"}, - {file = "yarl-1.11.1-cp311-cp311-win32.whl", hash = "sha256:7d51324a04fc4b0e097ff8a153e9276c2593106a811704025bbc1d6916f45ca6"}, - {file = "yarl-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:15061ce6584ece023457fb8b7a7a69ec40bf7114d781a8c4f5dcd68e28b5c53b"}, - {file = "yarl-1.11.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a4264515f9117be204935cd230fb2a052dd3792789cc94c101c535d349b3dab0"}, - {file = "yarl-1.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f41fa79114a1d2eddb5eea7b912d6160508f57440bd302ce96eaa384914cd265"}, - {file = "yarl-1.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:02da8759b47d964f9173c8675710720b468aa1c1693be0c9c64abb9d8d9a4867"}, - {file = "yarl-1.11.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9361628f28f48dcf8b2f528420d4d68102f593f9c2e592bfc842f5fb337e44fd"}, - {file = "yarl-1.11.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b91044952da03b6f95fdba398d7993dd983b64d3c31c358a4c89e3c19b6f7aef"}, - {file = "yarl-1.11.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:74db2ef03b442276d25951749a803ddb6e270d02dda1d1c556f6ae595a0d76a8"}, - {file = "yarl-1.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e975a2211952a8a083d1b9d9ba26472981ae338e720b419eb50535de3c02870"}, - {file = "yarl-1.11.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aef97ba1dd2138112890ef848e17d8526fe80b21f743b4ee65947ea184f07a2"}, - {file = "yarl-1.11.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a7915ea49b0c113641dc4d9338efa9bd66b6a9a485ffe75b9907e8573ca94b84"}, - {file = "yarl-1.11.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:504cf0d4c5e4579a51261d6091267f9fd997ef58558c4ffa7a3e1460bd2336fa"}, - {file = "yarl-1.11.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:3de5292f9f0ee285e6bd168b2a77b2a00d74cbcfa420ed078456d3023d2f6dff"}, - {file = "yarl-1.11.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a34e1e30f1774fa35d37202bbeae62423e9a79d78d0874e5556a593479fdf239"}, - {file = "yarl-1.11.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:66b63c504d2ca43bf7221a1f72fbe981ff56ecb39004c70a94485d13e37ebf45"}, - {file = "yarl-1.11.1-cp312-cp312-win32.whl", hash = "sha256:a28b70c9e2213de425d9cba5ab2e7f7a1c8ca23a99c4b5159bf77b9c31251447"}, - {file = "yarl-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:17b5a386d0d36fb828e2fb3ef08c8829c1ebf977eef88e5367d1c8c94b454639"}, - {file = "yarl-1.11.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1fa2e7a406fbd45b61b4433e3aa254a2c3e14c4b3186f6e952d08a730807fa0c"}, - {file = "yarl-1.11.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:750f656832d7d3cb0c76be137ee79405cc17e792f31e0a01eee390e383b2936e"}, - {file = "yarl-1.11.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0b8486f322d8f6a38539136a22c55f94d269addb24db5cb6f61adc61eabc9d93"}, - {file = "yarl-1.11.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fce4da3703ee6048ad4138fe74619c50874afe98b1ad87b2698ef95bf92c96d"}, - {file = "yarl-1.11.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed653638ef669e0efc6fe2acb792275cb419bf9cb5c5049399f3556995f23c7"}, - {file = "yarl-1.11.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18ac56c9dd70941ecad42b5a906820824ca72ff84ad6fa18db33c2537ae2e089"}, - {file = "yarl-1.11.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:688654f8507464745ab563b041d1fb7dab5d9912ca6b06e61d1c4708366832f5"}, - {file = "yarl-1.11.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4973eac1e2ff63cf187073cd4e1f1148dcd119314ab79b88e1b3fad74a18c9d5"}, - {file = "yarl-1.11.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:964a428132227edff96d6f3cf261573cb0f1a60c9a764ce28cda9525f18f7786"}, - {file = "yarl-1.11.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6d23754b9939cbab02c63434776df1170e43b09c6a517585c7ce2b3d449b7318"}, - {file = "yarl-1.11.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c2dc4250fe94d8cd864d66018f8344d4af50e3758e9d725e94fecfa27588ff82"}, - {file = "yarl-1.11.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09696438cb43ea6f9492ef237761b043f9179f455f405279e609f2bc9100212a"}, - {file = "yarl-1.11.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:999bfee0a5b7385a0af5ffb606393509cfde70ecca4f01c36985be6d33e336da"}, - {file = "yarl-1.11.1-cp313-cp313-win32.whl", hash = "sha256:ce928c9c6409c79e10f39604a7e214b3cb69552952fbda8d836c052832e6a979"}, - {file = "yarl-1.11.1-cp313-cp313-win_amd64.whl", hash = "sha256:501c503eed2bb306638ccb60c174f856cc3246c861829ff40eaa80e2f0330367"}, - {file = "yarl-1.11.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:dae7bd0daeb33aa3e79e72877d3d51052e8b19c9025ecf0374f542ea8ec120e4"}, - {file = "yarl-1.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3ff6b1617aa39279fe18a76c8d165469c48b159931d9b48239065767ee455b2b"}, - {file = "yarl-1.11.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3257978c870728a52dcce8c2902bf01f6c53b65094b457bf87b2644ee6238ddc"}, - {file = "yarl-1.11.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f351fa31234699d6084ff98283cb1e852270fe9e250a3b3bf7804eb493bd937"}, - {file = "yarl-1.11.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8aef1b64da41d18026632d99a06b3fefe1d08e85dd81d849fa7c96301ed22f1b"}, - {file = "yarl-1.11.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7175a87ab8f7fbde37160a15e58e138ba3b2b0e05492d7351314a250d61b1591"}, - {file = "yarl-1.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba444bdd4caa2a94456ef67a2f383710928820dd0117aae6650a4d17029fa25e"}, - {file = "yarl-1.11.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ea9682124fc062e3d931c6911934a678cb28453f957ddccf51f568c2f2b5e05"}, - {file = "yarl-1.11.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8418c053aeb236b20b0ab8fa6bacfc2feaaf7d4683dd96528610989c99723d5f"}, - {file = "yarl-1.11.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:61a5f2c14d0a1adfdd82258f756b23a550c13ba4c86c84106be4c111a3a4e413"}, - {file = "yarl-1.11.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f3a6d90cab0bdf07df8f176eae3a07127daafcf7457b997b2bf46776da2c7eb7"}, - {file = "yarl-1.11.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:077da604852be488c9a05a524068cdae1e972b7dc02438161c32420fb4ec5e14"}, - {file = "yarl-1.11.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:15439f3c5c72686b6c3ff235279630d08936ace67d0fe5c8d5bbc3ef06f5a420"}, - {file = "yarl-1.11.1-cp38-cp38-win32.whl", hash = "sha256:238a21849dd7554cb4d25a14ffbfa0ef380bb7ba201f45b144a14454a72ffa5a"}, - {file = "yarl-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:67459cf8cf31da0e2cbdb4b040507e535d25cfbb1604ca76396a3a66b8ba37a6"}, - {file = "yarl-1.11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:884eab2ce97cbaf89f264372eae58388862c33c4f551c15680dd80f53c89a269"}, - {file = "yarl-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a336eaa7ee7e87cdece3cedb395c9657d227bfceb6781295cf56abcd3386a26"}, - {file = "yarl-1.11.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87f020d010ba80a247c4abc335fc13421037800ca20b42af5ae40e5fd75e7909"}, - {file = "yarl-1.11.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:637c7ddb585a62d4469f843dac221f23eec3cbad31693b23abbc2c366ad41ff4"}, - {file = "yarl-1.11.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:48dfd117ab93f0129084577a07287376cc69c08138694396f305636e229caa1a"}, - {file = "yarl-1.11.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e0ae31fb5ccab6eda09ba1494e87eb226dcbd2372dae96b87800e1dcc98804"}, - {file = "yarl-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f46f81501160c28d0c0b7333b4f7be8983dbbc161983b6fb814024d1b4952f79"}, - {file = "yarl-1.11.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:04293941646647b3bfb1719d1d11ff1028e9c30199509a844da3c0f5919dc520"}, - {file = "yarl-1.11.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:250e888fa62d73e721f3041e3a9abf427788a1934b426b45e1b92f62c1f68366"}, - {file = "yarl-1.11.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e8f63904df26d1a66aabc141bfd258bf738b9bc7bc6bdef22713b4f5ef789a4c"}, - {file = "yarl-1.11.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:aac44097d838dda26526cffb63bdd8737a2dbdf5f2c68efb72ad83aec6673c7e"}, - {file = "yarl-1.11.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:267b24f891e74eccbdff42241c5fb4f974de2d6271dcc7d7e0c9ae1079a560d9"}, - {file = "yarl-1.11.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6907daa4b9d7a688063ed098c472f96e8181733c525e03e866fb5db480a424df"}, - {file = "yarl-1.11.1-cp39-cp39-win32.whl", hash = "sha256:14438dfc5015661f75f85bc5adad0743678eefee266ff0c9a8e32969d5d69f74"}, - {file = "yarl-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:94d0caaa912bfcdc702a4204cd5e2bb01eb917fc4f5ea2315aa23962549561b0"}, - {file = "yarl-1.11.1-py3-none-any.whl", hash = "sha256:72bf26f66456baa0584eff63e44545c9f0eaed9b73cb6601b647c91f14c11f38"}, - {file = "yarl-1.11.1.tar.gz", hash = "sha256:1bb2d9e212fb7449b8fb73bc461b51eaa17cc8430b4a87d87be7b25052d92f53"}, + {file = "yarl-1.18.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:074fee89caab89a97e18ef5f29060ef61ba3cae6cd77673acc54bfdd3214b7b7"}, + {file = "yarl-1.18.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b026cf2c32daf48d90c0c4e406815c3f8f4cfe0c6dfccb094a9add1ff6a0e41a"}, + {file = "yarl-1.18.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ae38bd86eae3ba3d2ce5636cc9e23c80c9db2e9cb557e40b98153ed102b5a736"}, + {file = "yarl-1.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:685cc37f3f307c6a8e879986c6d85328f4c637f002e219f50e2ef66f7e062c1d"}, + {file = "yarl-1.18.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8254dbfce84ee5d1e81051ee7a0f1536c108ba294c0fdb5933476398df0654f3"}, + {file = "yarl-1.18.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:20de4a8b04de70c49698dc2390b7fd2d18d424d3b876371f9b775e2b462d4b41"}, + {file = "yarl-1.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0a2074a37285570d54b55820687de3d2f2b9ecf1b714e482e48c9e7c0402038"}, + {file = "yarl-1.18.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f576ed278860df2721a5d57da3381040176ef1d07def9688a385c8330db61a1"}, + {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3a3709450a574d61be6ac53d582496014342ea34876af8dc17cc16da32826c9a"}, + {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bd80ed29761490c622edde5dd70537ca8c992c2952eb62ed46984f8eff66d6e8"}, + {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:32141e13a1d5a48525e519c9197d3f4d9744d818d5c7d6547524cc9eccc8971e"}, + {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8b8d3e4e014fb4274f1c5bf61511d2199e263909fb0b8bda2a7428b0894e8dc6"}, + {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:701bb4a8f4de191c8c0cc9a1e6d5142f4df880e9d1210e333b829ca9425570ed"}, + {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a45d94075ac0647621eaaf693c8751813a3eccac455d423f473ffed38c8ac5c9"}, + {file = "yarl-1.18.0-cp310-cp310-win32.whl", hash = "sha256:34176bfb082add67cb2a20abd85854165540891147f88b687a5ed0dc225750a0"}, + {file = "yarl-1.18.0-cp310-cp310-win_amd64.whl", hash = "sha256:73553bbeea7d6ec88c08ad8027f4e992798f0abc459361bf06641c71972794dc"}, + {file = "yarl-1.18.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b8e8c516dc4e1a51d86ac975b0350735007e554c962281c432eaa5822aa9765c"}, + {file = "yarl-1.18.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2e6b4466714a73f5251d84b471475850954f1fa6acce4d3f404da1d55d644c34"}, + {file = "yarl-1.18.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c893f8c1a6d48b25961e00922724732d00b39de8bb0b451307482dc87bddcd74"}, + {file = "yarl-1.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13aaf2bdbc8c86ddce48626b15f4987f22e80d898818d735b20bd58f17292ee8"}, + {file = "yarl-1.18.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd21c0128e301851de51bc607b0a6da50e82dc34e9601f4b508d08cc89ee7929"}, + {file = "yarl-1.18.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:205de377bd23365cd85562c9c6c33844050a93661640fda38e0567d2826b50df"}, + {file = "yarl-1.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed69af4fe2a0949b1ea1d012bf065c77b4c7822bad4737f17807af2adb15a73c"}, + {file = "yarl-1.18.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e1c18890091aa3cc8a77967943476b729dc2016f4cfe11e45d89b12519d4a93"}, + {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:91b8fb9427e33f83ca2ba9501221ffaac1ecf0407f758c4d2f283c523da185ee"}, + {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:536a7a8a53b75b2e98ff96edb2dfb91a26b81c4fed82782035767db5a465be46"}, + {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a64619a9c47c25582190af38e9eb382279ad42e1f06034f14d794670796016c0"}, + {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c73a6bbc97ba1b5a0c3c992ae93d721c395bdbb120492759b94cc1ac71bc6350"}, + {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a173401d7821a2a81c7b47d4e7d5c4021375a1441af0c58611c1957445055056"}, + {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7520e799b1f84e095cce919bd6c23c9d49472deeef25fe1ef960b04cca51c3fc"}, + {file = "yarl-1.18.0-cp311-cp311-win32.whl", hash = "sha256:c4cb992d8090d5ae5f7afa6754d7211c578be0c45f54d3d94f7781c495d56716"}, + {file = "yarl-1.18.0-cp311-cp311-win_amd64.whl", hash = "sha256:52c136f348605974c9b1c878addd6b7a60e3bf2245833e370862009b86fa4689"}, + {file = "yarl-1.18.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1ece25e2251c28bab737bdf0519c88189b3dd9492dc086a1d77336d940c28ced"}, + {file = "yarl-1.18.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:454902dc1830d935c90b5b53c863ba2a98dcde0fbaa31ca2ed1ad33b2a7171c6"}, + {file = "yarl-1.18.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:01be8688fc211dc237e628fcc209dda412d35de7642453059a0553747018d075"}, + {file = "yarl-1.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d26f1fa9fa2167bb238f6f4b20218eb4e88dd3ef21bb8f97439fa6b5313e30d"}, + {file = "yarl-1.18.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b234a4a9248a9f000b7a5dfe84b8cb6210ee5120ae70eb72a4dcbdb4c528f72f"}, + {file = "yarl-1.18.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe94d1de77c4cd8caff1bd5480e22342dbd54c93929f5943495d9c1e8abe9f42"}, + {file = "yarl-1.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b4c90c5363c6b0a54188122b61edb919c2cd1119684999d08cd5e538813a28e"}, + {file = "yarl-1.18.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49a98ecadc5a241c9ba06de08127ee4796e1009555efd791bac514207862b43d"}, + {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9106025c7f261f9f5144f9aa7681d43867eed06349a7cfb297a1bc804de2f0d1"}, + {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:f275ede6199d0f1ed4ea5d55a7b7573ccd40d97aee7808559e1298fe6efc8dbd"}, + {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f7edeb1dcc7f50a2c8e08b9dc13a413903b7817e72273f00878cb70e766bdb3b"}, + {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c083f6dd6951b86e484ebfc9c3524b49bcaa9c420cb4b2a78ef9f7a512bfcc85"}, + {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:80741ec5b471fbdfb997821b2842c59660a1c930ceb42f8a84ba8ca0f25a66aa"}, + {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b1a3297b9cad594e1ff0c040d2881d7d3a74124a3c73e00c3c71526a1234a9f7"}, + {file = "yarl-1.18.0-cp312-cp312-win32.whl", hash = "sha256:cd6ab7d6776c186f544f893b45ee0c883542b35e8a493db74665d2e594d3ca75"}, + {file = "yarl-1.18.0-cp312-cp312-win_amd64.whl", hash = "sha256:039c299a0864d1f43c3e31570045635034ea7021db41bf4842693a72aca8df3a"}, + {file = "yarl-1.18.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6fb64dd45453225f57d82c4764818d7a205ee31ce193e9f0086e493916bd4f72"}, + {file = "yarl-1.18.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3adaaf9c6b1b4fc258584f4443f24d775a2086aee82d1387e48a8b4f3d6aecf6"}, + {file = "yarl-1.18.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:da206d1ec78438a563c5429ab808a2b23ad7bc025c8adbf08540dde202be37d5"}, + {file = "yarl-1.18.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:576d258b21c1db4c6449b1c572c75d03f16a482eb380be8003682bdbe7db2f28"}, + {file = "yarl-1.18.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c60e547c0a375c4bfcdd60eef82e7e0e8698bf84c239d715f5c1278a73050393"}, + {file = "yarl-1.18.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e3818eabaefb90adeb5e0f62f047310079d426387991106d4fbf3519eec7d90a"}, + {file = "yarl-1.18.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5f72421246c21af6a92fbc8c13b6d4c5427dfd949049b937c3b731f2f9076bd"}, + {file = "yarl-1.18.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7fa7d37f2ada0f42e0723632993ed422f2a679af0e200874d9d861720a54f53e"}, + {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:42ba84e2ac26a3f252715f8ec17e6fdc0cbf95b9617c5367579fafcd7fba50eb"}, + {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:6a49ad0102c0f0ba839628d0bf45973c86ce7b590cdedf7540d5b1833ddc6f00"}, + {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:96404e8d5e1bbe36bdaa84ef89dc36f0e75939e060ca5cd45451aba01db02902"}, + {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a0509475d714df8f6d498935b3f307cd122c4ca76f7d426c7e1bb791bcd87eda"}, + {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:1ff116f0285b5c8b3b9a2680aeca29a858b3b9e0402fc79fd850b32c2bcb9f8b"}, + {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2580c1d7e66e6d29d6e11855e3b1c6381971e0edd9a5066e6c14d79bc8967af"}, + {file = "yarl-1.18.0-cp313-cp313-win32.whl", hash = "sha256:14408cc4d34e202caba7b5ac9cc84700e3421a9e2d1b157d744d101b061a4a88"}, + {file = "yarl-1.18.0-cp313-cp313-win_amd64.whl", hash = "sha256:1db1537e9cb846eb0ff206eac667f627794be8b71368c1ab3207ec7b6f8c5afc"}, + {file = "yarl-1.18.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fa2c9cb607e0f660d48c54a63de7a9b36fef62f6b8bd50ff592ce1137e73ac7d"}, + {file = "yarl-1.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c0f4808644baf0a434a3442df5e0bedf8d05208f0719cedcd499e168b23bfdc4"}, + {file = "yarl-1.18.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7db9584235895a1dffca17e1c634b13870852094f6389b68dcc6338086aa7b08"}, + {file = "yarl-1.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:309f8d27d6f93ceeeb80aa6980e883aa57895270f7f41842b92247e65d7aeddf"}, + {file = "yarl-1.18.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:609ffd44fed2ed88d9b4ef62ee860cf86446cf066333ad4ce4123505b819e581"}, + {file = "yarl-1.18.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f172b8b2c72a13a06ea49225a9c47079549036ad1b34afa12d5491b881f5b993"}, + {file = "yarl-1.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d89ae7de94631b60d468412c18290d358a9d805182373d804ec839978b120422"}, + {file = "yarl-1.18.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:466d31fd043ef9af822ee3f1df8fdff4e8c199a7f4012c2642006af240eade17"}, + {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7609b8462351c4836b3edce4201acb6dd46187b207c589b30a87ffd1813b48dc"}, + {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:d9d4f5e471e8dc49b593a80766c2328257e405f943c56a3dc985c125732bc4cf"}, + {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:67b336c15e564d76869c9a21316f90edf546809a5796a083b8f57c845056bc01"}, + {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b212452b80cae26cb767aa045b051740e464c5129b7bd739c58fbb7deb339e7b"}, + {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:38b39b7b3e692b6c92b986b00137a3891eddb66311b229d1940dcbd4f025083c"}, + {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a7ee6884a8848792d58b854946b685521f41d8871afa65e0d4a774954e9c9e89"}, + {file = "yarl-1.18.0-cp39-cp39-win32.whl", hash = "sha256:b4095c5019bb889aa866bf12ed4c85c0daea5aafcb7c20d1519f02a1e738f07f"}, + {file = "yarl-1.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:2d90f2e4d16a5b0915ee065218b435d2ef619dd228973b1b47d262a6f7cd8fa5"}, + {file = "yarl-1.18.0-py3-none-any.whl", hash = "sha256:dbf53db46f7cf176ee01d8d98c39381440776fcda13779d269a8ba664f69bec0"}, + {file = "yarl-1.18.0.tar.gz", hash = "sha256:20d95535e7d833889982bfe7cc321b7f63bf8879788fee982c76ae2b24cfb715"}, ] [package.dependencies] idna = ">=2.0" multidict = ">=4.0" +propcache = ">=0.2.0" [[package]] name = "zipp" -version = "3.20.2" +version = "3.21.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "zipp-3.20.2-py3-none-any.whl", hash = "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350"}, - {file = "zipp-3.20.2.tar.gz", hash = "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29"}, + {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, + {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, ] [package.extras] diff --git a/scenes/simulation-suite/game.py b/scenes/simulation-suite/game.py index 978c5f33..8b442077 100644 --- a/scenes/simulation-suite/game.py +++ b/scenes/simulation-suite/game.py @@ -481,7 +481,11 @@ def game(TM): TM.log.debug("SIMULATION SUITE: transform npc", npc=npc) - character_attributes = TM.agents.world_state.extract_character_sheet(name=npc.name, alteration_instructions=self.player_message.raw) + character_attributes = TM.agents.world_state.extract_character_sheet( + name=npc.name, + text=inject, + alteration_instructions=self.player_message.raw + ) TM.scene.set_character_attributes(npc.name, character_attributes) character_description = TM.agents.creator.determine_character_description(npc.name) diff --git a/src/talemate/agents/base.py b/src/talemate/agents/base.py index 1197e35d..036e5a0f 100644 --- a/src/talemate/agents/base.py +++ b/src/talemate/agents/base.py @@ -65,6 +65,8 @@ class AgentAction(pydantic.BaseModel): condition: Union[AgentActionConditional, None] = None container: bool = False icon: Union[str, None] = None + can_be_disabled: bool = False + experimental: bool = False class AgentDetail(pydantic.BaseModel): diff --git a/src/talemate/agents/conversation.py b/src/talemate/agents/conversation.py index 6a8d491f..fa8aef80 100644 --- a/src/talemate/agents/conversation.py +++ b/src/talemate/agents/conversation.py @@ -21,7 +21,7 @@ from talemate.emit import emit from talemate.events import GameLoopEvent from talemate.exceptions import LLMAccuracyError from talemate.prompts import Prompt -from talemate.scene_message import CharacterMessage, DirectorMessage +from talemate.scene_message import CharacterMessage, DirectorMessage, ContextInvestigationMessage, NarratorMessage from .base import ( Agent, @@ -86,7 +86,9 @@ class ConversationAgent(Agent): self.actions = { "generation_override": AgentAction( enabled=True, - label="Generation Settings", + container=True, + icon="mdi-atom-variant", + label="Generation", config={ "format": AgentActionConfig( type="text", @@ -107,12 +109,6 @@ class ConversationAgent(Agent): max=512, step=32, ), - "instructions": AgentActionConfig( - type="text", - label="Instructions", - value="Write 1-3 sentences. Never wax poetic.", - description="Extra instructions to give the AI for dialog generatrion.", - ), "jiggle": AgentActionConfig( type="number", label="Jiggle (Increased Randomness)", @@ -122,6 +118,29 @@ class ConversationAgent(Agent): max=1.0, step=0.1, ), + "instructions": AgentActionConfig( + type="blob", + label="Task Instructions", + value="Write 1-3 sentences. Never wax poetic.", + description="Allows to extend the task instructions - placed above the context history.", + ), + "actor_instructions": AgentActionConfig( + type="blob", + label="Actor Instructions", + value="", + description="Allows to extend the actor instructions - placed towards the end of the context history.", + ), + "actor_instructions_offset": AgentActionConfig( + type="number", + label="Actor Instructions Offset", + value=3, + description="Offsets the actor instructions into the context history, shifting it up N number of messages. 0 = at the end of the context history.", + min=0, + max=20, + step=1, + ), + + }, ), "auto_break_repetition": AgentAction( @@ -176,11 +195,32 @@ class ConversationAgent(Agent): { "label": "AI compiled question and answers (slow)", "value": "questions", - }, + } ], ), }, ), + "investigate_context": AgentAction( + enabled=False, + label="Context Investigation", + container=True, + icon="mdi-text-search", + can_be_disabled=True, + experimental=True, + description="Will investigate the layered history of the scene to extract relevant information. This can be very slow, especially as number of layers increase. Layered history needs to be enabled in the summarizer agent.", + config={ + "trigger": AgentActionConfig( + type="text", + label="Trigger", + description="The trigger to start the context investigation", + value="ai", + choices=[ + {"label": "Agent decides", "value": "ai"}, + {"label": "Only when a question is asked", "value": "question"}, + ] + ), + } + ), } @property @@ -219,6 +259,26 @@ class ConversationAgent(Agent): return details + @property + def generation_settings_task_instructions(self): + return self.actions["generation_override"].config["instructions"].value + + @property + def generation_settings_actor_instructions(self): + return self.actions["generation_override"].config["actor_instructions"].value + + @property + def generation_settings_actor_instructions_offset(self): + return self.actions["generation_override"].config["actor_instructions_offset"].value + + @property + def investigate_context(self): + return self.actions["investigate_context"].enabled + + @property + def investigate_context_trigger(self): + return self.actions["investigate_context"].config["trigger"].value + def connect(self, scene): super().connect(scene) talemate.emit.async_signals.get("game_loop").connect(self.on_game_loop) @@ -433,6 +493,7 @@ class ConversationAgent(Agent): self, character: Character, char_message: Optional[str] = "", + instruction: Optional[str] = None, ): """ Builds the prompt that drives the AI's conversational response @@ -471,12 +532,9 @@ class ConversationAgent(Agent): director_message = isinstance(scene_and_dialogue[-1], DirectorMessage) except IndexError: director_message = False - - extra_instructions = "" - if self.actions["generation_override"].enabled: - extra_instructions = ( - self.actions["generation_override"].config["instructions"].value - ) + + if self.investigate_context: + await self.run_context_investigation(character) conversation_format = self.conversation_format prompt = Prompt.get( @@ -493,7 +551,11 @@ class ConversationAgent(Agent): "talking_character": character, "partial_message": char_message, "director_message": director_message, - "extra_instructions": extra_instructions, + "extra_instructions": self.generation_settings_task_instructions, #backward compatibility + "task_instructions": self.generation_settings_task_instructions, + "actor_instructions": self.generation_settings_actor_instructions, + "actor_instructions_offset": self.generation_settings_actor_instructions_offset, + "direct_instruction": instruction, "decensor": self.client.decensor_enabled, }, ) @@ -526,11 +588,8 @@ class ConversationAgent(Agent): if retrieval_method != "direct": world_state = instance.get_agent("world_state") history = self.scene.context_history( - min_dialogue=3, - max_dialogue=15, keep_director=False, - sections=False, - add_archieved_history=False, + budget=int(self.client.max_token_length * 0.75), ) text = "\n".join(history) log.debug( @@ -542,13 +601,15 @@ class ConversationAgent(Agent): if retrieval_method == "questions": self.current_memory_context = ( await world_state.analyze_text_and_extract_context( - text, f"continue the conversation as {character.name}" + text, f"continue the conversation as {character.name}", + include_character_context=True ) ).split("\n") elif retrieval_method == "queries": self.current_memory_context = ( await world_state.analyze_text_and_extract_context_via_queries( - text, f"continue the conversation as {character.name}" + text, f"continue the conversation as {character.name}", + include_character_context=True ) ) @@ -567,10 +628,40 @@ class ConversationAgent(Agent): return self.current_memory_context - async def build_prompt(self, character, char_message: str = ""): + async def run_context_investigation(self, character: Character | None = None): + + # go backwards in the history if there is a ContextInvestigation message before + # there is a character or narrator message, just return + for idx in range(len(self.scene.history) - 1, -1, -1): + if isinstance(self.scene.history[idx], ContextInvestigationMessage): + return + + if isinstance(self.scene.history[idx], (CharacterMessage, NarratorMessage)): + break + + last_message = self.scene.last_message_of_type(["character", "narrator"]) + + if self.investigate_context_trigger == "question": + if not last_message: + return + + if "?" not in str(last_message): + return + + summarizer = instance.get_agent("summarizer") + result = await summarizer.dig_layered_history(str(last_message), character=character) + + if not result.strip(): + return + + message = ContextInvestigationMessage(message=result) + self.scene.push_history([message]) + emit("context_investigation", message) + + async def build_prompt(self, character, char_message: str = "", instruction:str = None): fn = self.build_prompt_default - return await fn(character, char_message=char_message) + return await fn(character, char_message=char_message, instruction=instruction) def clean_result(self, result, character): if "#" in result: @@ -607,7 +698,7 @@ class ConversationAgent(Agent): set_client_context_attribute("nuke_repetition", nuke_repetition) @set_processing - async def converse(self, actor): + async def converse(self, actor, only_generate:bool = False, instruction:str = None) -> list[str] | list[CharacterMessage]: """ Have a conversation with the AI """ @@ -625,7 +716,7 @@ class ConversationAgent(Agent): self.set_generation_overrides() - result = await self.client.send_prompt(await self.build_prompt(character)) + result = await self.client.send_prompt(await self.build_prompt(character, instruction=instruction)) result = self.clean_result(result, character) @@ -707,6 +798,9 @@ class ConversationAgent(Agent): response_message = util.parse_messages_from_str(total_result, [character.name]) log.info("conversation agent", result=response_message) + + if only_generate: + return response_message emission = ConversationAgentEmission( agent=self, generation=response_message, actor=actor, character=character diff --git a/src/talemate/agents/creator/assistant.py b/src/talemate/agents/creator/assistant.py index 0cf498df..831112ba 100644 --- a/src/talemate/agents/creator/assistant.py +++ b/src/talemate/agents/creator/assistant.py @@ -1,6 +1,7 @@ import asyncio import json import random +import uuid from typing import TYPE_CHECKING, Tuple, Union import pydantic @@ -317,3 +318,88 @@ class AssistantMixin: emit("autocomplete_suggestion", response) return response + + @set_processing + async def fork_scene( + self, + message_id: int, + save_name: str | None = None, + ): + """ + Allows to fork a new scene from a specific message + in the current scene. + + All content after the message will be removed and the + context database will be re imported ensuring a clean state. + + All state reinforcements will be reset to their most recent + state before the message. + """ + + emit("status", "Creating scene fork ...", status="busy") + try: + if not save_name: + # build a save name + uuid_str = str(uuid.uuid4())[:8] + save_name = f"{uuid_str}-forked" + + log.info(f"Forking scene", message_id=message_id, save_name=save_name) + + world_state = get_agent("world_state") + + # does a message with the given id exist? + index = self.scene.message_index(message_id) + if index is None: + raise ValueError(f"Message with id {message_id} not found.") + + # truncate scene.history keeping index as the last element + self.scene.history = self.scene.history[:index + 1] + + # truncate scene.archived_history keeping the element where `end` is < `index` + # as the last element + self.scene.archived_history = [ + x for x in self.scene.archived_history if "end" not in x or x["end"] < index + ] + + # the same needs to be done for layered history + # where each layer is truncated based on what's left in the previous layer + # using similar logic as above (checking `end` vs `index`) + # layer 0 checks archived_history + + new_layered_history = [] + for layer_number, layer in enumerate(self.scene.layered_history): + + if layer_number == 0: + index = len(self.scene.archived_history) - 1 + else: + index = len(new_layered_history[layer_number - 1]) - 1 + + new_layer = [ + x for x in layer if x["end"] < index + ] + new_layered_history.append(new_layer) + + self.scene.layered_history = new_layered_history + + # save the scene + await self.scene.save(copy_name=save_name) + + log.info(f"Scene forked", save_name=save_name) + + # re-emit history + await self.scene.emit_history() + + emit("status", f"Updating world state ...", status="busy") + + # reset state reinforcements + await world_state.update_reinforcements(force = True, reset= True) + + # update world state + await self.scene.world_state.request_update() + + emit("status", f"Scene forked", status="success") + except Exception as e: + log.exception("Scene fork failed", exc=e) + emit("status", "Scene fork failed", status="error") + + \ No newline at end of file diff --git a/src/talemate/agents/director.py b/src/talemate/agents/director.py index b3cf1f3c..fd477a28 100644 --- a/src/talemate/agents/director.py +++ b/src/talemate/agents/director.py @@ -17,7 +17,7 @@ from talemate.emit import emit, wait_for_input from talemate.events import GameLoopActorIterEvent, GameLoopStartEvent, SceneStateEvent from talemate.game.engine import GameInstructionsMixin from talemate.prompts import Prompt -from talemate.scene_message import DirectorMessage, NarratorMessage +from talemate.scene_message import DirectorMessage, NarratorMessage, CharacterMessage from .base import Agent, AgentAction, AgentActionConfig, set_processing from .registry import register @@ -83,6 +83,51 @@ class DirectorAgent(GameInstructionsMixin, Agent): ), }, ), + "_generate_choices": AgentAction( + enabled=True, + container=True, + can_be_disabled=True, + experimental=True, + label="Dynamic Actions", + icon="mdi-tournament", + description="Allows the director to generate clickable choices for the player.", + config={ + "chance": AgentActionConfig( + type="number", + label="Chance", + description="The chance to generate actions. 0 = never, 1 = always", + value=0.3, + min=0, + max=1, + step=0.1, + ), + + "num_choices": AgentActionConfig( + type="number", + label="Number of Actions", + description="The number of actions to generate", + value=3, + min=1, + max=10, + step=1, + ), + + "never_auto_progress": AgentActionConfig( + type="bool", + label="Never Auto Progress on Action Selection", + description="If enabled, the scene will not auto progress after you select an action.", + value=False, + ), + + "instructions": AgentActionConfig( + type="blob", + label="Instructions", + description="Provide some instructions to the director for generating actions.", + value="", + ), + } + ), + } @property @@ -113,6 +158,26 @@ class DirectorAgent(GameInstructionsMixin, Agent): def actor_direction_mode(self): return self.actions["direct"].config["actor_direction_mode"].value + @property + def generate_choices_enabled(self): + return self.actions["_generate_choices"].enabled + + @property + def generate_choices_chance(self): + return self.actions["_generate_choices"].config["chance"].value + + @property + def generate_choices_num_choices(self): + return self.actions["_generate_choices"].config["num_choices"].value + + @property + def generate_choices_never_auto_progress(self): + return self.actions["_generate_choices"].config["never_auto_progress"].value + + @property + def generate_choices_instructions(self): + return self.actions["_generate_choices"].config["instructions"].value + def connect(self, scene): super().connect(scene) talemate.emit.async_signals.get("agent.conversation.before_generate").connect( @@ -122,6 +187,7 @@ class DirectorAgent(GameInstructionsMixin, Agent): self.on_player_dialog ) talemate.emit.async_signals.get("scene_init").connect(self.on_scene_init) + talemate.emit.async_signals.get("player_turn_start").connect(self.on_player_turn_start) async def on_scene_init(self, event: SceneStateEvent): """ @@ -172,6 +238,31 @@ class DirectorAgent(GameInstructionsMixin, Agent): event.game_loop.had_passive_narration = await self.direct(None) + async def on_player_turn_start(self, event: GameLoopStartEvent): + if not self.enabled: + return + + if self.generate_choices_enabled: + + # look backwards through history and abort if we encounter + # a character message with source "player" before either + # a character message with a different source or a narrator message + # + # this is so choices aren't generated when the player message was + # the most recent content in the scene + + for i in range(len(self.scene.history) - 1, -1, -1): + message = self.scene.history[i] + if isinstance(message, NarratorMessage): + break + if isinstance(message, CharacterMessage): + if message.source == "player": + return + break + + if random.random() < self.generate_choices_chance: + await self.generate_choices() + async def direct(self, character: Character) -> bool: if not self.actions["direct"].enabled: return False @@ -432,3 +523,50 @@ class DirectorAgent(GameInstructionsMixin, Agent): self, kind: str, agent_function_name: str, auto: bool = False ): return True + + + @set_processing + async def generate_choices( + self, + ): + + log.info("generate_choices") + + response = await Prompt.request( + "director.generate-choices", + self.client, + "direction_long", + vars={ + "max_tokens": self.client.max_token_length, + "scene": self.scene, + "player_character": self.scene.get_player_character(), + "num_choices": self.generate_choices_num_choices, + "instructions": self.generate_choices_instructions, + }, + ) + + try: + choice_text = response.split("ACTIONS:", 1)[1] + choices = util.extract_list(choice_text) + # strip quotes + choices = [choice.strip().strip('"') for choice in choices] + + # limit to num_choices + choices = choices[:self.generate_choices_num_choices] + + except Exception as e: + log.error("generate_choices failed", error=str(e), response=response) + return + + + + log.info("generate_choices done", choices=choices) + + emit( + "player_choice", + response, + data = { + "choices": choices + }, + websocket_passthrough=True + ) \ No newline at end of file diff --git a/src/talemate/agents/memory/__init__.py b/src/talemate/agents/memory/__init__.py index 49f00267..c38df7b9 100644 --- a/src/talemate/agents/memory/__init__.py +++ b/src/talemate/agents/memory/__init__.py @@ -795,7 +795,7 @@ class ChromaDBMemoryAgent(MemoryAgent): elif not where["$and"]: where = None - # log.debug("crhomadb agent get", text=text, where=where) + log.debug("crhomadb agent get", text=text, where=where) _results = self.db.query(query_texts=[text], where=where, n_results=limit) @@ -875,6 +875,10 @@ class ChromaDBMemoryAgent(MemoryAgent): return None def _get_document(self, id) -> dict: + + if not id: + return {} + result = self.db.get(ids=[id] if isinstance(id, str) else id) documents = {} diff --git a/src/talemate/agents/summarize.py b/src/talemate/agents/summarize.py index 2c8be49c..55b0ed0c 100644 --- a/src/talemate/agents/summarize.py +++ b/src/talemate/agents/summarize.py @@ -1,20 +1,19 @@ from __future__ import annotations -import asyncio import re -import time -import traceback -from typing import TYPE_CHECKING, Callable, List, Optional, Union import structlog import talemate.data_objects as data_objects import talemate.emit.async_signals import talemate.util as util +from talemate.emit import emit from talemate.events import GameLoopEvent from talemate.prompts import Prompt -from talemate.scene_message import DirectorMessage, TimePassageMessage +from talemate.scene_message import DirectorMessage, TimePassageMessage, ContextInvestigationMessage, ReinforcementMessage from talemate.world_state.templates import GenerationOptions +from talemate.tale_mate import Character +from talemate.exceptions import GenerationCancelled from .base import Agent, AgentAction, AgentActionConfig, set_processing from .registry import register @@ -22,6 +21,12 @@ from .registry import register log = structlog.get_logger("talemate.agents.summarize") +class SummaryLongerThanOriginalError(ValueError): + def __init__(self, original_length:int, summarized_length:int): + self.original_length = original_length + self.summarized_length = summarized_length + super().__init__(f"Summarized text is longer than original text: {summarized_length} > {original_length}") + @register() class SummarizeAgent(Agent): """ @@ -70,13 +75,53 @@ class SummarizeAgent(Agent): label="Use preceeding summaries to strengthen context", description="Number of entries", note="Help the AI summarize by including the last few summaries as additional context. Some models may incorporate this context into the new summary directly, so if you find yourself with a bunch of similar history entries, try setting this to 0.", - value=3, + value=6, min=0, - max=10, + max=24, step=1, ), }, - ) + ), + # layered history gets its own action + "layered_history": AgentAction( + enabled=True, + container=True, + icon="mdi-layers", + can_be_disabled=True, + experimental=True, + label="Layered history", + description="Generate a layered history with multiple levels of summarization", + config={ + "threshold": AgentActionConfig( + type="number", + label="Token Threshold", + description="Will summarize when the number of tokens in previous layer exceeds this threshold", + min=256, + max=8192, + step=128, + value=1536, + ), + "max_layers": AgentActionConfig( + type="number", + label="Maximum number of layers", + description="The maximum number of layers to generate", + min=1, + max=5, + step=1, + value=3, + ), + "max_process_tokens": AgentActionConfig( + type="number", + label="Maximum tokens to process", + description="The maximum number of tokens to process at once.", + note="Smaller LLMs may struggle with accurately summarizing long texts. This setting will split the text into chunks and summarize each chunk separately, then stich them together in the next layer. If you're using a strong LLM (70B+), you can try setting this to be the same as the threshold.", + min=256, + max=8192, + step=128, + value=768, + ), + }, + ), } @property @@ -88,6 +133,38 @@ class SummarizeAgent(Agent): all_tokens = sum([util.count_tokens(entry) for entry in self.scene.history]) return all_tokens // self.threshold + @property + def archive_threshold(self): + return self.actions["archive"].config["threshold"].value + + @property + def archive_method(self): + return self.actions["archive"].config["method"].value + + @property + def archive_include_previous(self): + return self.actions["archive"].config["include_previous"].value + + @property + def layered_history_enabled(self): + return self.actions["layered_history"].enabled + + @property + def layered_history_threshold(self): + return self.actions["layered_history"].config["threshold"].value + + @property + def layered_history_max_process_tokens(self): + return self.actions["layered_history"].config["max_process_tokens"].value + + @property + def layered_history_max_layers(self): + return self.actions["layered_history"].config["max_layers"].value + + @property + def layered_history_available(self): + return self.layered_history_enabled and self.scene.layered_history and self.scene.layered_history[0] + def connect(self, scene): super().connect(scene) talemate.emit.async_signals.get("game_loop").connect(self.on_game_loop) @@ -104,7 +181,7 @@ class SummarizeAgent(Agent): result = result.split("#")[0] # Removes partial sentence at the end - result = re.sub(r"[^\.\?\!]+(\n|$)", "", result) + result = util.strip_partial_sentences(result) result = result.strip() return result @@ -135,9 +212,14 @@ class SummarizeAgent(Agent): num_previous = self.actions["archive"].config["include_previous"].value if recent_entry and num_previous > 0: - extra_context = "\n\n".join( - [entry["text"] for entry in scene.archived_history[-num_previous:]] - ) + if self.layered_history_available: + log.warning("build_archive with layered history") + extra_context = self.compile_layered_history(include_base_layer=True) + else: + extra_context = [ + entry["text"] for entry in scene.archived_history[-num_previous:] + ] + else: extra_context = None @@ -160,15 +242,17 @@ class SummarizeAgent(Agent): # log.debug("build_archive", idx=i, content=str(dialogue)[:64]+"...") - if isinstance(dialogue, DirectorMessage): + if isinstance(dialogue, (DirectorMessage, ContextInvestigationMessage, ReinforcementMessage)): + # these messages are not part of the dialogue and should not be summarized if i == start: start += 1 continue if isinstance(dialogue, TimePassageMessage): log.debug("build_archive", time_passage_message=dialogue) + ts = util.iso8601_add(ts, dialogue.ts) + if i == start: - ts = util.iso8601_add(ts, dialogue.ts) log.debug( "build_archive", time_passage_message=dialogue, @@ -222,15 +306,33 @@ class SummarizeAgent(Agent): if str(line) in terminating_line: break adjusted_dialogue.append(line) - dialogue_entries = adjusted_dialogue - end = start + len(dialogue_entries) - 1 + + # if difference start and end is less than 4, ignore the termination + if len(adjusted_dialogue) > 4: + dialogue_entries = adjusted_dialogue + end = start + len(dialogue_entries) - 1 + else: + log.warning("build_archive", message="Ignoring termination", start=start, end=end, adjusted_dialogue=adjusted_dialogue) if dialogue_entries: - summarized = await self.summarize( - "\n".join(map(str, dialogue_entries)), - extra_context=extra_context, - generation_options=generation_options, - ) + + if not extra_context: + # prepend scene intro to dialogue + dialogue_entries.insert(0, scene.intro) + + summarized = None + retries = 5 + + while not summarized and retries > 0: + summarized = await self.summarize( + "\n".join(map(str, dialogue_entries)), + extra_context=extra_context, + generation_options=generation_options, + ) + retries -= 1 + + if not summarized: + raise IOError("Failed to summarize dialogue", dialogue=dialogue_entries) else: # AI has likely identified the first line as a scene change, so we can't summarize @@ -240,6 +342,13 @@ class SummarizeAgent(Agent): # determine the appropariate timestamp for the summarization scene.push_archive(data_objects.ArchiveEntry(summarized, start, end, ts=ts)) + + scene.ts=ts + scene.emit_status() + + # process layered history + if self.layered_history_enabled: + await self.summarize_to_layered_history() return True @@ -259,6 +368,68 @@ class SummarizeAgent(Agent): response = self.clean_result(response) return response + @set_processing + async def find_natural_scene_termination(self, event_chunks:list[str]) -> list[list[str]]: + """ + Will analyze a list of events and return a list of events that + has been separated at a natural scene termination points. + """ + + # scan through event chunks and split into paragraphs + rebuilt_chunks = [] + + for chunk in event_chunks: + paragraphs = [ + p.strip() for p in chunk.split("\n") if p.strip() + ] + rebuilt_chunks.extend(paragraphs) + + event_chunks = rebuilt_chunks + + response = await Prompt.request( + "summarizer.find-natural-scene-termination-events", + self.client, + "analyze_short2", + vars={ + "scene": self.scene, + "max_tokens": self.client.max_token_length, + "events": event_chunks, + }, + ) + response = response.strip() + + items = util.extract_list(response) + + # will be a list of + # ["Progress 1", "Progress 12", "Progress 323", ...] + # convert to a list of just numbers + + numbers = [] + + for item in items: + match = re.match(r"Progress (\d+)", item.strip()) + if match: + numbers.append(int(match.group(1))) + + # make sure its unique and sorted + numbers = sorted(list(set(numbers))) + + result = [] + prev_number = 0 + for number in numbers: + result.append(event_chunks[prev_number:number+1]) + prev_number = number+1 + + #result = { + # "selected": event_chunks[:number+1], + # "remaining": event_chunks[number+1:] + #} + + log.debug("find_natural_scene_termination", response=response, result=result, numbers=numbers) + + return result + + @set_processing async def summarize( self, @@ -267,14 +438,15 @@ class SummarizeAgent(Agent): method: str = None, extra_instructions: str = None, generation_options: GenerationOptions | None = None, + source_type: str = "dialogue", ): """ Summarize the given text """ response = await Prompt.request( - "summarizer.summarize-dialogue", + f"summarizer.summarize-{source_type}", self.client, - "summarize", + "summarize_long", vars={ "dialogue": text, "scene": self.scene, @@ -285,6 +457,7 @@ class SummarizeAgent(Agent): else method ), "extra_context": extra_context or "", + "num_extra_context": len(extra_context) if extra_context else 0, "extra_instructions": extra_instructions or "", "generation_options": generation_options, }, @@ -293,131 +466,576 @@ class SummarizeAgent(Agent): self.scene.log.info( "summarize", dialogue_length=len(text), summarized_length=len(response) ) + + try: + if source_type == "dialogue": + summary = response.split("SUMMARY:")[1].strip() + else: + summary = response.strip() + except Exception as e: + log.error("summarize failed", response=response, exc=e) + return "" + + # capitalize first letter + try: + summary = summary[0].upper() + summary[1:] + except IndexError: + pass + + return self.clean_result(summary) - return self.clean_result(response) - - async def build_stepped_archive_for_level(self, level: int): + @set_processing + async def generate_timeline(self) -> list[str]: """ - WIP - not yet used - - This will iterate over existing archived_history entries - and stepped_archived_history entries and summarize based on time duration - indicated between the entries. - - The lowest level of summarization (based on token threshold and any time passage) - happens in build_archive. This method is for summarizing furhter levels based on - long time pasages. - - Level 0: small timestap summarize (summarizes all token summarizations when time advances +1 day) - Level 1: medium timestap summarize (summarizes all small timestep summarizations when time advances +1 week) - Level 2: large timestap summarize (summarizes all medium timestep summarizations when time advances +1 month) - Level 3: huge timestap summarize (summarizes all large timestep summarizations when time advances +1 year) - Level 4: massive timestap summarize (summarizes all huge timestep summarizations when time advances +10 years) - Level 5: epic timestap summarize (summarizes all massive timestep summarizations when time advances +100 years) - and so on (increasing by a factor of 10 each time) - - ``` - @dataclass - class ArchiveEntry: - text: str - start: int = None - end: int = None - ts: str = None - ``` - - Like token summarization this will use ArchiveEntry and start and end will refer to the entries in the - lower level of summarization. - - Ts is the iso8601 timestamp of the start of the summarized period. + Will generate a factual and concise timeline of the scene history + + Events will be returned one per line, in a single sentence. + + Only major events and important milestones should be included. """ - - # select the list to use for the entries - - if level == 0: - entries = self.scene.archived_history - else: - entries = self.scene.stepped_archived_history[level - 1] - - # select the list to summarize new entries to - - target = self.scene.stepped_archived_history[level] - - if not target: - raise ValueError(f"Invalid level {level}") - - # determine the start and end of the period to summarize - - if not entries: - return - - # determine the time threshold for this level - - # first calculate all possible thresholds in iso8601 format, starting with 1 day - thresholds = [ - "P1D", - "P1W", - "P1M", - "P1Y", + + events = [] + + for ah in self.scene.archived_history: + events.append( + { + "text": ah["text"], + "time": util.iso8601_duration_to_human(ah["ts"], suffix="later", zero_time_default="The beginning") + } + ) + + if not events: + return [] + + response = await Prompt.request( + "summarizer.timeline", + self.client, + "analyze_extensive", + vars={ + "scene": self.scene, + "max_tokens": self.client.max_token_length, + "events": events, + }, + ) + + log.debug("generate_timeline", response=response) + + return util.extract_list(response) + + def compile_layered_history( + self, + for_layer_index:int = None, + as_objects:bool=False, + include_base_layer:bool=False, + max:int = None + ) -> list[str]: + """ + Starts at the last layer and compiles the layered history into a single + list of events. + + We are iterating backwards, so the last layer will be the most granular. + + Each preceeding layer starts from the end of the the next layer. + """ + + layered_history = self.scene.layered_history + compiled = [] + next_layer_start = None + + for i in range(len(layered_history) - 1, -1, -1): + + if for_layer_index is not None: + if i < for_layer_index: + break + + log.debug("compilelayered history", i=i, next_layer_start=next_layer_start) + + if not layered_history[i]: + continue + + entry_num = 1 + + for layered_history_entry in layered_history[i][next_layer_start if next_layer_start is not None else 0:]: + text = f"{layered_history_entry['text']}" + + if for_layer_index == i and max is not None and max <= layered_history_entry["end"]: + break + + if as_objects: + compiled.append({ + "text": text, + "start": layered_history_entry["start"], + "end": layered_history_entry["end"], + "layer": i, + "ts_start": layered_history_entry["ts_start"], + "index": entry_num, + }) + entry_num += 1 + else: + compiled.append(text) + + next_layer_start = layered_history_entry["end"] + 1 + + if i == 0 and include_base_layer: + # we are are at layered history layer zero and inclusion of base layer (archived history) is requested + # so we append the base layer to the compiled list, starting from + # index `next_layer_start` + + entry_num = 1 + + for ah in self.scene.archived_history[next_layer_start:]: + + text = f"{ah['text']}" + if as_objects: + compiled.append({ + "text": text, + "start": ah["start"], + "end": ah["end"], + "layer": -1, + "ts": ah["ts"], + "index": entry_num, + }) + entry_num += 1 + else: + compiled.append(text) + + return compiled + + @set_processing + async def list_major_milestones(self, content:str, extra_context:str, as_list:bool=False) -> list[str] | str: + """ + Will generate a list of major milestones in the scene history + """ + + response = await Prompt.request( + "summarizer.summarize-events-list-milestones", + self.client, + "analyze_medium3", + vars={ + "scene": self.scene, + "max_tokens": self.client.max_token_length, + "content": content, + "extra_context": extra_context, + }, + ) + + if not as_list: + return response + + try: + response = util.extract_list(response) + except IndexError as e: + log.error("list_major_milestones", error=str(e), response=response) + return "" + + return response + + + @set_processing + async def summarize_to_layered_history(self): + + """ + The layered history is a summarized archive with dynamic layers that + will get less and less granular as the scene progresses. + + The most granular is still self.scene.archived_history, which holds + all the base layer summarizations. + + self.scene.layered_history = [ + # first layer after archived_history + [ + { + "start": 0, # index in self.archived_history + "end": 10, # index in self.archived_history + "ts": "PT5M", + "text": "A summary of the first 10 entries" + }, + ... + ], + + # second layer + [ + { + "start": 0, # index in self.scene.layered_history[0] + "end": 5, # index in self.scene.layered_history[0] + "ts": "PT2M", + "text": "A summary of the first 5 entries" + }, + ... + ], + + # additional layers + ... ] + + The same token threshold as for the base layer will be used for the + layers. + + The same summarization function will be used for the layers. + + The next level layer will be generated automatically when the token + threshold is reached. + """ + + if not self.scene.archived_history: + return # No base layer summaries to work with + + token_threshold = self.layered_history_threshold + method = self.actions["archive"].config["method"].value + max_process_tokens = self.layered_history_max_process_tokens + max_layers = self.layered_history_max_layers - # TODO: auto extend? + if not hasattr(self.scene, 'layered_history'): + self.scene.layered_history = [] + + layered_history = self.scene.layered_history - time_threshold_in_seconds = util.iso8601_to_seconds(thresholds[level]) + async def summarize_layer(source_layer, next_layer_index, start_from) -> bool: + current_chunk = [] + current_tokens = 0 + start_index = start_from + noop = True + + total_tokens_in_previous_layer = util.count_tokens([ + entry['text'] for entry in source_layer + ]) + estimated_entries = total_tokens_in_previous_layer // token_threshold - if not time_threshold_in_seconds: - raise ValueError(f"Invalid level {level}") + for i in range(start_from, len(source_layer)): + entry = source_layer[i] + entry_tokens = util.count_tokens(entry['text']) + + log.debug("summarize_to_layered_history", entry=entry["text"][:100]+"...", tokens=entry_tokens, current_layer=next_layer_index-1) + + if current_tokens + entry_tokens > token_threshold: + if current_chunk: + + try: + # check if the next layer exists + next_layer = layered_history[next_layer_index] + except IndexError: + # create the next layer + layered_history.append([]) + log.debug("summarize_to_layered_history", created_layer=next_layer_index) + next_layer = layered_history[next_layer_index] + + ts = current_chunk[0]['ts'] + ts_start = current_chunk[0]['ts_start'] if 'ts_start' in current_chunk[0] else ts + ts_end = current_chunk[-1]['ts_end'] if 'ts_end' in current_chunk[-1] else ts + + summaries = [] - # determine the most recent summarized entry time, and then find entries - # that are newer than that in the lower list + extra_context = "\n\n".join( + self.compile_layered_history(next_layer_index) + ) - ts = target[-1].ts if target else entries[0].ts + text_length = util.count_tokens("\n\n".join(chunk['text'] for chunk in current_chunk)) - # determine the most recent entry at the lower level, if its not newer or - # the difference is less than the threshold, then we don't need to summarize + num_entries_in_layer = len(layered_history[next_layer_index]) - recent_entry = entries[-1] + emit("status", status="busy", message=f"Updating layered history - layer {next_layer_index} - {num_entries_in_layer} / {estimated_entries}", data={"cancellable": True}) + + while current_chunk: + + log.debug("summarize_to_layered_history", tokens_in_chunk=util.count_tokens("\n\n".join(chunk['text'] for chunk in current_chunk)), max_process_tokens=max_process_tokens) + + partial_chunk = [] + + while current_chunk and util.count_tokens("\n\n".join(chunk['text'] for chunk in partial_chunk)) < max_process_tokens: + partial_chunk.append(current_chunk.pop(0)) + + text_to_summarize = "\n\n".join(chunk['text'] for chunk in partial_chunk) + - if util.iso8601_diff(recent_entry.ts, ts) < time_threshold_in_seconds: + summary_text = await self.summarize( + text_to_summarize, + method=method, + source_type="events", + extra_context=extra_context + "\n\n".join(summaries), + ) + noop = False + + # strip all occurences of "CHUNK \d+: " from the summary + summary_text = re.sub(r"(CHUNK|CHAPTER) \d+:\s+", "", summary_text) + + # make sure the first letter is capitalized + summary_text = summary_text[0].upper() + summary_text[1:] + summaries.append(summary_text) + + # if summarized text is longer than the original, we will + # raise an error + if util.count_tokens(summaries) > text_length: + raise SummaryLongerThanOriginalError(text_length, util.count_tokens(summaries)) + + log.debug("summarize_to_layered_history", original_length=text_length, summarized_length=util.count_tokens(summaries)) + + next_layer.append({ + "start": start_index, + "end": i - 1, + "ts": ts, + "ts_start": ts_start, + "ts_end": ts_end, + "text": "\n\n".join(summaries) + }) + + emit("status", status="busy", message=f"Updating layered history - layer {next_layer_index} - {num_entries_in_layer+1} / {estimated_entries}") + + current_chunk = [] + current_tokens = 0 + start_index = i + + current_chunk.append(entry) + current_tokens += entry_tokens + + log.debug("summarize_to_layered_history", tokens=current_tokens, threshold=token_threshold, next_layer=next_layer_index) + + return not noop + + + # First layer (always the base layer) + has_been_updated = False + + try: + + if not layered_history: + layered_history.append([]) + log.debug("summarize_to_layered_history", layer="base", new_layer=True) + has_been_updated = await summarize_layer(self.scene.archived_history, 0, 0) + elif layered_history[0]: + # determine starting point by checking for `end` in the last entry + last_entry = layered_history[0][-1] + end = last_entry["end"] + log.debug("summarize_to_layered_history", layer="base", start=end) + has_been_updated = await summarize_layer(self.scene.archived_history, 0, end + 1) + else: + log.debug("summarize_to_layered_history", layer="base", empty=True) + has_been_updated = await summarize_layer(self.scene.archived_history, 0, 0) + + except SummaryLongerThanOriginalError as exc: + log.error("summarize_to_layered_history", error=exc, layer="base") return - - log.debug("build_stepped_archive", level=level, ts=ts) - - # if target is empty, start is 0 - # otherwise start is the end of the last entry - - start = 0 if not target else target[-1].end - - # collect entries starting at start until the combined time duration - # exceeds the threshold - - entries_to_summarize = [] - - for entry in entries[start:]: - entries_to_summarize.append(entry) - if util.iso8601_diff(entry.ts, ts) > time_threshold_in_seconds: - break - - # summarize the entries - # we also collect N entries of previous summaries to use as context - - num_previous = self.actions["archive"].config["include_previous"].value - if num_previous > 0: - extra_context = "\n\n".join( - [entry["text"] for entry in target[-num_previous:]] - ) + except GenerationCancelled: + log.info("Generation cancelled, stopping rebuild of historical layered history") + emit("status", message="Rebuilding of layered history cancelled", status="info") + return + + # process layers + async def update_layers() -> bool: + noop = True + for index in range(0, len(layered_history)): + + # check against max layers + if index + 1 > max_layers: + return False + + try: + # check if the next layer exists + next_layer = layered_history[index + 1] + except IndexError: + next_layer = None + + end = next_layer[-1]["end"] if next_layer else 0 + + log.debug("summarize_to_layered_history", layer=index, start=end) + summarized = await summarize_layer(layered_history[index], index + 1, end + 1 if end else 0) + + if summarized: + noop = False + + return not noop + + try: + while await update_layers(): + has_been_updated = True + if has_been_updated: + emit("status", status="success", message="Layered history updated.") + + except SummaryLongerThanOriginalError as exc: + log.error("summarize_to_layered_history", error=exc, layer="subsequent") + emit("status", status="error", message="Layered history update failed.") + return + except GenerationCancelled: + log.info("Generation cancelled, stopping rebuild of historical layered history") + emit("status", message="Rebuilding of layered history cancelled", status="info") + return + + @set_processing + async def dig_layered_history( + self, + query: str, + entry: dict | None = None, + context: list[str] | None = None, + dig_question: str | None = None, + character: Character | None = None, + ): + + """ + Digs through the layered history in order to answer a query + """ + + is_initial = entry is None + + if not self.layered_history_enabled: + return "" + + if not self.scene.layered_history or not self.scene.layered_history[0]: + log.debug("dig_layered_history", skip="No history to dig through") + return "" + + + entries = [] + + if not entry: + entries = self.compile_layered_history(as_objects=True, include_base_layer=True) + layer = len(self.scene.layered_history) - 1 + elif "layer" in entry: + layer = entry["layer"] - 1 + + if layer > -1: + entries = self.scene.layered_history[layer][entry["start"]:entry["end"]+1] + # add `layer` entry to each + for _entry in entries: + _entry["layer"] = layer + elif layer == -1: + entries = self.scene.archived_history[entry["start"]:entry["end"]+1] + # set layer to -1 for all entries + for _entry in entries: + _entry["layer"] = -1 + elif layer == -2: + # TODO: expand into message history here? + entries = [entry] else: - extra_context = None - - summarized = await self.summarize( - "\n".join(map(str, entries_to_summarize)), extra_context=extra_context - ) - - # push summarized entry to target - - ts = entries_to_summarize[-1].ts - - target.append( - data_objects.ArchiveEntry( - summarized, start, len(entries_to_summarize) - 1, ts=ts - ) + log.error("dig_layered_history", error="No layer information", entry=entry) + return "" + + + if not entries: + log.error("dig_layered_history", skip="No entries to dig through") + return "" + + response = await Prompt.request( + "summarizer.dig-layered-history", + self.client, + "analyze_freeform_long", + vars={ + "scene": self.scene, + "max_tokens": self.client.max_token_length, + "query": query, + "layer": layer, + "entries": entries, + "context": context, + "is_initial": is_initial, + "dig_question": dig_question, + "character": character, + }, + dedupe_enabled=False, ) + + # replace ```python with ``` to avoid markdown issues + response = response.replace("```python", "```") + + # find the first ``` + code_block_start = response.find("```") + if code_block_start == -1: + log.error("dig_layered_history", error="No code block found", response=response) + return "" + + log.debug("dig_layered_history", code_block_start=code_block_start) + + code_block = response[code_block_start:].split("```",2)[1].strip() + + log.debug("dig_layered_history", code_block=code_block) + + # replace potential linebreaks after ( and before ) + + code_block = re.sub(r"\(\n", "(", code_block, flags=re.MULTILINE) + code_block = re.sub(r"\n\)", ")", code_block, flags=re.MULTILINE) + + function_calls = code_block.split("\n")[:3] # max 3 function calls + + log.debug("dig_layered_history", function_calls=function_calls) + + answers = [] + + for function_call in function_calls: + + answer = None + + log.debug("dig_layered_history", function_name=function_call) + + function_name = function_call.split("(")[0].strip() + + if function_name == "dig": + # dig further + # dig arguments are provided as chapter number and question + # dig(1, "What is the significance of the red door?") + + # use regex to parse + + match = re.match(r"dig\((\d+),\s*[\"'](.+)[\"']\s?\)", function_call) + + if not match: + log.error("dig_layered_history", error="Invalid argument for `dig`", arg=function_call) + continue + + + dig_into_chapter = int(match.group(1)) + dig_question = match.group(2) + + log.debug("dig_layered_history", into_item=dig_into_chapter, question=dig_question) + + # if into item is larger, just max it out + if dig_into_chapter > len(entries): + dig_into_chapter = len(entries) + + try: + entry = entries[dig_into_chapter-1] + except IndexError: + log.error("dig_layered_history", error="Index out of range", into_item=dig_into_chapter, layer=layer) + continue + except Exception as e: + log.error("dig_layered_history", error=str(e), into_item=dig_into_chapter, layer=layer) + continue + + # if entry is a layer -1 entry there is nothing to dig. + if entry["layer"] == -1: + log.debug("dig_layered_history", skip="Digging into layer -1 entry") + continue + + log.debug("dig_layered_history", into_item=dig_into_chapter, layer=layer-1, start=entry["start"], end=entry["end"]) + answer = await self.dig_layered_history( + query, + entry, + context=(context or []) + (entries[:dig_into_chapter-1] if dig_into_chapter > 1 else []), + dig_question=dig_question, + character=character, + ) + if answer: + answers.append(f"{dig_question}\n{answer}") + break + elif function_name == "abort": + continue + elif function_name == "answer": + try: + answer = function_call.split("(")[1].split(")")[0].strip() + except IndexError: + log.error("dig_layered_history", error="Invalid argument for `answer`", arg=function_call) + continue + answers.append(answer) + break + else: + # Treat contents of code block as a single answer + answers.append(code_block) + break + + log.debug("dig_layered_history", answers=answers) + + return "\n".join(answers) if answers else "" + + def inject_prompt_paramters( + self, prompt_param: dict, kind: str, agent_function_name: str + ): + if agent_function_name == "dig_layered_history": + if prompt_param.get("extra_stopping_strings") is None: + prompt_param["extra_stopping_strings"] = [] + prompt_param["extra_stopping_strings"] += ["DONE"] diff --git a/src/talemate/agents/visual/style.py b/src/talemate/agents/visual/style.py index d2540466..0a26b315 100644 --- a/src/talemate/agents/visual/style.py +++ b/src/talemate/agents/visual/style.py @@ -83,24 +83,24 @@ class Style(pydantic.BaseModel): # Almost taken straight from some of the fooocus style presets, credit goes to the original author STYLE_MAP["digital_art"] = Style( - keywords="digital artwork, masterpiece, best quality, high detail".split(", "), + keywords="in the style of a digital artwork, masterpiece, best quality, high detail".split(", "), negative_keywords="text, watermark, low quality, blurry, photo".split(", "), ) STYLE_MAP["concept_art"] = Style( - keywords="concept art, conceptual sketch, masterpiece, best quality, high detail".split( + keywords="in the style of concept art, conceptual sketch, masterpiece, best quality, high detail".split( ", " ), negative_keywords="text, watermark, low quality, blurry, photo".split(", "), ) STYLE_MAP["ink_illustration"] = Style( - keywords="ink illustration, painting, masterpiece, best quality".split(", "), + keywords="in the style of ink illustration, painting, masterpiece, best quality".split(", "), negative_keywords="text, watermark, low quality, blurry, photo".split(", "), ) STYLE_MAP["anime"] = Style( - keywords="anime, masterpiece, best quality, illustration".split(", "), + keywords="in the style of anime, masterpiece, best quality, illustration".split(", "), negative_keywords="text, watermark, low quality, blurry, photo, 3d".split(", "), ) diff --git a/src/talemate/agents/world_state.py b/src/talemate/agents/world_state.py index 1d690342..ea9b75d9 100644 --- a/src/talemate/agents/world_state.py +++ b/src/talemate/agents/world_state.py @@ -16,7 +16,6 @@ from talemate.events import GameLoopEvent from talemate.instance import get_agent from talemate.prompts import Prompt from talemate.scene_message import ( - DirectorMessage, ReinforcementMessage, TimePassageMessage, ) @@ -291,16 +290,18 @@ class WorldStateAgent(Agent): self, text: str, goal: str, + include_character_context: bool = False, ): response = await Prompt.request( "world_state.analyze-text-and-extract-context", self.client, - "analyze_freeform", + "analyze_freeform_long", vars={ "scene": self.scene, "max_tokens": self.client.max_token_length, "text": text, "goal": goal, + "include_character_context": include_character_context, }, ) @@ -315,6 +316,7 @@ class WorldStateAgent(Agent): self, text: str, goal: str, + include_character_context: bool = False, ) -> list[str]: response = await Prompt.request( "world_state.analyze-text-and-generate-rag-queries", @@ -325,6 +327,7 @@ class WorldStateAgent(Agent): "max_tokens": self.client.max_token_length, "text": text, "goal": goal, + "include_character_context": include_character_context, }, ) @@ -506,7 +509,7 @@ class WorldStateAgent(Agent): return response @set_processing - async def update_reinforcements(self, force: bool = False): + async def update_reinforcements(self, force: bool = False, reset: bool = False): """ Queries due worldstate re-inforcements """ @@ -514,7 +517,7 @@ class WorldStateAgent(Agent): for reinforcement in self.scene.world_state.reinforce: if reinforcement.due <= 0 or force: await self.update_reinforcement( - reinforcement.question, reinforcement.character + reinforcement.question, reinforcement.character, reset=reset ) else: reinforcement.due -= 1 @@ -692,7 +695,7 @@ class WorldStateAgent(Agent): summary = await summarizer.summarize( text, - extra_context=extra_context, + extra_context=[extra_context], method="short", extra_instructions="Pay particularly close attention to decisions, agreements or promises made.", ) diff --git a/src/talemate/client/openai.py b/src/talemate/client/openai.py index 4471e0fa..fa8537a3 100644 --- a/src/talemate/client/openai.py +++ b/src/talemate/client/openai.py @@ -29,6 +29,9 @@ SUPPORTED_MODELS = [ "gpt-4-turbo-2024-04-09", "gpt-4-turbo", "gpt-4o-2024-05-13", + "gpt-4o-2024-08-06", + "gpt-4o-2024-11-20", + "gpt-4o-latest", "gpt-4o", "gpt-4o-mini", "o1-preview", @@ -38,6 +41,9 @@ SUPPORTED_MODELS = [ # any model starting with gpt-4- is assumed to support 'json_object' # for others we need to explicitly state the model name JSON_OBJECT_RESPONSE_MODELS = [ + "gpt-4o-2024-08-06", + "gpt-4o-2024-11-20", + "gpt-4o-latest", "gpt-4o", "gpt-4o-mini", "gpt-3.5-turbo-0125", @@ -209,6 +215,10 @@ class OpenAIClient(ClientBase): self.max_token_length = min(max_token_length or 8192, 8192) elif model == "gpt-3.5-turbo-16k": self.max_token_length = min(max_token_length or 16384, 16384) + elif model.startswith("gpt-4o") and model != "gpt-4o-2024-05-13": + self.max_token_length = min(max_token_length or 16384, 16384) + elif model == "gpt-4o-2024-05-13": + self.max_token_length = min(max_token_length or 4096, 4096) elif model == "gpt-4-1106-preview": self.max_token_length = min(max_token_length or 128000, 128000) else: diff --git a/src/talemate/client/presets.py b/src/talemate/client/presets.py index 286901c6..0741fe35 100644 --- a/src/talemate/client/presets.py +++ b/src/talemate/client/presets.py @@ -83,6 +83,8 @@ PRESET_SUBSTRING_MAPPINGS = { "creative": "creative", "analytical": "analytical", "analyze": "analytical", + "direction": "scene_direction", + "summarize": "summarization", } PRESET_MAPPING = { @@ -93,6 +95,8 @@ PRESET_MAPPING = { "analyze_long": "analytical", "analyze_freeform": "analytical", "analyze_freeform_short": "analytical", + "analyze_freeform_medium": "analytical", + "analyze_freeform_medium_short": "analytical", "narrate": "creative", "create": "creative_instruction", "create_short": "creative_instruction", @@ -132,7 +136,7 @@ def preset_for_kind(kind: str, client: "ClientBase") -> dict: TOKEN_MAPPING = { "conversation": 75, "conversation_select_talking_actor": 30, - "summarize": 500, + "summarize": 512, "analyze": 500, "analyze_long": 2048, "analyze_freeform": 500, @@ -154,7 +158,9 @@ TOKEN_MAPPING = { TOKEN_SUBSTRING_MAPPINGS = { "extensive": 2048, "long": 1024, + "medium3": 750, "medium2": 512, + "list": 300, "medium": 192, "short2": 128, "short": 75, diff --git a/src/talemate/commands/__init__.py b/src/talemate/commands/__init__.py index 00416460..e992f653 100644 --- a/src/talemate/commands/__init__.py +++ b/src/talemate/commands/__init__.py @@ -3,7 +3,7 @@ from .cmd_autocomplete import * from .cmd_characters import * from .cmd_debug_tools import * from .cmd_dialogue import * -from .cmd_director import CmdDirectorDirect, CmdDirectorDirectWithOverride +from .cmd_director import * from .cmd_exit import CmdExit from .cmd_help import CmdHelp from .cmd_info import CmdInfo diff --git a/src/talemate/commands/cmd_debug_tools.py b/src/talemate/commands/cmd_debug_tools.py index 6722667d..717cf2fa 100644 --- a/src/talemate/commands/cmd_debug_tools.py +++ b/src/talemate/commands/cmd_debug_tools.py @@ -7,12 +7,17 @@ import structlog from talemate.commands.base import TalemateCommand from talemate.commands.manager import register from talemate.prompts.base import set_default_sectioning_handler +from talemate.instance import get_agent __all__ = [ "CmdDebugOn", "CmdDebugOff", "CmdPromptChangeSectioning", "CmdRunAutomatic", + "CmdSummarizerGenerateTimeline", + "CmdSummarizerUpdatedLayeredHistory", + "CmdSummarizerResetLayeredHistory", + "CmdSummarizerDigLayeredHistory", ] log = structlog.get_logger("talemate.commands.cmd_debug_tools") @@ -178,3 +183,68 @@ class CmdDumpSceneSerialization(TalemateCommand): async def run(self): log.debug("dump_scene_serialization", serialization=self.scene.json) + +@register +class CmdSummarizerGenerateTimeline(TalemateCommand): + """ + Command class for the 'summarizer_generate_timeline' command + """ + + name = "summarizer_generate_timeline" + description = "Generate a timeline from the scene" + aliases = ["generate_timeline"] + + async def run(self): + summarizer = get_agent("summarizer") + + await summarizer.generate_timeline() + +@register +class CmdSummarizerUpdatedLayeredHistory(TalemateCommand): + """ + Command class for the 'summarizer_updated_layered_history' command + """ + + name = "summarizer_updated_layered_history" + description = "Update the stepped archive for the summarizer" + aliases = ["update_layered_history"] + + async def run(self): + summarizer = get_agent("summarizer") + + await summarizer.summarize_to_layered_history() + +@register +class CmdSummarizerResetLayeredHistory(TalemateCommand): + """ + Command class for the 'summarizer_reset_layered_history' command + """ + + name = "summarizer_reset_layered_history" + description = "Reset the stepped archive for the summarizer" + aliases = ["reset_layered_history"] + + async def run(self): + summarizer = get_agent("summarizer") + self.scene.layered_history = [] + await summarizer.summarize_to_layered_history() + +@register +class CmdSummarizerDigLayeredHistory(TalemateCommand): + """ + Command class for the 'summarizer_dig_layered_history' command + """ + + name = "summarizer_dig_layered_history" + description = "Dig into the layered history" + aliases = ["dig_layered_history"] + + async def run(self): + if not self.args: + self.emit("system", "You must specify a query") + + query = self.args[0] + + summarizer = get_agent("summarizer") + + await summarizer.dig_layered_history(query) \ No newline at end of file diff --git a/src/talemate/commands/cmd_director.py b/src/talemate/commands/cmd_director.py index dbdc1a66..0a65f4c3 100644 --- a/src/talemate/commands/cmd_director.py +++ b/src/talemate/commands/cmd_director.py @@ -4,6 +4,11 @@ from talemate.emit import emit, wait_for_input from talemate.scene_message import DirectorMessage from talemate.util import colored_text, wrap_text +__all__ = [ + "CmdDirectorDirect", + "CmdDirectorDirectWithOverride", + "CmdDirectorGenerateChoices", +] @register class CmdDirectorDirect(TalemateCommand): @@ -64,3 +69,22 @@ class CmdDirectorDirectWithOverride(CmdDirectorDirect): async def run(self): await super().run(ask_for_input=True) + +@register +class CmdDirectorGenerateChoices(TalemateCommand): + """ + Command class for the 'director' command + """ + + name = "director_generate_choices" + description = "Calls a director to generate choices for a character" + aliases = ["generate_choices"] + + async def run(self, ask_for_input=True): + director = self.scene.get_helper("director") + + if not director: + self.system_message("No director found") + return True + + choices = await director.agent.generate_choices() \ No newline at end of file diff --git a/src/talemate/commands/cmd_rebuild_archive.py b/src/talemate/commands/cmd_rebuild_archive.py index 48889501..0bf04833 100644 --- a/src/talemate/commands/cmd_rebuild_archive.py +++ b/src/talemate/commands/cmd_rebuild_archive.py @@ -17,6 +17,7 @@ class CmdRebuildArchive(TalemateCommand): async def run(self): summarizer = self.scene.get_helper("summarizer") + memory = self.scene.get_helper("memory") if not summarizer: self.system_message("No summarizer found") @@ -27,11 +28,9 @@ class CmdRebuildArchive(TalemateCommand): ah for ah in self.scene.archived_history if ah.get("end") is None ] - self.scene.ts = ( - self.scene.archived_history[-1].ts - if self.scene.archived_history - else "PT0S" - ) + self.scene.ts = "PT0S" + + memory.delete({"typ": "history"}) entries = 0 total_entries = summarizer.agent.estimated_entry_count @@ -42,7 +41,10 @@ class CmdRebuildArchive(TalemateCommand): status="busy", ) more = await summarizer.agent.build_archive(self.scene) + self.scene.sync_time() + entries += 1 + if not more: break diff --git a/src/talemate/config.py b/src/talemate/config.py index 772059c2..6ab5df31 100644 --- a/src/talemate/config.py +++ b/src/talemate/config.py @@ -434,6 +434,33 @@ AnnotatedClient = Annotated[ ] +class HistoryMessageStyle(BaseModel): + italic: bool = False + bold: bool = False + + # Leave None for default color + color: str | None = None + + +class HidableHistoryMessageStyle(HistoryMessageStyle): + # certain messages can be hidden, but all messages are shown by default + show: bool = True + + +class SceneAppearance(BaseModel): + + narrator_messages: HistoryMessageStyle = HistoryMessageStyle(italic=True) + character_messages: HistoryMessageStyle = HistoryMessageStyle() + director_messages: HidableHistoryMessageStyle = HidableHistoryMessageStyle() + time_messages: HistoryMessageStyle = HistoryMessageStyle() + context_investigation_messages: HidableHistoryMessageStyle = HidableHistoryMessageStyle() + +class Appearance(BaseModel): + + scene: SceneAppearance = SceneAppearance() + + + class Config(BaseModel): clients: Dict[str, AnnotatedClient] = {} @@ -466,6 +493,8 @@ class Config(BaseModel): recent_scenes: RecentScenes = RecentScenes() presets: Presets = Presets() + + appearance: Appearance = Appearance() class Config: extra = "ignore" diff --git a/src/talemate/context.py b/src/talemate/context.py index 21679b8e..8e2fe330 100644 --- a/src/talemate/context.py +++ b/src/talemate/context.py @@ -3,7 +3,10 @@ from contextvars import ContextVar import pydantic import structlog +from talemate.exceptions import SceneInactiveError + __all__ = [ + "assert_active_scene", "scene_is_loading", "rerun_context", "active_scene", @@ -19,6 +22,8 @@ log = structlog.get_logger(__name__) class InteractionState(pydantic.BaseModel): act_as: str | None = None + from_choice: str | None = None + input: str | None = None scene_is_loading = ContextVar("scene_is_loading", default=None) @@ -79,3 +84,11 @@ class Interaction: def __exit__(self, *args): interaction.reset(self.token) + + +def assert_active_scene(scene: object): + if not active_scene.get(): + raise SceneInactiveError("Scene is not active") + + if active_scene.get() != scene: + raise SceneInactiveError("Scene has changed") \ No newline at end of file diff --git a/src/talemate/emit/base.py b/src/talemate/emit/base.py index 45640c83..eb164284 100644 --- a/src/talemate/emit/base.py +++ b/src/talemate/emit/base.py @@ -123,7 +123,17 @@ async def wait_for_input( while input_received["message"] is None: await asyncio.sleep(0.1) - + + interaction_state = interaction.get() + + if interaction_state.input: + input_received["message"] = interaction_state.input + input_received["interaction"] = interaction_state + input_received["from_choice"] = interaction_state.from_choice + interaction_state.input = None + interaction_state.from_choice = None + break + handlers["receive_input"].disconnect(input_receiver) if input_received["message"] == "!abort": diff --git a/src/talemate/emit/signals.py b/src/talemate/emit/signals.py index b42f4834..2db8d49e 100644 --- a/src/talemate/emit/signals.py +++ b/src/talemate/emit/signals.py @@ -8,6 +8,8 @@ DirectorMessage = signal("director") TimePassageMessage = signal("time") StatusMessage = signal("status") ReinforcementMessage = signal("reinforcement") +PlayerChoiceMessage = signal("player_choice") +ContextInvestigationMessage = signal("context_investigation") ClearScreen = signal("clear_screen") @@ -49,6 +51,7 @@ handlers = { "player": PlayerMessage, "director": DirectorMessage, "time": TimePassageMessage, + "context_investigation": ContextInvestigationMessage, "reinforcement": ReinforcementMessage, "request_input": RequestInput, "receive_input": ReceiveInput, @@ -73,4 +76,5 @@ handlers = { "autocomplete_suggestion": AutocompleteSuggestion, "spice_applied": SpiceApplied, "memory_request": MemoryRequest, + "player_choice": PlayerChoiceMessage, } diff --git a/src/talemate/events.py b/src/talemate/events.py index 16b323d8..9aa7d73a 100644 --- a/src/talemate/events.py +++ b/src/talemate/events.py @@ -65,3 +65,8 @@ class GameLoopActorIterEvent(GameLoopBase): @dataclass class GameLoopNewMessageEvent(GameLoopBase): message: SceneMessage + + +@dataclass +class PlayerTurnStartEvent(Event): + pass \ No newline at end of file diff --git a/src/talemate/game/engine/api/scene.py b/src/talemate/game/engine/api/scene.py index 4fe47faa..e54cfbed 100644 --- a/src/talemate/game/engine/api/scene.py +++ b/src/talemate/game/engine/api/scene.py @@ -93,7 +93,7 @@ def create(scene: "Scene") -> "ScopedAPI": validated = Arguments(budget=budget, keep_director=keep_director) - return scene.context_history(validated.budget, validated.keep_director) + return scene.context_history(validated.budget, keep_director=validated.keep_director) def get_player_character(self) -> schema.CharacterSchema | None: """ diff --git a/src/talemate/history.py b/src/talemate/history.py index fb73466d..061c1403 100644 --- a/src/talemate/history.py +++ b/src/talemate/history.py @@ -14,6 +14,7 @@ from talemate.instance import get_agent from talemate.scene_message import SceneMessage from talemate.util import iso8601_diff_to_human from talemate.world_state.templates import GenerationOptions +from talemate.exceptions import GenerationCancelled if TYPE_CHECKING: from talemate.tale_mate import Scene @@ -78,7 +79,11 @@ def history_with_relative_time(history: list[str], scene_time: str) -> list[dict { "text": entry["text"], "ts": entry["ts"], + "ts_start": entry.get("ts_start", None), + "ts_end": entry.get("ts_end", None), "time": iso8601_diff_to_human(scene_time, entry["ts"]), + "time_start": iso8601_diff_to_human(scene_time, entry["ts_start"] if entry.get("ts_start") else None), + "time_end": iso8601_diff_to_human(scene_time, entry["ts_end"] if entry.get("ts_end") else None), } for entry in history ] @@ -97,10 +102,12 @@ async def rebuild_history( scene.archived_history = [ ah for ah in scene.archived_history if ah.get("end") is None ] + + scene.layered_history = [] scene.saved = False - scene.ts = scene.archived_history[-1].ts if scene.archived_history else "PT0S" + scene.sync_time() summarizer = get_agent("summarizer") @@ -109,6 +116,8 @@ async def rebuild_history( try: while True: + + await asyncio.sleep(0.1) if not scene.active: # scene is no longer active @@ -120,20 +129,25 @@ async def rebuild_history( "status", message=f"Rebuilding historical archive... {entries}/~{total_entries}", status="busy", + data={"cancellable": True}, ) more = await summarizer.build_archive( scene, generation_options=generation_options ) - scene.ts = scene.archived_history[-1]["ts"] + scene.sync_time() if callback: - callback() + await callback() entries += 1 if not more: break + except GenerationCancelled: + log.info("Generation cancelled, stopping rebuild of historical archive") + emit("status", message="Rebuilding of archive cancelled", status="info") + return except Exception as e: log.exception("Error rebuilding historical archive", error=e) emit("status", message="Error rebuilding historical archive", status="error") @@ -141,4 +155,9 @@ async def rebuild_history( scene.sync_time() await scene.commit_to_memory() + + if summarizer.layered_history_enabled: + emit("status", message="Rebuilding layered history...", status="busy") + await summarizer.summarize_to_layered_history() + emit("status", message="Historical archive rebuilt", status="success") diff --git a/src/talemate/load.py b/src/talemate/load.py index fac0a02f..e0f379c1 100644 --- a/src/talemate/load.py +++ b/src/talemate/load.py @@ -228,6 +228,7 @@ async def load_scene_from_data( scene.memory_session_id = scene_data.get("memory_session_id", None) scene.history = _load_history(scene_data["history"]) scene.archived_history = scene_data["archived_history"] + scene.layered_history = scene_data.get("layered_history", []) scene.world_state = WorldState(**scene_data.get("world_state", {})) scene.game_state = GameState(**scene_data.get("game_state", {})) scene.context = scene_data.get("context", "") @@ -237,7 +238,7 @@ async def load_scene_from_data( scene.assets.cover_image = scene_data.get("assets", {}).get("cover_image", None) scene.assets.load_assets(scene_data.get("assets", {}).get("assets", {})) - scene.sync_time() + scene.fix_time() log.debug("scene time", ts=scene.ts) loading_status("Initializing long-term memory...") diff --git a/src/talemate/prompts/base.py b/src/talemate/prompts/base.py index 48d85a16..24ddd9d0 100644 --- a/src/talemate/prompts/base.py +++ b/src/talemate/prompts/base.py @@ -23,7 +23,7 @@ import structlog import talemate.instance as instance import talemate.thematic_generators as thematic_generators from talemate.config import load_config -from talemate.context import rerun_context +from talemate.context import rerun_context, active_scene from talemate.emit import emit from talemate.exceptions import LLMAccuracyError, RenderPromptError from talemate.util import ( @@ -32,6 +32,7 @@ from talemate.util import ( extract_json, fix_faulty_json, remove_extra_linebreaks, + iso8601_diff_to_human, ) from talemate.util.prompt import condensed @@ -366,8 +367,10 @@ class Prompt: env.globals["instruct_text"] = self.instruct_text env.globals["agent_action"] = self.agent_action env.globals["retrieve_memories"] = self.retrieve_memories + env.globals["time_diff"] = self.time_diff env.globals["uuidgen"] = lambda: str(uuid.uuid4()) env.globals["to_int"] = lambda x: int(x) + env.globals["to_str"] = lambda x: str(x) env.globals["config"] = self.config env.globals["len"] = lambda x: len(x) env.globals["max"] = lambda x, y: max(x, y) @@ -386,6 +389,7 @@ class Prompt: env.globals["llm_can_be_coerced"] = lambda: ( self.client.can_be_coerced if self.client else False ) + env.globals["text_to_chunks"] = self.text_to_chunks env.globals["emit_narrator"] = lambda message: emit("system", message=message) env.filters["condensed"] = condensed ctx.update(self.vars) @@ -400,7 +404,7 @@ class Prompt: # Render the template with the prompt variables self.eval_context = {} - self.dedupe_enabled = True + #self.dedupe_enabled = True try: self.prompt = template.render(ctx) if not sectioning_handler: @@ -599,6 +603,44 @@ class Prompt: else: emit("status", status=status, message=message) + def time_diff(self, iso8601_time: str): + scene = active_scene.get() + if not iso8601_time: + return "" + return iso8601_diff_to_human(iso8601_time, scene.ts) + + def text_to_chunks(self, text:str, chunk_size:int=512) -> list[str]: + """ + Takes a text string and splits it into chunks based length of the text. + + Arguments: + + - text: The text to split into chunks. + - chunk_size: number of characters in each chunk. + """ + + chunks = [] + + for i, line in enumerate(text.split("\n")): + + # dont push empty lines into empty chunks + if not line.strip() and (not chunks or not chunks[-1]): + continue + + if not chunks: + chunks.append([line]) + continue + + if len("\n".join(chunks[-1])) + len(line) < chunk_size: + chunks[-1].append(line) + else: + chunks.append([line]) + + + return ["\n\n".join(chunk) for chunk in chunks] + + + def set_prepared_response(self, response: str, prepend: str = ""): """ Set the prepared response. diff --git a/src/talemate/prompts/templates/conversation/dialogue-chat.jinja2 b/src/talemate/prompts/templates/conversation/dialogue-chat.jinja2 index c117ccf3..da0345a8 100644 --- a/src/talemate/prompts/templates/conversation/dialogue-chat.jinja2 +++ b/src/talemate/prompts/templates/conversation/dialogue-chat.jinja2 @@ -45,7 +45,7 @@ You may chose to have {{ talking_character.name}} respond to the conversation, o Always contain actions in asterisks. For example, *{{ talking_character.name}} smiles*. Always contain dialogue in quotation marks. For example, {{ talking_character.name}}: "Hello!" -{{ extra_instructions }} +{{ task_instructions }} {% if scene.count_messages() >= 5 and not talking_character.dialogue_instructions %}Use an informal and colloquial register with a conversational tone. Overall, {{ talking_character.name }}'s dialog is informal, conversational, natural, and spontaneous, with a sense of immediacy. {% endif -%} @@ -90,12 +90,8 @@ Always contain dialogue in quotation marks. For example, {{ talking_character.na {% endblock -%} {% block scene_history -%} {% set scene_context = scene.context_history(budget=max_tokens-200-count_tokens(self.rendered_context()), min_dialogue=15, sections=False, keep_director=talking_character.name) -%} -{%- if talking_character.dialogue_instructions and scene.count_messages() > 5 -%} - {%- if scene.count_messages() < 15 -%} - {%- set _ = scene_context.insert(-3, "(Internal acting instructions for "+talking_character.name+": "+talking_character.dialogue_instructions+")") -%} - {%- else -%} - {%- set _ = scene_context.insert(-10, "(Internal acting instructions for "+talking_character.name+": "+talking_character.dialogue_instructions+")") -%} - {%- endif -%} +{%- if actor_instructions_offset > 0 and talking_character.dialogue_instructions and scene.count_messages() > actor_instructions_offset -%} + {%- set _ = scene_context.insert(-actor_instructions_offset, "(Internal acting instructions for "+talking_character.name+": "+talking_character.dialogue_instructions+" "+actor_instructions+")") -%} {% endif -%} {% for scene_line in scene_context -%} {{ scene_line }} @@ -103,8 +99,11 @@ Always contain dialogue in quotation marks. For example, {{ talking_character.na {% endfor %} {% endblock -%} <|CLOSE_SECTION|> -{% if scene.count_messages() < 5 %} -{% if not talking_character.dialogue_instructions %}(Use an informal and colloquial register with a conversational tone. Overall, {{ talking_character.name }}'s dialog is informal, conversational, natural, and spontaneous, with a sense of immediacy.){% else %}(Internal acting instructions for {{ talking_character.name }}: {{ talking_character.dialogue_instructions }}){% endif -%} +{% if scene.count_messages() < actor_instructions_offset or actor_instructions_offset == 0 %} +{% if not talking_character.dialogue_instructions %}({% if actor_instructions %} {{ actor_instructions }}{% else %}Use an informal and colloquial register with a conversational tone. Overall, {{ talking_character.name }}'s dialog is informal, conversational, natural, and spontaneous, with a sense of immediacy.{% endif -%}){% else %}(Internal acting instructions for {{ talking_character.name }}: {{ talking_character.dialogue_instructions }}{% if actor_instructions %} {{ actor_instructions }}{% endif %}){% endif -%} +{% endif -%} +{% if layered_history_investigation %} +(Internal notes - historic context: {{ layered_history_investigation }}) {% endif -%} {% if rerun_context and rerun_context.direction -%} {% if rerun_context.method == 'replace' -%} @@ -115,4 +114,9 @@ Always contain dialogue in quotation marks. For example, {{ talking_character.na # Requested changes: {{ rerun_context.direction }} {% endif -%} {% endif -%} +{% if direct_instruction -%} +{{ talking_character.name }}'s next action: {{ direct_instruction }} + +You must not add additional actions. +{% endif -%} {{ bot_token }}{{ talking_character.name }}:{{ partial_message }} \ No newline at end of file diff --git a/src/talemate/prompts/templates/conversation/dialogue-movie_script.jinja2 b/src/talemate/prompts/templates/conversation/dialogue-movie_script.jinja2 index 771619d0..e1537299 100644 --- a/src/talemate/prompts/templates/conversation/dialogue-movie_script.jinja2 +++ b/src/talemate/prompts/templates/conversation/dialogue-movie_script.jinja2 @@ -52,7 +52,7 @@ Emotions and actions should be written in italics. For example: *smiles* "I'm so glad you're here." END-OF-LINE -{{ extra_instructions }} +{{ task_instructions }} STAY IN THE SCENE. YOU MUST NOT BREAK CHARACTER. YOU MUST NOT BREAK THE FOURTH WALL. @@ -63,6 +63,11 @@ YOU MUST ONLY WRITE NEW DIALOGUE FOR {{ talking_character.name.upper() }}. {% if scene.count_messages() >= 5 and not talking_character.dialogue_instructions %}Use an informal and colloquial register with a conversational tone. Overall, {{ talking_character.name }}'s dialog is informal, conversational, natural, and spontaneous, with a sense of immediacy. {% endif -%} <|CLOSE_SECTION|> +<|SECTION:How to use internal notes|> +Internal notes may be given to you to help you with consistency when writing. + +They may be instructions on how the character should act or simply add some context that may inform the character's next dialogue. +<|CLOSE_SECTION|> {% set general_reinforcements = scene.world_state.filter_reinforcements(insert=['all-context']) %} {% set char_reinforcements = scene.world_state.filter_reinforcements(character=talking_character.name, insert=["conversation-context"]) %} @@ -104,21 +109,17 @@ YOU MUST ONLY WRITE NEW DIALOGUE FOR {{ talking_character.name.upper() }}. {% endblock -%} {% block scene_history -%} {% set scene_context = scene.context_history(budget=max_tokens-200-count_tokens(self.rendered_context()), min_dialogue=15, sections=False, keep_director=talking_character.name) -%} -{%- if talking_character.dialogue_instructions and scene.count_messages() > 5 -%} - {%- if scene.count_messages() < 15 -%} - {%- set _ = scene_context.insert(-3, "(Internal acting instructions for "+talking_character.name+": "+talking_character.dialogue_instructions+")") -%} - {%- else -%} - {%- set _ = scene_context.insert(-10, "(Internal acting instructions for "+talking_character.name+": "+talking_character.dialogue_instructions+")") -%} - {%- endif -%} +{%- if actor_instructions_offset > 0 and talking_character.dialogue_instructions and scene.count_messages() > actor_instructions_offset -%} + {%- set _ = scene_context.insert(-actor_instructions_offset, "(Internal acting instructions for "+talking_character.name+": "+talking_character.dialogue_instructions+" "+actor_instructions+")") -%} {% endif -%} {% for scene_line in scene_context -%} -{{ scene_line }}END-OF-LINE +{{ scene_line }} {% endfor %} {% endblock -%} <|CLOSE_SECTION|> -{% if scene.count_messages() < 5 %} -{% if not talking_character.dialogue_instructions %}(Use an informal and colloquial register with a conversational tone. Overall, {{ talking_character.name }}'s dialog is informal, conversational, natural, and spontaneous, with a sense of immediacy.){% else %}(Internal acting instructions for {{ talking_character.name }}: {{ talking_character.dialogue_instructions }}){% endif -%} +{% if scene.count_messages() < actor_instructions_offset or actor_instructions_offset == 0 %} +{% if not talking_character.dialogue_instructions %}({% if actor_instructions %} {{ actor_instructions }}{% else %}Use an informal and colloquial register with a conversational tone. Overall, {{ talking_character.name }}'s dialog is informal, conversational, natural, and spontaneous, with a sense of immediacy.{% endif -%}){% else %}(Internal acting instructions for {{ talking_character.name }}: {{ talking_character.dialogue_instructions }}{% if actor_instructions %} {{ actor_instructions }}{% endif %}){% endif -%} {% endif -%} {% if rerun_context and rerun_context.direction -%} {% if rerun_context.method == 'replace' -%} @@ -129,6 +130,11 @@ YOU MUST ONLY WRITE NEW DIALOGUE FOR {{ talking_character.name.upper() }}. # Requested changes: {{ rerun_context.direction }} {% endif -%} {% endif -%} +{% if direct_instruction -%} +{{ talking_character.name }}'s next action: {{ direct_instruction }} + +You must not add additional actions. You must not add additional actions. Dialogue generated should be natural sounding and realistic. Less is more. +{% endif -%} {{ bot_token }}{{ talking_character.name.upper() }} {% if partial_message -%} {{ partial_message.strip() }} diff --git a/src/talemate/prompts/templates/conversation/select-talking-actor.jinja2 b/src/talemate/prompts/templates/conversation/select-talking-actor.jinja2 index 86e7211e..4f19e68f 100644 --- a/src/talemate/prompts/templates/conversation/select-talking-actor.jinja2 +++ b/src/talemate/prompts/templates/conversation/select-talking-actor.jinja2 @@ -16,10 +16,10 @@ Only respond with the character name. For example, if you want to pick the chara {% for scene_context in scene.context_history(budget=250, sections=False, add_archieved_history=False) -%} {{ scene_context }} {% endfor %} -{% if scene.history[-1].type == "narrator" %} +{% if llm_can_be_coerced() %}{% if scene.history[-1].type == "narrator" %} {{ bot_token }}The next character to speak is {% elif scene.prev_actor -%} {{ bot_token }}The next character to respond to '{{ scene.history[-1].message }}' is {% else -%} {{ bot_token }}The next character to respond is -{% endif %} \ No newline at end of file +{% endif %}{% endif %} \ No newline at end of file diff --git a/src/talemate/prompts/templates/creator/autocomplete-dialogue.jinja2 b/src/talemate/prompts/templates/creator/autocomplete-dialogue.jinja2 index c750de83..e31a5a98 100644 --- a/src/talemate/prompts/templates/creator/autocomplete-dialogue.jinja2 +++ b/src/talemate/prompts/templates/creator/autocomplete-dialogue.jinja2 @@ -6,7 +6,7 @@ <|CLOSE_SECTION|> {% endblock -%} <|SECTION:SCENE|> -{% for scene_context in scene.context_history(budget=min(2048, max_tokens-300-count_tokens(self.rendered_context())), min_dialogue=20, sections=False) -%} +{% for scene_context in scene.context_history(budget=max_tokens-300-count_tokens(self.rendered_context()), min_dialogue=20, sections=False) -%} {{ scene_context }} {% endfor %} <|CLOSE_SECTION|> diff --git a/src/talemate/prompts/templates/director/character-context.jinja2 b/src/talemate/prompts/templates/director/character-context.jinja2 new file mode 100644 index 00000000..42521fe8 --- /dev/null +++ b/src/talemate/prompts/templates/director/character-context.jinja2 @@ -0,0 +1,12 @@ +<|SECTION:CHARACTERS|> +{% for character in scene.characters %} +### {{ character.name }} +{% if max_tokens > 6000 -%} +{{ character.sheet }} +{% else -%} +{{ character.filtered_sheet(['age', 'gender']) }} +{{ query_memory("what is "+character.name+"'s personality?", as_question_answer=False) }} +{% endif %} +{{ character.description }} +{% endfor %} +<|CLOSE_SECTION|> \ No newline at end of file diff --git a/src/talemate/prompts/templates/director/generate-choices.jinja2 b/src/talemate/prompts/templates/director/generate-choices.jinja2 new file mode 100644 index 00000000..faf078c0 --- /dev/null +++ b/src/talemate/prompts/templates/director/generate-choices.jinja2 @@ -0,0 +1,50 @@ +{% block rendered_context -%} +{% include "character-context.jinja2" -%} +{% endblock %} +<|SECTION:SCENE|> +{% block scene_history -%} +{% set scene_context = scene.context_history(budget=max_tokens-300-count_tokens(self.rendered_context()), min_dialogue=15, sections=False, keep_director=False) -%} +{% for scene_line in scene_context -%} +{{ scene_line }} + +{% endfor %} +{% endblock -%} +<|CLOSE_SECTION|> +<|SECTION:TASK|> +Generate {{ num_choices }} interesting actions for {{ player_character.name }} to advance the current scene in this text adventure game. Consider: + +1. Examining intriguing objects or characters for more detail +2. Interacting with the environment in meaningful ways +3. Taking actions that naturally progress the story + +Format each action as a short, concise command from {{ player_character.name }}'s perspective, such as: +"Look at the strange artifact." +"Ask the merchant about the rumors." +"Climb the crumbling staircase." +"Inspect the mysterious footprints." +"Eavesdrop on the whispering guards." +"Pick up the discarded letter." +"Offer the beggar a coin." +"Attempt to decipher the ancient runes." +"Search the bookshelf for hidden compartments." +"Try the rusty key in the lock." + +Requirements: + +- The actions MUST fit the scene's tone and writing style. This is {{ scene.context }}.{% if decensor %} The reader has already consented and is expecting to be exposed to such themes.{% endif %} +- The text describing the action must be short and concise. +- Offer varied options without drastic pacing changes, that make sequential sense at the ending of the scene. +- The actions must be significantly different from each other. +{% if instructions %}- {{ instructions}}{% endif %} + +Expected Response: + +You MUST provide your response in the following format: + +ANALYSIS: +PLANNING: +ACTIONS: +1. +2. +... +{{ set_prepared_response('ANALYSIS:') }} \ No newline at end of file diff --git a/src/talemate/prompts/templates/narrator/character-context.jinja2 b/src/talemate/prompts/templates/narrator/character-context.jinja2 new file mode 100644 index 00000000..42521fe8 --- /dev/null +++ b/src/talemate/prompts/templates/narrator/character-context.jinja2 @@ -0,0 +1,12 @@ +<|SECTION:CHARACTERS|> +{% for character in scene.characters %} +### {{ character.name }} +{% if max_tokens > 6000 -%} +{{ character.sheet }} +{% else -%} +{{ character.filtered_sheet(['age', 'gender']) }} +{{ query_memory("what is "+character.name+"'s personality?", as_question_answer=False) }} +{% endif %} +{{ character.description }} +{% endfor %} +<|CLOSE_SECTION|> \ No newline at end of file diff --git a/src/talemate/prompts/templates/narrator/narrate-query.jinja2 b/src/talemate/prompts/templates/narrator/narrate-query.jinja2 index 081c4c9e..ca0cdb45 100644 --- a/src/talemate/prompts/templates/narrator/narrate-query.jinja2 +++ b/src/talemate/prompts/templates/narrator/narrate-query.jinja2 @@ -14,6 +14,7 @@ {% set final_line_number=len(scene_history) %} {% for scene_context in scene_history -%} {{ loop.index }}. {{ scene_context }} + {% endfor %} <|SECTION:TASK|> {% if query.endswith("?") -%} diff --git a/src/talemate/prompts/templates/summarizer/analyze-dialogue.jinja2 b/src/talemate/prompts/templates/summarizer/analyze-dialogue.jinja2 index 3c060a81..ce4dee59 100644 --- a/src/talemate/prompts/templates/summarizer/analyze-dialogue.jinja2 +++ b/src/talemate/prompts/templates/summarizer/analyze-dialogue.jinja2 @@ -1,6 +1,8 @@ {{ dialogue }} <|SECTION:TASK|> -Examine the dialogue from the beginning and find the last line that marks a scene change. Repeat the line back to me exactly as it is written. +Examine the scene progress from the beginning and find the first line that marks the ending of a scene. Think of this in terms of a TV show or a play, where there is a build up, peak and denouement. You must identify the denouement point. + +Repeat the line back to me exactly as it is written. <|CLOSE_SECTION|> -{{ bot_token }}The first line that marks a scene change is: \ No newline at end of file +{{ bot_token }}The first line that marks a denouement point is: \ No newline at end of file diff --git a/src/talemate/prompts/templates/summarizer/character-context.jinja2 b/src/talemate/prompts/templates/summarizer/character-context.jinja2 new file mode 100644 index 00000000..42521fe8 --- /dev/null +++ b/src/talemate/prompts/templates/summarizer/character-context.jinja2 @@ -0,0 +1,12 @@ +<|SECTION:CHARACTERS|> +{% for character in scene.characters %} +### {{ character.name }} +{% if max_tokens > 6000 -%} +{{ character.sheet }} +{% else -%} +{{ character.filtered_sheet(['age', 'gender']) }} +{{ query_memory("what is "+character.name+"'s personality?", as_question_answer=False) }} +{% endif %} +{{ character.description }} +{% endfor %} +<|CLOSE_SECTION|> \ No newline at end of file diff --git a/src/talemate/prompts/templates/summarizer/dig-layered-history.jinja2 b/src/talemate/prompts/templates/summarizer/dig-layered-history.jinja2 new file mode 100644 index 00000000..19507c73 --- /dev/null +++ b/src/talemate/prompts/templates/summarizer/dig-layered-history.jinja2 @@ -0,0 +1,135 @@ +{% if context %} +<|SECTION:HISTORY|> +{% for entry in context %} +{{ entry["text"] }} + +{% endfor %} +{% endif %} +{% set can_dig = layer > -1 %} +{% for entry in entries %} +{% if entry.get("layer") > -1 or layer == -1 %}<|SECTION:CHAPTER {{ loop.index }}|> +{{ time_diff(entry.get("ts_end", entry.get("ts"))) }} +{{ entry["text"] }} +<|CLOSE_SECTION|>{% endif %} +{% endfor %} +{% if is_initial -%} +<|SECTION:CURRENT SCENE|> +{% for entry in entries %} +{% if entry.get("layer") == -1 %}{{ entry["text"] }} + +{% endif %} +{% endfor %} +{{ scene.snapshot(lines=15, ignore=['director', 'reinforcement']) }} +<|CLOSE_SECTION|> +{% endif %} + +{% if is_initial or dig_question %} +<|SECTION:QUERY|> +{{ dig_question or query }} +{% endif %} +<|SECTION:TASK|> +The author of the scene has given YOU - the analyst - a query and is asking you to provide additional context to the actors in the scene. + +{% if is_initial %}- Understand the query, what do we want to find out? +- For a query to be valid any of the following must be true: + - A character is trying to retrieve information in the form of a question. + - A location, event, off-scene person or object is refered to that you could gather more information about. +- The query is invalid if any of these are true: + - The answer to the query is already contained within the current scene. +- If the query is invalid you must call abort() immediately. +{% endif -%} +- Read the provided chapters and select one that holds the answer or relevant context.{% if can_dig %} You can also decide to dig chapters for more information.{% else %} +- If no answer can be provided, but you can provide additional relevant context, that is also acceptable.{% endif %} +- Select a function to call to process the request. + +### Available Functions +{% if can_dig %}- `dig(chapter_number, question)` to dig into a specific chapter for more information - number must be available and listed as a chapter above. You must call dig multiple times if there are multiple promising chapters to investigate. + - Valid chapters to dig: {% for entry in entries %}{% if entry.get("layer") > -1 %}{{ loop.index }}{% if not loop.last %}, {% endif %}{% endif %}{% endfor %} + - The question you pass to the dig query must contain enough context to accurately target the event you want to query. Don't be vague, be specific by providing any relevant context you have learned so far. If you are targeting a specific event mention it using a detailed description that leaves no doubt. + - Do not mention chapters in your question.{% else %}- `answer(answer)` to provide an answer or context or both. + - Use the history for context, but source the answer from the Chapter(s). + - You MUST NOT let the query impact the answer. The chapters are the source of truth. The query may imply or assume incorrect things. + - The answer MUST be factional information and MUST NOT mention chapter numbers. + - Answer the query and provide contextual and circumstantial details. + - Limit the answer to two paragraphs. + - The answer text must be explanatory summarization, NOT narration. + - For historic context include a note about how long ago the situation occured and use past tense. You must always mention how long ago your sourced information was the truth. + {% if character %}- Also include a note as to how aware {{ character.name }} is of the information you provided in your answer.{% endif %} +{% endif %} +- `abort()` to stop the process if there are no avenues left to explore and there is no information to satisfy the query. + +### Rules +- You MUST NOT mix functions +{%- if can_dig %} +- Digging is expensive. Only dig chapters if they are highly likely to be related to the query.{% endif %} +{%- if not can_dig %} +- When using the `answer()` function always write from the perspective of the investigator.{% endif %} +- Use untyped code blocks, so ``` instead of ```python. +- You must never invent information. Dig instead. +- End with `DONE` after calling a function. +- You must not invent or guess, you can however decide to provide extra context if a factual answer is not possible. +{% if is_initial %}- If the answer contained in current scene the query is invalid and you must abort.{% endif %} + +### Response Format +Follow this format exactly: + +{% if is_initial %}QUERY: + +ANALYSIS: +- character trying retrieve information: . +- answer contained in current scene: . +- location, event, off-scene person or object mentioned: . +- query valid based on the above: . + + + +{% else %} +ANALYSIS: + +{% endif -%} + +FUNCTION SELECTED: + +CALL: +``` +() +``` +DONE +<|CLOSE_SECTION|> +<|SECTION:EXAMPLES|> + +{% if can_dig %}Digging: + +CALL: +``` +dig(3, "What is the significance of the red door? The red door here refers to the red door in Jason's basement.") +``` +DONE + +Digging multiple times: + +Start with the most promising chapter first, then move to the next most promising chapter. + +CALL: +``` +dig(3, "What is the significance of the red door? The red door here refers to the red door in Jason's basement.") +dig(5, "What is the significance of the red door? The red door here refers to the red door in Jason's basement.") +``` +DONE{% endif %} + +{% if not can_dig %}Answering: + +CALL: +``` +answer("Two weeks ago James discovered that the red door led to the secret chamber where the treasure was hidden. James learned about it from his grandfather.{% if character %} James knows this information, as he was the one to discover it.{% endif %}") +``` +DONE{% endif %} + +Aborting: + +CALL: +``` +abort() +``` +DONE +{{ bot_token }}{% if is_initial %}QUERY:{% else %}ANALYSIS:{% endif %} \ No newline at end of file diff --git a/src/talemate/prompts/templates/summarizer/find-natural-scene-termination-events.jinja2 b/src/talemate/prompts/templates/summarizer/find-natural-scene-termination-events.jinja2 new file mode 100644 index 00000000..cddc1202 --- /dev/null +++ b/src/talemate/prompts/templates/summarizer/find-natural-scene-termination-events.jinja2 @@ -0,0 +1,22 @@ + +<|SECTION:SCENE|> +{{ events[0] }} +<|CLOSE_SECTION|> + +{% for event in events[1:] %} +<|SECTION:PROGRESS {{ loop.index }}|> +{{ event }} +<|CLOSE_SECTION|> +{% endfor %} + +<|SECTION:TASK|> +Examine the scene progress from the beginning and find the progress items that mark the ending of a scene. Think of this in terms of a TV show or a play, where there is a build up, peak and denouement. You must identify the denouement points. + +Provide a list of denounment points in the following format: + +- Progress {N} +- Progress {N} +... +<|CLOSE_SECTION|> + +{{ set_prepared_response("-") }} \ No newline at end of file diff --git a/src/talemate/prompts/templates/summarizer/summarize-dialogue.jinja2 b/src/talemate/prompts/templates/summarizer/summarize-dialogue.jinja2 index 700562a0..a84a5ee1 100644 --- a/src/talemate/prompts/templates/summarizer/summarize-dialogue.jinja2 +++ b/src/talemate/prompts/templates/summarizer/summarize-dialogue.jinja2 @@ -1,38 +1,21 @@ +{% set summary_target = "chapter "+to_str(num_extra_context+1) %} {% if summarization_method == "facts" -%} {% set output_type = "factual list" -%} +{% set max_length = "" %} {% else -%} {% set output_type = "narrative description" -%} +{% set max_length = " Length: 1 - 2 paragraphs" %} {% endif -%} {% if extra_context -%} -<|SECTION:PREVIOUS CONTEXT|> -{{ extra_context }} +<|SECTION:PREVIOUS CHAPTERS|> +{% for chapter_summary in extra_context %} +## Chapter {{ loop.index }} +{{ chapter_summary }} + +{% endfor %} <|CLOSE_SECTION|> {% endif -%} -<|SECTION:TASK|> -Question: What happens explicitly within the dialogue section alpha below? Summarize into a {{output_type}}. -Content Context: This is a specific scene from {{ scene.context }} -{% if output_type == "narrative description" %} -Use an informal and colloquial register with a conversational tone. Overall, the narrative is informal, conversational, natural, and spontaneous, with a sense of immediacy. -{% endif %} - -{% if summarization_method == "long" -%} -This should be a detailed summary of the dialogue, including all the juicy details. -{% elif summarization_method == "short" -%} -This should be a short and specific summary of the dialogue, including the most important details. 2 - 3 sentences. -{% endif -%} - -YOU MUST ONLY SUMMARIZE THE CONTENT IN DIALOGUE SECTION ALPHA. - -{% if output_type == "narrative description" %} -Expected Answer: A summarized {{output_type}} of the dialogue section alpha, that can be inserted into the ongoing story in place of the dialogue. -{% elif output_type == "factual list" %} -Expected Answer: A highly accurate numerical chronological list of the events and state changes that occur in the dialogue section alpha. Important is anything that causes a state change in the scene, characters or objects. Use simple, clear language, and note details. Use exact words. Note all the state changes. Leave nothing out. -{% endif %} -{% if extra_instructions -%} -{{ extra_instructions }} -{% endif -%} -<|CLOSE_SECTION|> -<|SECTION:DIALOGUE SECTION ALPHA|> +<|SECTION:{{ summary_target.upper() }} (To be summarized)|> {{ dialogue }} <|CLOSE_SECTION|> {% if generation_options and generation_options.writing_style %} @@ -40,5 +23,41 @@ Expected Answer: A highly accurate numerical chronological list of the events an {{ generation_options.writing_style.instructions }} <|CLOSE_SECTION|> {% endif %} -<|SECTION:SUMMARIZATION OF DIALOGUE SECTION ALPHA|> -{{ bot_token }}In the dialogue section alpha, \ No newline at end of file +<|SECTION:TASK|> +Summarize {{ summary_target }} into a {{output_type}}. + +This is a specific chapter from {{ scene.context }}. +{% if output_type == "narrative description" %} +The tone of the summary must match the tone of the dialogue. +{% endif %} + +{% if summarization_method == "long" -%} +This should be a detailed summary of the dialogue, including all the juicy details. +{% set max_length = " Length: 1 - 3 paragraphs" %} +{% elif summarization_method == "short" -%} +This should be a short and specific summary of the dialogue, including the most important details. 2 - 3 sentences. +{% set max_length = " Length: 1 paragraph" %} +{% endif -%} + +YOU MUST ONLY SUMMARIZE THE CONTENT EXPLICITLY STATED WITHIN {{ summary_target.upper() }}. +YOU MUST NOT INCLUDE OR REPEAT THE PREVIOUS CONTEXT iN YOUR SUMMARY. +YOU MUST NOT QUOTE DIALOGUE. + +{% if output_type == "narrative description" %} +Provide a summarized {{output_type}} of {{ summary_target }}. +{% elif output_type == "factual list" %} +Provide a highly accurate numerical chronological list of the events and state changes that occur in {{ summary_target }}. Important is anything that causes a state change in the scene, characters or objects. Use simple, clear language, and note details. Use exact words. Note all the state changes. Leave nothing out. +{% endif %} + +{% if extra_context %}Use the previous context to inform your understanding of the whole story, but only summarize what is explicitly mentioned in {{ summary_target }}.{% endif -%} + +{% if extra_instructions -%} +{{ extra_instructions }} +{% endif -%} +Your response must follow this format: + +ANALYSIS: +SUMMARY:

+<|CLOSE_SECTION|> +<|SECTION:SUMMARY OF {{ summary_target.upper() }}|> +{{ set_prepared_response("ANALYSIS:") }} \ No newline at end of file diff --git a/src/talemate/prompts/templates/summarizer/summarize-events-list-milestones.jinja2 b/src/talemate/prompts/templates/summarizer/summarize-events-list-milestones.jinja2 new file mode 100644 index 00000000..2487a7cf --- /dev/null +++ b/src/talemate/prompts/templates/summarizer/summarize-events-list-milestones.jinja2 @@ -0,0 +1,14 @@ +{% if extra_context %}{% set section_name = "chapter la" %}{% else %}{% set section_name = "chapter 1" %}{% endif %} +{% if extra_context %} + +<|SECTION:PREVIOUS CONTEXT|> +{{ extra_context }} +<|CLOSE_SECTION|> +{% endif -%} +<|SECTION:{{ section_name }}|> +{{ content }} +<|CLOSE_SECTION|> +<|SECTION:TASK|> +List up to five major story developments that happen in {{ section_name }}. +<|CLOSE_SECTION|> +{{ set_prepared_response("1.") }} \ No newline at end of file diff --git a/src/talemate/prompts/templates/summarizer/summarize-events.jinja2 b/src/talemate/prompts/templates/summarizer/summarize-events.jinja2 index 38225d8b..d65ecd89 100644 --- a/src/talemate/prompts/templates/summarizer/summarize-events.jinja2 +++ b/src/talemate/prompts/templates/summarizer/summarize-events.jinja2 @@ -1,3 +1,46 @@ -Instruction: Summarize the events within the dialogue as accurately as you can. -Expected Answer: A list short narrative descriptions -Narrator answers: \ No newline at end of file +{% if extra_context %}{% set section_name = "chapter 2" %}{% else %}{% set section_name = "chapter 1" %}{% endif %} +{% include "character-context.jinja2" -%} +{% if extra_context %} +<|SECTION:HISTORY|> +{{ extra_context }} +<|CLOSE_SECTION|> +{% endif -%} +<|SECTION:{{ section_name }}|> +{{ section_name.upper() }} START +{% for chunk in text_to_chunks(dialogue, chunk_size=2500) %} +CHUNK {{ loop.index }}: +{{ chunk }} + +{% endfor %} +{{ section_name.upper() }} END +<|CLOSE_SECTION|> +<|SECTION:TASK|> +Provide a compressed, short summary for {{ section_name }}. + +Do not repeat any information from the previous context. + +Compress each individual chunk, keeping the start and ending points as anchors. + +Ensure the persistence of all important moments, decisions and story developments. + +Specifically mention characters, locations and objects by name. + +Consider the other chunks and the history to inform the context of the summarizations. Each chunk must be summarized in a way that it leads into the next chunk. + +YOU MUST NOT ADD COMMENTARY. +YOU MUST NOT ADD COMBINED SUMMARIZATION OF ALL CHUNKS. + +You must provide your response in the following format: + +CHUNK 1: + +CHUNK 2: + +... +<|CLOSE_SECTION|> +{% if generation_options and generation_options.writing_style %} +<|SECTION:WRITING STYLE|> +{{ generation_options.writing_style.instructions }} +<|CLOSE_SECTION|> +{% endif %} +{{ set_prepared_response("CHUNK 1:")}} \ No newline at end of file diff --git a/src/talemate/prompts/templates/summarizer/timeline.jinja2 b/src/talemate/prompts/templates/summarizer/timeline.jinja2 new file mode 100644 index 00000000..a37c3635 --- /dev/null +++ b/src/talemate/prompts/templates/summarizer/timeline.jinja2 @@ -0,0 +1,14 @@ +<|SECTION:STORY|> +{% for event in events %} +{{ event["text"] }} + +{% endfor %} +<|CLOSE_SECTION|> + +<|SECTION:TASK|> +Identify the major events and milestone in the provided story. + +Summarize them into a consice list of events. Each item should be a single sentence, be concise and to the point. + +The list must be in chronological order, with the earliest event at the top and the latest event at the bottom. +<|CLOSE_SECTION|> \ No newline at end of file diff --git a/src/talemate/prompts/templates/world_state/analyze-text-and-extract-context.jinja2 b/src/talemate/prompts/templates/world_state/analyze-text-and-extract-context.jinja2 index 38ee5657..648304c9 100644 --- a/src/talemate/prompts/templates/world_state/analyze-text-and-extract-context.jinja2 +++ b/src/talemate/prompts/templates/world_state/analyze-text-and-extract-context.jinja2 @@ -1,5 +1,17 @@ -{% set questions = instruct_text("Ask the author 5 important questions to gather more context from the past for the continuation of this conversation. If a character is asking about a state, location or information about an item or another character, make sure to include question(s) that help gather context for this. You also have unlimited access to the world database and can just ask for information directly. If you don't know what something is just ask directly.", text) %} <|SECTION:CONTEXT|> +{% block character_context %} +{% if include_character_context %}{% include "character-context.jinja2" %}{% endif %} +{% endblock %} +{% set questions = instruct_text("Ask the narrator 1 important question to gather additional context to assist with the following goal: "+goal+" + +1. Focus on established facts, lore, and background information. +2. Avoid asking for information already provided in the given context. +3. Address gaps in the current narrative or explore relevant backstory. +4. If characters mention specific states, locations, items, or other characters, prioritize queries about these. +5. Phrase queries as direct requests for information from the world database. +6. For unfamiliar elements, ask straightforward questions to clarify their nature or significance. + +Your response must be the question only. Do not include any additional text or explanations.", self.character_context() + "\n\n" + text) %} {%- with memory_query=questions -%} {% include "extra-context.jinja2" %} {% endwith %} diff --git a/src/talemate/prompts/templates/world_state/analyze-text-and-generate-rag-queries.jinja2 b/src/talemate/prompts/templates/world_state/analyze-text-and-generate-rag-queries.jinja2 index 8b2700ab..f5138ca4 100644 --- a/src/talemate/prompts/templates/world_state/analyze-text-and-generate-rag-queries.jinja2 +++ b/src/talemate/prompts/templates/world_state/analyze-text-and-generate-rag-queries.jinja2 @@ -2,23 +2,51 @@ <|SECTION:CONTEXT|> {% include "extra-context.jinja2" %} <|CLOSE_SECTION|> +{% if include_character_context %}{% include "character-context.jinja2" %}{% endif %} {% endblock -%} <|SECTION:SCENE|> {{ text }} <|SECTION:TASK|> -You have access to a vector database to retrieve relevant data to gather more established context for the continuation of this conversation. If a character is asking about a state, location or information about an item or another character, make sure to include queries that help gather context for this. +You are assisting with an ongoing story. You have access to a vector database containing factual information about the characters, locations, events, and lore of this narrative world. Your task is to generate up to 5 specific, targeted queries to gather additional context for the current scene or conversation. -Please compile a list of up to 10 short queries to the database that will help us gather additional context for the actors to continue the ongoing conversation. +Gather additional context to assist with the following goal: {{ goal}} -Each query must be a short trigger keyword phrase and the database will match on semantic similarity. +Before generating the queries, you will be provided with: +1. A brief summary of the story context +2. Key character names and their roles +3. The most recent dialogue or scene description -Each query must be on its own line as raw unformatted text. +Using this information, create queries that: +- Seek new information not already provided in the given context +- Explore potential gaps in the current narrative +- Investigate background details that could enrich the scene +- Look for connections between current elements and established lore -Your response should look like this and contain only the queries and nothing else: +Your queries should focus on: +- Historical information about characters or locations +- Established relationships between characters +- Known facts about objects or concepts in the story world +- Past events that may be relevant to the current scene + +Avoid queries that: +- Repeat information already given in the context +- Ask about characters' current thoughts, feelings, or intentions +- Seek speculative or future events +- Request information that would not be part of established lore or backstory + +Each query should be: +- A short, focused keyword phrase +- Relevant to the current story context, but not redundant +- Designed to elicit specific, factual information not yet revealed + +Format your response as a list of raw, unformatted text queries, each on its own line: - - - ... -- + +Do not include any additional text, explanations, or formatting in your response. + +After receiving the story context and recent dialogue, generate your list of targeted, non-redundant, lore-focused queries. <|CLOSE_SECTION|> {{ set_prepared_response('-') }} \ No newline at end of file diff --git a/src/talemate/prompts/templates/world_state/character-context.jinja2 b/src/talemate/prompts/templates/world_state/character-context.jinja2 new file mode 100644 index 00000000..42521fe8 --- /dev/null +++ b/src/talemate/prompts/templates/world_state/character-context.jinja2 @@ -0,0 +1,12 @@ +<|SECTION:CHARACTERS|> +{% for character in scene.characters %} +### {{ character.name }} +{% if max_tokens > 6000 -%} +{{ character.sheet }} +{% else -%} +{{ character.filtered_sheet(['age', 'gender']) }} +{{ query_memory("what is "+character.name+"'s personality?", as_question_answer=False) }} +{% endif %} +{{ character.description }} +{% endfor %} +<|CLOSE_SECTION|> \ No newline at end of file diff --git a/src/talemate/prompts/templates/world_state/update-reinforcements.jinja2 b/src/talemate/prompts/templates/world_state/update-reinforcements.jinja2 index d96b2fd7..7d3ab37e 100644 --- a/src/talemate/prompts/templates/world_state/update-reinforcements.jinja2 +++ b/src/talemate/prompts/templates/world_state/update-reinforcements.jinja2 @@ -1,3 +1,4 @@ + {% block rendered_context -%} <|SECTION:CONTEXT|> {%- with memory_query=scene.snapshot() -%} @@ -11,10 +12,14 @@ <|CLOSE_SECTION|> {% endblock -%} <|SECTION:SCENE|> -{% set scene_history=scene.context_history(budget=max_tokens-200-count_tokens(self.rendered_context())) -%} -{% set final_line_number=len(scene_history) -%} +{% set scene_history = scene.context_history(budget=max_tokens-200-count_tokens(self.rendered_context()), keep_context_investigation=False) -%} +{% set last_message = scene_history[-1] %} +{% set last_message_is_reinforcement = ("internal notes" in last_message.lower() and question in last_message)%} +{% if not last_message_is_reinforcement %}{% set final_line_number=len(scene_history) %}{% else %}{% set final_line_number=len(scene_history)-1 %}{% endif %} {% for scene_context in scene_history -%} +{% if not (loop.last and last_message_is_reinforcement) -%} {{ loop.index }}. {{ scene_context }} +{% endif -%} {% endfor -%} {% if not scene.history -%} No dialogue so far @@ -45,7 +50,7 @@ YOUR ANSWER IS CONFIDENT, MAKE CREATIVE CHOICES AS NEEDED. {% endif %} The tone of your answer should be consistent with the tone of the story so far. -Question: {{ question }} +Question: {{ question }} (At line {{ final_line_number }} in the scene progression) {% if answer %}Previous Answer: {{ answer }} {% endif -%} <|CLOSE_SECTION|> diff --git a/src/talemate/scene_message.py b/src/talemate/scene_message.py index bbad5ec9..f01d241d 100644 --- a/src/talemate/scene_message.py +++ b/src/talemate/scene_message.py @@ -2,7 +2,17 @@ import enum import re from dataclasses import dataclass, field -import isodate +__all__ = [ + "SceneMessage", + "CharacterMessage", + "NarratorMessage", + "DirectorMessage", + "TimePassageMessage", + "ReinforcementMessage", + "ContextInvestigationMessage", + "Flags", + "MESSAGES", +] _message_id = 0 @@ -110,6 +120,7 @@ class SceneMessage: class CharacterMessage(SceneMessage): typ = "character" source: str = "ai" + from_choice: str | None = None def __str__(self): return self.message @@ -125,6 +136,10 @@ class CharacterMessage(SceneMessage): @property def raw(self): return self.message.split(":", 1)[1].replace('"', "").replace("*", "").strip() + + @property + def without_name(self) -> str: + return self.message.split(":", 1)[1] @property def as_movie_script(self): @@ -138,7 +153,15 @@ class CharacterMessage(SceneMessage): message = self.message.split(":", 1)[1].replace('"', "").strip() - return f"\n{self.character_name.upper()}\n{message}\n" + return f"\n{self.character_name.upper()}\n{message}\nEND-OF-LINE\n" + + def __dict__(self): + rv = super().__dict__() + + if self.from_choice: + rv["from_choice"] = self.from_choice + + return rv def as_format(self, format: str, **kwargs) -> str: if format == "movie_script": @@ -266,14 +289,32 @@ class ReinforcementMessage(SceneMessage): def __str__(self): question, _ = self.source.split(":", 1) return ( - f"# Internal notes for {self.character_name} - {question}: {self.message}" + f"# Internal note for {self.character_name} - {question}\n{self.message}" ) def as_format(self, format: str, **kwargs) -> str: if format == "movie_script": message = str(self)[2:] return f"\n({message})\n" - return self.message + return f"\n{self.message}\n" + + +@dataclass +class ContextInvestigationMessage(SceneMessage): + typ = "context_investigation" + source: str = "ai" + + def __str__(self): + return ( + f"# Internal note - {self.message}" + ) + + def as_format(self, format: str, **kwargs) -> str: + if format == "movie_script": + message = str(self)[2:] + return f"\n({message})\n" + return f"\n{self.message}\n" + MESSAGES = { @@ -283,4 +324,5 @@ MESSAGES = { "director": DirectorMessage, "time": TimePassageMessage, "reinforcement": ReinforcementMessage, + "context_investigation": ContextInvestigationMessage, } diff --git a/src/talemate/server/api.py b/src/talemate/server/api.py index 95716ae3..85e3ea37 100644 --- a/src/talemate/server/api.py +++ b/src/talemate/server/api.py @@ -24,167 +24,194 @@ async def websocket_endpoint(websocket, path): log.info("frontend connected") - try: - # Create a task to send messages from the queue - async def send_messages(): - while True: - # check if there are messages in the queue - if message_queue.empty(): - await asyncio.sleep(0.01) - continue - - message = await message_queue.get() - await websocket.send(json.dumps(message)) - - send_messages_task = asyncio.create_task(send_messages()) - - # Create a task to send regular client status updates - async def send_status(): - while True: - await instance.emit_clients_status() - await instance.agent_ready_checks() - await asyncio.sleep(3) - - send_status_task = asyncio.create_task(send_status()) - - # create a task that will retriece client boostrap information - - async def send_client_bootstraps(): - while True: - try: - await instance.sync_client_bootstraps() - except Exception as e: - log.error( - "send_client_bootstraps", - error=e, - traceback=traceback.format_exc(), - ) - await asyncio.sleep(15) - - send_client_bootstraps_task = asyncio.create_task(send_client_bootstraps()) - - while True: - data = await websocket.recv() - data = json.loads(data) - action_type = data.get("type") - - scene_data = None - - log.debug("frontend message", action_type=action_type) - - with ActiveScene(handler.scene): - if action_type == "load_scene": - if scene_task: - handler.scene.continue_scene = False - scene_task.cancel() - - file_path = data.get("file_path") - scene_data = data.get("scene_data") - filename = data.get("filename") - reset = data.get("reset", False) - - await message_queue.put( - { - "type": "system", - "message": "Loading scene file ...", - "id": "scene.loading", - "status": "loading", - } - ) - - async def scene_loading_done(): - await message_queue.put( - { - "type": "system", - "message": "Scene file loaded ...", - "id": "scene.loaded", - "status": "success", - "data": { - "hidden": True, - "environment": handler.scene.environment, - }, - } - ) - - if scene_data and filename: - file_path = handler.handle_character_card_upload( - scene_data, filename - ) - - log.info("load_scene", file_path=file_path, reset=reset) - - # Create a task to load the scene in the background - scene_task = asyncio.create_task( - handler.load_scene( - file_path, reset=reset, callback=scene_loading_done - ) - ) - - elif action_type == "interact": - log.debug("interact", data=data) - text = data.get("text") - with Interaction(act_as=data.get("act_as")): - if handler.waiting_for_input: - handler.send_input(text) - - elif action_type == "request_scenes_list": - query = data.get("query", "") - handler.request_scenes_list(query) - elif action_type == "configure_clients": - await handler.configure_clients(data.get("clients")) - elif action_type == "configure_agents": - await handler.configure_agents(data.get("agents")) - elif action_type == "request_client_status": - await handler.request_client_status() - elif action_type == "delete_message": - handler.delete_message(data.get("id")) - elif action_type == "scene_config": - log.info("scene_config", data=data) - handler.apply_scene_config(data.get("scene_config")) - elif action_type == "request_scene_assets": - log.info("request_scene_assets", data=data) - handler.request_scene_assets(data.get("asset_ids")) - elif action_type == "upload_scene_asset": - log.info("upload_scene_asset") - handler.add_scene_asset(data=data) - elif action_type == "request_scene_history": - log.info("request_scene_history") - handler.request_scene_history() - elif action_type == "request_assets": - log.info("request_assets") - handler.request_assets(data.get("assets")) - elif action_type == "edit_message": - log.info("edit_message", data=data) - handler.edit_message(data.get("id"), data.get("text")) - elif action_type == "interrupt": - log.info("interrupt") - handler.scene.interrupt() - elif action_type == "request_app_config": - log.info("request_app_config") - await message_queue.put( - { - "type": "app_config", - "data": load_config(), - "version": VERSION, - } - ) - else: - log.info("Routing to sub-handler", action_type=action_type) - await handler.route(data) - - # handle disconnects - except ( - websockets.exceptions.ConnectionClosed, - starlette.websockets.WebSocketDisconnect, - RuntimeError, - ): - log.warning("frontend disconnected") + async def frontend_disconnect(exc): + nonlocal scene_task + log.warning(f"frontend disconnected: {exc}") + + main_task.cancel() send_messages_task.cancel() send_status_task.cancel() send_client_bootstraps_task.cancel() + test_connection_task.cancel() handler.disconnect() if handler.scene: handler.scene.active = False handler.scene.continue_scene = False if scene_task: scene_task.cancel() + + # Create a task to send messages from the queue + async def send_messages(): + while True: + # check if there are messages in the queue + if message_queue.empty(): + await asyncio.sleep(0.01) + continue + + message = await message_queue.get() + await websocket.send(json.dumps(message)) + + + # Create a task to send regular client status updates + async def send_status(): + while True: + await instance.emit_clients_status() + await instance.agent_ready_checks() + await asyncio.sleep(3) + + # create a task that will retriece client boostrap information + async def send_client_bootstraps(): + while True: + try: + await instance.sync_client_bootstraps() + except Exception as e: + log.error( + "send_client_bootstraps", + error=e, + traceback=traceback.format_exc(), + ) + await asyncio.sleep(15) + + + # task to test connection + async def test_connection(): + while True: + try: + await websocket.send(json.dumps({"type": "ping"})) + except Exception as e: + await frontend_disconnect(e) + await asyncio.sleep(1) + + + + # main loop task + async def handle_messages(): + nonlocal scene_task + try: + while True: + data = await websocket.recv() + data = json.loads(data) + action_type = data.get("type") + + scene_data = None + + log.debug("frontend message", action_type=action_type) + + with ActiveScene(handler.scene): + if action_type == "load_scene": + if scene_task: + log.info("Unloading current scene") + handler.scene.continue_scene = False + scene_task.cancel() + + file_path = data.get("file_path") + scene_data = data.get("scene_data") + filename = data.get("filename") + reset = data.get("reset", False) + + await message_queue.put( + { + "type": "system", + "message": "Loading scene file ...", + "id": "scene.loading", + "status": "loading", + } + ) + + async def scene_loading_done(): + await message_queue.put( + { + "type": "system", + "message": "Scene file loaded ...", + "id": "scene.loaded", + "status": "success", + "data": { + "hidden": True, + "environment": handler.scene.environment, + }, + } + ) + + if scene_data and filename: + file_path = handler.handle_character_card_upload( + scene_data, filename + ) + + log.info("load_scene", file_path=file_path, reset=reset) + + # Create a task to load the scene in the background + scene_task = asyncio.create_task( + handler.load_scene( + file_path, reset=reset, callback=scene_loading_done + ) + ) + + elif action_type == "interact": + log.debug("interact", data=data) + text = data.get("text") + with Interaction(act_as=data.get("act_as")): + if handler.waiting_for_input: + handler.send_input(text) + + elif action_type == "request_scenes_list": + query = data.get("query", "") + handler.request_scenes_list(query) + elif action_type == "configure_clients": + await handler.configure_clients(data.get("clients")) + elif action_type == "configure_agents": + await handler.configure_agents(data.get("agents")) + elif action_type == "request_client_status": + await handler.request_client_status() + elif action_type == "delete_message": + handler.delete_message(data.get("id")) + elif action_type == "scene_config": + log.info("scene_config", data=data) + handler.apply_scene_config(data.get("scene_config")) + elif action_type == "request_scene_assets": + log.info("request_scene_assets", data=data) + handler.request_scene_assets(data.get("asset_ids")) + elif action_type == "upload_scene_asset": + log.info("upload_scene_asset") + handler.add_scene_asset(data=data) + elif action_type == "request_scene_history": + log.info("request_scene_history") + handler.request_scene_history() + elif action_type == "request_assets": + log.info("request_assets") + handler.request_assets(data.get("assets")) + elif action_type == "edit_message": + log.info("edit_message", data=data) + handler.edit_message(data.get("id"), data.get("text")) + elif action_type == "interrupt": + log.info("interrupt") + handler.scene.interrupt() + elif action_type == "request_app_config": + log.info("request_app_config") + await message_queue.put( + { + "type": "app_config", + "data": load_config(), + "version": VERSION, + } + ) + else: + log.info("Routing to sub-handler", action_type=action_type) + await handler.route(data) + + + # handle disconnects + except ( + websockets.exceptions.ConnectionClosed, + starlette.websockets.WebSocketDisconnect, + RuntimeError, + ) as exc: + await frontend_disconnect(exc) + + + main_task = asyncio.create_task(handle_messages()) + send_messages_task = asyncio.create_task(send_messages()) + send_status_task = asyncio.create_task(send_status()) + send_client_bootstraps_task = asyncio.create_task(send_client_bootstraps()) + test_connection_task = asyncio.create_task(test_connection()) + + await asyncio.gather(main_task, send_messages_task, send_status_task, send_client_bootstraps_task, test_connection_task) \ No newline at end of file diff --git a/src/talemate/server/assistant.py b/src/talemate/server/assistant.py index 6cc8880e..3e555b60 100644 --- a/src/talemate/server/assistant.py +++ b/src/talemate/server/assistant.py @@ -8,6 +8,10 @@ from talemate.instance import get_agent log = structlog.get_logger("talemate.server.assistant") +class ForkScenePayload(pydantic.BaseModel): + message_id: int + save_name: str | None = None + class AssistantPlugin: router = "assistant" @@ -86,3 +90,24 @@ class AssistantPlugin: except Exception as e: log.error("Error running autocomplete", error=str(e)) emit("autocomplete_suggestion", "") + + + async def handle_fork_new_scene(self, data: dict): + """ + Allows to fork a new scene from a specific message + in the current scene. + + All content after the message will be removed and the + context database will be re imported ensuring a clean state. + + All state reinforcements will be reset to their most recent + state before the message. + """ + + payload = ForkScenePayload(**data) + + creator = get_agent("creator") + + await creator.fork_scene(payload.message_id, payload.save_name) + + \ No newline at end of file diff --git a/src/talemate/server/director.py b/src/talemate/server/director.py new file mode 100644 index 00000000..85959aa3 --- /dev/null +++ b/src/talemate/server/director.py @@ -0,0 +1,45 @@ +import pydantic +import structlog + +import talemate.util as util +from talemate.emit import emit +from talemate.context import interaction +from talemate.instance import get_agent +from talemate.scene_message import CharacterMessage + +log = structlog.get_logger("talemate.server.director") + + +class SelectChoicePayload(pydantic.BaseModel): + choice: str + +class DirectorPlugin: + router = "director" + + @property + def scene(self): + return self.websocket_handler.scene + + def __init__(self, websocket_handler): + self.websocket_handler = websocket_handler + + async def handle(self, data: dict): + log.info("director action", action=data.get("action")) + + fn = getattr(self, f"handle_{data.get('action')}", None) + + if fn is None: + return + + await fn(data) + + async def handle_generate_choices(self, data: dict): + director = get_agent("director") + await director.generate_choices() + + async def handle_select_choice(self, data: dict): + payload = SelectChoicePayload(**data) + character = self.scene.get_player_character() + actor = character.actor + + await actor.generate_from_choice(payload.choice) \ No newline at end of file diff --git a/src/talemate/server/run.py b/src/talemate/server/run.py index 3661c389..10790808 100644 --- a/src/talemate/server/run.py +++ b/src/talemate/server/run.py @@ -31,6 +31,7 @@ async def install_punkt(): log.info("Downloading NLTK punkt tokenizer") await asyncio.get_event_loop().run_in_executor(None, nltk.download, "punkt") + await asyncio.get_event_loop().run_in_executor(None, nltk.download, "punkt_tab") log.info("Download complete") async def log_stream(stream, log_func): @@ -65,7 +66,6 @@ async def run_frontend(host: str = "localhost", port: int = 8080): preexec_fn=os.setsid if sys.platform != "win32" else None ) - asyncio.create_task(install_punkt()) log.info(f"talemate frontend started", host=host, port=port, server="uvicorn", process=process.pid) @@ -115,6 +115,9 @@ def run_server(args): loop.run_until_complete(start_server) + # start task to unstall punkt + loop.create_task(install_punkt()) + if not args.backend_only: frontend_task = loop.create_task(run_frontend(args.frontend_host, args.frontend_port)) else: diff --git a/src/talemate/server/websocket_server.py b/src/talemate/server/websocket_server.py index b79d7b4d..8d70b395 100644 --- a/src/talemate/server/websocket_server.py +++ b/src/talemate/server/websocket_server.py @@ -21,6 +21,7 @@ from talemate.server import ( character_importer, config, devtools, + director, quick_settings, world_state_manager, ) @@ -72,6 +73,7 @@ class WebsocketHandler(Receiver): self ), devtools.DevToolsPlugin.router: devtools.DevToolsPlugin(self), + director.DirectorPlugin.router: director.DirectorPlugin(self), } self.set_agent_routers() @@ -474,6 +476,18 @@ class WebsocketHandler(Receiver): ), } ) + + def handle_context_investigation(self, emission: Emission): + self.queue_put( + { + "type": "context_investigation", + "message": emission.message, + "id": emission.id, + "flags": ( + int(emission.message_object.flags) if emission.message_object else 0 + ), + } + ) def handle_prompt_sent(self, emission: Emission): self.queue_put( diff --git a/src/talemate/server/world_state_manager.py b/src/talemate/server/world_state_manager.py index f01a8a54..bb86e5b7 100644 --- a/src/talemate/server/world_state_manager.py +++ b/src/talemate/server/world_state_manager.py @@ -1,4 +1,4 @@ -import base64 +import asyncio import uuid from typing import Any, Union @@ -161,6 +161,7 @@ class SceneSettingsPayload(pydantic.BaseModel): class SaveScenePayload(pydantic.BaseModel): save_as: str | None = None + project_name: str | None = None class RegenerateHistoryPayload(pydantic.BaseModel): @@ -869,7 +870,7 @@ class WorldStateManagerPlugin: } ) - await self.scene.remove_actor(character.actor) + await self.scene.remove_character(character) await self.signal_operation_done() await self.handle_get_character_list({}) self.scene.emit_status() @@ -1000,44 +1001,71 @@ class WorldStateManagerPlugin: async def handle_save_scene(self, data): payload = SaveScenePayload(**data) - log.debug("Save scene", copy=payload.save_as) + log.debug("Save scene", copy=payload.save_as, project_name=payload.project_name) + + if not self.scene.filename: + # scene has never been saved before + # specify project name (directory name) + self.scene.name = payload.project_name await self.scene.save(auto=False, force=True, copy_name=payload.save_as) self.scene.emit_status() async def handle_request_scene_history(self, data): history = history_with_relative_time(self.scene.archived_history, self.scene.ts) + + layered_history = [] + + summarizer = get_agent("summarizer") + + if summarizer.layered_history_enabled: + for layer in self.scene.layered_history: + layered_history.append( + history_with_relative_time(layer, self.scene.ts) + ) self.websocket_handler.queue_put( - {"type": "world_state_manager", "action": "scene_history", "data": history} + {"type": "world_state_manager", "action": "scene_history", "data": { + "history": history, + "layered_history": layered_history, + }} ) async def handle_regenerate_history(self, data): payload = RegenerateHistoryPayload(**data) + + async def callback(): + self.scene.emit_status() + await self.handle_request_scene_history(data) + #self.websocket_handler.queue_put( + # { + # "type": "world_state_manager", + # "action": "history_entry_added", + # "data": history_with_relative_time( + # self.scene.archived_history, self.scene.ts + # ), + # } + #) - def callback(): + task = asyncio.create_task(rebuild_history( + self.scene, callback=callback, generation_options=payload.generation_options + )) + + async def done(): self.websocket_handler.queue_put( { "type": "world_state_manager", - "action": "history_entry_added", - "data": history_with_relative_time( - self.scene.archived_history, self.scene.ts - ), + "action": "history_regenerated", + "data": payload.model_dump(), } ) - await rebuild_history( - self.scene, callback=callback, generation_options=payload.generation_options - ) + await self.signal_operation_done() + await self.handle_request_scene_history(data) + + # when task is done, queue a message to the client + task.add_done_callback(lambda _: asyncio.create_task(done())) + - self.websocket_handler.queue_put( - { - "type": "world_state_manager", - "action": "history_regenerated", - "data": payload.model_dump(), - } - ) - await self.signal_operation_done() - await self.handle_request_scene_history(data) diff --git a/src/talemate/tale_mate.py b/src/talemate/tale_mate.py index 659c1aa7..f6171d31 100644 --- a/src/talemate/tale_mate.py +++ b/src/talemate/tale_mate.py @@ -45,6 +45,8 @@ from talemate.scene_message import ( ReinforcementMessage, SceneMessage, TimePassageMessage, + ContextInvestigationMessage, + MESSAGES as MESSAGE_TYPES, ) from talemate.util import colored_text, count_tokens, extract_metadata, wrap_text from talemate.util.prompt import condensed @@ -67,6 +69,7 @@ async_signals.register("game_loop_start") async_signals.register("game_loop") async_signals.register("game_loop_actor_iter") async_signals.register("game_loop_new_message") +async_signals.register("player_turn_start") class ActedAsCharacter(Exception): @@ -570,7 +573,7 @@ class Actor: def history(self): return self.scene.history - async def talk(self): + async def talk(self, instruction: str = None): """ Set the message to be sent to the AI """ @@ -588,7 +591,7 @@ class Actor: ) with ClientContext(conversation=conversation_context): - messages = await self.agent.converse(self) + messages = await self.agent.converse(self, instruction=instruction) return messages @@ -619,7 +622,6 @@ class Player(Actor): if not message: # Display scene history length before the player character name history_length = self.scene.history_length() - name = colored_text(self.character.name + ": ", self.character.color) input = await wait_for_input( f"[{history_length}] {name}", @@ -633,7 +635,27 @@ class Player(Actor): if not message: return - if not commands.Manager.is_command(message): + if message.startswith("@"): + character_message = await self.generate_from_choice( + message[1:], process=False, character=None if not act_as else self.scene.get_character(act_as) + ) + + if not character_message: + return + + self.message = character_message.without_name + self.scene.push_history(character_message) + + if act_as: + character = self.scene.get_character(act_as) + + self.scene.process_npc_dialogue(character.actor, [character_message]) + raise ActedAsCharacter() + else: + emit("character", character_message, character=self.character) + message = self.message + + elif not commands.Manager.is_command(message): if '"' not in message and "*" not in message: message = f'"{message}"' @@ -659,16 +681,88 @@ class Player(Actor): else: # acting as the main player character self.message = message - + + extra = {} + + if input.get("from_choice"): + extra["from_choice"] = input["from_choice"] + self.scene.push_history( CharacterMessage( - f"{self.character.name}: {message}", source="player" + f"{self.character.name}: {message}", source="player", **extra ) ) emit("character", self.history[-1], character=self.character) return message + async def generate_from_choice(self, choice:str, process:bool=True, character:Character=None) -> CharacterMessage: + character = self.character if not character else character + + if not character: + raise TalemateError("Character not found during generate_from_choice") + + actor = character.actor + conversation = self.scene.get_helper("conversation").agent + director = self.scene.get_helper("director").agent + narrator = self.scene.get_helper("narrator").agent + + # sensory checks + sensory_checks = ["look", "listen", "smell", "taste", "touch", "feel"] + + sensory_action = { + "look": "see", + "inspect": "see", + "examine": "see", + "observe": "see", + "watch": "see", + "view": "see", + "see": "see", + "listen": "hear", + "smell": "smell", + "taste": "taste", + "touch": "feel", + "feel": "feel", + } + + if choice.lower().startswith(tuple(sensory_checks)): + + # extract the sensory type + sensory_type = choice.split(" ", 1)[0].lower() + + sensory_suffix = sensory_action.get(sensory_type, "experience") + + log.debug("generate_from_choice", choice=choice, sensory_checks=True) + # sensory checks should trigger a narrator query instead of conversation + await narrator.action_to_narration( + "narrate_query", + emit_message=True, + query=f"{character.name} wants to \"{choice}\" - what does {character.name} {sensory_suffix} (your answer must be descriptive and detailed)?", + ) + return + + messages = await conversation.converse(actor, only_generate=True, instruction=choice) + + message = messages[0] + message = util.ensure_dialog_format(message.strip(), character.name) + character_message = CharacterMessage( + message, source="player" if isinstance(actor, Player) else "ai", from_choice=choice + ) + + if not process: + return character_message + + interaction_state = interaction.get() + + if director.generate_choices_never_auto_progress: + self.scene.push_history(character_message) + emit("character", character_message, character=character) + else: + interaction_state.from_choice = choice + interaction_state.input = character_message.without_name + + return character_message + class Scene(Emitter): """ @@ -693,6 +787,7 @@ class Scene(Emitter): self.history = [] self.archived_history = [] self.inactive_characters = {} + self.layered_history = [] self.assets = SceneAssets(scene=self) self.description = "" self.intro = "" @@ -760,6 +855,7 @@ class Scene(Emitter): "game_loop_actor_iter": async_signals.get("game_loop_actor_iter"), "game_loop_new_message": async_signals.get("game_loop_new_message"), "scene_init": async_signals.get("scene_init"), + "player_turn_start": async_signals.get("player_turn_start"), } self.setup_emitter(scene=self) @@ -1039,9 +1135,27 @@ class Scene(Emitter): if isinstance(self.history[idx], CharacterMessage): if self.history[idx].source == "player": return self.history[idx] + + def last_message_of_type(self, typ: str | list[str], source: str = None): + """ + Returns the last message of the given type and source + """ + + if not isinstance(typ, list): + typ = [typ] + + for idx in range(len(self.history) - 1, -1, -1): + if self.history[idx].typ in typ and ( + self.history[idx].source == source or not source + ): + return self.history[idx] def collect_messages( - self, typ: str = None, source: str = None, max_iterations: int = 100 + self, + typ: str = None, + source: str = None, + max_iterations: int = 100, + max_messages: int | None = None, ): """ Finds all messages in the history that match the given typ and source @@ -1049,11 +1163,16 @@ class Scene(Emitter): messages = [] iterations = 0 + collected = 0 for idx in range(len(self.history) - 1, -1, -1): if (not typ or self.history[idx].typ == typ) and ( not source or self.history[idx].source == source ): messages.append(self.history[idx]) + collected += 1 + if max_messages is not None and collected >= max_messages: + break + iterations += 1 if iterations >= max_iterations: @@ -1061,13 +1180,31 @@ class Scene(Emitter): return messages - def snapshot(self, lines: int = 3, ignore: list = None, start: int = None) -> str: + def snapshot( + self, + lines: int = 3, + ignore: list[str | SceneMessage] = None, + start: int = None, + as_format: str = "movie_script", + ) -> str: """ Returns a snapshot of the scene history """ if not ignore: - ignore = [ReinforcementMessage, DirectorMessage] + ignore = [ReinforcementMessage, DirectorMessage, ContextInvestigationMessage] + else: + # ignore me also be a list of message type strings (e.g. 'director') + # convert to class types + _ignore = [] + for item in ignore: + if isinstance(item, str): + _ignore.append(MESSAGE_TYPES.get(item)) + elif isinstance(item, SceneMessage): + _ignore.append(item) + else: + raise ValueError("ignore must be a list of strings or SceneMessage types") + ignore = _ignore collected = [] @@ -1082,7 +1219,7 @@ class Scene(Emitter): if len(collected) >= lines: break - return "\n".join([str(message) for message in collected]) + return "\n".join([message.as_format(as_format) for message in collected]) def push_archive(self, entry: data_objects.ArchiveEntry): """ @@ -1158,6 +1295,23 @@ class Scene(Emitter): if memory_helper: await actor.character.commit_to_memory(memory_helper.agent) + + async def remove_character(self, character: Character): + """ + Remove a character from the scene + + Class remove_actor if the character is active + otherwise remove from inactive_characters. + """ + + for actor in self.actors: + if actor.character == character: + await self.remove_actor(actor) + + if character.name in self.inactive_characters: + del self.inactive_characters[character.name] + + async def remove_actor(self, actor: Actor): """ Remove an actor from the scene @@ -1332,51 +1486,144 @@ class Scene(Emitter): return summary def context_history( - self, budget: int = 2048, keep_director: Union[bool, str] = False, **kwargs + self, budget: int = 8192, **kwargs ): parts_context = [] parts_dialogue = [] budget_context = int(0.5 * budget) budget_dialogue = int(0.5 * budget) + + keep_director = kwargs.get("keep_director", False) + keep_context_investigation = kwargs.get("keep_context_investigation", True) conversation_format = self.conversation_format actor_direction_mode = self.get_helper("director").agent.actor_direction_mode - - history_offset = kwargs.get("history_offset", 0) - message_id = kwargs.get("message_id") + layered_history_enabled = self.get_helper("summarizer").agent.layered_history_enabled include_reinfocements = kwargs.get("include_reinfocements", True) + assured_dialogue_num = kwargs.get("assured_dialogue_num", 5) - # if message id is provided, find the message in the history - if message_id: + history_len = len(self.history) - if history_offset: - log.warning( - "context_history", - message="history_offset is ignored when message_id is provided", - ) - message_index = self.message_index(message_id) - history_start = message_index - 1 + # CONTEXT + # collect context, ignore where end > len(history) - count + if not self.layered_history or not layered_history_enabled or not self.layered_history[0]: + + # no layered history available + + for i in range(len(self.archived_history) - 1, -1, -1): + archive_history_entry = self.archived_history[i] + end = archive_history_entry.get("end") + + if end is None: + continue + + try: + time_message = util.iso8601_diff_to_human( + archive_history_entry["ts"], self.ts + ) + text = f"{time_message}: {archive_history_entry['text']}" + except Exception as e: + log.error("context_history", error=e, traceback=traceback.format_exc()) + text = archive_history_entry["text"] + + if count_tokens(parts_context) + count_tokens(text) > budget_context: + break + + parts_context.insert(0, condensed(text)) + else: - history_start = len(self.history) - (1 + history_offset) + + # layered history available + # start with the last layer and work backwards + + next_layer_start = None + + for i in range(len(self.layered_history) - 1, -1, -1): + + log.debug("context_history - layered history", i=i, next_layer_start=next_layer_start) + + if not self.layered_history[i]: + continue + + for layered_history_entry in self.layered_history[i][next_layer_start if next_layer_start is not None else 0:]: + + time_message_start = util.iso8601_diff_to_human( + layered_history_entry["ts_start"], self.ts + ) + time_message_end = util.iso8601_diff_to_human( + layered_history_entry["ts_end"], self.ts + ) + + if time_message_start == time_message_end: + time_message = time_message_start + else: + time_message = f"Start:{time_message_start}, End:{time_message_end}" if time_message_start != time_message_end else time_message_start + text = f"{time_message} {layered_history_entry['text']}" + parts_context.append(text) + + next_layer_start = layered_history_entry["end"] + 1 + + # collect archived history entries that have not yet been + # summarized to the layered history + base_layer_start = self.layered_history[0][-1]["end"] + 1 if self.layered_history[0] else None + + if base_layer_start is not None: + for archive_history_entry in self.archived_history[base_layer_start:]: + time_message = util.iso8601_diff_to_human( + archive_history_entry["ts"], self.ts + ) + + text = f"{time_message}: {archive_history_entry['text']}" + parts_context.append(condensed(text)) - # collect dialogue - - count = 0 - - for i in range(history_start, -1, -1): - count += 1 + # log.warn if parts_context token count > budget_context + if count_tokens(parts_context) > budget_context: + log.warning( + "context_history", + message="context exceeds budget", + context_tokens=count_tokens(parts_context), + budget=budget_context, + ) + # chop off the top until it fits + while count_tokens(parts_context) > budget_context: + parts_context.pop(0) + # DIALOGUE + try: + summarized_to = self.archived_history[-1]["end"] if self.archived_history else 0 + except KeyError: + # only static archived history entries exist (pre-entered history + # that doesnt have start and end timestamps) + summarized_to = 0 + + + # if summarized_to somehow is bigger than the length of the history + # since we have no way to determine where they sync up just put as much of + # the dialogue as possible + if summarized_to and summarized_to >= history_len: + log.warning("context_history", message="summarized_to is greater than history length - may want to regenerate history") + summarized_to = 0 + + log.debug("context_history", summarized_to=summarized_to, history_len=history_len) + + dialogue_messages_collected = 0 + + #for message in self.history[summarized_to if summarized_to is not None else 0:]: + for i in range(len(self.history) - 1, -1, -1): message = self.history[i] + + if i < summarized_to and dialogue_messages_collected >= assured_dialogue_num: + break if message.hidden: continue - + if isinstance(message, ReinforcementMessage) and not include_reinfocements: continue - if isinstance(message, DirectorMessage): + elif isinstance(message, DirectorMessage): if not keep_director: continue @@ -1387,45 +1634,30 @@ class Scene(Emitter): elif isinstance(keep_director, str) and message.source != keep_director: continue + + elif isinstance(message, ContextInvestigationMessage) and not keep_context_investigation: + continue + if count_tokens(parts_dialogue) + count_tokens(message) > budget_dialogue: break - + parts_dialogue.insert( - 0, message.as_format(conversation_format, mode=actor_direction_mode) + 0, + message.as_format(conversation_format, mode=actor_direction_mode) ) - - # collect context, ignore where end > len(history) - count - - for i in range(len(self.archived_history) - 1, -1, -1): - archive_history_entry = self.archived_history[i] - end = archive_history_entry.get("end") - start = archive_history_entry.get("start") - - if end is None: - continue - - if start > len(self.history) - count: - continue - - try: - time_message = util.iso8601_diff_to_human( - archive_history_entry["ts"], self.ts - ) - text = f"{time_message}: {archive_history_entry['text']}" - except Exception as e: - log.error("context_history", error=e, traceback=traceback.format_exc()) - text = archive_history_entry["text"] - - if count_tokens(parts_context) + count_tokens(text) > budget_context: - break - - parts_context.insert(0, condensed(text)) - + + if isinstance(message, CharacterMessage): + dialogue_messages_collected += 1 + + if count_tokens(parts_context + parts_dialogue) < 1024: intro = self.get_intro() if intro: parts_context.insert(0, intro) + + + return list(map(str, parts_context)) + list(map(str, parts_dialogue)) @@ -1450,13 +1682,14 @@ class Scene(Emitter): popped_reinforcement_messages = [] - while isinstance(message, ReinforcementMessage): + while isinstance(message, (ReinforcementMessage, ContextInvestigationMessage)): popped_reinforcement_messages.append(self.history.pop()) message = self.history[idx] log.debug(f"Rerunning message: {message} [{message.id}]") - if message.source == "player": + if message.source == "player" and not message.from_choice: + log.warning("Cannot rerun player's message", message=message) return current_rerun_context = rerun_context.get() @@ -1562,6 +1795,13 @@ class Scene(Emitter): character = self.get_character(character_name) if character.is_player: + + if message.from_choice: + log.info(f"Rerunning player's generated message: {message} [{message.id}]") + emit("remove_message", "", id=message.id) + await character.actor.generate_from_choice(message.from_choice) + return + emit("system", "Cannot rerun player's message") return @@ -1569,8 +1809,8 @@ class Scene(Emitter): # Call talk() for the most recent AI Actor actor = character.actor - - new_messages = await actor.talk() + + new_messages = await actor.talk(instruction=message.from_choice) # Print the new messages for item in new_messages: @@ -1658,7 +1898,7 @@ class Scene(Emitter): "scene_status", scene=self.name, scene_time=self.ts, - human_ts=util.iso8601_duration_to_human(self.ts, suffix=""), + human_ts=util.iso8601_duration_to_human(self.ts, suffix="") if self.ts else None, saved=self.saved, ) @@ -1723,6 +1963,84 @@ class Scene(Emitter): # TODO: need to adjust archived_history ts as well # but removal also probably means the history needs to be regenerated # anyway. + + def fix_time(self): + """ + New implementation of sync_time that will fix time across the board + using the base history as the sole source of truth. + + This means first identifying the time jumps in the base history by + looking for TimePassageMessages and then applying those time jumps + + to the archived history and the layered history based on their start and end + indexes. + """ + try: + ts = self.ts + self._fix_time() + except Exception as e: + log.exception("fix_time", exc=e) + self.ts = ts + + def _fix_time(self): + starting_time = "PT0S" + + for archived_entry in self.archived_history: + if "ts" in archived_entry and "end" not in archived_entry: + starting_time = archived_entry["ts"] + elif "end" in archived_entry: + break + + # store time jumps by index + time_jumps = [] + + for idx, message in enumerate(self.history): + if isinstance(message, TimePassageMessage): + time_jumps.append((idx, message.ts)) + + # now make the timejumps cumulative, meaning that each time jump + # will be the sum of all time jumps up to that point + cumulative_time_jumps = [] + ts = starting_time + for idx, ts_jump in time_jumps: + ts = util.iso8601_add(ts, ts_jump) + cumulative_time_jumps.append((idx, ts)) + + try: + ending_time = cumulative_time_jumps[-1][1] + except IndexError: + # no time jumps found + ending_time = starting_time + self.ts = ending_time + return + + # apply time jumps to the archived history + ts = starting_time + for _, entry in enumerate(self.archived_history): + + if "end" not in entry: + continue + + # we need to find best_ts by comparing entry["end"] + # index to time_jumps (find the closest time jump that is + # smaller than entry["end"]) + + best_ts = None + for jump_idx, jump_ts in cumulative_time_jumps: + if jump_idx < entry["end"]: + best_ts = jump_ts + else: + break + + if best_ts: + entry["ts"] = best_ts + ts = entry["ts"] + else: + entry["ts"] = ts + + # finally set scene time to last entry in time_jumps + log.debug("fix_time", ending_time=ending_time) + self.ts = ending_time def calc_time(self, start_idx: int = 0, end_idx: int = None): """ @@ -1737,7 +2055,7 @@ class Scene(Emitter): for message in self.history[start_idx:end_idx]: if isinstance(message, TimePassageMessage): - util.iso8601_add(ts, message.ts) + ts = util.iso8601_add(ts, message.ts) found = True if not found: @@ -1914,6 +2232,7 @@ class Scene(Emitter): if signal_game_loop: await self.signals["game_loop"].send(game_loop) + turn_start = signal_game_loop signal_game_loop = True for actor in self.actors: @@ -1952,6 +2271,13 @@ class Scene(Emitter): if not actor.character.is_player: await self.call_automated_actions() + elif turn_start: + await self.signals["player_turn_start"].send( + events.PlayerTurnStartEvent( + scene=self, + event_type="player_turn_start", + ) + ) try: message = await actor.talk() @@ -2140,6 +2466,7 @@ class Scene(Emitter): "history": scene.history, "environment": scene.environment, "archived_history": scene.archived_history, + "layered_history": scene.layered_history, "characters": [actor.character.serialize for actor in scene.actors], "inactive_characters": { name: character.serialize @@ -2259,6 +2586,7 @@ class Scene(Emitter): "history": scene.history, "environment": scene.environment, "archived_history": scene.archived_history, + "layered_history": scene.layered_history, "characters": [actor.character.serialize for actor in scene.actors], "inactive_characters": { name: character.serialize diff --git a/src/talemate/util/__init__.py b/src/talemate/util/__init__.py index 7e338ef9..596ac083 100644 --- a/src/talemate/util/__init__.py +++ b/src/talemate/util/__init__.py @@ -18,6 +18,7 @@ from thefuzz import fuzz from talemate.scene_message import SceneMessage from talemate.util.dialogue import * from talemate.util.prompt import * +from talemate.util.response import * log = structlog.get_logger("talemate.util") @@ -476,32 +477,35 @@ def duration_to_timedelta(duration): return duration # If it's an isodate.Duration object with separate year, month, day, hour, minute, second attributes - days = int(duration.years) * 365 + int(duration.months) * 30 + int(duration.days) - seconds = duration.tdelta.seconds + days = int(duration.years * 365 + duration.months * 30 + duration.days) + seconds = int(duration.tdelta.seconds if hasattr(duration, 'tdelta') else 0) return datetime.timedelta(days=days, seconds=seconds) def timedelta_to_duration(delta): """Convert a datetime.timedelta object to an isodate.Duration object.""" - # Extract days and convert to years, months, and days - days = delta.days - years = days // 365 - days %= 365 - months = days // 30 - days %= 30 - # Convert remaining seconds to hours, minutes, and seconds + total_days = delta.days + + # Convert days back to years and months + years = total_days // 365 + remaining_days = total_days % 365 + months = remaining_days // 30 + days = remaining_days % 30 + + # Convert remaining seconds seconds = delta.seconds hours = seconds // 3600 seconds %= 3600 minutes = seconds // 60 seconds %= 60 + return isodate.Duration( years=years, months=months, days=days, hours=hours, minutes=minutes, - seconds=seconds, + seconds=seconds ) @@ -531,7 +535,58 @@ def iso8601_diff(duration_str1, duration_str2): return difference -def iso8601_duration_to_human(iso_duration, suffix: str = " ago"): +def flatten_duration_components(years: int, months: int, weeks: int, days: int, + hours: int, minutes: int, seconds: int): + """ + Flatten duration components based on total duration following specific rules. + Returns adjusted component values based on the total duration. + """ + + total_days = years * 365 + months * 30 + weeks * 7 + days + total_months = total_days // 30 + + # Less than 1 day - keep original granularity + if total_days < 1: + return years, months, weeks, days, hours, minutes, seconds + + # Less than 3 days - show only days and hours + elif total_days < 3: + if minutes >= 30: # Round up hours if 30+ minutes + hours += 1 + return 0, 0, 0, total_days, hours, 0, 0 + + # Less than a month - show only days + elif total_days < 30: + return 0, 0, 0, total_days, 0, 0, 0 + + # Less than 6 months - show months and days + elif total_days < 180: + new_months = total_days // 30 + new_days = total_days % 30 + return 0, new_months, 0, new_days, 0, 0, 0 + + # Less than 1 year - show only months + elif total_months < 12: + new_months = total_months + if days > 15: # Round up months if 15+ days remain + new_months += 1 + return 0, new_months, 0, 0, 0, 0, 0 + + # Less than 3 years - show years and months + elif total_months < 36: + new_years = total_months // 12 + new_months = total_months % 12 + return new_years, new_months, 0, 0, 0, 0, 0 + + # More than 3 years - show only years + else: + new_years = total_months // 12 + if months >= 6: # Round up years if 6+ months remain + new_years += 1 + return new_years, 0, 0, 0, 0, 0, 0 + +def iso8601_duration_to_human(iso_duration, suffix: str = " ago", + zero_time_default: str = "Recently", flatten: bool = True): # Parse the ISO8601 duration string into an isodate duration object if not isinstance(iso_duration, isodate.Duration): duration = isodate.parse_duration(iso_duration) @@ -554,10 +609,15 @@ def iso8601_duration_to_human(iso_duration, suffix: str = " ago"): minutes = (duration.seconds % 3600) // 60 seconds = duration.seconds % 60 - # Adjust for cases where duration is a timedelta object # Convert days to weeks and days if applicable weeks, days = divmod(days, 7) + # If flattening is requested, adjust the components + if flatten: + years, months, weeks, days, hours, minutes, seconds = flatten_duration_components( + years, months, weeks, days, hours, minutes, seconds + ) + # Build the human-readable components components = [] if years: @@ -582,18 +642,18 @@ def iso8601_duration_to_human(iso_duration, suffix: str = " ago"): elif components: human_str = components[0] else: - human_str = "Moments" + return zero_time_default return f"{human_str}{suffix}" -def iso8601_diff_to_human(start, end): +def iso8601_diff_to_human(start, end, flatten: bool = True): if not start or not end: return "" diff = iso8601_diff(start, end) - return iso8601_duration_to_human(diff) + return iso8601_duration_to_human(diff, flatten=flatten) def iso8601_add(date_a: str, date_b: str) -> str: @@ -935,6 +995,14 @@ def ensure_dialog_format(line: str, talking_character: str = None) -> str: if talking_character: line = line[len(talking_character) + 1 :].lstrip() + + if line.startswith('*') and line.startswith('*'): + if line.count("*") == 2 and not line.count('"'): + return f"{talking_character}: {line}" if talking_character else line + + if line.startswith('"') and line.endswith('"'): + if line.count('"') == 2 and not line.count('*'): + return f"{talking_character}: {line}" if talking_character else line lines = [] diff --git a/src/talemate/util/response.py b/src/talemate/util/response.py index 75f5b7fe..b0a912a8 100644 --- a/src/talemate/util/response.py +++ b/src/talemate/util/response.py @@ -17,8 +17,10 @@ def extract_list(response: str) -> list: items = [] # Locate the beginning of the list - lines = response.split("\n") + + # strip empty lines + lines = [line for line in lines if line.strip() != ""] list_start = None diff --git a/src/talemate/version.py b/src/talemate/version.py index 84eb2852..c937a8ce 100644 --- a/src/talemate/version.py +++ b/src/talemate/version.py @@ -1,3 +1,3 @@ __all__ = ["VERSION"] -VERSION = "0.27.0" \ No newline at end of file +VERSION = "0.28.0" \ No newline at end of file diff --git a/talemate_frontend/package-lock.json b/talemate_frontend/package-lock.json index f8d6176c..bbb84917 100644 --- a/talemate_frontend/package-lock.json +++ b/talemate_frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "talemate_frontend", - "version": "0.27.0", + "version": "0.28.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "talemate_frontend", - "version": "0.27.0", + "version": "0.28.0", "dependencies": { "@codemirror/lang-markdown": "^6.2.5", "@codemirror/theme-one-dark": "^6.1.2", @@ -4701,9 +4701,9 @@ "dev": true }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true, "engines": { "node": ">= 0.6" @@ -4808,9 +4808,9 @@ "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "dependencies": { "path-key": "^3.1.0", @@ -6161,9 +6161,9 @@ } }, "node_modules/execa/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, "dependencies": { "nice-try": "^1.0.4", @@ -6228,9 +6228,9 @@ } }, "node_modules/express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "dev": true, "dependencies": { "accepts": "~1.3.8", @@ -6238,7 +6238,7 @@ "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -7084,9 +7084,9 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", "dev": true, "dependencies": { "@types/http-proxy": "^1.17.8", diff --git a/talemate_frontend/package.json b/talemate_frontend/package.json index cdb079d0..3f9b12a0 100644 --- a/talemate_frontend/package.json +++ b/talemate_frontend/package.json @@ -1,6 +1,6 @@ { "name": "talemate_frontend", - "version": "0.27.0", + "version": "0.28.0", "private": true, "scripts": { "serve": "vue-cli-service serve", diff --git a/talemate_frontend/src/components/AIAgent.vue b/talemate_frontend/src/components/AIAgent.vue index 1cb656f4..2d31a806 100644 --- a/talemate_frontend/src/components/AIAgent.vue +++ b/talemate_frontend/src/components/AIAgent.vue @@ -62,7 +62,7 @@ --> - + @@ -162,6 +162,14 @@ export default { updateDialog(newVal) { this.state.dialog = newVal; }, + openSettings(agentName, section) { + let index = this.state.agents.findIndex(a => a.name === agentName); + if (index !== -1) { + this.editAgent(index); + if(section) + this.$refs.modal.tab = section; + } + }, handleMessage(data) { // Handle agent_status message type if (data.type === 'agent_status') { diff --git a/talemate_frontend/src/components/AgentModal.vue b/talemate_frontend/src/components/AgentModal.vue index 6646d008..395a53be 100644 --- a/talemate_frontend/src/components/AgentModal.vue +++ b/talemate_frontend/src/components/AgentModal.vue @@ -19,46 +19,51 @@ - + {{ item.icon }} {{ item.label }} - - + - - - This agent is currently experimental and may significantly decrease performance and / or require - strong LLMs to function properly. -
- + -

{{ agent.data.actions[key].description }}

+

+ {{ agent.data.actions[key].description }} +

+ +
+ + + +
+
-
+
+ + - + @@ -70,6 +75,7 @@ +
{{ action_config.label }}
{{ action_config.note }}
@@ -81,6 +87,18 @@ + + + + + + + This agent is currently experimental and may significantly decrease performance and / or require + strong LLMs to function properly. + + + + @@ -109,7 +127,9 @@ export default { // will cycle through all actions, and each each action that has `container` = True, will be added to the tabs // will always add a general tab for the general agent settings - let tabs = [{ name: "_config", label: "General", icon: "mdi-cog" }]; + let tabs = [{ name: "_config", label: "General", icon: "mdi-cog", action: {} }]; + + console.log("Agent: ", this.agent); for (let key in this.agent.actions) { let action = this.agent.actions[key]; @@ -119,7 +139,7 @@ export default { if(this.testActionConditional(action) === false) continue; - tabs.push({ name: key, label: action.label, icon: action.icon }); + tabs.push({ name: key, label: action.label, icon: action.icon, action:action }); } } @@ -177,8 +197,8 @@ export default { return 'Enable'; } }, - actionAlwaysEnabled(actionName) { - if (actionName.charAt(0) === '_') { + actionAlwaysVisible(actionName, action) { + if (actionName.charAt(0) === '_' || action.container) { return true; } else { return false; @@ -220,7 +240,7 @@ export default { this.saveTimeout = setTimeout(() => { this.$emit('save', this.agent); - }, 500); + }, 1500); //this.$emit('save', this.agent); } diff --git a/talemate_frontend/src/components/AppConfig.vue b/talemate_frontend/src/components/AppConfig.vue index b42770bd..05aa8f1c 100644 --- a/talemate_frontend/src/components/AppConfig.vue +++ b/talemate_frontend/src/components/AppConfig.vue @@ -7,6 +7,10 @@ mdi-gamepad-square Game + + mdi-palette-outline + Appearance + mdi-application Application @@ -90,6 +94,16 @@ + + + + + + @@ -341,11 +355,13 @@ \ No newline at end of file diff --git a/talemate_frontend/src/components/AppConfigAppearanceScene.vue b/talemate_frontend/src/components/AppConfigAppearanceScene.vue new file mode 100644 index 00000000..726b37d1 --- /dev/null +++ b/talemate_frontend/src/components/AppConfigAppearanceScene.vue @@ -0,0 +1,189 @@ + + + \ No newline at end of file diff --git a/talemate_frontend/src/components/CharacterMessage.vue b/talemate_frontend/src/components/CharacterMessage.vue index f084008c..247f2db9 100644 --- a/talemate_frontend/src/components/CharacterMessage.vue +++ b/talemate_frontend/src/components/CharacterMessage.vue @@ -1,7 +1,7 @@

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 literal 0 HcmV?d00001 diff --git a/docs/img/0.28.0/director-dynamic-actions-settings.png b/docs/img/0.28.0/director-dynamic-actions-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..4c45291c370f2faddb1b524c2fb7e404520d56b5 GIT binary patch literal 54484 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 literal 0 HcmV?d00001 diff --git a/docs/img/0.28.0/director-general-settings.png b/docs/img/0.28.0/director-general-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..232aa75c1a03ead8767edc09bdbe376352c30cc7 GIT binary patch literal 45645 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�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 AA^-pY literal 0 HcmV?d00001 diff --git a/docs/img/0.28.0/quick-action.png b/docs/img/0.28.0/quick-action.png new file mode 100644 index 0000000000000000000000000000000000000000..2a0eb67c933e25c014513b176c8ad102ebe03d34 GIT binary patch literal 12417 zcma*N2|N_s_dl*jiL%R5vWK#Z>;_NPh)SsJJV=b4#x@dVA4#%P5y`$ZcET{SjeX3F zEW_9tV;jTZH}&~G-)}w7_xpeS-Pg-&hI{Y1_uTh6_nh~+F?Wph7|vZfM@2=&V4$yk zkBW+#K>2J%OGEiBQhY;+ii)4gKwIlR=+t^PsoKdby7 zjP%p#V&|{28=Yo#l@Ulf9eF+FVz@StKVANm(Sj%hTx#7dnYDIX4?S@%{W30gjG}S=N}qO0&W@(< z*+m)ZzrTp&hPQeP+y)EO$6M+C{l{N=P*HObrebEYx&D{`$>?!aMCS^f!97$&G^GD) z>b_?>O*&03lfTUNw{Sa%j2(-H-nkw*j~s8g|6a_0_Y7~*CS#_L0}ulbb~67x@mKwe z6?^VEB})dd^6CKID~oPe zEmN&(C*(g9)%kC^|0C)hxwV?wGMFW-@y`L>7k-x)`u=gY;R-Y_ zB_o3w@c5Gr9;c}OJ;|t(M8lr++=FTAqfJAu$T7Dj;D!YDNXGyV{U12|y)z?uYT$=} z3y23=E;q8x_Ov>K_w*h_Dvyi>#(^xxW6DZ^)!yI*)T7_wRN*WmbMF1rg@q`nn%5_6 zvvD7ro+;UyD2e^i`hUgUPeE+`nyD2$UE9Q_?N-ENObExSHPXFWbO1c!!GiBm8A=(G zD|YMZ``nAdx&I2=!7k0#KWlA?A(0+wmWz$2n{wDhy@|;-aiAaV_cc+#@KsxGFtK|b zDan_e{D~KtB)^lf5h#RJoOUj(LKd}NH5>>DLVM2YSzO3jC!kJDc`(jT$$iyf|2m`a zZ;tOQ!ZGEI2F#loN=s(l2yvE^AvQiSOT6D#Zs%7LSkZFU27ABsf7;ogIQ3ENw#{U9 zg7qIk_aM#grM7e0YJ$0Dr0)P<6Vk+I(cT=EzaakGXhj1F*!G}0%q@8jgu|wK+nvv^1-KcL~>U7cyd=kNS`=M?sSYx zXXspiZTg3!R-k(LxpyRIyHWW?7N+r^y=73%EOmU zF3PA`nrm1(H%>_X^T_BU!bP-HyF-ulf;k3~1HSKt%`c`z<8j&h5??d5Lq?*u0H8sg zv0EWov|KcA7&{U&|F!6MIpJEcpzPeICEJN?^$7qI!HUwHnsHp4V2i6TcpLbcI9ZEw zB5_08=VPcWY7S!mk9DZXs&+Sbo=?o!Hv`cH4L?eSC&lcih+DjE#J4n-*fa;}YP9p0 zls$LBg`|lSV6`Ky;LbE@XbGTlM&~MTsm^_F?(S(fb5y@fLZLy${ zfFSIjbQLmuc{bZT~|aqI%wq1mH5Ux=pNl-MR61*A`AfXmV6V zSb4TC142vNr@c`^IFzWZ1k=%>DXuC-W2Lt|a^EO1UwP60iXa$O<%BD1-1rR6VtQ2c zl6~ME0W(eZq_^sla{S$DWk~dY31INM{I>b6+go})hSDwf_Jc_uEqe1bjvVWEKSa5h z^&vxxrUb#=CkI~{zRoLBNeQL?19EAW^gH6{>R(MoY263yz{fp?jY%2%hNBbuR)52q%`C})*2o^#_NJ@(t%%q4kcev7}#MQ!z5@^n1_C1f_4N;{NE1s zLgi785Y|GX*>zsf#sNHGxo!~LSFO_|zN&3uj<8|$+#810NdD%FDLcCh+Y5$7YplL&8fju1hd?yn4=v@boZ3~4FGnZurMdjy?v`1{y>&5q z->jF9OCR<$^!9N z`r+b=(fg70haUgHgc{9<=yhVqYi)9KEx=q#W%e-i_SFY4Wb_`lN8S6Tonb>9c^kp^ z`JMXAGwL2ZnAqrZaztdhF_|t;)4Ja&{aHQ8eh%Mj|Y>?+0>41MkU$Bo`;Z0rFO;U!mkt35;#8w)JRztNpz6 zeQ&kxJ~^kc&t@a-(XRZ>8vAWbJ+Flg3+iLMUjx>}f{$jI!me6ad3VYaQ>}aqNJscE z+fIWtCiR^=sIZfx!bz_I^_--q?R7KH&lluuH&Bqn ztc$~C0{eW|c6UZhQu&TIqs(&tYE5&=ZH$opJv^=M(7b^AVPc%pYM;xAgQR!gvr{$h z*#r^FRU7l5J&PUte}rPr?&t^iZR-Qv&vuJjlu10D4t-jxqz4o73TD}i)Oyf-pYinN zcKoQRN$F%Y8bYPJCUDF=8Qts%Q7#};_AV)!8{&hLirddi1T>sG>us1uJ2_2WP{h?Q z=7@{tfE;jVwIDNBthRjH=|u0hC%Vz?NMP#`+gEpdTl7_vPvvLUF}K5dBildd#ECU# z`wl3laASo_NxM{K^$6`wQxkPF)J@A37DBW+6vYN{lUiWjTI`$ z^h*MeH!pQ87v|bnx9(%(a3$3PpV$0nUvP4ig&mCKnv)t9GTc5}{887Xfoo@sxl9AS zqipcb@umpKSQ+=`TGDM$ei5glR~v*rMcP%w28;ZQ>I09ezT`){E@mwQCK^OAd5$j?A9iwRrW7q}{*sSkIZwV2DaKqJxvF)R=e{~z z5*xo+9j(VN$a~}BGw#R}zLS0UbB!{V!suaDd{cG90&n}Vs0PX4#wjlti{Aa`mVD6U zXs5zw0aP=hCmR$)zXgJi`I~3V#WtFw4W91tm9u>C$HS7DwuEX++~J$)S=}BLbmdn| z9#lH?VY>#5 zCa-STOopslPJhOZou;;zrPB<==DM}_D%{Bev?N(#U<$usl1uo%-1kY;$-eDNL9EMG zIhKZfJ70YvP(qNGrOPwz4=`y9m$Kiy^0`=yC4kV$X(4D-Tu0k>^)ZVpEBG!Bh+@N;%laGoA%POMTcmFb!H=I-;!E=Yj z75(|3LYH5Z%b!sEUGCebBGwaN>7?RKr6C7uzkb+ zYO`3c&7>W*IhKg=Y%SWUz(nkbm#JWOUpqH?FFO4m&Adct{^vd;@jw?X4q3OnRgXT^ z_9@bZ3>%>xbKoM_sB1GtS7NOSpDKI|K(|=>JWM7a< z_*|YPDW)CbOJ}RTsLwT-Xx~iU>KzMSq78)B>k&y=rJJ==L2frrwYgCp#Ca#&gYg9| zy~m+ka?NT+Ao-$YZ{RiC09Abd>LHc830yK+@K$+bzz!z@L2*w{wjzOR1e5j#&hROm zGXdK<=Jtmy8N?`>f9#avoRZmFNp>!k>Z*^{>fw(JgaWtRsCM^K!zACAuUir%H(IZLM?s_=vBixccn!xOR9>wNA4!OfHFE(O++? zH+5;3hiY>41)nHg1p|I}PWqS|Ai@heX_DeKZ$+JH3qA>wI%Rz6FFe_poMK_~FjNUb zob|oPJm6ZGZ4R8}gGLvIpsslh8;IWim@0og@M}_?Bo;oR6vxL04Er^>2=CUsFdva6 z6iH&(N;yC=ulakwGXJQ$5NKXI0{@e1FAyxs%kuJ$W3W1(hoirhEnn-wO0js-=hF3u znm)Ou_=BMO7URTM<2|YleGs`!LaV9LR-8S_kSs{` zh0e%@3kDPXgUv@Pm8V6%CIHq7%STp=_tEK^Ht92VXHPr5WT<2d>);@eMNa`9agH2* z$AfD#t`5N|Y5sTDzXn2qBEKFTfZ}L*b}no6>0uYzpQyQBDWwGIPp6_mVi*35m&BJe zRkN0yd>M#ZVSX8{FtxfcUDkO*%F$7??>rHL@U_Q+y&^yxizl!-J+{-)W=DpK8>?`2 zXw_=iM>)b*A~iFN5LO^G=p8XQw&(leeV+R>=JCd<=4cQZe!^yQ{7?r$vQWER-OT(g zNYrM7dBX_8%u5o;J2`ilHCeQCFL0Hb37yuVBt}*pbQV?RjVrbSPQjW3^P`wlR$Q0;W6AHv7bF zfDcoPdfN~6gQ63uRp85A1HZ?jlzc;mi`w5IU@-Vmf^EfAl&FWLy6Y3m7ov#md$2|a zdUIKKMNI!c28A2^Wp}4-YTo3}<6Omu*Jc0Asqv!&#qDou)f=21bM>Kq@~>@A%rMwK z_GDdbo`Jbi`{?5QW%@ePdqyhFKlJDdM;Kr2_aNB zVWsT*Qm0I8B(c^HMH{Mu#)sq(znu%^3%%HABUwiPaTe#iUAzm^$vUE?Fg52X?Vl>_ z`wEjA6z+1_QaeYgZNf?7sL#Jm@H5L9dy3^R1D~NVisGv__|61^;BD?64P?bfTF$ZgXsh9rBG|JFj>=5f4RG z19N0(-9)g~q-|9~Sp}P|z54b_y2bBnt#Fp(Kc&j8M;8cjf2s#+CG~rjnGY%+da9Zg zFGsBfcs#7!DeytJ6&H^MnWK~!c@Yo1;gZE0`~BGLinIN3|JRZ}T;#gHIRLZe*k;{f z-HrAIdj^eUe$FiuMhj2Q1>@x?)EH&#fAYDyGL&4IR9I^3uREin*Z&Gx;kYRS2O(kNS*Dh=;=*QBjigY1~bcCE}0~U#eq!jfnIn0L%kGG4$;fg zp>Ghth0(Tb30SrA8++?wQq-y8ze@k9*O>(R2e9&8-8`-f7}&q&v7-@5I`t!aEN}Qd z=l#jQe!Xn}RS*ohFnVQxO8It9y8Q0}I0a38QWRF2gYdso$I9)`bjX*lT}62GZ>+st z2L}IBgiH)&ZI-a$u74WP59tfEl&O95--&qBbh~c#<^OAEb^#YFqHCjx@s`xo_)vUs z@3^I>^|(zi5c8=`w|dO3_2dXIji)3^R*a5PQ7AD_xLhOkDNL~1UO=M)ZzHkeuprap z(f;n73v+E8hoo4sd8ybcg%jzXyL2UVPYz%{i>CzIVtfaKQGGArnj>6k>@2O{L^AJF zP5Jan;waK2Q*FV4C`uMs!0OX;t?&)yzVKX8QRGnFsB^?cIfCDo)2%`=9+`VWEoHiC z73B>ppQ|X`&w!Fo7AYvr9#@fBM#+u_dvvWy?pqp}#7as$Xgm2(Wd22!kf)r%v?zcO zv$b0u*6e_#1ga80QW33pY$EoGmBb>G(9c$s>^J2Vd>wqaZc)~HeBiU)uV|6A(1{NrlpL{iMPPPs?y16e2kD-iIbCkxeX08S*FKbZlS#dK zLZg<`syIG#i#}6k(lA&Sv))#*a@%xD&tC&m#K+Afe!J#O^XNDG&eV>J&enAUxsFPg7wfHi1LhlwJY%7GQ!|hQR{Ya!Hn26{t5tgoB_INBor@kG-;qGJ zQIeoSR^;uCDDT{=#?AKgy>N|VLQ9Vqmv^%5gC#`?@)%*nM5*KP99Z3*&L_-Rv}~nRtwS;9*kwvm zCuw_#MxJ~Ayl-At&V~8ajdw`7cJ=+4h~Be+&2U%Er!Rz0NNM6h;3>qeOvlQNDK)C4 zv1z5rU37H7je+L;PzuNJ>9pGOEOvj9L_2(%Bc!Nq+5erk)nZPthw^&ONP+o6raNPD z1zp~)IiobLH?EyLi4(K2;$>GYfnUb%qp{lt%H_q|dB)t-12$)ckLUr;_x2*@1G#pc zUx8d!M1Lq2A@4!rt6k!9wzkL#a;2ukMH=sVj||E~*>*+Z_RpN>xZj>^;3gvcQ1kss ztaxCgEpiGMbQMCQ3~2-~yk59F+E(T#!%G@YZIQnLUGmZBTb$?QxF9ljMdXM}v~sB{ zQRh`2MCEhSb~ZlCC#qEie8E^6ZeK&NKC)h@M-p75ms2zC=Wp6~I+kGKMT<=0XFqV~ zCbq8gx?GI6g5fEN?$|jZ#V%CN@H!m-AYKgLN)){ty_H78`m86BF}mx_tLkXa&vifs z8T-m}-`qJE*osTs?LXYB-YW3>q=j+G4gK78zIJ~opBlmPr@T+T9EY9t1Nqqf`q`J< zpF!!~!X`tx12GYFOxP>8a}OsM3oZp<@1Y%zzf}(pJdw7SvxJXJykN7)H9-6zbY38Q zv8GdKGK(V4Yx!fU`RwZxTyJV>ad}HaLl^X%oMd&qtleCeP zTaeAWLS?LRv=bY+=1&P;&2Tw$osx~TEffyRJm4eb)7{03fyxwirI?30-i?jyG|Vh;eB2ArkNpcZnuuSKV`YMWIF2rk2h8 zl0ynl6zirtftH8Jw|iW+Qs>D8)7-HIXxXGb+p(F3*|bC8jw#ad;g>Jr{-Ju@e51`1 z#4%E$ck%7m-AHJ{w>#d!lvLbktiJ%Dh!*fg-PbeFbC1xkJ>XaGC>XUy8y(1gQH;pH zNqXsx?lb{!C7ZP{s%?Jlan4Zsh~Hmx(NHb5F0OX8P%YfouSVb5kS%!M>Qs4}u^wKm zzeAc_R3_5q=C;p1uwbf3NXbWDhKj~_#&Mc#7s^DN%!yCh`*xnP$SO8@%zgGoimOHD zJ3lY?xw>2xeblDu#BJ!3DDYgIkW+-@j5bjSUpciJsMZc*gAZAcD2JZH4fwiuJxHp` zW8_EI*HZW}Gsis&?{AK*O9)sN!$@Vav~rM_Mn2tCZua-TxVPFBvtasir6!)c!?hgP!Hm{_EU8}rkXZ^~`t-$;^lP7>QA&?3oKm5C!WaW3>|6*H z6|>rpw*aJ9369N=-Oe}EnW4uZoqOey>p-XQ)(Mv{^*}MjHPya`vaOYm4EK4~u+#;k zW#SAvZb@`}MjYLMeya(il^Mf+hyZue4FU-X*j-EeI zS&MDHk%Ulkz&8`6+`r*$tb@zEeANGPU{+-nfqqCVOc*>JPWH~{6E&I01jG=+w~%g) zNRvixOk^74fEi*HT@PO2clwqngK-xaUqu&ZK|u_j6UliSio1lMGDmK>&j=#v`g4;W z4p~Ezz`Y{Hcm#8c5sb~b#?TTKfHEro$P+l9l)_aucZ*a~+*{SC)Jy7DOEzCg0TqCs zxTDR9j&(*&GRJ0(HybM0?K`CDqpAJ=*ey&2yi%LryU}Hst8)nLU{p1#WX(Mc>1W%b zn1Uv1wC%joCF)CHYd9n!`2L^mGy1|Y;+Bu~tMi!EEBElsc7c3#3VjP@N8mLd zzIM-E{jRc5vDB9yiuBc1j&O|e{l3Vh;WsiqyZBNZeKCyw!`w`!mP!I61O4)l-Ako! zLWBTPFA1_Ibh(V=%{$U@V^0Vn4|wxlTMa3HOWwFHE^r{w-8XK!fR9?G^z=~L^;e_( z1(GJR*^vyYJ$y*zL^V!dm3Fb&ucs5LH+=6m^XIN~(<*MWt(Oq5nnC9yvM=NdN13`L zW-TZv_#XR$fKW$f)^wLIxBX4T??##|8XQ~;<6=*p(Dcs%5e!4Jm@au5hqVmg;(#pG z^e?@O+c;c%pLH);4I=8;OJ!V}rnYnA z2K8f=lJO7BWhJfG4WXt`?~ti+4nJ?q=y6hQLCv<&9!?Evin7hbKz%x%QNa|v#wI&jUfjyMZl>Wit%SAWkC9>b-$`}Uw13V>?mr;o{P#qy=u zUk~4*&wy|#E`Mz8+^F%6wuDKC0)WltI3Z6I1T~(Nz-6IU$m8U|#M0l>7u{F%T4&}6!bMcvV0kAidCY~}%!|i#Ez}Rd zl^ks{IGC%0ZCj_#4p>-HA{*0d87iQQHxx4}XW*Woh?XYGP?P{ZVTQYObByO<*kpz4q@7xDwE!5^me6aR8cD#9?6C9E=lDFST#)aq| zvd|!VT;da5B1^BwCtO|hPrkm7pa88{t%hfrcH$Tje+~263-h)x&3Mwe5vL}$(QxPw zO*x!6s}=?E@;$n%`fNRLKmkAl&Cd=$ zMQxmNewkSs_97UYY0#v6L{h;#Uu@#;h9$1#p`WQ(CNqJRCm);U;6Pj3ORYufkGGRo zZ__9Gns2bMy9=3Ly!M^;=~Sq8_jZ%3YN#bwWr@S1mEp^QeTeFWxos%)T^z>!A4OMOCMG+`ynhhL)1TQ#|%OlGdKh~fTs7?6T5mBhmbFJ+|$Fg>pp=kM-j zHO1-im`$VW;_+eC{wcC&?UOA;#vb^af~tTuavt`&g5W_vW(YWhQzyb7tG(%SA5$1} zW}`De^6gEizi~A-R_`?1^K++qVKk)S9)9XDtdlTrqh1(6O)g_D!M~xO58-gEBq~Ar zMpy#CZ7|=VG8sx9+czhbTdl;ulOERSaIVTyde>UymlsXxh55TCTz09oM$#IkX+>VA z(+Q)Ot|+Dp6nV}(8EYBfDo(lj@0u{fDiE>3)+(44ABhN+*7~OEX2(OFM`PwopA@dX z%wE6T3(!a|t+;D^9^pX#fhgtj?cDGC2fG2F+ZCPNI%?H-{U8~Y?VtL#I#b|Q-yAy< zgTI>TmH+AbxlUQ4elbm4-!D`AZ1#KeGDj}|+4)7~lBTT)$rVbb;_j;LZIYML(I%B2 zxBmlDcN9l1TVTJ{nyb+n%8gqequ2D5B6}0J(|F4=&9U3@A|AWF6i|t4kh-54<6BoB zN)VxHxGuoc`^t&uS~tK_hV?iuRjRUTOxje#^?MJLFMm&jXF-2>s-I|*isC+M*Qh2x zq2{_$!KxK%sv6GVkevu@e@Ez&AI)Cea*6I{p`!CKA@~EdVe|0M8%S>PLXi zVewJ2O<5j;jhS6U_q_i|-D*8GDf6N8e!9CE`DP zlESF**xIdk5J%gdXCNh)6pKaw<9g23i%1l&+{2i}-Lj(ZtA*eDT@wPIJjpvK ziinK5P4Y*5h}%trf*6Cng9-vz_+7N z35)_bI<83$@Yfq8CcvKIW#`)r0a8{c{~cn)hzfesSq_P*S6)zU)5V1suDu^ zUE644Mfp-V%VEgcFqDm3`z{4M+379DhX#__q^mpKw> zid(JmFu8Z{wB~GGS(q3^s-NwPT3tGI!zZ%yT*O+WCC#KfYn`yCAJ$#;e%|m7<*APk zx#6b|`zB3Pf=jvXP`G%hw#YG&^pk0X-_e2Vj7T zoy;4gwzGH@2kCu5tM>V9rH^u3tlJkxVk{@Gg;}{|`X=&uzZM-X4}KD2_O<~b8$e~{ zQdO`f(cDvE#8S6nmPKJG>kF~)0>^u z4O={B!OYXE`OSi*AutJKW}4o>x3g>_`If+lI*5I{MRK&~d7-x{Yxz||IRydNFxR#( zuj*J@4t7eqU#~REZlkF@a=X=-27Hp4*D6&z)KxioHB)OuZm)YrO=m$bEaeXuJFhr zRN#=c>m%CSS(T>z9@Pnxf2lfK!dncy=Y>3$q+Ko2^Jki!DUaDk{n3tHj-$D27RY*D zX!D4KhRQwT`Iw*^OR5Cx^)ivL7&$22tq2J4vR+QZ3cmtQuMP-ZaAD1hS>w_8wT|KiwsBw}m#Q5#bP&zB1`hYgDeO5oJ z`{=TVfD$SK!O!)KOx4GmG$h4ec(WW^9S3b?iM<0A* zpr)gV%9y>PF8^jyRN|7y?N2q7fUj%3vMnY-#e;=_jy3AYGZs_)F!8+UHODYa!EIQ- z#aL-Jas{xw*ziq~P?Y6e$Tw@J(UZ7|5;RioxZ;7{dNX2R^DVD^KmmEwAhg`Y>u^sG zi(eu89(C^;SmyXD`7d_|JaLp;)QCbltG44hWE}uZ_tIVsbEvoDvcjKZzuLSJ)!XP) zuzv-rWSE_`@Sb;+vd!sWOm?d1ct-LWfo2ycEpvjbzHJG{>q;A8=8`HEff~h2 z@nfG%cS3jEY8tavTNh@e(Px}z%#PHT?@T9PM8H-3X@3dY07fs3jGLuyE6E=8t1TXf z`@t(6O}{7F`#=&to!?0|N|WunI}Ov$JJ54)e-Q0AQ(nr{=MR8?TUFXY0+YQ^iRHHV z#DzRbXB`+quS3~non1&VJ`c(%2d9r7y#rAJL`~ZqCp+_*7jS77Cui5}D69L%iKZea zrKHWTrORkt5MWNz%wmdg6xmF-ijTYE?7#KUDfJ2)>Ih;RgsVdyGqo98FDddkyYIvc zOkSM3?&=tvI5p+l*~LMyAG0gFfVR?KbdLo=Z&nQ#SqLmV56$XA0VC}r%#_!4E00`| z$I#k!bp!f}OI>fB)^#0)ja55Eu4PB$zpzMspzNfRw8!|qFsxcZAG9ZT(9jzzFJ5~D zvHvMK@%wo)lI`FY5VgR|X0u?obGZhUW_@n$&AUF#BnbuTb%m~bQeM~LY1;m~7?5_B zz9KgE8PePqNL)wjYG5Kv;ELAncK{N)n<(R$HoxVtCP!IaQD5g+~38s!ygA0w^^f7mME>yZxsC^7jMuC-7Wq#FG>L j@A^i3;{WI9nGS$}rI|3gpc2KSZMMi0rO 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