From 9ec873600dfedbb2dbbf481f0e61bee6fd21878d Mon Sep 17 00:00:00 2001 From: PenBo1 Date: Mon, 8 Sep 2025 11:58:44 +0800 Subject: [PATCH] Add files via upload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加代理设置选项; 优化新版本google-generativeai 不支持 Client 类问题; 优化批量生成章节界面,使用customtkinter统一设计风格; --- config.example.json | 10 ++ config_manager.py | 99 ++++++++++++++++-- llm_adapters.py | 29 +++-- .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 699 bytes .../__pycache__/architecture.cpython-312.pyc | Bin 0 -> 9325 bytes .../__pycache__/blueprint.cpython-312.pyc | Bin 0 -> 8139 bytes .../__pycache__/chapter.cpython-312.pyc | Bin 0 -> 21069 bytes .../__pycache__/common.cpython-312.pyc | Bin 0 -> 3981 bytes .../__pycache__/finalization.cpython-312.pyc | Bin 0 -> 4572 bytes .../__pycache__/knowledge.cpython-312.pyc | Bin 0 -> 4236 bytes .../vectorstore_utils.cpython-312.pyc | Bin 0 -> 11760 bytes requirements.txt | Bin 816 -> 2997 bytes ui/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 205 bytes ui/__pycache__/chapters_tab.cpython-312.pyc | Bin 0 -> 9842 bytes ui/__pycache__/character_tab.cpython-312.pyc | Bin 0 -> 4469 bytes ui/__pycache__/config_tab.cpython-312.pyc | Bin 0 -> 45583 bytes ui/__pycache__/context_menu.cpython-312.pyc | Bin 0 -> 3828 bytes ui/__pycache__/directory_tab.cpython-312.pyc | Bin 0 -> 4489 bytes .../generation_handlers.cpython-312.pyc | Bin 0 -> 47041 bytes ui/__pycache__/main_tab.cpython-312.pyc | Bin 0 -> 7068 bytes ui/__pycache__/main_window.cpython-312.pyc | Bin 0 -> 23656 bytes .../novel_params_tab.cpython-312.pyc | Bin 0 -> 10957 bytes ui/__pycache__/other_settings.cpython-312.pyc | Bin 0 -> 16614 bytes ui/__pycache__/role_library.cpython-312.pyc | Bin 0 -> 82328 bytes ui/__pycache__/setting_tab.cpython-312.pyc | Bin 0 -> 4525 bytes ui/__pycache__/summary_tab.cpython-312.pyc | Bin 0 -> 4614 bytes ui/config_tab.py | 86 ++++++++++++++- ui/generation_handlers.py | 67 ++++++++---- ui/main_window.py | 12 +++ 29 files changed, 265 insertions(+), 38 deletions(-) create mode 100644 novel_generator/__pycache__/__init__.cpython-312.pyc create mode 100644 novel_generator/__pycache__/architecture.cpython-312.pyc create mode 100644 novel_generator/__pycache__/blueprint.cpython-312.pyc create mode 100644 novel_generator/__pycache__/chapter.cpython-312.pyc create mode 100644 novel_generator/__pycache__/common.cpython-312.pyc create mode 100644 novel_generator/__pycache__/finalization.cpython-312.pyc create mode 100644 novel_generator/__pycache__/knowledge.cpython-312.pyc create mode 100644 novel_generator/__pycache__/vectorstore_utils.cpython-312.pyc create mode 100644 ui/__pycache__/__init__.cpython-312.pyc create mode 100644 ui/__pycache__/chapters_tab.cpython-312.pyc create mode 100644 ui/__pycache__/character_tab.cpython-312.pyc create mode 100644 ui/__pycache__/config_tab.cpython-312.pyc create mode 100644 ui/__pycache__/context_menu.cpython-312.pyc create mode 100644 ui/__pycache__/directory_tab.cpython-312.pyc create mode 100644 ui/__pycache__/generation_handlers.cpython-312.pyc create mode 100644 ui/__pycache__/main_tab.cpython-312.pyc create mode 100644 ui/__pycache__/main_window.cpython-312.pyc create mode 100644 ui/__pycache__/novel_params_tab.cpython-312.pyc create mode 100644 ui/__pycache__/other_settings.cpython-312.pyc create mode 100644 ui/__pycache__/role_library.cpython-312.pyc create mode 100644 ui/__pycache__/setting_tab.cpython-312.pyc create mode 100644 ui/__pycache__/summary_tab.cpython-312.pyc diff --git a/config.example.json b/config.example.json index 448ead3..15f2733 100644 --- a/config.example.json +++ b/config.example.json @@ -58,5 +58,15 @@ "architecture_llm": "Gemini 2.5 Pro", "final_chapter_llm": "GPT 5", "consistency_review_llm": "DeepSeek V3" + }, + "proxy_setting": { + "proxy_url": "127.0.0.1", + "proxy_port": "", + "enabled": false + }, + "webdav_config": { + "webdav_url": "", + "webdav_username": "", + "webdav_password": "" } } \ No newline at end of file diff --git a/config_manager.py b/config_manager.py index a65be54..84e82b5 100644 --- a/config_manager.py +++ b/config_manager.py @@ -8,14 +8,97 @@ from embedding_adapters import create_embedding_adapter def load_config(config_file: str) -> dict: - """从指定的 config_file 加载配置,若不存在则返回空字典。""" - if os.path.exists(config_file): - try: - with open(config_file, 'r', encoding='utf-8') as f: - return json.load(f) - except: - pass - return {} + """从指定的 config_file 加载配置,若不存在则创建一个默认配置文件。""" + + # PenBo 修改代码,增加配置文件不存在则创建一个默认配置文件 + if not os.path.exists(config_file): + create_config(config_file) + + try: + with open(config_file, 'r', encoding='utf-8') as f: + return json.load(f) + except: + return {} + + +# PenBo 增加了创建默认配置文件函数 +def create_config(config_file: str) -> dict: + """创建一个创建默认配置文件。""" + config = { + "last_interface_format": "OpenAI", + "last_embedding_interface_format": "OpenAI", + "llm_configs": { + "DeepSeek V3": { + "api_key": "", + "base_url": "https://api.deepseek.com/v1", + "model_name": "deepseek-chat", + "temperature": 0.7, + "max_tokens": 8192, + "timeout": 600, + "interface_format": "OpenAI" + }, + "GPT 5": { + "api_key": "", + "base_url": "https://api.openai.com/v1", + "model_name": "gpt-5", + "temperature": 0.7, + "max_tokens": 32768, + "timeout": 600, + "interface_format": "OpenAI" + }, + "Gemini 2.5 Pro": { + "api_key": "", + "base_url": "https://generativelanguage.googleapis.com/v1beta/openai", + "model_name": "gemini-2.5-pro", + "temperature": 0.7, + "max_tokens": 32768, + "timeout": 600, + "interface_format": "OpenAI" + } + }, + "embedding_configs": { + "OpenAI": { + "api_key": "", + "base_url": "https://api.openai.com/v1", + "model_name": "text-embedding-ada-002", + "retrieval_k": 4, + "interface_format": "OpenAI" + } + }, + "other_params": { + "topic": "", + "genre": "", + "num_chapters": 0, + "word_number": 0, + "filepath": "", + "chapter_num": "120", + "user_guidance": "", + "characters_involved": "", + "key_items": "", + "scene_location": "", + "time_constraint": "" + }, + "choose_configs": { + "prompt_draft_llm": "DeepSeek V3", + "chapter_outline_llm": "DeepSeek V3", + "architecture_llm": "Gemini 2.5 Pro", + "final_chapter_llm": "GPT 5", + "consistency_review_llm": "DeepSeek V3" + }, + "proxy_setting": { + "proxy_url": "127.0.0.1", + "proxy_port": "", + "enabled": false + }, + "webdav_config": { + "webdav_url": "", + "webdav_username": "", + "webdav_password": "" + } +} + save_config(config, config_file) + + def save_config(config_data: dict, config_file: str) -> bool: """将 config_data 保存到 config_file 中,返回 True/False 表示是否成功。""" diff --git a/llm_adapters.py b/llm_adapters.py index 979d366..95b43f5 100644 --- a/llm_adapters.py +++ b/llm_adapters.py @@ -100,26 +100,35 @@ class GeminiAdapter(BaseLLMAdapter): """ 适配 Google Gemini (Google Generative AI) 接口 """ + + # PenBo 修复新版本google-generativeai 不支持 Client 类问题;而是使用 GenerativeModel 类来访问API def __init__(self, api_key: str, base_url: str, model_name: str, max_tokens: int, temperature: float = 0.7, timeout: Optional[int] = 600): self.api_key = api_key self.model_name = model_name self.max_tokens = max_tokens self.temperature = temperature - # gemini超时时间是毫秒 - self.timeout = timeout * 1000 + self.timeout = timeout - self._client = genai.Client(api_key=self.api_key,http_options=types.HttpOptions(base_url=base_url,timeout=self.timeout)) + # 配置API密钥 + genai.configure(api_key=self.api_key) + + # 创建生成模型实例 + self._model = genai.GenerativeModel(model_name=self.model_name) def invoke(self, prompt: str) -> str: try: - response = self._client.models.generate_content( - model = self.model_name, - contents = prompt, - config = types.GenerateContentConfig( - max_output_tokens=self.max_tokens, - temperature=self.temperature, - ), + # 设置生成配置 + generation_config = genai.types.GenerationConfig( + max_output_tokens=self.max_tokens, + temperature=self.temperature, ) + + # 生成内容 + response = self._model.generate_content( + prompt, + generation_config=generation_config + ) + if response and response.text: return response.text else: diff --git a/novel_generator/__pycache__/__init__.cpython-312.pyc b/novel_generator/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f13eef5c6a8ce71bc035d7edbbfce0ff66be17d GIT binary patch literal 699 zcmYjO%Zd|06s_t`I_XI#X4LVG;4+|rS-24q2N7{IA5a9!p6;8ZupZ6r>e2WkeuF>Z z54dyLFmA+!J7JK4Sy|QTj#G=nJ#`=FKE92|d&Ip5^RMggl#rjEbT4R)^LNhpOmdP_ zNfc$2dOMJT3R&3Lq3o$X>#K-GYQP3+$c8FrapUXBJvCw@m9V7YeK}SWHfiigUQ<&x zrDQXh4Szd*GNbkVV{;0Ur*VTEFm(H>K{!p+sps} literal 0 HcmV?d00001 diff --git a/novel_generator/__pycache__/architecture.cpython-312.pyc b/novel_generator/__pycache__/architecture.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7a3b25c54f4a4f1eb8e8002d9276d06efe99c1b6 GIT binary patch literal 9325 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 B$3Fl7 literal 0 HcmV?d00001 diff --git a/novel_generator/__pycache__/blueprint.cpython-312.pyc b/novel_generator/__pycache__/blueprint.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7b15747cd11cb5c2090870c8418e92234b1d45b5 GIT binary patch literal 8139 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 literal 0 HcmV?d00001 diff --git a/novel_generator/__pycache__/chapter.cpython-312.pyc b/novel_generator/__pycache__/chapter.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..91dabc3d343045d1d99e32a66101608782969947 GIT binary patch literal 21069 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 S3Z#od6^z22YD^_;;Qs>V%4t^s literal 0 HcmV?d00001 diff --git a/novel_generator/__pycache__/common.cpython-312.pyc b/novel_generator/__pycache__/common.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d947e73de3a7b0d3b82a89715e8c4be9bbcc4b8 GIT binary patch literal 3981 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
    6rBNtWMQcp zO?KSQlgM{8htnn?QuE!%<8#W}*3}g}V4HIA2d^1{qyiIBoVj|rb9(FdUX3Lrs zJ7%z>X{6Ao)&Dg0B>77UVaJS>JAbAQBAV3yW3 zMpjvh==`V@{Xdoh<54l%uq5d*rjXdKbHl*b&LHrc(t7MxNk=7ri*y66kho6QXP2y! zO>)ebR1QSVGV7cn_XIxB)jVf$g|({E&Y5fVIZL<;We{`3;j3Kvw0iP5$@OZYKYXD& zRa~AsQF-UZ<xo;g>0_b{Y-m05f5)!M}0mS6g~T2z>m zuU3v;uADw|`}kz#v)7hCnE0mnf@0+M+_~C^?^MrTx;<5_96MD3BMO>SUpuw*`P7~3 zCu=WXu1-zBD5$SYUa3q?SKfK!_L1q@)g#M)o{rxGS>mdLmD8^fg$h(PtjRVFlLVbg zjhT8OsgK#Vt7sJ;YmaAyIAlX{v?rcs@_Am2Hz2Kd_n2=e%kO2fDGh&=x&Ae%LzwSd zG1)UrjxG+7DnKf78u5LkBKw#y$WF~81r%lXYV8RFCQk*~&SzN_&;YSobFzw+GM(oR zHqaGEV8&P=zK;>&dpRzzJJ0qeyt088WRsHGO~ZU9k8MP~nc&-qYz6Qd0-Ter2N_J@ z5tFloNjk;wdP107Uu+>2NphIHtuQ%cn4Cb_l*teBi5Mmq8v9A5thgBfW$nZ}OwK-z zk&4_7+(9ZOT6$#kxCkjWgY}*Q&T35jt3#zhI0@A10XeW{cT`C~kz6w((=87W*{!}E z8aplfNRZd)_G&Ujk-9;$TiXk*FOX%D>vZq$`yD$T+tZ7=5njl^D`Irdle<#835Y+% zV9eE+nq^w3ia?N66Xkz271rHzj+#C`+POTLZeXrk`DNIHr@<&&j-89!S&^EV#RC>S&F+?Y$(<{z5m*_h3GS2 zr%ZR=q&Ljd8y4xVa_28gw%AhS;hT~E`A9#R=IerKQA^1bgn6Ov>CL6Srx${|io45n z^d`M-o?f>|uP;Y?PPms$p;EYe(X{y%Arhs{+ZIhvDD>tX4`q6U(=eCs+TT9+;|1v#s z7d8p0XWD`}c!1^8t#63t+Xuwp?W4U4$eTt-SHOW;N=H{ayj3XjR#9FOrnk)F4pBn| zm}LjVXuO1IiN*$rejZ8ad6Y00_JWB$(Cf@SSj8{H5TYdd15xVhK_2l8o#Cz2vM{76Uu6=Z+k%jRFFjE+UYH9BB(zTaY zS^DD0^2HBG-oNq*Za#8J*j!Zcq zKPxGcB*uhO*~1^te5(^2egx*o7VY=NrQ#UJDlj0BcVTP3z>gDQ|2@DCZ-)^EijaW{ zu6YOYcm32As{4>{l&S+nP&*9Jj8Z$HG3+!@UsJB4yN)OiRW}>mrs7Vx9l^wO`_;jP zz}Dh(Uv?x;Y%Q4{pO&D)Tftg_%KQONQX(o_Qz@2Dr&2fpY`g_3+1Zjx1tm(dulYNm z{p1NMa`?0?%5sp!G9;x5D(Vodkwa^8UvHYv<@mgUMzXmeX0n0;V@*(!*RP$T{-`Pc zX(@FE!7Z7Ff1ylzJD(rS49TWlyLbLhHp1VDYy?1*&4XE<5i!Z5N|fJ6%Bq#U_}8qdq8+8d~w6{>DQ zZg1VH(l+Gr)$J+mb)3x4bGp!yYep;erPR&$k5s-uKb-6WLiB%$2I bjE7Kd#E6$rKC(=rwH`ng`$`ZfWgGqnwzX8* literal 0 HcmV?d00001 diff --git a/novel_generator/__pycache__/knowledge.cpython-312.pyc b/novel_generator/__pycache__/knowledge.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..34102b04f118b8f5ed116ceef91b32eb80b27f01 GIT binary patch literal 4236 zcmb^!e{37&^}F-gKHKNmiSxTndQF?QE~#5YM@tGV9ZlQNkRZa?YKpAGcec+x-(B_Fil`tN^+&#VRy>_!{ABg0ESqi81`DA5!6lAu`x9@F3`M zUpsx~`kPNJoH}v!55FtEIbD46%=Hs*6`y_XlM`db^FR4?dW7STadK4PBU)M#^+;5a zbwSpzGY`k6TH6OAYr&vf#XebkTj|#1qR22sII6H z4LZT77G==5oCHGjJ|#Mk0uzQqjLX0_yfw7>K}C%w*g;NXWkqMBN-7Pucy>_K6KqW4 zv;@oPcv+$%hc<%}XG+jCE-o1M7$<3hQU74yp|0NUaMuIPu(zkDtEapFzF{Yq zPKP8VZV=q?_V!Jj7S+X+5Y*T$Z2KmeTS6t_m>?}1m(>Tg;p+CoTiR1w+IhD9U}yV% zo$dWWyFufl!0aU~rSPy4Q-|S*DQb$-4JXg(LM#PH`9zIcO-zXrr;7SeL{F%KmQW<# zaHqKA5l|M_6NW<-^Z`|l+DZ;!_73Rr_{L7t?RDr&Em?L$Ym8wAoh{F2Z5f+J#!)|t zqbvm<1VPr3vF$^T^dppY>SZSb8RwD=opEI7VXTKdx(^|BQ^u~c87k>qZli?rWYYC@ zYQ}EqvLFHa<3!e;p|g&YyEFEcbX8UW+;{~L`oR4i3jJT~Q~fAt8)$^pUVZnyYtK&> zPoH0S>0EK-sf9Owd+qg8*M53N#YbrnEZi(5OZrj6tAVdYbmgcZi^GCpgZnWY;7Wqb z8&pye<)BNg1{t*mcL6Nz!Xg3$l4exJM46K!nh?ist{J}QfU07JWr|T{5z6;YTe61F z!pbh8;X`Jv_QkimI*)`@A+2a41lZ7#z1@*s1w8kFAPXu7q%A2BP?x6OYff?wF%@UiLKQsiqsSTx3)WsYeB#7v*?_ON)`C!jR#ukOoxA zXs!%JxG6QpMIoh?g0;3Xhhtfan6d4`Q65Qi5SeDcV=Ri}(P}gxW^9I_e*yjX*yM=} z^&;ZQ3<*6%=ZolNM?G^aSCuRyq_%v>-~nkRb{+i_8%Q53$rEH zTUZ5J{z9O`P^M+Q-}erc;UF=Hj@u5SK_cku9l*y>oX!4dD5uZK~CtoT4{23VHob?sStMB}%`1*M9rAe5^<=I!Ji%&gS zeB<|5-#LHnweweUKQOaD)D(?TC}(sbQpp7z&!r(#3^ylqJ>9u=tE5CZDWPb3=dHJH zzisTdKQ4q0qpt71sXtuNOw1Ek1qv>$Tjbg;P_-k(cpto;($VjSZ|_E?*KT z{_66#re(U;sCx8of&ZMD~vMRs-)#~;4-Yq^ofv;nF%(RN*cIm{ITkT|n z0mBK^SRA%*P@)`D3{uey%1p5i^T;&AImoFpFsL|E4ZEhRV%mJ1jGC|AjHY$~lZtbO ziVGSQ=T5^0GKQDq`3PSwH8sQ4bv!Dhas6nxbQMznqg?c;;YzFU7DR;O(O{L@jumXc z-A3GP!d(z|n{kJ;nc+@zDi>F|bfRSWOV3WpS@4Q+?MtK$3e0N;A!t<~YrWwmsJ3Bs zbt{(G>Ry<;9X>4uDFcBcy8S!cXq=^wYTO2 z`$zUcS755=nKd)anh9!-Y5$U*e|>I8wFiiQ-gF>;)8~kEwc%;3x%FF9+*E&l^&N9e z=Ow1Dq+p&|JHxE~_o5vbztHeizwe~F>d^b1)m?t-{f(Od|G;m@eVuE6t?h%>j{QE{ zpM7?~gJe8rwuL?7O}MLIqv4ETr;9|?ZJ!>=*Q%P#+CQ!fy3` zpuv`r_E+c@Z3IDl<{$~`h654qi>T@%a$Q9Ji^y{k`94Og{*E5_7;RgG$;KQ#j~ZrB z!#JJa{P2h9NMU0rN1kv$;m&*3&7k!K6v#Q}QD6oI3f}sH*I#f~k9CZ86g+zi%$k3A z90d7URWs2%anB+G@Xmk<^51*71Y^k?n7p`iBhgl9XkN4dyd0=sv;ze5Yu7J2F-D_R Yt&1*2><{9 literal 0 HcmV?d00001 diff --git a/novel_generator/__pycache__/vectorstore_utils.cpython-312.pyc b/novel_generator/__pycache__/vectorstore_utils.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1436ce442af8e6debf878598859b4f7b7d32e4c3 GIT binary patch literal 11760 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 literal 816 zcmaKr%}T>S6ot>y3NCyDq3i5jDz1d0mHG!=l$fS%Xqwb?T3eq$7lN)_xfFa4aqUC+ z0B*&F^_=Mh60H(K?%bd6o;x#{e^s%8&y%g`!~XHj8dfnx#8=h`Aq>V`8Kit-dgQ-A zkCBjTt@Mhq*?Vr~jEvE9R)(xFuF7C$*$KMv7@0B>B4IQlTi+sW4>i>BF&Q1mo3NKb z-)2Zv;%Woh9_X7g6;hqPpK+k9VNJ$c zf`0jBsX6Ycd8tK-CHY0}p`L!4Ot-jm6EpMT%QN#*^2>{ufht!rdhsJb%7(K8;^09}yIn9|Ic`1s7c%#!$cy@JYL95%W6DWy57c10XOLqIkcgBTx} O85tR$F=!RB0XYC94>bq? literal 0 HcmV?d00001 diff --git a/ui/__pycache__/chapters_tab.cpython-312.pyc b/ui/__pycache__/chapters_tab.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..56344ac539902ba7d86569cf541d9344b03147ef GIT binary patch literal 9842 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 literal 0 HcmV?d00001 diff --git a/ui/__pycache__/character_tab.cpython-312.pyc b/ui/__pycache__/character_tab.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..81f5cce19a7e8a5ad901b1c4692b52d92b4dfd6c GIT binary patch literal 4469 zcmd5=T}&L;6`t9>y9|Fj25blpkoDiX)0#C-DpxLq)W)rGT9d>fZ9`Eu!_KhmdUuE3 znPCBeL@HOd)2hx-6O&X?s4BHoU>o(JcG}qSLmw>lWk;+vbV}5R7~4G63bj=Esprh@ z?Aq(aqJ8Q`d+y&k_vhSmzH^4ZR##UrP@02RhkVfb0y|D|d9p7>SKDec77r zb3xw~cPB_6VR6hI_awZ1-b7hnS%T~1>@gBAPgL|(K-+VY>8q5yK&zxOpw(lnz^&p2 zJpyZ0BxF?;Bl3VUD!8q3DvMHRFdCPwT2&m8L#jrj$w)|3LfWWi)rRA;NbUJhSV?Mf zQiCP7^va{!528{;*1B+TR68ao^)Q>e16CaT-0)lb3(!+=qccnl$BRk~d5Vg}&gE7* z!-O2YpgbvJgl??t(J{#-x#rz-IZ5`vkt7n?fMj{eJs*HIPI<0k10hTjgHJ5uAcmdmH zQ3m)oJFVH`ip+X-6Jn*LEXkg<>)F}13(c$AhF8AN+Ka9C5sFKw5*~n zTWm`3SZ=DMEN@te>xraAhDB-Arel^@)uQ1OV>%k@%K3A*-dp(RrysTnE{f|?bSNEL zH$VGm<^1%`&o12hd32j}!D=}T!}9qOD}^ua3D>Wfk6iPl@T%}8o}T;ewqV=1S58W;`@%X( z=2alDwgy0TzQRM;I(7qaTkg1=v>FRDsEM$mC$&&q9FXHyIpF`v<=L&Hf;jhZQxdDRiv=;L%WzG9t&1$Vr)sFw~k5 zqse|f+F#gM69m!dOKL|M88 z30e(BxU?#=CaVsMNrCMVHd$qGi;<|DvfQF1S=A5S&Z+_{&nw>Iv$BN&cUU`Nm3Q@? z$R5So99JNG7nZR7%pwsQl`Ia}zK2gq5h$$9c6cvltpKK8cu&X%XcMxLfoM{q7*+*B zci;$T?=heyEzVv7T67mo*suONJUiWqY;`3biynX(G)nb1fDQO8jm;l7eb8h!3Pz)l z{%ZSTW5?9t45?otoJr~pQg4zS2H7!la8^u{9U0QLk%@po0y95es7aGRhCFkVuRS|? zW^%gMY~E`$?@jMNp6-9$?AMKc{Vu~yvc0ZBGj;hp%^}U(++YM(~*1?bB>G$aa(LHpuSTgA3wi@tT-^ z@#QqxoguwNdoLufOJ+~R=!wA23i};<=OgRyytVn`;0M9k&8E<92<_Jb=@$kwTO+u0 z!#(2myu{wEU_9j}X)s8GNtz7OH2qq-wKGGWvkz7nPB#bBZ3i>t&@usYH@CJLTU#?E zSj06`GrMo$``5Nz-4tliNReXb z%SA;ZlE(pd7WGj|uAxW>x)OOXc!OMH2_CO=B0J=k_1wewaOeDQSKfZ}UJEuaURwF- z={py$-oA1n8_;gOf9mF+|9I!p#g(fk@7EQ%H%46gB*L)_ARfXRM!=g468WAbQWXAH~H^MMQtFS87AtjX(X%apfESI8U zOvbPfQ=&aL+GszGc4V zZ0bzv?8KRg>F#u(eUa~&>R$FWOmmCAZBs`c@RJsUv`p(Wa)#`AbTpFnsZ-r=bf>F3 zZjfgm<36$f6ZZkb%R3P0FIP%_hq)!<82V$K*rnz3`BL96rE+s{$-EOyx;2cJb^#Z` zBoYdIz2u#5!d2utrQEC7b!a=RLOYP42hdI=&jNAWAnQLX7e6VLr}}Sycru$Sq8n7v z=TI80pMDDo+CDvq1cN5Uq=R-LIgA9ImLlxYBS3O?PP=j7c_c@H6j}DyaU98BockG& z|IM+cVN-iK6RwD>67}mMl-~}40URT%MbyK zy~wNupM6b8SaelW655F(+Sr-!rxc*$Ksct|OsHdR*?LFToU=g(?8K>t3)wtBxeY|d@%+u zH*}1S(f8^4^+)u2d^hwNju^-@;z$H}Qb&yNjOdH(k2(_7PamO4JgP6cKl(^?Fip&n zm}ngn%NSqMA2BhJFX@h$nJDmM85;aJCK~*BCI);9V*=mGn88oDWGIb$jNp{&12O$h zm&Kk-0UEPBNr+Q8YOfJWHXYdC^rQL&reeRwiS2w98W&kc4{vzP- zi$=XpcRAvQ&J9n|^-6V?0^sS?TPUiJdt;(_Yhuiqb853*Cf8Hea3hvQi3uhPqR9f`0j~e zq8J+fMUO|E(nDL*cTDd^ir+@f9^VdIn=U4MruYv#Y z<6HAD-u?a9cS#nvje!Vu@IoN6d$4b~e;_~&Ihc#YzZ8gcxqG_LUShG;ZtDY)7o0t( z&$w?J0+ic%(H)>p4Gw_c=RDCp+w>MELvS5O}ZapEe*Ey;~jxy}^c)^MaQvFgc{AlAh395uL->8*^8`JOBFh zqq`r>PrOC~=KuV=^EW2NfKrOZo(|BiGlLg;22KsKn13MRv=eJ)3J&M4v(8H{9Ft>T zuiVmjtdeyO4Z3>VgY2ba&23$sgXf)n+nfVV)&W5k{f?f2W5Yei#2M1%cATsny7V>O z)aU3w$vD=JlytLBhuhiJhyB!bp~rou>x{E+sIsYVu-nn+S`RN`Ogj|l$^q|>W4bqE zgtT%lt$eEU*R3D7f7pI6(|ds7o1DJ1Q(r&~U8#|^!Xse3(8IXT1R~Fn4r3EAEUJ63 zzuz&yJjR-q8rURwusEhmqXH4#?y~`U^S-lNSx3J!K%HiLm_WQZBE$*|vrZC$3@aQS z-Dd;QkYLlW+dVi?8VlX;>^l{R9CENu7!)yLwQ!iQSy&KGeilan0fvpmH!PgRz6lsl zk#dbBRUqP|d%%S;V1&N_f1+cvF=mQ(v#~YsF&_S0KLih2>dP2itmSI^mG+4g-fSD& z;-{i7Z+~(7wYrJ(Q!Uf(*{x&Sebf#J6{vKMN}sS#HhZabA64|w98Z!ZPac_OeCD-E zQj#R|VNC4RiYpaIC>@l)a4fQL6G~B)*LFv?{&aKJH|xnLIk_ zJD~Pd&Cqns&`hn+OVOn?`@t)=E&V5*3cJSgQ35d?pIJN)^3dF$d-{&}azQ=hXU=CtAaT>=d zI1j(FMHoH8!7zbXM^A8=?3AkLQU}Kd(~IQ?tV39SSFmkJ!o-uqJ$+19Xl|Ke zpmv_A;>VDjNmjuR3(6?fv*iFc!S^;1_auen0Tm#%Ylc|G81sJv4-gNn%glMZ@@C~! zl2F>nl{WGjYsXrARH~n%1uB)JQUxlDqp~KgQ#I53X7%^+ux{J@=f}b+JjMN#^CMX}3{ea4yglFLcDsuw9*zrr&M9Y23z7SdA^d-ou z5*F;sy2}}tGjHg|GsbnN42=FI`sGY`17z|NJ*pqacR(xfZV0|p@E#F-H^Ms=e2;{8 zqp}NR%nOa6QP^X~7eVID-GE&Ac zG0&OO6k4WRMnP8=ft)eJ4jv$tc8!3RWV8wpYwS6DaY+nwOk9snYNuY@ErhxEg1;r? zHyY)Ma&e~uXaPMTErE4nVZg;Z$~ z|Ajg25#x!1@Vv07@YADb((hzQi|)%AS2B7Lg@ifi>lntwWWv9!JK3sUS87obmIQuk zLn75^l=je?WyL^gIi##yby*O*d|?>~nR?VO5-V(OEE3D~OnK#m#!~ghiiPlbXvXF- zFzJk)$-9#;wcKd5Ct9=aNR^r3U+$d(sZU^TDXpwsLZQb9B@~5}fRyUuJ-OTxiailf zLPh&6cLR#?fbf>y{`W-Ek_e0e=o)qXi6f2C4q=?&_xjDQ4B z!XkAS;eOt_uV&Uj-5Zyv`)Uau<;f(5i~xDPCwt4auvbh}wE`~cVNQGgGfm7oX1ym7 zzBYy>fS-3ZNH}RU$&<85TZr|DA*ZMx9!>G2EYcEUJ-(qHRd&YO5G~cW(!MOLfAgjKK#p6bcjdWct)8!c z+nDXpzdM%MzsVu}E8}I-zwOY!sn6NJ9ZZKO73z+h?l7n7-!xC!A}t}-<9|f|YC!ZH z{aYwi3hKCBdRLxH)=H~?m)xsD8OXs8b4(|Mw}%D7PZ)_i<+U;0lfDQnyTp;AMKc(H zzL97tX?(+uPiB7pBb_g{`ajb7>d_~ycHc0aFXJSoEbaO5KZaJnq$}Os*{zhV(;=rE zSt(zbVM4raP;>sT7_=s;7Q2hltC%=Z>g>gLsWGMLH>$g$*OCEvbaxC=91xxA*d~BM zEwl}0tp$TrhDUc^&*mOOFH!if)HsYRp}Fy2&i{D&@%LW+>^JW} zocaFz_pdy<`sUoLuY<(7uRq8pcA+%#yrXZ}=_2g!PLN?yeLXIBAQr{aPDwD$;{G{6 zq1-MIE%JU*kd@Rk;C8a79Nm)4y6e1y4MYHkximuNWe$~sT6PS+WUnJq;fsn_6FE0VrNQsIu$^B!0woG-Jv!)e z2n=_<*d$?2JzUT0t{K=k?X-*@2Zl$7{-_?}Kw05VOS4$l)f zj~bI`kzA=oa@CqP&z`GskzBR7x*EB_skD0U8WT5bQ-a)2^jvK$T0v{pHb)B-r|;klDmdPbi0^YjK2_Xc$*KBP~w!Ws&G zYH`SwJ@!*uZHe9qE8F&sm%T)fsms1(xnwD|4%?ypx!?Q{#GUiszx{CL)wyf0h-#V+^YS?7T3u@0&mh;sMzI|ql|j}O5_30M@&5Bebe4tF4O=a6%tx$WzS z%Gy)6^+eO6v((BWMIbITrXV1=oUpjH4wxl)$O;puz(jt>tKcF5##69-xdU+uWF$BO zK!Hk#(2)?;3MK+aLM@mdyurFC>XoqD5r~wK?BtKI;JMjAqLQur1y;f60p|rVC)5l= zB`?)_XA7=(34;UDQU}@}&ThAp8L3)wsau#}3qa_)16v_joA@ zG|Sr?L3M*Ha@m|YTQJ)>vwgDY-LhL{Q%7bJ_`D{cc^&zj%b9Zpb3SLzpWOQH_FLPh zJTrUvf{i|NGx?0!3g!aNT=35Rsg-vdZ#Pc&&+g^R+xWumKJ$*SEZ*5X6?r%2cFc6s zY!Y9xl`q)lGq;jB3Xtz4P9Avo$gLyO(KB^?;RfC=m!(>ci|&@)F7q~QyO+k7?eUrS zf;>0YD%L_UmviRw54Ow{eO&fo+3a!ezJq+@A-?{w_sDT?-3hO`+-H7)lv&J~iv@EH zXRi6c_3OHs^B<3VIC5`=_s}tZ!*PD?34T?V*IXk-#wrTtO3qyQ!RB8_%xwL5`-j_S zFM0Ru=bH}js}J(^hrH&>`{u(>vUTQ7u-$`R3)$7m+k+D@cS3iyT6NX{Y z^v1+97HsvmWW7FYb66aZtv&zCkLF&Ult~3!g>CNFAI@F=)!f|=AKiUx{??y8djB>k zKhBT;^3iX9IQPAu&Ru);vv;S55&lPagJE)N@nfT?82IDqxxe^{xY*n_1QqJsJ?=hd zCs}X4LJIEjk8VD?d-p3GDq>7A2V3!1xM3@{&HeJ9&HZd*?#(GXy9WZ;1Lz$>?+ALw zz`GqCF!V6&Zv4F$y?yBINADndhtWFdcJ*LDzz7RK&ycc!iAs>ss08U`*+G`Y z{e6HM9tLedBl`6LngOLnTrvU?1E4h;-2)1qWOZbBKwPruu?SZw6^LZS0%=@Ia2;lM zVw7_5T)3~d$#hd3=mvFREODh7DPM9835|?R<;oP-kB8PI!J5xm^ZnKp{sh~X#)yQN z@yI8%E-6Du%;ysG`NYC;`ai^{`ppTSCT8APe|W5Vzbt7lm_`sYJTwKzoPRz8NXUtK%iBA9bHbI!yl zXRZKsn#7bJF*kaz_x`YtPssPDru)+}{25vP%p8A4jz2ZSZ!39_ktbx7a~b7AMirM) z#b?wA8Ed(WwS309&l6)-#f(z|ox#x=6YDs-bgG1->poA@McaI|-A|hZ+Rh=xSIE(Y zlV^N%)dM;~pffo-bE4H-vT1hpY?-&H<38QF5M3h$M5wuaL3DkE!oCi7T2z%ZH^ zDlH1_sT3gF?v@d`b{--nC?h??Sr}Aosv>FDVp4!ABPH$H0Z|xLu{EeDg3@)ND1B7_ z9b9OPOTpyPtwYooA+>`Z6x)^kzII9o)u68wSXGdsu5OqEgdgKUNKNX+N0kN_-!KPl zVOH|LWX#vO<;A5y$F3MPJT-l+O6gH%5``k;!#c(|YWTL{l2LqK&|lD9j5w^jpa(7W z8USf-eDd+lcVHhscjZ;s%0Ha>8LBW6-p<^Izj*lZTZkmbr?>Cj**X8?%MU;L1;Mb7 zVLIzr7QA6xKOSBF>$&OckKY`7^iN-eB%i&0Q`C4D^RbKi-Jjih|Iz#Jh~*8V!T#7q0~AZkS|aM;YV{Q%PW|-p*-d=THqNx| zL43lsdLglpODvr1=MwAr_=XwlC-IFBEE$5OfU^`#9`aW0@>zEKEh!IEY(h#Yms09C zXZYg^CkMTSE4?fCdCmL3Fh-=tjBop#)>#PFM~Xp4(Nlw7^ZMV>xqwceL`Fup>K~X> zB?4rsMOe|qtw2J7tN}t+VM>pH!iJ>IfjpZP4Pd&Z_pD}=Xv>wWXKKYkgd zv!wq)r;pwP8OqCtw_@ABjkwqRZz5+eddqhS=G~lm_kVp7fw8`JAz$Hd?2Vgib$?qM z-BKL!w`=oS@*@64o)O+d_SuNY2;%-TK;gL0z7q9Zh&$@J5Vsysu#C91cG{>0eRL- zUzDd-o}hdwvy7L@7ji_pFU)D>C_w@#v|D3!SSIk3iBYwNcB)2=R5BA9%ECbs=AHr_ zig?1@Q&MaUiw-}vQY@oQH$7X9sy1y|b_y*OmL>2Ev?VfC!<<$LKK58uAQQI4JMS!{hHD(65J?2xLU4HtyAOEHwEG!B6~qO7%@%6I9Fa7PS47Fg9} z!6gc|`n#k!WUFsf<%5J@n1eMt!HoTMEWmU>+Ltm<_!K<;^`n0u;5-;^H;$K<|N*NWMhz1b-;OSG^>`r;*~v zkgux;F#8`tn3Iwrq*QS!RYFP~mr}>4G>n`4rj$j=Jr$)?zRqV}j|?_zvdGVy?BJ}m z(`z~FhVe*09d|YMN~}LMQ%Ei5Qj3MuaxS%;Pp$B$WeI7eTw1A+R>7rJ@M%@RW)m_h zxQq%RqlU|<;WO$UWZEW^1bYK#ZxHNjIQtsjzLw8ydXSNgaMf@*H9}4Um(#%K0DZdp zL2AZCy^vYXWtIz>Ra|BjpIO7F*7|J)f^7|FTO-)kakh25ZNpM*JZp4n%$K_8Xw#E4 zT~eBmxPnVuAtY9FiPd~!?KtfR-s87EG3EIi*9(p9Tx0va<6PrWp|Oi=?DD>FmT&9} z;VMp@;moUkXU_MT3qMUv6%s4B#0nv?hD)sB6YKnte^MEjR3;=fT0e+xMrSvP9s~sGD(qFMgiaoKOqsyMq6rum0!cdsn zHr+bi=v{ZrTXy`u`NSU|#HTHvbMWsijk`=buPJ)BF2b9Xw`*;LcdZfL5qrxH=RDyY zT>PKG@?AFPKsnl|#Rp)FgdrOFRs<7uhn99sC;?nb8Fv&YMIuKuEOqb^V*x!0dm0vH zjs|U(uGVfeRLu!wipu^CTR+UfzAM^;`?r|T{hM}qBG053doawYXjn~le308hXjsTQ zEH(b@mCw8@A3ZY5S0BdiR@Ev+i7&mOT$1!nEU8=ETSlpOi0m$Y7|VKm`PI4WzX6e1 zkTXoSi-h$nZVWMB^(WQ#knA=1;p zF7({!T?B6!nMdMh+)I7*8t{s7gIa8p6F;2!m96+|eenWLt+J6KGB@@TW;%i%?m*ag z(Zij-C>k>c=s`HWPFC*kVkoZMs?|B18w)&Gke)4%8>^Y--$6O9`XDzJSC55j5w3R? zTxNxkS;J-4Ojpb%@R==~sYT7mEZ^)ix4`nOh}#m^64BTmueH^mkiRUs+r>{zxkQ%s zTp~D7j99f+SlP<0Y`vGwtvo2KJj$&+>OIErE1fbrmStyJGBc6=`%sabO~p-LobL5* z+~wVU*t_e9_sCIi(XspVaUw(`lmk&YWpTK$e+J%Tz^6LV#*B*iQR@!{cVb94lX#Cm zngCfva44d9`0MmDZugL@v8oF8%$0+nX5{Fp1bZ!2=W9lcr-$4X^;!aCb{LX^CajTY z{D7z$#U785YkHevk>n20u!-z(oCNtm9{dzduOL?@Kn=K@7j8!?wjw~rOzi)-h8zQm zVHVL&OFpJBI4=yxz{}tNlK#XjI z?<`_KGNJzd&8z<~b5)sDkWWi;AYwyde%x^;wZ-qmK?;k?vH2*7~8>^A7|;$~m2JBrl6J`G5vWzCL~e8T_YCxW9o^Ax+v^@?dIoPtkWOIlg_baNYwjoC4b(zM&{h)YbHiJ>(^{1jt4YdA!RSHRP=(<^O+BKMJr3EiC%`L> zV9((DcJy!;0S)yp@Vy*77mjyZPzB5?(v3j>faV!7-!oFVB-OAWK3dpt;Sd9wflSbB zj?Nb7Vva8Uz&P#vYxB%rZ&kCGF1}B1CUX!;PvWGPjgPU3LD~goga-S&0tWYBAYLTe zy9Q5nx!lenmpCp-SJXjdv8ssP1NsXirVhtN+diTR*hq9QLYf}W#*wDSrQ&&;URg91 zxvSD063az;f;}^66?Cv@LgROey<%j0AV};L?0u0a$Npje4!n?#Newo%O7~Cfo~3os z7fCgaom2v4NS&0=(fI;h!O;~T)PZ_g!))?LP5i1>zOKznSKOz!lb-6)UDN9xBhz3c zZl9>VXe)6!yGt91a?9gL`0~G2Q?tJZkN}mPg~zkCbCNWmgW8#5BiB6B98f2DE4+nm z9BmWmG9V>Bhya~D?M&Gg)^Nnqyo_`gTt_%VTLC$BHAF^+Xt5CSQdvTL0f^ywgETBAnYnKWeCp-I~DkC zPM5n&IZ9HRMUWahfT>?X?<#s9q4zO(0euhKfzN2LO4cPBIEq3QB={MK32w9SJqp#0 z@r5Rg5qyh=)&=zAVBuVf#0&#@I(sP)C+h`^zpV=UYLGOKE0CZBN#{rc78Rq6BxD~T zXfXu)y1;InlYNK*R@JO`iLLVp!{a1nUoj92HDY4`sB9;ECR8D}vb(SKEtXWXg(s#TwEY}J3Ya;0&P{;MHC3BE`DCV^hT(JQ8QPoMMBEAG>4;2cU^>ZfQiDTSj_1ge~)%BPyA z9bT&3N3ABNl$P}YZ5w4y)Fbbwj@Hx$()0G|fB*I(~s@MhGhV)`@YVo-Fp)LR2*jusF?X%XO z@ATPP&}36K1PZnq&Q>Egmp?w!kG!!m&RXWTlmFJ^gfM&2J-7sG_PwW%2tGMhc-cmi*=BHvWcfQzp?Ht&oIyZf8 z=G?ucu}&Y=3E={j%~9DCjw!HGmF=U-o;&Daob_t|m3}`B*7DN*mK*@tZv|Zq3z*G| zj~v^EX7kLK+h1(IwtM2-Uj_x z#;rcvIx>U1AAcnF2t(O&Q1lL$omiMsW&O8|n9lwc|0EG4|9Y^u&1UnSNmI}#yC$9e^AT?$kVN99byaJsb? zXZ!3q@9uqGD#u6d53kzs*>>+9Ag7OWdyad%Uhq*4Y*fI0Q}w=#YSO4!wH^A0;z(1P zHV#y~tfXqiq-q76wE(J?4sD!_a|m#H1_zVn(vp`sL8tC<64uZ9WvzGAIGCsCktX@8;UT&~@xg3=%Pz4-SFqJ-Cb31cp_w4R_yS)dG zc&P#(bu_Gc-i9rB#38hPFh)kMk4#1QQdeO8lCXZQ`iC%aj$c16!{o>M#RK2kZvi|8 znApx)?NC25gP?lhGe{4EsDMnLoey&J-uB#7Mq#jen1Nu$5x`rE`Pkr?w2|s%1*?a4 z0|m;?QTEB6Y5lFUGj=j7_8s(6b{};Js%J?Qv6nQ$Vqt6r2M4xSw2|O2m|Y?c>zUMF zKRacgLGbk6JqHk#9sC^D%G7I~$>!_d@lnN~;P#KJbqFgdWVQY#7UuiZ3uH6DfE0>= zz10^-fb_o%24aa#4Y0L1s#jT3kV*KU#YBVl*>I=Y&0-$pD*G-%Pus0z#MzfgSBiBGVzvLHSx^Mwx*~ zZiYGSvCCvZcurVU_z6&C%QFxyJZeD!xDG}j&cU2Jxst^%}Y;t45%RoF+N@Dd(bcg=KqYk*&c(IJQg}bUU;OIASVcs zAsgm2TUt9;Jd3H70}24c+_(()Gqg$6oZ1{9Ht)Ga9t1o)|ytD+sgNZY}Z77n!n z{Utb*#Y7X?b=D%Sft!jj2fD8+b~EH)T6PZRupDAZ4y%>{L!6QWqV zhTN)@OL9n9b`FVQIV3H+?#W6H%cy&bl8Qi{y6kdgL&s$HJ!_k%tIGuxn$a1^?Q;Ml zQPDk9c$dM`q3^(u6E!sV;M-pGP?W{~2)!SmcOSfw3>1Wd9F*LGac0ovZmg-Pud7G7 zDC@@vX$vFN!uRtvL`=v24aE661;u|AGBgzq#!*pSUCa6~gCmlt^{8XyxFlfty2sF+U8q>r|c|96a6Ugru%ul9NuiqiQ6b zz~HJ1t66n*eZaK0r>_T?_*?rxz*!=w2`U`Bc@Hw&23dDPdh96 z>p-F5X8@R}qd?)?%jn@ECNlk}@QrZ(Z{yovp?3#8TpZ!{lsd10$qiQ zT+u$d@j;4xvOvhIePjtF-`WD0II^7BV7JTf62T`}fgT>ym zbzJKDnM+)1+qh^GqKGpW3Fb1+TsF1(Zqx0indsSCzI?0Cyp5P|$m7g;f*B)CUVPVc z%QL-wmJ&7|;5Hr*HXh+N9^p40E}(evG>mLb-VehJ@?IfKaEeDX#FI+(ojCi6wRFM9E%z;3@#C3KtVIhxZuMEVk-!ShQXyDsI7^MUcKdzH4oord2^`Qy z#)MK9wBCwV!&f?;watK0dOxw2ghla|x8Aq3En4CUpQUR-i5>SXotUEk6KnZ`?DqRC z2f|WJSKPO3d}7oktRN&gTaSYrw_J+82RjQt)fZ<-3J7W?XPACyl7{`45Et|;R$vYl z=;3}>QM(XTGX6b=dC~h<=;0oe9AVueU5{Z4(Mt$q$`gakor|I=GZE94MiDF|VnalD z1mzIqN)RX;1M`CY-{HeZqLRO?77>V5@&-k1mdA+6O2iIwPe~`}BQ*w+l&Feaip|Fq zmOYa4J;>FEDt0ug^}Mry&Cii(1ZD< zV+mR+!Z#Q`IuVD3A*eF=5J)C+E(Kgs%Ux&?75oP4h4m2c^sW5(DfW$KfQYfglYBn>1GtBr4V5nGJXZBj-%>;oeaXX zIv=%>2-BAJA;?CZqJ)x7T*)Ty&TeRZ7LXl0b{N|6vEOh2AIA-DoYKZ&1BxQdH_eDq zH*kd;?lD5=8LsmT#2M0W!>FBx-G(o9y7WB;;1K&M;K39A@VO}~NU^N5D+zCS`+}k| zhYR|Bn8OjnQG754CqDWNn7;A!U8b@Bjo6O*fn5p4z=%*ge4Q z9)L*a^&QyWS)I_{X?`kAl=OiNO_Vg8BJ#eD1%)~wX|TsS44qioLBk<@bQ#W*LN6GC z;tA9*-^`V62DY-WXNcP~1d%T4cVeO0yP(i?Kb0O7Mbwab?w*C3f)t_?3KjX-D5YG* zWv`kU@E$lK92nvbs4}taGK{tQDYGn$6MKdl>$p#KEWuBG0J|Ev!6x!@)Mff|^yL^( zrPB4n+zNME#2H?h1!_|Y39g+|CjON?|AdstX;qb}Xc7V3xKxBWt;5s|r5HQvjSWix zKV@>CneAagg$xf?kWWr-nWXj{0dqkG$#UfgU--)^7}Y zE#96Q`j{&*n$TOH6MFGBpl_<}H8_YNBPaSwv?laP&j~%;Vgx+lZwh)Xj;6Zp=_|A* z^r>3V6B$t&$cPN%k>gS0^mz1m41`58=@1s7m>lc1g-s*)sXaHD43HB=-N}^ZAsn)$ zG~vmD7O}#=?2vh=V1s8bF$ZqFQJ09)2(7u31ud|kL|{kcc7|`*TcCQxbjxQydK;`| z&Hv;V^FMiM{>m7b2b+86-Fc#s8%TAq-Dlv8W;a@iR4Is&Ej$~Kd&J*CJ|ab+?9;LT z#B3p}&)#@{?l-T8=bRxO90c2veLZ;iQ#NF*g6h$$S3aBiI6Q4CTuj$LKTCZuTuF+xn!3+w0?)_WylefZi z$cC-53k)ke2f8nHu}-}4P6a;MzIQ_|vP0$p;h+B}XfWiTE5b@JG8oH4Btjx;_B!$C5 z4%i|~D}cv#!+|1aa+AUVBcaI)fFr>f+5nPbaAP8#5yGVwwChbUI|3Gw4DCXGS=XuI zzCMvvh75W*m@AqTPY_Sp5(}&_kI99cbs~2xm^#?zc)_rIckseQ8=+fW4ANlRlweY|g}2`Zs9L}FJWu0&n|dvd3YprLULch+!3FoOEh4{o*OUEs$J1_=4yJ%=2q1kZ*@?0je7g`V-DGSbpfh5L)J@B!^5| zIXEqR!pdJVH723_F(q{3%Hhc&(_9J`CnFMAcuF3fI3v>*G1u=JS@YC+xmeO&I6F}Y z0<-fOP5q}=daGN#+dpzde{K#A)r`FV#>qKrHQayxa zN4~2sZUEz>Yw@GPx!Z<6ThSw8gf@JuL9YNksDh3yg>fw&2`Iz2a`aZ9SAkv`L;;Lm z4v#=`DDDd~<=85Whclf0uNVs~fQZ*Ipn`iH2IJXBwgJ7B=&b_JWrC<8!)+rvk>j=j z0$KD5v1h&oDEYsQ=|IO9btpx}^Ae6K0p3)Nmn!j54a?U^e~?8i5ui4@U|+@ASIxxE zg5B!vf_*1v-^tr|^I3akYbnNG?s5W1LbG= zWyMAZ=o_OtViD14+#Oc_|LppU<#!vgMII1Y=e+#s9aGUf+05*8Q%!^hp=!|@LE~pfV>?K@=!kpIf33@mx zyX4DOiUb8C#i}{T)V0eEGRxH9Fkn?lol?;Qf;=>65@~5hTLoGSJ+*anApAqwVH$0L z#&A(RN>PncF$-{a9p*sMQDftvwmJq1mw;W-!F7dl4OF>mDDr8y7h{6(Brz|w5BATa ziArTqONy{2aNiQqxR!#T`t)VCrBHKi(HDIKX)<{`qYoHor`k&kyX-tM@YgnY(JZEdzr1Z)& zq%}}2RI4@8wOWJ8d`b6mG%(NbBKs_0okgjj%2P^^-n9FO$%aetV(;Y0tTR-R)Pf-w zMrbfvDiiR`zcJWMYthA7N`rhxYG5a3E@MfEW@0>lCL>kvCB~{U0z5?t_OBam~Fs zJ@?j_Tm+nigd4Bmb}bPkkbI6r*VL}61XF93HAH$$WZER@XYbvG!}X1U7%}e9AnRsl zAOq23SflklO$#H-w2!3$HVTm$R%Cgoi^29OU9a zTh6^4Y|D`-RHy-kq_6b=cySjGm*?H)2z=ZF6#UGuehJazvh3$O4haDV%pHWi7 zP*_dzWVTHtAYxF(sEf3LWa&PnKf6Lmc_s1$w2uqr;bbRTR55iBt~%L0?Vdj6&0qJ5 z;VN+HuQkD;VLyC2J#`r5l+^TjZ^8QDr*)su_JxEoawbSSe;0BOy|-f#{!kFBkCHxt zdoJJ}4Imha_9~>nehYI;k;<47r^KJYxf9brKmSflPey=p8wI)COg$chb&_zGTEwKK zbBe+-CGPUug>3|Dv&f;tc^BrEYEMWZueD0DrBWzRUedYcm0oMT)nvj)F*+rO=SWYh z(-STt+XN$wU5_4|6xOku(YpwhA-4mH7;Yi2kKKmRTEPQdHXMXRgDqecXI2pZ5ndc& z`31v+la%o9;uNf;!LwuAF#ql7y$iVqS$J#*1|Ui5B3wI(M<88hL+IGISbKG=o zCr1}d9tNd1fBkBqemhscU8wKm>O1-RUDDU199`pYSR*vFat*CQLp#^d&Ns+uk8yPE zLpt%=4%Aqv;p{a&x;BL4w$Vp7e~RjHcFtrMOog1O&}SX)WF*`gwz@?6%6Oq zP45dU(BmMz1 z+J$`$^b_c@;v3;d1T~0Id5G|I$>0qj-x$_sY1Fw$PJu)*R2p-lf)Mh)Au28sK`o#? zm^tz<$lwaq2MTg0HsV+G&f@r31KxiDzENy~N)IT9qjLnhnxm^heWu1sSKp`CDSAMt zS|dw%tor`KTts!qEBv?AXK{G>=%xed6Yc=?bBCGgrHLw(Z_9U%TIzeE?5aW}t!!oRlS0 zA%g6WjVH$`i#cmCXy*B?DR^u#HYy7gZqo4FD5#9!iF8>{rJLxfNP0ms1nILoz55Tq zQD`4^1R*$n^Z0bOP_v1v*)+S>yXz=lbIg~0Tm%75w63@*9ycW*;HltpE;)F>G!sfr z#q*b-A%o{HfvBw^Br*`lSw5;gs3D^&8IH{Eg~H(^rE~(hU#Q%`Rc@Fy-#g7$9`I!x zBqwLp$C2fNmpG0Lhwuq+1UMtq{%j z;EF?N>;DLBYBgOAcXVm3h%j8yA!GX*#r{iRI0w}*#BkAv-L0&`0yL|3oCsB%2q;bC z^ou6zTs{PeH`r>fe_9N8nT-yqwBb=H%>Zp_@KA7dsh+L%z&q|);F#RA!)VlO6*w9t zt)3FKOzNN|OVp}^cCH#%eUe;dic{$s&GyvJRb{0;1Xh`Hd#+qHE`=np$~%$g%2o6F zPUtNSF2XWeAP!EO1ZO}<3utgMmXRwc@@V9$Jt7knH7+>l7~zS86I;LXz#AElQBXq- zMI=pFqBO_jVk1X`+p&yX7aKVm9E@e;8p9-Nw43G;L9JZfc4=h6p-U}{mBb{6=dbE@ z?fywo^$!ibktda*JbMe3cj*m}m`Y`l(XW-RScQXT&SJ8|^A9O!MOY#5^SR2&VRDx&r}Ej#S)`S0 zsNVieTFbP@M1d+-b!)Et zlX5LwB-hn{Qm#dd@ zA_t+%I|Iq&6rXY&D|mMA7$jq9Xnj$(e-wZ2MsE*#d(rzF^!9-_Vj|{B2P@DRrfAFZ z0De1&-XZi3qjv{S3V>^j<*Ef!;~<81zn| zH-+A9^!^IHJLvVI_da-VZ6>*VEfCoQHd=v0dKbS;qxW<4{uz3Ijot_7{d4qwf!;6C zn*k55jT<~ow2cBLG&uhmyKq0|syffQ$fbqnPAtjF3{qr4;co#bcWTQ8E6+ zlpCwAukvQrPJ?Z=bzlTPJ?rh%o2g#=rrB0Ly<>8IvRuI5r#1drOOu2wF&yW;i=@2a+YtNF5hKJ$KZJWjcuc{1(Y ztXo-AJ#b01UA`n*b%%5bnkJeW@vc3<=N5caPmV23D05`NAze^VY>uyZM3^pLxq-uqE<#azg^xf!cO+o3~&UK%3R%rPKYU zbT1roF;)7(zJCsvy83yK8hSS#<%^H`%*P1`3lA51+Z=r5NuRl!d|&ExAzqaVHkB@1 zzcBIbDHd)|7&k*lUX8yJFVIM;P7F^veKeBaAz^)@cGvWUSp#3R*+;ivgt#klqUEfK zCh=AVu%3U2&s>iK0k1<9Eyv=pc_)8T%Hi9fR#CK_&)ean+exe}j?NNjG_MJFaUT;; zcux1v?t?46dAl4doukvm94Goj*2mPyOf8=y7q&~8k+F)ptP`;KcUpuq&-X6Yumyg~}q7(q%PN3n&*OI9$p>z#by2jhM)4O{wU%Jmn z?S$f_rOoks(JSYtp$q~R3!<>|6$^5{^zb1EmiTof%OjuFybEz6Z3T%}y_mmV` zbo$azY0=XwK)U zlLnQk+))XK8z{J~j)FRA$lkReR7-Z28efp3Ev&-uQ!7Vlv_cB)UddaSkFqCRG*y8{ zDp_M2QWY)y{uJo6sK=#yr0m(sSVo(!c(xo>ZK_4hEe*96rM7g6+T}sTM8j=$$UR&p zHtB6xSdL=5g)t!)h%t|V4|y*W?_jFYNcSqK1ju2v^sYQ5`eGDJRgrTVQ64>NIW$2O z;E+Z!w*iSOE4D}BPWBW*6kJVqee0(PrT+W z6HE9OdP@^GIO!IraFDop4r0dW8tUtDtLQBw=7ZBwyc6v>*24ooL3_L$9-tc>yu=J? z7@3w0WJBsTxU2>tYYmsRhR<3nWHobH&3x8oJQAH(B;;-3^0o+h zZCqX(Y+8l9-CW*oK5s85X_5=S^0~x(A+eZCEanqS$%S8qTvDL`$1svg`J{4k;TPV7 zEu>U%DHVK56|q2qSELE4Ra|NnpIW042QPyu;1UZYizm}AK5?x-tLF1~npmSvB3GAv zW0#Gsf=k6jbGr$;gp?b(*KL_ z>07w;EqwYmay=Mc3?}4m;Bq(cxy^9PnRvsQC?e#OE65#lc)OgC(ZFRi@ENPf9cOrJ znUJ}P%Y*|gYv59`q{y*$FdPaHq!e>0#X?Fsmr~BBREW2;O>gE?R?k?ul(jS6TuSq7 zi_mhAYdI*i9OYV$@-4@?l;dMNABGsL8Qb|g6FIOG@2>)r*WM&Bk-oyeW*@#baMVhF zRMNywE~?yLT0R~>5zEm87T2u>3Iyox;VN}Ak4U;V*J>iRL2+;-D>Z7+UBpZ<2 znKPUq$NlxqqiK{hcoU_qxo_banryF8lYo=qI#pqrO@HMMR3; z`iJTyecm5dyb!5(=>O0X+oIQZ>i^JgXx8gn@Yzm&pEQ){_vydbr(dn#s3&Fr|ECKm A1ONa4 literal 0 HcmV?d00001 diff --git a/ui/__pycache__/context_menu.cpython-312.pyc b/ui/__pycache__/context_menu.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c8d91bc2e39f1a24c921265ef1f0abae1da6f7d GIT binary patch literal 3828 zcmcgvU2GIp6uz@Fvpc)pw!5?iv@NXsb`+KZ0t%$CMW~AQMG`~PIGOHD>29|>>z!F> zmr5GM*cwe~V%$a_ED4b!#84%oCX&=wU)<29b>zVW%FkPEA0#|^?w#Ff%MK*);7#_- zx#!$_=HB_v`R?7{OG|wST5b4x$9@k&w@9bZxV$o72TB$xNMRDFg`rPZ3+qBnNO7G( z3VX?Ajcnn17?HbAI?YkbWJxC9nSU9SEK+Hd7MH@bup~kYr?4P-g#+nUc#s~&4N_1% zAiX_;=rya3sNKf9G3A(Q9MF;mblz5z>2wD~^o5|^{^^%cG_4z2m(dvmKMs=#jaql; zPX8C7#kSC$!Lzroe>F4s!~M^{n>qj4O#hEtW(K~U>Hm1k-S3C*UA?+x=A+U3eFJyD zJTvpj*Y`gB^;X|$`if|NpL93m>#*>fcY!sFdYN7%Q3nwQ@z548e8qwRp1q91Ty_<{ z8qBjt_oBFa(ZIYK_ZHg}7RFNSmijJpg}4lQifBBH^)HP?de0cm4bjS;DO#|2)}_4Z zsrKW66)Y=`^~ipT2cURWu~88q+VW!i!k6wrqPH27^bi@-W2iFL+S}6vN-Muam&qsO zHZ@^-qFPs%oK&dON;hj9O+ZVf*_ZL{ZA=@6mfXC(LG+vM6EyWrm(gi*B=b$Ki^vjL zQKWoKlZ$Gp9+OYWx}lnEG;Nrr#I36-8Ow%-O`onN)TklJiG<0u#gdBY)jPBk5(x!s z=`on!(;9h0YSxaci6%9v(vX|Gq#5lO)#1K=h&MrzJNlmuH)XnuZUJMkXr5VDU~1{z316 zcS@+u3AH1yUs0~b#$ta6wG+brVpn`DPF;~=SI1Zfb?viVt8>EY3E>61Z@)kr)9BDc zvu@-q9V{6rnG#m!gq6cJBgTbO=T1!uJLh51$e9$@0Oe(oQ6N52ii^pEOoV3GYZ@SOa|&^y~w}) z!K{FSRo0xm{h>~v`=&m!4UKQBX)I%-cB+7#qy;@&Oi;3j!VlV`EpDG13m%10?33jK zIFsTFE?bN9wrVR&Sk|^KC~>$QJlcAhOZinZG!+axg`7^NbqKQzItn8T@Lyz`GhU#a zaC;2vMn)iN0=P?b=koy0db2#5h^5*z83WA$z}O5d801t+O)8i$h$$S2CJth(;fwhM z;0(x~CHRvH$UN_iKVi;V@ayk@=tHwE-W!~*SdrZ`v?sf7Xy3@5E4~{Qd-`9S_6G(J z4;-HIZ_N2OPWVN;UzhXOjaE+j!w+tj2M13MoSZ|9H~6PNFw4U8p-xVt(~)4L5{*|@ zL|$aaMFylZ?B`+Z)4^VV?`a@c7yvNON_hb7%ZC%&6ay%_noT#Od@kq#O*HYG+93F}9w}H~@lR!r7QiRcy*tY`ReqUWCZ1oPX7D_meOn zZ#%v7RrGU3q?{cuV?a6su#D38|50~~>y^?lEb-CiRC@)$A3Mk4&RA5h_WjZ6$S8&z zuZ5L~9tt#G2fFE2fOO%mO;Exch#(;!gLMF0ndh9bhP%opaO=lF5TxBU($3XKu|7Ha z=7fKjU4hS5k((p+XuQ6n(arwGGa#2F1R+XF#0{XpCEuA&A49|N$0+Y1)g^MxCJPLg zVYi0sO%`|yPAUQt+!y6z65P{7hMrtH;na|IViD5Fgq%Ma#L8dgcEBioB?!1d!9|H) zRjPAB_3*)w9i!_fg?db!&7zN7%93)IDoLhKlDae{oglhjlHO0tiM+=nNs1PgB)kG9 z(K8bh;>4tQFu@R$Rb50hsI^RvScxF~p_61dgZ^>3cwx@%<9E%iJoZ`kv< literal 0 HcmV?d00001 diff --git a/ui/__pycache__/directory_tab.cpython-312.pyc b/ui/__pycache__/directory_tab.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..33a122cd5fc13f64f1dbd07f6adb82659a1eaa1f GIT binary patch literal 4489 zcmd5=Z)_CD72my^JMS6$7TaLQj_n))3>(2=N|K7;I0Zv71YChg(zsSH>)W-x$Ne$0 zdp_Gbt4>7SYCFw>o_ z*=`4XJHpNg=_V}pIm51qyW1Tp>n@9M-JI1&!k$QZcR93OCzX)?+>>Sn(%h7m{&Fujz4t`GfE&T=PDcI2&CWQS(C4_T|io{Om zRyxB3Y`Y*oDVhkMp|Yp@B!}dfaZcwr+5d)WiSqUsN!U*+Uqg5RP;-Dr|-=1(>9t51wC`K6|f;%BA{R7$}25uZ> zWj>s|fBm|zD>fvD1Cm1JpcbPee!vvLG0GoSf;6Va`ZV9WVyCPuqCWr_5rh)6EEtPK z#HeJFJ^+_R^k$Py2rkn}V+qq8jD_Qos7VGzY1pD8rd!pN;PH_-x@zX)g}Wck{_~4Z zTLlNjbt#5a99wt3{48^E;?9?s?*8)HA}VgOvPlv#DhUp#sW@oOeFDcY?rPw-Gy&uz z7I4hDavYN!HVTcgS}rOXCYi@K$vFxtk2zq?oTWiXzJyBQ3`shE#eC+NaTQJ%&c@yK z$l2;|HJx%)qG*LU^5#t;u$Cpjgx>s71T0%S0m4mZSdN+vg%Pv}pnW{51;S#l95y`w z{e4P*oXP?*UGflQ0c%0iWz8~)Du?@2G?mZi8-KKO-)lX7Di6j~1rNPv_kn=r2m9ry zOhxG08WELfPh9CK$kfDM|KNyO6(5vDO%4=P81?tYm9SLsp#V;83&(t{^iqTVRg;9y}$5G>^@(4+BMHr7~CeE+hlOt zb#D9B`kSxZ+?4wE!4$XsHuvTdti+5~w7n^h9F-v#s&e}%-?k^NX|br?VUnmSCl(Ph z1vka0q6oKiEfRDdinwW(XFXRP6r%#$C9F2fU?)S0oG_iDB$<^@7{japXV076hm z4rfq1ZhAV79nY#_)`nw{$Aj7U4D{OZX_9`bNG1mp58+W#A8Jx-W%{Qlm%}tn?Qk`q z2wNuURluPz#|ngQz#h($)2l^I&RPUov;_vN(|-?+pKioyH6;#>z6K-cm+Ef-Ch&Ob zn?7&+q|vAs^m-xn((7~e?c;mXq;{Tg2C3CatwGl7Wc}psDKSOXr%CHd23mB|GI?UQ zDn(k-WXB!8`s~=5v58|w(>A?nTk6%Lsh;9v{Z5PUyYR2Wvo9Mv_USwJ-8z&C45eEVsOEZ08&uFBn{~2z z>d5Sgt0!)rNF6zrBAe6Xts>d8(OZ(yrRZG>NIt=KT9OYeFS()VbN?s)sWpbMOBZ(C zY)O5uFWu0OlItE4r|S^=pqz1e3{t0)I)gOoq;cYhsjcm4@`j~Yp*z*&Pqpq&lRXQh zeqw{suvKr^nkN3DS(8;$+h^atx$f4w)c4;_k;dDkn{I-`dI}BE&6lEZf)|+NitlvO zz=S1~N5SkjQhN;VHfo)gztM&84p~$rwt%Ual{5r9tCYHDg?M|kP$yX_pL@p~T0RFR z9X6tlIbmNV?n@zz=b|DJ$z@|ai}onRS69RYpAvaIlLKFUi8*dtBP;)wbv?u+asT3P zGv_~i*o@7~S27=*zJKY)z3Z261z65y#On{EZrlVTQ%_2*H>mSA$&ii!~# zuLaio!_G5Vq@mx!1(6^;sXqsj!+oF5`wV`A&Tp9GTMT}S&TpCH{o|c~TUE2bRU2Hh z&NWXAr-TD(?%+JYp&INDX1UKhhH@^R|Xld3-^F(}7 zPLnN9_x5Ka>s06aovF$_w@Jq{f++NV5=7vB`7i?ebeernGdBgr-pgcDiA1mtAqj%ntTW*9Yq0DD#(fhh_=Bh^mQcpIH2wD8Q%&7f*~74 znakHoU0i+lK0TSeJYpDB&^K@$^nUssBvZor!@E)UZk&{--kS67FuXf;@6I{zuJQe) zU7ysR8%`770@R5~E=>e*_N-gC-6pSFZY_ANZJL$AxT?h>+HrUh$dtB%s&KiG+D-{tc;Tf53k8s)yanF4cP2c5AKw01FM= AN&o-= literal 0 HcmV?d00001 diff --git a/ui/__pycache__/generation_handlers.cpython-312.pyc b/ui/__pycache__/generation_handlers.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..33874fee0ef212e96ae0638ead2dc5332cdceba9 GIT binary patch literal 47041 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 literal 0 HcmV?d00001 diff --git a/ui/__pycache__/main_tab.cpython-312.pyc b/ui/__pycache__/main_tab.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e1f9d1e9af18c7fa012b5661898b55ea6c6a4433 GIT binary patch literal 7068 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 U1GWCosb5Tym3%@WB>nyW0v<=?H~;_u literal 0 HcmV?d00001 diff --git a/ui/__pycache__/novel_params_tab.cpython-312.pyc b/ui/__pycache__/novel_params_tab.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..afcc049f1f8d51434a6bf0ac4379f8b9964f221f GIT binary patch literal 10957 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 Sc%H3gx|v5Om^3Dj68e8TG;z5A literal 0 HcmV?d00001 diff --git a/ui/__pycache__/other_settings.cpython-312.pyc b/ui/__pycache__/other_settings.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c5361f5a565b5b83c0bea14cb8dc059a12e28d85 GIT binary patch literal 16614 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

    VU2VDY56Tg zeyig$!{ukqZ>Z6+i0$Mh8hd8ywRgXE{OSwe3hVa{xDIT;N?q)nKCA~s*cVRhK6<#b zpQjBef0X${SL;BS0uMAC>EUUU+Sk3$b(L032VQda@ZG{)xDeKmw-(;H1hy*|Hc(h6 zJ#2}2co&7~1|m`%7CWpzG9d6mD!Yvfq4O|GG|*1~Wm4C`p+hJXf@woehIq<%bV3`Y za2I)$WY{3|>_6ZNYllGmE03^IP{J%)w6J0AQMrst1qO*koE`b{yWe~5>Jy_^{`4FG z2E7ZYs&FqJpwuie7M*tafMOFL>+Bosb_(lo$s(~jv2-@9Tw~6ph8* zD!;%!(3R1z&c6P{m9IZF^V$z)zw^T`JX9QQ7#MW&A_4@R+IvuCv zrUYo3*z_;By zzyR$1z!Hc!k{}$06$r(+K31i&ZyW5n5s9HzaMI)t<-|GHE>Nq-oqV zvHkQTrylWc57w_0>(>VBH;DBc{Pi3C=1m{yw1r!=Y}3ZRVFVBxd*I;u` z3O$6ohs}rkI=i|L4D?|jbg*8c^nyX!lg<42#VgPL@G4CpZ1Z~M>yxwJ`sSQ(tHU$) zZHXd^z+xD4@eU|&(0{DWzK&F#W_W0`iPoU4QM5Hq zRtIb=SbGTBcydk)z^$7Gnlw~idVTgwe=ao=1{3SuO2?Kq>?5A5r@j+u4jK>b4tqE& zQf%eJ@9h+X8YCa)09rAAhJ;vQF6ufcP+Nx63H1Uv2P|M8F+2ns7Gcw2q5H8O)Sj9@ zY*P3lNHA;|q9=f@2Kx8)>?Z_E2Z)Mgv88h_Ff&u@y7evhZ`t0l{+{;j3@=+t9dHde zC|MoofgOY%M9SEMF}{a#G$M~RgD%%Ve>kJ#5O73dr^povXD|d$zUJKLXi!*Lx zoELC!!l|qt{is0)Iua|*x_$!VqzbYJ0M~FMqXTFk#ba+UHjX(8a!Rcbw(J*rfDsP# z4Ib)`R@BrZv2Ey0XE+N0VK*SXSo}~fX$++3NR~j8WP(E@$tTm4-+^@j&6O4X0?5gQ zNPrqM+w5$ve4we7C3kZ0(s^e|E!2a)`@3kv^I} z@qo8=QkYH{Ne^&qqw#7c*9Nke#m1_fe01tjiq(Qx#ighFPW5@0`-_(NxPlN@5acK; z&%Vj+(}_OHbHhw=X|T9iEN=EK+2}9cMDU{xFkg@(7%<3{h+K*1u}R*?l?1pINV3pQ zvy(U9Z)@@au;lWB907!$^^;9g`+QtcfLk|XD?Z(Rs@+$+a(YRqv5h9FO)oQV7H6mr-r5!OcM3T_OAXg@GWs`Tjvg&)Qd|Vmo6Z0sN zW6rc*$}z-c5TZG;!CN*0T(be?1b*5#-sf5F&uJI|dYTpFtRiQf*za9G)im9Cq0`4% z1Khocm|w`i*@OPPMI&h;E+@zph+Kgu%iB2Fh(-%=&4^?)oiL4>#vbuDyzUNgTY}tH zk=yFq@vx8Y^>JGR+(E=CtvFkJrZ{BE4`t;BvueexT7Oo3C^P#~M&SoWLuoR#K+!c5 zLt?1{QVqR1lPC-7w@gZ+@Jt~kkx?AVw1h0ypruB%)KC&BiECeS47W-2ra@Okwfq-KTax_XyQ6{}MW#`;pg zyxLG$Q1^;Qjsh5CQiDhOD>f7xKey-*6XB)i$reG zWaHFUAGZjY`V4xQd))2W?9W{|VhV8<37emAdNU?7Ff;<(;z+^9`n*MwzmDG^};^iL%XM21Fa8Vk}8d;Ru*-MShVEz-4u1R_P3kw`9+iO{)c>f zyDl^ZHuLduo5Z4~*H=>9joROCy!#gx_HjBdST1hd%htj<;5;ovw2oiT#2O7r1MPn8 zEx~YAh+bafTQv`NYBa+MF_auFfpJc4gL8{FQsR=pr8=w+P%}Y_E0@WsJ-(T^%?Fnf zQFeSQU}Y6bFbalhHOImFc5Al*iyx#3`n|8bGJE3dS4N+>^86_M|JsN|8UNesBeTc9 zbmdRa&pz$F^28rsdG7lllm6}XQHjQh5RXZ;?gPhCdH8TQb_u%3 z0v27f!&=@+-v%p*w2Tbl;#hI)GNQ85|0NENo@?!d`>5}QAZ`Oy*`9X7u zXfE-TTr`(oGiWmFut=Hn(W7tdOGJmWzVu}Pp-*X^GR9K-qv%`mcM(jW&m-Rm?jE4m0AH{qhTl5V%1Q6LcZ>f@BxaGHdn%-8~&Gpjm zDbDdJd<>go)OZ_l)YC4BOBk1Y>WC3wSONrfVkHd>w`j}T|8@!Uwo>f3GxV?dymCZ- zD!u#mN&)5>8wJ80pI2%4#M{a_v47d;l_SY2-NtB1yhVO$qeX!=g-2sXN2yA$O6Sce zg-ZX9&R+lJMnFc~2#C(lw0OliK9kRyx1B9+E#{`|7if0AX&Vre%BdYP7&S5TEkO)% z?iSz55f>eoZsl9?IbfefRv@hgIo*`4;5Oh*B{mxmpd^F@x3(W+18_D`QOu!k3*>P0 z7k5=gpFGPlwxim5MZ3m07nNcI(=Ylh)Owqh&%0Gi(^^@kaVboUa*a?oObn6REX}Rz z<>tN!#``e$ICn&QL~~U4pyr4+F2C;%b20T$UsLj3&2lriIl0xI)4V{l=uLalf4R|A z5IdSazjl65Ben97A-=U8wn3s)Bx?1&H_pF%_O;okPrvskZ-h;;fC@vq-utV+m>qw5 zkXYpJz4XfLmqsKMd1mT~nW?{wz+^zs4tJ6qmjvT|tZ#rYE_?gxv!~vB>7@^ey16p? zqnW8^W=AHam+T)B+-!$<%?#omZKtQ3TC><*#R-_d?F-isvcmtIkaQ)qjO%6V6ag zX_EX8wbyTvz;&98(O%xxmo}f<9IRU-)~%Ude&JDn-B#bW2ZGx=#ciFwy?ws^0spqc zV(p{R=6d(ci|@Vook8j~2+qFv4TxpUPJTJk4+m)rX=g*gi{5D;q)nh*YQ@>HlmGVm z>FomM^$6ZQGKP^7VL%a2W%iZ7miBjp)LrL{sPBC5z3>0|zrFsA{~vt^?4vZopQECz zaUBKWqywE!0&s;1x(U2e6Haj+7&vmIQy{^626;1(S-|#RBhY%ycqhW2QK*8vGV-K7 zFO!RNLS_^xbPK|Oz=SV_Cd3GHbhD>_-$0n_bRHb)cJ>bl#5WBmVb4skYdFz)V9?dm z7uM7G3#U?i1;rKyDXMYZ(XQ^pt{wp0ItYQv=&*@+4Kk7&PKTDjV5fqTL!?xBWP~Ix zLC0Vma$u1}Li9Gf2i6{7dEro4+bw(x`OO7=?~>+=FW|wk!kf+)e@*ZH1E!}xKu9k= zXUsM6NFcp#vNhPW?(L>^mrOZ9Q>kbw^(^z%Z}8o_J$Ua!;=K=DH0=(VGB4*A1as@f z-1=Z{qnO+1&s{uX!q(hm4yKfdDJ7nr{*?O5MWrM6T(T9N-gIgcBzhk|^Y}ZqC1V`j z*>GwDA-BL3NhZ+KHfaeqt`Qs8_!h36Zt^v>U1u=um~kd6`{dH`r6*U9ul6`DX4Qo% z8^-SWjV13|il%Vs`)L|W*`*wNFsDY$sqrrJE!}WIA8dP2YE{EDCU--^m@Z_toJ<){37RWKbEW6lWMjbG95QE}OdC&Q@}*{g50MxQ zfG7)84F=4Qh0HlKxp^m#j2|JqjiTTMPdaNev1y%e@%m}r*SHzwx8AKCZ3ALy&5w_* zmoUGnrr?S#;)*T4<#%7$?pt;ry|Z0A(sqs0n5+}a-cBjIbYo5&ao$#o^{ah#cTTx{ zHLdj4`uTD)skEyV@ORq>$Rq8<($S?SR*$Zps16{nOj|IsLd>l29Pll?+xNh(-~*lF z1D%1)y(4QwCi98SqnjhWVY&CwfT=NLNlcFkLt_6BV8g60Xh)L%F+B$_U(@Fs z@0>w7k@xcnr;|=4olZZM?&bW}#;Mkerj~1ZbEw}!P*wFwk2R*6UxaQOZwzm5+Z$q z_BH4IPGd0M$=bD2%&hbr^(}7uRn~>Azs$M7`5L$Sc0Cf@)h+Jo4rK284>Yk^`YJ(F zrD&=oHU`Pe2TiL*)9O#IrJw*GJC|XY|Ejdp$$2sLW?JrbXt~WRC1zgJS%=5-gO5xTX!)}Y$9Rulf3@Hs0N~V^p z3c7TQTyIi0cS2mQ`gy*w-mSx~9m2ubZz;GS_MRXQB-g7V9y)52d)Kf5VzFu(PS5~? z2yN1NP8NB(Rhn*tk|v49&X=a~e6oyvLL@hFK2-30s!aUP8_UF-Vq@LB#!+P9>EzMm z-V(WWqQAf^Q%E$LH$!+ivU5idPwpkED9#bK8Jjm^&4Yl(#Ue5*&hatg&9_|#C=1L} z2NUX$6<3Fp+p0s#?bIQrger*7XbNv}Rm&ATpDllBCe}QEo15pB7b4KLavITJh6qJ^ zwN}Hl4rxcqTuiA{dV5UIBmr5qo@wQc=kuaHE+)MOIgjYCo8$BOf(Qa_gE(fi#)Wdv zQO%_YrsSAl*7BhW_W}Q^uFGToRycdi%Lle#+WZp*B>P1it#S=YkpI zHpb(S!%-vQDlsBN@BZb<*%RN66}(~(!%5INJi27z!mG45{#aWptitbhfg~k`JK;g% zkDf?3Hc^OO(&R1lzzgg9o!v)-jdZ;M-Z?{9CqQQ~QIea%X2{jkb#N#u8@OKBLUHdV zuN_`E5gVvOoqZ60GC+eZuo+=V~I z=@6pj>^hCl2r8p221+b2t>oz%*vccgPg0PPT~mi7-~%P^)QG5$q>48W~Nom1!kzz4SV4M1m~ z@7~ur*yoC`Hac9i#?-|>YlYk6KJqHjwrc8Nz_v;H$lH)KgKcJB`$|M6mG$h;tCHqO z7u*M{0?a;v5I~MMB43~46Yhws5tCi4mAh@b!^-3f1zNQvoP_{Ip&nk?=n^{nojoLU zx0tT=eLeeJVe{Z&p7daQc*xEHL~({w7@`85SCWM`Nf!s0EMz!Ix;iQchJ=1fet^6u zS(+rK7tUb9dYF0GC}tvwY3vsCa1VFxr+J0gAi@#yT=ZT>>|kZmj{;G+4wEG5kkk_? z4%gEm6@^Vq!gfkvgc3+aRxVU6BG1Q>oMZ=y*cu_5DBTqPmSQX8$!Wsn9!d1hZoliU z2o&=r+&yNUZywQ6^S7Yie*zT7TEO=k9xW$zJPi~WxwkE*$ZPu2O6^u94lU61gg`b`mmKRROMv-C~l7P-m`2$`N6|RsNjD zSYba@b~0yb--Sjd>~}Yl0wf)1WU2L$D)b_Dt6Jo$A+&{9)snQIC6}RJwUg`LvIVl* z@r5`uiKI=Gcv`&srW&UkM^Yi@h`W;Zw8zR?q6VM5w490gp-kD_EI@kxke}ek6l3qc%wTBbxn42a}gczkdug0fBX~a zcMiusHnn9)Ejl(9$@xToc{86eAIJXIb(G671axSw4Mwl|O!I_J==^RhlN__Bdh9$GXObg<&0} zFojddfw5b!JpY&AV}ngNd*UT2OJZPu`Af4e{!sV^BDH@=&}3Xvku3#jjYx%JEJtjp zW}kW$4D#i6iNQEnf>)DQuAKeRm!za;Cr`Zh5@bi8y7K&as8Y?I{nOQ}lLzfLiA6Rh zUO2sa^qM5cl@xjoGe)5Bm$)GjrqofQd_IZoN3$#A0)`WNoJ14RJokIo`STYA^OuSF%l!Gv$C7?y z&c2qU$zA+@vc{Y{hgG=Aw{1so+auz(M=qK=7#qiK_O+<0oErzc=r`1@-{P07*^(ln{*#5|fvhSd?%A`lpP3w^l@ zeG9kwwm;O@POccoF7fRmTH@(x> z*zVi$P;kdyamU`Esq1Z17rlz;A3F)S`N{G%+6@JoH&-^TZ%TM;Vaq~X{H!FC{3hcD ztKny>GB#uxex7E)ou6kJaOdY%9fb>wZ8qJ{%NyEqbr*6C2+tv*z#foDsB0jDB*SaB zAfP~UFnc5l3566QP9}A*SX!`HMu2DtG$+b2qQ6mLv*DXq2RW~hR$5IDaG$8@wwPr? zMf@!)Zr=(4>xZ#3WXu8;h7PYV9zf#dxM-4KPE80~jiD1IX?O#HAs}gPo`xDplYmqR zwV?OOMg=7l=c1&@9HBNf$XKb-@O=8^#2z6_Gzu~4Qh;UH9f=Yb$uZxM)`B?aHu5R% zWZvYm%MZXZhi2X4QJ-^48eaawoeJ0paI8pTOroPb@?lzj4l; zxDt29w8w|%jKQ1tlni%Jf!l)>&0n|lXF^Ta6qCyp*;12 zh&<`%P^9q#L4`u63NYIcOgRT^7@lox{og z#E1bzNkbjxfi>ZTuD!@&Z(mq@FsywHwhOdqZXHA_NI7frTnI!$f^q#8Y_@RIely z7qr!hwmR>Fe%sP1t!P_5W{i=R^I9kG@Y`068IdG3I187Gg-fT5{=zk5$wb;p*ywJ* zbe~G&8JZZo*SFnJ{Jwn5h|U#i5FZsb0~x@qL4C zS>~8NXm*HZhu7gZH(gty$#3{zy;ep#ZGKBbEYjIYNN2UItlHx_@b`r)-l`)t)qAzS zy?48K?{?p=J&+}jzA)c^N|E8k+etXs9e-Fm;c^?u(&oxZL2U);L)57)~yc^kD( z8i;?htYG6Ju8XF8*>MQalzE-(5=PsivjjBv0@Yj~356I&HYAbG(Q*7HfD++$d9c%+D57;l5th!KYC zI5oMe7-BVGLDJ%}vG|tK890mymd`L$G$MHi^l8BYrgfgezSZ0vfU*yvw zrA%2b;oeh%{L(ot5UWcQ39T{OMq1=*lo0=Fc%o99p#Q5mGpQL z6(xhOxOf2Cd0YmL!t?;p7(6z6A8J1|Q5nTg3#Hi;;`%ylN@fTV0H>0Mo zx~+K_eVa^UjwU>&`MUO`7A=*m*9>X?N_RxdSncOvzbKplL<{&u_r4z3Lju~;&A7~V zyQIwUv2o>oSP(vXSXh0mY0l~|Auh^v&6cB>^iug*J{2RyFl9}#UGe-M`8G3rd)-G6%ai*|do z;xV@(wHH<)valK+qmd*8Pg0|aD0~p4Cv_dE(@5|gH5eg~j^wa@0IK7{zv3dS>+Bx_ zC`ZJF@GNdHa7}{e6kv>DbPl6LDMVL%MHPsa_po-K(2O#L^+aJX986e(YbSk2wzR{G zuvKlif2`z|-RGzDdK)}+l*`$W--rv1(U6X1dv5webS3w*;&16RYm?S8bm#g%&qYBzsoA zZC!XN&*ryv_?ABsuytI_>j*WkyI>KU?-olMecQSw62k>mp|Yy8%g-zaeNomt*(sJS z3zn@G%U1i#?wV)~*(yD5(bg2Stq^T1AQNqCc|TWESoD#OYI3be(v<(GIQHt34-65Q z3AHB)e;H~>3JY#KDlPlqRl>bw%}Vl zmA1B7^R+elwbi8OLPBo@t-WD=@+Fk{IlHb7w zMuA2cEHsX}j-=`cc#d<*3dhCdN$Y-`1E(&^I|JMzG{K}_N?asd!X|yB>}u8_l-zVM z9;_mj?AG;wgYtZgO!V!aS$h}|EAf`G z0PG0G@$JUmQv1#Z08MFbGbjY5FKY?P+2KxeCgArWw?QaSOO5A_CLB$mboq358c`U> zQ1&j2L;6N|^QhWes(noXy;#oAl5GaqDls!=khG3~z4P9WpPhZ~n+ig5+gt764A<~wH`;)Xs-S{9NT?ksz+L3z3SwO@fBZPHPVXRXuj>V^_10D3O&pn{=A(dn|_m?7bOJQ(kEOEjZDy}~LN2mVCU%U{hEn7Zj7~4B;oTwAcRbG<_ZL!kI zvGhoCm6B~KZ>vAAab#0CJ?|TRq0+iw>0+^TvA?u=JRRvJh4M>I*Pp6?ZUNihT5>0< zpw)K2cR#?ZOXZbk+s?FkADl{>&hVG79lQHdZvMn7f3CyZ@^)^0sD|Kxn&rWoyTqEi z{55MP(nI!oZ>MNqDCv^s$tdG>Fe9ZYYg|$M4*46S(N6zMG z?PGEv^f}H!jz-UCuoWXSYHEHydI-8DbJE7U7PgA1u(M>k0&EuJiR3soixCuw5vyFb zi(Y3gD$RoXISQL4Wf*a9RR=z|S4|>GX=hjsu|hi{LJu$+N3G?c6A{~TV6y0W8)LA@ zg^c-?+by!P7J z8{x5RKqZ;xLY$&P47cU~qA342dBj)|095^zS#z&FVzaf4H)pGI- z}_SJdam3_3^)=w zNNE)yM3gj=|Ub|)KCSe?2=6Q zZz=R7dHv+k9!@Bvcta2 zl2=7uHF*y5YRJ2Sgq(z=>`~|<3P`lkb=;pTexq<7=6HQuAQaL+gsRYE$ z%{U2D8Pgezo3NIdb|f)wNE720q`4QfTMm(P0PBa`-XT2H69b7WJ%v=Gs<3O!AM%<7S~moh9Ti^q#S+1~r6%BJu8RbL?Ep^-Hq zXkTv_-7t~k=^WV*Fp+q3Rt`J1XVBX;nRsqxsPqm}+FmiT_A(U0+eX_aP_mIWsDy*c zTC`-cPi$NpY}_a|ZuB>94qCRHEAy6kTPCz)&WV!e*Lt+it)E!tX?#1o!e`ksvQD&Y zxda=aWGl7VJNVMEbH}DC{0r^^?;%vT2&{qJrjZRuH`Q`t%jg!EPhB&zC14_@Z)-uw zY6DkbY1&9@&{QFsDm=V*$(cUCY4NpMw8aNYZq68xjbq*>V*uQP`56Nhn(VtJ#=u*~ zf;Qb;#sGC!nklYdf=6&_FMi|Q&4B+_&BOPA48a*fyp}DmDjm>}mApWjcCLK&nVC19XCtlM zktmJsUC3Cn+3_z3k#+rnK4wHCat0a{%-Cse!b2D_(R19GDwC5I?dS+38=}W@=ggT= z)^iJux}AuRK}VKs>qSd_(9$GYn%;qE7oaq|C;Qaq)AyXZ$8W12xqF65!IcNns~{OR zcK>+F$@KAbPvS*$6$}6<*LVBujTg;}-cQwJFJ-gs98inen|O`)>#v$eqZ^ZGeNyAwA5^$DK3_+5}t3pG7 zl@!7vS`QF(NnHs{Y6kNpQ;bz1EFmRh)X{A%CNqd=a1F8AsjQ*klG)f5T9%Z4zHl6XTE(bv8I6^=sGIDBAL2ng4M@#H4Qb4nI#znBb!Q0 zqYmVul<3FW$D!0n_zxt8ak?Z90Vcs(CTZXrI^6ASXLR5(1IvPujZg>WS_irY50T~? zxW-UtBd>wH1>{{tYQp~kPZA(u8AimHiT!frr02@ZUwiMR*T^n!ME*O%7O@J{Yhm5T zd63v6vUIN`l0n@joGhIdGU$Zqp?qWp@f%cK;3;2f-EcBMl}?EB96sQb&IP!W#iApL znJ|bzQ)N^lI-DpOsfU0wB$Nf${JfVGi3oazUMCKhz_>7k1hL%1IuwMCFTv@%Yw7Wa z^yGDTPFf#mrj0m>*$|bPs0yUl%$gm)$tju`^5-~U z&nLg=wBwXxYVnU(|8Vs?<(np(pt<(ow;z1Fe3L(a^LP>{mz?|whiBX5(m?i#YZ`4v z)zqV*qT7D!~V~Llt3Mck`r;EguFJ?7|Ecqwz z9>3dD;mr0j_$~YA@>^7G!30hF z-Zt%HV!ivpXt^5={QC0NV$DyMWVNPoKQ-nc{L|u$)-2sm7d9jOW@QEZw@g~{(+uQi z8Cq>gZ&{NlTx?ut*S%HUu&zM&Hw6ZS)z_zI(PLr81(``sjdh~NECKaGba|YUsfIa5 zxK&m=wbhKM40(P8^`fM#S|aL`aW1-UIV*3$dIw-c3O8&%RDoBbYbnjr5Zj==9dpq< zu(E2^Bz|L78LW{E2vXKIIhE+zCCNg=bYkKyQ?pZQF|dfil`p5Krc5QbBwMqPenh=2 z(YeT_Kq6}Ik%`ghY6!TDW;8fRPMVC+qs*`gO?PpQnHIr>K#s+! zkixNk+)A3*TNV3M3eR0h(Q?Xq7>$ckk-3vd-(xgEZS<)eijT#NlG19z99wN;#W+;f zPBJ{}YLwr&L5$-Ty$fO-1`^|7t1W(GR$B{Wm&~g@FReUr>+Z3vs6-&6l4-$}6pIMi zR}_n+mzUcmb)u-f1_@UA38G5pO#PHXKO^tw0x=GwpCvEcoCq1RfK_E>8;UIZYSm0%PaGt#H z!*g&kYaYuvy5_OvZI)uPHIC@@xeJ^hcaBxZE^s$9G2o=d?r{|62@O`8?A((Z#y6b2 zXZ#*d>)G}*?S9MR5#uFG4!cXc@;qN%i{G+l#2Bjq(-TOqj@71FaMyI+bc(Nji|_si zgZJ+d@85IL)X5e_n{khJCa2hA^yk#DUGbci3)(1TneL+54oSs=rC8Xkwvo0_e#QK& zTXDr$8=2NiLVRfTSZtRHikNmy?bP~T*#ZR*jB((0oJ<{0^xo^7hLgQF!z* zlO<>>5=}*(ojy}hz|;U^Zzt{pGmhuZw8f&N-0=<^(}9eO?SRoIc@dTM)iz>rjEBw9cIa`yQxgfUB5?8Z;o zhNGAfhh;AzR*}U>zyMLmaqec^Zfw0!E4KB*qCgu!Ue5pmg}V?qYM~TG|Kzp> zsT+c{h^F_>Xj*beZbwF@sSu9Q=R;W$z(jW=U;;T7qXL=SC8rG{E`K-+{rRTpf)L9Z z&U!p+2qmW97(%RgkVXz*k62OK*;l_RArSy3<|qUGpNK1|T1#AoR3cCqkwj!Stee00 z)XTGz;}V_`Yv5dBMu9Gt*iEp_wFWOpMzUz9C0UhbEFI{#tfgl^CU2TN3wbmZw@ciu z=jocHStRb3BINoZ4F)D28rB|(fjkHXag@XmYlKBe#M*KSF=osz3U!iKLtZU;L@NtH z@@RNSESMt{8X)f&d5o0%4TZww{XKbvfD8XX9?ddRAsOf9SzLyV-Tgpk1hVVHI5`Xg zF&q&f!4ghqR9M7XGMz5?GTv}lBtq|RDY5^}k|5?z2dOrN(Zi`$khh40kq?_6<|bj#>p`Qq5sKN!KurQ&`(0v{G{u-XY;9jI5;ZB9oP| zzY>P>D?B}xA4_7+HBD;@Bpy zb7#=JPc-lI_4WG(kNC{{0_LNaphp5?a-wh2I=wQuc89oj zN8pj(fcaq1d{{Ie_C0pgXFeP-4}oILC=8nGMRPqY{D$%Y&@2-37y0v>#*#t>Rl$NL zv7pIc0L#)LOG(h;5G@YBrPezfT+k*iX!9@FbYX|MV7u?ZU1Gy7(Xwky8y{_>xL~7y z!R8AG#03xF2sE)_w`kdoXjEIOkyi_zRhGBK+v(lrIT$c6Vo$0_4k&pNmVcL!&N!rL zs>bxO+B*4D`l$zgXqtR{db_WAli#+PDehD_yg6sKcveql`AV97P;pO%gfHZY%9?{^ zE5x!D@06_?-#pejQNc=CEn2F*cT8@dTt8LjbF2;g(y#*cX0B7$+oHOQ|o>8YcE<`-#2K=n{bR) z`D*CK$H8Gs0Ebz!X?KE?x=4}!5KdJLSegkKTS8FQl52UW<25_eaVM$afT=WO$_tuG zL{rH{Q`sMWcfS_h=c7$p#C@M$_yoC-8RP`?Mmb{8R3@6rAWDpz5xsStZF9NiC&k5^ zGxa}Ny)G9QKhIgS5I_GTv1D_u;eS-sApFZr1Npgz%_YWP+BgcA8@D9sepzqclA!xl zf&pQIG!>_CU%sIyk)x*!v4)Co>o_p&P(oB;MGfhK$dMizwiul84kU$P-UFwiBBoHI z0GB4grI7k+B1LKpVtw8c#vb;R0E8<=u7#SZps2n)$nnpqyiiG+uk~Wf zrn^OcD%e^Sqk{pTo7YR>pTQiis$RW%t42v2JkOU~F8Zr#A{CpDC@B=vw-nA(^nK!h zA!U`#V${Ub)AJl=)LRlwM-K6+d|EW`QNwM-QO#YAgyPdj3=juO;LWiI%nT*K5D?K2 z%z*^^GKA+8LcF(9eiHp9@;=JfiXH?Pf2Tw0DSs z?atzo8K{)r!nq<+!cqG1zsy-U^Bn3jM_*j!eC8WPqW%R_bo4k8i4-STM5_7he}e;5 zK7E~kH>b`}BR@y|fI5|gxV}gsnz&Rcej1&SYVW2aPK57LtiLAjQSun*`d1X9?F>6L zMPfNdLDxiy7Jm)T!$wAivx7@GIu)Ekl494l@R(`P?jgE3qSf_f+?*?8uJVa5qH@lk zVY&YUY-ZkYatZL!n1d(seML=^+k?&P#pddOFG{ICT$mqwndY!;Ljbl9l zlU?O_ka-U67-@?|eh)y_~4w%bO00~u{a7kxkGn^Fn=!lJ=sa!OblU1gG zY0;dcJ6bN3|GM@UwSmkBKHH%Z7fr(NFA?;rr+U%x9n#?ylXt$gc>2*dmrPgVcoX0D zox$xL;`WX}=AO@%P0%EWCgGE7M#|=6C-uXhX0}$ZU!nQg3ggCP-Ou$cD>oW+zc3hZ zp-$JWK_B=m5>%kgv<%kK?#HbBEiK7X0dV<62MPm@LuIppys z^3X@=5tx=VNzWkS4SAV(C$HCxf2UWY_}sdK)ffrd;|=PjCu8#dBJwuG`t6sjWHf;cn+h6VxaMfL=Mp0)$@@8(<#yBb%^cZ{I-I!LUKHvqz8xL{cCJGt@zbL7YT#(tJ#gVHB{Vv3C$A z`It2p*pp$l?B-6VqQZqZYcnh#|$Ky(fyrm zXLq03eKBj%`121}a7lIC|xmQENh6;yb-&u@Ea_qp8{3zmnf z>x0!R#p;#sRIm2vFO}7M`R}iNWy|-rTr6t|H8#Iu{hsyZ{9t2?*x2H4T*JQzvK>|q~ ziH!P`Y*WVeenCLDhyw@PA!S7{oIp~HjDZ`G(G;k+Nk}1y4b2tH45xQEJ0I(oIuA)h z9V>`MyW$=i(G1SzNDk|IYQ~sjVw-nqAaybD2V?c*qajl&i6f7-p4>RTabmyUQW-E+ z0iZBee?$=gIvA@zW~$;RO7778(9n_qX+&z(h$8}-eT9Cuc95F!%_TB1%L6@#cXCTJ zr6ACeb0k&hOUF62+0&)OQ9~Bgl#xOam!O`o8Y{{l5@ zh3OcL7{wK^iv0Vn>!X?E-{u0Hk5?024l zZt2xOerEP7U%v9S?<+^1%CZzcjPB)NL7@~W#h+~WRk~MB9wXQPjY7}DgP?UGe!?6b zA1K*fB80iGr_1FOUZGfjLc{q<8o1PV*}NZ_`15dz0&G7?W0&5g*`K|7tYXd}o-bM& z4QImrN$NTWq7K&l)5)ijJxymQ)iDgTg>d|^bFyx%GxEYBn8*d=M>qZcA0TzWg z5b{H6_1NaHSAAH5TUB;~WpPmX^WK?PzcTaMpU+JFDb!+d3^e2nU=t&m=`4Im@O_oM%cyy8VQqwwFK zVbDl2my7}-8;UWoBF!Q~C3#=L1A-OVrj-yy=?rE@UZxHI?g;~PFu1(7BkCXo3c#LHQ^!K?}~t0I`?5VIWq ztlD5!qnOp`&ssdf{U$w^fn(KTCWr#x;?M2GTo4;3%a|*eTP@~RznxMIy~dz*iD+Fi zdDL&cYh>eZ(j^<@<)XRVvoloLG`VwflW+ANUwLP!y!!0MGaJ1<{_$DYjTrOY# zz9FGvgZA=0+kX9pUwq-iBwfaCEo4D6axZ7*1T$;I%o=}Y-AGcbSgPf0(V3!2oX5OD zY}^nkuk$STZugZeBEYi=cxPgo@gX|)Ct^4%7q-_;O_$SiCz^rxD>)WO?UVC7w%~!kb z0{`oSzkqS8U2mIqF}cx)07B-W)BH`*+O)QM&4qg7#s=MmB@G)Lx?ea92&-d|m%s@H ziD$vlY^s`^IOJ7zky6{q%S-*uh&+%eS^;DVxW+&YfG7eI0$!k1BmSa$6`mP91QD2U zTk#T(*U_HEt!2A3) zdmH({^a#d0ZI$w2nZGJF9VyI&S2Lh7MdKL15bTV!%y3G7-aPM6`_A*u=lB(=M6n|? zE#@nx@fMY@s6yJ~7$eXb1eURR?@)RK z=B&lag%VJo$)ddm&s8?FYU13{b(d{6F<#?cY>XjoJoZ19aD1~YB0ZNY0JPGj{^a^bLAS6_qxl z-=xrK^5S&vnXEcXlwdl>ff^(_?8p_~~B%vFJp5Yue#{2ssWuxrW zg$cU+Yf5O4yi;_kU;~gmqNO9u4S<8p_WiV@2lpB0lJrX(d*VF^KcH7%A#aMjACgDh zM7He@C-3WliA|j1+ut3|h_IleYzg62#15NCx`=XNvPSHRcpmI3g`P#;3uj5^6Z3Q= ziF`8#PN3cwffFQ9A>v1{g)idqTx{WnuXiuLmGeVbh zN?vBo*ua|MX0ozRE*)RWj<*ce5yN3*4ZaTBc>w4+&bC17MzIuWS z6_k07zFn{&WGknK8_sMvyXDLlRo+bncsEA52<#lViv>-gh9wjC{Ki&t4Tc!*d_PlT ztG!gTAXL=gJ?icCEo+DH7f^@dty-{@^WZ0H%Bq5;%f!-UW9iUau;!mUGJfQwd)y7X zKcqqHNuO++Tn@CNk9V~hXkQ59os-#qJ6ZO$FAv)9676?QXZh{x zreW5zEog5S?d^X1y*^Xn<#fBJ4Y&%~4_$C-K`6J{m*ene`7HI5)sy*Ci+v03oX$Yu z3R<<}baF;PDMj<{^lqB$^3^P#Iy%*RLFZe!;;!=nu9f~ z#F|y;MiVujwLb9dl!j?{w0sB%gh8z}iHKH6t3dxJlHY zFJP&?X1)b1C5h_=O{Jo#)B|{`PL?5DcF|P+(IGAR1tb(w%Rc_76m3Vrl8-;KqtL7_ zAAe**mK1FMcbFjpULgpG5023O@P3$}}+Ig!$$Y!`3^K#1#~NJHfau zPxp38i+-C$=TFz;HNVAxTmC#9g>AMm9qaG@?HG6lls^V0_hr;!LH zxQKOoh=RMM8}L=hf0Zr$E#4p=Nt~k-Pq01K0l13fFO%ECW?t*o6VXk2-#oJj{{MNI zw8uBI^6CLF7}S7Lh;1f*OW~&-Lv3RP8$XZsnS1ylV4p;oJ5%7zX!AzFJOBnTe-f+S z0Z|n-ArqzC*fy#v@$?dhE6zosT)d@oYdQcsOKvDRetUO(m9!;uq%fPRU?E*O{?zP? z-;nr6vm?(z&JpCaM9hCk9SkNxBm!DuyOG}LAd!y>qsfuXb^*$1B9b5^9)C!%W#puh z$gv_gRQSC!e?I%AFU@^L5}3p*!a2}%bDv4aC@as1gQR3NpGc*8?D=FY<=AmjZS9b_ zEJbb-IZXM+(8N(mH%8eqLYtAdBtq{33jaM;Kp+~(Ny(=bppJRnTb0rQO+Ym_Ij&;sh=-c_AEYSz!qBg9##zIg| z#?&B}FLL=4%K}_^h%-r7L9R&TVC^fwIYPFI5&cCj@1sm?RtoP(7mLsYYk znI(_ps+#(ZX2YYYo8pqjB~ph58K26`G^agDC#pu42G!IdbN~y0k>z1d$yEdckaiYt zIiD?~zd*l~`l0PqG!y5^Q_JVTtaYwzKx0n6>UFX*tvD4VCEAiO=6$o8=FeMG^&AUW zjw)P;&zd7zh^EarCvy-W3S@H>4$>Y}nyaOG`^xdrtAF<5?D1D6GuNx}STfJ_07BA4 zf8yn<&%PL$T(SFn+&HS4g>HE@_sgb?R#!`tCR9I$=>yZtqkDB(0$7g31T zyDt1G4s+3`ws5^4@4!?6n?h{}JE_w?Ax(e92p*fG*c6%lBAWd}9eX>48-b7yX-=d* z_In)u$p|O43x0 zgm4P(KnlLo)icl^PCU@vv;Tl=J5r-267C|eg*?_s-4xnQ-Zt|3;I-q}cVY}kR;d}> zGC-G)k#~eVB2*+h)+J~JpcOpdA=fmVE-N`<_TN8%!z~992N)YcC&E|YIcaR}k>oOk zLkQ0mz*lLxcd4C9kqp{t2B$;XPT4&C*@I^e`tufzq=mSgAXgxA1vvd`5!sC{knBbq zO(#sFrm;st`O7cmSBC7BA0+7@UY)3M)SuH&R!r+Ilz8=l>MdAo5H)o)b*$gJY-&-c zVA0%)jyXqU98LZ*DLY3e>GT|s7(&cw{SOw)Uw z$mL1XyJ!7m*3|Y3S|3*w;5NnQfkQ8g7KlX)zTZa&H@0ej%QD*U+x;+Q^oV?Lqf{V@ zyhtos^tz2AZ_xgB!{(p3d|P+=I`&Mv0vkG6&Nh*=UF3>b&zZAg5M4z5{rU(R@Uv(c zG4f7j6;YcB<*|>IMRny-O~M>0l$I0N+5GJ9KOoHYN(66!T)DBS}(+{mYZH zC;p%6zC0?9>&&-{?uKf*fo5%>5j0}o1PBR%gcgL5ti@QeB|F-T5RGKCAge&D!BJL& zqZvy{93eZ2ni-!6%~PJp^2T`LjPW)h%gl7STWXBSvnR1+`@DHC3f4T^nfc@WzFTXz z3M4z8Ip>wF+eOu_dvD#Uy5Ii${`&flz6NKg&Jo;urw5Np`ntEEd0`Ai3;c)JSNJ9! z$)#e7ir-Q(NyS@KRG^Sk(oOOJKE(>qdR*N*G3k(x9qaV=JTe(4|0S&slQ!Uo$jBkF zv@0E!R_M)WI4o(M{OQutdNSjF@OB$IcLQhj#JqO&*&)bSBo^FG_y0g0C=PiCVS0r4 ze38!&@`Z9PoKSM1m|Pf0E@t{f%8sKy;&PvR?CfJ9*F4cRFW{;|M%whO3-mC8)x~B8nAv5=LPDAyNle6;$4(C5B?3H z_l)Z@5N?%P@W)R9m=W>VY%}7x(6=f$DfNKEi7%Ws0H{UD0BRdaMDI}}IgH$;jo#rq zTw&~WVK5@t?`XBhri@L%_vMvr^RT`HtnGe)wVB}!WX9}ZLLsy#OIP6QGT>E=XPrcT z&FTvPI(Z#opl%sTd)hC)Ps<*Tag^4t+LSS3r89(Y^CCrxTstPBHW>#ZHbM|ZQXKid z@iY%uOegFz&{GsrggBVcC?QPhc_PWOv>nZXp9v@ZCu18{9_i^h)KyWvEKI>eD?81X zma8L*f|?^Y%{BZ16H9F>{1~+^nVGF%l51zwIXtx|<7q1NpLYaS(e3<s#2@q}@Z!=W`E$zD|&>O$zrRuoRgzDQb$+&u|~W4-C7Hd&T;D$J>JS z8`*tCa9}M+$U$t76y3<+q2{9hnS)wN=`3TRh?zp306;e}fGIh?MZ&874%K>^3MQGG zclUI4(`UTPLz~2Q5@!`2gBJ0K66r>WPJnS@p^HUgT2UyiR!pnCmR1*;1-u?y%G~^m znM0YwtFE+MY6;{n0nk#~cI3aNgx{|7F0unWCtN%>bnIg9Q18g9=UaZ%GS(OVQD}0uar&{z>kMiSD!A(1ZNe`2z zmSx;Hvt#&pFs~)(xG(I$#-L-9d_c;{an(_Rz{L#U^u$m3`^L@L5l!m zeO|%Ne~$LE2Q5q6-D*8Gmxk_Comg$Wc*>tL7N#f!_;S+1!4zN8!XX)v@#3&oE)OG- z0;dXSj|hse7zLIS;=Td+CG+I6Vuy4yz?YZ5d+DW`%v3ZtYGqXEXzu|lf3i@&9L!uV zhhDoS=n?FCQi`fQ>ACRu`Nsjkm9!Lox^l1-Sw;2+6AB4;VEw>)7-SrtiG(yI@KnBk zG-WcWPxBf4!5CTnSylxu2jN;tdioKYMrLPV9aX}sU5J_n`fH`7%ev6)6Xp^NW9`V! z|5x9ao{}((kwSLdh89~&tirGHCliZ=T{t4)|DK?|EEG(xlt1w2QSoHDe$w@#Rv}Gu z11@14R){YW`J!QakYB(wO~l~@`D`W}kiIFz7mIxHh$U2Yk63k2plY3;FTTpJXG@x~ zzz~o11}?#l&%)}ETdxixM`b`TT6r@jl2gadZo zK-*0*Wg1C0?!(9dS9wR6`?PZFx?dw5xq1ynQt9d{yGF5J>NVyWu9-zq(`Ug<8Zk*$ z5|F$Snre(9AVHwvNksD6nBb&4u17u9J^M^$+}iJeim%BSG+LY@Hi}NW?9gVshsZeF z_IczT-4E`W7Ql#2d6&QrN9)*O9U%O^{D@2Nr;)Rs1|e^FMak{07>}qoTDc=-Y+#3x z`H;D)M)gL^>@eJl_d>jACDj?*dSk#G?*?BMM3>dj7Uw($xMV=AvXSQw&Wypt9L>sI}vGXE!3@nS4=3 zSC>-}qN0Whl2vC^9qIBC(o#CJ_)<(~`>3GLPM5Io+w^A_6(^}+lF%;NBOX~`{LK;U zmBdM^;J>4X`7{vy6=aPx)j=eLvnj?RWBQ>wu{Z%#l_qG^*j8I zoun~t1CRi} zRY|+4=PJ)u`pQQh7_0fsj$qO@RSFzzqO6M^7BQzo2x}j%@ol^6sJdx0rDOw+70-%t zPhjjOe8=}GmRQjlCjruSe-x64D?g`ryu}|1%Vz_mBJ$%d1nJJkQsf~zD zApnR|a-m)n@poV^=CEvaQBOi0+x@VPa2hb^GK_+157j!*!ngZ~-886S#Fzs{L3JBq zEQHZ@2CTW401`MaulMslVbfAg8(C?MN2L(8Cv5{ZBgT97t1xEUY^*msKMR}9&fB$F zRQ4j~#b(5cD^HWPLF;(Lrkn>WZ!=PuVRq3y6i zVg-YK$JBYM?1oXvn{n%!DG45)fV*TN(O=PNPz}h5=52`4?8j(e_Aw+)DjX)rW$GPt zx&|ZGBgw#nQ@IgiPgtYt;k&B5RejM2Kvc<~Q2;umcU6x7^U^^`)LMNQ7$Y}r7Et@w z78B-I)huXrm1PtpCe{db#fU7S<}Abri3in1aDbnUETPYs+0UOqLfJ5JYuz!;(QQ}i!g!b4q6j20Vkb^x! zM~9)3mjt5{`=sUIA>ddpq3eQl2@hdMitv$OhADPx(%dbyBbRA+4|MmB9O`VR^d2nH zM*@6&_I7r)DH7=0xSqi$nglWTqD;*y60x5KG(xL1o}a-4N|JMkyW7u z8^i@00t;G@v5i@u+){Ffprb&a7vkfaiBZ(!To!7S_guWL^N?qu#QbdNLpjguk7%=!mwM?23*(J=!gu{ODJN(?{cJ`@g z%s1%qk*NufZ>VczOR#W>;K83P5s##8V5${TIY=HV7k_sB$zjRG`cn^H`XFfV!u3CU z=zkGD^aq254Q%KoE}@w2pp6RDF$sS|1!&4>wYsu? zuOxnJ%^S(qD@i$_q%tw7ERa;uA2X5c2_;vE$rXX*N_YqX#hi_YKym_(TuDh2DrgW38Uh8& z##~~-J>#3i{1(yCLcTx7wU>$oO9KVV$BM;*b>oM{{EebxBY6d3{4`o$qOaPQ=iB5v z>}wxF><^)nIH7&$S(m~{W zWJ$K=-zrs{3p;&XZ)Goet(=q#8@abPZWcFg_HWze-}{Jvo#@|j~yUg;#7!+ZKZ~DS%b@}jP6z3== z8W=cWfewNNx>GJNLot%~ZgN&6O zscejPk!J8C)~weG9Y#9SVOSMne-c;qMV&q*p_9szgcZtavm{CU?85v1eMnltZah8m z!4pqOLd18`2ZA5w;wLg{B8R?Dm9{Hx8Be1o1^Xfxf>CVYEvnXpf;nbLAF)Je?W`7y zd+0vt3a7HTTsrX-eZ^ihijUZt*l&G{smNRzO4z29Y;~k5;HpE!tRwN;4?K6jL^A^g z_17{s`nb_eFKv5a+j#WVrT0CP`$opbKuP^z7LC@*ti*`L+=lVk-_x8>DynNh?R_*C?P#^D_cVXZY3_8Fdxb z6K^QkSJG=4G3iPz$v+OB`wZ3T3@1D=JF|yz7%+><+k>}INjAD3eVcVy@&>H55#xM^ zD-1M3#v{_cCuMBF$1>x6zgJ3Us%h(#nZP$=!JPRq?mOVr8~N$aFbY+)=!?0dAfo!T zVie!NDEMC9NK6R-hVL+61_DK|in=6W|Mb~}6hA8S$=yZ#n%2JOJbFaNl?To~T;X zPx*vkefh6@LU%OS8)%$$vu^t{XZ;w>xJ(OJa!pP91ymOcp{YRV`~ESLiu$5z$8f#? zqNb`DGct9Pdjj4Z1AQ2r7HB2KMtz)!Q+gUa7!yA} zw2B02$PHtbU&Oy0KYlp4Vv|mG*n*Riatd0X&*v_L|3d`!4@6*TWfMd_^YVQ7ZnGio0<5WC{W| zZUe%c*DHx4%tWdQ7T=>grIkejIw9c&5uHrLc%F{_8x@*i)N!P%^Y9TV6G6AcjQkC? zFhxZk6~92yZO2uLZ~^v2GLrrn2gBX=!=C*)nyk5)Z#?OD0A7jEmh9V1Tg2g0CX7-s ztu&NYFQ(OBOIs4@PTGI~NJ8@n*mK^MrG3lu@jr?O|NVbWQJMF0KJMK)ISeR$=lPwN z=U-WLY0;I2OAXQ^8s`FK>wqs3mtKjv6cZ}06N~GhW+-kNYZQxD53YSDr+CEiMozqSEPRw69Xq(E;y>RgSK|qRxvZ}+Ds+R~`kstQrQ?rKcJ&o5jhYZsfw zxyC&F{Ib-xc9Hd$wH%d;%hnZ}e^tbx3}Zt{GtJo05$v5avE1=E6uBAe<$LJ!VVjX| zS|iBtV*B4d)#F8@z9~y&D$PD~lK;{?wEOEE_%FXWMI1{`1*D!y;8lg^m^^9)Xph;%Gcf(ryU_r_xU)fj&QVE+>6d&IN1^(Fv_HNMwz)FdQg)HTXDv|l7cm7jK( z^G-GToLHs4WiipLoj%uVM-R`;Fk7kt8+9(D&TL~()Xl{LZDh(G?tz;PX+XDv%8k=s+Om0dMO|fM%L8kXT;V<6m;UhLfRxjf;U$9cl#v+e5i_xjCnonQ*k63SO4zYr|`e9mj0#>5l}3sa~OY~G=m*x z^4P=M0s6u)S_t)JNB7QB;eG0uVLme1fEHY-H&rU2ZlA$nCO5o)6l#+i-drV^3g}upKfcCX{ zTghGs>qE~Yt$ScH+TDg^M;%@5hrFF#dnaSNd)kDaZaT|y>j~@7^Q2`DY>6;29@)*( zD+&8)IN5Xt*^(sm7B%f&Yd1oGfF}?kq%i2jk`zf&VS)#fR2U2*>7FGlM6z#6Sctc1 zz+5Xc%mDrHh`_>>)n0^J>fJ_v!xSp?NLl{uj|v^#9X+jdc+!C}Q)u&nj-wq1@K;aA zK^6Fr#?B%dyUC)4M||5Ri9jS9pG>_?{1p(&{3{ZFj^S-NWx8qk0%zO7F=L_54{^)o zl~-0@S{-!MOk`$~3q%oS&%C!A@7wRhF&xoI}J8wqeQxAbDdP{N2A z$b<+^_ACl{mWrOGqa6Xysxkb%COkiY47#=;l(#_4TM%?CBt3450#q270jMxz#6G&f zKW_yg)2%cBDxB~XL#U9^3Udq2tewiqy>RmUNhv+mwVe7v^MpIwSNzO!W3a-ek+maB zM!o*(CiGCyYy?(VTs^pUVqW#&eecxN4z3DjRS|Mws>!qXW*Q*i{H|hv7y9R~8?PTP z^H)6>$bQJ5{t)ghF*W2Y6rF`3XQ}8c9bSIbxdbLA$b}JkvQ~xi7mN9eM^B9IN7~v3 zN?SW;BeG?o2|R|3+wpo>d{wI?=N(;Ms6yEy5g&=MUOp%O17|+%*$bOZ-_C@03=KEVxvGm!Z7sO8uq! z2~PnGJLN?aOB-L>`oh++BY~y&;^dr?f5B|o(EvtRQ7u9y19)Z;+<=x}TJB%6{%YBV zck+rZE*@I^*9~VjP$sb2p;~|G^0B0`9f7?2&uo}T$@b?|i7C~glsYk`ZZzv^%Icey zri}cX3z+3wdx2p@cyQ>!;mudJUfMcxEKspL=vaYCEU1*k%WL_yqSJH6Hn>7jj#IW^}mGK@C$D^zVPoX z{Vsh(I@nHs#mceju{?j7B2PNDzv0-3;mM)3rR?>Z2e=;9 z;pK9)%5;(AQ=(E!`vp8)48^N^V=vnktf4SB8+mlv6<}{vXDMd0Gj7!a#HOh5R-vgk znuVC~S3xfGFjHucv8Gl$U%fwWq40LNRUr4EKFG zQ+Ee+Lu|v{S-kE{RbQ-QXKj74&}bW2U+^yL(F};4bt4cc7Y)j|PJi(jFVeFkGqPW| zYv%8P#a7YG53XWaA?t%#3nk_D4s-=0fI44Hal+)~n7|WQTGI6bPQsx6~yTPG3CAe$Gr|l64PtYzM0TU;j zKw@Xi&Ta;6(JGye)s6^{qrXWTyOt$%ruAdjE|sg3xVeu}DKd%Y4BTrWO%|o}`s9=e zT4Z8u0sOO2|hi0oJ6MV89s|5d*k(ANZpHP5=>wTSw5if*H7S4Q%rLh7*G)#D{8_!(QJnF_1{VB#{^_rQpi}iH=odAM#M4CvFf!?|otx+l~ z2G@x1f;N!G7(>k%!9nVb+B$F|18s9}Opi*sk>Co?kTyoF48{TCOhhRbBcX_IjY#u` z1RBmEN{b+&Dl2C6ERjYk4w21D|1jwr%>#NjdlS6Q%ZZ9Gcy+{9qA)t>ItKLMPam0p_jMQx}&sw(?oxa z2#J(X$zri&F+jUIgC+N9^iFW#rr@8+s2kI@{BK;LBYTY4G3v%B-YGiED4t5^^wf6S0Y=;C_jMk&v4Ml7%b@sik6SX(+W`Os&6`x}?8(Dj{RA;JM_BSwmS@6XuO9 z4Ara=Yu1d{2WmD?%q=>T@TN2MW{fGVff6pb{r0(1x`i}E@=T=Whf-_A)S7Fl3nSZ^ zaApp+olQ6!OUW8)0qqWou;c6wUu7V5K8uxQ1Yq6p;n9?_#_>iX11&5nmLZdHBe{OQ z2=FAJ3`+3kPs@WT%QeTzYTu^ep3y>}CT_Z)d?+74T&GOa5(hUR-WHe2G&6Q|XVATV zW_m@jyn1RiF{kKi$~`j@tgC$S?R1D%7kXPi+=UW!h-a>pGa+nH&4^96?tkudsFy{+ z7||hs`p!OC>8;)S+Q?cT*JswjznZ-oDl8#yQpK>yP<2Gt)FKiUaUU6l>;R{0qfrBYp{TD zMnakLW&y3;4x#f-Tt~~F@x)`icA9q~8uXNB{71~`lG)!FLt6{LF!hKoy4E&Aq~uEC zj#S`ry?60vADn+qB7+bnC8GC-7f)Y*;co!}OmOcbU%B!0Pp^-D<@%3KwMZ~|W4KQE zYZNjSr9{j!5XI;Zipq+vKlMDCy8f3Ju3!9y)ZqVT37Sj82&9g>-cBRW5`iekT!2Qx zlg9pnUCLNHeiA6Qfx4ak*4?4jgJSDJf7fyU$;Se%z2c%iiF$(S0Aq|vizNwnpr0fT zPFmXccJxRVfgj@U$e0Uqjhc+#D|7-Kn7}ml9uYcZgi;}s=qQsORf@`}D05tzv@4bY z&{!!kvJLGkWO9Wh_qm8lhJj=0`Ho(ihrRzXBl9!*2inL!tdg z#r;Qv*~g%cSI|!9iRtr(PmWdx)0a-9yD!9_kN2G%!Cwp28YNH{59b9d`-16@Po`)8 zG0v1VpD1)SH19UZgmUZ!l)SEVh>5ci_~dL~?i^T=auspr4q=sDQ!z1&|>AVL(RvTaz8 z%y2Kp^N}{VbHmvgDpZ+rAyWmZEN7u(dJ5*Xd==20t5nn*g<=S?Ho))Ff7<$edN~x4 zs@$OTuOa62n)d)aHS#KQC4InTflpG{m{n)#yBIIrsf{Huuj=hF+qk?jM&o(_agpJv z54+5gOY7;Mz~-zCtyuUJsJ0=+@bOtId>Wqd$-=+}EG|{s*T{5iw&%V##0(lBTnV|NhjM)~sA#Ojhxd z>)$-R^1gdZEGKP8diGS*Rdjdm73R@WYTmnh|77$5;JSBJOOCymu5eddlG|$V@56^t ztOplCIEgz8@U?OJ_g48nyr%uDOs3U;(;6Id^djb^!r!7e!c&{sgFzXQg{Y1+-epTs+22WanJibAHdWkDOWat}7FB=)Zq!Fmqeb zwQVBZ^N|g8SVahtS$R_YZopkRlJ0lce`LqW52+OpqKvsWv*K;*xhZ6u>-41r5({sd z>~R~p;oJ##)`i;hwa?a_;cr^_#El$son2Ude);es7*Ip*Wukjoz`bIu$nReJk&P}v zUKW%exs|T}#0K#3Er%(kkX%+X-gKr*-^}5@*euHbvp0cjSwX2Xg8{ zIZa|tQy`~#?6^PYzCikYAGx%PZYELnKi#xZhkyFWPG_V$R+5-;G#g1-{+y+wouk|R zbJhlu*7+Ulm=Sb6jG(XLQGX+T<>ILG`70}|Kj*Rca&#hgUv}AOzrfM#GQC`#*lahy zV)itpMZJ<|!;x1itSf76ugs4@omUpynv$)rT6rqtxTbjPtMOLaPqQ`i)>l2ARSwH* zCJy_raU9xtEs9!r%~9HHiFvIyijLQ@bu)+KuUjlQ{yJ|){nzc*=9HM%on|_l z!b+E|xyJmuC%$=}`Sp2L?1wq`l46g@`G?2x3NoxC`xA~Q;z*=^GEQ5Zj3Uh-s?oO_ zu_=ofVHp__1@#KsTWQpu9cb{n83T5Yqd$%*j;-G0ukv6mv>r0Gkt=&p)2H-C>+T>`xdX%A61>*1 zS-ex*Y4|d-l)kjzyY9~w-XB`a(OOaVl&8hMs9fc!_N$!li^27I+Hqx1Jx@v-gOy+( z7@WvWxn_ndW*J3q3`4IRVBK@EsJu0NqUonyJ``q8%{QK}SD9Y1T05}<%CzN+!HZk%^^MJWKPg8~( z1&@$-&w$m)#H0zVP}rFU%mWstDoX^;s9hbcx}%JT>gu9FRnHE!qRGgIfm>{fEU18?45k+a0K2NuOJb+MKAg4YOz94Wm6noHtlG zjn+TZoMpWM^~d)?8@^)WHVxJdJVouQJHBlYv-71sOeP4lb$xo!WaB3uqlJ}d@ulRD zjxnlg1*J`sN&h8mHF-^arpNJ?OTU_Gp@eUd(A((kkfUJP3IN|~EITlOzIW;GB<1Y) zP(v4(DJ>M&pZ~EOm`SKi!m}vgecXnsl3z0s2Oa*47Mw{lC?!Ood61H0UZ%Z4YUc@ zM}D-v@(qZEh7ew_bJbf=BX1f@`qujf6beIT<;xv8T(x@ZH@P_MYE+;lTL= za5!CdY1wF9AbV9Xq1h<>@2Yb>yg}WhW zkz?Ge(M|T%Nv3~DvaLxr|ATwpnt1as;;q;hen3xuKNWA#^L>E!n5BJ;_GoF90uRz8 z>v9<#AQmnXc)5#?9irkW70lS&M|+P`af%Akr%SQKZ_?f*6>m{7Ma6HaAnOQooQD$^ zy=u}+_b&FJd+B=gNRQ$`#a>Njd=}17y+v5kCS$w`G?DjqXrhIvA=FYqZ!>cz)45r# zP;iM}$H{Pf<%k#fReDjWvH!q}n(XT5VXp4T7*3zaF8?V*0czylZft%zWxUq^ zg>7Rg!N%!Afuur$SIW@C zP|pCE^!dOmu_rp1JJ>i_GuY;q-2tBWl45gTPI^%TLJZV1kpLIlaAKb!$;ZGD8Y;{N`;?_|3$@*sS1V22p>~nr)7a`ZNe@3lhy!%W{82( zvAdR(kxn{B1^w&(R}^10O-H$`E!^~ci?w{(ah$WZbJIQMXlv%Q^FGeHe0q1(R?fO` z`e;wbYus|TWhA%3aop%=@zcgx{I6M$kkf&r+c_L z)^2WkS+dnNU23)#PsgTOGp6U2ShsW24?^KhCl8o&tcBAnIkz=uda>QQlAF$SSWBm~ zthgrLYTdw1$Cp|wroVvB_fzN5=+{|o-N8-o;kI$~dpxSdTK(aJT(PwTt>#&Cr`K^F z>w0c_6}O7BmVCG&D#|M5-DJ04k|xZ>%}>Vk?1wfS&OvOYhnymVM6%GUxb`F6J%?KbHy3c+5Cw>RyZj zx>Jt(y~*~LDdo4O?6*vDZ_&Q{ZByynrlq23>D#8t-QjWLg6XLN0!H2T=uky IO4j!O13Ixn&j0`b literal 0 HcmV?d00001 diff --git a/ui/__pycache__/setting_tab.cpython-312.pyc b/ui/__pycache__/setting_tab.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2fbfb2852dad96a2ea3c766ef8465ad25baadde8 GIT binary patch literal 4525 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 literal 0 HcmV?d00001 diff --git a/ui/config_tab.py b/ui/config_tab.py index c313ae3..e8fa909 100644 --- a/ui/config_tab.py +++ b/ui/config_tab.py @@ -9,6 +9,8 @@ import customtkinter as ctk from config_manager import load_config, save_config from tooltips import tooltips +import os + def create_label_with_help(self, parent, label_text, tooltip_key, row, column, font=None, sticky="e", padx=5, pady=5): @@ -45,11 +47,17 @@ def build_config_tabview(self): self.embeddings_config_tab = self.config_tabview.add("Embedding settings") self.config_choose = self.config_tabview.add("Config choose") + # PenBo 增加代理功能支持 + self.proxy_setting_tab = self.config_tabview.add("Proxy setting") + build_ai_config_tab(self) build_embeddings_config_tab(self) build_config_choose_tab(self) + # PenBo 增加代理功能支持 + build_proxy_setting_tab(self) + def build_ai_config_tab(self): def refresh_config_dropdown(): """刷新配置下拉菜单""" @@ -607,11 +615,87 @@ def build_config_choose_tab(self): +# PenBo 增加代理功能支持 +def build_proxy_setting_tab(self): + # 代理设置标签页布局 + for i in range(5): + self.proxy_setting_tab.grid_rowconfigure(i, weight=0) + self.proxy_setting_tab.grid_columnconfigure(0, weight=0) + self.proxy_setting_tab.grid_columnconfigure(1, weight=1) + + # 从配置文件加载代理设置 + config_data = load_config(self.config_file) + proxy_setting = config_data.get("proxy_setting", {}) + + # 代理启用开关 + create_label_with_help(self, self.proxy_setting_tab, "启用代理:", "proxy_enabled", 0, 0) + self.proxy_enabled_var = ctk.BooleanVar(value=proxy_setting.get("enabled", False)) + proxy_enabled_switch = ctk.CTkSwitch( + self.proxy_setting_tab, + text="", + variable=self.proxy_enabled_var, + onvalue=True, + offvalue=False, + font=("Microsoft YaHei", 12) + ) + proxy_enabled_switch.grid(row=0, column=1, padx=5, pady=5, sticky="w") + + # 地址输入框 + create_label_with_help(self, self.proxy_setting_tab, "地址:", "proxy_address", 1, 0) + self.proxy_address_var = ctk.StringVar(value=proxy_setting.get("proxy_url", "127.0.0.1")) + proxy_address_entry = ctk.CTkEntry( + self.proxy_setting_tab, + textvariable=self.proxy_address_var, + font=("Microsoft YaHei", 12) + ) + proxy_address_entry.grid(row=1, column=1, padx=5, pady=5, sticky="nsew") + + # 端口输入框 + create_label_with_help(self, self.proxy_setting_tab, "端口:", "proxy_port", 2, 0) + self.proxy_port_var = ctk.StringVar(value=proxy_setting.get("proxy_port", "10809")) + proxy_port_entry = ctk.CTkEntry( + self.proxy_setting_tab, + textvariable=self.proxy_port_var, + font=("Microsoft YaHei", 12) + ) + proxy_port_entry.grid(row=2, column=1, padx=5, pady=5, sticky="nsew") + def open_proxy(address, port): + """启动代理""" + # 设置环境变量 + os.environ['HTTP_PROXY'] = f"http://{address}:{port}" + os.environ['HTTPS_PROXY'] = f"http://{address}:{port}" + + def save_proxy_setting(): + config_data = load_config(self.config_file) + if "proxy_setting" not in config_data: + config_data["proxy_setting"] = {} + + config_data["proxy_setting"]["enabled"] = self.proxy_enabled_var.get() + config_data["proxy_setting"]["proxy_url"] = self.proxy_address_var.get() + config_data["proxy_setting"]["proxy_port"] = self.proxy_port_var.get() + + save_config(config_data, self.config_file) + messagebox.showinfo("提示", "代理配置已保存。") + + if self.proxy_enabled_var.get(): + open_proxy(self.proxy_address_var.get(), self.proxy_port_var.get()) + else: + os.environ.pop('HTTP_PROXY', None) + os.environ.pop('HTTPS_PROXY', None) + + # 添加保存按钮 + save_btn = ctk.CTkButton( + self.proxy_setting_tab, + text="保存代理设置", + command=save_proxy_setting, + font=("Microsoft YaHei", 12) + ) + save_btn.grid(row=3, column=0, columnspan=2, padx=5, pady=5, sticky="ew") - + def load_config_btn(self): cfg = load_config(self.config_file) diff --git a/ui/generation_handlers.py b/ui/generation_handlers.py index 9d86ec6..41ebed9 100644 --- a/ui/generation_handlers.py +++ b/ui/generation_handlers.py @@ -445,38 +445,58 @@ def do_consistency_check(self): self.enable_button_safe(self.btn_check_consistency) threading.Thread(target=task, daemon=True).start() def generate_batch_ui(self): + + # PenBo 优化界面,使用customtkinter进行批量生成章节界面 def open_batch_dialog(): - dialog = tk.Toplevel() + dialog = ctk.CTkToplevel() + dialog.title("批量生成章节") + chapter_file = os.path.join(self.filepath_var.get().strip(), "chapters") files = glob.glob(os.path.join(chapter_file, "chapter_*.txt")) if not files: num = 1 else: num = max(int(os.path.basename(f).split('_')[1].split('.')[0]) for f in files) + 1 - dialog.geometry("+500+400") - tk.Label(dialog, text="起始章节").grid(row=0, column=0) - entry_start = tk.Entry(dialog) - entry_start.grid(row=0, column=1) + + dialog.geometry("400x200") + dialog.resizable(False, False) + + # 创建网格布局 + dialog.grid_columnconfigure(0, weight=0) + dialog.grid_columnconfigure(1, weight=1) + dialog.grid_columnconfigure(2, weight=0) + dialog.grid_columnconfigure(3, weight=1) + + # 起始章节 + ctk.CTkLabel(dialog, text="起始章节:").grid(row=0, column=0, padx=10, pady=10, sticky="w") + entry_start = ctk.CTkEntry(dialog) + entry_start.grid(row=0, column=1, padx=10, pady=10, sticky="ew") entry_start.insert(0, str(num)) - tk.Label(dialog, text="结束章节").grid(row=0, column=2) - entry_end = tk.Entry(dialog) - entry_end.grid(row=0, column=3) - tk.Label(dialog, text="期望字数").grid(row=1, column=0) - entry_word = tk.Entry(dialog) - entry_word.grid(row=1, column=1) + + # 结束章节 + ctk.CTkLabel(dialog, text="结束章节:").grid(row=0, column=2, padx=10, pady=10, sticky="w") + entry_end = ctk.CTkEntry(dialog) + entry_end.grid(row=0, column=3, padx=10, pady=10, sticky="ew") + + # 期望字数 + ctk.CTkLabel(dialog, text="期望字数:").grid(row=1, column=0, padx=10, pady=10, sticky="w") + entry_word = ctk.CTkEntry(dialog) + entry_word.grid(row=1, column=1, padx=10, pady=10, sticky="ew") entry_word.insert(0, self.word_number_var.get()) - tk.Label(dialog, text="最低字数").grid(row=1, column=2) - entry_min = tk.Entry(dialog) - entry_min.grid(row=1, column=3) + + # 最低字数 + ctk.CTkLabel(dialog, text="最低字数:").grid(row=1, column=2, padx=10, pady=10, sticky="w") + entry_min = ctk.CTkEntry(dialog) + entry_min.grid(row=1, column=3, padx=10, pady=10, sticky="ew") entry_min.insert(0, self.word_number_var.get()) - auto_enrich_bool = tk.BooleanVar() - auto_enrich_bool_ck = tk.Checkbutton(dialog, text="低于最低字数时自动扩写", variable=auto_enrich_bool) - auto_enrich_bool_ck.grid(row=2, column=0) + # 自动扩写选项 + auto_enrich_bool = ctk.BooleanVar() + auto_enrich_bool_ck = ctk.CTkCheckBox(dialog, text="低于最低字数时自动扩写", variable=auto_enrich_bool) + auto_enrich_bool_ck.grid(row=2, column=0, columnspan=2, padx=10, pady=10, sticky="w") result = {"start": None, "end": None, "word": None, "min": None, "auto_enrich": None, "close": False} - def on_confirm(): nonlocal result if not entry_start.get() or not entry_end.get() or not entry_word.get() or not entry_min.get(): @@ -497,7 +517,16 @@ def generate_batch_ui(self): nonlocal result result["close"] = True dialog.destroy() - tk.Button(dialog, text="确认", command=on_confirm).grid(row=2, column=1) + + # 按钮框架 + button_frame = ctk.CTkFrame(dialog) + button_frame.grid(row=3, column=0, columnspan=4, padx=10, pady=10, sticky="ew") + button_frame.grid_columnconfigure(0, weight=1) + button_frame.grid_columnconfigure(1, weight=1) + + ctk.CTkButton(button_frame, text="确认", command=on_confirm).grid(row=0, column=0, padx=10, pady=10, sticky="e") + ctk.CTkButton(button_frame, text="取消", command=on_cancel).grid(row=0, column=1, padx=10, pady=10, sticky="w") + dialog.protocol("WM_DELETE_WINDOW", on_cancel) dialog.transient(self.master) dialog.grab_set() diff --git a/ui/main_window.py b/ui/main_window.py index 235c866..99d48a7 100644 --- a/ui/main_window.py +++ b/ui/main_window.py @@ -88,6 +88,18 @@ class NovelGeneratorGUI: "retrieval_k": 4 } + # PenBo 增加代理功能支持 + proxy_url = self.loaded_config["proxy_setting"]["proxy_url"] + proxy_port = self.loaded_config["proxy_setting"]["proxy_port"] + if self.loaded_config["proxy_setting"]["enabled"]: + os.environ['HTTP_PROXY'] = f"http://{proxy_url}:{proxy_port}" + os.environ['HTTPS_PROXY'] = f"http://{proxy_url}:{proxy_port}" + else: + os.environ.pop('HTTP_PROXY', None) + os.environ.pop('HTTPS_PROXY', None) + + + # -- LLM通用参数 -- # self.llm_conf_name = next(iter(self.loaded_config["llm_configs"])) self.api_key_var = ctk.StringVar(value=llm_conf.get("api_key", ""))