From df7fa83eefcdb1ee3c9e0545409fddaac13bfe90 Mon Sep 17 00:00:00 2001
From: Lixkote <95425619+Lixkote@users.noreply.github.com>
Date: Mon, 5 Aug 2024 19:42:26 +0200
Subject: [PATCH] 0.2
- Better explained error messages
- Fully automatic generation of required config files
- Ability to define start button tooltip name manually in Settings.cfg
- Added Segoe Fluent Icons missing notice
---
BackEnd/App.xaml.cs | 40 ++--
BackEnd/Helpers/WinButtonHook.cs | 29 ++-
BackEnd/StartMenuVariants/StartMenu10.xaml | 22 ---
BackEnd/StartMenuVariants/StartMenu10.xaml.cs | 187 ------------------
BackEnd/StartMenuVariants/StartMenu11.xaml.cs | 50 ++++-
.../Interface/StartMenu10/Pages/AppList.xaml | 14 --
.../StartMenu10/Pages/AppList.xaml.cs | 30 ---
.../Interface/StartMenu10/Pages/Tiles.xaml | 14 --
.../Interface/StartMenu10/Pages/Tiles.xaml.cs | 30 ---
.../StartMenu10/Pages/TilesAppList.xaml | 14 --
.../StartMenu10/Pages/TilesAppList.xaml.cs | 30 ---
FrontEnd/Interface/StartMenu10/StartMenu.xaml | 131 ------------
.../Interface/StartMenu10/StartMenu.xaml.cs | 31 ---
FrontEnd/Interface/StartMenu11/StartMenu.xaml | 6 +-
FrontEnd/StartifyFrontend.csproj | 32 +--
README.md | 28 ++-
STInstallerBuilder/EULA.rtf | Bin 1040 -> 1040 bytes
STInstallerBuilder/setup.iss | 3 +-
tempfix.png | Bin 0 -> 30977 bytes
19 files changed, 109 insertions(+), 582 deletions(-)
delete mode 100644 BackEnd/StartMenuVariants/StartMenu10.xaml
delete mode 100644 BackEnd/StartMenuVariants/StartMenu10.xaml.cs
delete mode 100644 FrontEnd/Interface/StartMenu10/Pages/AppList.xaml
delete mode 100644 FrontEnd/Interface/StartMenu10/Pages/AppList.xaml.cs
delete mode 100644 FrontEnd/Interface/StartMenu10/Pages/Tiles.xaml
delete mode 100644 FrontEnd/Interface/StartMenu10/Pages/Tiles.xaml.cs
delete mode 100644 FrontEnd/Interface/StartMenu10/Pages/TilesAppList.xaml
delete mode 100644 FrontEnd/Interface/StartMenu10/Pages/TilesAppList.xaml.cs
delete mode 100644 FrontEnd/Interface/StartMenu10/StartMenu.xaml
delete mode 100644 FrontEnd/Interface/StartMenu10/StartMenu.xaml.cs
create mode 100644 tempfix.png
diff --git a/BackEnd/App.xaml.cs b/BackEnd/App.xaml.cs
index 98ee21b..f4e020c 100644
--- a/BackEnd/App.xaml.cs
+++ b/BackEnd/App.xaml.cs
@@ -14,6 +14,8 @@
using System.Threading.Tasks;
using System.Windows.Input;
using WPF.Views;
+using System.Windows.Media;
+using System.Drawing;
namespace WPF
{
@@ -128,24 +130,30 @@ public async Task LockAsync()
}
-
+ private bool IsFontInstalled(string fontName)
+ {
+ using (var testFont = new Font(fontName, 8))
+ {
+ return 0 == string.Compare(
+ fontName,
+ testFont.Name,
+ StringComparison.InvariantCultureIgnoreCase);
+ }
+ }
public void Application_Startup(object sender, StartupEventArgs e)
{
+ if (!IsFontInstalled("Segoe Fluent Icons"))
+ {
+ ModernWpf.MessageBox.Show("We detected that you are missing the Segoe Fluent Icons font. Please download and install it to make icons display correctly.", "Warning", MessageBoxButton.OK, SymbolGlyph.Font, MessageBoxResult.OK);
+ }
+
+ // Create the startup window
+ StartMenu11 menuwindow = new StartMenu11();
+ menuwindow.Show();
/////////////////////////////////////////////
/// Here we load the main configuration file and set the hooking method from it.
/////////////////////////////////////////////
-
- try
- {
- StartListener = new WinButtonHook();
- StartListener.StartTriggered += OnStartTriggered;
- StartListener.FindAndActivateWindow();
- }
- catch (Exception ex)
- {
- MessageBox.Show("Error reading configuration file: " + ex.Message);
- }
StartListener = new WinButtonHook();
StartListener.StartTriggered += OnStartTriggered;
StartListener.FindAndActivateWindow();
@@ -161,10 +169,6 @@ public void Application_Startup(object sender, StartupEventArgs e)
ThemeListener.Start();
TileAppHelper.CouldNotLoadTiles += FailedToLoadTiles;
-
- // Create the startup window
- StartMenu11 menuwindow = new StartMenu11();
- menuwindow.Show();
}
public void OnStartTriggered(object sender, EventArgs e)
@@ -198,7 +202,7 @@ public async void ShowStolenTiles()
new ToastContentBuilder()
.AddInlineImage(new Uri(uriString))
.AddText("Tiles disabled.")
- .AddText("We could not find or load the tiles layout file.")
+ .AddText("Tiles were disabled, could not find or load the tiles layout file.")
.Show();
}
@@ -228,7 +232,7 @@ public async void ShowNotification()
new ToastContentBuilder()
.AddInlineImage(new Uri(uriString))
.AddText("Welcome to Startify")
- .AddText("Check it out by clicking the Windows Start button!")
+ .AddText("Open it by clicking the Windows Start button!")
.Show();
}
diff --git a/BackEnd/Helpers/WinButtonHook.cs b/BackEnd/Helpers/WinButtonHook.cs
index 10b03a7..1fd524a 100644
--- a/BackEnd/Helpers/WinButtonHook.cs
+++ b/BackEnd/Helpers/WinButtonHook.cs
@@ -74,10 +74,29 @@ public static IntPtr FindWindowByCaptionAndClass(string caption, string classNam
return IntPtr.Zero; // Window not found
}
+ private static string GetConfigFileEntry(string filePath, string entry)
+ {
+ /////////////////////////////////////////////
+ /// Config file helper.
+ /////////////////////////////////////////////
+ foreach (string line in System.IO.File.ReadLines(filePath))
+ {
+ string[] keyValue = line.Split('=');
+ if (keyValue.Length == 2 && keyValue[0].Trim() == entry)
+ {
+ return keyValue[1].Trim();
+ }
+ }
+
+ return string.Empty;
+ }
+
+ public string configFilePath = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Startify", "Settings.cfg");
+
public void FindAndActivateWindow()
{
- string caption = "Start";
- string className = "Start";
+ string caption = GetConfigFileEntry(configFilePath, "TooltipCaption");
+ string className = GetConfigFileEntry(configFilePath, "TooltipName");
IntPtr windowHandle = FindWindowByCaptionAndClass(caption, className);
@@ -91,7 +110,7 @@ public void FindAndActivateWindow()
}
else
{
- ModernWpf.MessageBox.Show("Startify had an issue hooking the windows start button, and might not work properly.", "Startify Standard Hooking Error", MessageBoxButton.OK, SymbolGlyph.Error, MessageBoxResult.OK);
+ ModernWpf.MessageBox.Show("Startify could not find the start button tooltip to hook into. Verify you have set the tooltip name correctly in the Settings.cfg file.", "Warning", MessageBoxButton.OK, SymbolGlyph.Warning, MessageBoxResult.OK);
}
}
@@ -114,7 +133,7 @@ public void FindAndCloseW11StartWindow()
{
if (shownerrorbefore == false)
{
- ModernWpf.MessageBox.Show("Startify had an issue closing the windows start menu, and might not work properly. This might also mean that user is using another Windows 11 Shell replacement app like StartAllBack or ExplorerPatcher.", "Startify Standard Hooking Warning", MessageBoxButton.OK, SymbolGlyph.Warning, MessageBoxResult.OK);
+ ModernWpf.MessageBox.Show("Startify could not find the Windows 11 Start menu host window. This might be caused by using another shell replacement app like StartAllBack or ExplorerPatcher. If you are using StartAllBack, change the start menu type to default in its settings. If you are using ExplorerPatcher, please change the start menu type to Windows 11 in its settings.", "Warning", MessageBoxButton.OK, SymbolGlyph.Warning, MessageBoxResult.OK);
}
}
}
@@ -142,7 +161,7 @@ public int MouseEvents(int code, IntPtr wParam, IntPtr lParam, EventHandler star
GetClassName(win, className, className.Capacity);
string win32ClassName = className.ToString();
- if (win32ClassName == "Start")
+ if (win32ClassName == GetConfigFileEntry(configFilePath, "TooltipName"))
{
StartTriggered(this, null);
return 1;
diff --git a/BackEnd/StartMenuVariants/StartMenu10.xaml b/BackEnd/StartMenuVariants/StartMenu10.xaml
deleted file mode 100644
index 428cc7b..0000000
--- a/BackEnd/StartMenuVariants/StartMenu10.xaml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
diff --git a/BackEnd/StartMenuVariants/StartMenu10.xaml.cs b/BackEnd/StartMenuVariants/StartMenu10.xaml.cs
deleted file mode 100644
index a4bab11..0000000
--- a/BackEnd/StartMenuVariants/StartMenu10.xaml.cs
+++ /dev/null
@@ -1,187 +0,0 @@
-using Microsoft.Win32;
-using ModernWpf;
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using System.Runtime.InteropServices;
-using System.Security.Policy;
-using System.Text.RegularExpressions;
-using System.Threading;
-using System.Threading.Tasks;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Forms;
-using System.Windows.Input;
-using System.Windows.Media.Animation;
-using System.Windows.Media.Effects;
-using System.Xml;
-using Windows.ApplicationModel;
-using Windows.ApplicationModel.Core;
-using Windows.Management.Deployment;
-using Windows.System;
-using Windows.UI.Notifications;
-using Windows.UI.Xaml.Controls;
-using Windows.UI.Xaml.Media;
-using WPF.Helpers;
-using static System.Windows.Forms.LinkLabel;
-using static System.Windows.Forms.VisualStyles.VisualStyleElement;
-using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window;
-using File = System.IO.File;
-using MessageBox = ModernWpf.MessageBox;
-using Tile = WPF.Helpers.Tile;
-using Window = System.Windows.Window;
-
-namespace WPF.Views
-{
-
- public partial class StartMenu10 : Window
- {
- Helpers.WinButtonHook StartListener;
- Helpers.RegistryMonitor AccentListener;
- Helpers.RegistryMonitor ThemeListener;
- public bool applistwasloaded = false;
-
- ObservableCollection Programs = new ObservableCollection();
- ObservableCollection Pinned = new ObservableCollection();
-
-
- private static string GetHookingMethod(string filePath)
- {
- foreach (string line in System.IO.File.ReadLines(filePath))
- {
- string[] keyValue = line.Split('=');
- if (keyValue.Length == 2 && keyValue[0].Trim() == "HookingMethod")
- {
- return keyValue[1].Trim();
- }
- }
-
- return string.Empty;
- }
- private async void StartMenuActivated(object sender, EventArgs e)
- {
- Show();
- // var startPlaceholder = StartMenuIslandhCompact.Child as Shell.Interface.StartMenuCompact.StartMenuCompact;
- // Task animationTask = startPlaceholder.StartOpenStartAnimation();
- // await animationTask; // wait for the animation task to finish
- this.Focus();
- }
-
- private async void StartMenuDeactivated(object sender, EventArgs e)
- {
- // var startPlaceholder = StartMenuIslandhCompact.Child as Shell.Interface.StartMenuCompact.StartMenuCompact;
- // Task animationTask = startPlaceholder.StartCloseStartAnimation();
- // await animationTask; // wait for the animation task to finish
- Hide();
- }
- public void AlignStartifyWithTaskbar(Window window)
- {
- try
- {
- //Align the start menu with taskbar alignment (center or left)
- RegistryKey alignkey = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced");
-
- int alignvalue = (int)alignkey.GetValue("TaskbarAl");
-
- if (alignvalue.ToString() == "0")
- {
- var desktopWorkingArea = SystemParameters.WorkArea;
- window.Left = 0;
- window.Top = desktopWorkingArea.Bottom - window.Height;
- }
- else if (alignvalue.ToString() == "1")
- {
- // Calculate the screen center coordinates
- double screenWidth = SystemParameters.PrimaryScreenWidth;
- double screenHeight = SystemParameters.PrimaryScreenHeight;
- var desktopWorkingArea = SystemParameters.WorkArea;
- double windowWidth = window.Width;
- double windowHeight = window.Height;
-
- double left = (screenWidth - windowWidth) / 2;
-
- // Set the window position to the center of the screen
- window.Left = left;
- window.Top = desktopWorkingArea.Bottom - window.Height;
- }
- }
- catch (Exception ex)
- {
- ModernWpf.MessageBox.Show("Startify has issues reading the taskbar alignment registry key. The default(left) alignment will be used. Error code: " + ex.ToString(), "Startify Backend Error", MessageBoxButton.OK, SymbolGlyph.Error, MessageBoxResult.OK);
- }
- }
- public StartMenu10()
- {
- // Initialize Startify
- InitializeComponent();
- string configFilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Startify", "settings.cfg");
-
- try
- {
- if (File.Exists(configFilePath))
- {
- string hookingMethod = GetHookingMethod(configFilePath);
-
- switch (hookingMethod.ToUpperInvariant())
- {
- case "AHK":
- ModernWpf.MessageBox.Show("AutoHotKey Start Button Hooking Method Selected. Note: This mode is prototype and might misbehave or not work at all. Check Startify Documentation before using this.", "Startify Prototype Features", MessageBoxButton.OK, SymbolGlyph.Construction, MessageBoxResult.OK);
- break;
-
- case "Standard":
- StartListener = new WinButtonHook();
- StartListener.StartTriggered += OnStartTriggered;
- StartListener.FindAndActivateWindow();
- break;
-
- default:
- ModernWpf.MessageBox.Show("Invalid Start Button hooking method specified. Default(Standard) type will be used.", "Startify Misconfiguration Detected", MessageBoxButton.OK, SymbolGlyph.Warning, MessageBoxResult.OK);
- StartListener = new WinButtonHook();
- StartListener.StartTriggered += OnStartTriggered;
- StartListener.FindAndActivateWindow();
- break;
- }
- }
- else
- {
- MessageBox.Show("Configuration file not found: " + configFilePath);
- }
- }
- catch (Exception ex)
- {
- MessageBox.Show("Error reading configuration file: " + ex.Message);
- }
- async void OnStartTriggered(object sender, EventArgs e)
- {
- var newVisibility = Visibility == Visibility.Visible ? Visibility.Hidden : Visibility.Visible;
-
- if (newVisibility == Visibility.Hidden)
- {
- var startPlaceholder = StartMenuIslandhCompact.Child as Shell.Interface.StartMenuCompact.StartMenuCompact;
- // Task animationTask = startPlaceholder.StartCloseStartAnimation();
- // await animationTask; // Wait for the animation task to finish
- Hide(); // Hide the window
- }
-
- Visibility = newVisibility;
-
- if (Visibility == Visibility.Visible)
- {
- Show();
- WindowActivator.ActivateWindow(new System.Windows.Interop.WindowInteropHelper(StartMenu10Host).Handle);
- this.Focus();
- }
- }
- // Do this so the app wont wait for user start button press on startup.
- Show();
- Hide();
- AlignStartifyWithTaskbar(this);
- }
- }
-}
diff --git a/BackEnd/StartMenuVariants/StartMenu11.xaml.cs b/BackEnd/StartMenuVariants/StartMenu11.xaml.cs
index 43d3229..9951ceb 100644
--- a/BackEnd/StartMenuVariants/StartMenu11.xaml.cs
+++ b/BackEnd/StartMenuVariants/StartMenu11.xaml.cs
@@ -65,12 +65,13 @@ public partial class StartMenu11 : System.Windows.Window
[DllImport("user32.dll")]
static extern byte MapVirtualKey(byte wCode, int wMap);
App Engine = App.Current as App;
+ string configFilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Startify", "Settings.cfg");
////////////////////////////////////////////////////////////////////////////
// Custom Items under this comment, specific for this start menu type
// So like, this start menu uses tiles, so here will be the tile specific stuff
////////////////////////////////////////////////////////////////////////////
-
+
private void DisableTiles(object sender, EventArgs e)
{
var startPlaceholder = StartMenuIslandh.Child as Shell.Interface.StartMenu11.StartMenu;
@@ -250,9 +251,53 @@ group p by char.IsDigit(p.Alph[0]) ? "#" : p.Alph into g
LoadTiles();
ThemingSetup();
Engine.ShowNotification();
- ApplySettings(startPlaceholder);
+ if (!File.Exists(configFilePath))
+ {
+ try
+ {
+ // Ensure the directory exists
+ string directoryPath = Path.GetDirectoryName(configFilePath);
+ if (!Directory.Exists(directoryPath))
+ {
+ Directory.CreateDirectory(directoryPath);
+ }
+
+ // Template content
+ string templateContent = "DockedDesign=false\n" +
+ "DisplayTiles=true\n" +
+ "ShowSettingsButton=true\n" +
+ "ShowExplorerButton=true\n" +
+ "ShowDocumentsButton=true\n" +
+ "ShowDownloadsButton=true\n" +
+ "ShowMusicButton=false\n" +
+ "ShowPicturesButton=false\n" +
+ "ShowMoviesButton=false\n" +
+ "ShowNetworkButton=false\n" +
+ "ShowPersonalFolderButton=false\n" +
+ "TooltipCaption=Start\n" +
+ "TooltipName=Start";
+
+ // Write the template content to the file
+ File.WriteAllText(configFilePath, templateContent);
+
+ // Update the status
+ ModernWpf.MessageBox.Show("Config file created successfully. Press OK to continue.", "Startify first run completed", MessageBoxButton.OK, SymbolGlyph.Info, MessageBoxResult.OK);
+ ApplySettings(startPlaceholder);
+ }
+ catch (Exception ex)
+ {
+ ModernWpf.MessageBox.Show("More information: \n" + ex.ToString(), "Startify first run failed", MessageBoxButton.OK, SymbolGlyph.Info, MessageBoxResult.OK);
+ }
+ }
+ else
+ {
+ // Config file already exists
+ ApplySettings(startPlaceholder);
+ }
}
+
+
private static void SetButtonVisibility(string configFilePath, string settingName, string buttonName, Shell.Interface.StartMenu11.StartMenu startPlaceholder)
{
string settingValue = GetConfigFileEntry(configFilePath, settingName);
@@ -274,7 +319,6 @@ private static void SetButtonVisibility(string configFilePath, string settingNam
public void ApplySettings(Shell.Interface.StartMenu11.StartMenu startPlaceholder)
{
- string configFilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Startify", "Settings.cfg");
// Handle DockedDesign separately as it has a unique action
string dockedDesignSetting = GetConfigFileEntry(configFilePath, "DockedDesign");
diff --git a/FrontEnd/Interface/StartMenu10/Pages/AppList.xaml b/FrontEnd/Interface/StartMenu10/Pages/AppList.xaml
deleted file mode 100644
index 8447736..0000000
--- a/FrontEnd/Interface/StartMenu10/Pages/AppList.xaml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
diff --git a/FrontEnd/Interface/StartMenu10/Pages/AppList.xaml.cs b/FrontEnd/Interface/StartMenu10/Pages/AppList.xaml.cs
deleted file mode 100644
index 5b41371..0000000
--- a/FrontEnd/Interface/StartMenu10/Pages/AppList.xaml.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Runtime.InteropServices.WindowsRuntime;
-using Windows.Foundation;
-using Windows.Foundation.Collections;
-using Windows.UI.Xaml;
-using Windows.UI.Xaml.Controls;
-using Windows.UI.Xaml.Controls.Primitives;
-using Windows.UI.Xaml.Data;
-using Windows.UI.Xaml.Input;
-using Windows.UI.Xaml.Media;
-using Windows.UI.Xaml.Navigation;
-
-//Szablon elementu Pusta strona jest udokumentowany na stronie https://go.microsoft.com/fwlink/?LinkId=234238
-
-namespace Shell.Interface.StartMenu10.Pages
-{
- ///
- /// Pusta strona, która może być używana samodzielnie lub do której można nawigować wewnątrz ramki.
- ///
- public sealed partial class AppList : Page
- {
- public AppList()
- {
- this.InitializeComponent();
- }
- }
-}
diff --git a/FrontEnd/Interface/StartMenu10/Pages/Tiles.xaml b/FrontEnd/Interface/StartMenu10/Pages/Tiles.xaml
deleted file mode 100644
index a07ad26..0000000
--- a/FrontEnd/Interface/StartMenu10/Pages/Tiles.xaml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
diff --git a/FrontEnd/Interface/StartMenu10/Pages/Tiles.xaml.cs b/FrontEnd/Interface/StartMenu10/Pages/Tiles.xaml.cs
deleted file mode 100644
index 4f518fb..0000000
--- a/FrontEnd/Interface/StartMenu10/Pages/Tiles.xaml.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Runtime.InteropServices.WindowsRuntime;
-using Windows.Foundation;
-using Windows.Foundation.Collections;
-using Windows.UI.Xaml;
-using Windows.UI.Xaml.Controls;
-using Windows.UI.Xaml.Controls.Primitives;
-using Windows.UI.Xaml.Data;
-using Windows.UI.Xaml.Input;
-using Windows.UI.Xaml.Media;
-using Windows.UI.Xaml.Navigation;
-
-//Szablon elementu Pusta strona jest udokumentowany na stronie https://go.microsoft.com/fwlink/?LinkId=234238
-
-namespace Shell.Interface.StartMenu10.Pages
-{
- ///
- /// Pusta strona, która może być używana samodzielnie lub do której można nawigować wewnątrz ramki.
- ///
- public sealed partial class Tiles : Page
- {
- public Tiles()
- {
- this.InitializeComponent();
- }
- }
-}
diff --git a/FrontEnd/Interface/StartMenu10/Pages/TilesAppList.xaml b/FrontEnd/Interface/StartMenu10/Pages/TilesAppList.xaml
deleted file mode 100644
index 5ce2824..0000000
--- a/FrontEnd/Interface/StartMenu10/Pages/TilesAppList.xaml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
diff --git a/FrontEnd/Interface/StartMenu10/Pages/TilesAppList.xaml.cs b/FrontEnd/Interface/StartMenu10/Pages/TilesAppList.xaml.cs
deleted file mode 100644
index 95f4458..0000000
--- a/FrontEnd/Interface/StartMenu10/Pages/TilesAppList.xaml.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Runtime.InteropServices.WindowsRuntime;
-using Windows.Foundation;
-using Windows.Foundation.Collections;
-using Windows.UI.Xaml;
-using Windows.UI.Xaml.Controls;
-using Windows.UI.Xaml.Controls.Primitives;
-using Windows.UI.Xaml.Data;
-using Windows.UI.Xaml.Input;
-using Windows.UI.Xaml.Media;
-using Windows.UI.Xaml.Navigation;
-
-//Szablon elementu Pusta strona jest udokumentowany na stronie https://go.microsoft.com/fwlink/?LinkId=234238
-
-namespace Shell.Interface.StartMenu10.Pages
-{
- ///
- /// Pusta strona, która może być używana samodzielnie lub do której można nawigować wewnątrz ramki.
- ///
- public sealed partial class TilesAppList : Page
- {
- public TilesAppList()
- {
- this.InitializeComponent();
- }
- }
-}
diff --git a/FrontEnd/Interface/StartMenu10/StartMenu.xaml b/FrontEnd/Interface/StartMenu10/StartMenu.xaml
deleted file mode 100644
index 3fa6980..0000000
--- a/FrontEnd/Interface/StartMenu10/StartMenu.xaml
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Pinned
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/FrontEnd/Interface/StartMenu10/StartMenu.xaml.cs b/FrontEnd/Interface/StartMenu10/StartMenu.xaml.cs
deleted file mode 100644
index 2da0d58..0000000
--- a/FrontEnd/Interface/StartMenu10/StartMenu.xaml.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Runtime.InteropServices.WindowsRuntime;
-using Windows.Foundation;
-using Windows.Foundation.Collections;
-using Windows.UI.Xaml;
-using Windows.UI.Xaml.Controls;
-using Windows.UI.Xaml.Controls.Primitives;
-using Windows.UI.Xaml.Data;
-using Windows.UI.Xaml.Input;
-using Windows.UI.Xaml.Media;
-using Windows.UI.Xaml.Navigation;
-
-// Szablon elementu Kontrolka użytkownika jest udokumentowany na stronie https://go.microsoft.com/fwlink/?LinkId=234236
-
-namespace Shell.Interface.StartMenuCompact
-{
- public sealed partial class StartMenuCompact : UserControl
- {
- public StartMenuCompact()
- {
- this.InitializeComponent();
- }
- private async void SettingsButton_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
- {
- await Windows.System.Launcher.LaunchUriAsync(new Uri("ms-settings:"));
- }
- }
-}
diff --git a/FrontEnd/Interface/StartMenu11/StartMenu.xaml b/FrontEnd/Interface/StartMenu11/StartMenu.xaml
index fca1a0f..6f36e69 100644
--- a/FrontEnd/Interface/StartMenu11/StartMenu.xaml
+++ b/FrontEnd/Interface/StartMenu11/StartMenu.xaml
@@ -165,7 +165,7 @@
VerticalAlignment="Bottom" Margin="10,0,0,10">
-
+
@@ -347,12 +347,12 @@ BorderBrush="Transparent" Width="34" Margin="5,5,5,5" />
BorderBrush="Transparent" Margin="5,5,5,5">
-
+
-
+
diff --git a/FrontEnd/StartifyFrontend.csproj b/FrontEnd/StartifyFrontend.csproj
index ec95bd6..eab0af3 100644
--- a/FrontEnd/StartifyFrontend.csproj
+++ b/FrontEnd/StartifyFrontend.csproj
@@ -121,15 +121,6 @@
App.xaml
-
- AppList.xaml
-
-
- Tiles.xaml
-
-
- TilesAppList.xaml
-
AllAppsPaneControl.xaml
@@ -138,9 +129,6 @@
UninstallFlyoutControl.xaml
-
- StartMenu.xaml
-
StartMenuEntryApp.xaml
@@ -271,22 +259,6 @@
Designer
MSBuild:Compile
-
- Designer
- MSBuild:Compile
-
-
- Designer
- MSBuild:Compile
-
-
- Designer
- MSBuild:Compile
-
-
- Designer
- MSBuild:Compile
-
Designer
MSBuild:Compile
@@ -319,9 +291,7 @@
-
-
-
+
14.0
diff --git a/README.md b/README.md
index 3e012fa..1200a32 100644
--- a/README.md
+++ b/README.md
@@ -2,32 +2,26 @@
-**Recreation of the Windows 10's start menu for all Windows 11 builds.**
+**Work in progress recreation of the Windows 10's start menu for all Windows 11 builds.**
-## How to launch
+## How to launch - notes
-1. Startify Requires the following runtime to start:
-[.NET Core 3.1 Runtime for Windows 11 64 bit](https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/runtime-desktop-3.1.32-windows-x64-installer)
+1. Remember that Startify Requires the following runtime to start:
+[.NET Core 3.1 Runtime x64](https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/runtime-desktop-3.1.32-windows-x64-installer)
-2. Paste this file into %HOMEPATH%\Startify\
-https://github.com/Lixkote/Startify/releases/download/0.1/Settings.cfg
+2. ![fix](https://github.com/Lixkote/Startify/blob/main/Previews/tempfix.png)
-3. Go to Settings> Time & Language,install English language pckage,change Windows Display Language to English
-![image](https://github.com/user-attachments/assets/e77c1a40-c672-4cfd-9256-8f62016308c6)
-
-4. If you installed Mica for everyone
-https://github.com/MicaForEveryone/MicaForEveryone
-Add rule follow the image
+3. If you are using MicaForEveryone, please configure it as you see on the image below
![image](https://github.com/user-attachments/assets/baed28f2-12fb-49bf-9f2b-7741c41b7943)
Supported operating systems and configurations:
-- All Windows 11 builds
-- All Windows 11 builds (with ExplorerPatcher)
+- All Windows 11 builds (stock xaml taskbar)
+- All Windows 11 builds (ExplorerPatcher Windows 10 taskbar, and the reimplemented one, ep_taskbar)
-Might be supported in the future:
-- All Windows 11 builds (with StartAllBack)
-- Windows 10 newer than 1903
+Unsupported, but might "work":
+- All Windows 11 builds (with StartAllBack) (Start button glitches)
+- Windows 10 > 1903 (Works ok, you need to download and install Segoe Fluent Icons)
Screenshots / Previews:
diff --git a/STInstallerBuilder/EULA.rtf b/STInstallerBuilder/EULA.rtf
index 991d1b4403277005d6707d9de43038351f384908..311d0ffdf6c5f22662d95d71b270ba2a217a416b 100644
GIT binary patch
delta 16
XcmbQhF@a-)9wW1Xp3!DQ#`{bFCL;uC
delta 16
XcmbQhF@a-)9wW1%p222A#`{bFCLaW7
diff --git a/STInstallerBuilder/setup.iss b/STInstallerBuilder/setup.iss
index 95c0180..8bb14aa 100644
--- a/STInstallerBuilder/setup.iss
+++ b/STInstallerBuilder/setup.iss
@@ -2,7 +2,7 @@
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "Startify"
-#define MyAppVersion "1.0"
+#define MyAppVersion "0.2"
#define MyAppPublisher "Lixkote"
#define MyAppURL "https://github.com/Lixkote/Startify"
#define MyAppExeName "StartifyBackend.exe"
@@ -49,7 +49,6 @@ Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{
[Files]
Source: "C:\STInstallerBuilder\Startify\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\STInstallerBuilder\Startify\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
-Source: "C:\STInstallerBuilder\Configuration\*"; DestDir: "%HOMEPATH%\Startify\"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
diff --git a/tempfix.png b/tempfix.png
new file mode 100644
index 0000000000000000000000000000000000000000..4b6573acac39cb01a68b72df0d1139f54e1900c5
GIT binary patch
literal 30977
zcmbTec|4Tu-#;u7rR>B$_+09_~dCt-Id*9#J>v?|9^W66zip+T)$9Wu|&-?xUypPXW%6UioeR~e<
z5fBjA=Wq&kK|nwdAt11$MRXVNFIU4p%mRPy2)kf!Bk-nA=_l}mkgxSQYXO03j2Qcx
zF!1y4kW+490s`V~{I4Bd!7r{02t?;Nz^wm_zOvL3^EJZZujSo5`Xzh&D44yy$m{bv
z|B}5Z*CArKLs--=x+(guz>|SZVcGVy)ZEe?<*)9yk%c}Q9uShXmEA1_O}y|YCE*XN
zGY?9&zLW|nrg_P0?RgNS+q{(>2PIc{_|Ekqo^M%_7s+Y#jvr67!{$EMZN;rKZkJ3&
zHcUjiA54^-K1LrM!W~YORFg*7h=y9h^k_DsJ2aTUZ|`6{L+
z^nfB`gWjngTMDufRV8XBN{YZ}HhPJYR#+!dHE}d0>58b@9axE^jgll$tVPmBAO)h9
zXrhV*#i}I=xPuVEF<;!Jv(AN&$5VTI)2`64;pvO4o&Y#&biQQ;5$vZpEms-cahj8u
zXSRL)oyRcJjLKHyym(Y&+ulb@f*EGT(2bW)=O)>|UR62<`kVW+Ed;#MM+MC*&n1kv
zZaJhVd6bkeo|Jt0rD`RW4O)~e_pVf9zKLzoYn)8bV5__DYZp~7kW6;mp7&KBVwauV
zv_Qg+v=dSPoSyar*^!Pv`!<0@dsWHCRYy-+D_OUB#tw`ZA|_d&M{oF*7hrZ%lrJB7veL>noH92L=Wu4L06A{lZ8@dlD>xCTRTV;I0kMdZ55t95%_UiDbvPRqS!rZ`nTMHweRs}LWX-nsw*6y42?ceBrvT^tLn3qSfx5x0L
zBImtpd*dy!TmL<79kl!I1nB4o*L42|!A{)|u6abzQZ;%EqPfE>rF{oXV%}##@>Nl;
z+%d_6^_IV;3ViwseCn%Xs&P(&Xp_Dj=1*k*+8p2GF3@_iIw=;dziI8xQ&8}JTD+t-
zKY7oqZ(fpt4IXfZzi0@|GOrglYOpz*u^oXQI#pIK--m(a1MsIxWdDv)HPZWbrwB9}
zlDlWRgW1}&1ZGfUO#O)>k~`bwyynUykK8#D`}({++eLCTV2|SZPA%Ej5;WVmS#fo#
zK#G{^E~agXXnjW$xS&bS>*nta$@HX^>d8mr*>F
zX<1dHV^z`fTJqw-?FbtJ>@6ebZdra9C#oRaMAXh&W6FvY!#c+W>GwrzZTeFowH+q!FHQER
zTF}XT8dg`%4E=?+)%-n{7gpk`ezHJS8YeWtRq|C*wT-K)(SY>>t3M~lH_P*C5_X1=
zzl=6Er!F&8$JI#k|=2dz@Hc&>?Cc_ySE3n5!K&@QQ$X+
zw;>U@WE($4)e`dr_(K67me~f*L`ko0lm#w6yN#It+nZDzW#WDo;Eq%P@C@9&IhhZ|
z|BvHdjUYxfkWZ8cMK#Yy-oIELEIRh4b6@Yziv=4oZ9gyeE;$wj1z9of_q%77gi{+Q
zmNN4VN;wK4Van!&N0n}PnRGaRgn*jolp34KvtdG^A>oGu8qB)XnDzUiKyEeMwJ0`y
z2+)P7+GgRtR9ue6Ge^Vn;A0WmVdGd#L_sR*(w#idFvsnMX#Y{;MjTqn=}kHi)pSZ#
zX}qlKiI%%0g7#P}&%oZ9lrT}B0wdY5zp$WY1`XfA7$!SBd?u>C%zz_)-AiuG=qPiY
zF7`3Vingy8)v7WJkWr#!SKEEN61kf#PxUcp%%!d~HT0{sWX%NOjwdv%ud&PD`p+zV
zFT&mGdB^J^NeUAmu?Stoy(6Oa@$uTb!Y)8qS&Uw-c6b3w2gP4h6G*)#
zb64aytrPFHx=Sk!is){Bpv9{rT{WBU8}u}pe{jccuan1MiP$3q;Zxi~(HZamf>%DagTD`JI?LtfL$&3gEMf^8)D6~7xN_=&)%oifks6~W%Fglq
z1(<%Zv?|mYz1bTZE+^dF30~|rE-3QX;;=KR-Q$iX#+P+{L4dB)9MXQGQ4m+n^0qc
z59|cg5Ac+G15zQ{*O_pVD}ChkQVMSWLDb<}f325*sOfp6oEb&+-AI=@AF?g*-#w)shtk5iNnXl*Rf~4hP}uqX3M_#
zjwNs2DzDdN-u!*LD3ciCrFbPJbf!jl!loh7ZkOE|waui+9d&EAamPSg(eWnGnHOmg
z#ay|MhQv#lZBS@#a{;gPDM;GYOdM{Wd8CyBfe&3+FY#JL*n1C~CQ^S6r&7|q&dg$8
z7MAFOVo2fzCI3*g`(CLtPj&)Y(grW$c#@
z95D>C3y|)998l|(&IgQP-B)S2*ZsRwJx&GPbEE~Ll=!iU&h}o%>MbSsN1f)!q)6X&
zJJMoSxzILVAO0YowoN6X)kpYB9JtN@3x!-gM{J_5P3yt;P-t~7Eq
zEey(4*bY*?3N>ad(V1&h`uL!6f4u4OS_5>gwlyxoE_JBq{V+-W{^d6b1-GTU9
zuYj&Mo6N*t6FH^?#*Oz~IK0Q~KCD9_PCWyhhI>oNBRq~YC%cUhu61I09<>8@60R}a
z#|y@h>;u3sjB5R(2HZxLEuTDOjSezn*XRb`Jj0`lpRZ>cS*o&Sm{7gT%A_2^N
z`uy+2dLkZt`KK@gE4&@aI%qNu6DraKD_)G_~yzA&_3~CsY-(T)t
zb*yZK=={%@q|QP=_BFNd58J<-QrkabeX|BAnbnr@;WM?;6F{M#1Svl*X&rq>G0!X^o+iC)
zD8LftjS<2<53$B`Ay1upaelyBd5#-shKIvq<`I^)7x
zr{8&R(TTjpyt*BGUcG@ZO^<5}?y>`;qP~x2N0-4nb9u;HS{Kr=m9nU=qd26;B>54-
zy5`GV2&$8?3Gw~$!wYt8y*Je0UBI6;WBT((=BUhI>Ov*ziT;dUZi&1BYH;5iAGb|3
z2IHJcIMyuTHA9e)M>Mqy(=tI@kY_rYJgXOj^x6=@GQk~LODCD6I?r@MCX~A4;fvLc
zwl%_+K*c`O4g-)5GBXBwlS5u3bi>a0R;Co6xc{o=(NZ150AfsfQt5Haou7Cap9o*s
z0SvxG6;CmQb`!lLFVCml@*$oRs|8&slC&zReYz#~*0V6waq7m{qo;l*OY-z%xD#BD
zXFX^b{1EbyxwF@pYuvFMnWQ!jXog^S#*-#6U#=0Jy7`OUl>ztG!ue3MF>nH3FNB`D
zb&|F*n-=0j%t(B+WDqc>+gF|`?ORAVam9{CBu~25m}wu_>s(PsA6vf~?{GET#7W7-m`{5N@o}KxM1j{*$87?M&gJx-VIzsk9TN?7r;j{17
z?*E{abYj>($WuDpQ0#Rru8-ZhM?5#4#_e^ww13df>2klyUVJ2npMe(`o_Q!s9zV0y
zs^3v&)Ng*0r|G95^^|ro2@A~n=jSd1+!WyC)tdS~hNb)b2Y#tw_ni;LRf52M^R;%g
zDj<=D&fY9${fOaBy8!F(L)AtB4O&&7H<=sm?zFl`ot5(qX1pmjKgpBZZ-7^p@kk0t&*=2(+}F*typHKQH}+pr
zz*shClMG>Sy+8iID^z;|(BCsnNKh91c}dfS`54{7CPTB0GDqpJx*GQXPB(kZ>F3
zfj-Vr{6b`HrFL1nKo;?ey*Gb*BB2Tu)%^{0_eN7$<%#OJ_Y~nLbvsfU-#}tL%-v@X
z5{J5G!TJ)AAB!Ce6}`70>7?2^>~6BX?+v_|d5JHiYca~Z#)F9Ga4v5(zpaV=a)*}_
z^B%%|V?n1+^ig8|is6UR0lmS&?}2e&*2RZqCTqD?Nj;QC%=B476EBaLJXt+S?I8;UnRUiC*brtu>z&5WmT(T
zqU2!M>7bQUI598pZlkT>?opTdAp?uf2Q6TH9&eQWTA`;}{}S~cq}JEGb%P-RhXR9o
z;a#cslq_2WK7(dIW6i2ACPVyNmq8xQ^l6KffAT4>=;eCNFUWsRJB2N?2}#NOp&4_L
zZ*pXnpX%NmS1^$0kg-0THIb$7Y>XoQq$SkozE5YR=kGfYr&AU_@%c2BD(rlf*#l7C
z3P5@L1Hh7U4&mR~_G@xuo3hg-Vwg7skMKwv6W=gw@Qw173eQPY8#e4K?liY%tvTQc
z`AysA{#3mY7rBk^3w-Il2vU?oOxQp#{F#XTu-JZnpsuUT1$Hg>pSbu@R{6wc!^{wS
zYb~PrcKyEnV4g>`Ldg-F+THVOq>D11VP>eXEEzh%YqW=M$LeMebyn)j!r#6=#JvB8
zufVF|xBjH*Y|*PopY+pi{{U~6&C`C$r#6{7j9C9dS7Qf}
zMj+14k#L?Lc}I~fR<*FTn=In*HS#Q8(Y>ajF+PsvF{{r7WG5YvosUFjq8xMYU
zTra~`x>M{^Q_stWiy?m568lv!m!*N_%%oOzVvFD-7aJtwU9r*ad?C5;?dPbs)-$
zEepsJy)2U2|5rjf$_mf;dXGS^@8^A|v$%t(k9!`JuEjZfvFZd*1bCCtvAK8+>3)EPOVn&81czb_vpl{qV=w0t3EHjbI=zzcWNkJ=FMRofn9&Rrx6?TAj^5T>-xP
zU-^E&E5AA_JWmuCAC*0s7CyEnj~gEvdcBWKL4}r`TuJqxdD-U
zMg9!zU2SO_*yrm8m&W7~k@4K)ZLUQ9%nevc5h^wK6FmIXM?bzsMZAl7^Ozd0bBJGr
zq66Q)qbx*4ea0>;z~GziO}_bMF6_dfr0+NENdE{??R!KtnX4BA(xAQdvcGM;K{xMm
z0?*}jGPc}260`c=q{`?+68;sYUD2-ZFB6p_hh|>~*Se28mYkQF88V)XmHPRmepj(-
z)A6$2CKMD`(jOAf7|zj6Hf&b*4yp;8q;GD8UXluK!|D-&)slfygTg#IoVJApmQszc
zUga#rFfrtWdtwonpB8Do<(R4U>u_HNu2M|u{1;-*CX`whoBm1^VP?o7K6NRSo|iuK
z66uT%k8b_`Fyk+b#DLe)v1F<_CRlfPeZjlqs$*(X2}_-7am~UUKaMYbKpGwASYDuQ
zn-mdzk2F`|GCpji^_u
zr{7b$-ISo9LmPCfb9C9I$LvgHeBY`g{NyK;8oq5vQ^B}5=K4`S47Br!^QXMO?hiR<
zDP7ugLPen7ugiT3<{e<>2vxT26wx?`}%zH`eN=bLrZ~qI;uNCE2vap9eDCVVE%#iYbELG|f#6P}?LtQ14
z_E>&-iw$-hf{Ztbc`uFH>$}DoA@lnkQX$!-zo{3o8q9aqZ`qI7$btv92J3S%3M!iiu4?+Z*rd7+y1+g{M
zZ*1oH#RoXe3YNQu)yVm#C-BnEWB-~eA4?T
z9bhJ)vKr}X=Ic^PFU{Yc#{bTb|B#OjUi%VChUY28GgeNf;Kq%ae~Hw;;!U?9^&`0=
zcUbDHlrv2S*Y%PiU&s059dzSoT^ZfLwd)|Wg0~D(Vo&3WDPNFN-sM_7s86l|RC5L+
zimIedvpLD_DFC86w3~0pOys_OVU7g+HUF4R2iog(gPYBI%+FA&(SdCj(W|Hk$8HD#
zEy*4N6l?oDC^%rJM_w~?iZr+nhLJ(MTuKN|jtlQ*%p!COZI9t(JU@v<+GJBGOqQt+
zUQcoM8;`pfZvn*-MndB27~jcIFpzDg^FX$t{*`S`QwJo_xZB8`aUlr)mLsmUY|-3W
zYghB4bVVB0I%z=sNLVy-CeQo}bG;BiI`V&_=^57I5|Mwx)a3xaeACG)L
zrbHZphwYdlQ)cuq`{o%%S#__wMDBOJAmGC}^J`6vzIZqNylk)K%3gKq0(xz*iCfn+
z^ajJnOQ#Bkb*4&<6#+DrN;xIit=GO?Fsg2ez443>{jqf8I}B4=MPb=lVh_irQUgBO
zN#+ss##?V=s}|s+bC>@!`S=cvnRW5$M{Lj=UI=nw$evFzntX!1opsTT)|NC(dr}t&
zB3-mkF?d4wfJzy4bwfD1$^JDz^pKeY^O2T3S=HBVXP4XmBd0?uy(HyfZ2VITd}>R6
z|0uo4s)zg|Yh%AO!dcwDYt*@CrF#K5ZwEvUU$;)1T?kJU3)K|5P*O{&-`tE2XWp+(
z``!W#0fq^wc!OHHSnA{ar;H(jWKC>HzeDLPV2O1S;sz|VphbB53{}oT
z)4$KGH`6xw#a3hiP>#;2=tZX0%h~-`F0Nwvt__g&z|B8mNlWX0%5M%B-;_xaQbgI&
z7~F&1V0*nj=x5&f_>^fjARk6I#NJ56GuB?E%OMaJS-g)MTQG*_Jd+>A%{~0o{P<9(
z(OaH_EL8y<9BNwZB(!WLn4@`n2XQylo8Uz`<)!+oWbP@DtH?I2gphtdm(kdyv$)Xp
zPrH38_0{OYP;eZU0B^28#{wrd@t7OnzTnobZ`-zWb1P6jZd>^1BG|u8`~M+Prq7dj
z9FlMR#w&Qy+T+T2AK$BIjRyU60VCdU+r_zJ&Pz(6}qkjxEuxN9cm
z%ROVu&df<%ck^a{lm>5oZf9?Av32#<6GHrRMl+t(Jny*@dns(GZm6$uK0hE+*&JeZ
zb_K;_6*wW+v!Bq@=7EjA=(UeHl$JBC=ct6C)XY#p@|~%vp|>v4M%d5jx$KT)jr3j2
zfyJ@%0`lb{4bOlSoTq@fKbSo!QgEr|*I&IdCG_@r+*V6)*r!9e8oJGkZ|A?A(K|Oz
zhHN=RRLzXn*KAlc*wcK?bFS^&EG#sOxLGP*t=73viAUD6G}knN77D(a-g*wGX=|Df
zz9a6r>CKMbpDreWF0{ZjRcKy+YYJ|i@FL?RHrTguF2_ATw`I}CAZu5t{o2V;dsmUK
z;t?*A-;x6tIOhev-9MgG5-6g0b-&eK9P@i+5QOv7$@imPelDP0?gFx$9Xu7QbrZ0v
z(0zK`!Cj42Q5#v&W$30oU1bLTQAc-|yC^)h{7gk2;h^rqgvteLH$n9>#3`*!f+5|b`lY-J(o0}?yEb*ypu
z-9o;-*y=!8xf60FO(eZ#?j@)I*ph(|Luk?t)D+$OEFqvkn__>`~vsC$h{qwx?
zO0<30!s`YjICniadzD}JoPE4)lF8E<>Q|(69F8%Q;&t1!Nw*qyj>ahC&OS8~~)s3v)8cG^S0(Z7l8%z$flUrc$(JI1SH
z4_0DaiyLqoub&KKzY5Cw;UIrd5z$xL*F@E?bwg^adp5K5+SyG6#2dym2yY^TB#r}a
z^VgAWX>v`sPmU<5JIj|Q&C#|4b%pwosZd%C`N%HOhJ4f`gDC@5M|JqiV9oHb+h9+}
zSogzz3GD0GXAkkk*cS^&Mqe>r@|8;bva(xA>HCwWO3DHD`uKyuoHC8^j9!Pc&VEx$
zUSi}s8$WJzC+hv_Ds;CKIuC#o7ubnLTJ6{l)#qL&ztwsV-%_Ul72T6rggC
zNTZ%2O6$%RJvfEX>K>hO)~2W~zS|OsH1
zyQ~iZ$I!l1gCMrqA>vTRW6w5VnOrbmR=y3{r%#;=j_p4i?fhqH`awIzsUVdvi^&I*
z4p=EON9%844&M4SUC2bxsos;`c+L3Mpha`3+h+{9S
z4LMK}X4V&*ddw$9+O=+EEwvEw
zHIr;&Lqo79BIZnL|A)b3ow9vZ+!*n%@{q;lgTF6P17@wT4+d_RYkwr?>XN=zn9w^t
z7TcT@xVT)R(*{KlZ;TN!{L(X=PZB3*Nd3uW6B!33;gxX{3;BBSQ)2tLQ)jX&-~IY$
zU|E8j_0nCOlT8Ue8c{B;Q2{X1mekQ}%
z$ao_B;(92x*Vwp(IZ)o73foGO^n&s`@Y3foJUYg=`L>C4s@XtT@;-dOn11rXNX9Ux
zIl}Lr@<-77N#UQOW62O&>3q>jyzg7*y-3~`ig)(I2##id-hQepFQk20Ba+ESam^i!
zzx5DDII;z<85H0Ua8U%lvB=x;Z
z(V1N>l1P*Ckb4qnn*lt~@0Yh5mI_f)V^1cp?0(he9JzCSBKZZ%
z2c=_F(7N$=cACe@dP{~#-jYSsP7!rUERm`)k<#Qy6D(L5%pS#ESuDME4V;4Om7V|r
z-o;fuYd@SOcqk`R%pc1qKIwM1rpciSA{WwS5JsqIOFt!^4;iW1Hg^8z)CP$C
z?+k>0plfoN5~n;Qw9lxbJa}`8Sigg!No;V#vS6asV8Ff};spgbA3I+g-nA@M2p@mF
zFJwwr4EyBNlilx)#5*O?xWz5Ea}}Qmw>-p{7zOC#GiwF)!@JL6p9L6f{p@uX2C#`=b8_G&PVoWcn}B;4Eh(Lc1Z`L}S`l>Umxv5?YUu+w(Mpgu8O
z^t)pCEc)KSzQr#DOJH?(8FLdlaAwFu+?bK{Cmll@D=?20?KJOV{QkQw^)jyc@QEu0
z;F&N+G2^Y*G0l!!i6M@~P;)$md1wz-FTX(U5AS8nk!xWF^4e8ZZT4y|qfgpQZw-q3
zbxCau-Va+=@dABKgVlR0Bl?GAVPKUg`;9TxcTs=?-+YVuTl`r;>Ve8vi$wx3kik2^gm;Ju-?SFN7ac?_c
z_!R8qkNhhx0y)!JDdSNteTer$F9kAVF0E6?^4JxK(vjTaouP=x?cCipnm}HBPFDc?>&@szp
zP2y-A^)z^N1$Fd=!9yRczen)Np
zeY4DtHIAvZ8xX$qI0w;c=r-N1oN|`d9Vj|~3h^z0G&(jz{Hgd&_tF;k!w=NqJMTI;
zl-ieJo6>f~Y^FpyJPog-Ns=SxM((S5Keu@lHB$HoW9dj=C2&~P7d%dnIE}4T4B)DC
z=J3gvu&?yN%L#Du$w&7N)Z;mJ;-Y_~8f&+ocRJq{I~sCbIcis^<6U3Q>cyr(kxB0>
znNDBDAxp{DK-8tRfceKM+r$fQwwp-BzK1T_|Lkuv$chMm^y}O7vYqnhrL-21oe%MQ
zwvequ_}+AQ25L8PDCgqX(aa9E9ixch#OUsFk|hrrnD9y&-`}jb9&?OgH*HgJx#<85
zel+@@t**P0y$E!-$fP6q&I|RU7Za`HOK%Am26n}={N(Mu5YBt23ppdjk%Jdu(`Yj#
z%o*A>CCQP~@$@!u5b|d(@<^=?{|L-$FQ1q9o~c*GNC|UnAOJ6u+!%MZ17Ctfr?
zIfki1`NX^17q0lgz*m(#`x1s*Di;sbV#`(EO*1m8hbjr1FmO^;$}73aFrGDX_|29N
zS#Gyt72o%W%Jst;szY;(TYjGFoy&z63*}Du-1~}k^?uUz&2%)(Ui?FeTu6Np2ziuM
zWK}OL87~n(xw8Pu$cFj{HO=Kbwj&u1dGuSbMhN18Ii4Uy31`vwcby`^os=*lv06w4
zop#EBdNH5QT(DfsGhj`G_n-6UR!u4VhSeHORMN1si0dkehqu1au@eQZwk23jqdK&%|cEzBC(en)}
zp)N8lnxOgCebbuerZ1AU1vIf671{0;EVP}qrcVIvSi;VPl
z4@#M_Y)*8kse=sxdXzB4uZrQ1$y}1XA$#*hn`shgtop3t*xP-XgN{-T*OJ5PXO@dC
zHDAm~ErFR|lZ`54dIR#efU>NYuOp0|V!vhQgIU$!GYPu{_j&c%l-jypaiLjzaN3>N
zFzL$z)1Q~CtX)fsDKgtj1e|uBO*ofQ
z?0GQ%Qbsqyl{*LL{vEU6PRfUUoB{LbXG5InJ4AH{*EkWi?uwbRHwSMlxFwf$)K`Dl
ze2{GMEQVGFE>f{Scwd1t+nVN(Tg`CluS@uMF`q9Me`B|T+19CY`gqP#a4>S#9{G&X0tAzW;1Q$%?0~RS
zN;R<6y?Y=6JA9&u0-T~m%00Agy34E$<=WBqq-Zt4Bh2$R+}maUy@E;>SptI2W1gD%
zU6NUth!5pgp-dvi2-qv$R}U0tqZerBCmEqQL#T=OWXl!*ADrbV%^w?YqICAbloMyX
zRj7IMdc1YLixXkR)WZ2F)K*kMGL${#=AJ|30`>n5v#v(;j%wAzw2n*-uQ|;qwa7Ps
ztepSpgkqjeEEV_aO07i$bN1S;o`MN(btQ^i^RZKjoHEj3n%vLO6Qo+*`arOJ2RO*A
zyRZ_I=uF$af!SJIAR*4JrZ~l88AHI_=1X{tk^;Vdbiz*V1k1PA?9WxjCH>^W8cJ8g$^YCP}m{VnF%e*nW~z7F5R=1()pAtXY*!ZnFAMF(RW7vl
zF6HfXRi^?mxmw|#u#spB<=$a|Fl&o{;|`EiN*0=GnS*MnQRwcjdU^wj)u4f`io0KA
z@E$IXIbTf`DGhn3x~n}QPg2nfR)O9Rp8RmBE}roP9>g~~`hDMg0CjWJ1t*if(ouP*N@)U9=(
z*FZW}HTCt$S#sl@=yw}~?)|w+-Xcq3B`lB8b8X%vPXQp3+wUt#y#mEAEYp_M`O05^
z+i_0&x8v;e1Wj?D^BupbU-aHD6?H>5H2^&}!(_)T&uH9<{+O(GNA6Cuke48unATz|
z8{c(qJ5u;3wOA6iF2s2ybD~TKPX|tFS1G^BCbAgnVDx<}z>v~j@G44qt`Ymr2-(Aq
z@^5*1v;*3pTvUyRH#gGBT(OSPvc6s|uMH`vbJBA$jBD)9voU37z*Z16BRzZG4?&XSpCmH0!KMm2R&uu1d4n
zzr;X^7takt5$U#T1Xl;z_h|!JHjB-OugHbZcRlDutT8VWyUf7Z;
z+V1Ooq=kmG$FYoxA3ivfP+3I6kF8s=^kM2&XVZRHUfT_bM?&|O}{+e0O?W#THd_Hi7X^O2*R(Qv?BPPeAOe$CW$hYHs+X@jA5C3Bl
z1yTr0hC1BsL@2I`lD~aI908mVAExf7H$1bO*o{q;Idr336I*bRG^E>IM-QNiIHxDs
zp+YN8v%k~#I*(b&{=KF^8fEPBa)6AWVBE`Z^8{@|h20IIb!+B#DP(ZQrGr%GM(*ET
z&3U|~bEFYnmD@3KGg0?pC9as?3$fkXVRoA+4)Uz&w;>W$Fpi`Lk#_+TN1WbpT~Pgo
z>!av*Yd4kx)-baBM&d*bn$?tENuvxQwgX1p@WWMueZdb(dVFi}n
zoUU=8yz}@Fo@*`M9-u;2&kb1qW%nNszI}{UyddwYy=R?U1vV^qYOoS|`rA7H^#OI#
zS1&Eo#}3ZTYf|AgG6*2f4^mH%6<+x6g*3c;i5hKX`b?la+4vD2_|PLf(1#^@kABgk
znx39GIF4K1SU`6wc+CfVT7ZKPXc8`2VvW4=b4*Agj$&JoY`J)?*A~3~ApGo{%7Epw
zLnF-N)|OQpwCuhy=5^zUijtz{&6MQ2&E(Dc&EX;fE2Jmbw!*~tsqV;b#AsNWe==^B
z7f9L+^j}2FY7)jEA97+GO?VZzM*lXYdHc?MYzQz9Abs?3b-y{*;A_r=`+46f`MuPD
z?9~03bF1}0jo+r&gcUEQ2rj!5cvS$h#~V<%(mRrH${Y0L`I63(jo_p++94eFd}RL{
zkVyp5OdUU1d`$536>pknBXVKZn6fZ-W6M=LR*)#XzHkBqmG*41@>pWpAp>C8S|rDv
zcw@%98M)Pmx(z~5CH#dT@}oz)n#hF)GkxS@bMpi$!MxIRr7y~{Fl=+gz`QTe+?@~>
z2Se3+?>D+i_%z~M^t~`HD9&-zY(b)nI#pv?EP}FBAPtTkBoOS<-+-6$g5PdHM43-B
zsU{%A`Jl0qdqzv93$D9-w>T!g^T|FBIu{rEESr}Uiy9!W!Np_8E9HJsvKi_}f?F~I
zok9O0Rn^qjG0EiJ_7DH
zhs0XUNlhC=Hbjw!3X6mht}eR8(#dNd_wvJ23k0HwJ=%J(H_;<52x9>iK}c$HHuYup
zn4=-0=Gtt5Uq{%(AjZ2d3^F1982JdvH=^mPa#hTf=~$IG+2mVgV3$!v!wg`?5)r`p
zl!OMez4h%8DS5_z_4QCKD}lEROb}Q|ElKHD2t?*KB2Jrj<0GNA!}MB(!?6vk*^voLU@o^PZNo=!7n(@D
zWvIa#ar;z*Ov{2el1SvB8)=acdCNOcAVL4XFCen)6!n(j@<3D%EZxm@@U59El??!w$glH8@9%-pRA6YN>V&taEQmui{jAJ46Nc?A)^#
z@=&;(L>O-w{EoS4ZDCEM<=2+Q8
z6Ko3z0cf)?wKIk0xBV;XD@mm@byiPSFONiS7J9$6?E9(t-;3EPTKD4Iz7_AA=S9y8
zRHc_8Xkx4Mt>Udld+koMDZAGDGd{WXHm@t~l@p6VH~o?i-jYpBxiVlqJ5|^mH@?YZUx#jZ-+$I|v_oGH8TGDihxW^PzH&yu5LdI(;=Cj0Teb;`;>w$2=R(q*a
zt;ycf_g(~Gy45&>d-U&kLh;mOh+kV|z0+(md9yoK0QDi~8fM!o1m5Tof2h_fKXTKR
zbn*VjzEtU)Yh@v-!*gYK&U}0Y3UU#c&P#bGU!PP|AHFDDA{Sd@|E^`y)_k)|%4*hm
zajM(CWeYdday%=U`r>SBZo4zQE7oF9eRGkP_pPT7R=|U0{fKDd0kU
zEiSR>)Qpg+Dz*H@^xi!jb8b;HZ^`s2xVDb#ztfrb-#eU=IQABXEEn$(%9Ite7@bh9
zZ*G+POZG~8n(5${5MY;UbSC}^yHKnII@z1vC8wnUB9Rk?{rCT$m
zjUYUv4y>%C=MTwu?`6n
z4q%UD6!89N+gI)s{AYZiA-9gw_1a@7mc3A&$~)Dap|*bLw(7hVt?FQBSM&H<4cX5g
zc<=hd!;poJyt10T)7qKe&Y36e48oTAd02O#B#BFqt+LR
z&_Utx-HDVkff}2=WS6H>qrT?ImZt|Dj@3uhtB@T8HjNfakp1PcalE55N^8B5TdTr^
zJo_`!Z|0Sn;|OufVFmoUxKuJ<`uE1vA7!#SZf-fnwafdMAy>og8@Q@Ny1U_N%fDBZNT)uUe^_=7^EIZ=Ov4>5+
zfepYPRbznnYi0`AZqFs#MNDs&3?Sy?g8Yi30{Sf)=1h5;8S^70+*oRb6QYGdbV9Z;
zrkvtiV&-+=!NqHpz#rV|O3l!%7O;Q5=ET4WCwlpF#v6Qae%FuT6Bt~nze)_E-(vdS
zIqK?`ac>kmu-}66cd*0Es+4}x>|Cy=S=!DOQ&?f~2|PE~vhQ7gQ9g*ntV|a4``7Ws
zFqX0)obqx-{9m#aDa~QcF_XUI%eT2PFU1SP`bK)i;Piy^?6Z%5hYQePlW>{mpT`_=CG~;DC-F7~~s&
zWFsgZN_+X7(dx3u`JnT9vbo8>m|0nbjvE&VQa(h-ZB*vZzZJ2(zS#|$dG3klW*uuB
zYSBHNAmJq;h`~>tQKKhnT0mqW7Z3j~V>e-NjXx_SUycMKhU>klSVHHem`8q5AG?p{
zr1Ee9P(bUA`aQ2SQ09SOx4H~zM)A`Fh&Dh?7NU4#stu;)2tGc)A?b1_O&n(+fFijzG9
z-!=RbNXxHn`b+eQIrcnYBJ52fNW$qKLHU3Q$?1(4;zUpZf5q%p4dM40n8^(y+3x$D
ziNWMRa~Jt@Sz4#nlWZ!}{$^We0*!G0xor}Rl0-ZA}
zErzo3q)p?Z$+!?bx=Ki(HglQxbVM`$E@wc`4h){LSd+4ae
zN)y3fh5b~d-ur6iRuCEGOns(l`7(yY`k}ZvVvl73%}n51YnF%!Z14hgEByQ7{qvKq
z?mqUqi+HV6w#CEAycDg$HEs9zFMg5@((udB>f7u(cHk9S(oneqN(VXvBfVf(oYMG}
zqqZJHIX`T@xPw)vQ)|5_#d@scLR+(yn@omsGHRR2U@}BFp;9i6w54~Bx!M`U3(IC&
zuD^4)-;HB=_Sd7n+P@H$xq!-+=M0PlFLT~n;{9936CM*@
zFx0Xf@l&h-wFW|#Hjy}Q`~bbyY*-ol{nbYt>*VjES|=6qRgZSvI%MyNIq`T+udA$p
zKU+BNHR`Iwyw#NbV&7ju0i5D`?9D<{)n)e6Vm$ED@Eoz?P$oX7Bnw;l_be(Kh7CHJ
zg||)eBCM=R4Q8k5z7N^71merT{IyOtkNqjQ2Tb;gB3SfwEdSWDTIItOyZj0*LpDCw
zbD}45ON)KXNLcmPYB8|CR@EYFTfC>j^EhR%Xb5fS7HcpZ<$bL8T2NS
zOGZInjcNSGb0c-;X10}V;G;kmXiQx?(mRE%EG-);8AmQb{WvRt?Kz0Ybu80Hy53oo
z3&eNokX)k+(53`wga1?%QEh*TXfW-5E$}43q}%cjoK|l8oPY?T5hC#Tx;?{A@Hvc
zb|6oaI4C%Z@u6<$isGJPw6Dd?&t43>+rXf;%MJ=
zn|yHL3efISuKdB*a>32bz1Dqhr@w`dhVDe^jTy&vWYqHYL}|
zK}}}ex*#AbNSN9{GX%i_TLy7p3M3*R&Wd&`iV`3qCnY2R#3Wz{Ebt4dl
zAOc}dR3L!b5E4j$$e;v5Ovp&WeeM3vSLesATj$n2x9a@K530z!-<7rZUTZzidX_0S
zun-T$YA1@dDL%u3?~JavAr;6_>t}~V3q7pga@>1|4)T9btBNZdw!=b8Yqv-*7q8xn|MO<
zE&0RYe}t+5Fry~`36pXSy$U+-ugw_MPq?l*f?E>wF|oD~I{pWYNXqvdrg*iuG~r`j
ziDjH%I8^VL`=mS`FUA7^)CvON6wPa>LSnzO+B{ecmO?mmVRNQ!CIHSqI6Ln4!dsJW
zuU&`+|H@TPJD9eNgnn|jsxv81N;3%pDu_Y|@G-JYHx|g)u&Ma)T?)=A2zA#6W$NPd
z7-h8RHG>ir%17OEOgn=tK3`RCvp50-xmU}^;uv?fb$UVCXlx6=j+(G?nhNcU(QawS
zzQpA(1NZTyh?|8Vmo>>?#HmKYLCeF5HxBj$#DL~v2TeVTT`4jJC)~`#NX_Icp@jkq
z@ud%^4R!mB0P;CK3Jc(4eO8ZY7M*J}K2iC)Qp{gbZEx!nEhj%bxUjGs^bX%TTQIA`
zef=~}%z!g76h`=UlH4}@x~XukX+KLE+_WF`=4-*Mas=sVGpjiKx{ZwOdoQGAx^%6r
znPW0h&3xH(V4zJ=aoq+J`f;3nx_Gua;`*bO)uSIvVxC>6O4!euxxcX@Kg3qQew+J7F?(N*ybJAhr)9Mh&wX*q}vM7SNI_qG&0fxCHQU=8yjB1xn)Wpp}
zS%y*r4fI#Dk=EC#^X_eHX||>_U3V(6pF)$he}AH)ouG{+Za!!v{`bBENH=N_RySp@
zswrfpF1J$tzTn~H-YyWAC!;R(rEnF8m)$-;HF?t{$5pDbOb{$0Zqj`(A%ov%+tOgt
z1i1BACU~&tYuu|zl~}~|am2TKYQy__{$`~R@Np-i1{20B<2Xpj$5p}UwcGqCxG3t&
zs3R4{zuBn<-XGJ#n0WLZx&X=WYAKrL)Ep>hww#H(sdCV=qHUtNd&w+jU*zxe^(}Y8
zj!&wv|A`HJE(#>J*2Jsuw(sdqI^y$-57=z<7scwWK-o-Z=irM{s}e@Z$r-=Q4X~~m
zoxqJ(A(QhcB`9`vd40O+;4X!tyCvde3ckGr0m6I%6=P3xBZz<#uGLp$WD>wcNClG#Ys0Y%@#jfqjBc6n3bGwyV12lUT@
zjih3((_q{w{`(80y5?{1cYjoON(2%%Ck}i)r@`$>z=gpPHqYv7CFts;-JY=XZ{3sv
z=Rhj}6KTO}d?nQ^?H|yn^DtWazWps>YggIUg(F=zmoMxX(ZN3dU{n)q9`W1*0k1j6
zT##JE19wo1TCcGhP;ZFW$2uO;q=Rn#4)O<_F9j6M;wd6ixE1F=Pq`a_*S?G%-bh+o
zY>XPth%^(L3Cvb46-(HfgadQLNZkz`0+Y1G$cJSCe2ju$76Ajqw}PU%u@vZ|763Lo
zDwfYiD6U;&>=0tH#b*CRm8u@B>@$<4ut(g-i}&V_6F#-8pQ$(x({UM6WZCSbrIvw2|SqF1ovXtLsX
z)^pg>p)xy(aTB
zj0Jo?Ce)LOy)+zy--j^VE>;w>in#)}$t#Ipo~BlS4uQNjz>T@_omZ}L6BygL@uMvt
z*vz-Yqst1|2H4uW@#ueL$ew_vgP5SVNq@_~v!t76=Y!Zr$uYApz3(08P)!p02z3@bmRfZqAG&j1&3nsgDI$=td&z5Jv$l~y_F{*X2S
zf56)prjJR($3?1w6bq3lAaf8thASl7;&m}={6C??>XGWpM;uIS7s+>)TVmFJv%a2D
z1E2ob^5suo;9{ITdKwdGiFtP79~%Q~z-`*CLtoQQ=>B-1q;eF4l~ecgQqPDc
zIgqUBiTLE;wsyrTM`#9j%`ty<4-i@KJ
z(2gr-NmjOrZC-64MKNjFBpLI$(;6rONW>Hw7p7g4K<`ZFs8kvE%W=fmha4BhUiD6O
z=Vc}|a}+FUzq%D@v7`m(UlbU6|5DG8vURcNKRG35MCPAjysy^A#GM!OO7JnZvi54g-KgQ7ra*HOX6<85
zVwk-agm-rJsR7`OT!51>$rHuwQrzUAJUgQ28l$zaBzkYoQGowVr$skHQ`
zb7k$pRo5KSDhB93P45D-5oujqtoNN;EwK+g5pW1O;=8eMetN(3Y0uUal^t8PMt)C4
za#EEK<(uQVUo5JQL$6|uFu$s-)9AvtVEj~51g0$tm&PgClFjwrO9}Zvg)o{W3T6->
z3p|o*$sn_R6!L1a+Xf=#ft}2jECrTA=dH1R2|WpN=cx=QnA978qq^lk*J^zAu}{Fd
zSKWpH?8p1+VwPv}T{5C}RH}}KX87-{HVXDD^tii{@aBhuCGNinI=!^J59M$AT})od
z#^^!gI+?&XjAfJJ%IDu%5RrAJ;o^{M>(Y*sk;Z}O3>8cvX3R$
z=k<@C!)9I%$e1$H8GRGy|CA)0y7?OuvNO%6XA{&PB9eNw*Rpvwo`xPjdYCRB+FXk{
z8d|0S<9v%w86sBVFE($NaPfC(-FIP@QX7)k?_xFl)^tgFxa5837!p$XgVX9N)QjJM-w%bGc7zJXieT*(w2w7aDsB116d<
ze1~9^x1xZA8mX@7z8lnqZXle#y)7ii=bwc5h~TJTqur0Yg|XpyeT*tTW*2oiq+l)$
zpJ1&Y=W*-34(3Sw#`f?~e7roLKk0q7ievs{)@*-20-|znDI_o3UH>U7?+E}%$Ua*(sb;TRXLm5t9~INGaOER_rx-j@sx&~F
zybp7~8{9W8Q4vHMevM<&w+gPc#L0CQBTq!jwID1=<`oifU#4tZ=2$RKEeAB!FeWO8
z*mi%09f_A(mscp~iVt3iL>iFR~{^5XhdzZb1Z?Q*<${&+1aAmdzMZ3zuyivtSXSEB3;+jC(O;PZ>0su*jjk;py{d+CCU++6
z%CyY36k|;C^^=q&TWg=97n^|sy^|`@7G+hxSx&24afbjTZj=)Cqk4W7^52DSfINJY
z_uL@qEmE?|_vH<3g08J0J>gpRZx_`nc^9Jx&0{TE?_sU(H{i%5bbJ
zZ4(~p3|`bfrhmrqn)%=cw+8;4Bh^$#1VCXPKYD`ShahG2%k_CEuNHVPR6yt;TTF`o
z2~+?A4#4%+R??2wS8;j%w*KIW?NG===azKEhn?4UZSx)OycK`?3VaJ=kiHWAxPkqa
z;OpiUK#7uNUD+)a{{ndAwk+s|ZJ94gCwzB2=nseB&-*;3<#iyPddHi}^P(N=PSEo0
zg<1KkC>;%tk|yO(7q^BmrZP+ZO|v?byIuqCsZQOfW>7wPZ2FI;?ZYD@0bVzm)p}8m
zhokjWJ}&;U3+jtVQf|H|tj`vbYT-Xwnu9q0Fl>YTM!C4hSr*bL>?vv#qn|wC99rxmAUcbV4|NfEJJ!}8R!&iiUZIf2;Jl1
z%eF0((UB9;{)U`4^~Xh)frr9AtY3&SuKp@(0$BbF`cvwquF0QA$}(~
z<2Oc&M^U4G^E!Hd4=jplni*1a+u^1kTcnq2txsJNDAS7)Zk5zvGv8&CUS3{9-JFJE
zW2fpJwixga*$!U_W<;g0oy>&!ff?jOvTAv`#j{=6q?4rO>4;d%45Xh1c@kS9aNRz9
zVQ2gm$LfVGd2L!qzd>HiBsYt_1zY4m>84#Smc)c0xWoCQ0rw>-i1unT+bU@O0`4v6
z)jaezx%J2=8d^)9)A2_KWk_Q^;*21JWVFnU(i?TJuqEdB95Eh^&LR6{*wxInm`e>*
z$g`|#*4*O$3r7V3nk5n6-ki8w3dTC>CUi@{Cm$R~Wvztv^-$c-oW4W9gizp{?6;(Y
zvi!D9ek2m?{ZRr+^Wj*W5R}JeyvDe2*!-`HL@gS4Z}GWF{`y#mSk~FJdmux;>YD6K
z4x76!TSqe3cis=$-`Q@d)jQ8so@Uocw&o5J2{4Xae*i3hb-F);{p3}tEicL~p={@w
z_gfd-_CH2xtg=-7sW(ViL~bf9QEPkAZWa@vE}d~vdQZ&jMeHQ!#Xi)duNqg#((PwI
z5HlvoT>x=bmVN7_e?98e=AbeQ_)Z2a`(q$K1S@G(?oUR_3|bLA-gW#RKalN?UJs*%
z!85s6{zlX6AZigDT0Ll2i(PE=gtN*>g~_7Rw^>&AZHpnywM=#5_r}1B
zzDiI=&Oq(Q3Q(;UiZhVCHzHBdIeb1PF^V{>;oCbv{ZXWX6b3OU
z^e;v{Gy9%U#y;Cd7rlliWJTFZmfhlOp|h8h=ZUA00Z2?z^VRS#c(gB|XoVjxv?HPL
zQP5K!`-$x%t?LD;%{Prp7zRV5WbI@}6l5eovv}tN)G1U+Zr13pcE0VI-BKeBtc2&b
z3xPJKrU&(;?L}_S930IWAUNP-;<^c8YcFEE$AmgeTPXv6M;C3CVszgD7Rbj9+50u{
z<=zySu*9b<*T{>$c)0?T{6gyqRi=`8ceHEHNbJ&)k9HI-4i}JI5=p~81(tpb$bQUf
zQEfT3%s1hst(%GLufWd->d>?zINk*E#I|NT6$^)+*VmvkoMP8>LLiMD2^YJuG*)s4C~%dGjBQBz*aqV6LHfJ#2k{pA}ixB(6WnMS3
z6i3d?LJH&-%eAABInKXwf^xd$l}Z?Q0cAX#qc(e;oi?F}q~E$8rUVzJ
zTm9IlJ7D`BgzBME{1P62gseW{xZ!BnR@LZM^&58UXb&Mo%3XBMz|qeXQT-yNC#Cgf
zqWcpNX4qj_VzK;=n1(vWE`RKlJL!{1%FJob#rQ&(VHL)n1Tk-Fv?*)af&-c?TM;t1
zp)s^dOebhAohV4QARmJCbVBTlR@X3h4mP!JVE3FCE;DNpg)zm!bsOedE1hbo
zV{}L_FE5d~vvxE~zS_8ZU{rUeZ}xsi(+Y?M+d;+K6V=>DgABDthZ@%j
zA6vAdg_nFM!I83ff}z%7!NnmPX=VPZZbOs8df3O30k0~D&(k3nuQtI9o3Q2e4>(Vo
z_ZE^|11B2|_<_nTa`x}o6R;{*z&O336oY+`0y|=v`ocw_ICkS#TFn-Vq=~>Na55=`
z&CZe14RloKn!VFe=TuM`tFm^TGW>_w#_=dCas7(DI?w^PFUBeXGQ5%I3He_2TkxZ44l%->>bb~OXp3FqzE43AGO*Cef
zNtdrEE%zE!#=0ct>kQKx6MlFC`j&4|qgVU4+YDe8%By_(VF{p^_02f1e$(<4yB1C3
zIKs{|SSjM;qCB6nR6y{jc*nQncNCVD1i)Rk$P2=MCY$CNja?-2CS9Z|TbcRahKgz#
zP7(uht4~MxT)#_)LzEuy3)C9t1qFm*2uh0hzh+fv>Wg9HnZY3#2(X3bF6QV6-%_-V
zM`gXyLS99`4`$2{Ouw62E_T{P4mkV``9+3saaLGL#p&_vb`EE#hFmbQYl#LxLI7q9QN9;0{Oc
z!8aRdh7SIUFF8)Nq)KNvq{O$~lqNqQ@L)dyeGP+ZkUt*?(h6aZ`{XC#7|(xJXO$p!
z1(zW9+k`2YevHl^dA?ydsQS1dgu6!bCdz@0Jg6uMO+yXB8uH=@Nu@Y}D*995t&Niu
zz@$L|OI4=@Jc*mp@%=G$OxplF0QcQkVU7?zizRjVox!s7(NC;|q_`cqse7KQ^2U6I
z+66J|R^_Ty6V&v$I@H6{vz7Zz`RmQ0>}5V7Zhesv%D{*{Hon)iBOa;_^g|~NwzbWw
zE*7ce;K!t0G^WG*ktS|L4J4oyUEQCK3YIIC!2@g5lWniA|4qNE-YNEGR?
z1AUc@=(IO>G;wkp=->le#^dJ7&5M-@X?FGarkoYWNPt?Tv8q$^E#=m{hsHTU3MYA@
z{q-h7pT9Q+YqT+7YtK9L;hpx`9>-1y+Cx9ZZ4EKB*pyB?a6{CnJ^dMI+%$4G4>FL6
zQ#}@seBotiw`i)Cnf7fY6#uuxivJV8gk&(_|dyGJB^JQi3>^##CURY-VSDyZ8vmQR5`>2@t950ijlN&-u@K
z*hQDf2GTKkLAvO-ft~Dz=3O&CRp|S^t3mBk{iYdaaw~-wW`dEvxxZdQds+na(0SZG
zm#-G*)5s<1S~D?(`skMRfyA5*2m49kMq=>E5fchcRrC|GcJvQ4DB^3n?VAW~5aReA
za&_Cht$TxZJryDQ#Z58aH@o}2H6!;WWd%=H{=|@}@ZHuz{7P&WtGu8OP~leIB?k9J
z>yu0p&p;+>o;JtByM74UjE%JQ{+5-Xu|fjV-5?p+F^z}2b6E*JVb>?Y+%Or>=qKooZ16zi~
zAS?lQawA(Hrp20=!yBfI?Zz&Tji;8EAWzJ$C(;|6#wJ>+lfU~$+CIfGVORZ?+ic#U5995V_RhUEcvXrG^OL(&fdFc|8-m56Tz=G&2dQmqQ}>?}tD=;m(uI~E
zsd2+g?2gx#j7ak^h;J}fMwnud7x?EE+BM&9md6>91^oKOB0ci^k};o)5jDfk%L;;1
zZ|n$suE(CkW*aA<_4-dNcPx5D?>VWJT_3
zoKaK+L8Lz2z!Qh28!OXa<;6nMM(w)DNl_z6jF>N~Rb!8m*=-)?WtI%|@|U?y6|x&I
z@`DzPf{Gn-k?dUq@0eaN?tBDRypUwa!6O|a5Az)puLcR*dtt5n$Um}DQq
zl|>XEhab+eB++T6xYM=_oaQ{p5w1Pck@}jp-mWtvA~oJ<&6yT@aCH@RqDPoB8?-pw
zn1|72X4tP))sHggD2$82HK>g}8yvN2oeo!dQ?c@)Snt-bP<{Yb3PUcTXx8>SNyb--
zKU}UPy00Yhrj1b*MF)TOq79PM42~mpAz+L+bl>e7LjFv7>sEU%LqvE2=P1pTJIdg4#a%IlNwQIO~n4{MLds&-heBM4=ZW3!>0lblO2AyHEf^N>|9o9>D}=g?nu(R
zCWnfrw}%0bQ(=(1Uniq9;G~*19e+{t)PSDcd(Sn2J5;=5$#tOXmq|nFK_Gqrf4{0!O!Icw
zZ_n^KCQeYaRP{(G;XS4N&E~Kqo_@;A(QXa3w
z$}}8$KH!iH0&a*_l071^f8Mkf6^3I`sH{%+EG5j+q&I5;_
z#L*qEizFEnO>;#`NU4tt^Erib(I|?+X`HVI-#2?$JLX(`RfCN5Eh$vQT3}X(PdcfR
zXE0L~QKLh|Rgu#{L+s6~mzP09g~+&}5o)Rjj$@zymRjUkfD18io4<;?B{42
zrPPX`0lH0DfvQC{CM-Yjw45GSnX7oZs`4-I${fwliz+KCSNu6$lQ-ygdoipkb0eC*
z;VWu&A*tvF?g9+gA@rT0YprB`8+1-sG~C(8gsq2fnLP%{#M@09%#4pB{SvEt=5*NK
zNJ!)F(Ro4#!szs_Q%SE^8`s0C@8LhNLSC9i3vw(dhdIpl_5z*SeTd~bN&|Y5{S7@?
zgZr6M*WTm^&+Tr$Nbb*S#!oMMu*IPiXX?H;2>*J(Ow&;wXSmq7;+mbXQ&3aOyk=|R
zS%GpxlY=sKcnfR@ztU>v9q3IlN^&@I-35CZ{E$ZJ1Oi8f}Pz-@iG#xe#
z68|K33%CroUzSWlb};I~kb#f_WlHeljdMT$*?pPg5&+oD?+gA%G<-=r_qQNG!AO}_
zDf>hWfRksqM+a#M6ujPF5<+A++jAA2->5*kL43(29LJ)vw!uBmOfp9A5k63bzyFL_
z$1b>a93eCnF50Ox?nKtLzHjs#W4WhEn(REIb5nyLB7;2+35%%9j?Xto3oq#+1|1ip
z*Due=DoY^@(aPwfD4U7mr;e4YI=Hd|jK?V9XAp#_#eZ_T#4FK180OzZ*b6F&*~R66
z&JfwL(9CaL&iOwyDlexSm>UtI4n5|G=aI6CS8c+_mV=fu82UthXR{LdBy=!z2;4V6
z$In^l+8bsJMqT&4){i1IRe(B9ae6Zlz93esP8h^LVuPPg4n9jPmQa+#T$3RSqmUzJawS_bO(l>
zxZIc6L$@~Qo=aydCCD9d4D<_TK4^7yj68dHltCS4sg%@bBp&0%!na62zupcRj?VpB
zxv-AYNQl~ozMNo^xt4I%RdzF9RS|ai1@f`g(}X-W!MHb9YI&h&?jBp4tA~0uA#8M-
zYAp&)BFv}qf1jAuvR@dbmesc7DP)b}ftozf9#dlDOgV4@>gizvfAqk`QqtE{f=#9g
z(bIdTGJ&Y00TTEG_-OQGjCc+lRGZ@hYum5`y>K+I&wy
zN&?9C#a)z@E_V8LN9YerV{eI}x$?nPo53&JMl!DW+z04?=Q}mJ-)L~1CqbHaJ{9Og
z9zY^NczaY4oOr*aM|$%^=sf@?`L0O$Ul?ALr1t|>ta|3l$K4e9#DTspe3cjR{kA_wvnc((}RD6%mDVm?IT~
zYo#_C)x*`R6JgTFW1`XhTYILWfEiV`NwLF0fc%8c=M0IZPUBdRa)b3vYqZ*bLrR9Na!>r?@xKrKU$Y
zn@|k(uQ~Y%(p+mNzN|z)hW5v5f3j%rxBFUDY#A}a`h$>SxkX?-0kZe<=g3hEB|+tY
zUsO_27y?pRrXdsixYky>a`z?3??M+ocJVG=Ll`;K{IaX8_OEJ-Ec!5fT7Vq=HnZ3x
zU9JUT#}bh>&A^+clmbQ0_~f3PN))6msh~sS$M-hBk?Ne=E3vy^%qTRpWhC5CXxHa45W87r8l|Q1_po+i
zE>S4;sSrEeS?NUEBf==(ej;3QTpxv8P+FKAoqb#Q5Lw`=@Czu-(~C+1QAZIDNp|w_
zu*5UOxRvNk<)EI^Eu!l@{vjxI2lClkIfm{ij~1BiU_6dSTan2G%tN*mqy4$d&pkyfp{t|o+mH&MeW@Q(po
zVEqde3Y!v8dgZnC0i0=>EernMgiMqihJ=b>*4{4OiIvW*m@yw$K}KawJx?Nug)Xc%
zZdd%c_Y~BIVRs(xpxqllvFh!07W>X#iu1kA8Z)TCv&W_ErrBlI==Xp(8uF<#(i2r>V`7Blf=(Qwxc*pNZ;
z__RKH1XRoGpc?xe%egoJVZ`D_uF1Tb`4S;1bJ4v5<0WZC`V191UA8|DLUs<1j)|)f
zbcSyruh`MF~1n)h}1Yf-d5-UH)sUp5>1@4#9l$hdryOJ
z<-QYcudshnpO}O^b~HBVMs)xqC?N*p{(gP(@dO#mT4U7s4>inx@g^
z(O(su*I^W&%7yuwAE=9R{obI3$w9)M%9}dMQ1Gjj5&1v#27=KxmSKapuD8DR%TCTQTy(5E*p`j8n52KmSSEjI+Vp;WaZJ7
z-Vg?rqN=U2NNj)AY|A5vEAr-$dQA+e?X>^m7Gfi>64mfT
z8aiDg`-u?mUx^dor*l@dCRnCIb^9$0FwHJGZ?ib=iI!8~7;|S8#Yx^pEg@Wa5Yx3<
zp9{Q`xZX~Tsi;PqxDs7!YT8GX(8c?pw$o8J7*fZf$5Ff}b@$N{K5-GSvdO6v0@RP~
zXG*pWo7?tm)!k_FUEA{=P$0~7ZTG!-?}#Al<=^A6WZj({!6GmvCGe;3HKza5(5&y`
zWdD0i6+kjSUU=V)sS;vXr}4X3X;1if1d_GjsWa6%sC!gUYTVx@kJh_vo8=0u
zC9vIzS4x_1asX8Mlg${Pz|&F}uZq*7-=9FkZIcRrMPMnrB4oTiitmMA$oF=ljjJG!QD@k>By}nFQGuv`!rI)wlh6!@N&}aIYo=;|uPc
z$6Ab{{r-M)SK(p7lyS5b+a+b%;+sbK-fhxWv77HFb_v_Uo^eMWf`5VlhDqXly^7S6
zB()@<@KF$UTrlSRSl0SC(%wV^7);wHI{+1a1}A?DrD^)wMV<2F&nKZc
zW{)5Xaxu~7%@!qsQZ7>M<@X2xeZLKmv0HDnL*0K=ZCX<@uyJ
z5#C`i5}ppGQnF!it-yLTRO@{%-rpE%|FxpI(nL0tA4UFI7n@`!28PH2@^q#1c%h{g)lOSc|*!eTH=9f6Tmf*g-doWV|N!`TMzf|MdXo|7rT-|HKOH-($r7
i3lk|FV@V^cYa&(i5IciqWngTv(oxS-9@U5ZQ~noNi$lWz
literal 0
HcmV?d00001