From 68f278d8934664497c2777773d279c097b5b52bf Mon Sep 17 00:00:00 2001 From: neocronos666 Date: Sat, 21 Sep 2024 23:27:37 -0300 Subject: [PATCH] Setting Manager implementado | Alpha Publica Lista --- README.md | 73 +- __pycache__/settings_manager.cpython-312.pyc | Bin 11228 -> 7989 bytes .../__pycache__/menu_find_nav.cpython-312.pyc | Bin 5590 -> 5778 bytes components/global_cfg.py | 5 +- components/menu_find_nav.py | 22 +- deprecated/app.py | 30 - deprecated/home_screen.py | 19 - deprecated/main copy.py | 44 - deprecated/main_content copy.py | 201 --- deprecated/main_window.py | 17 - deprecated/navbar.py | 11 - deprecated/navigator.py | 0 deprecated/platform.py | 58 - deprecated/setting_screen.py | 13 - deprecated/static/css/dark.css | 16 - deprecated/static/css/light.css | 16 - deprecated/static/css/style.css | 67 - deprecated/tab_selector.py | 86 -- deprecated/templates/base.html | 31 - deprecated/templates/index.html | 25 - deprecated/templates/settings.html | 20 - deprecated/templates/sheet.html | 20 - ...eet_examples.md => ES_chsheet_examples.md} | 0 ...chsheet_format.md => ES_chsheet_format.md} | 0 docs/{faq.md => ES_faq.md} | 0 docs/how_to_contribute.md | 35 + docs/settings_manager.md | 100 ++ estructura.json => json_structure.json | 0 log/app.log | 1165 +++++++++++++++++ main.py | 90 +- qtest.py | 21 - .../__pycache__/main_content.cpython-312.pyc | Bin 6549 -> 6556 bytes screens/main_content.py | 6 +- screenshots/settings.png | Bin 0 -> 51965 bytes settings_manager.py | 153 +-- 35 files changed, 1435 insertions(+), 909 deletions(-) delete mode 100644 deprecated/app.py delete mode 100644 deprecated/home_screen.py delete mode 100644 deprecated/main copy.py delete mode 100644 deprecated/main_content copy.py delete mode 100644 deprecated/main_window.py delete mode 100644 deprecated/navbar.py delete mode 100644 deprecated/navigator.py delete mode 100644 deprecated/platform.py delete mode 100644 deprecated/setting_screen.py delete mode 100644 deprecated/static/css/dark.css delete mode 100644 deprecated/static/css/light.css delete mode 100644 deprecated/static/css/style.css delete mode 100644 deprecated/tab_selector.py delete mode 100644 deprecated/templates/base.html delete mode 100644 deprecated/templates/index.html delete mode 100644 deprecated/templates/settings.html delete mode 100644 deprecated/templates/sheet.html rename docs/{chsheet_examples.md => ES_chsheet_examples.md} (100%) rename docs/{chsheet_format.md => ES_chsheet_format.md} (100%) rename docs/{faq.md => ES_faq.md} (100%) create mode 100644 docs/how_to_contribute.md create mode 100644 docs/settings_manager.md rename estructura.json => json_structure.json (100%) delete mode 100644 qtest.py create mode 100644 screenshots/settings.png diff --git a/README.md b/README.md index 382da71..b7d1c6e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Open CheatSheet +# Open CheatSheet Public-Alpha v0.18 > **Enhance your study efficiency with Open CheatSheet**: Instantly access all your necessary formulas and tips, distraction-free and without ads, right from your phone or any device. Open CheatSheet is designed to help students focus and retain productivity by keeping all the formulas, constants, and tips in one place鈥攚ithout the need for an internet connection. @@ -26,13 +26,58 @@ Whether you're working on a complex math problem or need a quick reminder of gam **Open CheatSheet** is a Python-based application that organizes and provides essential formulas, constants, and tips in a structured, easy-to-access format. The app is inspired by mobile-first design but is built to function natively across all major platforms. The app's goal is to eliminate the distractions that come with online searches, focusing instead on delivering fast, relevant information offline. It鈥檚 lightweight, fast, and created with **flet** to ensure that it runs smoothly on any device. +## Roadmap + +#### Stay updated by checking our Roadmap for detailed information on upcoming features and timelines. + +### :baby: Pre-Alpha +- [*] Design front-end +- [*] Create minimum controls +- [*] Add Favs +- [*] Add Lists +- [*] Implement Navigation +- [*] Implment URL navigation +- [*] Create [Settings Manager](/docs/settings_manager.md) Tool +- [*] Create [Get Requirements](/docs/get_requirements.md) Tool +- [*] Create about screen +- [*] Write documentation +- [*] Private tests +- [*] debug +- Open to Suggestions + +### :boy: Public-Alpha +- [*] Public Alpha Release +- [ ] Create new ChSheet +- [ ] Search in Buffer +- [ ] Imporove Interface +- [ ] Implement Dark/light theme +- [ ] Autodetect platform theme +- [ ] MULTI LANG SUPPORT +- Open to issues and suggestions + +### :man: Public-Beta +- [ ] create all platforms package installer +- [ ] Study the chance to get a server and post an free online version of the app +- [ ] Implement autoupdate protocol +- [ ] Agregar funciones con ayuda de la comunidad +- Open to issues and suggestions + +### :suspect: Release +- [ ] Upload packages to repos +- Open to issues and suggestions + +### :vulcan_salute: Branching +- [ ] Study branches to create using the format, like for videogames cheats or cook recipes. +- [ ] Create an online test version +- Open to issues and suggestions + ### Current State -Currently, the app is in **pre-Alpha** development, with testing primarily done on desktop platforms. However, the goal is to release it for all supported platforms once the development stabilizes. +Currently, the app is in **Public-Alpha** development, with testing primarily done on desktop platforms. However, the goal is to release it for all supported platforms once the development stabilizes. --- -## How It Works +## What is a .chsheet file? Open CheatSheet uses files with the `.chsheet` extension to store formulas, constants, and explanations in a structured format. Here鈥檚 what a typical file contains: @@ -46,6 +91,8 @@ Open CheatSheet uses files with the `.chsheet` extension to store formulas, cons - **References**: Links to websites that provide more in-depth information on the topic. - **Related Formulas**: Links to other related `.chsheet` files. + + --- # Installation @@ -91,34 +138,32 @@ Areas of Contribution: - **Programming and Testing:** Test the app across different platforms, contribute code, and help us optimize the app for better performance. We will be adding detailed guides for contributors in the Docs section, so stay tuned! -All collaboration is managed through GitHub and Discord (coming soon). +All collaboration is managed through GitHub and Discord (more info see [how_to_contribute](docs/how_to_contribute.md)). + + --- ## Documentation - [FAQ](docs/faq.md) -- [CheatSheets format](docs/chsheet_format.md) -- [CheatSheets Examples](docs/chsheet_examples.md) +- [CheatSheets format](docs/ES_chsheet_format.md) +- [CheatSheets Examples](docs/ES_chsheet_examples.md) - [Known installation problems](docs/solved.md) +- [Get Requirement Tools](docs/get_requirements.md) +- [Settings Manager Tools](docs/settings_manager.md) +- [HOW TO CONTRIBUTE](docs/how_to_contribute.md) ## Licensing This project is licensed under the GPL (General Public License), meaning it's free for personal and educational use, and anyone who modifies the code must give proper credit and may not use it for commercial purposes. -## Roadmap -We are currently in the Pre-Alpha stage, focusing on desktop testing. Here's an overview of our roadmap: -- [*] Pre-Alpha: Initial development and desktop testing. -- [ ] Alpha: First public version with mobile testing. -- [ ] Beta: Optimization and bug fixes across platforms. -- [ ] Version 1.0: Full release with complete functionality, including sharing and printing features. -- [ ] Stay updated by checking our Roadmap for detailed information on upcoming features and timelines. ## Reach Contact - 馃嚞馃嚙 [English bug report discord channel](https://discord.gg/4Dnd5CeYFy) - 馃嚜馃嚫 [Canal de discord en Espa帽ol para reporte de errores](https://discord.gg/ZbEu5cwzkJ) -## Donations +## Donations (Soon) Love the project and want to support us? Consider making an anonymous donation. Your contribution will help us keep the project free, open-source, and available to students worldwide! Thank you for your support! diff --git a/__pycache__/settings_manager.cpython-312.pyc b/__pycache__/settings_manager.cpython-312.pyc index 2296521afe4ad602841d7c97a78a4976de6a6076..f6e81d28b05510f63dfea33f490bdd38b024d1a7 100644 GIT binary patch delta 3222 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 diff --git a/components/__pycache__/menu_find_nav.cpython-312.pyc b/components/__pycache__/menu_find_nav.cpython-312.pyc index 1af1d48aec076b4acdc4d029e646750e4c417b32..a459973fcdb40ed2c5faee505b8fc8d7f016001d 100644 GIT binary patch delta 1075 zcmZXTU1%It6vywGotezces*@ZyXIrN*>-ocT^+aRiyGtlu@tN=#TG0f?Pj|(-6T$C zmYG?Th=_%}_+&RnDMHXEDWO6sdF_KBQd9^jrmc+BmllOWF~k(a2kX6?ss!)DZ_d5< zfB$pl+%vbzOHW0<4~G>(#}~?P=Prc0ku;p?7V{aM=wOQDV(-~E-p7%{MCTWYE*LNq z!}AdD&PpI(eW$`f5HE3W0k`^y`v&+gmCGFd%-0fW=DK^lhr>b=-w;wTNFDm|eIblZ zA&#F3NhSNQ6jy{HJjMs{I^DV_BrqhNE<{fl4W~J!Y1)Wu+g9mhiSy;DY0Im7#=Pf? z#(cYB>G-i&galp_mvN?VO;o9;8^bYaDS9uNx;W9DSby@xuk?-N5&T73#8^b;z9UP4 z{Xzbpm(PgUl@q}hcNun;0H0RVpy0D=1uJR_qAc+`kOflWj=dXq4bPjlT5f%|VKrKY zqqP@GlCQX(vu($28m{XL$L+RZ`2lyq^%Y~@Xm-5DS<~?OHr4y$+_a_JbH30tZI@0v zZN1?c_?Mi51Grbo9j&lWc#Yx%vaJv~ep^c4kkZThKi59h)(^h4{zP>{dU;bMa`+?p zLwRTSwv@RcWj3Vjk5cHr)tgd3o>5Np`$F5Hb#s`h%TZ*r4l9(C$8VJ(cmaP^R-lUA zU_M==%YL9$Z@Ph=?y<0dYrzbR;e#L!RGEZp+5fjI;&Nyoyn@$4UsssQIZ9FDohXZ$ zvvY*P=gn#BZI@j@mX4iFG`tedKy7s`EW+SnCXFyu8G0^($1b=T*#~8eMYHhw>Y?Z- z05!ZG%cy?Lw(4%LW9rSRhSf6gek=pWSLHo(0K<4*&6l5JZUYRjQk1x!r7t>$+cCXe zg&D^UH4CTkp?bIYCe!kMU(==~v`r_)45|#f6MGcT!6fDqIhep&Vp4maNe(dN843(V z292T2aGGJ9VG@5xXhZC`blJH-7Rfdz2*X>EK|$FXm4$(=y_iWJk`;ZBO*K;rJ5DK_iu&!4L2_nPKw0w-!ZZ@#C4Gf&GjQkMrL2#94lc$vt=S|?RlNHu7@dpx=mZ@LerY+ipAHjQG8F=|zyM8~8!Ax_#S>{C~lgtBG9@kuKG zD)`{9t;4N1lCZNRV6ToJlG(+m1|DY5q6Vn7``k^~#bV--m_Y{O*-03HoAwfP0;cRx z)Ig-p5FF5}fCfh?s)Or}cj5nTL3XnTok;7=7#5pMXafd|O`Kr6r7*NhC8&NOE%E4D zBXN}oc2$^N70ce6&h9wO)>=!UzlP;nMEjXI1!A+_kSA(*F;*Fb&^k{c=L%K1LRD') -def sheet(formula_id): - formula = get_formula_by_id(formula_id) # Funci贸n que obtiene la f贸rmula - return render_template('sheet.html', formula=formula) - -if __name__ == '__main__': - app.run(debug=True) diff --git a/deprecated/home_screen.py b/deprecated/home_screen.py deleted file mode 100644 index d4ece38..0000000 --- a/deprecated/home_screen.py +++ /dev/null @@ -1,19 +0,0 @@ -import flet as ft - -class HomeScreen: - def __init__(self, page: ft.Page): - self.page = page - - def build(self): - self.page.controls.append( - ft.Column( - [ - ft.Text("Welcome to My Flet App", size=30), - ft.ElevatedButton(text="Click Me", on_click=self.on_button_click), - ] - ) - ) - - def on_button_click(self, e): - self.page.controls.append(ft.Text("Button clicked!", color=ft.colors.GREEN)) - self.page.update() diff --git a/deprecated/main copy.py b/deprecated/main copy.py deleted file mode 100644 index b369e76..0000000 --- a/deprecated/main copy.py +++ /dev/null @@ -1,44 +0,0 @@ -import flet as ft -import os - -from components.menu_find_nav import * -from components.tab_selector import * -from screens.main_content import * -from screens.cheat_sheet import * - -# -------------------------------------------------- -class MyApp(ft.Column): - def __init__(self): - super().__init__() - self.menu_find_nav = MenuFindNav() - self.tab_selector = TabSelector() - self.main_content = MainContent(buffer_file="./cfg/.buffer") - self.controls = [ - self.menu_find_nav, - self.tab_selector, - self.main_content - ] - - - -def main(page: ft.Page): - page.title = "open CHEATSHEET Alpha" - page.vertical_alignment = ft.MainAxisAlignment.START - page.scroll = ft.ScrollMode.ADAPTIVE - - # Create app and add to page - page.add(MyApp()) - -def sheet(page: ft.Page,selected): - page.title = " - open CHEATSHEET Alpha" - page.vertical_alignment = ft.MainAxisAlignment.START - page.scroll = ft.ScrollMode.ADAPTIVE - - - # Create app and add to page - #page.add(CheatSheetViewer("fisica/cinematica/Movimiento rectil铆neo uniforme")) - page.add(CheatSheetViewer(selected)) - - -ft.app(target=main) -#ft.app(target=sheet) diff --git a/deprecated/main_content copy.py b/deprecated/main_content copy.py deleted file mode 100644 index 6e34c56..0000000 --- a/deprecated/main_content copy.py +++ /dev/null @@ -1,201 +0,0 @@ -# Codigo de sergio - -import flet as ft - -# from main import sheet -from screens.cheat_sheet import * - - - -class MainContent(ft.Column): - def __init__(self, buffer_file): - super().__init__() - self.buffer_file = buffer_file - self.directory_structure = self.load_directory_structure() - self.controls = [ - self.build_directory_view(), - self.build_file_view() - ] - - def load_directory_structure(self): - directory_structure = {} - with open(self.buffer_file, "r") as f: - for line in f: - parts = line.strip().split('/') - current_level = directory_structure - - # Ignorar el 煤ltimo elemento ya que es el nombre del archivo - for part in parts[:-1]: - if part not in current_level: - current_level[part] = {} - current_level = current_level[part] - - return directory_structure - - def build_directory_view(self, structure=None, level=0): - if structure is None: - structure = self.directory_structure - - directory_view = ft.Column() - for directory, subdirectories in structure.items(): - directory_view.controls.append( - ft.Container( - padding=ft.Padding(left=10 * level, top=5, right=0, bottom=5), - content=ft.Row( - controls=[ - ft.Icon(ft.icons.FOLDER), - ft.Text(directory) - ], - ), - on_click=self.on_category_click - ) - ) - directory_view.controls.append( - self.build_directory_view(subdirectories, level + 1) - ) - return directory_view - - def build_file_view(self): - file_view = ft.Column() - with open(self.buffer_file, "r") as f: - for line in f: - parts = line.strip().split('/') - file_name = parts[-1] - if len(parts) > 2: # Exclude root-level directories - file_view.controls.append( - ft.Container( - padding=ft.Padding(left=10, top=5, right=0, bottom=5), - content=ft.Row( - controls=[ - ft.Icon(ft.icons.INSERT_DRIVE_FILE), - ft.Text(file_name) - ], - ), - on_click=self.on_file_click - ) - ) - return file_view - - def on_file_click(self, e): - # - # Aca deberia abrir una ventana con la formula - #self.selected_sheet = e.control.content.controls[1].value - #ft.app(target=sheet) - #print(f"Archivo seleccionado: {e.control.content.controls[1].value}") - - selected_value = e.control.content.controls[1].value - self.page.go("/sheet", {"selected": selected_value}) - - """Manejar el clic en una f贸rmula, cambiar a la p谩gina 'sheet' y pasar el valor de la f贸rmula. - # Obtener el valor de la f贸rmula clickeada - self.selected_value = e.control.content.controls[1].value - print("Selected Value: "+self.selected_value) - print("") - # Verificar si 'sheet' ya est谩 cargada - if not hasattr(self, 'sheet'): - # Si la p谩gina 'sheet' no est谩 cargada, crearla - self.sheet_page = self.sheet(self.selected_value) - self.page.add(self.sheet(self.selected_value)) # Agregar la p谩gina a la app - - else: - # Si ya existe, actualizamos su contenido - self.update_sheet_page(self.selected_value) - - # Cambiar a la p谩gina 'sheet' - self.page.controls.clear() # Limpiar la pantalla actual - self.page.add(self.sheet_page) # Mostrar la p谩gina 'sheet' - self.page.update() # Refrescar la interfaz - """ - def create_sheet_page(page: ft.Page,selected): - # Crear la estructura de la p谩gina 'sheet' y pasarle el valor de la f贸rmula - ''' - sheet_page = ft.Container( - controls=[ - ft.Text(f"F贸rmula: {formula_value}"), - # Otros controles necesarios para la p谩gina 'sheet' - ] - ) - return sheet_page - ''' - page.title = " - open CHEATSHEET Alpha" - page.vertical_alignment = ft.MainAxisAlignment.START - page.scroll = ft.ScrollMode.ADAPTIVE - page.add(CheatSheetViewer(selected)) - - - - def on_file_click(self, e): - """Manejar el clic en una f贸rmula, cambiar a la p谩gina 'sheet' y pasar el valor de la f贸rmula.""" - # Obtener el valor de la f贸rmula clickeada - self.selected_value = e.control.content.controls[1].value - - # Verificar si 'sheet' ya est谩 cargada - if not hasattr(self, 'sheet_page'): - # Si la p谩gina 'sheet' no est谩 cargada, crearla - self.sheet_page = self.create_sheet_page(self.selected_value) - self.page.add(self.sheet_page) # Agregar la p谩gina a la app - - else: - # Si ya existe, actualizamos su contenido - self.update_sheet_page(self.selected_value) - - # Cambiar a la p谩gina 'sheet' - self.page.controls.clear() # Limpiar la pantalla actual - self.page.add(self.sheet_page) # Mostrar la p谩gina 'sheet' - self.page.update() # Refrescar la interfaz - - - def update_sheet_page(self, formula_value): - # Actualizar el contenido de la p谩gina 'sheet' con la nueva f贸rmula - self.sheet_page.controls[0].value = f"F贸rmula: {formula_value}" - self.sheet_page.update() - - - - - #def on_category_click(self,e): - # evento cuando se hace click en el directorios - # print(f"Categoria seleccionada: {e.control.content.controls[1].value}") - - def on_category_click(self, e): - # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ROTO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - # Obtiene la categor铆a seleccionada - selected_category = e.control.content.controls[1].value - - # Inicializa una lista para almacenar los archivos correspondientes a la categor铆a seleccionada - filtered_files = [] - - # Recorre el archivo buffer y filtra los archivos que pertenecen a la categor铆a seleccionada - with open(self.buffer_file, "r") as f: - for line in f: - parts = line.strip().split('/') - - # Verifica si la ruta comienza con la categor铆a seleccionada - if selected_category in parts: - # Si la categor铆a seleccionada es la ra铆z, muestra todos los archivos bajo ella - if parts[:-1] == selected_category.split('/'): - filtered_files.append(parts[-1]) - # Si la categor铆a seleccionada est谩 en una subcarpeta, muestra solo los archivos correspondientes - elif selected_category == parts[len(parts) - len(parts):len(parts)]: - filtered_files.append(parts[-1]) - - # Actualiza el file_view con los archivos filtrados - file_view = ft.Column() - for file_name in filtered_files: - file_view.controls.append( - ft.Container( - padding=ft.Padding(left=10, top=5, right=0, bottom=5), - content=ft.Row( - controls=[ - ft.Icon(ft.icons.INSERT_DRIVE_FILE), - ft.Text(file_name) - ], - ), - on_click=self.on_file_click - ) - ) - - # Actualiza los controles en la interfaz - self.controls[1] = file_view - self.update() - diff --git a/deprecated/main_window.py b/deprecated/main_window.py deleted file mode 100644 index 293cd9a..0000000 --- a/deprecated/main_window.py +++ /dev/null @@ -1,17 +0,0 @@ -import flet as ft -from deprecated.home_screen import HomeScreen - -def main(page: ft.Page): - page.title = "My Flet App" - page.horizontal_alignment = ft.CrossAxisAlignment.CENTER - page.vertical_alignment = ft.MainAxisAlignment.CENTER - - # Instancia de la pantalla principal - home_screen = HomeScreen(page) - home_screen.build() - - page.update() - -# Ejecuta la aplicaci贸n -if __name__ == "__main__": - ft.app(target=main) \ No newline at end of file diff --git a/deprecated/navbar.py b/deprecated/navbar.py deleted file mode 100644 index 1faf425..0000000 --- a/deprecated/navbar.py +++ /dev/null @@ -1,11 +0,0 @@ -import flet as ft - -class NavBar(ft.UserControl): - def build(self): - return ft.Row( - [ - ft.TextButton(text="Home", on_click=lambda e: self.page.go("/")), - ft.TextButton(text="Settings", on_click=lambda e: self.page.go("/settings")), - ], - alignment=ft.MainAxisAlignment.SPACE_BETWEEN, - ) diff --git a/deprecated/navigator.py b/deprecated/navigator.py deleted file mode 100644 index e69de29..0000000 diff --git a/deprecated/platform.py b/deprecated/platform.py deleted file mode 100644 index 5aad1e0..0000000 --- a/deprecated/platform.py +++ /dev/null @@ -1,58 +0,0 @@ -import flet as ft -import webbrowser - -class PlatformUtils: - platforms = [ - "ANDROID", - "IOS", - "LINUX", - "MACOS", - "WINDOWS" - ] - def __init__(self, page): - self.page = page - - def open_web_browser(self, url): - platform = self.get_platform() - - - if platform in self.platforms: - # Abre la URL en el navegador predeterminado del sistema si est谩 en una plataforma admitida - webbrowser.open(url) - else: - # Si la plataforma es web, usa JavaScript para abrir la URL en una nueva pesta帽a - self.page.call_js_method("window.open", [url, "_blank"]) - - def get_platform(self): - # Obtiene la plataforma actual de la p谩gina - return self.page.platform if self.page.platform in self.platforms else None - - - - - - -''' -import flet as ft -import webbrowser - -class PlanformUtils(): - platforms = [ - "ANDROID", - "IOS", - "LINUX", - "MACOS", - "WINDOWS" - ] - - def open_web_browser(self,url): - - # if page.platform == ft.Platform.WEB: - if get_platform(self): - webbrowser.open("url") - else: - self.page.eval_js("window.open(url, '_blank');") - - def get_platform(self): - return None if ft.Page.platform not in self.platforms else self.platforms -''' \ No newline at end of file diff --git a/deprecated/setting_screen.py b/deprecated/setting_screen.py deleted file mode 100644 index ae00367..0000000 --- a/deprecated/setting_screen.py +++ /dev/null @@ -1,13 +0,0 @@ -import flet as ft - -class SettingsScreen: - def __init__(self, page: ft.Page): - self.page = page - - def build(self): - return ft.Column( - [ - ft.Text("Settings", size=30), - ft.ElevatedButton(text="Back to Home", on_click=lambda e: self.page.go("/")), - ] - ) diff --git a/deprecated/static/css/dark.css b/deprecated/static/css/dark.css deleted file mode 100644 index 0d82610..0000000 --- a/deprecated/static/css/dark.css +++ /dev/null @@ -1,16 +0,0 @@ -body { - background-color: #222; - color: #ccc; -} - -header, footer { - background-color: #000; -} - -nav { - background-color: #333; -} - -button { - background-color: #444; -} diff --git a/deprecated/static/css/light.css b/deprecated/static/css/light.css deleted file mode 100644 index 4429a28..0000000 --- a/deprecated/static/css/light.css +++ /dev/null @@ -1,16 +0,0 @@ -body { - background-color: #fff; - color: #000; -} - -header, footer { - background-color: #ddd; -} - -nav { - background-color: #eee; -} - -button { - background-color: #ccc; -} diff --git a/deprecated/static/css/style.css b/deprecated/static/css/style.css deleted file mode 100644 index 375d267..0000000 --- a/deprecated/static/css/style.css +++ /dev/null @@ -1,67 +0,0 @@ -body { - font-family: Arial, sans-serif; - margin: 0; - padding: 0; -} - -header, footer { - background-color: #333; - color: white; - text-align: center; - padding: 10px; -} - -nav { - background-color: #444; - padding: 10px; -} - -nav ul { - list-style-type: none; - padding: 0; -} - -nav ul li { - display: inline; - margin-right: 10px; -} - -.container { - display: flex; - flex-direction: column; - align-items: center; - padding: 20px; -} - -.category-tree, .formula-list { - width: 100%; - max-width: 400px; - margin-bottom: 20px; -} - -.sheet-container { - padding: 20px; -} - -.menu-bar { - display: flex; - justify-content: space-between; - margin-bottom: 10px; -} - -input[type="text"] { - width: 70%; - padding: 5px; -} - -button { - padding: 10px 20px; - background-color: #333; - color: white; - border: none; - cursor: pointer; -} - -button:hover { - background-color: #555; -} diff --git a/deprecated/tab_selector.py b/deprecated/tab_selector.py deleted file mode 100644 index fcb72f5..0000000 --- a/deprecated/tab_selector.py +++ /dev/null @@ -1,86 +0,0 @@ -#Codigo de sergio -import flet as ft -class TabSelector(ft.Row): - def build(self): - back_button = ft.IconButton(icon=ft.icons.ARROW_BACK) - # up_button = ft.IconButton(icon=ft.icons.ARROW_UPWARD) - tabs = ft.Tabs( - - # selected_index = 0 if not e.data else int(e.data), - # selected_index = 0 if not self.controls.selected_index else int(self.controls.selected_index), - #selected_index = int(selected_tab), - selected_index = self.get_tab, - animation_duration=300, - tabs=[ - ft.Tab(text="All"), - ft.Tab(text="Lists"), - ft.Tab(text="Favs") - ], - expand=True, - on_change=self.onchange_all - ) - return ft.Row( - [ - tabs, - back_button - #up_button - ], - alignment=ft.MainAxisAlignment.SPACE_BETWEEN, - vertical_alignment=ft.CrossAxisAlignment.CENTER, - expand=True - ) - def onchange_all(self,e): - print(f"Tab seleccionado: {e.control.tabs[e.control.selected_index].text}") - # self.selected_index=int(e.data) - #e.control.selected_index=int(e.data) - if e.data =="0": - self.page.go("/") - # e.selected= True - elif e.data =="1": - self.page.go("/lists") - elif e.data =="2": - self.page.go("/favs") - - # self.update - - def get_tab(self=None, e=None): - print(f"Tab seleccionado: {e.control.tabs[e.control.selected_index].text}") if e else print("NO e") - return 0 if not e else int(e.controls.selected_index) - - - - - - - - - - - - -''' -class TabSelector(ft): - def build(self): - back_button = ft.IconButton(icon=ft.icons.ARROW_BACK) - up_button = ft.IconButton(icon=ft.icons.ARROW_UPWARD) - tabs = ft.Tabs( - selected_index=0, - tabs=[ - ft.Tab(text="Favs"), - ft.Tab(text="Lists"), - ft.Tab(text="All") - ], - expand=True - ) - - return ft.Row( - [ - tabs, - back_button, - up_button - ], - alignment=ft.MainAxisAlignment.SPACE_BETWEEN, - vertical_alignment=ft.CrossAxisAlignment.CENTER, - expand=True - ) -''' \ No newline at end of file diff --git a/deprecated/templates/base.html b/deprecated/templates/base.html deleted file mode 100644 index 44360d3..0000000 --- a/deprecated/templates/base.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - {% block title %}CheatSheet App{% endblock %} - - - -
-

