diff --git a/FlybyScript/AppIcon.ico b/FlybyScript/AppIcon.ico index fe67c5f..55de7fd 100644 Binary files a/FlybyScript/AppIcon.ico and b/FlybyScript/AppIcon.ico differ diff --git a/FlybyScript/AppIcon.png b/FlybyScript/AppIcon.png new file mode 100644 index 0000000..c829303 Binary files /dev/null and b/FlybyScript/AppIcon.png differ diff --git a/FlybyScript/Experience/ActivityHistory.cs b/FlybyScript/Experience/ActivityHistory.cs new file mode 100644 index 0000000..34796ab --- /dev/null +++ b/FlybyScript/Experience/ActivityHistory.cs @@ -0,0 +1,71 @@ +using FlybyScript; +using Microsoft.Win32; +using System; +using System.Drawing; + +namespace Settings.Privacy +{ + internal class ActivityHistory : FeatureBase + { + public ActivityHistory(Logger logger) : base(logger) + { + } + + private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Privacy"; + private const string valueName = "ActivityHistoryEnabled"; + private const int desiredValue = 0; + + public override string GetRegistryKey() + { + return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; + } + + public override string ID() + { + return "Disable activity history"; + } + + public override string Info() + { + return "Disable activity history (prevents Windows from tracking and storing your activity)"; + } + + public override bool CheckFeature() + { + return ( + Utils.IntEquals(keyName, valueName, desiredValue) + ); + } + + public override bool DoFeature() + { + try + { + Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord); + return true; + } + catch (Exception ex) + { + logger.Log("Code red in " + ex.Message, Color.Red); + } + + return false; + } + + public override bool UndoFeature() + { + try + { + Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord); + + return true; + } + catch (Exception ex) + { + logger.Log("Code red in " + ex.Message, Color.Red); + } + + return false; + } + } +} \ No newline at end of file diff --git a/FlybyScript/Experience/FeaturePanel.cs b/FlybyScript/Experience/FeaturePanel.cs index 2db8e57..a0704d1 100644 --- a/FlybyScript/Experience/FeaturePanel.cs +++ b/FlybyScript/Experience/FeaturePanel.cs @@ -87,7 +87,7 @@ namespace FlybyScript { return new Label { - Text = feature.CheckFeature() ? "Feature Enabled" : "Feature Disabled", + Text = feature.CheckFeature() ? "Accepted" : "Declined", AutoSize = true, Font = new Font("Segoe UI", 10, FontStyle.Italic), ForeColor = Color.Gray, @@ -124,7 +124,7 @@ namespace FlybyScript if (success) { logger.Log($"{feature.ID()} enabled", Color.Green); - statusLabel.Text = "Feature Enabled"; // Update status label + statusLabel.Text = "Accepted"; // Update status label } } else @@ -133,7 +133,7 @@ namespace FlybyScript if (success) { logger.Log($"{feature.ID()} disabled", Color.Red); - statusLabel.Text = "Feature Disabled"; + statusLabel.Text = "Declined"; } } } diff --git a/FlybyScript/Experience/LocationTracking.cs b/FlybyScript/Experience/LocationTracking.cs new file mode 100644 index 0000000..5662677 --- /dev/null +++ b/FlybyScript/Experience/LocationTracking.cs @@ -0,0 +1,69 @@ +using FlybyScript; +using Microsoft.Win32; +using System; +using System.Drawing; + +namespace Settings.Privacy +{ + internal class LocationTracking : FeatureBase + { + public LocationTracking(Logger logger) : base(logger) + { + } + + private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\LocationAndSensors"; + private const string valueName = "LocationEnabled"; + private const int desiredValue = 0; + + public override string GetRegistryKey() + { + return $"{keyName} | Value: {valueName} | Desired Value: {desiredValue}"; + } + + public override string ID() + { + return "Disable location tracking"; + } + + public override string Info() + { + return "Disable location tracking (prevents Windows from accessing your location)"; + } + + public override bool CheckFeature() + { + return Utils.IntEquals(keyName, valueName,desiredValue); + } + + public override bool DoFeature() + { + try + { + Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord); + return true; + } + catch (Exception ex) + { + logger.Log("Code red in " + ex.Message, Color.Red); + } + + return false; + } + + public override bool UndoFeature() + { + try + { + Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord); + + return true; + } + catch (Exception ex) + { + logger.Log("Code red in " + ex.Message, Color.Red); + } + + return false; + } + } +} \ No newline at end of file diff --git a/FlybyScript/FlybyScript.csproj b/FlybyScript/FlybyScript.csproj index ce0e4b0..0524734 100644 --- a/FlybyScript/FlybyScript.csproj +++ b/FlybyScript/FlybyScript.csproj @@ -56,12 +56,13 @@ + Component - + @@ -81,6 +82,12 @@ MainForm.cs + + Form + + + PluginsForm.cs + @@ -104,6 +111,9 @@ MainForm.cs Designer + + PluginsForm.cs + ResXFileCodeGenerator Resources.Designer.cs diff --git a/FlybyScript/MainForm.Designer.cs b/FlybyScript/MainForm.Designer.cs index 25c4c51..c57eb2b 100644 --- a/FlybyScript/MainForm.Designer.cs +++ b/FlybyScript/MainForm.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); - this.treeSettings = new System.Windows.Forms.TreeView(); this.rtbDescription = new System.Windows.Forms.RichTextBox(); this.btnTogglePatch = new System.Windows.Forms.Button(); this.linkGitHub = new System.Windows.Forms.LinkLabel(); @@ -38,6 +37,7 @@ this.linkLabel1 = new System.Windows.Forms.LinkLabel(); this.linkLabel2 = new System.Windows.Forms.LinkLabel(); this.panelMain = new System.Windows.Forms.Panel(); + this.treeSettings = new System.Windows.Forms.TreeView(); this.checkInstallationMedia = new System.Windows.Forms.CheckBox(); this.linkChangeExperience = new System.Windows.Forms.LinkLabel(); this.panelForm = new System.Windows.Forms.Panel(); @@ -45,31 +45,6 @@ this.panelForm.SuspendLayout(); this.SuspendLayout(); // - // treeSettings - // - this.treeSettings.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.treeSettings.BackColor = System.Drawing.Color.White; - this.treeSettings.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.treeSettings.CheckBoxes = true; - this.treeSettings.Font = new System.Drawing.Font("Segoe UI Variable Text Light", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.treeSettings.ForeColor = System.Drawing.Color.Black; - this.treeSettings.FullRowSelect = true; - this.treeSettings.Indent = 20; - this.treeSettings.ItemHeight = 25; - this.treeSettings.Location = new System.Drawing.Point(36, 168); - this.treeSettings.Name = "treeSettings"; - this.treeSettings.ShowLines = false; - this.treeSettings.ShowNodeToolTips = true; - this.treeSettings.ShowPlusMinus = false; - this.treeSettings.ShowRootLines = false; - this.treeSettings.Size = new System.Drawing.Size(865, 172); - this.treeSettings.TabIndex = 200; - this.treeSettings.TabStop = false; - this.treeSettings.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.treeSettings_AfterCheck); - this.treeSettings.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeSettings_NodeMouseClick); - // // rtbDescription // this.rtbDescription.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) @@ -95,7 +70,7 @@ this.btnTogglePatch.FlatAppearance.BorderSize = 2; this.btnTogglePatch.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); this.btnTogglePatch.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnTogglePatch.Font = new System.Drawing.Font("Segoe UI Variable Small", 10F); + this.btnTogglePatch.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.btnTogglePatch.Location = new System.Drawing.Point(629, 484); this.btnTogglePatch.Name = "btnTogglePatch"; this.btnTogglePatch.Size = new System.Drawing.Size(222, 40); @@ -133,7 +108,7 @@ this.btnMountRun.FlatAppearance.BorderSize = 2; this.btnMountRun.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); this.btnMountRun.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnMountRun.Font = new System.Drawing.Font("Segoe UI Variable Small", 10F); + this.btnMountRun.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.btnMountRun.Location = new System.Drawing.Point(403, 484); this.btnMountRun.Name = "btnMountRun"; this.btnMountRun.Size = new System.Drawing.Size(220, 40); @@ -149,7 +124,7 @@ | System.Windows.Forms.AnchorStyles.Right))); this.lblHeader.AutoEllipsis = true; this.lblHeader.Font = new System.Drawing.Font("Segoe UI Variable Small Light", 21.25F); - this.lblHeader.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); + this.lblHeader.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(35)))), ((int)(((byte)(115)))), ((int)(((byte)(193))))); this.lblHeader.Location = new System.Drawing.Point(30, 38); this.lblHeader.Name = "lblHeader"; this.lblHeader.Size = new System.Drawing.Size(780, 82); @@ -184,20 +159,20 @@ this.linkLabel2.LinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(127)))), ((int)(((byte)(186)))), ((int)(((byte)(0))))); this.linkLabel2.Location = new System.Drawing.Point(233, 558); this.linkLabel2.Name = "linkLabel2"; - this.linkLabel2.Size = new System.Drawing.Size(44, 16); + this.linkLabel2.Size = new System.Drawing.Size(51, 16); this.linkLabel2.TabIndex = 208; this.linkLabel2.TabStop = true; - this.linkLabel2.Text = "0.13.81"; + this.linkLabel2.Text = "0.14.107"; // // panelMain // + this.panelMain.Controls.Add(this.treeSettings); this.panelMain.Controls.Add(this.checkInstallationMedia); this.panelMain.Controls.Add(this.linkLabel2); this.panelMain.Controls.Add(this.linkChangeExperience); this.panelMain.Controls.Add(this.lblHeader); this.panelMain.Controls.Add(this.linkLabel1); this.panelMain.Controls.Add(this.rtbDescription); - this.panelMain.Controls.Add(this.treeSettings); this.panelMain.Controls.Add(this.btnMountRun); this.panelMain.Controls.Add(this.btnTogglePatch); this.panelMain.Controls.Add(this.linkGitHub); @@ -207,14 +182,36 @@ this.panelMain.Size = new System.Drawing.Size(943, 592); this.panelMain.TabIndex = 209; // + // treeSettings + // + this.treeSettings.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.treeSettings.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.treeSettings.CheckBoxes = true; + this.treeSettings.Font = new System.Drawing.Font("Segoe UI Variable Text Light", 11.25F); + this.treeSettings.FullRowSelect = true; + this.treeSettings.HotTracking = true; + this.treeSettings.Location = new System.Drawing.Point(36, 168); + this.treeSettings.Name = "treeSettings"; + this.treeSettings.ShowLines = false; + this.treeSettings.ShowNodeToolTips = true; + this.treeSettings.ShowPlusMinus = false; + this.treeSettings.Size = new System.Drawing.Size(865, 172); + this.treeSettings.TabIndex = 210; + this.treeSettings.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.treeSettings_AfterCheck); + this.treeSettings.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeSettings_NodeMouseClick); + // // checkInstallationMedia // this.checkInstallationMedia.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.checkInstallationMedia.AutoSize = true; + this.checkInstallationMedia.Cursor = System.Windows.Forms.Cursors.Hand; + this.checkInstallationMedia.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.checkInstallationMedia.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); - this.checkInstallationMedia.Location = new System.Drawing.Point(34, 528); + this.checkInstallationMedia.Location = new System.Drawing.Point(34, 527); this.checkInstallationMedia.Name = "checkInstallationMedia"; - this.checkInstallationMedia.Size = new System.Drawing.Size(245, 17); + this.checkInstallationMedia.Size = new System.Drawing.Size(249, 18); this.checkInstallationMedia.TabIndex = 209; this.checkInstallationMedia.Text = "I want to create Windows 11 installation media"; this.checkInstallationMedia.UseVisualStyleBackColor = true; @@ -255,7 +252,8 @@ this.Controls.Add(this.panelForm); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "MainForm"; - this.Text = "Flyby11"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Flyby11 Upgrading Assistant"; this.Load += new System.EventHandler(this.MainForm_Load); this.panelMain.ResumeLayout(false); this.panelMain.PerformLayout(); @@ -265,8 +263,6 @@ } #endregion - - private System.Windows.Forms.TreeView treeSettings; public System.Windows.Forms.RichTextBox rtbDescription; private System.Windows.Forms.Button btnTogglePatch; private System.Windows.Forms.LinkLabel linkGitHub; @@ -278,6 +274,7 @@ private System.Windows.Forms.LinkLabel linkChangeExperience; private System.Windows.Forms.Panel panelForm; private System.Windows.Forms.CheckBox checkInstallationMedia; + private System.Windows.Forms.TreeView treeSettings; } } diff --git a/FlybyScript/MainForm.cs b/FlybyScript/MainForm.cs index 75e4aa1..03565c0 100644 --- a/FlybyScript/MainForm.cs +++ b/FlybyScript/MainForm.cs @@ -25,6 +25,8 @@ namespace FlybyScript // Set the default view to the main panel SwitchView.DefaultView = panelMain; + // Subscribe to the AfterSelect event for importing plugins + treeSettings.AfterSelect += TreeSettings_AfterSelect; } private async void MainForm_Load(object sender, EventArgs e) @@ -34,21 +36,57 @@ namespace FlybyScript treeSettings.Nodes.Add(nativePatcherNode); // Add Method 1 as a child of NativePatcher - TreeNode method1Node = new TreeNode("(Method 1) Inplace Upgrade via Server Setup"); - method1Node.Tag = "Method1"; + TreeNode method1Node = new TreeNode("(Method 1) Inplace Upgrade via Server Setup") + { + Tag = "Method1", + BackColor = Color.LightBlue + }; nativePatcherNode.Nodes.Add(method1Node); - // Add ScriptPatcher parent node + // Load plugins await ScriptPatcher.LoadPlugins("upgraider", treeSettings.Nodes, logger); - // Add PSPatcher parent node (for Dependencies) + // Load PowerShell plugins PSPatcher = new PSPatcher(); PSPatcher.LoadPowerShellPlugins(treeSettings); + // Add the Import node at the end + TreeNode importNode = new TreeNode("Import [...]") + { + NodeFont = new Font(treeSettings.Font, FontStyle.Italic), + Checked = false, + ForeColor = Color.Black + }; + treeSettings.Nodes.Add(importNode); + // Expand all nodes ExpandAllNodes(treeSettings.Nodes); } + private void TreeSettings_AfterSelect(object sender, TreeViewEventArgs e) + { + if (e.Node.Text == "Import [...]") + { + OpenPluginsForm(); + } + } + + private void OpenPluginsForm() + { + var pluginsForm = new PluginsForm(this); + pluginsForm.ShowDialog(); + } + + // Refresh the tree view + public void RefreshTreeView() + { + treeSettings.Nodes.Clear(); + + // Reload + MainForm_Load(this, EventArgs.Empty); + } + + // Expand all nodes private void ExpandAllNodes(TreeNodeCollection nodes) { foreach (TreeNode node in nodes) @@ -58,49 +96,12 @@ namespace FlybyScript } } - private void treeSettings_AfterCheck(object sender, TreeViewEventArgs e) - { - // Check if the node's checked status has changed - if (e.Node.Checked) - { - // Add the node and set its status to true (enabled) - pendingChanges[e.Node] = true; - e.Node.BackColor = Color.LightGreen; // Mark the node as active - - // Check the type of node (either JSONPluginLoader/Patch or PowerShell script) - if (e.Node.Tag is ScriptPatcher jsonPlugin) - { - logger.Log($"Patch activated: {jsonPlugin.PlugID}", Color.Black); - } - else if (e.Node.Tag is string psScriptPath) - { - logger.Log($"PowerShell script activated: {Path.GetFileName(psScriptPath)}", Color.Black); - } - } - else - { - // Add the node and set its status to false (disabled) - pendingChanges[e.Node] = false; - e.Node.BackColor = Color.LightGray; // Mark the node as inactive - - // Check the type of node again (either JSONPluginLoader or PowerShell script) - if (e.Node.Tag is ScriptPatcher jsonPlugin) - { - logger.Log($"Patch deactivated: {jsonPlugin.PlugID}", Color.Crimson); - } - else if (e.Node.Tag is string psScriptPath) - { - logger.Log($"PowerShell script deactivated: {Path.GetFileName(psScriptPath)}", Color.Crimson); - } - } - } - private async void btnTogglePatch_Click(object sender, EventArgs e) { btnTogglePatch.Enabled = false; foreach (var entry in pendingChanges) { - var node = entry.Key; // So, The TreeNode + var node = entry.Key; // The TreeNode bool shouldApply = entry.Value; // Whether this patch should be applied (true) or undone (false) // Check if the entry is Method2 and if the patch is enabled @@ -161,6 +162,49 @@ namespace FlybyScript btnTogglePatch.Enabled = true; } + private void treeSettings_AfterCheck(object sender, TreeViewEventArgs e) + { + // Check if the node's checked status has changed + if (e.Node.Checked) + { + // Add the node and set its status to true (enabled) + pendingChanges[e.Node] = true; + e.Node.BackColor = Color.LightGreen; // Mark the node as active + + // Check the type of node (either JSONPluginLoader/Patch or PowerShell script) + if (e.Node.Tag is ScriptPatcher jsonPlugin) + { + logger.Log($"Patch activated: {jsonPlugin.PlugID}", Color.Black); + } + else if (e.Node.Tag is string psScriptPath) + { + logger.Log($"PowerShell script activated: {Path.GetFileName(psScriptPath)}", Color.Black); + } + } + else + { + // Add the node and set its status to false (disabled) + pendingChanges[e.Node] = false; + e.Node.BackColor = Color.LightGray; // Mark the node as inactive + + // Check the type of node again (either JSONPluginLoader or PowerShell script) + if (e.Node.Tag is ScriptPatcher jsonPlugin) + { + logger.Log($"Patch deactivated: {jsonPlugin.PlugID}", Color.Crimson); + } + else if (e.Node.Tag is string psScriptPath) + { + logger.Log($"PowerShell script deactivated: {Path.GetFileName(psScriptPath)}", Color.Crimson); + } + } + + // Synchronize parent-child node states, so when a child node is checked or unchecked, its parent node automatically reflects this change + if (e.Node.Parent != null) + { + e.Node.Parent.Checked = e.Node.Checked; + } + } + private void treeSettings_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { TreeNode node = treeSettings.GetNodeAt(e.Location); @@ -186,15 +230,14 @@ namespace FlybyScript string pluginInfo = $"ID: {plugin.PlugID}\nHow-to:\n{plugin.PlugInfo}"; rtbDescription.Text = pluginInfo; } - else if (node.Tag is string psScriptPath) // Handle PowerShell script description + else if (node.Tag is string psScriptPath) // Handle PowerShell script description { rtbDescription.Clear(); string scriptInfo = $"PowerShell Script: {Path.GetFileName(psScriptPath)}\nPath: {psScriptPath}"; rtbDescription.Text = scriptInfo; } - else + else // Clear description if no node is hovered { - // Clear description if no node is hovered rtbDescription.Clear(); } } @@ -213,7 +256,7 @@ namespace FlybyScript private void linkChangeExperience_Paint(object sender, PaintEventArgs e) { - // Linkoption gains focus so trigger a vivid focus rectangle + // Linkoption gains focus, so trigger a vivid focus rectangle ControlPaint.DrawFocusRectangle(e.Graphics, linkChangeExperience.ClientRectangle); } @@ -229,7 +272,5 @@ namespace FlybyScript MediaView installMediaView = new MediaView(); SwitchView.SetView(installMediaView, panelForm); } - - } } \ No newline at end of file diff --git a/FlybyScript/MainForm.resx b/FlybyScript/MainForm.resx index 063f8e5..5f4edc6 100644 --- a/FlybyScript/MainForm.resx +++ b/FlybyScript/MainForm.resx @@ -120,615 +120,30 @@ - AAABAAEAXl4AAAEAIACgjgAAFgAAACgAAABeAAAAvAAAAAEAIAAAAAAAEIoAABMLAAATCwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAr5J1AP+PGAD/7csA//W3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+h0AKGWcQAAAAAA58qHAP/y6QD2+mIA+v6gAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9WOAP/sagDLuXgB+uCRA//y - rwP+u34D8PSDAPD/tgD45ZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//usAP/z - qAD46ooC//+XAPnulwD/+5wA/+6cALA3UwDy0KsA+NmnAP/osQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/7+qAP/qtgD92JUE8t2CAOnKhBn23oyO+N+NvPbekH3lto0J5aiPAPTXkwH+7H8AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/+mOAP//sQD98ZkD9deCAOvMgSv55pLV/uyW//3kkf/97JX//euVi/j5 - mgD7uXwC//+fAP6ehwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADx150Ar8UPAKCdYgD/344E8dyHAOzPgTX65JDk/uiT//zh - jvn84Iz5/OOM/v/qkPP+5Y8p/+qSAP/soAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD17NwA2aqOAJBWAAD/95ED8t6KAOzQ - g0X65I/u/ueT//zhjfv94o3//eGM//zfiPv95Yv//u6Rcf/zjgD+86IC/f+5AP//sgAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2y5kA6OfcANzB - jQD/7YYD9uiRAO3SglP65I/2/uWT//zhjvv84oz//OGL/v3hiv/834f8/eSJ//7ojMS4y8cB////APP/ - aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD32IAA67BjAOHEgQH//8sD//SSAO7SgmD65I/8/uSS//zijvv84o3//eGL/vzgif794If+/OCG/vze - g//954r3/e+TNv3+nwD+5I0C/tKBAP/QfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD85GcA8NJjAOSvSgH//7EB//yUAPHWg2795pD//uWT//3ij/z94o3//eKL/vzh - iv/94If//N+F/vzghP/63oH7/uaG//3liIb+5oYA/cZzBP7//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+o0A+/ODAOzWfwL//6AB//+mAPHXhHv96JL//uWS/v3i - jvz9447//OGL/v3hif/84Ij+/OCG/vzghP7834L/+96A+/zdf//96IfM//OfC/8A/wD+95YBAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKWlWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//Z0A+OSHAOzNdgIAAAAA///AAPDY - hIn96ZP//+WS/f3ij/3+447//eKL/vziiv/94Yf+/eCF//3fhP/934L//N6B/vzdfv773n39/+iD+v7l - hUT/5H8A/8t0BP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/s0IAFf//AP8i - AAB3+rIC/r5Zs/OjQv/dkzP745Eu/+mhOP/qrUP/8blM//fEVv/6y17t+tVu3PjYecT43YOi+N6FfPfZ - f1P0zHg17st7bvfikub+65v//+WT+/7kkf//5Y/+/uSN/v3jjP7+44n+/eKH//7hhf/94YP//OCB//3f - f//93n3//N57//vdeP/83Hb/+9t1//zbc//72nH++9pu/vrYbP3+5HP//eJzY//gdAD+33IE//dpAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/wBtAPL3ZADW/9sA1NaSB/m3U8/3lTr/4ok0+9iKMPzZfiT734wr+uWaMfrppTn87K4///G8 - Tf/71Wr//umF//70lv/+85v//uuW/f32q///9rT//+yf+/7mkv/+5Y/+/+SN/v7ki/7944r//uKI//7i - hv/94YP//eCB//zfgP/9333//d57//zdeP/73Hf//Nx0//vbcv/82nH++9pu/vvZbP762Gv7/d1t//3i - cK3/71IA/8lpA/rldAD+r3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/6FYAP+hVQD6t2AB7NhzAPPafhj3slHp9po9/+9+Lf7khTL/2Icu/9p7 - I//fiCn+45Iu/uWaM/3ooTf87rNE+/nOYPv/4H38/+mO/f/tlf7+8J/8/vSy/f7xqf//6Zb+/uSN/v/k - jP/+44n+/eOI//3ihf/+4YP//eCB//3gf//8337//d97//3eef/83Xf/+9x1//zbcv/72nD//Npu//vZ - bP/62Gr++tdo/fvaaP/+5W7n/NxsKPzVdgD93m4C//8uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/VfQD/1n4A+sxsAfnMYgD40W0y+bNP/PWd - QP/xiTL+7nQo/+GCMP7Xgiv+2ngh/t6DJv7ijSr+5ZUv/+ecM//vtUT/+tJh///he//+6In+/+qM///w - nv/+9K/+/+2f//7mj/7/44r+/uKI//7ihv/94oP//eGC//7ggP/9337//N97//3eef/93Xf//Nx1//vc - cv/723H//Npu//vZbP/62Wr++9ho/vrXZv7612X6/dxn//zfaWv62mUA/OZqA///QgD//18AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/qlYA/6pWAPq8 - XAL90WYA+MtmUfy2UP/1oUH985I3//B9K/7sbyb+4H8v/9aAKf/ZdR/+3oEk/+KLKf7lkiz+5pow/vC3 - Q/781GH+/+N7//7ohv7+6ov+//Gj//7yqf7+6pX//+SK//7ihv/94oT//uKC//3hgf/+4H7//d97//zf - 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 - JP/raCD/6GQg/9t3KP/UcR//2XAb/959IP/hhCL/5Ism/++sNf/80VP//+Fu//7ldf/+6oT///Cb//7p - iv//4nv//t92//3edf/+3XL//d1v//zcbf/922r//Npo//vZZv/82GP/+9hh//zXXv/71lv/+tRZ//vU - Vv7601T++tNS/vvUUvr92VH//NlTiPrSRgD93j8E+daBAP//JwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ykUA9sdjA+7IeADzxmc+/Mdc8vm4T//4tEv9965E/vam - Pf71mzb/848v//GDKv/veSb/7HEj/+tlH//nYx//2XQn/9RvHv/ZcBv/3n0g/+GDIv/kjCX/8rI4//3V - V///4m3//uVz///si//+7pT//+Z///7fdf/93nL//d1w//3cbf/822v//dto//zaZf/72WP/+9hh//zX - Xv/71lz/+9ZZ//rUVv/701T/+tNS/vrST//60k77+9RN//7eUc3001ES7LVDAPrUUAH//1wAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/IQAA/i0AAPauUgTyymgA9MRiVvzE - Wv/4uU/8+LVL/vewRf72qT//9aA4//SWMv/yii3/8H8o/+53JP/sbiH/6mMe/+ZgH//Zcib/020c/9lv - G//efB//4YEh/+WPJv/0ujv//tlZ///jbP/+5nT//+6P///riv/+4Xb//t1w//3dbv/93Gv//Nto//3a - Z//82WT//Nlg//vYXv/811v/+9ZZ//rVV//71FT/+9NQ//rST//50Uz++tFL/vvTSvz92Ev/+dVORvvU - SAD94EED//8AAP//JgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/6gzAPf/ - /wD1t00F8bxVAPTGY3T7v1j/97hR+ve2TP73s0b+96xB//alOv/0nDT/8pEv//GGKv/vfSX/7XQh/+ts - IP/pYR3/5WAe/9dwJP/Tahv/2m8a/958H//hgCD/55Qn//fBP///3Fz//uNp//7oef/+7o///+d+//7f - b//93Gv//dtp//zbZv/82mP//Nlh//zYXv/711v//NZZ//vVVv/61FT/+9NS//rST//60Uz++dBJ/vrQ - SP/60Ef7/NZG//7dSpP/+UoA/+s/Av+7CwD/yjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP/AhQDr0GwA/rlYA/64QgD2xGGV+L1W//e5Uvr4uE3+97RI/vevQv/2qDz/9KA3//OX - Mf/yjiz/8IMo/+56I//scSH/62of/+hfHP/kXh3/1m4j/9JnGv/abxr/3nse/+CAH//pmSj/+sdC///f - Xf/+42f//up+///siP/+43P//txp//3bZ//82mT//dph//zZXv/72Fz//NdZ//zWVv/71VT/+tRR//vS - T//60kz/+dFJ//rQR/76z0X/+tBD/fzTQ//91UPg+tFHE/f/bAD+uzMA/0gAAP9nAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/1sA8r9uAP//JgG786EE/Mhisfm9V//2uVL7+LdO//e1 - SP72sEP/9qs+//WkOP/0nDT/85Qu//GKKv/vgSb/7nci/+xvIP/pZx7/6F0a/+NcHf/VayL/0WYY/9pu - Gf/eeh3/4IAe/+ugK//8zkb//99d//7kaf/+7IL//+l+//7eav/922T//Npi//3ZXv/82Fz//NdZ//vW - Vv/81VP/+9RR//rTT//70kz/+tFJ//rQR//5z0T/+c5C/vrPQf/6zj/9/dc///zZRFb92UUA/NlAAv3m - RAD/60YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+716APLIWwGx2mgA47poEfzK - Y8r5v1j/9rlT+/e4UP/2tkr+9rJF//atQP/1pzr/9KA1//OZMP/ykCz/8Icn/+9/JP/tdSL/620e/+lm - HP/nWxn/4Vsc/9NpIP/RYxf/2m0Y/915G//ggB7/76kt//7USf//4F3//uVt//7rgv//5XL//ttj//3Z - X//82Vz//NhZ//zXVv/71lT/+9VR//zUTv/700z/+9FJ//rRRv/60ET/+s5B//nNP/76zj7/+s48+/3T - O//80zyp/881AP3gPgP33nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5bx0AOOt - gQDjuWwD16xVAOi/aSvzwl7z971X/va6VP33uVD/9rZL/vazR//1r0L/9ak8//SjN//znDL/8pUu//GN - Kv/whSX/7nwj/+1zIP/rax3/6GQb/+VYGP/fWhz/0mcf/9BhFv/ZbRj/3Xcb/+GCHv/ysC///9dL//7h - XP/+53L//+p7///gZv/92Vz//Nla//zXVv/81lT/+9VR//vUT//800z/+9NJ//rRR//70EP/+s9B//nO - P/75zTz++sw6/vrNOf37zTf//dY55PjUPyLz3S8A+dM+AvzGWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAz75VAKmMJACwTxIA//+3Av//hADpvGSa8MZi/+2+V/vzu1P/9bhQ/va2Tf71tEj/9q9D//Wr - Pf/1pjn/8580//KZL//xkyv/8Ysn/++CJP/teiH/7HEe/+ppHP/nYRr/5VUX/99YG//QZB7/0F8V/9ls - GP/cdhr/4oUe//a6Mv//203//uFd//7pdP//53D//ttc//3XV//911T//NZS//vVTv/81Ev//NNJ//vS - R//60ET/+89B//rPPv/5zTz/+s05//nLN/76zDb++sw0+/3SNP/60DZk+84tAPzTLAT/9gAA/vwpAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA8M1RALyhWwC+lVAB//+0Af//rQDhs2R289F4//DMbP3qw17+7L9X//C6 - UP70t0z/9rRJ//WxRP/1rT//9Kg6//SjNv/ynDL/8ZYt//GQKf/wiSX/74Ei/+14IP/qcB3/6Gca/+Zf - Gf/kVBb/3Vca/89iG//QXhP/2WwX/9xzGf/lix//+cI1///cTP/+4mD//uhy///iY//92FX//NZR//zV - Tv/71Uz//NNI//zSRv/70UT/+tBB//vPPv/6zjv/+c05//rLN/76yzX/+csz//rLMfr7zC///dMysPLr - ewL//2EB+sYuAP/+VwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyJ5lANWiQADDlU4B////Af//2QDfsGF89t2K///s - mf7734f99NFz/+3FYf7qv1b/7bpO/vG1Sf/1sUX/9a5B//OpPf/zpDj/858z//KaL//xlCv/8I4n/++H - JP/ufyL/7Hce/+puG//oZBj/5V0X/+JRFf/cVRn/zl4b/89cEv/Yahb/23IX/+iTIP/7yTf//91O//7k - Zf//52v//t1X//3WTv/81Uz/+9RJ//zTRv/80kT/+9FB//rPPv/7zjv/+s05//nMNv/6yjT/+coy/vrK - MP/5yS/9+8ws//7RLe/3yjEq+8IqAP7UJAL//wAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmohoAK2GUwC8hjgCJgAAAP// - /wDis2WI+OCO///xof3+65r9/+uX//7ljv752X3/8Mpn/uq/V//quU3/7rNG//OuQv/0qz//86c6//Oi - Nf/ynDH/8Zct//CRKf/viyb/74Uj/+5+IP/rdRz/6mwa/+diGP/kWhf/4k8U/9pUGf/MXBn/z1sR/9hq - Ff/bcxf/65sh//3ROv//3lH//uVm//7jX//92E7//NVI//zURv/70kP//NFB//vQPv/6zzv/+844//rM - Nv/5yzT/+soy//nJL/75yC3++sos//rHKfv8yyj//tMtbv/dLQD/vBAD/rAAAP+1AAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr5xrAMOn - cgDGm10DYwAAAP///wDluGmW++ST///xovv+65v9/uuZ//7rl/7/6pX//+mQ/v3hhP/20nD/7cNb/+i4 - Tf/rskT/8Kw///OoO//yozj/8aA0//GZL//xlCv/8I8o/++KJf/uhCH/7Xwe/+tzG//pahn/5mAX/+NY - Ff/gTRP/2FIY/8tZF//PWhH/12kU/9x0Fv/vpiT//9U8//7fVf/+5WL//t5S//3UR//800P/+9JB//zR - Pv/80Dv/+844//vNNv/6zDT/+csx//rJL//5yC3/+ccq/vrIKf/5xyb8/Mwk//3OJsLDp0YC/88AAN// - bAD/RA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA3a5pAMOhXADRoFoDrDIAAA0AAATpvG2j/eiX///xovz+65v+/+yZ///smP7+65b//uqT/v7q - kf//6o///+aI//vbef/yy2P/6btP/+iyQ//sqjz/8aQ5//KgNf/xnDH/8Jct//CSKv/vjSf/7ogi/+6C - H//sexz/6nIa/+hoGP/kXxX/4VYU/95LEf/WUBj/yVcW/85ZD//XZxP/3XYV//OwJv//2ED//uBY///j - Wf/+2Uj//NJA//vRPv/80Dv/+885//rONv/7zDT/+ssx//nKLv/6ySz/+ccq//jGKP75xyb++sgk/vnF - If/9zCH3+9IrNP3cNwD8yR0C/70CAP+7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA5rBbAP7ObQDUrVoDwWkpAHwmAAzov3Cy/uyb///xo/r+7Jv+/+2b//7s - mf7/7Jb//uuV/v/rkv//6pD//umO//7pjP//6In//uKA//jVbf/uwlb/57JF/+epO//tojb/8J0z//CZ - MP/vlCz/748o/++LJP/uhiH/7YAe/+t5G//qcRn/52cW/+RdFP/gVRP/3UkR/9ROF//IVBT/zlgO/9Zl - Ev/fexb/97oo///aRP/+4Fb//99N//3UPv/80Tv//NA4//vONv/6zTP/+8ww//rLLv/5ySz/+sgq//nG - KP/4xSX/+cUj/vrGIf/4xB/8/csf//vLIoX6xSEA+cscA/HeAAD/8wMAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9aAAP/XfgDuumgEw3YtAKlSFxTow3PB/u+e///x - pPr+7Jz+/+6c//7tmv7+7Jf//+yW/v/rlP//65H//uqP///pjf/+6Yr//uiI///ohv//5oH//d52//TM - YP/quEr/5ak7/+mgM//umjH/75Yu/+6RKv/ujSf/7okj/+2EIP/sfx3/63gb/+lwGP/nZhX/41wT/99S - Ev/bRhD/0k0W/8dSEv/OVw3/1mMR/+ODF//6xCz//9tG//7gT//+20L//dE5//vPNf/8zjP/+8ww//vL - Lf/6yiv/+ckp//rHJ//5xST/+MQi/vjEIP76xSD++cQf/PvFHv/8yyHM9M44CwAAAAD61CgBAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+fD0A3aZgAO29bwDdqmAE0Y0/ALht - KB/qxXbN//Gh///xpPr+7Z3//+6d/v7tm///7Zn+/+yW/v/slP//65L//+uQ///qjf/+6ov//umI///p - hv/+6IP//ueB///nf//+43n/+tdq//DCUv/mrT7/5J8z/+mWL//tki3/7Y8p/+2LJv/thiL/7IIf/+x9 - HP/qdxn/6W4W/+ZlFP/jWhP/3lAR/9lFEP/QSxX/xk8R/81WDf/WYhD/5o0Y//3LMP//20j//t5G//7V - OP/8zjL/+84w//vLLf/7yiv/+skp//nIJv/6xiT/+cUi//jDIP/5wx//+cQg/vnDH/74xB79/csg+vjF - JEX2vyYA+b8hA+4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxYlKAP// - xgDltGgE3qFUAMF3MijryHnZ//Oj///xpfr+7p7//++e/v7um/7/7pr+/u6Y///tlf//7JP//+yQ///r - jv//64z//+qK///ph//+6YX//+iC//7nf//+5n3//uZ7///leP/932//9s5b/+u3Rf/joTT/5ZQt/+qP - Kv/tiij/64gl/+uEIf/rgB//6nsc/+l1GP/obhb/5mQT/+JZEv/dThD/10QP/85KFP/ETQ//zVUM/9Zj - EP/smRv//9I0///bQ//+2jv//dAx//vMLf/7yyv/+8oo//vJJv/6xyP/+sUh//nEIP/5wh//+MIg/vjD - IP74wx/++MIe+vrEHv/8yyOM/cQMAP29BQP452cA/rsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACKZjcAQxcAAAAAAADuxnYE5KRQAMWFPjXty3zi//Sm//7xpPr+76D///Ce/v7unP7/75r//u6Y///t - lv//7ZT//+yR///sj///643//+uL///qiP//6Yb//+mE//7ogP/+533//+d7//7mef/+5Xb//+V0///j - cP/82WP/8sRP/+apOf/hlS3/5osp/+qHJ//qhST/6oIh/+p9Hv/qeRv/6XMX/+dsFf/lZBP/4VgQ/9xN - D//WQg7/zEcU/8NLDv/NVAv/12YQ//CmHv//1DX//to8//7WMv/8zCr/+sso//vJJf/6yCL/+sYh//nF - IP/5xB//+MIg//fCH//4wh/++cMf//fBHvz5xR7//soh1vC5JhDzrS0A+r0oAfzZAwAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zHkD3bNgAMqLQkLuzn/s//Wn//7xpfr+8KH///Cg/v7v - nv//75v+/+6Z/v/ul///7Zb//+2T///skP//647//+uM///rif//6of//+mE///pgv//6H///ud8//7n - ev/+5nf//+V0//7kcv/+42///+Ns//7gZv/50Vf/7LdB/+GbL//hiif/5oQm/+mCI//pfyD/6Hod/+h2 - Gv/ochf/52wU/+VjEv/gWBD/2ksO/9NADv/JRRL/wUkM/8xSCv/abBH/9LIh///WM//+2DT//tAq//vJ - Jf/6ySL/+scg//rGH//5xR//+cMg//jCIP/3wR//+MEg/vjCH//3wR7+98Ae/PnEHv/5ySZI98UjAPnW - EwL/2AAA/84AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3MCUAAAAAADx14cD98tyAM+SSU/w0oT0//aq///y - pfr+8KL///Gh/v7wnv7/8J3+/++a///vmP//7pb//+2U///ukv//7I7//+yM///riv//64j//+qE///p - gv//6YD//+h9///nev//53j//+Z1//7lc///5G///uNs//7jav/+4mf//+Fk//3bW//0xkn/5qg1/9+N - J//igST/538j/+h8H//neB3/53Qa/+dvF//mahT/42IS/99XD//YSg3/0j4N/8ZDEv/ASAz/zFIL/952 - E//5vCP//9Uv//7VKv/8yyL/+scg//rGIP/6xSD/+cQg//jDH//4wiD/98Ef//fAH//4wR/++MEf//a/ - Hvv8xx7/+8kinP/WGQD/qAwC8fcAANn/AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD//7oB8ct0ANid - UV3z2Ir7//es//7xpvv+8aP///Ki/v7wn///8Z3//vCc/v/wmf//75f//+6V///uk///7ZD//+2N///s - i///7In//+uG///rg///6oD//+l9///oe///53n//+d2///mc///5XD//uVt///kav/+42f//uJk//7g - Yf//4F7//99a//vUT//vuT3/4Zcr/96CI//jeyH/5nkg/+V2Hf/lcRn/5W0X/+RoFP/iYBH/3lYP/9hJ - Df/PPQ7/w0IS/79IC//MUw3/4YAW//zEJP//0yr//dEj//vHH//6xiD/+sUg//nEH//4wx//98Eg//fA - H//2vx/+98Af/vfAH//2vx79+L8d//nCH+XyyS8W//9oAOCvHAG4iQAAu40AAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqpYAMHm - iADeu3MC77lpAN2nWk333o/7//mu//7ypvv+8qX///Gi/v7yof//8Z/+//Cc///wmv//75n//++W///v - lP//7pH//+2P///tjP//7Ir//+yH///rhf//6oL//+p////pe///6Xn//+d3///mdP//5nD//+Vt///k - a///5Gj//uNk//7iYf//4V7//uBa//7fV///31X//ttP//fJQ//opzH/3Icj/954H//jdh7/5HMc/+Nv - Gv/jaxf/42YU/+FgEv/dVhD/1kkN/8w9Dv/AQRL/vUYM/8tUD//mjxr//con///SJ//9zCD/+sYf//nF - IP/5wyD/+MIf//fBH//3wB//9r8f//e/H/72vx/+974e/vW8Hf38xR//+MQjX/nGJQD2xB0D7rECAO+0 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADpxW4A//+9A///zgD54pOz/ves//7yqPn/8qX///Kk/v7yov7+8p/+//Ge//7x - nP7/8Jn///CW///wlP//75L//+6Q///ujf//7Yr//+yI///shf//64P//+qA///qff//6Xn//+h3///o - df//53L//+Zv///la///5Gj//+Nl///jYv//4l///uBb///fWP/+31T//t5Q//7dTv//3Ev//NVF//G7 - N//hlCf/23oe/99yHf/icRv/4W0Z/+FpFv/hZRT/4F8S/9tWEf/USQ//yj4P/7xAEv+6RQz/zFoR/+ud - Hv/+zCf//s8l//vHIP/5xB//+MMg//jCH//3wB7/9r8e//a+Hv/2vR7/9r4f/va9Hv/1vR37+b8d//zD - IKr/sQAA/7sAA/nIMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/vewAP/9swP//bAA//mxqf72q//+8qX1/vGk/f/z - ov7/86H///Ke//7ynP7+8Zr+//CY//7wlf7/75P+/++R///vj///7oz//+2I///thf//7IT//+uB///q - fv//6nv//+l4///odv//6HL//+dv///mbf//5Wn//+Vl///kYv//417//+Jc///gWf/+4FX//t9S//7e - Tv/+3Ur//ttI///bRf//2kH/+cs5/+moLP/bgiD/2nAb/99uGv/gaxj/4GcW/99jFf/eXxT/2lcT/9JJ - EP/HPRH/uT8S/7lFDf/QYhX/8Kkh//7NJv/9zCL/+cQg//jDH//4wR//98Af//e/H//2vR7/9bwf/va+ - H//1vR7+9bwd/fa8Hf/9xR/m8b4kKO7HMAD3xCMC+nEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+VAP75hwD++K0C/fi1AP76 - tkP++7T0/vSm//71pf/+8qD7/vCd/P7xnP3/8pv///GY//7xlv7+8JT+/++S/v7vj/7/743+/u6L///t - h/7/7IT//+yC///sf///63z//+p5///qdv//6XP//+dw///nbf//5mn//+Vn///kY///5GD//+Nc///i - Wf//4Vb//+BS///fT//+3kv//91H//7cRf/+2kH//tk+///ZO//+1Tj/87wv/+GSI//Xchv/22kZ/99p - GP/eZhf/3WIX/9xfFv/YVxX/z0oT/8Q9E/+3PhL/uUYP/9NsGf/0tCT//s0l//vIIP/4wh//+MIf//fA - H//2vh//9r0e//W8Hv/1vB/+9rwe/vW7Hf70uxz6+L4c//nAImb7uxcA+8MPA7YA/wD+3gAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD//wAA4oT/AP71bwH/9KMA/fSoQ//7raP/+6rh/vWj//74ov/+8pv//u+X/P7wlvv/8JX9//CT/v7w - kP//8I7//u+L/v7uiP7+7oX+/+2C//7tgP7/7H3//+t6///qd///6nT//+lw///obv//52r//+dm///l - ZP//5GD//+Rd///jWf//4lb//+FS///gTv//30v//91I//7dRf/+3EH//9o+//7ZOv/+1zj//9Y1///X - Mv/8zS7/66om/9p+Hf/WaBj/22YY/9xmGP/bYxj/2l8Y/9dYF//OSxX/wj4V/7Q9Ev+5RhH/2nkc//i9 - JP/9zCP/+cQf//fBH//3vx7/9r4f//W8H//1ux7/9bse//W7Hv71ux3/87kc+/e8Hf/9wyC0vZArBAD/ - /wDo2EUA+J4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP74/wD/+IYA//arAvzxnQD/9bIA/uyfG//6qVP/+qal//Wf6f77 - oP/+85f//vCT//7xkPr/7oz6/u6K/f/vif//74b//+6D//7tgP7/7H7+/+x7///reP7/6nT//+py///p - bv//6Gr//+dn///mZf//5WH//+Rd///kWf//4lb//+JS///gT///30z//99I///eRf//3EH//9s+//7a - O//+2Tf//9g0//7WMf/+1S7//9Us///UKv/3vyX/4pMe/9RtGf/WYxn/2mUZ/9ljGf/YXxr/1loZ/85N - F//APhb/sTwT/7pJE//fhh//+sMl//zIIv/3wB//9r8f//a+H//1vB//9Lse//S6Hv/0uh7+9bod//O4 - Hf71uRz++Lwd9vS/Jyv0wyYA/7kTAemVAADjkwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//EAAP/fAAD99asD//mKA/7r - ngD/96oA///PAP//phf++aBf/vWaq/78m+H+9ZL///KN//7xif/+7IT8/uyB/P7tgP3/7X7+/u17/v/s - eP7+63b+/uty/v/qb/7/6Wz+/+ho///oZf7/5mL//+Ve///lWv//5Ff//+NT///iT///4Ez//+BI///f - RP//3UH//9w+///bO///2jj//9k0//7YMf//1i7//tUs//7TKf/+0ib//9Mj//3NIv/vrCD/2Hwc/9Bj - Gv/WYxv/2GMb/9dgG//VWxv/zU4Z/78/F/+vPBP/vE0W/+aUIf/7xyT/+sMg//a+H//1vR7/9bwe//S6 - Hv/0uR//9Lke//S4Hf70uB3/8bYc/Pu+Hf/7wCN4/8MmAOe4FQP/8gwA//8BAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA//PqAP/81AD+9KYB//mWA///fwH//80A/v+jAP3rhAD+85cj/vOSYP79lKb/9Yzr/vSH//7z - hP/+7H3//+t5/P/rePv+6nX9/+ty/v/qcP//6mz//+lp/v7oZv7+6GL+/+de///lW/7/5Vf//+RT///j - UP//4k3//+FJ///fQ///30H//94+///cOv//2zf//9k0///YMP//2C7//tYr//7VKP//0yb//tIj//7P - If//zyD//9Eh//jBIf/jlR//0Gsc/9BgHP/WYxz/12Ec/9RcHP/NTxr/vj8Y/646E//AVBf/7KMj//zH - Iv/3vh7/9bwf//W7H//0uh//87ge//O4Hf7zuB3+87cd//G2HPz2uBz/9rkdyvDOfgLJUAAB27YgAJZh - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//nwA//+nAP//fAD/+18A//eWAf7tmwP+9Y0D/v+mAP3u - kQDtkWAB/uyKH//6jGH+9IS1/vSA7P72fv/+7HX//+xy//7pbfr/52v7/+ho/v/pZf//6GL//+de/v7m - W/7+5lf+/+VU///kUP7/4kz//+JJ///hRf//30H//989///eO///3Df//9s0///ZMf//2C3//9cr///V - J//+1ST//tMi//7RIf//0CH//s8g//3NIP/+ziD//c0h//CxIP/XfR7/zGAd/9JhHf/WYh3/01wc/8xP - Gv+9Pxj/qzkT/8VeGf/ysCP/+sQg//W7Hv/0uh//9Lke//O3Hv/ztx7/8rce//K2Hf7ytRz+8LMb//u8 - HvX3vCY9/70tAPGwHQPaqwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/4QA//dnAP/q - egD/1JAA//iiAP72lgL+8pEE//+4Af7ofQD//5QA//+eAP/6hiL98Xxt/vN5s//3dun+7G3//+1q///p - ZP7/5WD7/uZd/P/mWv3+5Vf+/+VT///kUP/+40z+/uJJ/v/hRf7+4UH//98+/v/eOv//3Tf//9w0///b - Mf//2S7//9gq///XJ///1ST//9Qi///SIP/+0SD//9Ah//7PIf/+ziH//Mwg//zLIP/+ziH/+cMg/+SZ - H//Oax7/zF0e/9NhHv/TXR3/zFAb/7o+GP+qORP/zGsb//e6Iv/4wB//9Lke//O4Hf/zth7/8rYe//K2 - Hf7ytRz+8rQc/vGzG/r2thz/87UgiPu2EAD6rg4E2MVaAPuHAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD+7HgA/8qOAAAAAAAAAAAA+du0AP3ufQD++YIB/uiHAv/rbAH//4oA/f1+APq5 - YAD+63Ir//Bwaf71bbb+7GT1/+9i///qW//+5FX//+RR+v7jTvr+4kv9/+JH///iRP/+4EH//uA9/v7f - Ov7/3jb//90z/v/cMP//2y3//9kq///YJ///1yP//9Uh///UIf//0yH//tEh///RIP/+0CH//s4h//3N - IP/8yyD/+8kh//vKIP/9zCD/8rQf/9d/H//JXx7/zl0e/9NeHf/MURv/uT0Y/6o4E//VfB7/+cEi//W5 - Hv/zth7/8rYd//K1Hv/ytR3+8rQd/vGzHP/wshz78bIa//q6Hs3utSwR4KVXAPS2KAH/zAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+rAD//6gA/lv/AP7X - ggD/sTYA//F/Af3phQT+v2sD/ulpAP7pbQD+uU4E/vBmJf/0Y3H+61rA/+9X7v7rUf/+5Ur//+RH/v7g - Q/r+3j/8/988/v/fOv//3Tb//t0y/v/cL/7/2y3//top/v/ZJv7/1yL//9Yh/v/VIv/+1CL//9Mh//7R - If//0CD//tAh//7OIP/9zSH//Msg//zLIP/7yCD/+sYf//zJIP/5xCD/5Zwf/8tqH//JWR7/0Fwe/81T - HP+3PBj/rTsU/9+NH//6wSH/8rUe//K1Hv/xtB3/8bMe//GzHf/xshv+8LAc/vGwG/z2tBz/77MiRfK1 - HgD3nBYD/wAAAP8xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD/14EA/8lbAP/mhAD/oX0A//+NAP/waAL+7mYD//8wAP7nbgD//2gA/+FaAP/y - Vi3+6E91/u5MuP/rRvP+5UH//uU9///eOP/+3DX8/twx/P/bLv7/2yv+/top///YJv//1yP+/9Yh/v/V - Iv7+1SH//9Qi/v7TIf/+0SH//9Eg//7QIP/+ziD//c0h//zLIP/8yiD/+8kg//rHH//5xSD/+cUf//vI - H//yth//2IMe/8ZcH//LWB7/zVUd/7Y8F/+vQBX/550h//i+H//xsh3/8bMe//CyHv/xsR3+8LEc/vCw - G//urhv687Ab//i3IZT/xw0A/6sAAv+nAAD/sQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6HwA/qGZAP/GPAD/+gAA/v8AAP7Z - YAD++VMB/+JeA//qRAL//FcA/uxNAP/pOAX+5kIx/u1Bcv7pPML/5Tb4/uYz//7dLv//2ir//tkn+v/X - JPv+1yH+/tYh///VIv/+1CL+/tQi/v7TIv7+0iH//9Eh/v7QIP/+zyH//s4h//3MIf/8yyD//Mof//vJ - H//6xyD/+sYg//nEH//4wR//+cUf//nDHv/noB7/zGse/8VVHv/LVR7/tTsX/7VKF//vrCH/9bke//Cv - Hf/wsR7/8LAd/++vHP7wrhv/7q0b/fOuGv/1sh3f57EwEuKiMwD0zRsA//8AAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - Gv7lmBn+5ZgZ/uWZGf/klhj87ZsZ/+qcHnjumxsA4YgUBLuGAACzmwMAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+xAAD/jQgAAAAAAP// - AAD/n/8A69EhAOS2DwL/vRsC////APq9HwDsmRIA9LofG/m2HVL/th6e9asb5fSoHP/woxv/5pwa/+ac - Gvvkmhr645ga/OSXGv7jlRn/4pQa/+OVGf7jlBj/45UY++WVGP/olxrE0emwAv9MAAHpmSgA/zUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD//wAA9dMAAP9FAADGqgAA/7INAP/HGQH6txsD8bgPA/PCLAD0rxwA/5Y1APnF - HRX+tR5X86cbqPSkHOHyoRv/5pca/+aXGf/hkxn735EZ++CQGf3hkRn/4ZEY/+COGP3ikBf/7Zga8uWX - IDncjiEA5JkaA9S0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyKoAAP+sAgD/qwAA/6QEAP+/ - JwD5uyMB9agUA/+gAAH0oCcA/7smAPCNGAD/xSQY8KYcWvOjHKDznhvf6JQZ/+mTGf/gjRj/3IoY/d6M - GPvfjBf83YoW+eKMF//kkh1/6IYMAPGbBwSoWG8A/8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD//wUA/qcAAPygAAD/YwAA+b4SAf2uEwLvpxMD//9mAPOmGwDfVAIA6qkcHfWk - HVT0nRuj55Ea6OqPGf/iiRj/3YgX/9yIF/ffiBb/6Y8axM6MKgv/4/8A7JEuANGJAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+rQAA/6UAAP/QAAD/rwEA//8eAPC8 - HQHxjBUE6HcBA/yrJwDxjhkA/3kmAPm2IxTynBxb544ZqOuOGeDliRf/5ogX/+uOG5UAAJoA/7UAAdN+ - LAD1pAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD/1wAA/KwAAAAAAACsuQQA4gAAAPLFOAD8rB0B1Z4OA/GEAgHuxzAA85kiANpmCADuox4f548ZXeSK - GmTVhiQN14UaANiDHQHOdBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8ogAASAAAAKiuAADs7gAA95IRAfSf - FQPgewoD5ME2AOOFEgDdexIAs99TANxqGQHbYxkA4jANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAC6rAAA7dQAAP5tAAD/sgMA/903AO6ZHALkgxEE4owQBOKNIgHifRoA4oAVAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/cAAA/7AAAAAAAAD/hw0A//9wAAAAAAD/ajMAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA///////////////8///////////////8///////////////8///////////////8//////// - ///////8///////////////8///////////////8///////////////8/////////h/////8//////// - /f/////8////////+gv////8////////9Av////8////////6AX////8////////0AX////8//////// - oAP////8///////+QAL////8///////8gAL////8///////5AAF////8///////2AAF////8///////s - AAF////8////x//QAAC////8/////B+gAAC////8////g+BAAAC////8///+gB+AAABf///8////AAAA - AABf///8////AAAAAABf///8///9AAAAAAAv///8///9AAAAAAAv///8///9AAAAAAAf///8///9AAAA - AAAX///8///9AAAAAAAX///8///9AAAAAAAH///8///6AAAAAAAL///8///6AAAAAAAL///8///6AAAA - AAAF///8///6AAAAAAAF///8///6AAAAAAAF///8///6AAAAAAAD///8///4AAAAAAAC///8///0AAAA - AAAC///8///0AAAAAAABf//8///0AAAAAAABf//8///IAAAAAAAAf//8//+QAAAAAAAAv//8//9gAAAA - AAAAv//8//7AAAAAAAAAf//8//0AAAAAAAAAX//8//oAAAAAAAAAX//8//QAAAAAAAAAL//8/+gAAAAA - AAAAL//8/9AAAAAAAAAAL//8/6AAAAAAAAAAF//8/0AAAAAAAAAAF//8/oAAAAAAAAAAF//8/QAAAAAA - AAAAC//8+gAAAAAAAAAAC//8+gAAAAAAAAAAC//8+gAAAAAAAAAABf/8+gAAAAAAAAAABf/8/QAAAAAA - AAAAA//8/sAAAAAAAAAAAv/8/zgAAAAAAAAAAv/8/8cAAAAAAAAAAP/8//jAAAAAAAAAAX/8//8cAAAA - AAAAAX/8///jgAAAAAAAAL/8///8YAAAAAAAAL/8////ngAAAAAAAL/8////8YAAAAAAAH/8/////nAA - AAAAAF/8/////84AAAAAAF/8//////jAAAAAAC/8//////84AAAAAC/8///////HAAAAAC/8///////8 - 4AAAABf8////////HAAAABf8////////84AAAB/8/////////nAAAAv8/////////44AAAv8//////// - //nAAAP8//////////44AAX8///////////HAAX8///////////44AP8////////////HAX8//////// - ////44X8/////////////Hv8/////////////4f8///////////////8///////////////8//////// - ///////8///////////////8///////////////8///////////////8///////////////8 + AAABAAEAAAAAAAEAIABeBQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAAAFv + ck5UAc+id5oAAAUYSURBVHja7dwxSsNQAMfhgJObbp7AE/QOgmKrYCk4ODg4CgXBWhGxi4jg4Kg36KCD + DQrSRVwERw/h6A1q3uYamtr3wveH35gML823NVlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZma13kZvtNw6 + zTtKp2Y/b5R9zuEaZ5dW4d2cOQDhh1E0UTpt9kd3ZZ9zuMbZJVcDAAIAAP4PgM5grAjbPnupDIBwL2ca + Z3MH4Pr5RxF2cPtZGQDhXs40zgAgAAAAAAIAAAAgAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAQAAABAAAAAAAUAAEAAE + AAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAABA + AAAAAAQAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAIAAAAgAAAAAAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAA + CAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAAAgAAAAAAIAAAAgAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJwpAAAA + AAEAAAAQAAAAAAHAQwCAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgOoAwN7VuyJs5+K1MgDCvZxp + nM0dAMXftAAomQAgAABghls/Gq0UP45jpVOr/7RW9jmHa5xdWoV3MzMzMzMzMzMzMzMzMzMzMzMzMzMz + MzMzM/u7rV6+2jwZjZVU3bLPOVzj3NIqvJszB8Dfgf0dWL4H4LABIADkk8P7L0XY7uVbZQCEeznTOPNR + UPkoqI+CAkAAAAAABAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAAAACAAAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAI + AAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAAAAACAAAAIAAAAAACAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAABAAAAEAAAAAABAAAAEAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAA + EAAEAAFAABAABAABQAAQAAQAAQAAABAAAAAAAQAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAzBQAAACAAAAAAAgAAACAAeAgAEAAE + AAFAABAABAABQAAQAAQAAUAAEAAEAAFAAFAdABg8fCvC9m8+KgMg3MuZxtncAVD8TQuAkgkAAgAAACAA + AGAWa7eHC63zxyWlU7s7XCz9nItrnF1iz7l4NzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM6v1fgFi3pGw + zf9AVwAAAABJRU5ErkJggg== \ No newline at end of file diff --git a/FlybyScript/Patcher/ScriptPatcher.cs b/FlybyScript/Patcher/ScriptPatcher.cs index b3b09fe..68b753a 100644 --- a/FlybyScript/Patcher/ScriptPatcher.cs +++ b/FlybyScript/Patcher/ScriptPatcher.cs @@ -171,7 +171,7 @@ namespace FlybyScript { existingCategory = new TreeNode(category) { - BackColor = System.Drawing.Color.LightBlue, + // BackColor = System.Drawing.Color.LightBlue, ForeColor = System.Drawing.Color.Black }; pluginCategory.Add(existingCategory); diff --git a/FlybyScript/PluginsForm.Designer.cs b/FlybyScript/PluginsForm.Designer.cs new file mode 100644 index 0000000..0040f01 --- /dev/null +++ b/FlybyScript/PluginsForm.Designer.cs @@ -0,0 +1,217 @@ +namespace FlybyScript +{ + partial class PluginsForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.checkedListBoxPlugins = new System.Windows.Forms.CheckedListBox(); + this.textDescription = new System.Windows.Forms.TextBox(); + this.btnDownload = new System.Windows.Forms.Button(); + this.progressBar = new System.Windows.Forms.ProgressBar(); + this.lblHeader = new System.Windows.Forms.Label(); + this.btnUninstall = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.btnImport = new System.Windows.Forms.Button(); + this.panelBottom = new System.Windows.Forms.Panel(); + this.linkPluginsDirectory = new System.Windows.Forms.LinkLabel(); + this.panelBottom.SuspendLayout(); + this.SuspendLayout(); + // + // checkedListBoxPlugins + // + this.checkedListBoxPlugins.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.checkedListBoxPlugins.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240))))); + this.checkedListBoxPlugins.Font = new System.Drawing.Font("Segoe UI Variable Text Light", 10.25F); + this.checkedListBoxPlugins.ForeColor = System.Drawing.Color.Black; + this.checkedListBoxPlugins.FormattingEnabled = true; + this.checkedListBoxPlugins.Location = new System.Drawing.Point(-1, 50); + this.checkedListBoxPlugins.Name = "checkedListBoxPlugins"; + this.checkedListBoxPlugins.Size = new System.Drawing.Size(275, 340); + this.checkedListBoxPlugins.TabIndex = 0; + this.checkedListBoxPlugins.ThreeDCheckBoxes = true; + this.checkedListBoxPlugins.SelectedIndexChanged += new System.EventHandler(this.checkedListBoxPlugins_SelectedIndexChanged); + // + // textDescription + // + this.textDescription.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textDescription.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(252)))), ((int)(((byte)(252))))); + this.textDescription.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textDescription.Font = new System.Drawing.Font("Segoe UI Variable Small Light", 9.75F); + this.textDescription.Location = new System.Drawing.Point(281, 50); + this.textDescription.Multiline = true; + this.textDescription.Name = "textDescription"; + this.textDescription.Size = new System.Drawing.Size(348, 309); + this.textDescription.TabIndex = 1; + // + // btnDownload + // + this.btnDownload.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnDownload.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(221)))), ((int)(((byte)(221)))), ((int)(((byte)(221))))); + this.btnDownload.FlatAppearance.BorderColor = System.Drawing.Color.Gray; + this.btnDownload.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnDownload.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnDownload.ForeColor = System.Drawing.Color.Black; + this.btnDownload.Location = new System.Drawing.Point(536, 9); + this.btnDownload.Name = "btnDownload"; + this.btnDownload.Size = new System.Drawing.Size(93, 24); + this.btnDownload.TabIndex = 2; + this.btnDownload.Text = "Install"; + this.btnDownload.UseVisualStyleBackColor = false; + this.btnDownload.Click += new System.EventHandler(this.btnDownload_Click); + // + // progressBar + // + this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.progressBar.Location = new System.Drawing.Point(281, 360); + this.progressBar.Name = "progressBar"; + this.progressBar.Size = new System.Drawing.Size(348, 23); + this.progressBar.TabIndex = 3; + // + // lblHeader + // + this.lblHeader.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lblHeader.AutoEllipsis = true; + this.lblHeader.Font = new System.Drawing.Font("Segoe UI Variable Small", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblHeader.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.lblHeader.Location = new System.Drawing.Point(277, 15); + this.lblHeader.Name = "lblHeader"; + this.lblHeader.Size = new System.Drawing.Size(356, 30); + this.lblHeader.TabIndex = 206; + this.lblHeader.Text = "Welcome to Plugins Manager"; + // + // btnUninstall + // + this.btnUninstall.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnUninstall.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(221)))), ((int)(((byte)(221)))), ((int)(((byte)(221))))); + this.btnUninstall.FlatAppearance.BorderColor = System.Drawing.Color.Gray; + this.btnUninstall.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnUninstall.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnUninstall.Location = new System.Drawing.Point(437, 9); + this.btnUninstall.Name = "btnUninstall"; + this.btnUninstall.Size = new System.Drawing.Size(93, 24); + this.btnUninstall.TabIndex = 207; + this.btnUninstall.Text = "Uninstall"; + this.btnUninstall.UseVisualStyleBackColor = false; + this.btnUninstall.Click += new System.EventHandler(this.btnUninstall_Click); + // + // label1 + // + this.label1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(65)))), ((int)(((byte)(65)))), ((int)(((byte)(65))))); + this.label1.Font = new System.Drawing.Font("Segoe UI Variable Text", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.ForeColor = System.Drawing.Color.White; + this.label1.Location = new System.Drawing.Point(-1, 18); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(100, 33); + this.label1.TabIndex = 208; + this.label1.Text = "Available"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // btnImport + // + this.btnImport.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnImport.Font = new System.Drawing.Font("Segoe UI Variable Text", 9F); + this.btnImport.Location = new System.Drawing.Point(96, 18); + this.btnImport.Name = "btnImport"; + this.btnImport.Size = new System.Drawing.Size(100, 33); + this.btnImport.TabIndex = 209; + this.btnImport.Text = "Import"; + this.btnImport.UseVisualStyleBackColor = true; + this.btnImport.Click += new System.EventHandler(this.btnImport_Click); + // + // panelBottom + // + this.panelBottom.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(238)))), ((int)(((byte)(238))))); + this.panelBottom.Controls.Add(this.linkPluginsDirectory); + this.panelBottom.Controls.Add(this.btnUninstall); + this.panelBottom.Controls.Add(this.btnDownload); + this.panelBottom.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panelBottom.Location = new System.Drawing.Point(0, 401); + this.panelBottom.Name = "panelBottom"; + this.panelBottom.Size = new System.Drawing.Size(646, 45); + this.panelBottom.TabIndex = 210; + // + // linkPluginsDirectory + // + this.linkPluginsDirectory.ActiveLinkColor = System.Drawing.Color.RoyalBlue; + this.linkPluginsDirectory.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.linkPluginsDirectory.AutoEllipsis = true; + this.linkPluginsDirectory.AutoSize = true; + this.linkPluginsDirectory.Font = new System.Drawing.Font("Segoe UI Variable Small", 8.75F); + this.linkPluginsDirectory.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; + this.linkPluginsDirectory.LinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); + this.linkPluginsDirectory.Location = new System.Drawing.Point(12, 17); + this.linkPluginsDirectory.Name = "linkPluginsDirectory"; + this.linkPluginsDirectory.Size = new System.Drawing.Size(97, 16); + this.linkPluginsDirectory.TabIndex = 208; + this.linkPluginsDirectory.TabStop = true; + this.linkPluginsDirectory.Text = "Plugins directory"; + this.linkPluginsDirectory.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkPluginsDirectory_LinkClicked); + // + // PluginsForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(248)))), ((int)(((byte)(248)))), ((int)(((byte)(248))))); + this.ClientSize = new System.Drawing.Size(646, 446); + this.Controls.Add(this.panelBottom); + this.Controls.Add(this.btnImport); + this.Controls.Add(this.label1); + this.Controls.Add(this.lblHeader); + this.Controls.Add(this.progressBar); + this.Controls.Add(this.textDescription); + this.Controls.Add(this.checkedListBoxPlugins); + this.Name = "PluginsForm"; + this.ShowIcon = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Plugins-Manager"; + this.panelBottom.ResumeLayout(false); + this.panelBottom.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.CheckedListBox checkedListBoxPlugins; + private System.Windows.Forms.TextBox textDescription; + private System.Windows.Forms.Button btnDownload; + private System.Windows.Forms.ProgressBar progressBar; + private System.Windows.Forms.Label lblHeader; + private System.Windows.Forms.Button btnUninstall; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnImport; + private System.Windows.Forms.Panel panelBottom; + private System.Windows.Forms.LinkLabel linkPluginsDirectory; + } +} \ No newline at end of file diff --git a/FlybyScript/PluginsForm.cs b/FlybyScript/PluginsForm.cs new file mode 100644 index 0000000..baf62b3 --- /dev/null +++ b/FlybyScript/PluginsForm.cs @@ -0,0 +1,220 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Net.Http; +using System.Threading.Tasks; +using System.Windows.Forms; +using Newtonsoft.Json; +using static System.Windows.Forms.VisualStyles.VisualStyleElement; + +namespace FlybyScript +{ + public partial class PluginsForm : Form + { + private const string PluginJsonUrl = "https://raw.githubusercontent.com/builtbybel/Flyby11/main/plugins/plugins_manifest.json"; + private const string PluginBaseUrl = "https://github.com/builtbybel/Flyby11/raw/main/plugins/"; + + // Dictionary to store plugin filenames and descriptions + private Dictionary pluginDescriptions; + + private readonly string pluginsDirectory = Path.Combine(Application.StartupPath, "upgraider"); + + + private MainForm _mainForm; + + public PluginsForm(MainForm mainForm) + { + InitializeComponent(); + _mainForm = mainForm; + + LoadPlugins(); + } + + private async void LoadPlugins() + { + try + { + var json = await DownloadJsonAsync(PluginJsonUrl); + pluginDescriptions = JsonConvert.DeserializeObject>(json); + + foreach (var pluginFileName in pluginDescriptions.Keys) + { + // Add each plugin to the CheckedListBox + bool isInstalled = File.Exists(Path.Combine(pluginsDirectory, pluginFileName)); + int index = checkedListBoxPlugins.Items.Add(pluginFileName); + + // Check the item if the plugin is installed + checkedListBoxPlugins.SetItemChecked(index, isInstalled); + } + } + catch (Exception ex) + { + MessageBox.Show($"Error loading plugins: {ex.Message}"); + } + } + + private async Task DownloadJsonAsync(string url) + { + using (HttpClient client = new HttpClient()) + { + return await client.GetStringAsync(url); + } + } + + private void checkedListBoxPlugins_SelectedIndexChanged(object sender, EventArgs e) + { + var selectedPlugin = checkedListBoxPlugins.SelectedItem?.ToString(); + if (selectedPlugin != null && pluginDescriptions.ContainsKey(selectedPlugin)) + { + textDescription.Text = pluginDescriptions[selectedPlugin]; + } + } + + private async void btnDownload_Click(object sender, EventArgs e) + { + var selectedPlugins = new List(); + foreach (var plugin in checkedListBoxPlugins.CheckedItems) + { + selectedPlugins.Add(plugin.ToString()); + } + + if (selectedPlugins.Count > 0) + { + await DownloadPluginsAsync(selectedPlugins); + } + else + { + MessageBox.Show("Please select at least one plugin to download."); + } + } + + private async Task DownloadPluginsAsync(List plugins) + { + progressBar.Value = 0; + progressBar.Maximum = plugins.Count; + + using (HttpClient client = new HttpClient()) + { + foreach (var pluginFileName in plugins) + { + try + { + var pluginUrl = $"{PluginBaseUrl}{pluginFileName}"; + var downloadPath = Path.Combine(pluginsDirectory, pluginFileName); + + var data = await client.GetByteArrayAsync(pluginUrl); + await WriteAllBytesAsync(downloadPath, data); + + progressBar.Value += 1; + } + catch (Exception ex) + { + MessageBox.Show($"Failed to download {pluginFileName}: {ex.Message}"); + } + } + } + + MessageBox.Show("All selected plugins have been downloaded."); + } + + private async Task WriteAllBytesAsync(string path, byte[] data) + { + using (var fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None, 4096, useAsync: true)) + { + await fs.WriteAsync(data, 0, data.Length); + } + } + + protected override void OnFormClosing(FormClosingEventArgs e) + { + base.OnFormClosing(e); + _mainForm.RefreshTreeView(); + } + + private void btnUninstall_Click(object sender, EventArgs e) + { + var pluginsToRemove = new List(); + foreach (var plugin in checkedListBoxPlugins.CheckedItems) + { + pluginsToRemove.Add(plugin.ToString()); + } + + foreach (var pluginFileName in pluginsToRemove) + { + try + { + var filePath = Path.Combine("upgraider", pluginFileName); + if (File.Exists(filePath)) + { + File.Delete(filePath); + checkedListBoxPlugins.Items.Remove(pluginFileName); + } + } + catch (Exception ex) + { + MessageBox.Show($"Failed to uninstall {pluginFileName}: {ex.Message}"); + } + } + + MessageBox.Show("Selected plugins have been uninstalled."); + checkedListBoxPlugins.Items.Clear(); + LoadPlugins(); // Refresh the list of plugins + } + + private void btnImport_Click(object sender, EventArgs e) + { + using (var folderBrowserDialog = new FolderBrowserDialog()) + { + // Open the folder browser dialog to select the source directory + if (folderBrowserDialog.ShowDialog() == DialogResult.OK) + { + string sourceDirectory = folderBrowserDialog.SelectedPath; + string[] files = Directory.GetFiles(sourceDirectory, "*.*", SearchOption.TopDirectoryOnly) + .Where(file => file.EndsWith(".json") || file.EndsWith(".ps1")).ToArray(); + + List importedPlugins = new List(); // List to store imported plugin names + + foreach (var file in files) + { + try + { + string fileName = Path.GetFileName(file); + string destinationPath = Path.Combine(pluginsDirectory, fileName); + File.Copy(file, destinationPath, true); // Overwrite if file exists + importedPlugins.Add(fileName); // Add to the imported plugins list + } + catch (Exception ex) + { + MessageBox.Show($"Failed to import {file}: {ex.Message}"); + } + } + + // Show message box with the names of the imported plugins + if (importedPlugins.Count > 0) + { + string message = "Imported Plugins:\n" + string.Join("\n", importedPlugins); + MessageBox.Show(message, "Import Completed", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else + { + MessageBox.Show("No plugins were imported.", "Import Completed", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + } + } + + private void linkPluginsDirectory_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + try + { + Process.Start("explorer.exe", pluginsDirectory); + } + catch (Exception ex) + { + MessageBox.Show($"Failed to open plugins directory: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} \ No newline at end of file diff --git a/FlybyScript/PluginsForm.resx b/FlybyScript/PluginsForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FlybyScript/PluginsForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FlybyScript/Properties/AssemblyInfo.cs b/FlybyScript/Properties/AssemblyInfo.cs index 93e86be..1fe3d41 100644 --- a/FlybyScript/Properties/AssemblyInfo.cs +++ b/FlybyScript/Properties/AssemblyInfo.cs @@ -28,5 +28,5 @@ using System.Runtime.InteropServices; // Buildnummer // Revision // -[assembly: AssemblyVersion("0.13.81")] -[assembly: AssemblyFileVersion("0.13.81")] \ No newline at end of file +[assembly: AssemblyVersion("0.14.107")] +[assembly: AssemblyFileVersion("0.14.107")] \ No newline at end of file diff --git a/FlybyScript/USBManagement.cs b/FlybyScript/USBManagement.cs index e53041a..59c0e58 100644 --- a/FlybyScript/USBManagement.cs +++ b/FlybyScript/USBManagement.cs @@ -73,7 +73,7 @@ namespace FlybyScript /// /// Diskpart Device ID /// - public async Task FormatDriveAsync(string diskNumber) + public async Task FormatDriveAsync(string diskNumber, string partitionScheme) { await Task.Run(() => { @@ -98,12 +98,20 @@ namespace FlybyScript UpdateStatusLabel(); // Updates to 1/5 - Format and Boot USB Drive // Send commands to DiskPart - writer.WriteLine($"select disk {diskNumber}"); // Select the disk based on user input + writer.WriteLine($"select disk {diskNumber}"); // Select the disk UpdateProgress(10); // Update progress writer.WriteLine("clean"); // Clean the disk - - writer.WriteLine("convert mbr"); // Convert to MBR + + // Check partition scheme selection + if (partitionScheme == "GPT") + { + writer.WriteLine("convert gpt"); // Convert to GPT + } + else if (partitionScheme == "MBR") + { + writer.WriteLine("convert mbr"); // Convert to MBR + } UpdateProgress(20); writer.WriteLine("create partition primary"); // Create a new partition @@ -113,14 +121,13 @@ namespace FlybyScript UpdateProgress(60); writer.WriteLine("format fs=fat32 quick label=\"FlybyWin11\""); // Quick format to FAT32 - // writer.WriteLine("assign letter=W"); // Assign drive letter writer.WriteLine("exit"); // Exit DiskPart UpdateProgress(100); // Final progress } } string output = process.StandardOutput.ReadToEnd(); // Get the output from DiskPart - process.WaitForExit(); // Wait for the process to exit + process.WaitForExit(); _logger.Log($"Formatting completed: {output}", Color.Black); } } @@ -131,6 +138,7 @@ namespace FlybyScript }); } + /// /// Copies the contents of the specified ISO file to the USB drive using Robocopy. /// @@ -287,29 +295,27 @@ namespace FlybyScript } /// - /// Downloads the Microsoft Media Creation Tool from https://go.microsoft.com/fwlink/?linkid=2156295 + /// Downloads a specified tool (Media Creation Tool or Installation Assistant) from a provided URL. /// - /// The URL of the Media Creation Tool. + /// The URL of the tool to download. + /// The name of the file to save. /// A task representing the asynchronous operation. - public async Task DownloadMediaCreationTool() + public async Task DownloadMediaTool(string downloadUrl, string fileName) { - string downloadUrl = "https://go.microsoft.com/fwlink/?linkid=2156295"; - using (SaveFileDialog saveFileDialog = new SaveFileDialog()) { saveFileDialog.Filter = "Executable Files (*.exe)|*.exe"; - saveFileDialog.Title = "Save Media Creation Tool"; - saveFileDialog.FileName = "MediaCreationTool.exe"; + saveFileDialog.Title = $"Save {fileName}"; + saveFileDialog.FileName = fileName; - if (saveFileDialog.ShowDialog() == DialogResult.OK) { string destinationPath = saveFileDialog.FileName; try { - _logger.Log("Preparing to download Media Creation Tool...", Color.Black); - _logger.Log("Download may take some time, please wait...", Color.Orange); + _logger.Log($"Preparing to download {fileName}...", Color.Black); + _logger.Log("Download may take some time, please wait...", Color.RoyalBlue); var response = await httpClient.GetAsync(downloadUrl); response.EnsureSuccessStatusCode(); @@ -319,28 +325,29 @@ namespace FlybyScript await response.Content.CopyToAsync(fileStream); } - _logger.Log("Download completed successfully!", Color.Green); + _logger.Log($"{fileName} download completed successfully!", Color.Green); - // Start the downloaded Media Creation Tool - _logger.Log("Starting Media Creation Tool...", Color.Black); + // Start the downloaded tool + _logger.Log($"Starting {fileName}...", Color.Black); Process.Start(new ProcessStartInfo { FileName = destinationPath, - UseShellExecute = true // run .exe files + UseShellExecute = true // To run .exe files }); } catch (Exception ex) { - _logger.Log($"An error occurred while downloading: {ex.Message}", Color.Red); + _logger.Log($"An error occurred while downloading {fileName}: {ex.Message}", Color.Red); } } else { - _logger.Log("Download canceled by user.", Color.Red); + _logger.Log($"{fileName} download canceled by user.", Color.Red); } } } + /// /// Calculates progress based on Robocopy output /// diff --git a/FlybyScript/Views/ExperienceView.Designer.cs b/FlybyScript/Views/ExperienceView.Designer.cs index 186d5d7..474b6a4 100644 --- a/FlybyScript/Views/ExperienceView.Designer.cs +++ b/FlybyScript/Views/ExperienceView.Designer.cs @@ -117,7 +117,7 @@ this.btnRevert.FlatAppearance.BorderSize = 2; this.btnRevert.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); this.btnRevert.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnRevert.Font = new System.Drawing.Font("Segoe UI Variable Small", 10F); + this.btnRevert.Font = new System.Drawing.Font("Arial", 9.75F); this.btnRevert.Location = new System.Drawing.Point(473, 565); this.btnRevert.Name = "btnRevert"; this.btnRevert.Size = new System.Drawing.Size(220, 40); @@ -136,7 +136,7 @@ this.btnApply.FlatAppearance.BorderSize = 2; this.btnApply.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); this.btnApply.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnApply.Font = new System.Drawing.Font("Segoe UI Variable Small", 10F); + this.btnApply.Font = new System.Drawing.Font("Arial", 9.75F); this.btnApply.Location = new System.Drawing.Point(699, 565); this.btnApply.Name = "btnApply"; this.btnApply.Size = new System.Drawing.Size(222, 40); diff --git a/FlybyScript/Views/ExperienceView.cs b/FlybyScript/Views/ExperienceView.cs index 104f420..1fb821b 100644 --- a/FlybyScript/Views/ExperienceView.cs +++ b/FlybyScript/Views/ExperienceView.cs @@ -35,8 +35,9 @@ namespace Views // Initialize the list of features features = new List { - new FindMyDevice(logger), new PrivacyExperience(logger), + new ActivityHistory(logger), + new LocationTracking(logger), new Telemetry(logger), new FileExplorerAds(logger), new FinishSetupAds(logger), diff --git a/FlybyScript/Views/MediaView.Designer.cs b/FlybyScript/Views/MediaView.Designer.cs index f4cd03f..482e587 100644 --- a/FlybyScript/Views/MediaView.Designer.cs +++ b/FlybyScript/Views/MediaView.Designer.cs @@ -28,13 +28,14 @@ /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); this.btnBack = new System.Windows.Forms.Button(); this.rtbLog = new System.Windows.Forms.RichTextBox(); this.comboBoxDrives = new System.Windows.Forms.ComboBox(); this.btnStart = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); + this.lblDriveInfo = new System.Windows.Forms.Label(); + this.lblDeviceIDInfo = new System.Windows.Forms.Label(); + this.lblStatusInfo = new System.Windows.Forms.Label(); this.btnSelect = new System.Windows.Forms.Button(); this.label6 = new System.Windows.Forms.Label(); this.btnMCT = new System.Windows.Forms.Button(); @@ -45,7 +46,13 @@ this.comboBoxDriveLetters = new System.Windows.Forms.ComboBox(); this.linkShowDiskList = new System.Windows.Forms.LinkLabel(); this.label3 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); + this.lblDriveLetterInfo = new System.Windows.Forms.Label(); + this.lblPartitionSchemeInfo = new System.Windows.Forms.Label(); + this.comboBoxPartitionScheme = new System.Windows.Forms.ComboBox(); + this.btnInstallAssistant = new System.Windows.Forms.Button(); + this.tt = new System.Windows.Forms.ToolTip(this.components); + this.label1 = new System.Windows.Forms.Label(); + this.linkPCHealthCheckApp = new System.Windows.Forms.LinkLabel(); this.SuspendLayout(); // // btnBack @@ -71,6 +78,7 @@ | System.Windows.Forms.AnchorStyles.Right))); this.rtbLog.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(230)))), ((int)(((byte)(230))))); this.rtbLog.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.rtbLog.Enabled = false; this.rtbLog.Font = new System.Drawing.Font("Segoe UI Variable Small Light", 9.75F); this.rtbLog.Location = new System.Drawing.Point(59, 362); this.rtbLog.Name = "rtbLog"; @@ -80,9 +88,10 @@ // // comboBoxDrives // + this.comboBoxDrives.Enabled = false; this.comboBoxDrives.Font = new System.Drawing.Font("Segoe UI Variable Small", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.comboBoxDrives.FormattingEnabled = true; - this.comboBoxDrives.Location = new System.Drawing.Point(59, 98); + this.comboBoxDrives.Location = new System.Drawing.Point(59, 258); this.comboBoxDrives.Name = "comboBoxDrives"; this.comboBoxDrives.Size = new System.Drawing.Size(121, 25); this.comboBoxDrives.TabIndex = 235; @@ -92,11 +101,12 @@ this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.btnStart.BackColor = System.Drawing.Color.White; this.btnStart.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnStart.Enabled = false; this.btnStart.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); this.btnStart.FlatAppearance.BorderSize = 2; this.btnStart.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); this.btnStart.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnStart.Font = new System.Drawing.Font("Segoe UI Variable Small", 10F); + this.btnStart.Font = new System.Drawing.Font("Arial", 9.75F); this.btnStart.Location = new System.Drawing.Point(671, 562); this.btnStart.Name = "btnStart"; this.btnStart.Size = new System.Drawing.Size(205, 40); @@ -107,57 +117,60 @@ this.btnStart.UseVisualStyleBackColor = false; this.btnStart.Click += new System.EventHandler(this.btnStart_Click); // - // label1 + // lblDriveInfo // - this.label1.AutoEllipsis = true; - this.label1.Font = new System.Drawing.Font("Segoe UI Variable Small", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); - this.label1.Location = new System.Drawing.Point(55, 34); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(182, 32); - this.label1.TabIndex = 237; - this.label1.Tag = ""; - this.label1.Text = "Drive Properties"; + this.lblDriveInfo.AutoEllipsis = true; + this.lblDriveInfo.Enabled = false; + this.lblDriveInfo.Font = new System.Drawing.Font("Segoe UI Variable Small", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblDriveInfo.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); + this.lblDriveInfo.Location = new System.Drawing.Point(55, 194); + this.lblDriveInfo.Name = "lblDriveInfo"; + this.lblDriveInfo.Size = new System.Drawing.Size(182, 32); + this.lblDriveInfo.TabIndex = 237; + this.lblDriveInfo.Tag = ""; + this.lblDriveInfo.Text = "Drive Properties"; // - // label2 + // lblDeviceIDInfo // - this.label2.AutoEllipsis = true; - this.label2.Font = new System.Drawing.Font("Segoe UI Variable Small", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label2.Location = new System.Drawing.Point(57, 80); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(79, 15); - this.label2.TabIndex = 238; - this.label2.Tag = ""; - this.label2.Text = "Device ID"; + this.lblDeviceIDInfo.AutoEllipsis = true; + this.lblDeviceIDInfo.Font = new System.Drawing.Font("Segoe UI Variable Small", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblDeviceIDInfo.Location = new System.Drawing.Point(57, 240); + this.lblDeviceIDInfo.Name = "lblDeviceIDInfo"; + this.lblDeviceIDInfo.Size = new System.Drawing.Size(79, 15); + this.lblDeviceIDInfo.TabIndex = 238; + this.lblDeviceIDInfo.Tag = ""; + this.lblDeviceIDInfo.Text = "Device ID"; // - // label5 + // lblStatusInfo // - this.label5.AutoEllipsis = true; - this.label5.Font = new System.Drawing.Font("Segoe UI Variable Small", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label5.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); - this.label5.Location = new System.Drawing.Point(55, 328); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(114, 31); - this.label5.TabIndex = 241; - this.label5.Tag = ""; - this.label5.Text = "Status"; + this.lblStatusInfo.AutoEllipsis = true; + this.lblStatusInfo.Enabled = false; + this.lblStatusInfo.Font = new System.Drawing.Font("Segoe UI Variable Small", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblStatusInfo.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); + this.lblStatusInfo.Location = new System.Drawing.Point(55, 328); + this.lblStatusInfo.Name = "lblStatusInfo"; + this.lblStatusInfo.Size = new System.Drawing.Size(114, 31); + this.lblStatusInfo.TabIndex = 241; + this.lblStatusInfo.Tag = ""; + this.lblStatusInfo.Text = "Status"; // // btnSelect // - this.btnSelect.AutoEllipsis = true; this.btnSelect.BackColor = System.Drawing.Color.White; this.btnSelect.Cursor = System.Windows.Forms.Cursors.Hand; this.btnSelect.FlatAppearance.BorderColor = System.Drawing.Color.Gray; this.btnSelect.FlatAppearance.BorderSize = 2; this.btnSelect.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); this.btnSelect.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnSelect.Font = new System.Drawing.Font("Segoe UI Variable Small", 9F); - this.btnSelect.Location = new System.Drawing.Point(59, 241); + this.btnSelect.Font = new System.Drawing.Font("Arial", 8.75F); + this.btnSelect.Location = new System.Drawing.Point(60, 114); this.btnSelect.Name = "btnSelect"; - this.btnSelect.Size = new System.Drawing.Size(132, 28); + this.btnSelect.Size = new System.Drawing.Size(132, 36); this.btnSelect.TabIndex = 242; this.btnSelect.TabStop = false; this.btnSelect.Text = "Select"; + this.tt.SetToolTip(this.btnSelect, "This built-in method prepares a USB drive for a clean install, enabling a fresh r" + + "einstallation of your system."); this.btnSelect.UseCompatibleTextRendering = true; this.btnSelect.UseVisualStyleBackColor = false; this.btnSelect.Click += new System.EventHandler(this.btnSelect_Click); @@ -166,7 +179,7 @@ // this.label6.AutoSize = true; this.label6.Font = new System.Drawing.Font("Segoe UI Variable Small", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label6.Location = new System.Drawing.Point(57, 223); + this.label6.Location = new System.Drawing.Point(58, 96); this.label6.Name = "label6"; this.label6.Size = new System.Drawing.Size(76, 15); this.label6.TabIndex = 243; @@ -175,20 +188,23 @@ // // btnMCT // - this.btnMCT.AutoEllipsis = true; - this.btnMCT.BackColor = System.Drawing.Color.White; + this.btnMCT.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(103)))), ((int)(((byte)(180))))); this.btnMCT.Cursor = System.Windows.Forms.Cursors.Hand; - this.btnMCT.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(65)))), ((int)(((byte)(17))))); + this.btnMCT.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(103)))), ((int)(((byte)(180))))); this.btnMCT.FlatAppearance.BorderSize = 2; - this.btnMCT.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); + this.btnMCT.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(103)))), ((int)(((byte)(160))))); this.btnMCT.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnMCT.Font = new System.Drawing.Font("Segoe UI Variable Small", 9F); - this.btnMCT.Location = new System.Drawing.Point(235, 241); + this.btnMCT.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnMCT.ForeColor = System.Drawing.Color.White; + this.btnMCT.Location = new System.Drawing.Point(463, 114); this.btnMCT.Name = "btnMCT"; - this.btnMCT.Size = new System.Drawing.Size(205, 28); + this.btnMCT.Size = new System.Drawing.Size(214, 36); this.btnMCT.TabIndex = 244; this.btnMCT.TabStop = false; this.btnMCT.Text = "Media Creation Tool (Microsoft)"; + this.tt.SetToolTip(this.btnMCT, "If you want to perform a reinstall or clean install of Windows 11 on a new or use" + + "d PC, use this option to download the media creation tool to make a bootable USB" + + " or DVD."); this.btnMCT.UseCompatibleTextRendering = true; this.btnMCT.UseVisualStyleBackColor = false; this.btnMCT.Click += new System.EventHandler(this.btnMCT_Click); @@ -197,7 +213,7 @@ // this.label7.AutoSize = true; this.label7.Font = new System.Drawing.Font("Segoe UI Variable Small", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label7.Location = new System.Drawing.Point(232, 223); + this.label7.Location = new System.Drawing.Point(233, 96); this.label7.Name = "label7"; this.label7.Size = new System.Drawing.Size(85, 15); this.label7.TabIndex = 245; @@ -208,6 +224,7 @@ // this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); + this.progressBar.Enabled = false; this.progressBar.Location = new System.Drawing.Point(60, 516); this.progressBar.Name = "progressBar"; this.progressBar.Size = new System.Drawing.Size(834, 23); @@ -232,10 +249,10 @@ this.checkCreateUnattend.AutoEllipsis = true; this.checkCreateUnattend.FlatAppearance.BorderColor = System.Drawing.Color.Gray; this.checkCreateUnattend.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.checkCreateUnattend.Font = new System.Drawing.Font("Segoe UI Variable Small", 8F); - this.checkCreateUnattend.Location = new System.Drawing.Point(72, 275); + this.checkCreateUnattend.Font = new System.Drawing.Font("Arial", 8.75F); + this.checkCreateUnattend.Location = new System.Drawing.Point(73, 156); this.checkCreateUnattend.Name = "checkCreateUnattend"; - this.checkCreateUnattend.Size = new System.Drawing.Size(194, 25); + this.checkCreateUnattend.Size = new System.Drawing.Size(214, 25); this.checkCreateUnattend.TabIndex = 250; this.checkCreateUnattend.Text = "Skip Hardware limits and go local"; this.checkCreateUnattend.UseVisualStyleBackColor = true; @@ -245,17 +262,19 @@ // comboBoxDriveLetters // this.comboBoxDriveLetters.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxDriveLetters.Enabled = false; this.comboBoxDriveLetters.Font = new System.Drawing.Font("Segoe UI Variable Small", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.comboBoxDriveLetters.FormattingEnabled = true; - this.comboBoxDriveLetters.Location = new System.Drawing.Point(210, 98); + this.comboBoxDriveLetters.Location = new System.Drawing.Point(210, 258); this.comboBoxDriveLetters.Name = "comboBoxDriveLetters"; this.comboBoxDriveLetters.Size = new System.Drawing.Size(121, 25); this.comboBoxDriveLetters.TabIndex = 251; // // linkShowDiskList // + this.linkShowDiskList.Enabled = false; this.linkShowDiskList.LinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); - this.linkShowDiskList.Location = new System.Drawing.Point(60, 126); + this.linkShowDiskList.Location = new System.Drawing.Point(60, 286); this.linkShowDiskList.Name = "linkShowDiskList"; this.linkShowDiskList.Size = new System.Drawing.Size(177, 16); this.linkShowDiskList.TabIndex = 252; @@ -268,31 +287,114 @@ this.label3.AutoEllipsis = true; this.label3.Font = new System.Drawing.Font("Segoe UI Variable Small", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.label3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(192))))); - this.label3.Location = new System.Drawing.Point(55, 177); + this.label3.Location = new System.Drawing.Point(55, 25); this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(182, 32); + this.label3.Size = new System.Drawing.Size(232, 32); this.label3.TabIndex = 253; this.label3.Tag = ""; - this.label3.Text = "Create Media"; + this.label3.Text = "Create Installation Media"; // - // label4 + // lblDriveLetterInfo // - this.label4.AutoEllipsis = true; - this.label4.Font = new System.Drawing.Font("Segoe UI Variable Small", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label4.Location = new System.Drawing.Point(207, 80); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(79, 15); - this.label4.TabIndex = 254; - this.label4.Tag = ""; - this.label4.Text = "Device Letter"; + this.lblDriveLetterInfo.AutoEllipsis = true; + this.lblDriveLetterInfo.Enabled = false; + this.lblDriveLetterInfo.Font = new System.Drawing.Font("Segoe UI Variable Small", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblDriveLetterInfo.Location = new System.Drawing.Point(207, 240); + this.lblDriveLetterInfo.Name = "lblDriveLetterInfo"; + this.lblDriveLetterInfo.Size = new System.Drawing.Size(79, 15); + this.lblDriveLetterInfo.TabIndex = 254; + this.lblDriveLetterInfo.Tag = ""; + this.lblDriveLetterInfo.Text = "Device Letter"; // - // InstallationMediaView + // lblPartitionSchemeInfo + // + this.lblPartitionSchemeInfo.AutoEllipsis = true; + this.lblPartitionSchemeInfo.Enabled = false; + this.lblPartitionSchemeInfo.Font = new System.Drawing.Font("Segoe UI Variable Small", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblPartitionSchemeInfo.Location = new System.Drawing.Point(361, 240); + this.lblPartitionSchemeInfo.Name = "lblPartitionSchemeInfo"; + this.lblPartitionSchemeInfo.Size = new System.Drawing.Size(109, 15); + this.lblPartitionSchemeInfo.TabIndex = 255; + this.lblPartitionSchemeInfo.Tag = ""; + this.lblPartitionSchemeInfo.Text = "Partition scheme"; + // + // comboBoxPartitionScheme + // + this.comboBoxPartitionScheme.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxPartitionScheme.Enabled = false; + this.comboBoxPartitionScheme.Font = new System.Drawing.Font("Segoe UI Variable Small", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.comboBoxPartitionScheme.FormattingEnabled = true; + this.comboBoxPartitionScheme.Location = new System.Drawing.Point(364, 258); + this.comboBoxPartitionScheme.Name = "comboBoxPartitionScheme"; + this.comboBoxPartitionScheme.Size = new System.Drawing.Size(126, 25); + this.comboBoxPartitionScheme.TabIndex = 256; + // + // btnInstallAssistant + // + this.btnInstallAssistant.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(103)))), ((int)(((byte)(180))))); + this.btnInstallAssistant.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnInstallAssistant.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(103)))), ((int)(((byte)(180))))); + this.btnInstallAssistant.FlatAppearance.BorderSize = 2; + this.btnInstallAssistant.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(103)))), ((int)(((byte)(160))))); + this.btnInstallAssistant.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnInstallAssistant.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnInstallAssistant.ForeColor = System.Drawing.Color.White; + this.btnInstallAssistant.Location = new System.Drawing.Point(236, 114); + this.btnInstallAssistant.Name = "btnInstallAssistant"; + this.btnInstallAssistant.Size = new System.Drawing.Size(214, 36); + this.btnInstallAssistant.TabIndex = 257; + this.btnInstallAssistant.TabStop = false; + this.btnInstallAssistant.Text = "Installation Assistant (Microsoft)"; + this.tt.SetToolTip(this.btnInstallAssistant, "This is the best option for installing Windows 11 on the device you’re currently " + + "using."); + this.btnInstallAssistant.UseCompatibleTextRendering = true; + this.btnInstallAssistant.UseVisualStyleBackColor = false; + this.btnInstallAssistant.Click += new System.EventHandler(this.btnInstallAssistant_Click); + // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label1.AutoEllipsis = true; + this.label1.Font = new System.Drawing.Font("Segoe UI Variable Small", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(60, 57); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(846, 15); + this.label1.TabIndex = 258; + this.label1.Tag = ""; + this.label1.Text = "There are 3 options below for installing or creating Windows 11 media. Check out " + + "each one to determine the best option for you."; + // + // linkPCHealthCheckApp + // + this.linkPCHealthCheckApp.ActiveLinkColor = System.Drawing.Color.RoyalBlue; + this.linkPCHealthCheckApp.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.linkPCHealthCheckApp.AutoEllipsis = true; + this.linkPCHealthCheckApp.Font = new System.Drawing.Font("Segoe UI Variable Small Semilig", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.linkPCHealthCheckApp.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; + this.linkPCHealthCheckApp.LinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.linkPCHealthCheckApp.Location = new System.Drawing.Point(44, 605); + this.linkPCHealthCheckApp.Name = "linkPCHealthCheckApp"; + this.linkPCHealthCheckApp.Size = new System.Drawing.Size(566, 16); + this.linkPCHealthCheckApp.TabIndex = 260; + this.linkPCHealthCheckApp.TabStop = true; + this.linkPCHealthCheckApp.Text = "Before installing, please refer to the WhyNotWin11 app to confirm your device mee" + + "ts the minimum system requirements"; + this.linkPCHealthCheckApp.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkPCHealthCheckApp_LinkClicked); + // + // MediaView // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScroll = true; this.BackColor = System.Drawing.Color.White; - this.Controls.Add(this.label4); + this.Controls.Add(this.linkPCHealthCheckApp); + this.Controls.Add(this.label1); + this.Controls.Add(this.btnInstallAssistant); + this.Controls.Add(this.comboBoxPartitionScheme); + this.Controls.Add(this.lblPartitionSchemeInfo); + this.Controls.Add(this.lblDriveLetterInfo); this.Controls.Add(this.label3); this.Controls.Add(this.linkShowDiskList); this.Controls.Add(this.comboBoxDriveLetters); @@ -303,14 +405,14 @@ this.Controls.Add(this.btnMCT); this.Controls.Add(this.label6); this.Controls.Add(this.btnSelect); - this.Controls.Add(this.label5); - this.Controls.Add(this.label2); - this.Controls.Add(this.label1); + this.Controls.Add(this.lblStatusInfo); + this.Controls.Add(this.lblDeviceIDInfo); + this.Controls.Add(this.lblDriveInfo); this.Controls.Add(this.btnStart); this.Controls.Add(this.comboBoxDrives); this.Controls.Add(this.rtbLog); this.Controls.Add(this.btnBack); - this.Name = "InstallationMediaView"; + this.Name = "MediaView"; this.Size = new System.Drawing.Size(959, 631); this.ResumeLayout(false); this.PerformLayout(); @@ -323,9 +425,9 @@ private System.Windows.Forms.RichTextBox rtbLog; private System.Windows.Forms.ComboBox comboBoxDrives; private System.Windows.Forms.Button btnStart; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label lblDriveInfo; + private System.Windows.Forms.Label lblDeviceIDInfo; + private System.Windows.Forms.Label lblStatusInfo; private System.Windows.Forms.Button btnSelect; private System.Windows.Forms.Label label6; private System.Windows.Forms.Button btnMCT; @@ -336,6 +438,12 @@ private System.Windows.Forms.ComboBox comboBoxDriveLetters; private System.Windows.Forms.LinkLabel linkShowDiskList; private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label lblDriveLetterInfo; + private System.Windows.Forms.Label lblPartitionSchemeInfo; + private System.Windows.Forms.ComboBox comboBoxPartitionScheme; + private System.Windows.Forms.Button btnInstallAssistant; + private System.Windows.Forms.ToolTip tt; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.LinkLabel linkPCHealthCheckApp; } } diff --git a/FlybyScript/Views/MediaView.cs b/FlybyScript/Views/MediaView.cs index 8f534ed..68d24d0 100644 --- a/FlybyScript/Views/MediaView.cs +++ b/FlybyScript/Views/MediaView.cs @@ -66,10 +66,15 @@ namespace Views } else { - //MessageBox.Show("No removable drives found.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); - comboBoxDriveLetters.Enabled = - comboBoxDrives.Enabled = false; + // MessageBox.Show("No removable drives found.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); + comboBoxDriveLetters.Enabled = comboBoxDrives.Enabled = false; } + + // Initialize partition schemes + comboBoxPartitionScheme.Items.Clear(); + comboBoxPartitionScheme.Items.Add("GPT"); + comboBoxPartitionScheme.Items.Add("MBR"); + comboBoxPartitionScheme.SelectedIndex = 0; // default to gpt } private async Task ShowDiskList() @@ -139,10 +144,10 @@ namespace Views btnStart.Enabled = false; // Disable the Start button // Validate Disk Number - if (string.IsNullOrEmpty(comboBoxDrives.Text) || !int.TryParse(comboBoxDrives.Text, out _)) + if (string.IsNullOrEmpty(comboBoxDrives.Text) || !int.TryParse(comboBoxDrives.Text, out int diskNumber)) { logger.Log("Please enter a valid Disk Number.", Color.Red); - btnStart.Enabled = true; // Re-enable the button + btnStart.Enabled = true; return; } @@ -154,21 +159,33 @@ namespace Views return; } - string diskNumber = comboBoxDrives.Text.Trim(); // Get the disk number from the ComboBox - string driveLetter = comboBoxDriveLetters.SelectedItem.ToString().Trim(); // Get the selected drive letter - - logger.Log($"Starting to format Disk {diskNumber} and copy to Drive {driveLetter}...", Color.Black); + // Get the selected drive letter and partition scheme + string driveLetter = comboBoxDriveLetters.SelectedItem.ToString().Trim(); + string partitionScheme = comboBoxPartitionScheme.SelectedItem.ToString().Trim(); // Get the selected partition scheme try { - // Format the drive using the disk number - await usbManagement.FormatDriveAsync(diskNumber); // Pass the disk number + // Check if the selected drive is a USB stick + DriveInfo selectedDrive = DriveInfo.GetDrives() + .FirstOrDefault(d => d.Name.StartsWith(driveLetter)); + + if (selectedDrive == null || selectedDrive.DriveType != DriveType.Removable) + { + logger.Log("Selected drive is not a compatible USB stick. Only USB sticks are supported.", Color.Red); + btnStart.Enabled = true; + return; + } + + logger.Log($"Starting to format Disk {diskNumber} ({driveLetter}) as {partitionScheme}...", Color.Black); + + // Format the drive with the selected partition scheme + await usbManagement.FormatDriveAsync(diskNumber.ToString(), partitionScheme); // Pass the disk number and selected partition scheme logger.Log($"Disk {diskNumber} formatted successfully.", Color.Black); logger.Log($"Disk {diskNumber} is now bootable.", Color.Black); // Copy ISO and create unattend.xml if checked bool createUnattend = checkCreateUnattend.Checked; - await usbManagement.CopyISOWithUnattendAsync(driveLetter, selectedIsoPath, createUnattend); // Use the drive letter for copying + await usbManagement.CopyISOWithUnattendAsync(driveLetter, selectedIsoPath, createUnattend); logger.Log("Process completed!", Color.Green); } @@ -194,15 +211,38 @@ namespace Views selectedIsoPath = openFileDialog.FileName; logger.Log($"Selected ISO file: {selectedIsoPath}", Color.Black); - checkCreateUnattend.Visible = true; // Show the checkbox to create unattend.xml + ToggleIsoControls(true); } else { logger.Log("ISO file selection was cancelled.", Color.Red); + ToggleIsoControls(false); // Disable ISO-related controls if selection is canceled } + + // MCT and Install Assistant buttons are always enabled + btnMCT.Enabled = true; + btnInstallAssistant.Enabled = true; } } + // Helper method to toggle ISO-related controls + private void ToggleIsoControls(bool isEnabled) + { + checkCreateUnattend.Visible = isEnabled; + comboBoxDrives.Enabled = isEnabled; + comboBoxDriveLetters.Enabled = isEnabled; + comboBoxPartitionScheme.Enabled = isEnabled; + lblDeviceIDInfo.Enabled = isEnabled; + lblDriveInfo.Enabled = isEnabled; + rtbLog.Enabled = isEnabled; + lblDriveLetterInfo.Enabled = isEnabled; + lblPartitionSchemeInfo.Enabled = isEnabled; + lblStatusInfo.Enabled = isEnabled; + linkShowDiskList.Enabled = isEnabled; + btnStart.Enabled = isEnabled; + } + + private void checkCreateUnattend_CheckedChanged(object sender, EventArgs e) { if (checkCreateUnattend.Checked) @@ -235,12 +275,27 @@ namespace Views private async void btnMCT_Click(object sender, EventArgs e) { - await usbManagement.DownloadMediaCreationTool(); + string mediaCreationToolUrl = "https://go.microsoft.com/fwlink/?linkid=2156295"; + await usbManagement.DownloadMediaTool(mediaCreationToolUrl, "MediaCreationTool.exe"); + } + + private async void btnInstallAssistant_Click(object sender, EventArgs e) + { + string installAssistantUrl = "https://go.microsoft.com/fwlink/?linkid=2171764"; + await usbManagement.DownloadMediaTool(installAssistantUrl, "Windows11InstallationAssistant.exe"); + } + + private async void linkPCHealthCheckApp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + string installAssistantUrl = "https://github.com/rcmaehl/WhyNotWin11/releases/download/2.6.1.1/WhyNotWin11.exe"; + await usbManagement.DownloadMediaTool(installAssistantUrl, "WhyNotWin11.exe"); } private void btnBack_Click(object sender, EventArgs e) { SwitchView.GoBack(this.Parent as Panel); } + + } } \ No newline at end of file diff --git a/FlybyScript/Views/MediaView.resx b/FlybyScript/Views/MediaView.resx index 1af7de1..4978a90 100644 --- a/FlybyScript/Views/MediaView.resx +++ b/FlybyScript/Views/MediaView.resx @@ -117,4 +117,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + + + 17, 17 + \ No newline at end of file