CheatSheet App

-
- - - -
- {% block content %}{% endblock %} -
- -
-

© 2024 CheatSheet App

-
- - - - diff --git a/deprecated/templates/index.html b/deprecated/templates/index.html deleted file mode 100644 index 3e617d3..0000000 --- a/deprecated/templates/index.html +++ /dev/null @@ -1,25 +0,0 @@ -{% extends "base.html" %} - -{% block title %}Inicio{% endblock %} - -{% block content %} -
-
-

Categor铆as

-
    - {% for category in categories %} -
  • {{ category.name }}
  • - {% endfor %} -
-
- -
-

Formulas

- -
-
-{% endblock %} diff --git a/deprecated/templates/settings.html b/deprecated/templates/settings.html deleted file mode 100644 index 3a859f2..0000000 --- a/deprecated/templates/settings.html +++ /dev/null @@ -1,20 +0,0 @@ -{% extends "base.html" %} - -{% block title %}Configuraci贸n{% endblock %} - -{% block content %} -
-

Configuraci贸n

-
- {% for setting in settings %} -
- - -
- {% endfor %} - -
- - -
-{% endblock %} diff --git a/deprecated/templates/sheet.html b/deprecated/templates/sheet.html deleted file mode 100644 index 01d5524..0000000 --- a/deprecated/templates/sheet.html +++ /dev/null @@ -1,20 +0,0 @@ -{% extends "base.html" %} - -{% block title %}{{ formula.title }}{% endblock %} - -{% block content %} -
- -
-

{{ formula.title }}

-

{{ formula.description }}

-
{{ formula.forms }}
-
-

{{ formula.detail }}

-
-
-
-{% endblock %} diff --git a/docs/chsheet_examples.md b/docs/ES_chsheet_examples.md similarity index 100% rename from docs/chsheet_examples.md rename to docs/ES_chsheet_examples.md diff --git a/docs/chsheet_format.md b/docs/ES_chsheet_format.md similarity index 100% rename from docs/chsheet_format.md rename to docs/ES_chsheet_format.md diff --git a/docs/faq.md b/docs/ES_faq.md similarity index 100% rename from docs/faq.md rename to docs/ES_faq.md diff --git a/docs/how_to_contribute.md b/docs/how_to_contribute.md new file mode 100644 index 0000000..d9beb70 --- /dev/null +++ b/docs/how_to_contribute.md @@ -0,0 +1,35 @@ +# Contributing to the Project + +Thank you for your interest in contributing to our project! We are working hard to create a 100% open-source and non-profit platform aimed at delivering valuable resources for students and educators. As we continue to develop the platform, we are seeking help from contributors in various areas. + +## Funding Support + +We are approaching the stage where we will begin accepting donations to help cover the costs of running and maintaining our servers. These funds will be used solely to ensure the platform remains free and accessible to everyone. + +## Areas Where You Can Help + +We are looking for passionate individuals who can contribute in the following areas: + +- **Content Creation (Formulas and Explanations):** Help us compile and refine the academic content, such as formulas and problem-solving explanations, for various subjects. + +- **Testers:** Assist with testing the app across different platforms to identify and resolve any bugs or issues. + +- **Designers:** We need creative designers to improve the visual aspects of the platform, including UI/UX design and graphics. + +- **Translators:** Help us make the platform accessible to a global audience by translating the content into different languages. + +- **Idea and Design Suggestions:** Even if you cannot contribute directly, we welcome any suggestions or ideas that could help improve the project as we move forward in development. + +## 100% Open and Non-Profit + +This project is completely free and open-source. All contributions, big or small, are highly valued, and the project will always remain non-profit, focused solely on providing a free and accessible resource for everyone. + +## Get Involved + +If you're interested in joining us, you can reach out through our contributors' Discord channel where we organize discussions and collaborations: + +[Join the Contributors Discord](https://discord.gg/fa65tcRt) + +Whether you're a student, educator, developer, or designer, your help is crucial in bringing this project to life. We appreciate all contributions, from code to content creation, design, and testing. Together, we can build something truly impactful! + +Thank you for your support! diff --git a/docs/settings_manager.md b/docs/settings_manager.md new file mode 100644 index 0000000..1167254 --- /dev/null +++ b/docs/settings_manager.md @@ -0,0 +1,100 @@ +# Settings Manager + +`settings_manager` is a versatile and modular frontend designed for managing configuration files in JSON format. It interacts seamlessly with the backend library `globalcfg`, which handles the reading and writing of the configuration file. The module is independent and can be extended or adapted for other projects, all under the same GPL license as the original project. + + +![screenshot](/screenshots/settings.png) + + +## How `settings_manager` Retrieves and Reads the Settings + +## Overview + +The `settings_manager` module is designed to read configuration settings from a JSON file. It provides a flexible and reliable way to manage settings, regardless of how many key-value pairs the configuration file contains. + +## Where the Configuration File is Stored + +By default, the configuration file is a simple JSON file stored locally on '/cfg/settings.json'. + +If you want to chage it, edit the net line in global_cfg.py: +```python + self.settings_file='cfg/settings.json' + ``` + + + +## Features + +- **Frontend for JSON configuration management**: Provides a simple and user-friendly way to modify and manage JSON configuration files. +- **Integration with `globalcfg`**: Automatically handles reading from and saving to JSON configuration files using the `globalcfg` library. +- **Modular and reusable**: Can be easily adapted to other projects that require configuration management. +- **Extensible**: Can be extended with custom functions and configuration options based on project needs. + +## Installation + +Just Copy **settings_manager.py** and **/components/global_cfg.py** to yout project an run + +If you want to use a diferent path for **global_cfg.py**, you need to edit the next line in **settings_manager.py**, just chage **components** for another path or erase it with the point to use the same directory than **settings_manager.py** + +```python +from components.global_cfg import GlobalCfg +``` + +Finally to run it: +```bash +python settings_manager.py +``` + +## Importing the Module in your app +First, import the necessary components: + +```python +from settings_manager import SettingsManager +``` + +## Initializing the Settings Manager +Create an instance of the SettingsManager, specifying the path to the configuration file. + +```python +config_file_path = "config.json" +settings = SettingsManager(config_file_path) +``` +## Loading Configuration +To load the settings from the configuration file: +```python +settings.load_settings() +``` +This will read the configuration data from the JSON file and load it into the manager. + +## Load settings from JSON file +```python +config = globalcfg.load_config("config.json") +``` +Example of JSON settings file + +```json +{ + "username": "default_user", + "theme": "dark", + "notifications": true, + "language": "en" +} +``` + +### License +settings_manager is licensed under the GNU General Public License (GPL). This ensures that: + +The software is free to use, modify, and distribute. +Any modifications made to the codebase must be atributed and shared under the same license. +For more details on licensing, refer to the GPL License. + + +# Contact +For questions, suggestions, or issues, please reach out through our [GitHub](https://github.com/neocronos666) repository or join our Discord server: +- 馃嚞馃嚙 [English bug report discord channel](https://discord.gg/4Dnd5CeYFy) +- 馃嚜馃嚫 [Canal de discord en Espa帽ol para reporte de errores](https://discord.gg/ZbEu5cwzkJ) + +## Author +[***Sergio Silvestri***](https://github.com/neocronos666) - Original developer +Feel free to reach out for collaboration or feature requests! + diff --git a/estructura.json b/json_structure.json similarity index 100% rename from estructura.json rename to json_structure.json diff --git a/log/app.log b/log/app.log index 8e18cf6..2f7795f 100644 --- a/log/app.log +++ b/log/app.log @@ -5630,3 +5630,1168 @@ AttributeError: 'MenuFindNav' object has no attribute 'dropdown' 2024-09-20 23:18:30,823 - root - INFO - Buffer cargado con 4 archivos. 2024-09-20 23:18:31,655 - root - INFO - Buffer cargado con 4 archivos. 2024-09-20 23:18:32,207 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 10:06:37,495 - root - INFO - Logging configurado correctamente. +2024-09-21 10:06:37,515 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 10:06:41,494 - root - INFO - Logging configurado correctamente. +2024-09-21 11:07:45,303 - root - INFO - Logging configurado correctamente. +2024-09-21 11:07:45,313 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 11:07:50,642 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 78, in on_search_change + self.update_dropdown() + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 81, in update_dropdown + self.dropdown.items = [ft.DropdownItem(text=result, on_click=self.on_dropdown_click) for result in self.search_results] + ^^^^^^^^^^^^^ +AttributeError: 'MenuFindNav' object has no attribute 'dropdown' +2024-09-21 11:07:51,610 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 78, in on_search_change + self.update_dropdown() + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 81, in update_dropdown + self.dropdown.items = [ft.DropdownItem(text=result, on_click=self.on_dropdown_click) for result in self.search_results] + ^^^^^^^^^^^^^ +AttributeError: 'MenuFindNav' object has no attribute 'dropdown' +2024-09-21 11:07:52,640 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 78, in on_search_change + self.update_dropdown() + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 81, in update_dropdown + self.dropdown.items = [ft.DropdownItem(text=result, on_click=self.on_dropdown_click) for result in self.search_results] + ^^^^^^^^^^^^^ +AttributeError: 'MenuFindNav' object has no attribute 'dropdown' +2024-09-21 11:07:53,073 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 78, in on_search_change + self.update_dropdown() + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 81, in update_dropdown + self.dropdown.items = [ft.DropdownItem(text=result, on_click=self.on_dropdown_click) for result in self.search_results] + ^^^^^^^^^^^^^ +AttributeError: 'MenuFindNav' object has no attribute 'dropdown' +2024-09-21 11:07:53,416 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 78, in on_search_change + self.update_dropdown() + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 81, in update_dropdown + self.dropdown.items = [ft.DropdownItem(text=result, on_click=self.on_dropdown_click) for result in self.search_results] + ^^^^^^^^^^^^^ +AttributeError: 'MenuFindNav' object has no attribute 'dropdown' +2024-09-21 11:07:53,728 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 78, in on_search_change + self.update_dropdown() + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 81, in update_dropdown + self.dropdown.items = [ft.DropdownItem(text=result, on_click=self.on_dropdown_click) for result in self.search_results] + ^^^^^^^^^^^^^ +AttributeError: 'MenuFindNav' object has no attribute 'dropdown' +2024-09-21 11:07:53,969 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 78, in on_search_change + self.update_dropdown() + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 81, in update_dropdown + self.dropdown.items = [ft.DropdownItem(text=result, on_click=self.on_dropdown_click) for result in self.search_results] + ^^^^^^^^^^^^^ +AttributeError: 'MenuFindNav' object has no attribute 'dropdown' +2024-09-21 11:07:54,705 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 78, in on_search_change + self.update_dropdown() + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 81, in update_dropdown + self.dropdown.items = [ft.DropdownItem(text=result, on_click=self.on_dropdown_click) for result in self.search_results] + ^^^^^^^^^^^^^ +AttributeError: 'MenuFindNav' object has no attribute 'dropdown' +2024-09-21 11:07:54,929 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 78, in on_search_change + self.update_dropdown() + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 81, in update_dropdown + self.dropdown.items = [ft.DropdownItem(text=result, on_click=self.on_dropdown_click) for result in self.search_results] + ^^^^^^^^^^^^^ +AttributeError: 'MenuFindNav' object has no attribute 'dropdown' +2024-09-21 11:07:55,153 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 78, in on_search_change + self.update_dropdown() + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 81, in update_dropdown + self.dropdown.items = [ft.DropdownItem(text=result, on_click=self.on_dropdown_click) for result in self.search_results] + ^^^^^^^^^^^^^ +AttributeError: 'MenuFindNav' object has no attribute 'dropdown' +2024-09-21 11:07:55,386 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 78, in on_search_change + self.update_dropdown() + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 81, in update_dropdown + self.dropdown.items = [ft.DropdownItem(text=result, on_click=self.on_dropdown_click) for result in self.search_results] + ^^^^^^^^^^^^^ +AttributeError: 'MenuFindNav' object has no attribute 'dropdown' +2024-09-21 11:07:55,601 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 78, in on_search_change + self.update_dropdown() + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 81, in update_dropdown + self.dropdown.items = [ft.DropdownItem(text=result, on_click=self.on_dropdown_click) for result in self.search_results] + ^^^^^^^^^^^^^ +AttributeError: 'MenuFindNav' object has no attribute 'dropdown' +2024-09-21 11:09:08,028 - root - INFO - Logging configurado correctamente. +2024-09-21 11:09:08,031 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 11:09:23,224 - root - INFO - Logging configurado correctamente. +2024-09-21 11:09:23,225 - root - INFO - Logging configurado correctamente. +2024-09-21 11:09:23,233 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 143, in route_change + page.add(SettingsApp(g_c.get_nav_link())) + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 734, in add + r = self.__update(self) + ^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 832, in __update + commands, added_controls, removed_controls = self.__prepare_update(*controls) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 848, in __prepare_update + control.build_update_commands( + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 464, in build_update_commands + ctrl.build_update_commands( + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 445, in build_update_commands + innerCmds = ctrl._build_add_commands( + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 545, in _build_add_commands + childCmd = control._build_add_commands( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 545, in _build_add_commands + childCmd = control._build_add_commands( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 545, in _build_add_commands + childCmd = control._build_add_commands( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AttributeError: 'list' object has no attribute '_build_add_commands' +2024-09-21 11:34:20,298 - root - INFO - Logging configurado correctamente. +2024-09-21 11:34:20,301 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 11:34:24,867 - root - INFO - Logging configurado correctamente. +2024-09-21 11:34:24,868 - root - INFO - Logging configurado correctamente. +2024-09-21 11:34:24,869 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 145, in route_change + page.add(SettingsApp(g_c.get_nav_link())) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 69, in __init__ + self.page.add(self.setting_manager.build()) + ^^^^^^^^^^^^^ +AttributeError: 'NoneType' object has no attribute 'add' +2024-09-21 11:36:00,316 - root - INFO - Logging configurado correctamente. +2024-09-21 11:36:00,323 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 11:36:05,206 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 11:36:08,377 - root - INFO - Logging configurado correctamente. +2024-09-21 11:36:08,378 - root - INFO - Logging configurado correctamente. +2024-09-21 11:36:08,379 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 143, in route_change + page.add(SettingsApp(g_c.get_nav_link())) + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 734, in add + r = self.__update(self) + ^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 832, in __update + commands, added_controls, removed_controls = self.__prepare_update(*controls) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 848, in __prepare_update + control.build_update_commands( + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 464, in build_update_commands + ctrl.build_update_commands( + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 477, in build_update_commands + innerCmds = ctrl._build_add_commands( + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 545, in _build_add_commands + childCmd = control._build_add_commands( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AttributeError: 'SettingsManager' object has no attribute '_build_add_commands' +2024-09-21 11:36:27,104 - root - INFO - Logging configurado correctamente. +2024-09-21 11:36:27,110 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 11:36:31,518 - root - INFO - Logging configurado correctamente. +2024-09-21 11:36:31,519 - root - INFO - Logging configurado correctamente. +2024-09-21 11:36:31,521 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 143, in route_change + page.add(SettingsApp(g_c.get_nav_link())) + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 734, in add + r = self.__update(self) + ^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 832, in __update + commands, added_controls, removed_controls = self.__prepare_update(*controls) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 848, in __prepare_update + control.build_update_commands( + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 464, in build_update_commands + ctrl.build_update_commands( + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 445, in build_update_commands + innerCmds = ctrl._build_add_commands( + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 545, in _build_add_commands + childCmd = control._build_add_commands( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AttributeError: 'SettingsManager' object has no attribute '_build_add_commands' +2024-09-21 11:38:36,188 - root - INFO - Logging configurado correctamente. +2024-09-21 11:38:36,193 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 11:38:44,060 - root - INFO - Logging configurado correctamente. +2024-09-21 11:38:44,061 - root - INFO - Logging configurado correctamente. +2024-09-21 11:38:44,063 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 143, in route_change + page.add(SettingsApp(g_c.get_nav_link())) + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 734, in add + r = self.__update(self) + ^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 832, in __update + commands, added_controls, removed_controls = self.__prepare_update(*controls) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 848, in __prepare_update + control.build_update_commands( + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 464, in build_update_commands + ctrl.build_update_commands( + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 445, in build_update_commands + innerCmds = ctrl._build_add_commands( + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 545, in _build_add_commands + childCmd = control._build_add_commands( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AttributeError: 'SettingsManager' object has no attribute '_build_add_commands' +2024-09-21 11:41:46,369 - root - INFO - Logging configurado correctamente. +2024-09-21 11:41:46,414 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 11:42:32,804 - root - INFO - Logging configurado correctamente. +2024-09-21 11:42:32,807 - root - INFO - Logging configurado correctamente. +2024-09-21 11:42:32,820 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 143, in route_change + page.add(SettingsApp(g_c.get_nav_link())) + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 734, in add + r = self.__update(self) + ^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 832, in __update + commands, added_controls, removed_controls = self.__prepare_update(*controls) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 848, in __prepare_update + control.build_update_commands( + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 464, in build_update_commands + ctrl.build_update_commands( + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 445, in build_update_commands + innerCmds = ctrl._build_add_commands( + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 545, in _build_add_commands + childCmd = control._build_add_commands( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AttributeError: 'SettingsManager' object has no attribute '_build_add_commands' +2024-09-21 11:46:54,087 - root - INFO - Logging configurado correctamente. +2024-09-21 11:46:54,125 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 11:47:32,628 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 11:47:34,425 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 11:47:35,622 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 11:48:28,243 - root - INFO - Logging configurado correctamente. +2024-09-21 11:48:32,495 - root - INFO - Logging configurado correctamente. +2024-09-21 11:49:48,180 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 143, in route_change + page.add(SettingsApp(g_c.get_nav_link())) + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 734, in add + r = self.__update(self) + ^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 832, in __update + commands, added_controls, removed_controls = self.__prepare_update(*controls) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 848, in __prepare_update + control.build_update_commands( + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 464, in build_update_commands + ctrl.build_update_commands( + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 445, in build_update_commands + innerCmds = ctrl._build_add_commands( + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 545, in _build_add_commands + childCmd = control._build_add_commands( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AttributeError: 'SettingsManager' object has no attribute '_build_add_commands' +2024-09-21 11:50:53,078 - root - INFO - Logging configurado correctamente. +2024-09-21 11:50:53,085 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 11:50:55,691 - root - INFO - Logging configurado correctamente. +2024-09-21 11:50:55,695 - root - INFO - Logging configurado correctamente. +2024-09-21 11:52:04,137 - root - INFO - Logging configurado correctamente. +2024-09-21 11:52:04,142 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 11:52:07,419 - root - INFO - Logging configurado correctamente. +2024-09-21 11:52:07,420 - root - INFO - Logging configurado correctamente. +2024-09-21 11:53:38,778 - root - INFO - Logging configurado correctamente. +2024-09-21 11:53:38,785 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 11:53:41,722 - root - INFO - Logging configurado correctamente. +2024-09-21 11:53:41,722 - root - INFO - Logging configurado correctamente. +2024-09-21 11:53:41,730 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 143, in route_change + page.add(SettingsApp(g_c.get_nav_link())) + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 734, in add + r = self.__update(self) + ^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 832, in __update + commands, added_controls, removed_controls = self.__prepare_update(*controls) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 848, in __prepare_update + control.build_update_commands( + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 464, in build_update_commands + ctrl.build_update_commands( + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 445, in build_update_commands + innerCmds = ctrl._build_add_commands( + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 545, in _build_add_commands + childCmd = control._build_add_commands( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AttributeError: 'NoneType' object has no attribute '_build_add_commands' +2024-09-21 11:55:08,600 - root - INFO - Logging configurado correctamente. +2024-09-21 11:55:08,606 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 11:55:13,152 - root - INFO - Logging configurado correctamente. +2024-09-21 11:55:13,154 - root - INFO - Logging configurado correctamente. +2024-09-21 11:55:13,162 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 143, in route_change + page.add(SettingsApp(g_c.get_nav_link())) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 71, in __init__ + self.setting_manager.build_all() +TypeError: SettingsManager.build_all() missing 1 required positional argument: 'back_link' +2024-09-21 11:55:25,952 - root - INFO - Logging configurado correctamente. +2024-09-21 11:55:25,961 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 11:55:47,784 - root - INFO - Logging configurado correctamente. +2024-09-21 11:55:47,788 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 11:55:53,168 - root - INFO - Logging configurado correctamente. +2024-09-21 11:55:53,168 - root - INFO - Logging configurado correctamente. +2024-09-21 11:55:53,187 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 143, in route_change + page.add(SettingsApp(g_c.get_nav_link())) + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 734, in add + r = self.__update(self) + ^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 832, in __update + commands, added_controls, removed_controls = self.__prepare_update(*controls) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 848, in __prepare_update + control.build_update_commands( + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 464, in build_update_commands + ctrl.build_update_commands( + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 445, in build_update_commands + innerCmds = ctrl._build_add_commands( + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 545, in _build_add_commands + childCmd = control._build_add_commands( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/control.py", line 545, in _build_add_commands + childCmd = control._build_add_commands( + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AttributeError: 'list' object has no attribute '_build_add_commands' +2024-09-21 12:03:26,720 - root - INFO - Logging configurado correctamente. +2024-09-21 12:03:26,725 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 12:03:31,924 - root - INFO - Logging configurado correctamente. +2024-09-21 12:03:31,925 - root - INFO - Logging configurado correctamente. +2024-09-21 12:20:57,059 - root - INFO - Logging configurado correctamente. +2024-09-21 12:20:57,060 - root - INFO - Logging configurado correctamente. +2024-09-21 12:21:16,780 - root - INFO - Logging configurado correctamente. +2024-09-21 12:21:16,781 - root - INFO - Logging configurado correctamente. +2024-09-21 12:32:28,562 - root - INFO - Logging configurado correctamente. +2024-09-21 12:32:28,562 - root - INFO - Logging configurado correctamente. +2024-09-21 12:34:12,688 - root - INFO - Logging configurado correctamente. +2024-09-21 12:34:12,689 - root - INFO - Logging configurado correctamente. +2024-09-21 12:36:23,537 - root - INFO - Logging configurado correctamente. +2024-09-21 12:36:23,538 - root - INFO - Logging configurado correctamente. +2024-09-21 12:36:23,539 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 12:36:23,541 - flet_runtime - INFO - Starting up UDS server on /tmp/WlfVSZSbie +2024-09-21 12:36:23,541 - flet_runtime - INFO - Flet app has started... +2024-09-21 12:36:23,541 - flet_runtime - INFO - App URL: /tmp/WlfVSZSbie +2024-09-21 12:36:23,541 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 12:36:23,542 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 12:36:24,632 - flet_runtime - INFO - App session started +2024-09-21 12:38:45,352 - root - INFO - Logging configurado correctamente. +2024-09-21 12:38:45,355 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 12:38:51,716 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 143, in route_change + page.add(SettingsApp(g_c.get_nav_link())) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 68, in __init__ + self.setting_manager = SettingsManager(back_link) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: SettingsManager.__init__() takes 1 positional argument but 2 were given +2024-09-21 12:38:53,134 - root - INFO - Logging configurado correctamente. +2024-09-21 12:38:53,135 - root - INFO - Logging configurado correctamente. +2024-09-21 12:38:53,137 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 12:38:53,138 - flet_runtime - INFO - Starting up UDS server on /tmp/oIHtyulFuo +2024-09-21 12:38:53,139 - flet_runtime - INFO - Flet app has started... +2024-09-21 12:38:53,139 - flet_runtime - INFO - App URL: /tmp/oIHtyulFuo +2024-09-21 12:38:53,139 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 12:38:53,140 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 12:38:54,242 - flet_runtime - INFO - App session started +2024-09-21 13:09:04,874 - root - INFO - Logging configurado correctamente. +2024-09-21 13:09:04,879 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:09:07,760 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 143, in route_change + page.add(SettingsApp(g_c.get_nav_link())) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 68, in __init__ + self.setting_manager = SettingsManager(back_link) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: SettingsManager.__init__() takes 1 positional argument but 2 were given +2024-09-21 13:09:07,767 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 56, in on_settings_click + sys.exit() +SystemExit +2024-09-21 13:09:09,182 - root - INFO - Logging configurado correctamente. +2024-09-21 13:09:09,183 - root - INFO - Logging configurado correctamente. +2024-09-21 13:09:09,184 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:09:09,185 - flet_runtime - INFO - Starting up UDS server on /tmp/LFfQUPI2af +2024-09-21 13:09:09,186 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:09:09,186 - flet_runtime - INFO - App URL: /tmp/LFfQUPI2af +2024-09-21 13:09:09,186 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:09:09,187 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:09:10,341 - flet_runtime - INFO - App session started +2024-09-21 13:10:32,741 - root - INFO - Logging configurado correctamente. +2024-09-21 13:10:32,745 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:10:37,590 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 143, in route_change + page.add(SettingsApp(g_c.get_nav_link())) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 68, in __init__ + self.setting_manager = SettingsManager(back_link) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: SettingsManager.__init__() takes 1 positional argument but 2 were given +2024-09-21 13:10:37,595 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 56, in on_settings_click + sys.exit() +SystemExit +2024-09-21 13:10:39,018 - root - INFO - Logging configurado correctamente. +2024-09-21 13:10:39,018 - root - INFO - Logging configurado correctamente. +2024-09-21 13:10:39,020 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:10:39,021 - flet_runtime - INFO - Starting up UDS server on /tmp/W4jv2iHJUD +2024-09-21 13:10:39,022 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:10:39,022 - flet_runtime - INFO - App URL: /tmp/W4jv2iHJUD +2024-09-21 13:10:39,022 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:10:39,023 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:10:40,094 - flet_runtime - INFO - App session started +2024-09-21 13:15:58,797 - root - INFO - Logging configurado correctamente. +2024-09-21 13:15:58,804 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:16:03,976 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 143, in route_change + page.add(SettingsApp(g_c.get_nav_link())) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 68, in __init__ + self.setting_manager = SettingsManager(back_link) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: SettingsManager.__init__() takes 1 positional argument but 2 were given +2024-09-21 13:16:05,381 - root - INFO - Logging configurado correctamente. +2024-09-21 13:16:05,381 - root - INFO - Logging configurado correctamente. +2024-09-21 13:16:05,383 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:16:05,384 - flet_runtime - INFO - Starting up UDS server on /tmp/4c2JDjpWYl +2024-09-21 13:16:05,385 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:16:05,385 - flet_runtime - INFO - App URL: /tmp/4c2JDjpWYl +2024-09-21 13:16:05,385 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:16:05,386 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:16:06,518 - flet_runtime - INFO - App session started +2024-09-21 13:20:52,366 - root - INFO - Logging configurado correctamente. +2024-09-21 13:20:52,370 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:20:55,399 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 143, in route_change + page.add(SettingsApp(g_c.get_nav_link())) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 68, in __init__ + self.setting_manager = SettingsManager(back_link) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: SettingsManager.__init__() takes 1 positional argument but 2 were given +2024-09-21 13:20:56,580 - root - INFO - Logging configurado correctamente. +2024-09-21 13:20:56,580 - root - INFO - Logging configurado correctamente. +2024-09-21 13:20:56,582 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:20:56,584 - flet_runtime - INFO - Starting up UDS server on /tmp/ITyL5yGE4d +2024-09-21 13:20:56,587 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:20:56,587 - flet_runtime - INFO - App URL: /tmp/ITyL5yGE4d +2024-09-21 13:20:56,588 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:20:56,589 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:20:57,758 - flet_runtime - INFO - App session started +2024-09-21 13:21:44,333 - root - INFO - Logging configurado correctamente. +2024-09-21 13:21:44,337 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:21:49,111 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 143, in route_change + page.add(SettingsApp(g_c.get_nav_link())) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 68, in __init__ + self.setting_manager = SettingsManager(back_link) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: SettingsManager.__init__() takes 1 positional argument but 2 were given +2024-09-21 13:21:50,539 - root - INFO - Logging configurado correctamente. +2024-09-21 13:21:50,540 - root - INFO - Logging configurado correctamente. +2024-09-21 13:21:50,541 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:21:50,543 - flet_runtime - INFO - Starting up UDS server on /tmp/f4NLS3todF +2024-09-21 13:21:50,543 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:21:50,543 - flet_runtime - INFO - App URL: /tmp/f4NLS3todF +2024-09-21 13:21:50,543 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:21:50,544 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:21:51,706 - flet_runtime - INFO - App session started +2024-09-21 13:24:48,413 - root - INFO - Logging configurado correctamente. +2024-09-21 13:24:48,417 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:24:53,927 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/components/menu_find_nav.py", line 59, in on_settings_click + self.page.update() + ^^^^^^^^^^^^^^^^ +AttributeError: 'NoneType' object has no attribute 'update' +2024-09-21 13:24:53,933 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 143, in route_change + page.add(SettingsApp(g_c.get_nav_link())) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 68, in __init__ + self.setting_manager = SettingsManager(back_link) + ^^^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: SettingsManager.__init__() takes 1 positional argument but 2 were given +2024-09-21 13:24:55,524 - root - INFO - Logging configurado correctamente. +2024-09-21 13:24:55,525 - root - INFO - Logging configurado correctamente. +2024-09-21 13:24:55,527 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:24:55,529 - flet_runtime - INFO - Starting up UDS server on /tmp/WnfZAoC5Y7 +2024-09-21 13:24:55,529 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:24:55,530 - flet_runtime - INFO - App URL: /tmp/WnfZAoC5Y7 +2024-09-21 13:24:55,530 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:24:55,531 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:24:56,954 - flet_runtime - INFO - App session started +2024-09-21 13:33:20,199 - root - INFO - Logging configurado correctamente. +2024-09-21 13:33:20,199 - root - INFO - Logging configurado correctamente. +2024-09-21 13:33:20,201 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:33:20,202 - flet_runtime - INFO - Starting up UDS server on /tmp/u79B8C3A61 +2024-09-21 13:33:20,203 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:33:20,204 - flet_runtime - INFO - App URL: /tmp/u79B8C3A61 +2024-09-21 13:33:20,204 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:33:20,204 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:33:21,395 - flet_runtime - INFO - App session started +2024-09-21 13:34:31,724 - root - INFO - Logging configurado correctamente. +2024-09-21 13:34:31,725 - root - INFO - Logging configurado correctamente. +2024-09-21 13:34:31,727 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:34:31,729 - flet_runtime - INFO - Starting up UDS server on /tmp/8qXwzRWuOO +2024-09-21 13:34:31,731 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:34:31,732 - flet_runtime - INFO - App URL: /tmp/8qXwzRWuOO +2024-09-21 13:34:31,732 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:34:31,733 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:34:32,885 - flet_runtime - INFO - App session started +2024-09-21 13:35:39,599 - root - INFO - Logging configurado correctamente. +2024-09-21 13:35:39,599 - root - INFO - Logging configurado correctamente. +2024-09-21 13:35:39,601 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:35:39,602 - flet_runtime - INFO - Starting up UDS server on /tmp/7gBrnNmPmQ +2024-09-21 13:35:39,603 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:35:39,603 - flet_runtime - INFO - App URL: /tmp/7gBrnNmPmQ +2024-09-21 13:35:39,603 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:35:39,604 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:35:40,747 - flet_runtime - INFO - App session started +2024-09-21 13:35:52,882 - root - INFO - Logging configurado correctamente. +2024-09-21 13:35:52,882 - root - INFO - Logging configurado correctamente. +2024-09-21 13:35:52,884 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:35:52,885 - flet_runtime - INFO - Starting up UDS server on /tmp/wrRLWFj7xL +2024-09-21 13:35:52,885 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:35:52,886 - flet_runtime - INFO - App URL: /tmp/wrRLWFj7xL +2024-09-21 13:35:52,886 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:35:52,886 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:35:54,047 - flet_runtime - INFO - App session started +2024-09-21 13:38:00,255 - root - INFO - Logging configurado correctamente. +2024-09-21 13:38:00,255 - root - INFO - Logging configurado correctamente. +2024-09-21 13:38:00,257 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:38:00,259 - flet_runtime - INFO - Starting up UDS server on /tmp/1F2zzVV1Xv +2024-09-21 13:38:00,259 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:38:00,259 - flet_runtime - INFO - App URL: /tmp/1F2zzVV1Xv +2024-09-21 13:38:00,260 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:38:00,260 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:38:01,391 - flet_runtime - INFO - App session started +2024-09-21 13:38:33,136 - root - INFO - Logging configurado correctamente. +2024-09-21 13:38:33,140 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:38:40,360 - root - INFO - Logging configurado correctamente. +2024-09-21 13:38:40,360 - root - INFO - Logging configurado correctamente. +2024-09-21 13:38:40,363 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:38:40,364 - flet_runtime - INFO - Starting up UDS server on /tmp/cm1IYFVSdj +2024-09-21 13:38:40,365 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:38:40,365 - flet_runtime - INFO - App URL: /tmp/cm1IYFVSdj +2024-09-21 13:38:40,366 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:38:40,366 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:38:41,765 - flet_runtime - INFO - App session started +2024-09-21 13:39:04,563 - root - INFO - Logging configurado correctamente. +2024-09-21 13:39:04,568 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:40:23,768 - root - INFO - Logging configurado correctamente. +2024-09-21 13:40:23,769 - root - INFO - Logging configurado correctamente. +2024-09-21 13:40:23,770 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:40:23,772 - flet_runtime - INFO - Starting up UDS server on /tmp/yS0kHlFL9E +2024-09-21 13:40:23,773 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:40:23,773 - flet_runtime - INFO - App URL: /tmp/yS0kHlFL9E +2024-09-21 13:40:23,773 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:40:23,774 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:40:24,905 - flet_runtime - INFO - App session started +2024-09-21 13:40:27,298 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/settings_manager.py", line 77, in save_settings + cancel_settings(self,e) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/settings_manager.py", line 82, in cancel_settings + self.page.window.close() + ^^^^^^^^^ +AttributeError: 'SettingsManager' object has no attribute 'page' +2024-09-21 13:40:31,085 - root - INFO - Logging configurado correctamente. +2024-09-21 13:40:31,088 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:41:33,170 - root - INFO - Logging configurado correctamente. +2024-09-21 13:41:33,170 - root - INFO - Logging configurado correctamente. +2024-09-21 13:41:33,172 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:41:33,173 - flet_runtime - INFO - Starting up UDS server on /tmp/ZORBrlYIwi +2024-09-21 13:41:33,173 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:41:33,174 - flet_runtime - INFO - App URL: /tmp/ZORBrlYIwi +2024-09-21 13:41:33,174 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:41:33,174 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:41:34,313 - flet_runtime - INFO - App session started +2024-09-21 13:41:36,480 - asyncio - ERROR - Future exception was never retrieved +future: .cancel_settings() missing 1 required positional argument: 'self'")> +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/settings_manager.py", line 77, in save_settings + cancel_settings() +TypeError: SettingsManager.run_gui..cancel_settings() missing 1 required positional argument: 'self' +2024-09-21 13:41:58,356 - root - INFO - Logging configurado correctamente. +2024-09-21 13:41:58,357 - root - INFO - Logging configurado correctamente. +2024-09-21 13:41:58,358 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:41:58,360 - flet_runtime - INFO - Starting up UDS server on /tmp/kQ5ShxXsHA +2024-09-21 13:41:58,361 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:41:58,361 - flet_runtime - INFO - App URL: /tmp/kQ5ShxXsHA +2024-09-21 13:41:58,361 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:41:58,362 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:41:59,504 - flet_runtime - INFO - App session started +2024-09-21 13:42:01,262 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/settings_manager.py", line 77, in save_settings + cancel_settings(self) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/settings_manager.py", line 82, in cancel_settings + self.page.window.close() + ^^^^^^^^^ +AttributeError: 'SettingsManager' object has no attribute 'page' +2024-09-21 13:42:04,870 - root - INFO - Logging configurado correctamente. +2024-09-21 13:42:04,874 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:43:01,219 - root - INFO - Logging configurado correctamente. +2024-09-21 13:43:01,220 - root - INFO - Logging configurado correctamente. +2024-09-21 13:43:01,222 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:43:01,223 - flet_runtime - INFO - Starting up UDS server on /tmp/JfSNNwvI8P +2024-09-21 13:43:01,224 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:43:01,224 - flet_runtime - INFO - App URL: /tmp/JfSNNwvI8P +2024-09-21 13:43:01,225 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:43:01,225 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:43:02,436 - flet_runtime - INFO - App session started +2024-09-21 13:43:04,875 - asyncio - ERROR - Future exception was never retrieved +future: .save_settings() missing 1 required positional argument: 'e'")> +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) +TypeError: SettingsManager.run_gui..save_settings() missing 1 required positional argument: 'e' +2024-09-21 13:44:28,100 - root - INFO - Logging configurado correctamente. +2024-09-21 13:44:28,101 - root - INFO - Logging configurado correctamente. +2024-09-21 13:44:28,103 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:44:28,104 - flet_runtime - INFO - Starting up UDS server on /tmp/35wcoV3jmu +2024-09-21 13:44:28,104 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:44:28,105 - flet_runtime - INFO - App URL: /tmp/35wcoV3jmu +2024-09-21 13:44:28,105 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:44:28,105 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:44:29,227 - flet_runtime - INFO - App session started +2024-09-21 13:44:34,540 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/settings_manager.py", line 77, in save_settings + cancel_settings(self) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/settings_manager.py", line 82, in cancel_settings + self.page.window.close() + ^^^^^^^^^ +AttributeError: 'SettingsManager' object has no attribute 'page' +2024-09-21 13:44:38,919 - root - INFO - Logging configurado correctamente. +2024-09-21 13:44:38,926 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:45:36,261 - root - INFO - Logging configurado correctamente. +2024-09-21 13:45:36,261 - root - INFO - Logging configurado correctamente. +2024-09-21 13:45:36,263 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:45:36,264 - flet_runtime - INFO - Starting up UDS server on /tmp/lq2O8YzSXo +2024-09-21 13:45:36,264 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:45:36,265 - flet_runtime - INFO - App URL: /tmp/lq2O8YzSXo +2024-09-21 13:45:36,265 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:45:36,265 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:45:37,470 - flet_runtime - INFO - App session started +2024-09-21 13:45:45,159 - root - INFO - Logging configurado correctamente. +2024-09-21 13:45:45,160 - root - INFO - Logging configurado correctamente. +2024-09-21 13:45:45,161 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:45:45,162 - flet_runtime - INFO - Starting up UDS server on /tmp/bFeYd6lafJ +2024-09-21 13:45:45,163 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:45:45,163 - flet_runtime - INFO - App URL: /tmp/bFeYd6lafJ +2024-09-21 13:45:45,163 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:45:45,164 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:45:46,329 - flet_runtime - INFO - App session started +2024-09-21 13:45:52,212 - root - INFO - Logging configurado correctamente. +2024-09-21 13:45:52,218 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:47:33,080 - root - INFO - Logging configurado correctamente. +2024-09-21 13:47:33,081 - root - INFO - Logging configurado correctamente. +2024-09-21 13:47:33,082 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:47:33,083 - flet_runtime - INFO - Starting up UDS server on /tmp/3Ag7iXKKAu +2024-09-21 13:47:33,084 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:47:33,084 - flet_runtime - INFO - App URL: /tmp/3Ag7iXKKAu +2024-09-21 13:47:33,084 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:47:33,085 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:47:34,408 - flet_runtime - INFO - App session started +2024-09-21 13:47:36,873 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/settings_manager.py", line 77, in save_settings + cancel_settings(self) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/settings_manager.py", line 82, in cancel_settings + self.page.window.close() + ^^^^^^^^^ +AttributeError: 'SettingsManager' object has no attribute 'page' +2024-09-21 13:47:40,659 - root - INFO - Logging configurado correctamente. +2024-09-21 13:47:40,663 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:48:19,733 - root - INFO - Logging configurado correctamente. +2024-09-21 13:48:19,734 - root - INFO - Logging configurado correctamente. +2024-09-21 13:48:19,736 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:48:19,738 - flet_runtime - INFO - Starting up UDS server on /tmp/FbSTeynvr2 +2024-09-21 13:48:19,739 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:48:19,739 - flet_runtime - INFO - App URL: /tmp/FbSTeynvr2 +2024-09-21 13:48:19,740 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:48:19,740 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:48:21,220 - flet_runtime - INFO - App session started +2024-09-21 13:48:35,618 - root - INFO - Logging configurado correctamente. +2024-09-21 13:48:35,621 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:48:43,199 - root - INFO - Logging configurado correctamente. +2024-09-21 13:50:01,246 - root - INFO - Logging configurado correctamente. +2024-09-21 13:50:01,253 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:50:05,278 - root - INFO - Logging configurado correctamente. +2024-09-21 13:50:05,279 - root - INFO - Logging configurado correctamente. +2024-09-21 13:50:05,281 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 13:50:05,282 - flet_runtime - INFO - Starting up UDS server on /tmp/fZf7loumxP +2024-09-21 13:50:05,283 - flet_runtime - INFO - Flet app has started... +2024-09-21 13:50:05,283 - flet_runtime - INFO - App URL: /tmp/fZf7loumxP +2024-09-21 13:50:05,283 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 13:50:05,284 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 13:50:06,807 - flet_runtime - INFO - App session started +2024-09-21 13:50:16,743 - root - INFO - Logging configurado correctamente. +2024-09-21 13:50:16,753 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:51:14,193 - root - INFO - Logging configurado correctamente. +2024-09-21 13:51:14,198 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:51:18,754 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:51:19,640 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:51:20,737 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:51:21,629 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 13:59:33,845 - root - INFO - Logging configurado correctamente. +2024-09-21 13:59:33,848 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 14:01:39,060 - root - INFO - Logging configurado correctamente. +2024-09-21 14:01:39,065 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 14:01:46,446 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 14:01:48,163 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 14:02:59,810 - root - INFO - Logging configurado correctamente. +2024-09-21 14:02:59,813 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 14:06:17,993 - root - INFO - Logging configurado correctamente. +2024-09-21 14:06:17,999 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 14:06:26,928 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 14:06:27,687 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 14:39:24,706 - root - INFO - Logging configurado correctamente. +2024-09-21 14:39:24,709 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 14:39:36,863 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 14:39:37,982 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 14:39:54,776 - root - INFO - Logging configurado correctamente. +2024-09-21 14:39:54,777 - root - INFO - Logging configurado correctamente. +2024-09-21 14:39:54,779 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 14:39:54,781 - flet_runtime - INFO - Starting up UDS server on /tmp/2b4awCpUsb +2024-09-21 14:39:54,781 - flet_runtime - INFO - Flet app has started... +2024-09-21 14:39:54,782 - flet_runtime - INFO - App URL: /tmp/2b4awCpUsb +2024-09-21 14:39:54,782 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 14:39:54,783 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 14:39:56,319 - flet_runtime - INFO - App session started +2024-09-21 14:40:05,770 - root - INFO - Logging configurado correctamente. +2024-09-21 14:40:05,773 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 14:50:38,854 - root - INFO - Logging configurado correctamente. +2024-09-21 14:50:38,858 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 14:58:29,690 - root - INFO - Logging configurado correctamente. +2024-09-21 14:58:29,694 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 14:58:29,696 - root - INFO - Logging configurado correctamente. +2024-09-21 14:58:29,699 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 96, in route_change + page.add(MainApp(g_c.get_nav_link())) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 19, in __init__ + self.main_content = MainContent(buffer_file="./cfg/.buffer") + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/screens/main_content.py", line 18, in __init__ + self.directory_structure = self.load_directory_structure() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/screens/main_content.py", line 26, in load_directory_structure + with open(self.buffer_file, "r") as f: + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: expected str, bytes or os.PathLike object, not method +2024-09-21 15:02:12,085 - root - INFO - Logging configurado correctamente. +2024-09-21 15:02:12,091 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 15:02:12,095 - root - INFO - Logging configurado correctamente. +2024-09-21 15:02:12,099 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 96, in route_change + page.add(MainApp(g_c.get_nav_link())) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 19, in __init__ + self.main_content = MainContent(buffer_file="./cfg/.buffer") + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/screens/main_content.py", line 18, in __init__ + self.directory_structure = self.load_directory_structure() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/screens/main_content.py", line 26, in load_directory_structure + with open(self.buffer_file, "r") as f: + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: expected str, bytes or os.PathLike object, not method +2024-09-21 15:04:58,193 - root - INFO - Logging configurado correctamente. +2024-09-21 15:04:58,215 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 15:04:58,219 - root - INFO - Logging configurado correctamente. +2024-09-21 15:07:23,839 - root - INFO - Logging configurado correctamente. +2024-09-21 15:07:23,842 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 15:07:23,843 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 97, in route_change + page.add(MainApp(g_c.get_nav_link())) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 20, in __init__ + self.main_content = MainContent() + ^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/screens/main_content.py", line 17, in __init__ + self.directory_structure = self.load_directory_structure() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/screens/main_content.py", line 25, in load_directory_structure + with open(self.buffer_file, "r") as f: + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: expected str, bytes or os.PathLike object, not NoneType +2024-09-21 15:07:44,799 - root - INFO - Logging configurado correctamente. +2024-09-21 15:07:44,803 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 15:08:39,950 - root - INFO - Logging configurado correctamente. +2024-09-21 15:08:39,953 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 15:08:39,954 - root - INFO - Logging configurado correctamente. +2024-09-21 15:08:39,955 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 100, in route_change + page.add(MainApp(g_c.get_nav_link())) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 21, in __init__ + self.main_content = MainContent(buffer_file=g_c.get_buffer_file) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/screens/main_content.py", line 17, in __init__ + self.directory_structure = self.load_directory_structure() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/screens/main_content.py", line 25, in load_directory_structure + with open(self.buffer_file, "r") as f: + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: expected str, bytes or os.PathLike object, not method +2024-09-21 15:09:48,500 - root - INFO - Logging configurado correctamente. +2024-09-21 15:09:48,524 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 15:10:31,659 - root - INFO - Logging configurado correctamente. +2024-09-21 15:13:36,094 - root - INFO - Logging configurado correctamente. +2024-09-21 15:13:36,098 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 15:13:36,100 - asyncio - ERROR - Future exception was never retrieved +future: +Traceback (most recent call last): + File "/home/neocronos/anaconda3/lib/python3.12/concurrent/futures/thread.py", line 58, in run + result = self.fn(*self.args, **self.kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/anaconda3/lib/python3.12/site-packages/flet_core/page.py", line 941, in wrapper + handler(*args) + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 100, in route_change + page.add(MainApp(g_c.get_nav_link())) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/neocronos/Documentos/Python Scripts/open_cheatsheet/main.py", line 21, in __init__ + self.main_content = MainContent(buffer_file=self.g_c.get_buffer_file) + ^^^^^^^^ +AttributeError: 'MainApp' object has no attribute 'g_c' +2024-09-21 15:17:24,626 - root - INFO - Logging configurado correctamente. +2024-09-21 15:17:24,631 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 15:17:27,097 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 15:17:28,418 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 15:17:30,147 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 16:52:41,839 - root - INFO - Logging configurado correctamente. +2024-09-21 16:52:41,843 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 16:52:55,621 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 16:52:57,200 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 16:52:59,176 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 16:53:11,532 - root - INFO - Logging configurado correctamente. +2024-09-21 16:53:11,539 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 16:53:18,823 - root - INFO - Logging configurado correctamente. +2024-09-21 16:53:18,825 - root - INFO - Logging configurado correctamente. +2024-09-21 16:53:18,828 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 16:53:18,831 - flet_runtime - INFO - Starting up UDS server on /tmp/QWKr852g4u +2024-09-21 16:53:18,835 - flet_runtime - INFO - Flet app has started... +2024-09-21 16:53:18,836 - flet_runtime - INFO - App URL: /tmp/QWKr852g4u +2024-09-21 16:53:18,838 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 16:53:18,840 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 16:53:20,497 - flet_runtime - INFO - App session started +2024-09-21 16:53:31,124 - root - INFO - Logging configurado correctamente. +2024-09-21 16:53:31,129 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 16:53:37,372 - root - INFO - Logging configurado correctamente. +2024-09-21 16:53:52,289 - root - INFO - Logging configurado correctamente. +2024-09-21 16:53:52,293 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 16:55:07,634 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 21:33:34,531 - root - INFO - Logging configurado correctamente. +2024-09-21 21:33:34,535 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 22:21:41,566 - root - INFO - Logging configurado correctamente. +2024-09-21 22:21:41,569 - root - INFO - Buffer cargado con 4 archivos. +2024-09-21 22:21:52,784 - root - INFO - Logging configurado correctamente. +2024-09-21 22:21:52,785 - root - INFO - Logging configurado correctamente. +2024-09-21 22:21:52,786 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 22:21:52,789 - flet_runtime - INFO - Starting up UDS server on /tmp/etzEVEvvTp +2024-09-21 22:21:52,790 - flet_runtime - INFO - Flet app has started... +2024-09-21 22:21:52,791 - flet_runtime - INFO - App URL: /tmp/etzEVEvvTp +2024-09-21 22:21:52,791 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 22:21:52,792 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 22:21:54,284 - flet_runtime - INFO - App session started +2024-09-21 22:32:00,641 - root - INFO - Logging configurado correctamente. +2024-09-21 22:32:00,642 - root - INFO - Logging configurado correctamente. +2024-09-21 22:32:00,645 - flet_runtime - INFO - Assets path configured: /home/neocronos/Documentos/Python Scripts/open_cheatsheet/assets +2024-09-21 22:32:00,647 - flet_runtime - INFO - Starting up UDS server on /tmp/pAkKPch5Ck +2024-09-21 22:32:00,647 - flet_runtime - INFO - Flet app has started... +2024-09-21 22:32:00,648 - flet_runtime - INFO - App URL: /tmp/pAkKPch5Ck +2024-09-21 22:32:00,648 - flet_runtime - INFO - Starting Flet View app... +2024-09-21 22:32:00,649 - flet_runtime - INFO - Flet View found in: /home/neocronos/.flet/bin/flet-0.23.2 +2024-09-21 22:32:01,879 - flet_runtime - INFO - App session started +2024-09-21 22:32:14,437 - root - INFO - Logging configurado correctamente. +2024-09-21 22:32:14,442 - root - INFO - Buffer cargado con 4 archivos. diff --git a/main.py b/main.py index 1dae084..8fc3fb2 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,4 @@ import flet as ft -# import os - from components.global_cfg import GlobalCfg from components.menu_find_nav import * @@ -13,15 +11,16 @@ from screens.about import * from settings_manager import SettingsManager - - -# ----Clases de Maquetacion------------------------------------------- class MainApp(ft.Column): def __init__(self,back_link): super().__init__() - self.menu_find_nav = MenuFindNav(back_link) - # self.tab_selector = TabSelector() + self.menu_find_nav = MenuFindNav(back_link) self.iconbutton_selector = IconButtonSelector() + # + # g_c=GlobalCfg() + # self.main_content = MainContent(buffer_file=self.g_c.get_buffer_file) + # + self.main_content = MainContent(buffer_file="./cfg/.buffer") self.controls = [ self.menu_find_nav, @@ -68,9 +67,8 @@ def __init__(self,back_link): self.setting_manager = SettingsManager(back_link) self.controls = [ - self.setting_manager + self.setting_manager.build() ] - class AboutApp(ft.Column): def __init__(self,back_link): super().__init__() @@ -78,85 +76,51 @@ def __init__(self,back_link): self.controls = [ self.about_content ] - - - - - -#---------Metodos propios-------------------- +#------------------------------------------------- def main(page: ft.Page): - page.title = "open CHEATSHEET pre-Alpha" + page.title = "open CHEATSHEET Public-Alpha" page.vertical_alignment = ft.MainAxisAlignment.START page.scroll = ft.ScrollMode.ADAPTIVE g_c = GlobalCfg() - # nav = [] - # Manejar rutas + def route_change(route): page.controls.clear() - # param_value = page.route_params.get("s") - print("--------------Page.route: " + page.route) - full_route = page.route - - # Separar la ruta del par谩metro (si existe) route_parts = full_route.split('?') - - # Almacenar la parte izquierda de la ruta - path = route_parts[0] - - # Almacenar la parte derecha de la ruta (par谩metro s) - params = route_parts[1] if len(route_parts) > 1 else None - - # Extraer el valor de "s" + path = route_parts[0] + params = route_parts[1] if len(route_parts) > 1 else None selected_value = None if params: - selected_value = params.split('=')[1] if '=' in params else None - + selected_value = params.split('=')[1] if '=' in params else None - - #-------RUTAS------------------------- + #-------ROUTES------------------------- if page.route == "/": g_c.add_nav("/") - page.add(MainApp(g_c.get_nav_link())) # P谩gina principal - + page.add(MainApp(g_c.get_nav_link())) elif path == "/sheet": g_c.add_nav(full_route) - page.title = selected_value + " [open CHEATSHEET pre-Alpha]" + page.title = selected_value + " [open CHEATSHEET Public-Alpha]" page.add(CheatSheetViewerApp(g_c.get_nav_link(), selected_value)) - elif path == "/lists": - g_c.add_nav(page.route) - # page.title = selected_value + " [open CHEATSHEET pre-Alpha]" - print("-----NAVEGACION LISTS") - page.add(ListApp(g_c.get_nav_link(),selected_value)) - print("S_VALUE=========" + str(selected_value)) - + g_c.add_nav(page.route) + page.add(ListApp(g_c.get_nav_link(),selected_value)) elif page.route == "/favs": - g_c.add_nav("/favs") - print("-----FAVS") - page.title = "Settings Manager - [open CHEATSHEET pre-Alpha]" - page.add(FavsApp(g_c.get_nav_link())) - + g_c.add_nav("/favs") + page.title = "Settings Manager - [open CHEATSHEET Public-Alpha]" + page.add(FavsApp(g_c.get_nav_link())) elif page.route == "/settings": - g_c.add_nav("/settings") - print("-----SETTINGS") - page.add(SettingsApp(g_c.get_nav_link())) - + g_c.add_nav("/settings") + page.add(SettingsApp(g_c.get_nav_link())) elif page.route == "/about": - g_c.add_nav("/about") - print("-----ABOUT") + g_c.add_nav("/about") page.add(AboutApp(g_c.get_nav_link())) - else: g_c.add_nav("/") page.route = "/" page.add(MainApp(g_c.get_nav_link())) - #print("MAIN:GET NAV LINK:") - #print(g_c.get_nav_link()) - - + page.on_route_change = route_change - page.go(page.route) # Cargar la p谩gina principal al inicio + page.go(page.route) # ------------APP---------------------------- ft.app(target=main) -#ft.app(target=sheet) + diff --git a/qtest.py b/qtest.py deleted file mode 100644 index 0f9451f..0000000 --- a/qtest.py +++ /dev/null @@ -1,21 +0,0 @@ -#Archivo de Testeos Rapidos - - - - - - -""" -#------------------------------------------------------- -import os - -base_dir = "./cheatsheets" - -if os.path.exists(base_dir): - print("Directorio v谩lido") -else: - print("Directorio no encontrado") - -print(os.path.curdir) - -""" \ No newline at end of file diff --git a/screens/__pycache__/main_content.cpython-312.pyc b/screens/__pycache__/main_content.cpython-312.pyc index fea48c18ce4521220e824ac2519c325c95b98584..7699feaff03d517d7c831f46b0c8b348c8050c66 100644 GIT binary patch delta 194 zcmbPgJja;#G%qg~0}!0xexH^&kvGGb8N>sE&u&1XonbmdDnk@w3PTiA3P%S+8enuh_&CM&> z_A)aXY){89?kJVW1)aCU-BN diff --git a/screens/main_content.py b/screens/main_content.py index 6c3ad9c..b914183 100644 --- a/screens/main_content.py +++ b/screens/main_content.py @@ -1,6 +1,7 @@ # Codigo de sergio import flet as ft +# from components.global_cfg import GlobalCfg # from main import sheet # from screens.cheat_sheet import * @@ -8,8 +9,9 @@ class MainContent(ft.Column): - def __init__(self, buffer_file): - super().__init__() + def __init__(self, buffer_file=None): + super().__init__() + self.buffer_file = buffer_file self.all_paths = [] # Lista para almacenar las rutas completas self.directory_structure = self.load_directory_structure() diff --git a/screenshots/settings.png b/screenshots/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..37a2a5c023b10d3c2638395b62f886e5aa2c121c GIT binary patch literal 51965 zcmc$`Wmr{FxA(m<5Jd$URt$&=}%^MvH&{xb8I*rb${ z!$ZV>&Lf2^3dSmhkpHAw{C53 zZ;#%+_xI!PPj*Rvr%+Pd>aK}ARBd?^?GO?puiiC|T(N%JkcWrI(sJkD8-OUk#d*`b zBf425<+nRJ51XHmXBMY^v?hK8z~j<)w!2JYRvSNr)6=KcGtt6va^Sfhll zC63$331K0Oc|REj!~;w7&4sLx3U;nsLm&<%kkJT7b2PXKqdSg>1Dl+VcbD95ps_tq z5AM`wG<2)evM$AVu0Edj%2SrlnmYK$#R#c;FMZfY4h}}%B-*n&Mf?J(Yj1Is-un2k#XqLzZJ)=!R?~(zz!!}EOEiJ$nNmlF(eSu&LxU%| zWVEV+LP&6Ma72VCijF+PWPC;$G}ncBCbr6?m0ovNQ9O zWCJB%z8@d#ZaE%!PV7-eKp_4~Fu+5@A#!Z;(77o_`VEiCipW*|MY(Qi4pQveZUkb} z&B^~BChzFjSdB{oRV=cnwzhU#TU%dmua1rmTfYQ%UdPq)U<>*IuKUkJ#dt}YlI9Y0 zxJ!mKRCk*_eigHfY-N__=Dz0Rt8H!dZr&~`EId3sw6L&X8+}s{85MyiE+ESMDV>P;VA?eha~xOX&-$7Ar%)7yL~@5{0_MC>?C_|`M-U}rmLcB_G;Rb;}n4|jW_#ETqIo>T2$eq{N?dD6rbT^ z!u5HcvgE$v4mpo~V#vv$3#a3kEtcT%p#|GjDK+xbEEsTp*!cKjCW}i;Tie?fM$?5U zDSDzemLKB!FgxrnE-vcx3L6_|rlqBQ{w&xK9x%6{Z6>)$+@Rx+_esDV9aSkz=^yZ?Fa39S^S3G$@jdL}nEHK5#zVLW-C0I+pm|k+{0~4d`J)Ps* zy{SH9d1P_lX&b5Mr;W`aX5hdRU0PX@8ByEu)#Cl)>3J*YVS!>MyY0GFX;g9vX#om_ zk$!BkC?0O8ct}99zs*r{UvYjx!OqT($88*56cG`Tw9L%Y;C`4yD8!k|9t{I#O*q`+ zTF1&K^&w3I?a@B%+44-xD{8nE=UT@q$o7s)7M^JbvDLp0a8ZcwFwM=)`M5hBOPowU zsp#{ovp>2Xl=)G#t3%L!cc~6ft##EzhxCHhVd7KGPN@54aPPCP&xqZ>4f|R17kUI- zTeG(@9pZMI!N9;ImJ2#MAo{IBLu5u7W22zG`b_@U`YeYv=3{EgX1-fE?s8kq86VMk zZzX6GD$%@_o+Zh_i|~t!D{C&R3P@KGk8lllS&2I^hro=G(-pcawJyX*9 zi5K*v_Z~cW00De(P?1;I19N8jv%}ltlqX>q%`G(=@?6y(_{6iz9=u3|(P_<|vQkpc zCoZJt{YBxe01>VPho*mDH?#UQTBtG)Lm%T|T;gt+8R*Ph&p7J0#=)Kc0PvWO`rAYhyJ~`X!rE}n9GGEL|F3jNSWtwO)(Cpf?)GjN2j;9 zckruu14mk>^to%mVPd{vJTIE45{v;lG@9(xS<52NeP>piEOG_`e*V{ZNl8ht5)&~S zD=yT-A{&*K_jsXw3D3=Ew2;xA{uLFjF)lGLvM+-Ws*uUqS^dhZ=<{e5tS{zY;)a@O zuGgpQ?~~rvUof~1t?r`Ls21b=_Ej*!xg{`c{eFn=_uyng`O3Tvy43@kw{NL0YKG-$ z0_`hG6OYbRI*anBlMRiGYUUI!ADKv(oY3HMel&Ln&6zN!9D(j|guD}b&T?Oi;|6tu z-3x4whKmyKC)6Zen`|@UZ62p+R+hCG&f{Dr-|l6*Y;}ZWWnDBzCac>OHBVg z-cakkI~>!zR~UaiV&t8f!@hs-zSicZE0e@&k}d?;hcng|4CHaeZVNaF#5of$FE1PW zHHq-#pA!MFXi?(fNmjKSET)Zi4^Vl1%N@1tyDeA|zE-XTIg^zrBM*{h7?Lgt`9Aub zwhMJjOSR=<<0ovN+xKuvLzwHv#~XM9Vx;zn87wsBBho7edlZT|$Z`f}RZqBBtwy?B zD@Xmihw~nOqKI3O>G&ezx$TtMw>vsjXZQyFaVn#J{6b@Nz-eoEd`Oxmc>p)JTWCGq zQ{m-|)QF&m8(RBjM;GG!nV-wq9zP|0DZDkYz5x|Ke%4wfGkH7h!cFWt|?FvQV~z_^l4*D zizWF>1mbX@j_?|7vVCRVStwD~n27CbUTnMkUbR$3 zc6E8ajZU3`K^oRPNwM)5;k|p5kUXAgT|q3qPfu@#yasg#<9XgzWQFdo?&X&zvey(e z)bPb2HC9)TcJO!Nj^gWU3N)diX=sh+-0--DjOfI;ad)-Cen-&m@cLcr&WOwQyc1P{ z-y*AxbLbUh&)1?5nJOu}{!jtweRgJgdVY$hlY!D554OMeRhmQtKY__kW!hkTkAF0%O9_5-XsYF#nKrMGmyi4&dH??X?@ruD zs)wv&=jBlZcmLk*>7xX!Ro!P{ZCG>IL6S-YVkSNIc3KBV@3u-OoQ0V=In}C495gjG zGnl+QJ)N+Q9^&C?l)n?H3UTo8vtvHZJkvS3yK(LVg+{Mq#z0@6wLAjxgXVeO^W~~O zOiav(>ZA2B_Pz1tG}jaxd0B2`uew*l!ir^vbA#sE8{-ux0tS#w|Kz)oVlNiKsb^DR z1JMw%__4fGacc*=gWKtFa(P5*GyMFC z1y_&acqQG}#|s?yTZb^S$f4#aF_7Zn`59?%`ThI%WQnl!`1tO9g3JDY;Wf5U8_nN_ zWSb%xNE`G(K|v0a7e*x;`?q!v_6($QUly}*_o&+uOqTtA+*W$l*ZpER#&gYUk1Q8X z4puI#4SuvEoH@@X6i(Y48V0ieTvYijvzbDM_4=wt>zJEMNal+tPv$!P`6Qz`p0h9z z(d!8JJSGdYXWh22v$Hc*&n^o)$_y)jE(Q=qJTN`{GSzFt&(FV@ z_ZlAhUCoC2x@d0K^QInh+-2P2;^Kb!enwm$^m~|iGfcHB0{f_JQ4%QjN83qt`d$$O zX17pLOL|@QcUH9spz*lEaO;z6~pu5NgZKC{Xcbi+^LpLynal+BdB zzP`{i`Cd?ueB}GM@q5BQFsL9u-@?X1_hM5)Ma2;s4W*S_pIohvhogg?^i1}rPoMaF zJ|COy`1$&_yT-UapMFf7n3+kv%fGmXHvrj{pdaqq`g-=GoR>v2%x!JM&E=Kx9Q5=7 zA$|k>_5F2qpO!OUY$(FD=Uc;!26BSF2S3EYv3IabPfM2)@b~v0N3DV`?a<0gh3sao zB}A`1x-7)b&(CjTMfxuLB`mN~8YTMF*wkchZrSyE0A&US%5;V-wZQsGc zZhbVbAUV0-EQrYM=OcIOZKXn!6=q)H)3w7OD*1c7xVX5%r^Shhi8^h|Od};GWfgNEkE?RGA!pb$fE-3(JFq8R7FgChN| z$0H)eCKsWIO*J1p_V)gM=6AM_`jnjGVq@PNdoP`yo>thd*;rT{JI`%E(JU(kk#sNJh*?~ zc(8P;af$?M9?KnFPEL+QJE3s5@F%hx98`W{R$^!qw!^dW2hzIgKk!7HqhRV^VCx&CAfkK2@^Z`E^- zYS2=0eY7m_Tj;x$c^bGZ?-$=hzOp87Q7+8XNd=9F7#sG^e65JZQM=eM_2mRQCt9i%O~TZb4rqPf`Z zHsA0Ho2sv`v6sN(XU?8b)X*R*Wq-F;UQ}VTK0P%xRY?M!_A;dIEN|Mwk1#wUtYBf| ztJl{8uV`J4C+-h#)4zH4@HR3ZFYm9>Rt|FVlp&jI*RFjJ3L>H9r`}b6@zddBMG8A{ zVtI1-3X%+*7xfhFKg(SU|~q<(w8ks&d9*S zc_7keSZ2QSIVtH$1;gq{NshmNSAkv!3UP-9$HL5vHl1KyLxb(%q-Nk$jM>(=Z{OaS zrErUt6z3+OJ-{f-oU} zl(jro!2<0n4@ci_DCagN8`d{6f{4h*&Z<#qtBt7U{W2*`)NMlP*&2amGUnn6-?a6Fg>>?4+{(H>gqbUw;|PH zo|m)p)QXVJtM52`%*6I+du}PZXQ&7Jle@d{Qp#h~EF2Otvi;qqp5tSO{iJsWN)*KW zvhER*@mJn&@W682H2p*-S)!}ITen6eq03=^mDRer_i~D7Q9pSikkSJnuKKWT#bjN@ z@B=3WMOtfSYjPFR4Tz5#-cr~P9yB!-yJTEnAUHZYG9eot6f1CU zy=8$rGT0%fGY7Bs&7$)2^EGBW+|emT=Ko;=@f^ENPfv%6k?rLhe9nZ31mQwJ;8S=y z?w*h|ue7{;@sJHJE*=W;YVSc`hJv_g(D(0yZmsYDb5nDZ?DQFxRkjzPc{WA$_4TmC z+F)3xDX5<>xiP9?q^zxB@>&&IqYzV|Ne^!PuCE`K$e&x^2}7D>e@@T19lkzSQ(LnX zks#;;Z4Wb)luMVCSxcj&dD7O>B8rlSZ(`4IOy=m5otc?AJFBCnrpDVy=j>vjuiw~w z-rMmktaT#z+=k&;x1ga9FVz;ZB+aQ5_3Y&2`Q|>V-m@Q(=7V{Fl=~x{Fo&Jkl0hK9>OK3q*RQBxZmu{AB&aB6C9PS4IxUdQ=|Sfj7ZQHUq`_ z2IQCBi6R?26B{>&`B2ibvXWlixpN0r;7*l+&7Q9eZ*r0gkz=!9U#y+aH2CCXX5JnpSfua!)O-(m9*b77)Ow}A%yI$Jan%}^ zvpQD|h`0Ltu_S`t&zPCjiyVSdQpjPQA1crT1*Jy)AVZD4xv{aaxfyx&R_Hpb8n5c( zEz@|&OoNlLiV~pBO}>G1I&+`z5;$kJJIiGLCgbre)NSI*4LIES1t)9h{Shp|~N`zHu-Bs;2> zT4}C@7qumW*75v#o*Gic^2&;{!XX(c+3H9|M}L2?!#fn>-|hYFO?v7TMqNM2cMr3<=RF zwo>Y`g#jet9{rS#PGhp_P2aMdR=gIKlfr8OC}MvKeKayOti-mzv3lzvi|J_dgu?cw z)3WtKdzg`_X*J24hVHkbkj?I|jgiyPjIHuqzjm$IbZEH7^#YobH)>nv?*6;F>V))( zN=#U*rVy@Au|-`oF*4u&`q)ZU<4K(twg(!4ZcfrAk`5%7;Bq>BcmC^WX~}@xHzpRV zFU4jT7H3dHvPO!tCvwLJ2ko}v>sCoD2LDFNOOBB%^dfL0#WI!h>C23)nfa_r?(rZh zg?YNji@FF%2~MWzu@NqYSvK+)AOF<7u`83)bwNv!QCa7h%Q!PgQOx zBu`CBDk~>IJA+I3j+KVxf08A*_O%RVpV5r^R-4#As<3aEUe?dAJWu}OAz#% zQoT_HybOUTDV$r*@R~7kl;f`H1IB?uOiODDC}Dzz6!G3SH9h?{DyrI41tS@Aw59kz z5)M_M6wc0Wp@WA$cmp|`YR52cH?T1gFK>X(<%7#fM#ikJG4cMte(4{vNR?&6Uyy@1 zM7r&829esGC6q1Oc+AD>Ko9_6 z5VU>`XVK7Ve#Fh^r6!htuD@A-Hb3b1?f!#fDWuCn@HFGQob#wF*Lm|;N<(}Ab6e5U z>N~b%v zy1eSz=YLA;Y-|v1Z|K7~ID`lO{&qPAS)hQ)EOrRpO^z51*>+m#??EV=c?#eCW7W4e zJ4@|Gvx6RxKOu+Z;mL#~7q*K;NsXzV$KT0~;BHL4UV$T~TOe>GFef8_LuSN^FnZ9L zOO<2YmMB16Qc__fOI=ZM(6BAOT*Zy~-@O3wk7ES5AOi`ZRh8aI8lNJGzQb+AJycy= z;mVD~e)TR9tC)%H&?BTtjm+w5m-2z#-xXhbTXfmu;XAP8pJZ)EoUY7D1t(xR&~aGq zi&j=^jol3JMBw@wN|FkJjtbZcjun!Y7tCfut#6(|C1U81 zX}d9ghv<3au&7<#ZxYSTJQXSe^S|W2GoD^6R z%%HDNPLC{sPiE6*^LgBTi~WR*Ec$dsM_D->ic~kZT1c4m8F7hcoqwKa*4N%8d=U!A z_efGIl9l;+T^)U^$;l5ZEZJ0)Plurz8X1xa5^3S=z>Z8|lYGb>7au<@aT=ALPRXvq z4jH87LPr$4t8Z6hZed|0WHgYvrALN^*>CqY-AF^@7Z9KkQYtSkML|WyU4fB0$dW+E@uvhn^Q6=Vgwv^@21CoyZ^pc;IAt?=k4vS-QdS5 z>>Qh%&fMh?@8fePN+QMce=@LSm-SN#z2xHJ{njvsfou&b3YzEi^xM0evNCcBp32Ad z6x7uChK#+g5w2ENR_7&Ef=Dw5-7Q;(jHOwU>e7z#PK9>tl zw!f5-={dWx&q8zO?#*$$!hxPz%LU&kCMG7Aj8mw`iFN!t;!RXaFnFiU8gf+g0?@lV zJ9B4Cp1@%wpEFc#!XAeK5D+qB6Td_uKfW_rG5G|luMh9 zoBLv2ts*Ki(naIQk(c*M#jf4r7EELxJm&SWs)MOokAnGDPamJNj_?b7ws)yq{)lq6;H2ezdl;u}vA@5RqJF4H#bx>hYNMpw%;=62@e5J_6|M)_W1_Aq z%Qa&Yb#0%Tbdc9>4(Gb?i5a(Qq+G#0)6QD?VZ-BnwU2ne^>?EERuP3`s* zj3hD$&*aEu&~e(%9J1(!v&T13szQ> zq2jseB(HxC;4aLsq7HPlc1td%56RQbw0fyF#?onEL_{Ev5~W{@}LzP0UFAC=_CFNC7skrgB0fctJ`+ z!iQoGGbeQQwY)mn6NtOuKaJT{^}MM~`2>cv%!!aD9>i>YC{h#h`C6jd`Iz zCL^<G#wrS#(P@C{(YexjP&*e4N6i6&K?%uK{Ayq6K@Q+_U?g_0uf1eWC{i0q z(c6#aWad^gVG17@tOJr|V`JOf+Y=BFknLJxNO3gU-B+6z-J6A`&t%n0hBKzQ)|{)d zGH3`9+OoI*9RDyZDxma4U!&6ljR>mY7fv&;*|Qa^KaRzgmmdQy1?@$8%=*`u`&UeI zXbP4W;JCs!=O5E#lJD^zgQ8(OJOLR|D6;^5{`)W+uKlu~yu{ubcgtqnu+m ziTju)j0k#5OJ7(rSmOE!*8QbuO@#9gFt9WSz5^lq{yk9|oFl1Uo)Wv`h9CZXe)WfK z9~3@~sg0YKQ{c2o>e5HWreji&s{%H=R=SNRp7FyG6NoQaeU zkdBX!cidkOV|APdQEK2kZy)L@@dn|DpokFBHY_rC)p92T_a+p>ib-drqAT&axtk4s zM0j|3H;J7c4wkwS8mhSu-s--ryPY`|1Phy?;P}@?1$etgeZ7CSJgUTr~kVlFRAgU@2Hc-oBkn5)JY8@wrKS z8JUE|9_liB8@e~?;NE3&3O+iT5f;__0?FlMN(0c-6v-I2v*li6DFOTI#QbL8)O%R= zc6YEAnJR*diwoK9Cxn3bcniwa-m;wq-PUlZj@DNfIqbJ}Kz>Aa^A8GoLPFD1 z`1ZluAc#T5PS?6WGwfK$a5(lGGcgs(xJGS!&j45lk8V z9Iof8GBO1@@*3M08XN>s1QGp=IPC^sFRiMFOYgX;`n$R)a-NzM3%?eA&CfsE{YlhH zo$aJ8xi(iEdR9F^jv+$?AVtoTW~xAP$vD=HK%cmeAY zHvtJBL@E-9fk4ZGPiV>Ay$KlPffu4n%d6L`>*i!udZYh}<{A^kcOX<(R|lfuTZbQm zJ^_nY7=x}fNmK9Xg8cI^F~j#I08i0*3C^H!f*yj5Qbk2YL7{KrOh~codIPqO`M|W{?;pF60Q5l(?mF%gc5mFiVu5OCXjRL$K8QB^g zF=k`J!2p96GLPogR#JEHcYx~JKQK_^v=>mggXckS(>e%ACzV1DjQr$rDS7$+{(hH( zb%F{ERwY)B5?DSbH9nsx+B9}zm`Y5?n%mo9 zb&FnoaRf?jTXDjX*Jb_(t5#q@AgyZYWJ$9hy0nUlXb^nsbJXn$>lOLsi8LsK9zTAp z>?tH6PYX?X{@j1(K9`=*!lC=&<&SYg2x*#WQvrFYGOa2m>d$lS!b>f&9B9X5G1Jl2 zRj+Va8{RXzihTQ#d*{+F%yQGA^10cxK+w6Xt&Y0O_f~?>iwk`c^2N=Q7LGoC_`qXf zu?-?UL?Tzna)2V;<6T}}ezDOfnl(`Cfp(J^R(Q8N$mHYVnc3M~u2Yp@ql7feKxqj8 z9@&ssJSEUA!~ zt4BsdW6~2WE;~&_LPA1Cg_le9h=O$qE&!q<2qlG#MZ)Yg=1)KK-Rbxo6BHcK-+Q`y z^#&bXj$cVfa$AH%3|ABY+b0_B za2fv$-3%I7`;RCqHs^r0#4^iy7%VI!zF}cQRf {nKS9y$?VF^s>feZ{l z;S1=dD;w8A0!R?@iRQL-apY!SfY`e*{bu74DXA4`bgh|UYt_SeEXMc-#}o&625j5E zw=l^s*lZ&3Y<@tnUHex8EJay4-){zPLZYiS4pJ z+Z5Q~OBA?4%x$x(*r35ZW)H#no)hVdS;a30kIis!a58Sn%S5JZZWf+kE8f*hF3e=4 zqRNPi`=A`DZlQNEP4u9vV@h|o&2pjr$ZTh0lcsG9|6C0T@$%sJnAyv8ruI^6>e{%N z;HlYjMRNsRsAkpsgTxhuOBu9~5R1xCvqnWku-lH0;xOp$ZVYIEK2ToHMoumyDw=UM zu=Wy-xL}P@QNdE$P(*-uS)k7tp5n3a#_cB*ZK$_yIqd9Wafk>UH3MR5zF zQRJZ|MVj&ih0LEP7Ow|g8ng5OHxMY&UxK*zRKXQWrl?gz(psZ@uZ+Voo(!OQ{s*LS zk7F~OiqJcqbhEf<5`&Ll9^9z^X|&QrW`Z-=lVO){a#Ij~X!pJR2pq8mo8EKh<(KZ- z%Y*v{;T~ZW!QVX)h?nG3QyZ(7dg0~4hT0$dPb^>@8;1V~1u=sM`qP1Y0{@&~cnEk6 zlynMG(%)si2qHSr`j%(VzFuB&Qp2k}Hl8-yMSU%lhtqI3G&i?%1N#=@M+v|O0w#ys z3v7H=y(q*d9StPUFMoD1H$UAE{tCR%P(7<0_U}14$|`rT zeS_b_H(>S>5Ej<&U3~81lCigUM>#8UZ@w15A6(J;jt}=E08)teu0%*&+*ui z>6~or!M@M%(}he5>HZy4A7a1JtFxoWgb%~==2*za`Gci@lo*}#DPRjhYVa*2Bt@NcLUQ4?^|p?RXv=d* zNKS}9AR(-Nf4F*LI$nuE=<~|x z)=-wOjl28jz7VDcEqw|DzuP@W@`n2%cQ(hkiBOA7O;yY&xs~vb1pS|K>3{lI{zYrz z|2x?Ee+HbkttTH3z%~aq!&5guRK!F_%*lo7dPOA+X3|sD(hD2c{TAR!A~t~!Zwr!t z-mM+=u4Z+ea?(Ye@V^{?6RD^^54c^oPGLzl%?4>9Ue$PiGR`ebDGX`kYUv;u;)hkv zQi70QG}~Lsz5K+)-*3L~{4PU*BqE#0t4>SJx3coxIqyEZdCAP`+Uk-O+kju4nnq-j zuavwrp(zKx?PVZ2U8!5&(Ugpze_zp)A`;TJS*f|?+(7MF3Y92$CYJVi8=eB6aYWdS3DDny2 z<+R`aJ=*Hj_>EZHD^zSA%ne`{DYGwwVzWTE9V`To+%we+j`;^~@(L5RaoO0|^mdv8 zd<3fiI4~3jWFu~~Y`r^pEiD~CoEKxfu{>>Pc3_aa3pp5Y0m>RValgIwv5F~@&oU#B zio`YWii?Sb-+4hoQfnA5*F8phX^au>4NB#7Jm6RJjjz|-M_!|O`c(0v!Qt+fjKz*c zZO5kx&$7N0TOvux4*z75nlqg%FBd#32y9Oex4?xUq~smW=~({Z5jl{IW-Ft5hYf<|&vuz-duDL?C4D|HA z1l;?N_CAEC5A&~lWoBlU?ShnzR!E)8Zt_i!`6OU(_CfZ|ZI|UdqC~F6o(jLupON>v zO~OaOX9O7=5zYhqsnhGQ{~%og@@2>%j~$K~Ds^w;zxal}T|IgBY(`Va58ubfM_fWe zUS58GbMqO2=Bpx1NHbDXzbvny5G!P>ZmFz=1cwV&&32vuKEOxgBqSoDd-UjysVVRk zN?O|UJtfe!N!)?%{C8qIXy7EeFl&4`1VtJfkxTR$#{UA`nylX$R)O3ao(GjecBRvv z#jnGg(Dwn~zCCikkA-!Y33s`sjT=zOh4Xpc7ccj3kdby`#sTc(U?hZ8#K5#?kh{0| zJ{~bCIXU?Y(nE<;0!YwdLxmo>-o82zA~3#`*_hMmEw^So~~SQ(FzQR*Y^|u zglBL-0Pfr8&2Q6D9f$9G>_`1C8FHe}MK5Ft=6 z#6{isJ{};i?d@)kmTBvWi~CGaaxYhx3UGN9n~Vvfe61m7Ep?xeGce95OR97IFp%m zI%2p})XB)n(Fi$0El4ynv5LP@T8>7CSp5g3z>l;)q zHJGmCq@?cXS~~jQAI7{GwJY7QnD~9jZ(y)w(332n=KI(kpUcj!;=*Qs-F5xK^2d85 zN1F|$7p_xKhKA5-B#(D=bi_P25(N9`{`j8yc%ax*bs_Iy(2UaObDi^Q?xt z0hJdR5wbcYW@nq$9^a|BVgvTrn}bJw6$UUyUc7jbsZkP*-aR;2+HLk$S$TN)B2z6- ztFA4Ah0pg>A+E~*G*gPBU785`RuljYo|YUj;No~;(WS!{sN)$h5K!-^$xBO5*Yvp_ z<aWg5k5a{*KUHqP%A%kK93S#>IhMHYsObU9G4K=u1R_L1Ya zvZQeB25)DGcK{jt`ue04;_+7rfCwM&uc<&O{w*}ubd9ZjOJ*(e)Ol|3x%N$BWVhSr z5jzv2A#~0IO0I~_D%f(Db=IM5Sh#j}asZLo3!4U9d2q}xEMQ|}ryOHZh)`e!3ZTFg zjZ2PvUCB|E%1Qz$jh8bP5h^FM`7}RURCG{OP)y7Qke`?s4I!bF>gs9;T*Gfmw>GEh zYa{Bv1qUZ*CXPa^UVaNT>Cu-R%Y{}GWj!!Kv`e)2GJDm*q*s3Cie$}VcHwe%A#rk2 zzlYb8ES^Bw8o`nSwAK9^7{YqGyCLfKcXv-a5x&@Ufd>Q@)eu_sctZTkiVbW_;5!=7 z`}*_EDj0>J2SLShM+Y^Fn#@RHk`~nx6&iSVVb-WXx3#;!pUhp%GNQQ6HR4m*b*AYo z=pTlzc>n>QKYx}LhcFeAM(d9LHlR+^75)u;7 z%`d1Js8!e!xzUsBOA;t)*=h3@r5Ac{-n=_l2X`2Vnu4L;xluY1-_Rvdnp~o@Ml?cR z)v5Ssh-}HMizjr!yLN|*Q?{O12p4a4!>U2d*I?uY(xN}G4n%m>gp;#scXzkDTbfrm zX51OHm%NP*XP^NPC*t?`CDA&9ald}`$t%v+m1L;4Js5|j6^wP_E5f281tqX*#(WEX z)~f%oPX<6-ZQSP$`WR&~HKdJe5CY zI-4}M-`Kvq7YA~$ygZQB+QH&H>?kp~1|%*6!X71Mz87%n)Ic!|tb4j&{a^ zt=K>ATM2F_h7Qc#x@#^Y`ZaY<%L^1K>*Kz(p?J^jTfAS!V_m5`hr1oJK#&j(ru7dD zj9}37&Ga@lH_z+i&(Jlp5P%u8@nnqZ>C;%+VdT5`FTg$usi(I$*jZ2wnYAmXL%w~p zJ3V~vRd;-l<#ZK6@N$eySxSl+!v6o{z1Or7P5<2saLIlR)myPa9O{VVv|MXu+GkhD zQ9FYzwygMH!V^{&R|j{+1E<<@(jU>1jR)iO;yZAwtB-@3t6eB^qSRn!q{J)=KWbEU zES$FVhagRwusCY`YY_^j_2GTXZc4+xyquf2Zh=87Sm8U1in6q{#auH0hHOUXg3Lm1 zKI7ZSK%GPdm6MlfVgCY@lfC<^N(HbRTjI>R+30hKTb0`hqb*GO95gjqRsJz6@whJi zTidtXzsZl7JqY~Npah9Pq3=Od`@?(YU%hBRhAXscBYsNy^zmbhrC(3jHWuV`_}wFj zvf5$4Ht1X-hf4<*SVs+VccVPUyR9V~o&xoP&TetSa;9<^={Er~diU;K7$Z)blOGBS zEN@KH(b2)S8-Z815#M2FGw+wu!;~ckST_NV>}>5fH8u`n#{PtihSOvvI1B$SzfS@((H(h(i_=M4Hp!iicR-LeC1d8NrVO6P%nqIa+_o1# z04dt(?AZF9aPGn54a^2fFipC4efg4#0%d=tw=$adFqwO<(9DRP1Y2fuG8s3w2Cr)T zkTk%1M|MXuvkmYDGj!`}C-f|VSN=)T6LDMnh?C%OF^NAu`7nKLhOXq;*vaLh3>npA zes#~&W3ER^I748>$l)_Aa)v=Vc`LfauWWSsFNE%;hmE|+IQjE*;js2Vb_;rZFOkU2 zCc1f~d?rTbZ)Ds@H4b~}25A8S(&pyRi`umEZh75O@$?W(D0=Qn2sjOpr?=qe&*jL( zzjaERidF`))oS`BQ#9~qI@(&^dVoCjOt_|QuL?1#cOY`0-bz;8MD*!vSaXTwLQ@3PSB9sh|Q54-dlx z)jp85$hQ!`VK!6}|LmbRxa`6BAx#JJIfRFyzE>?=9enehCrOEktzqmb#l^uM9ztqr z&YnAv41S08H>V>YKOq0-BR3HHIu>TtrTqvw8C|=K2Urb4U<}wGTrbX8i222{j^tut zcT3FqGcaq$FX<%;9um_=nFgUpXua+zIcb~SA93cj4i*QNVGDd6fBHxy*Ge>ja0s6 zsDRv6`@HhV=)7RQKT8FS7~r!GBp~OuKL#xv?zFeRf4oZ17PbmNA#*B!gu!cQ#4WxL z$?a`+9GjK?EYPK{+91P*ro#Jvk(sIv4h}HzGi2H!q63Ct)op#ae3ursV1Yt-85Ao^ z`VLDr1_`a7Eb}b8sePz;obVWY)P+mmk$y-DD=8hRcUQrq3lGPI`B7Tx?F}?n%)x=J zLZY)e_RE(qP*ejnHQSk(UtgE7rUNj?bMn#GgU}VGyR?NgKmYGW{}{sA;Ly-Ub)6S< zbQ@4Qe&*w*!LNJsj8?r|pSj!H@(m1B*e?^oY{uq%Yz6T9)vIQ3Cv*r!>M0D)*U)fr zor7(U-FD3zR-L?~UYR?c1n8J}mXBBY9UP9AdQ#FjzWs_j=;`fkb&aWk=LvN>yne}p$Z>!;x<=t)VSBPmWrl6(@ElfGS91e3eI_g~# zuVUxrTZjI*$DxiH8i9KAF6+C^m%l%ufEqk8SKU*UTp$X0u&k`CFFxn?@?Hjy8*-Lf zL2%W#d2ATlHrH3#-fh0$xHUoS<^e`uvx}c+t9r_VL&G4}tlb_JN$DXU5`((M)Y;j& zU@bH(Y)rJgM0YKmyZ?-soVPz#1VyqMADXx}nZ zteJw$r>i9XWOv^XrkY@s^mq9Vi>!WnP8V<_Y!e+O{wa?9V>$VaZXm*{m*Z&1HDjry)0pInscOwukE=6fmRWaVQ~W2dV$-p5-8Ebmg%VIqSS=Tx9yqA1 z=ouSVT5WZM6+|qYUIeA9KCf-nzaXf9ugWHPxX7f$pf(vKC^}Eo-dvvA&84X*c3axb z$VxBuDhIhNW$Wd_G?2i@Dy)f^tp-P4;XZuG-|9Dbzrdi`Rt9!1t`82IL;l=dq{Wm6 zVM-w9t9prx+K*5K14BW!TDimCPC#<}wy* zbBF9E75j-AC`A0WiS~w@{YeCoZ(I*~#esOm`@yI0#Gvii{$QoAAS7iWLXU|0HE6f4 z6X!p9egb~#4zCl%iU<#X<;O%BeS-o`x!ADGaln)Y=VOJ=QULeGsb%{r>ve3f32wY} zi^?c=LA^z7=~Soa)BAQ}x=$?L!L0hnvA>0t6$h^CZc$Kr#~R{2J+F|Eo@J|UAJcil znJ5*g{qOxk)eUZJs>@|6O0gpSF;>TlrD+-NZi*y_U%?9UW>imW1KmAoyc!> zu7NV}KDhJE!t(B%iX}6li;9+NUGLN114ROEEZkD@spo_|S^j@i4aBCeGGpok_LY?b zRf-+OKO#XP_TSCmFCG2=?j`@1PCOu{3T~NGQVM$lN!`12;{zT-iH;+FxWv zwx%TRn_F8Ts!?|3B4WW1MX#;JEP-;z(~CQ@1trzWV<0x0X3tg3({U$cBcP=yIR^`6@f5^hU<*e6ucD<)_Mj zH^Ki9dKvbB;l`!rf_Uk;wCG}}G5pt={+i9o!8ea$?b7s%Ks+U2k1yJxOmk{7}6X6L-HUpWiHoRfJMc&KOR;UX%wvoMA zl|wI~3xEL}8CAj@QJKm56V>aNki)~ziS7f^OLKk!8g{3{*T$=~OmFosx9Bq_J*&#e zZ>koMF^EG^%1itDbB&!sRRQUBFv$M>x%qYh(OJp=(3i{<1=EjPi-Q6K`N;3R#L?5& zmz~V|_2>7)r9;ORa2oJ?FP{=(P2lfi?Nt9aMeAQW;gCe|GVD^wNT|jB<7Izs2-EF=+J z`W_Ja6d_&yo|Tm>rsXl={~vpA9Tw%f_6?5-f(R}_6a*H!RGKBJfPkZd(v7sBbSWvV z3ou9(kdlz@k;{{JBEfKX1;T9$J+1S`+4^Jz0dc@cO0+B`eTX1#C>0LUFZ3$ zbBv!=Q?sZ0$2-0ADOJw-LhN!PQ9CU))}J^vj4Um6%3Ymg8G0OFS{G&wi`>4=Z!eC( zj-=Ko>tb}Rhw|9WRNtIoz}Skwv$8N7vasud4<4+ZSElcm71D9*mi1+t7q&(TR}|76 zab>Ys=wHUrje9`UGf#75`)Z)RYP4|XO3 z!F>yvSixjNMbDpfOg>!tJh*v~V+~vF=g*fmH$|N{z7Nz1IT&Y*kXGorIX`5FaHN9E zX7>vjhn+VT&*t+;3B5&r`C5>zn`76I6ebH#2T<2}96f~e2I-lyMPtdb#mqR3jJ2D)+4WufbvOgIC$@}BM3v$yBqVvh1;(w=!2~< zR@RTjWcqgnfIwDNqb@r$-Yow4)=+=tjaLDd3P92fWe5~*VbdhEbsY;1b)$hCjKOHJs9r^lhM5@<#8G{ynI!mRl-g}?? zJV=DNe6;PLwEy}}|HR3!RtF`OFU5V?&LiIfA}V(}atA`8WTSZa;Rpih1~<30*9a-J zjb7(Yfj$6wvU~SALnXU!ZmbPeIC=oQn&`=)QBqS_ft|FzPQZ_h+(q6^Q%5b2 zkFTA%P9v_7Fffqf$hO+`5_M80if3~HRU!A_!37?>@0i;zoSYmZci+P*QIKEPcn(H2 z1A*GEGz|zm+wLrZCJ@Z=iZL_`b91WcYAxTtr)cBW8tJzREJuu#>#yzDOl<- z#pW~7w_OCx`X0C;&LOWoc$ZFfc`Vcm#1ohNh1nR?1azmFMzKp%pn=!U)Z{;Q%yVdH zsMqT3XA#q!;^N}GvMUafu+smiBY|)!eygD!NZA@JunsyC?aExN)oTT13>ou$FDfP~ z>fqO@S3K;?n9RMD5Agt9Mnw&$DkpR470aldc6C+JqUT>*Uk~Nd5pwP_fy1BqUi@qS z*6UGX8|z<=96K58>PP%4zMPg+08!xWrRM{Vo#hMI!IAuU@J2^=@^<(>|9tliWpPP~ z6l*qBH3)sGs>T2!II(O3abeo!&&K`$*(v~m$S(>k)CHRsz}>m-wOaC*s>2Cg?7A_l z2xLRJ%(W#<(enwAjFi7vMUwtVQH+QGuUqy*yX_T##FS|XyEvIKbXau-p-WB-b#(A> za%QqvGgQ90lb^3RQRPW;{hVBZoe66`k(t`!TtsPe7V*RCt#paSnb(3;gPzx+xp^fV zsDO{5p(w2iuBC?`Y?0o`=Su_pxl%@H?3rm=&{0y)-Gpr)aBYCND&`wEu6s9jK-Wod zgG`*(m_4fjM?$WPa|zrAu``D^z;lY36xQ6>UPc-41+sD8>=TCnykt)cgPY@l z$y+KUodSh8`NK{H_Up7Ns#)5%nD1>6{n6%AQaTL7+vn-wZFIHolg z^~zQsCFqTwK7GL5*-4m*$dtLJyrfX#@a(qhc`(c8x2lG(l8Or`(`;K43beB`7H9 z+%Lc2H&GrM;6QeMvAeU|93@z2o7~!QsS7$$*$6&XrQe};7<9BCIII=w;oJ=^EL^7- z!zt(m7X5}bzSk7RNQ!YYp>Su{g-h(Id5EoJb8R_K}@1l@x_9jwlRt^)a(j7>0t0S)_JnKMjE@0a68!xXd zcu%;vxES@EQ^cARvpgYFwXbW6%=j(km!i>GfHF3u-!%1lPgu%mu*II;s-C zrJRjVkOe*Oho&h=uPbw2GIJZ;9pkMY%(qmZ3_3A-<(Es;WpEeTt&!$E8T}*4giJAO zRzZ8a1r|NFkpfHen(DVDF+EG*`sUu&O}xMcA2;|ZpcCiMqZkXqUkGW){#cuO>T#R< zT&~2e0{b$T?PYWJz&fT7Mv@caO*DOvLZW(3!*O&awyITCtK!6oPq)eqG9=~?YtQ!m z{PFF_w$0NXa;D1NIcBNHi7F|?&a*jLof0El-n&Ewi65{!bMx*Je~vJDM57%4MxLje z`fJM5gjFefE6EdP`>}`rMy>i5WlqysIE_}7@&9A5)T~VDuot3SDmOqVcpiHDFv*m8 zwuxn^N5)o@aUB%Uwm{L*5qIuVCFx<#(aTRAbB0=dZ?+HHgq06JQn3{oc~1_XKh|zm zhJio!?|%z+IQ%&xnC@qG)XS~QKLs=<-2dwjP?w+9+7yehv*%7CkGymY4GCclZR!sF zLfq=wgR3{n8;jr(P^B9f2z=6JL98sp|CHE0Q`UP;ym;cuWSx6#6B}fDd>j@^Q1v27 znV9sT82*JEieUhAp%|X51YaD6C((`6hK7wN*I0 zIsZq!(qH?nP~8tw*RMvAQ^w#40hbyZ8d$%)M8v+Bv?-P*Dg65NA-rpH4w=LE72wmg z$JXTY9z1zb=GdX>z5ex{%t2uMRSrK2L@?CVSXf|(u5sbLc9X&n7uzsRIka639FW4m z!I41wE;*>18YJt(-QAWuD<7~|e@Czcq@);vvB1ZFIPo9q`~E@`Hco10b^-nyMQ+!< z7uXPuIT;zvbZY12J94{&|8&c)8LDY}^%npaHGA(U%fx94f3h;wus_|eu%C9+f6)m2 z_pQ>ueS|bB@9;Jt#3!ewq{+9LjQzAWz8!R(o=Qp!@xOA^MV+7blkWWNcfLp5KfB!6 zjbgt5mB}ge^Gfw)$oU8yjD6}bh(s5_Igbf@wmIt*a-l*E|d>>Q9$FE^*$}x%! zwH|Y8SIy}c;0qm6Q+31yNVgoQlmYQb2=%>8n{Q*W2~~<&c+t*HcoZB3tWA#wA60B| zkA)sL#3{c^hBTzXTZIdIh9gt#pOO<3(S?QZ&R+`d{)(beN2#Ih(|d%3hNvk<(Ip-P zyiW>^@^yJtpW5YCZ*Yz>nJb&Sp31W2f(|-!R%PGeA9h=r=wPyT{R6B z06d{9%XsJsHWJ13Fa2Yk4g_Vuv4-6<)awn%@(ty{ z;J(R?94Wu=LjZL!dz_lx!jDYJHbzDEcvy7_eWKQ@#b)p-SD+g1T0A;>r9I6s{jB>H z2qlQU#G~`#x?FUMX1-Zyt4^>vn@UPM?Ct}z`2bwgQ4qC#_Z7x9o_95-gruthzx52) zF$I+%^mM%*6@fCfV^Lb+)+_&fLEr`}t0|z7 z=dQ`z1ou9ic3xD#4nqZj2M#RJ0IoAAN+4rPJ(v7t;J4npaaABZ_Zh6^2I%L{PP`zp-iGwNFA&MqoE7Q4swLu z-U__NuiRo--1L)!v>^?ykyw=SB|b&b=#|@Okp76f zPd*g^;c(b}ePb)DEUIxpbU^~3B*o$Nd-~HP4u|y~S>}7WMlA`UF|KP5fe!3ed8*s5 zt=Zn$3GcWEI&5z$sQf@W^dZOaAxhPVJH+Owb3w?+v8K$@Vyf-kloDR(QNum~Xt)LO8uyyOXg zZA@%U#K%Gw^T(T;o1v$L$P4z~u!t~dAucaHj7apJ@)xt(xUsxm#{e2J=<)Ca3g4=m z+S+K54~kbywG#l}90Vg3G*7DPNn#Iakrysp*jVb^h8UX|L4pXED5TdVSLz^KFWK4K zAKO1BnWtM8C7p z)kqp(Cv{5fSOo>u!!Jndh<_t{jU@DX;A`l)feSwFPeS^BgSATnN!KpmY1e`~@t!45Ai0=8>mQ zpT^wGDFG-NzTHoajnmynw)e0VkzrvfutPrm2JfeGFl3Q*{^TZP+_Zka9j|?ki3yA8 z9EPAG(jN&AgJ3V2o|<|X+0jWTk2TX7)Fk}?#$mJy3pHp^?q?3e{!~@PeB*{<@$~b7 ziOURM6u(I{(0=r1r|X3tc-Pp#;_?Y@FOz`;)4EQ-S^FQ+jL{t}uTCr<9gQFBZcES6 znEGD(!JA{GE?X8lclVg_?z-A;0_34gd_dAv~{^ zpsihQ;I!D<2R)v&mWv(s!-{nE{#%@JThsxry=^SFIz$+7%K*AtW&<0hZ_Y3YIpT*F zi*qLe>uB>G!es2Mtr~)2p0Vgn$E7=AFk+ASBS{qsf69p8@KnxE0PrmM5Fb9h*16F-Txv9*sBbi{n( z)QV0JoBM&TFY2IG<^HP{AbSGZc3LDH<*X=0_J*fCQ(bz${Obx|d$Zb_zFxpQzE{8+ zQ?^oy*fGhoGr46l8Vh#~ZV+0_@i2(FuSH8hJyoeT5$&rk#%&r$q&0)jhl4<3O`rL& z65`a8+v;6+ZBaux`wj#4beUF?QRu~khyYc4W!ODjthW(_mvRikG;=%9FvBL)sO>1R zbK1@A0GN`$&3sBp~8Ux8>omDs!9J zqK)wwTberPH;yq~;Y6@_7O6q;y&`J*)wX*(vYRp{#l`3S{j2c|ycInUbQ;ZT6Gi@@ zL+}L<@$ON#j(^EUXws#o%lQ4YAc&{l_tebJ<+EiiT9MlNi{~NO@W020h0wjHx&8#d zd+Txj{ck>6gg^Z)YG#w=@Bc>fhdamL{&qjiQDFj;LWBC`6T}r-PRH%82x1gu*37#ilb% zqSW-I(y|wc6bM3=RR)`G@spxKs#%yBJlm5a>s3Vr8v@nDpTQBGV4TkSC;CXXF{6ky z*K%rdvi;q0g}RG$bTlv0580l-uuwPt%I*BM3HzU5!9sz!Q*eN|`nlN^7)Str$|#+j za2?eL^%p13A3PJ|zgwJYW;pS-5~JGUml!G}#6!^|t+sy>_)j?U7I#fUpP1KUjotJH z#)!XNS>I-8mvEUI>mRwCZ1h6b=hG*9dpoG`&A#fk=#dYfEsb{^!O)3iq(Rmh@R=do zpVl{*3#pF9jSVZMVJp0QM>FHC2XB_k}{?IGaZ|6k@8VO-RZ_C?(&`S0~Hc+`pKCYY=3FJN3e$} z2^UYP%kGwf0e>Hk-Yqg-T zP_Nv=3FghbIn4lx26v7aAFq6q+Lswlby-kw`wf$a$zVa|#u_+vC+Y&FrKRC1*2-?J zd&zjok-Dvpd*|%0(KLzeE#}sK@I8>kwFQP%7`HJ_B|#s0>6XpY{i0QKwM`jEb_uM7&E5F^`00AK1rm3a} zP+Tg7I6?R)X%brG@sr0vA$p4W56?fM285$-I>p6nNp7xM50#nTevNa9-mC3k{{(GM|%} zZi3UwXjOw(5GR8s8#OdaA3{ToN2>7v_0nY=6~CwmpZynFrru0*!SKcIW-92s(sj|h zfu-&nlq=Yd%qDfu@?Vf5P3}n?dVu*)*?>A55bzigr#S6+6pEV@g2^49%_)Taw$(m% z7uvB#QcFuqhD(>AcfIU`IsC>vmD;QP;BDjOuct7nvAo10~ry(GmbyF&sp8KhH$5Q!;=i~GuzCm@C* z*=AD7YG`R;pyg`?It#>r&=G*w&2b5{X<157M+Xh5sM~Jc)9$>FFnuLrca(;#7H*_& zQ}<71=B=aE;cc+{hpwtW#1&e4QvF9&3Z(i#vrU-R(L3_pxKRwL-w@fO&Bg7oq$J8Q zm38$_N!U5G0PF#p#Y*aug8AOK(kmed)GcD3=?bX~!h&c)(6|BtaW)cw=Fp2l*Csl5>g3FArp8In9>9u>s;$ zAf_An13MXMXDrL^!%ni$i}C>GRFmKQA)%Q)Qrb-$!4z&#XoP(0DaK^CG@4d2UE4%E zPLRkaWd_v~PSZYI!^0yANKBP=qZV0N*%0#_TU}YyCMeL{_O@BA)z!Y`doGM!c@tu* z0XPCDmVDZEJsEI>;`!=Fjeecn;|uIF7&4oX@xi>lq6BQk;`&fK*Cw8?&s01jPhUR8%v{AmVuWx-Q;|c8PQBS4C zo<;cLR_w1e`I!=UkGO*bs|Ut#**t&R7JZv($m8paIRoYzJ&%J#j<0t8N0qHS)Nw%if1iS3P*jn&O? zVQZ@yxhP&>=$&v-;SCOFhKG~{ZzF%Vg31&m{{Q>T$> zb2L?)TBha?^EmY^UED+#6Yw$nuW|kiVrtkRb!Pt+dLl;DZ)*g=3ji^2YNTU+s6VjE zvRa>R9R!6|(8l%KCEGxA58)Elk#Eb&M5a_3u7=Ab4PZI^0<0LOq^AZ8Ed3u{AX3e@ zL9IW9Nl&?Rbmv!U6u+?3S^``w8a5S$+rbdHT>aJ?a6RO8FZWd(ZPOB!J!i1TJD0)npb|S`mcp$9Y37- zwI5tLTr4C~ppi)}8~n3GY+Gep5CalqIdQ5#D2T^6rh;+eMz+1i^;biKsAQla7P3mIU%5i&E$u}0gD|J zyUEhm+M2cUW`1TErQW6+9UV;=vV*?)mFG!aw5zK9$9c!(4_i>rn{ZM%WDV?cvV3h` zrFp`y6iOr>kni-^)vf?!s6Sa<<#|#|C3|OLnh8)($zA_oC8EUT>qC7YskQRW5?`eD zfdUtTj)}!w7h3_g&wX=V)zQ(hSlfMhv6$by_fnsuIO*8z>`hEh zM8ngZmK%}M!X-yd($E0A?1+aLsSV|scA{J>0J7_a8w_XLB{8cq8zddz6UrhWH-vjJUJDGhNdKEKL(pyeMGzPl;|DdJ(@0-rQK0?(ip;c%no*?xr7AUv9V6V z$cMWS5_OfD3PByH&E+^Zdj7mX1H9{3-ap%3#Sie=HO}UY!{e8t23^HmFeUc%6cql4 zALTXhN?~FC@DDY$F$yDmoquQUZW8etINCNYAIdo0_DV`iN+_5_*U&KirS>dM{^H8m z-R$hru74n;_Rh;DdIOP|bnRpzHsP7h32}{2At4&y8pj_x7exH2)9+7c_VN9FP)$zm zOw6b@&CHj zj94suzlpvBcH1)C`hZY=)Jlt2N5F|nl3&HdhzHUBj~#gBu<^h;Zmn_-2-~85audMI z>iguxY)i{+a$oZHdM*y~^4o;VAmGf@*F9>!8|b@eLEa_RP=d7|UyMLZ!w?8w7 zyq1$!oG3jq$iG!qJ_e@3x*R7l(V!K6uwO1nLCvY%%`f@8W}@v&=P6cX|vQ1WCKl zb{p(bE&>3XuAJQJLf)M3nO+xYYHmIlci$J3R-5aK$*E5;<+i07xkf|=rt_L?Mfi^Y zPQ{+`dCo@(nj8=SR3V6806p8MZ)Mh2R#t$JgLHC-h(*qaG0nn9aW38_yF}jycF()t zE)!PWB6;?3ZZW_h?Cx!h6u1q}#CYfqWFy4&Z~1fV2*gdW*O?V`{L(f~O;%g5G+5?V z#xN*!@&t*_e%t--Oek03ec4+qT-dUF1aofy4*(z`K^Ce9Aa{$4N?vTN?~K(mO*cn@ zNXN!BXub#q&JB&hM@+)*77{yt4y{Wk&(NhfOFwdV$HPgu=ic87>lM5qj`**gjxSLW zCMaFBndK9=xsJruI}@tht^Z0@**);Yu?}j?h3@1~s_{FG$6!GMvLk1c_<2>KewO54thZIrpkS%hRJ`Ma>dc%Ipf;q``a$t4p+qg( zKzGJ;wM-=jx`>Y-c_1){@wSWW-0D=$R1-8hX(gsxpZl{IbZ+lD-OKa?@6#_x4sZkP z`%WX@f+UnR5@lUou0f4sixhI$@0;Ni6$^R6_Dtq6;2(ghz#G70JqW_0Ca&-Uupr-b zS@z&M7j@fF;F(P96D>&sf&du^DONB&2x`2-wJE5N^Yy=-v}VG}=?KY23FKdJbni(~ zymIRn4iE=o1N-b56|%-6V0FJES1N=ptro(QFd(=EF5)3~cj5dvXG;>5K|=>|l0!f4 zTPw33rRmI&6%5INjg=^{6M6d8H@&Gas2puOBd0HS-lS2F$jFLjO-R;-B(Rd|d5+YMBsnS)bHL(ui5h{3DZuag`q$ahu+KPhNtiE7s$ zx%IG)RJof)fnB`cf$OB*tT|dKnOc)Oo)V%6 zIZ;4)S{ zGCfOvS!Elv2s$8oNb(TWDK?T^JOkd|{PbQSxbe`Jh#C}mdfsiW3wxzUahmLm68il^HKJ>20g2ls5ck6N+&JO7i<0-ay_ue~T?T~Rs~AeaiCUw0)mN2n7%heY zHG4U#638sb58j&ZG>0#I-SGh2(yle=Lcx+3X%-Gu$hqtCWe#e!gIb$~{E;8Q{Zr44f8Fo#bPDrn144=H*1K+TK%HZ|X6=>=5z z(r!96PQnHu75NGE$Q{%KAmoVqBHu7TE8E*t%)?K`ocasXu{@P?c^ zWp;HN7oV>_*DACO@qr21HU@n)K(;{)s$AIbV*npO->uAe5As~9Fk>SGeBp*t%k{(+ zpKTls-L5!#$x)(3OS#jIG(YO{rq~qR=E(4H9khe0vlFDQWlz*?%?%sRjVD5vzq+wj zW-}$F*v5%)b(L~BP80)8w?>veKY%DnN#=WSc!Pzv2nrGnUgJ~DU@aSls$ews@tp4< z>_-%IA`b>uVPAtjH(1!cXD1hQ_;+RR>!14u$Fvs}oXkmWVeSXp3lP@=-R_Tt_`7$J zdwUzSNWNV2Ppf=)4|?O^o8O(L3j8XsfIya7W<;J1XmUWMg7mzbcoT+7gB5WIynzxF z^bb!!6v6v(6}qj>uK*p8GoRc!6UOT(=Q6X^q5cDaB52)r+7bzUgM;MEfDh5;vL>mu zXd;PvN8q}JK$yF?wL}32?CH}Ro15%v87ZfaRk}d$e2d-nQ{FznLSZd8h)Y6k8t=J> zB<&_CfiY~Efx3F2x}Liu$>??)k~bJGP_YCxFy3~ire!MJOCBbIPRQ?5Yj9{merK6> zu?@&{h*L{I)a38y=S3CL!X{jLlk&jX1Tft7^|eGcm}84MKMzvy1O_)(S0Fotz(St- z3UH3_&4Ua8ZD9!be}%*T%1~3?fh1iWtvZ$(7hfL$cU00WBO^_VQ>S19aAPG-DY)E? z?l3Sb_WQ(%`9Z2b9G~5v9nO#S)wHMo$0IOIFKL#zz!n657B1ICCNxr$;AKw zR8RO*c0er!<^$lA3oS>cVP3VR<#3i|DHL}PZS_CzPdx?1I#KMA_286$eayzvZ*$xM z0Ga5NIs!fh!-s-f%|MEy^cXJQFrYCWTnEV#{&XF>$13RhN>t6~K5x$r&wv`M{J_nS zM+3-v=k0m7@yU1KyCh})#r@&UXDgLIisF@Ma#nc=2oF%wKbcUc>`T!p-2w(W(U3oe zy89&!nfID`fCq*~yQ~d0IV`4Nz4w=cW?uOIyhkGdLoE^fr7qi98$39q4OnD^Ky{4l z0<23|cn>O?)cT`{fsB8x)w$zJnE9&~;P1Mf#%vj*5IjED?jK}3?{?o@j8J#yzwr*h zw@l6agw+Rsk?icMeq@_g#gtWm3X93c-d?p1O3#JS(b(PLw6(yJk89k8FjWA4B~2|e zZRn|H!v>tz9X5csbuxnRc&QX$exM^dDtZpfH%!4%=4G(&d7I51gc>UrQ)8y}JZex#@QKH#z9lqz2P3lbuJB_v)`jl@3E^BtQujvLz0?K7Es0cKZyi?dC^W0^p6nhZvCx1KN}Y#ZH9ac z#iNHNR(VcueC{6qS;l=_tSkdP=y$+W1Dbw^C1?IU#hzRaX0KO6qxoyr7Tx#nv>2W6 zBx^K;phg&iXITA&2ud^Spx9Sb9;~uR5a+re} zgdCSSZa-oHNjR)jxWGykP4s~%5p|l=Fj_a-s9b2qK4amtyb#kbbRDJE)}ZQxqz6^} zM^fg-Pz9otOc4ouYT5>xKEtjI!5G#|9|c~hx%XR28LVAXwrdcX#JA4v(O8F6dxzc>(?oCzu z0sU|pBU8n`;G*{lR@r|cG6>}sEIO7ht81#p&O2Yn;Hy87W8d^1^=1Qhg!ChNMEgzt zlLE8;d6RubQ;qO?d?!>Qkl>~+k$L*eDaIQH_s}JqbtHj>5U7=(-=aKuidn^a)Afoh ze`LpVG7*{*=Mp686xDdnGd8f|{K;pMwg6`noI}9TTyy2sUn>j(cZ6=Cm5!;8&1PxY z=A{FjsdR$+z03zYSM_Bo!|3?UT-O?|LodMcVuTPBN|@hug2*M1w}F|3Aof87w?|I_ zQFc>Nb!MWhX(!$J+rLe8Q)b60))v+(B(zzNr4l%u2eEz;g-J_kI69+mR>@BA>>ZN4o;*yR8^t z(m)3$xNKrzU;~jgQ?vQwAJ)d=FbA7-Kgknx&q9gYOab549K#amFIQr#qJ-@~={8Q; zd|7U?LL`o&D)2tqmu@YUnnF@>p0z%=Js&utmWR;FfPtT+IqgM7d_8gvqBvDCzOEhh zMv9@uhlY@xYh`98^mOI@ons`!CHCyjI(C&|FQGJ=TUbyRNYA)5{s@^s8s94cU@E)% z{QQ2D=feY|RJZfUS@8DGV&WyY8A0Vka)xnbZFQj31#8}x4hlkN%U@UNGc`($zK=2s z2?-H_{xaMQ@@;|TfbQN>1l0UP;#nCbzw>oioOfl5p79}+{?5`^mkKs)sD@Xz)|T79 zc+NY6&!72TW<)-GH`}g9RoKlb!A76ZrFp>R9UK+KP<+$IuuIDH_pek)Y|!||B`6u- ztYM&{iY-yvq=%UZG3nFu)_Vyl%erAhf3xmG!Tw^5it`}9uOEW~f(ZA%U7}4!NC4g+!HB$0~J>e&Rp{LZ(>9A4z zz;ODw9xDTb@zK%uVLRIo3hGS*eOI}(g^L(PZ649p{^kX>8pKkMi*Zv^-vwlU?dW$< zN1${{lS)*fqRXXhKCW;Y1mZBrA=SZEHT**4TY_b|ZrO_uF)^t9m9*9=m_U26;;g&J z!Dc9AKEqcl?7dHRPh9{|PJ9Ydvc z2}XLWjHbT$h);mJq9d_5$CeFd*1=(}VuT>98888K;(5yf0 zeJQmBfEPfP279E!4JLq2v>Kb$^*5_j$jnep-@VOSGC-KAol#L+f5@5^=k87}-(vkC zV&o$K;k_$YRvDGY^~4kgKU}M^zP>zM2zJ4zPrES1Zs2rs-&-m)D04&Xd=FmCH-K!Q z)rmSHxB+yvcVaCZ!vKF+_3xXF*Dwyd0HP4VbYrBy9|xHlRddTfKhUIw&OSXe6}8zmPd z1foo$1Z45^B2g@mW_8sI%B2F3!~!K1tgO#(jd5-4Vuk+D!l;)6hg<{X)r$%u`+7lX ztW~&tK(aj}*^I?xmQoo&83?*^DOwcFz)e?AXB1^0T9HUd|woSGXYQ- zpdG-4fg1Nc&;>FcG!gYA{=MBlEMaOPOwOI>PX~#INVzNj@eOEPi4_L?HdS?Va|U!B zXUVUe1ks`PkDFjjfLg)XenjYY4jpV2csw4&jWC!6$fLGsVRNmvt(|uhPma|~DT4p$ z(at?-w_J?}C!&2I=b$tHTl(B@jjgG(Ge6pz>doD2_JQB?mRamCy}oXm#OIPoRbB4w zrtqwNrbP^;RcOWR$m&N%!?v-|Ydw_~0M9N#THy7tf`zSFwzF6PMSgmR7sI6SS3V!(d~+J8aoVGCfZ){|Nqv+Mtj znziwZ#+7{uqG$x5uB2;8K-VoVFQX`;*iOUY;bc2w*`G7@a5o4RtRKCwob#o)`KMo` zc)}O`1?~Pd`N)Q`e1Lk6or?~N%GLk&8XSxeX70^NTgT+D&O)tp0i%l{F00`UY)^*f zUA5D}WI(XF_B}K02g(*Epx|HOq3s)yJ&@Z~`2=vDabPqp-mR*&RgSF(aya2Eu&Wgn7dyE)Nk@WW-1v2y zpY|mjh_Jc!3iexGotKj=3|LECgR)kF!!KpebQoH>4I6CYkn`9GZHfKDR>Sp}2iC6R zUhlLDEHrYSK5YCJJlzt3(#%3l` z!ohlidnl5Ok*UmVGYteOz+&6azW)Nof>prV;uvcxD}Oa`uK_$wxjb?WhELV^1T=+m zswdUJ==Oe((aN3YcRHl`V}dWU*3A??z-;|}dHn?kXj11AwCGc~C8iC^uSpvm82BNX zPjjTe9Y|;g%R!n6^s!1w2_loc@5A?}u#vGNXmFS`x>~nkZUae6$sqC@1+B`Tc;uAc z<2JUo&}xQwNP#P)y|$w?(;V~M+*V#rmLP;CAwVoFWTJy$1F zhBH)~H?+CYW~7lq<+l^}?%c1UAia0|&Ii>3+(?*v%?P!|$&(_enRt5J*5c_BQQr9E z^)2n0OY1Q1fQDUNCQ>MKk*vgtsm0c8q6_HfkK-Q!p97CGYs}k6S1S(iS{4=-;DaeB zaF{Iq&Ln_esjm`)R7NPAN;OQv$)evJLC8=1sET(h-P+s2DvPofz8dg&>_Lm=0&>A# zEbq&gF$jGVwCvxg{e!#9om<-*nLSm{nQPpVwfBHyzF%F@7=i=K31fTKp`v>iQUv(k zR#bG0vXsCi1>oZ_F574!mR}Hbc?0M{wc4TK;rc)Z5Vl3LTFcye_Lv}SUBUZoRD9|h ze3Q4)#Xw~;d91A(uZuz2q~^i!eB%&i{l?ulr|oTR_m)esM$Mm}PtAv*OSb{wJjD#< zQ=?VjD%OoB&AsIp#P_E;5Z<^vl+QaY;g@xgk@yTQS z$V)R`UiUhD%TPjN>PmQ*2srmtvI2}1*a6VKj*oie&&s)Z$HXKBjdt723Q-LKDOBv} zul#k2iEvj=?2x2vtDV`LOi!VQ4@z`Coj$FCEnYo&u)S>x-i{C_F=ZU$cSMRMn@AB^ z#mAk^o_N#knEe+zyiX3c>$a8`4bnemHySAf`5Y0k?)pd^L-||!D@N^*L<9TQzlg`t z4}P-ybC-W+)+G3cjealyFNGXM@I$zg8sViVO`*OuF|UR#%({&MAs2i z>vALQ&`*QquR00f*8}H{-G`q8JUi~Q!Mj8t9?+&9X4Cu!51>;ua~nfWR(r1pG6{c# zyjAHFN5nV5e-Bq7To4<7hCw8zKa3bHFHWI4H=8b+j$|u;#+(xxgH`waWPvGDm6xyB zGCTUx3@im0xNO{FBeA3JeH>dBi2``DtTjo!&CktX@rKi{nCd*E>YYygZ%4sg$!pk{ zC&YRhk@jS`q#G!<{_H36CoKCSVGX2683vTkUqAe;st;=GBp|lV@fPZ6tY{OA*3K5F zApDB@L*VcQR1$gM1(Y?|vZ{v*pd-EY_P9bDz(Zo|O8SQvGfgQRE@ptsPua--!Q%O+ zGJtd{Qzp7)9SORh4d>_H1aE$8*biFpf47AhnTtK>LGT6wW)RZ@z0>l5y*W_8V$a$u?H78d zW@bVyiCg7o$C-_lh1G!t)Y4!DDk0$>X*PVaHo0izTbMi(8bf}NHwFZ4K$P%nv`7Z1 znAt0|AnrqF^?I5a0p;gBRi7#5UN~PmhB}Sytr*#+FNYjzg6W{VCkV7|nv6DL)uyMX z*|efX>^mw73H@JlJB?+qW4%vWOKpj=!aSZo!P1S--ju5pPq0KPcZ>^99l)M;3lbr_^dGImT_EA-xlPn@kI~BX~Ck5n=5T*VHrfB%oU6 zO%?Tf92#3pcrJjN zKb}a2e)^Q9S!`Cde*z@y6;_1&j47~q1i-M*R&ZFZ98iLB4T2Thnws{kDem04!{oNF zNWdTTX6gtUHHTf54n0mnLe5-PLMx4#n~80w0?_q}G% zc7z-9UCmco3P+$fcdJ--nbK?E`QqW-`kCJr2r|pzfu7;(u!U51rn;ZBSFuwegzj!H zb*ht&EiQfrFQl_zcYnXe7ljPX{P|455hdNd`RREFn67>0O`spW;Bq!2l0bGa(IzH$ zJPKyMQ6s-&KFG%0aO?W62v*%v2kiV*FELS&C%n14c2jXI9z5QZ^g_*j-ybQaQ6aRd3Ri2#tj@7sRTP(*vnsYczlo z7WOPi-wtUY1`*snNqOoP1J7LdL&Jl%&o`6-FD6}G{_N;)66c1}%%M8eR$8Moh2_kGU;dW0lBcI?;)V>zVv z7v$zD3xwS^-(tU_>y+^gQdFAZ($9TN9Cj=19j=G1MBH1&Bdf2aWvR02n6Sh011YJG z4Np5qB9?nQ?h9KO9!yoihXxp$y<~A zd~*!muj}S+KbS&37BT1MUZV z{xLUoNk2q}YV}ms^i5`CU~PO8Mu?F2LrGk6*SVs)E9dJvEQZ#3C?;|8D$w7 zEg48R47wH&&Xzei?y!Gr5?r2M_sR{0U~BM|3)#&o;6f;u#effhixG4U@8Y8hoqYAs z_&Y~iPZ6iz_DMD7a}hh8yVpp4;qxO8@EJn)>d<0llz>K znTQ5YY4e`E$u%!{K3Z-aKM^Ke|4dAX9$~b~6I=xiXP>gj;oJFe2YPLeQGg?S>FHx4hG9s0|p8WEiYeD^eeSUPe*kDTK z{;t{QUq}*~YiqAA==YoxtgWkK6n0pYnY{>!)y!T~z6xI)A~E1Im96`A9?KmauSgLPB4`S5aJ2n= zUqeU7TD%hzr$)(ScH}x}WySqfn1Y4|OFc>#wII|Sp6{1m&f!J&XF9G*ds9KQG_P^9 zt8uF^+?#&kG-J)i0GRhBmNO31e5PCZI6iV?|fT*QV+fdiO;?}&^|aW_oXH$ z3qJk+{?04U#igZEoSn3^{GLO9;g#2c3c8z+Rqzhp(P>5MP+HFw+!6Ve4oLYEn=enkF0X(&CwoNT4-;}TkS=#wZq>2g( zE6t+lva;ziUSo(&(h{)N--XIr+%0z3widcKa2xdiFpyk!!w^LMFwb=H2l|bT@`$LL zI!e=xZE_OuH1!Pavs6?oHKnbyv$L+b8<9N$nPRxbAVG}l1P~K2T3Iog-Acc6yuL-O zuC`V-S_qdM(bLQ5`v8!)oz_z$?v$HS2 zU1sftGy6Q@&6>7d$Sx`kGSD(~3LPL5N>euPlUuHgmeyW{{|bRTQKi8pl;j;c9lUks>O@hU5TgM+}xNc7b|qmKl0Jg z+`QDO6Oy%1En&B={Px@A!8V3_Faf4mEJhl_@`f~ig5B&~_ekcM)2A~g?Jq)>E1$p( zxUlzeI0pEtDbR+)!`2kEs-h|LD0YdE4X}vd zjYK+=VVg#bqO;L0elZa)EqXf;?2+Pd>>vqcqT^^HG zdf22Py6#4wyO_C5oEQg}hqAcH5jp&`&5LEUk$qnAQ5L#WTbms7d^$wRm(QOqU>vf~ z;Nf*p2x+|J)@{31EhV@~Ih$)a*rS5pn;?4dVERbIj5AWSkAwDRD;y>Hj_hap55T2T-~He_zSTxDWm%=7-lp{PrX= zEd8&$yXVE9fyn>;75eD=(RMzIc=|voJ*xc|RFf~Q3);Hx-sCe(Vh+DS&GL!t=&xr1 z_kL0@yR-65o~`r6RHGq%xgN|_(i&8SUsv%g_O5+<_6jYhCR8D;&gZj=1_V#nv{f6_L%xgKJDLltu4;)oXl#oletR=h?)sIw6 z6&sPLy^5}x(J%4yStnGl<$nG8JG5t9Ufz3N3|EII>jB0X=(#GpW6bmQ< z3IgULpj4GARil8?J5r<4y9l8}Y=EGEfRWyjgkA$AfpA3u=`EB1Axduvy|+2&tXXSj z*8KRswfM)Im6yXlyFB~Z&(=t|U8u!){OT#tgxZ_v-45I(Y*m~vekNMC_3UmNk`wU6 z;3go1-ZebSDT@Y*nZ;Uu7UbY`y&74(5X|5gZfv|M5(K77ueoDab%EfiBG-$&*C#SE zP`jHv53Ye&xlZ|*@l7jLHiIUpV*~I&pcbZ)d?MXc7KfvcVidI3Swi1cHAZ#Jfipl$ zSyCg1j|AI%2`%;a6W5{T}u-pVYu_hQH;X+zW^ubkuL)~bcP#$dJ zb^@X3b8zmftcV1B7E&Ak88?(Dx%l}H^z7&*IM+yv?T$7+H1dY5o905Jk+EsWSe`ha z&3|XrUnCTyMGfmHZGJY=bm|fL6U~TIMrw^iDX5OdYiRt(5R^fN%=4X|SG{p68?>!P z9g5@T{XgLCy3Cq!+kjcrXTgheqS;S(Cugv$12I#P^ZK>1jUz6X9McrT0qvV2Yowz~%cCSx-(NO1voT!<%_KDp=+z zj4t!hGe5&Jiv$q6>LuWrb2i|a_3`LD!uvmltAjFfR?47VNHqiBFtBhYx5w-c(5~Yh zbms+4-9@Nt#nT(~Lfz}Ht z5i~EDPF|^T+N2F#I(K*9ph+&xBRU#9c9D~FcW}q0Ztu3wU@O+wm$jyIEOC9uu$1Uv*U%q0v-H3q~`A~NjTbqcuPXW6d^Za!?kkU(4_$Mv3jDPd>x2p|NFw-m=do!kOiDF&bX z6QKdndg|~E0zkg+0i#WaFoqFwht6@iBr-yVDk}^gxusaRQ2a;(c?nO=pACIU%56L$ zTg)_fJKGM=I9le^oe!C}`y`S|x;bAZ#(y0)J)zXnEY>E1c9u2F&;Vcue!s&X*LtMrPc{>kfZ~zJC1| z;&2ROn=k)T@Z*|_%vQL}(CZg5*Abf(8+3|TwHQUutr zX}N1Hm=KgsD~c>Mb#QWMXs{5M7H5IJRed1e)jQFre)f)zD#>!v=?Dbm zdxLu1MaFKdRg>wqEFBSv8`-Xwk&|{Bl92x=6Em)~`WpB@Fv<_eQj=h1&~(sEx2}JW z6`$crjZG?dX#HHXS2OEIF!>U-TA}c`uMW7|^dN5<*vmGNU-GS^NJLGYl>u7(VPU+R z(zL!XiC95ZB~cfm6wG3G3NiLE0;?V_4 z5z;10Wu>BRA!7I2xe&`!CQA49v!a>*aUNgzF?dZ|04O091}~F%Z2h%&y!H=OD!ePq zt7m5jA6rrVTAcy$aY?Yj`g%0Fdd=QvB+e}I6vT3tdTUBqn4OcjxLi#S7hnz8k5jIjyTp9jc574`+i~TU(D1QpTp{b}G&zNC)$!<4t%UZ=eAo z3IdV1U2$V$d*GphHWQPZSaGgCKhMs1Cs0lVs_bhE-Q(Yz^;>MuPj|rQW*n@ov+Ko< z-6iL@rht*x#lF_X@68B)U4d)-2PvN>#(NF1hA`M-z8G61k6b0(Nj2&m*Ix|h81HbI z2I1f~@-9q94Q^n(ns}P^?{3Gg?jC2GUg1g0{v8Fo6>e6n?Bh=^iBc6w79O!%atWty zB%J%4(`gQydidDcYcwmeLu!~kGEJe(PAllw3Kdn!6?qXFpt!9pW<2~>E@8TeUsAHi z-{Y|~_;*=+Wf$j}VvYMmI~jfspIps*9cPg75b?2`cjlBd-f@(eo?bHJ^BoR(pu`g= zRcR}0n#jW7DJ4ma2-B|Jyo!n_#4^^U5kItW-|icWO#sjij9V5U+3lM&8~G!kY6PXu z4iGBP3otbW*!cxcc4GsBYj0<|GVV`o12F)w0aUfgXdgD`EhVgR(tW@2EKtstlf$FV zR(VqnQWbDukZx}T`vWjPEO8SvgDv$V=68(1O#&hcu`#j1%mi}4v+*%77W+Ot9D2Bu z@9zyWL@>}1(?z`%Eo$*2*jPUyMaz@t&%1X3k-r9#2^L81KQuP>?n}hDwI{E)%-qWF zF96ydBHMK)B&5OD-`+!p!4Z1cA*;#J#GfQr?hBYRdNaR1xG6~QYcjKN2dI2DGL3 zF0-WN<#wZMvnIEKQa-FzbT;wV9W-o&ts=0g*)0r4Hq%BM!$sf*sEILg`i&8rd8Ax8 z^4PBBIiV{?kr(4f0Ptk7ud=50w&!3+*m6b`B@hz*WLu4H$RR+rO*)$fA z_ALW`rI?7XudUVB^Y#~*8TT>i{XYDM<^pz{kOw{F-TV7P6s^t|@DiVl_q}1O(nFZC zPpvl1vnDOJ^ufw4?Am6B@mWvZRlkj$*urfrzj)zYapnBa=p@)Bgg|*%P6#HU8;AYY zYHBJaj@J9i$9JfaC?qI&9tt8tsk80%x9@g$({ekM8w}+T>4KP~aJZ*uj#lc*_G@}A z7t^@HPtDe{vZi7ifnO;cZu66ZZF*r3{;3ZM?1pDahDW4 zmwq-eTu0&EqyeA9W$sf#ImL3DoEN2(jFJ!U>+g4+pOT_RYx^YzwBJ^ckGIRa$3EQe*djkE+Ykvpuuu>YQG?h5ES< zxwU)$8UNX})GLEu)Xnh356+MW^(k#E(TAgUYb%9vl2?k1csR0)%}8!|HbCp}h0}=b zO?InMX063*YfCj=`?v@U{4{408xZL1?{8FT1c0!O+cprC1-mvG82lk`tKtSq$L|3J zDo?mOXexp(m|JHmEBASTuil&FFlLW4Tdo4Uk55*ZlG0nZC5XMd0(84uo)Ho6cgL5W zre^;oZ#U;WJx-lOCMVZWr_%uQ*sRj?x*5#C{920*IZ4`0p)k}|Gs)KaK%8Wjp<`{m zC%23rQvfl{{&AaT>Q3>5p=4e$>T`~YM!?*tejM_Uj~w{KwtzA)JPS2{;gDOOM^f^> z+V8N^+3TBHNvHwtavz5S!7jtR?MDkM6wqis&X_guec?YLEB7XAV1beR;(BID^|fnr zpP7Ng>nEnFC=ny!JNvJgGclUtlbN>TO>Rh27PcIu0@7kW7wEA#jJ<8*=Q+nCB_Sp1 zN(x8DiNYeouq*2^UtnS;dX<%V)Fs?P2nMNH}hSkjceB$P~^S1TtVZOz1 zCE#~$J?-V6LTbQQ1Gw#ok@sz`*``@u1oKmhMSpO*IF);9RNd4OT z4Ky#A80Z<&>YhJs@TOQqhTRx8SpMw;h1-)jIOZJkvxS%hoFLy*S>gzT0S4Q!#~PU$ z{C~+-5uyVYhbRt4?Psb2rM$=^zbp?ozvrL|#TJ)HgJUs0%lop0hm?0nj}XG0f+Q%U zqlu4#i1${MYQAeczssZ|oN#Lf)!C>qLm|~-kj(!Sr=v?%vKEyt-6}Blhdc;+8jTG* znA;3NHY_sk`OJ*GNe<8!NLoMSEZrX0Ei6dNooLm4QE@BZx)pGGfGiJ7Qc4v$7rfWWgqbU{IULio;so+77dYxylBMS6<)&aXFg7Kg zH?Cjr>h3nFenNQj=39?VE9hd3&r7=nV4nn$64*fBX_S!SCd~u-Q5*;zx^;DMQvs<5 zG<0ffTZ=v2y@EDVyaDrqUBogbC1sT)zytb0HrBQWo1is#;>6#7@0GasO1FLnU6Gyj z1(V9$KSujperS+b6U)ZdxY4djvzuN#jWw@ad19~e=n?RtSmtMa9bF)5Z+zyjY}XY1 zzVDyb0gkww`g~%@A|p3})Uh$e?NV_1y_#2AP4%Jkr;5^TWE!^GBQe2nL2&q=ck@LeU|Pa zcVykw*%cv_s2F^fA)i?b=sC5uA7T&TkGEJ{(=1f-!wP=t_NCs?J7i^JBkb%uImzCOh9K=MCU zv92gE2e}~{RG1s>x;X2!!pP_}SZK~Kx799TK^17bAU58&owi+%@vkb}DFA&hLD?N2 zosW@`UZh;eQDur&IF^!PM3q4<-!vu%6WM!1b}k}6S?r9j35hS@fIIga7ro^Puw<9;;G6AqV>f~T5#uH zdWkdKK0NBxbSBYgg*bebnnt_4|DA)C_D@@%KCCg^*^UY)S{U#D6W6>3#|Uejz2ed~ z!c`bBgdz6z7x-5Ffr!!U&LSG%N9AvyJUp|*um9A0{a-Lxkzn>S(9uXvUKkRhfBE<1 zgJIX*{4gU+SId+>a7sEZSnM5ev*(KbGBgS{Sm5ch104>GF(cinA-uP@G=;`0 zv9vtv_4D6RppPsobPAL`eqPj(?ks<8xbZ7N(8ovx95%qWGpTZwwEJ+3ID!<415}#s zoCpsJLCmPDt)b6l0(}c4Sr^Z98`)vNks3UL2JEfPx&i&mTG?4ReBiZUELh1BpOhrT zUSFRj==$IJa=VygKB=Ukp$IPNU*DLNay7=mSGa5i0cO6li!sRfb($NbE`P$ z?jDCvEcB64nO3f3U2jNdhE(O$n}Ff<#i^Vj*Uc1Mh4i%@KRuiyzEHjBTswoe8>MO3 zgd9vq$8qiVncM~)dyiGb!TCgByXZW1X}$i1bJzfJWpc3mG`M1#mluY+bCuiijQE%m z*MV8i=Cd+Pant=hFNU7Ls*FC*iT+L3_3uZ}o)cUeUS6f_2kDUwAO3K9gNp~q`RSLJzmr~{w*N$zj^3PcNf0KeQ&Z{Wy`{_LlI48RQYUTLFVGEnfr){t6+jbdAp zWPP!p8*F8DIS?h9SDEcMhNozcBI2cOo=d~o|Dv<^nW(S$4FXHZo1IJLyO7^d^b;+K zhvqFeBI{CoEO|?ND!-jKJEs_m`g)8Gqbb^xdDPTMe|0LnX5-s|_*@YbcZ8|w*lQq1 z%cc$17Voh;=BDn9hwj_G{--z>c%{3?d5?N!FHi7G*FB%yU;!VQGuq=$4pPF$MCj9O z3O}}KSFTjC06+@d7P_vFM~7foKKYaMAryP`@CswN6c1y*^|&TO2V2~yen*9MRTU%A zRWx`E3Xn&GuWyoTD3NK#-mJ{fcl(ey;KCKkO+YgF&90buPhq{ut*KM#N3*^+D|n0h z_sPJtIbxJLEdlw_pr`L+Dph5T_T;JK)wnQ!rWczb=A!{u&G{7Krhi#0z)Q5%o%BW8 z8<{*#L&X}!27R*qEJRWjyN260#@7)iR4t8NqWdRCOC^WY-1MlNTd#FEOC7P0TM&y&ZI&#%TB4&EY=?_d4jhIFC>IN-di z*XDB6c4ikGcl%ojAfFk(&?`#Tkd*534b+K)C=BOjudWB9R+04~0thzUYDV4j@ z15uV#{d>C>?=8=oC}lY>w}qJ01>U;1Eel{_t)Qo__Y`op>z-@nh)8{1X|NQw^i_vI ztmShjlKg&9M+4^#=sR}2Y@J+AoSLlh9mD;5^mGqjg%lQA-TQj~=q}pRfjB5et}cuz z`s+7jbtbY#(Yx;$#73m<2OaxkT!c#EHZ0 zMSit`mA^_Do%F+!sus!qAA5-p7ah*JqLdzL`KQN}j$RtGdYXq=R%w}sIkQ83WK6`8 zBnRvC=Rp~on~mthd5(Ko-ph#moP#?JES;_mcpU?=;Q&n!*oO z=-Qh7`cAs2)Rf9?tnfDN4KQab78-5q#WN$`F@gA?YgDEQXihP?LXRIQn*G_uvkA%SFeC{r~(!3TNJQ1?W0 z1Q*y@_~lEU-*Gzmruchj>CgqlGst!k*$Zq*DVyl5^7f73al5F6gjiU0z;3QfC~q)x zZ|LrjN#fgvYbxLOTo6EZ26LyQj zMmsTq(bksrRp<4=x1(L}mzQr`X3IGtM@U}Uo?s`NN>NHS7eL+ueP_(zL%(4k7rQxA ztbU3y_)_nHc)I@l|BVz~pR41^@YR3wx;}IK{6H}Cet)!r!>es7U-Iy}6y@fsUz+?h4FKm28!*5Ilc9UY^~5f^~@S-+5iIhSx| zG36Zgd2icew--;?A>YLjUlVnH@fg$nyBguqK=-nxr2~6bnX}{7x79uhUo=mPA4Wz3Xt>{2<;Etr ziUodu-Rw9#QDW3{ZI9F%#t|{0ZhK~K#(8z{E>Drd+6Fq6%2l}IC$|mvJcCc(THa9t zH+t7kj+Kp7jKr2~rZY1-G#3F;46I2W-E~bX#=l9`iY+twdf%_I^*=!%9?1T^j_lw% zMu<_z4V?foe5Y& zKQ^RTYgsBQg)^p&3_lbV61`D-xO92bi`Lg&imsjj&NMkna|7=Ecx~z>VN{EAGgMN% zA3Q}4xVabLyfWf`U}URe+vu0Ib(R#_tt3DVSgP-3}+tT_)fe+e$ee|vpnf7FuDM7)a%%W0G@ z{|iv*IPHyd4`N~vv<3?UgMZ$3^}6;ne^CaYbJ@HP59V&31P3aRE$Qq2dyCw9uf<8N!vLgIOw~j_&T$APO&rv znL8r$J?(Ofh$^Mx^pe|kSLx_55l4xJa3GaGZ_crCiPm^x=skjQl;=XZ(ly(jyNk`Q zEN~SVv%2ZFq;CO|k{nzoBOX0M$n4N-^9H&=9t5bVJe%8Rn`-15dW;mj7~0v$2$A4u z4rZ?7i4v6KP25DI_pWE{_*GUqc**Ycm%eiXfFcHf~=-D zbpL=>b?kO~r$CT`A0eRS0~VQ=Uq~V#C&?ccfaig}t7y9dd7J7L3&I4zR|4bBm@g+8 z1byn4YPVdN8!66z|6+L&&lIk%HhCKY6arIF`Gvj$;~6Wp0G4S40rndY^@zayJK+J?RZSVMO^`DuR@ez$Hv zaD?IjVhFwx<3A<#m_=}JoRQ9l;12j+Iwt3gG!6UuewCMs6edM34m7v+ZRqNj#ug_0 zMm=DUs*?`UXe7MX&5k}XX--H?#gJeF`!RW-D7u3)oqiUJbn^OJ`RFjIeT{7ov@@8g zS46VLVo+jaL#Y-q)z00Ds>L1vAEK-PLO_bYJnQI`icbV==OEe+fP{gktqN5YvI=w& zFk5ZpSm~3yzseZS;Uuwh@a8-)GXU;)hzZ}8?uPA;mVmgZxO$(g)fuj-;Q=q%f`6?B zwqLZt*0Mfupj9O$UUo~`(KZ`JdVF71T^u5*51fe5ye+G%AxXQ^aoRyl+Duzu9>)H` z|D*mBH-}7sFia=pM@h<^_qA$!&&94W>#cC37Jj;1C1RrKpQ2L`PmCn_iZCICH6Cg9 z#KH07Ci?oEUpRB-7_5ZfV5^ChZYf|K&=}IoJS!xIE6emA84sUREh4ifCMHmw-Dus7 zIIzZWv-!PHWg71A=Hfus^eQ(i+zZo3?0To&46gIyY`5A;_wA{a>v zpO(H6$~U11jf;P|~|hOoPyf{a{Abdo9}*6|{$c&{n) zWd&p1h30cwV$ok1l>^iocN7pdlNZ;PoF}QaoCpDr_6{9nK*SLgu=JQ8^43tC*GZfg z`2l|TbQEAUMc+}TQj*S;7QGB+L^3unfZNbl2*I>H-exGGd3LeVOOr!d_PMNz?|8-J zu(pM^+G1BD&U;!4OCOxH844N`N3OZDvarDCF*w8+YfDQ4J^i8iBUZM9w*uOrqMRDA ziq7{=*7Igvj|+{(WE552u0lxL*$c$6&3heU+!2pO&Po%~2C`pS2)UMf8UFwc(LTLn z>-`l^$*@yP21hBpUweKzeuZBADF0u2U9~!t0{Oz&P@bgLQ;|UiA@szibAC5E8lN?} zAL`q({S7k_ELwzg;KdjS$2D6nc^Un#1CB^8F9mP*^j@Yd0(!<=v4Vi;7n>L6v;=YcaRur<{UIQMbb%J26Gd3%%z zn8Gmq#?ofZM=vjaErdhbH_w;O?kobMgu`CnRLjOjA7o+LLo;gE~XZ4B6LM zpfogOY~w6YZr4!x**7sBP7ZfmN{Y>d)PEPC=sz~XggpK9m+oBQ3A(PkTzCB8o4GUb zX5K`LA0Ft4!tJXRuYEi=w{jR%vDC9+gjC|o^3weKt6#~(o4>lh)4gr>rF)CfZl)5HkPv+#w)Bpjw zw1lwexps>yiTOv+8!_w;szsNro*M6C@n3jG@}C8x{~z#3^KX>1z0cwg=hpFG?Ee^< cTtB2sa~stUxoNxskT1GN%32SKpif@^2O*%{YybcN literal 0 HcmV?d00001 diff --git a/settings_manager.py b/settings_manager.py index 5b8babf..f2b8ec3 100644 --- a/settings_manager.py +++ b/settings_manager.py @@ -1,132 +1,32 @@ - +''' + ,=================================================. + | SETTINGS MANAGER v1.0 BETA | + |-------------------------------------------------| + | By. Sergio Silvestri github.com/neocronos666/ | + |-------------------------------------------------| + | A simple, Single-page, settings front script | + | *** to work need backend GlobalCfg *** | + '-------------------------------------------------' +''' import logging as lg import flet as ft from components.global_cfg import GlobalCfg -class SettingsManager(ft.Column): - def __init__(self, backlink=None): - super().__init__() - +import subprocess +import sys +class SettingsManager: + def __init__(self): self.g_c = GlobalCfg() self.settings = [] self.temp_settings = {} - self.g_c.setup_logging() - self.back_link = backlink - - #self.run_gui(self.back_link) - - self.controls = [ - self.build_all(self.back_link) - ] - -#-------------------------------BUILD ALL------------------------------------------------------------ - def build_all(self, back_link): - - #---METODOS DE BUILD ALL------------ - - def save_settings(e): - """Guardar las configuraciones y cerrar la aplicaci贸n.""" - if self.temp_settings: - self.g_c.save_settings(self.temp_settings) - update_list_view() - - def build_param_list(): - controls = [] - self.settings = self.temp_settings if self.temp_settings else self.g_c.load_settings() - for key, value in self.settings.items(): - controls.append(ft.Row([ - ft.TextField(value=key, expand=1, read_only=True), - ft.TextField(value=str(value), expand=2, on_change=lambda e: update_temp_settings(key, e.control.value)), - ft.IconButton(ft.icons.DELETE, on_click=lambda e: delete_setting(key)) - ])) - return controls - - def update_temp_settings(key, value): - """Actualizar la configuraci贸n temporalmente antes de guardarla.""" - self.temp_settings = {} - self.temp_settings = self.settings.copy() - self.temp_settings[key] = value - - def delete_setting(key): - """Eliminar una configuraci贸n.""" - if not self.temp_settings: self.temp_settings = self.settings.copy() - if key in self.temp_settings: - del self.temp_settings[key] - update_list_view() - - def update_list_view(): - """Actualizar la vista de la lista de configuraciones.""" - self.settings=self.temp_settings - self.list_view.page.clean() - settings_page(self.list_view.page) - - def add_setting(self): - """Agregar una nueva configuraci贸n a la lista.""" - new_key = self.page.controls[1].controls[0].value - new_value = self.page.controls[1].controls[1].value - if new_key and new_value: - self.page.controls[1].controls[0].value = "" - self.page.controls[1].controls[1].value = "" - update_temp_settings(new_key,new_value) - update_list_view() - - def build_settings_page(): - # page.title = "Settings Manager - [open CHEATSHEET pre-Alpha]" - # page.horizontal_alignment = ft.CrossAxisAlignment.CENTER - # page.vertical_alignment = ft.MainAxisAlignment.CENTER - # page.vertical_alignment = ft.MainAxisAlignment.START - - # Lista de configuraciones - self.list_view = ft.Column(controls=build_param_list(), expand=1) - - # Entradas para nuevas configuraciones - self.new_key_input = ft.TextField(label="New Key", expand=1) - self.new_value_input = ft.TextField(label="New Value", expand=2) - - # Bot贸n para agregar una nueva configuraci贸n - self.add_button = ft.FilledButton(text="Add Setting", on_click=add_setting) - - # Bot贸n para guardar las configuraciones y cerrar la ventana - self.save_button = ft.FilledButton(text="Save Settings", on_click=save_settings) - return [ - self.list_view, - ft.Row([self.new_key_input, self.new_value_input, self.add_button], expand=0), - self.save_button - ] - - # Layout principal-------------ESTO DEBE DEVOLVER BUILD ALL - ''' - page.add( - self.list_view, - ft.Row([self.new_key_input, self.new_value_input, self.add_button], expand=0), - self.save_button - ) - ''' - - - - #---CODIGO DE BUILD ALL---------------- - - settings_view = ft.Column() - # settings_view.controls.append(build_param_list()) - settings_view.controls.append(build_settings_page()) - - - - return settings_view - - - -#----------------------RUN GUI-------------------------------- - def run_gui(self,nav_link=None):# Deberia llamarse BUILD y extender a column? + self.g_c.setup_logging() +#------------------------------------------------------------------------------------------- + def run_gui(self):# Deberia llamarse BUILD y extender a column? """Ejecutar la interfaz gr谩fica para editar configuraciones.""" temp_settings = {} temp_settings = self.settings new_key_input = None new_value_input = None - # gui = ft.Column - - # INDENTACION def build_controls():# [FUNCIONANDO] No Tocar!!! """Construir controles de la lista de configuraciones.""" @@ -173,13 +73,16 @@ def save_settings(e):# [FUNCIONA] queda a la espera de implementacion de boton b """Guardar las configuraciones y cerrar la aplicaci贸n.""" if self.temp_settings: self.g_c.save_settings(self.temp_settings) - update_list_view() + update_list_view() + def cancel_settings(self,e=None): + subprocess.Popen([sys.executable, 'main.py']) + self.page.window.close() + self.page.update() + # --------------Crear la ventana de Flet------------ESTO SE VA PARA MAIN------------------------------------------- - - def settings_page(page: ft.Page): - page.title = "Settings Manager - [open CHEATSHEET pre-Alpha]" + page.title = "Settings Manager" page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.vertical_alignment = ft.MainAxisAlignment.CENTER #page.vertical_alignment = ft.MainAxisAlignment.START @@ -196,19 +99,17 @@ def settings_page(page: ft.Page): # Bot贸n para guardar las configuraciones y cerrar la ventana self.save_button = ft.FilledButton(text="Save Settings", on_click=save_settings) + self.cancel_button = ft.FilledButton(text="Close", on_click=cancel_settings) # Layout principal page.add( self.list_view, ft.Row([self.new_key_input, self.new_value_input, self.add_button], expand=0), - self.save_button + ft.Row([self.save_button, self.cancel_button],alignment=ft.MainAxisAlignment.CENTER) ) # Mostrar la ventana - # ft.app(target=settings_page) - # update_list_view() - # return gui - + ft.app(target=settings_page) # C贸digo para ejecutar la ventana si este archivo se ejecuta directamente if __name__ == "__main__":