diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..11a900b --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +################################################################################ +# 此 .gitignore 文件已由 Microsoft(R) Visual Studio 自动创建。 +################################################################################ + +/packages +/Ultron.Ngrok/bin +/Ultron.Ngrok/obj +/Ultron.Update/bin +/Ultron.Update/obj +/.vs/Ultron.Ngrok/v15/Server/sqlite3 diff --git a/.vs/Ultron.Ngrok/v15/.suo b/.vs/Ultron.Ngrok/v15/.suo index 8cd851e..be6ac42 100644 Binary files a/.vs/Ultron.Ngrok/v15/.suo and b/.vs/Ultron.Ngrok/v15/.suo differ diff --git a/Ultron.Ngrok.sln b/Ultron.Ngrok.sln index 09705ee..f8da0c0 100644 --- a/Ultron.Ngrok.sln +++ b/Ultron.Ngrok.sln @@ -1,10 +1,12 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.21005.1 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.539 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ultron.Ngrok", "Ultron.Ngrok\Ultron.Ngrok.csproj", "{D44A2DC3-FADD-47E7-A311-35C4B3404DFF}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ultron.Update", "Ultron.Update\Ultron.Update.csproj", "{C11FF6DD-BABA-4D12-82A6-9DF1CFA3D8D9}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,8 +17,15 @@ Global {D44A2DC3-FADD-47E7-A311-35C4B3404DFF}.Debug|Any CPU.Build.0 = Debug|Any CPU {D44A2DC3-FADD-47E7-A311-35C4B3404DFF}.Release|Any CPU.ActiveCfg = Release|Any CPU {D44A2DC3-FADD-47E7-A311-35C4B3404DFF}.Release|Any CPU.Build.0 = Release|Any CPU + {C11FF6DD-BABA-4D12-82A6-9DF1CFA3D8D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C11FF6DD-BABA-4D12-82A6-9DF1CFA3D8D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C11FF6DD-BABA-4D12-82A6-9DF1CFA3D8D9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C11FF6DD-BABA-4D12-82A6-9DF1CFA3D8D9}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {78033F21-FBCD-499B-A09A-4D33E3F74647} + EndGlobalSection EndGlobal diff --git a/Ultron.Ngrok/Form/AboutBox.Designer.cs b/Ultron.Ngrok/Form/AboutBox.Designer.cs index 81ca93a..4f11056 100644 --- a/Ultron.Ngrok/Form/AboutBox.Designer.cs +++ b/Ultron.Ngrok/Form/AboutBox.Designer.cs @@ -27,62 +27,41 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBox)); this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); - this.logoPictureBox = new System.Windows.Forms.PictureBox(); this.labelProductName = new System.Windows.Forms.Label(); this.labelVersion = new System.Windows.Forms.Label(); this.labelCopyright = new System.Windows.Forms.Label(); - this.textBoxDescription = new System.Windows.Forms.TextBox(); this.okButton = new System.Windows.Forms.Button(); this.tableLayoutPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit(); this.SuspendLayout(); // // tableLayoutPanel // - this.tableLayoutPanel.ColumnCount = 2; - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33F)); - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 67F)); - this.tableLayoutPanel.Controls.Add(this.logoPictureBox, 0, 0); - this.tableLayoutPanel.Controls.Add(this.labelProductName, 1, 0); - this.tableLayoutPanel.Controls.Add(this.labelVersion, 1, 1); - this.tableLayoutPanel.Controls.Add(this.labelCopyright, 1, 2); - this.tableLayoutPanel.Controls.Add(this.textBoxDescription, 1, 4); - this.tableLayoutPanel.Controls.Add(this.okButton, 1, 5); + this.tableLayoutPanel.ColumnCount = 1; + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel.Controls.Add(this.labelProductName, 0, 0); + this.tableLayoutPanel.Controls.Add(this.labelVersion, 0, 1); + this.tableLayoutPanel.Controls.Add(this.labelCopyright, 0, 2); + this.tableLayoutPanel.Controls.Add(this.okButton, 0, 3); this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel.Location = new System.Drawing.Point(9, 8); this.tableLayoutPanel.Name = "tableLayoutPanel"; - this.tableLayoutPanel.RowCount = 6; - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.89362F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.31206F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.89362F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.382979F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 26.24113F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 24.11348F)); - this.tableLayoutPanel.Size = new System.Drawing.Size(417, 141); + this.tableLayoutPanel.RowCount = 4; + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel.Size = new System.Drawing.Size(223, 100); this.tableLayoutPanel.TabIndex = 0; // - // logoPictureBox - // - this.logoPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.logoPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("logoPictureBox.Image"))); - this.logoPictureBox.Location = new System.Drawing.Point(3, 3); - this.logoPictureBox.Name = "logoPictureBox"; - this.tableLayoutPanel.SetRowSpan(this.logoPictureBox, 6); - this.logoPictureBox.Size = new System.Drawing.Size(131, 135); - this.logoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.logoPictureBox.TabIndex = 12; - this.logoPictureBox.TabStop = false; - // // labelProductName // this.labelProductName.Dock = System.Windows.Forms.DockStyle.Fill; - this.labelProductName.Location = new System.Drawing.Point(143, 0); + this.labelProductName.Location = new System.Drawing.Point(6, 0); this.labelProductName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); this.labelProductName.MaximumSize = new System.Drawing.Size(0, 16); this.labelProductName.Name = "labelProductName"; - this.labelProductName.Size = new System.Drawing.Size(271, 16); + this.labelProductName.Size = new System.Drawing.Size(214, 16); this.labelProductName.TabIndex = 19; this.labelProductName.Text = "产品名称"; this.labelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; @@ -90,11 +69,11 @@ // labelVersion // this.labelVersion.Dock = System.Windows.Forms.DockStyle.Fill; - this.labelVersion.Location = new System.Drawing.Point(143, 20); + this.labelVersion.Location = new System.Drawing.Point(6, 20); this.labelVersion.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); this.labelVersion.MaximumSize = new System.Drawing.Size(0, 16); this.labelVersion.Name = "labelVersion"; - this.labelVersion.Size = new System.Drawing.Size(271, 16); + this.labelVersion.Size = new System.Drawing.Size(214, 16); this.labelVersion.TabIndex = 0; this.labelVersion.Text = "版本"; this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; @@ -102,36 +81,22 @@ // labelCopyright // this.labelCopyright.Dock = System.Windows.Forms.DockStyle.Fill; - this.labelCopyright.Location = new System.Drawing.Point(143, 42); + this.labelCopyright.Location = new System.Drawing.Point(6, 39); this.labelCopyright.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); this.labelCopyright.MaximumSize = new System.Drawing.Size(0, 16); this.labelCopyright.Name = "labelCopyright"; - this.labelCopyright.Size = new System.Drawing.Size(271, 16); + this.labelCopyright.Size = new System.Drawing.Size(214, 16); this.labelCopyright.TabIndex = 21; this.labelCopyright.Text = "版权"; this.labelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // - // textBoxDescription - // - this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBoxDescription.Location = new System.Drawing.Point(143, 73); - this.textBoxDescription.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3); - this.textBoxDescription.Multiline = true; - this.textBoxDescription.Name = "textBoxDescription"; - this.textBoxDescription.ReadOnly = true; - this.textBoxDescription.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.textBoxDescription.Size = new System.Drawing.Size(271, 29); - this.textBoxDescription.TabIndex = 23; - this.textBoxDescription.TabStop = false; - this.textBoxDescription.Text = "说明"; - // // okButton // this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.okButton.Location = new System.Drawing.Point(339, 117); + this.okButton.Location = new System.Drawing.Point(145, 65); this.okButton.Name = "okButton"; - this.okButton.Size = new System.Drawing.Size(75, 21); + this.okButton.Size = new System.Drawing.Size(75, 25); this.okButton.TabIndex = 24; this.okButton.Text = "确定(&O)"; this.okButton.Click += new System.EventHandler(this.okButton_Click); @@ -141,7 +106,7 @@ this.AcceptButton = this.okButton; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(435, 157); + this.ClientSize = new System.Drawing.Size(241, 116); this.Controls.Add(this.tableLayoutPanel); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; @@ -153,8 +118,6 @@ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "AboutBox"; this.tableLayoutPanel.ResumeLayout(false); - this.tableLayoutPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit(); this.ResumeLayout(false); } @@ -162,11 +125,9 @@ #endregion private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; - private System.Windows.Forms.PictureBox logoPictureBox; private System.Windows.Forms.Label labelProductName; private System.Windows.Forms.Label labelVersion; private System.Windows.Forms.Label labelCopyright; - private System.Windows.Forms.TextBox textBoxDescription; private System.Windows.Forms.Button okButton; } } diff --git a/Ultron.Ngrok/Form/AboutBox.cs b/Ultron.Ngrok/Form/AboutBox.cs index 5b50bd7..929c687 100644 --- a/Ultron.Ngrok/Form/AboutBox.cs +++ b/Ultron.Ngrok/Form/AboutBox.cs @@ -18,7 +18,6 @@ namespace Ultron.Ngrok this.labelProductName.Text = AssemblyProduct; this.labelVersion.Text = String.Format("版本 {0}", AssemblyVersion); this.labelCopyright.Text = AssemblyCopyright; - this.textBoxDescription.Text = AssemblyDescription; } #region 程序集特性访问器 diff --git a/Ultron.Ngrok/Form/AboutBox.resx b/Ultron.Ngrok/Form/AboutBox.resx index 43d2af5..1af7de1 100644 --- a/Ultron.Ngrok/Form/AboutBox.resx +++ b/Ultron.Ngrok/Form/AboutBox.resx @@ -117,290 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 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 - - \ No newline at end of file diff --git a/Ultron.Ngrok/Form/SettingForm.cs b/Ultron.Ngrok/Form/SettingForm.cs index 492bb43..c3a2e1b 100644 --- a/Ultron.Ngrok/Form/SettingForm.cs +++ b/Ultron.Ngrok/Form/SettingForm.cs @@ -1,12 +1,10 @@ using System; using System.Collections.Generic; -using System.ComponentModel; using System.Data; -using System.Drawing; using System.IO; using System.Linq; +using System.Reflection; using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; using Ultron.Ngrok.Model; using Ultron.Ngrok.Properties; @@ -54,7 +52,7 @@ namespace Ultron.Ngrok public void InitFile() { - string path = System.IO.Directory.GetCurrentDirectory(); + string path = Directory.GetCurrentDirectory(); string ngrokFile = string.Empty; if (Environment.Is64BitOperatingSystem)//判断是否为64位操作系统 { @@ -80,12 +78,20 @@ namespace Ultron.Ngrok } } + public string AssemblyVersion + { + get + { + return Assembly.GetExecutingAssembly().GetName().Version.ToString(); + } + } + /// /// 初始化配置文件 /// public void InitConfig() { - string path = System.IO.Directory.GetCurrentDirectory(); + string path = Directory.GetCurrentDirectory(); ConfigFile = path + @"\ngrok.cfg"; if (!File.Exists(ConfigFile)) @@ -97,6 +103,7 @@ namespace Ultron.Ngrok { ServerAddr = "ngrok.aaqbee.com:8083", TrustHostRootCerts = false, + Version = AssemblyVersion, Tunnels = new Dictionary() }; Tunnel httpTunnel = new Tunnel @@ -131,6 +138,12 @@ namespace Ultron.Ngrok var input = new StringReader(configText); var deserializer = new Deserializer(namingConvention: new CamelCaseNamingConvention()); ServerConfig = deserializer.Deserialize(input); + + if(ServerConfig.Version != AssemblyVersion) + { + ServerConfig.Version = AssemblyVersion; + SaveConfig(); + } } this.tunnelListBox.DisplayMember = "TunnelName"; diff --git a/Ultron.Ngrok/FormMain.cs b/Ultron.Ngrok/FormMain.cs index 9b2609c..4ce772a 100644 --- a/Ultron.Ngrok/FormMain.cs +++ b/Ultron.Ngrok/FormMain.cs @@ -1,45 +1,137 @@ using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; using System.Diagnostics; using System.Reflection; using System.Resources; using System.Threading; -using System.Text.RegularExpressions; -using System.IO; -using System.Net.NetworkInformation; -using YamlDotNet.Serialization; -using YamlDotNet.Serialization.NamingConventions; using Ultron.Ngrok.Utils; -using Ultron.Ngrok.Model; +using System.Net; +using System.IO; using Ultron.Ngrok.Properties; namespace Ultron.Ngrok { public partial class FormMain : Form { - CmdUtils cmd = new CmdUtils(); + #region 属性 - SettingForm setting; + /// + /// 命令行 + /// + public CmdUtils cmd { get; set; } + /// + /// 设置 + /// + public SettingForm setting { get; set; } + + /// + /// 数据集名称 + /// + public string AssemblyProduct + { + get + { + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); + if (attributes.Length == 0) + { + return ""; + } + return ((AssemblyProductAttribute)attributes[0]).Product; + } + } + + /// + /// 数据集版本 + /// + public string AssemblyVersion + { + get + { + return Assembly.GetExecutingAssembly().GetName().Version.ToString(); + } + } + + #endregion + + #region 初始化 + + /// + /// 构造 + /// public FormMain() { //引用资源处理 AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; - //初始化 + //初始化界面 InitializeComponent(); //初始化配置 InitSetting(); } + /// + /// 窗体Load + /// + /// + /// + private void FormMain_Load(object sender, EventArgs e) + { + //进程检测 + CheckProcessAndKill(setting.ExeFile); + + //初始化CMD + new Thread(new ThreadStart(InitCmd)).Start(); + + //检查更新 + new Thread(new ThreadStart(CheckUpdateAsync)).Start(); + } + + #endregion + + #region 事件 + + private void startBtn_Click(object sender, EventArgs e) + { + //网络检测 + NetworkUtils.CheckServeStatus(this); + cmd.SendMsg(setting.ExecuteCommand); + + startBtn.Enabled = false; + endBtn.Enabled = true; + } + + private void endBtn_Click(object sender, EventArgs e) + { + CheckProcessAndKill(setting.ExeFile); + cmd.CloseCmd(); + startBtn.Enabled = true; + endBtn.Enabled = false; + } + + private void 设置ToolStripMenuItem_Click(object sender, EventArgs e) + { + setting.ReLoadConfig(); + setting.ShowDialog(); + } + + private void 帮助ToolStripMenuItem_Click(object sender, EventArgs e) + { + Process.Start("explorer.exe", "http://git.iwangyu.cn/wixy/Ultron.Ngrok/wiki"); + } + + private void 关于ToolStripMenuItem_Click(object sender, EventArgs e) + { + AboutBox about = new AboutBox(); + about.ShowDialog(); + } + + #endregion + + #region 方法 + Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { string dllName = args.Name.Contains(",") ? args.Name.Substring(0, args.Name.IndexOf(',')) : args.Name.Replace(".dll", ""); @@ -78,47 +170,25 @@ namespace Ultron.Ngrok setting.WriteLogToForm += WriteLog; } - private void InitCmd() { + public void InitCmd() + { //创建CMD + cmd = new CmdUtils(); cmd.ProcessMessageEvent += DealMessage; cmd.ProcessKilled += cmd_Exited; } - - private void startBtn_Click(object sender, EventArgs e) - { - //网络检测 - NetworkUtils.CheckServeStatus(this); - cmd.SendMsg(setting.ExecuteCommand); - startBtn.Enabled = false; - endBtn.Enabled = true; - } - - private void endBtn_Click(object sender, EventArgs e) + /// + /// 检查更新 + /// + public void CheckUpdateAsync() { - CheckProcessAndKill(setting.ExeFile); - cmd.CloseCmd(); - startBtn.Enabled = true; - endBtn.Enabled = false; + string checkUrl = "https://blog.wixy.cn/api/release/" + AssemblyProduct + "/" + AssemblyVersion; + checkUrl = "https://blog.wixy.cn/api/release/NisStartTool/0.0.1"; + HttpGet(checkUrl); } - private void 关于ToolStripMenuItem_Click(object sender, EventArgs e) - { - AboutBox about = new AboutBox(); - about.ShowDialog(); - } - - private void FormMain_Load(object sender, EventArgs e) - { - //进程检测 - CheckProcessAndKill(setting.ExeFile); - - //初始化CMD - new Thread(new ThreadStart(InitCmd)).Start(); - - } - - public void DealMessage(int proId,string message) + public void DealMessage(int proId, string message) { if (message.StartsWith("Server failed to allocate tunnel")) { @@ -168,14 +238,52 @@ namespace Ultron.Ngrok endBtn.Enabled = false; } - private void 设置ToolStripMenuItem_Click(object sender, EventArgs e) + public void HttpGet(string url) { - setting.ReLoadConfig(); - setting.ShowDialog(); + WebClient wc = new WebClient(); + Uri uri = new Uri(url, UriKind.RelativeOrAbsolute); + wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted); + wc.OpenReadAsync(uri); } - private void 帮助ToolStripMenuItem_Click(object sender, EventArgs e) + public void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) { + StreamReader read = new StreamReader(e.Result); + string str = read.ReadToEnd(); + if (str.Contains("\"code\":1")) + return; + else + { + if (MessageBox.Show("检测到新版本,立即更新?", "版本更新", MessageBoxButtons.YesNo) == DialogResult.Yes) + { + int verStart = str.IndexOf("\"version\":\"") + 11; + int verEnd = str.IndexOf("\",\"title\""); + string version = str.Substring(verStart, verEnd - verStart); + string updateExe = Directory.GetCurrentDirectory() + @"\autoUpdate.exe"; + if (File.Exists(updateExe)) + { + File.Delete(updateExe); + } + + FileStream stream = new FileStream(updateExe, FileMode.OpenOrCreate); + stream.Write(Resources.autoUpdate, 0, Resources.autoUpdate.Length); + stream.Close(); + + RunUpdateProgram(version); + } + } } + + public void RunUpdateProgram(string verion) + { + Application.Exit(); + ProcessStartInfo startInfo = new ProcessStartInfo(); + startInfo.FileName = "autoUpdate.exe"; + startInfo.Arguments = "https://cloud-disk-1251608065.cos.ap-guangzhou.myqcloud.com/uNgrok_" + verion + ".exe" + " uNgrok.exe"; + startInfo.WindowStyle = ProcessWindowStyle.Normal; + Process.Start(startInfo); + } + + #endregion } } diff --git a/Ultron.Ngrok/Properties/Resources.Designer.cs b/Ultron.Ngrok/Properties/Resources.Designer.cs index 61f5f95..fde35fd 100644 --- a/Ultron.Ngrok/Properties/Resources.Designer.cs +++ b/Ultron.Ngrok/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace Ultron.Ngrok.Properties { // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen // (以 /str 作为命令选项),或重新生成 VS 项目。 - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -47,7 +47,7 @@ namespace Ultron.Ngrok.Properties { } /// - /// 使用此强类型资源类,为所有资源查找 + /// 重写当前线程的 CurrentUICulture 属性 /// 重写当前线程的 CurrentUICulture 属性。 /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] @@ -60,6 +60,16 @@ namespace Ultron.Ngrok.Properties { } } + /// + /// 查找 System.Byte[] 类型的本地化资源。 + /// + internal static byte[] autoUpdate { + get { + object obj = ResourceManager.GetObject("autoUpdate", resourceCulture); + return ((byte[])(obj)); + } + } + /// /// 查找 System.Byte[] 类型的本地化资源。 /// diff --git a/Ultron.Ngrok/Properties/Resources.resx b/Ultron.Ngrok/Properties/Resources.resx index 05a859a..038321e 100644 --- a/Ultron.Ngrok/Properties/Resources.resx +++ b/Ultron.Ngrok/Properties/Resources.resx @@ -127,4 +127,7 @@ ..\Resources\YamlDotNet.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\autoUpdate.exe;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/Ultron.Ngrok/Resources/autoUpdate.exe b/Ultron.Ngrok/Resources/autoUpdate.exe new file mode 100644 index 0000000..589b54e Binary files /dev/null and b/Ultron.Ngrok/Resources/autoUpdate.exe differ diff --git a/Ultron.Ngrok/Ultron.Ngrok.csproj b/Ultron.Ngrok/Ultron.Ngrok.csproj index 9f28079..93616fa 100644 --- a/Ultron.Ngrok/Ultron.Ngrok.csproj +++ b/Ultron.Ngrok/Ultron.Ngrok.csproj @@ -89,6 +89,7 @@ SettingForm.cs + AboutBox.cs @@ -149,6 +150,7 @@ + diff --git a/Ultron.Ngrok/Utils/HttpUtils.cs b/Ultron.Ngrok/Utils/HttpUtils.cs new file mode 100644 index 0000000..f8add4f --- /dev/null +++ b/Ultron.Ngrok/Utils/HttpUtils.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net; +using System.Net.NetworkInformation; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Xml.Linq; + +namespace Ultron.Ngrok.Utils +{ + public class HttpUtils + { + public static void HttpGet(string url) + { + WebClient wc = new WebClient(); + Uri uri = new Uri(url, UriKind.RelativeOrAbsolute); + wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted); + wc.OpenReadAsync(uri); + } + public static void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) + { + StreamReader read = new StreamReader(e.Result); + string str = read.ReadToEnd(); + } + + public static void HttpPostAsync(string url,string postData) + { + HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest; + request.Timeout = 30000; + request.Method = "post"; ; + request.ContentType = "application/json;charset=UTF-8"; + StatePara para = new StatePara + { + RequestInfo = request, + PostData = postData + }; + request.BeginGetRequestStream(GetRequestStreamCallback, para); + } + + private static void GetRequestStreamCallback(IAsyncResult asyncResult) + { + StatePara para = (StatePara)asyncResult.AsyncState; + try + { + para.RequestInfo.BeginGetResponse(GetResponseCallback, para); + } + catch (Exception ex) + { + string retString = ex.Message; + } + } + private static void GetResponseCallback(IAsyncResult asyncResult) + { + string retString = ""; + StatePara para = (StatePara)asyncResult.AsyncState; + IAsyncResult IAResult = para.RequestInfo as IAsyncResult; + try + { + HttpWebRequest request = para.RequestInfo; + HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult); + + + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + using (var gzip = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress)) + { + + var reader = new StreamReader(gzip, Encoding.GetEncoding("utf-8")); + retString = reader.ReadToEnd(); + reader.Close(); + } + } + else + { + Stream myResponseStream = response.GetResponseStream(); + StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); + retString = myStreamReader.ReadToEnd(); + myStreamReader.Close(); + myResponseStream.Close(); + } + } + catch (Exception ex) + { + retString = ex.Message; + } + } + + class StatePara + { + public HttpWebRequest RequestInfo { get; set; } + + public string PostData { get; set; } + + public string ServerType { get; set; } + + } + } +} diff --git a/Ultron.Update/App.config b/Ultron.Update/App.config new file mode 100644 index 0000000..8e15646 --- /dev/null +++ b/Ultron.Update/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Ultron.Update/Program.cs b/Ultron.Update/Program.cs new file mode 100644 index 0000000..e9e3415 --- /dev/null +++ b/Ultron.Update/Program.cs @@ -0,0 +1,28 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Windows.Forms; + +namespace Ultron.Update +{ + static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main(string[] args) + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + if (args.Length == 0) + { + Application.Run(new UpdateForm()); + } + else + { + Application.Run(new UpdateForm(args)); + } + } + } +} diff --git a/Ultron.Update/Properties/AssemblyInfo.cs b/Ultron.Update/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..74dc06c --- /dev/null +++ b/Ultron.Update/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("Ultron.Update")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Ultron.Update")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("c11ff6dd-baba-4d12-82a6-9df1cfa3d8d9")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 +// 方法是按如下所示使用“*”: : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Ultron.Update/Properties/Resources.Designer.cs b/Ultron.Update/Properties/Resources.Designer.cs new file mode 100644 index 0000000..3e62cdc --- /dev/null +++ b/Ultron.Update/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本: 4.0.30319.42000 +// +// 对此文件的更改可能导致不正确的行为,如果 +// 重新生成代码,则所做更改将丢失。 +// +//------------------------------------------------------------------------------ + +namespace Ultron.Update.Properties +{ + + + /// + /// 强类型资源类,用于查找本地化字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或删除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// 返回此类使用的缓存 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Ultron.Update.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 覆盖当前线程的 CurrentUICulture 属性 + /// 使用此强类型的资源类的资源查找。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Ultron.Update/Properties/Resources.resx b/Ultron.Update/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Ultron.Update/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Ultron.Update/Properties/Settings.Designer.cs b/Ultron.Update/Properties/Settings.Designer.cs new file mode 100644 index 0000000..aa69ce5 --- /dev/null +++ b/Ultron.Update/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Ultron.Update.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Ultron.Update/Properties/Settings.settings b/Ultron.Update/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Ultron.Update/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Ultron.Update/Ultron.Update.csproj b/Ultron.Update/Ultron.Update.csproj new file mode 100644 index 0000000..4a13fbc --- /dev/null +++ b/Ultron.Update/Ultron.Update.csproj @@ -0,0 +1,88 @@ + + + + + Debug + AnyCPU + {C11FF6DD-BABA-4D12-82A6-9DF1CFA3D8D9} + WinExe + Ultron.Update + autoUpdate + v4.5 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + favicon.ico + + + + + + + + + + + + + + + + + Form + + + UpdateForm.cs + + + + + UpdateForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + \ No newline at end of file diff --git a/Ultron.Update/UpdateForm.Designer.cs b/Ultron.Update/UpdateForm.Designer.cs new file mode 100644 index 0000000..d5884d5 --- /dev/null +++ b/Ultron.Update/UpdateForm.Designer.cs @@ -0,0 +1,90 @@ +namespace Ultron.Update +{ + partial class UpdateForm + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UpdateForm)); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // progressBar1 + // + this.progressBar1.Location = new System.Drawing.Point(12, 12); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(233, 23); + this.progressBar1.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(119, 45); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(29, 12); + this.label1.TabIndex = 1; + this.label1.Text = "进度"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 45); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(29, 12); + this.label2.TabIndex = 2; + this.label2.Text = "提示"; + this.label2.Visible = false; + // + // UpdateForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(257, 65); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.progressBar1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "UpdateForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "自动更新"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ProgressBar progressBar1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + } +} + diff --git a/Ultron.Update/UpdateForm.cs b/Ultron.Update/UpdateForm.cs new file mode 100644 index 0000000..7bcd6aa --- /dev/null +++ b/Ultron.Update/UpdateForm.cs @@ -0,0 +1,142 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Net; +using System.Windows.Forms; + +namespace Ultron.Update +{ + public partial class UpdateForm : Form + { + public string ExecuteFile { get; set; } + + public UpdateForm() + { + InitializeComponent(); + + string fileVersion; + if (File.Exists("uNgrok.exe")) + { + try + { + FileVersionInfo file1 = FileVersionInfo.GetVersionInfo("uNgrok.exe"); + fileVersion = string.Format("{0}.{1}.{2}.{3}", file1.FileMajorPart, file1.FileMinorPart, file1.FileBuildPart, file1.FilePrivatePart); + string checkUrl = "https://blog.wixy.cn/api/release/Ultron.Ngrok/" + fileVersion; + HttpGet(checkUrl); + } + catch (Exception) + { + fileVersion = ""; + } + } + else + { + label1.Visible = false; + label2.Visible = true; + label2.Text = "未检测到uNgrok"; + } + } + + public UpdateForm(string[] args) + { + InitializeComponent(); + + ExecuteFile = args[1]; + + string updateFile = Directory.GetCurrentDirectory() + @"\"+ ExecuteFile; + + if (File.Exists(updateFile)) + File.Delete(updateFile); + if (File.Exists(Directory.GetCurrentDirectory() + @"\ngrok_x64.exe")) + File.Delete(Directory.GetCurrentDirectory() + @"\ngrok_x64.exe"); + if (File.Exists(Directory.GetCurrentDirectory() + @"\ngrok_x86.exe")) + File.Delete(Directory.GetCurrentDirectory() + @"\ngrok_x86.exe"); + + DownLoadFile(args[0], args[1]); + } + + + public void HttpGet(string url) + { + WebClient wc = new WebClient(); + Uri uri = new Uri(url, UriKind.RelativeOrAbsolute); + wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted); + wc.OpenReadAsync(uri); + } + + public void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) + { + StreamReader read = new StreamReader(e.Result); + string str = read.ReadToEnd(); + if (str.Contains("\"code\":1")) + { + label1.Visible = false; + label2.Visible = true; + label2.Text = "未检测到新版本"; + return; + } + else + { + label2.Visible = false; + label1.Visible = true; + if (MessageBox.Show("检测到新版本,立即更新?", "版本更新", MessageBoxButtons.YesNo) == DialogResult.Yes) + { + int verStart = str.IndexOf("\"version\":\"") + 11; + int verEnd = str.IndexOf("\",\"title\""); + string version = str.Substring(verStart, verEnd - verStart); + + DownLoadFile("https://cloud-disk-1251608065.cos.ap-guangzhou.myqcloud.com/uNgrok_" + version + ".exe", "uNgrok.exe"); + } + } + } + + + private void DownLoadFile(string fileUrl,string fileName) + { + WebClient wc = new WebClient(); + wc.DownloadProgressChanged += wc_DownloadProgressChanged; + wc.DownloadFileCompleted += Wc_DownloadFileCompleted; + wc.DownloadFileAsync(new Uri(fileUrl), fileName); + } + + private void Wc_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e) + { + label1.Text = "完成"; + RunNewApp(); + } + + // int index = 0; + void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) + { + try + { + Action act = () => + { + progressBar1.Value = e.ProgressPercentage; + label1.Text = e.ProgressPercentage + "%"; + }; + Invoke(act); + } + catch(Exception ex) + { + + } + } + + public void RunNewApp() + { + try + { + ProcessStartInfo startInfo = new ProcessStartInfo(); + startInfo.FileName = "uNgrok.exe"; + startInfo.WindowStyle = ProcessWindowStyle.Normal; + Process.Start(startInfo); + Application.Exit(); + } + catch (Exception ex) + { + + } + } + } +} diff --git a/Ultron.Update/UpdateForm.resx b/Ultron.Update/UpdateForm.resx new file mode 100644 index 0000000..44a2792 --- /dev/null +++ b/Ultron.Update/UpdateForm.resx @@ -0,0 +1,408 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAABILAAASCwAAAAAAAAAA + AADdtIj/2aRr/9qocP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qhx/9iiZ//v2b//3bSI/9mka//aqHD/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qocf/Yomf/79m//920iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/2KJn/+/Zv//dtIj/2aRr/9qo + cP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9ii + Z//v2b//3bSI/9mka//aqHD/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qocf/Yomf/79m//920iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnbv/ap27/2qdu/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/2KJn/+/Zv//dtIj/2aRr/9qocP/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2aZu/9qnb//cqXP/3Kl0/9yp + dP/ap3D/2aZu/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9iiZ//v2b//3bSI/9mk + a//aqHD/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2aZu/9yp + dP/bqHD/0qBc/9KfVv/Sn1r/2aZs/92qdv/apm//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qo + cf/Yomf/79m//920iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2aZu/92qdf/QnVf/uoUg/7J9Df+xfAn/sXsI/7aBFv/HlEL/26lz/9qncP/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//aqHH/2KJn/+/Zv//dtIj/2aRr/9qocP/ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2aZt/96reP/Nl0n/rHMA/6txAP+scwD/r3YB/7N9C/+yfAr/rncB/8CN + Mf/bqHL/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9iiZ//v2b//3bSI/9mka//aqHD/2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdu/9yqdf/SnFj/r3gG/72UO//Or2v/zK5p/76V + Pf+weQj/sHcE/7R/D/+tdwD/x5ND/92qdv/Zpm7/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qocf/Yomf/79m//920 + iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qocP/bpW3/zKNe/+Xb + vv/////////+/////v//////6uHJ/7uPM/+vdQD/sn0K/7aAFv/Zpm7/2qdw/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//aqHH/2KJn/+/Zv//dtIj/2aRr/9qocP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qo + cf/Zo2n/3riL//r69v////////7+//79+//+/fv//v79///////4+PP/vZZA/692AP+yfAv/055c/9yp + c//ap27/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qhx/9iiZ//v2b//3bSI/9mka//aqHD/2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2KZt//Ps3////////v37///////////////////////9/fr//////+/p + 1/+zfxL/r3kF/9KeWf/cqXT/2qdu/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qocf/Yomf/79m//920iP/ZpGv/2qhw/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHD/2aNp/9+5jf/9//////7+//////////////////// + //////////////79+///////xaNZ/6tyAP/ToFz/3Kl0/9mnbv/ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/2KJn/+/Z + v//dtIj/2aRr/9qocP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9ihZf/nyqf////////+ + /f/////////////////////////////////+/fv//////9rDjf+pcQD/1KBd/9ypdP/ap27/2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qhx/9iiZ//v2b//3bSI/9mka//aqHD/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9uo + cf/YoWX/5cmn///////+/v3//////////////////////////////////v37///////fypv/qnEA/9Sg + XP/cqXT/2adu/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qocf/Yomf/79m//920iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//aqHH/16Fl/+XJp////////v79//////////////////////////////////79 + +///////38qZ/6pxAP/UoFz/3Kl0/9mnbv/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/2KJn/+/Zv//dtIj/2aRr/9qo + cP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9ehZf/lyaf///////7+/f////////////// + ///////////////////+/fv//////9/Kmv+qcQD/1KBd/9ypdP/Zp27/2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9ii + Z//v2b//3bSI/9mka//aqHD/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qocf/XoWX/5cmn//// + ///+/v3//////////////////////////////////v37///////fypr/qnEA/9SgXf/cqXT/2adu/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qocf/Yomf/79m//920iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//aqHH/16Fl/+XJp////////v79//////////////////////////////////79+///////38qa/6px + AP/UoF3/3Kl0/9mnbv/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/2KJn/+/Zv//dtIj/2aRr/9qocP/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qhx/9ehZf/lyaf///////7+/f////////////////////////////// + ///+/fv//////9/Kmv+qcQD/1KBd/9ypdP/Zp27/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9iiZ//v2b//3bSI/9mk + a//aqHD/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qocf/XoWX/5cmn///////+/v3///////// + /////////////////////////v37///////fypr/qnEA/9SgXf/cqXT/2adu/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qo + cf/Yomf/79m//920iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/16Fl/+XJ + p////////v79//////////////////////////////////79+///////38qa/6pxAP/UoF3/3Kl0/9mn + bv/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//aqHH/2KJn/+/Zv//dtIj/2qVr/9qocP/ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qhx/9ehZf/lyaf///////7+/f/////////////////////////////////+/fv//////9/K + mv+qcQD/1KBd/9ypdP/Zp27/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9iiZ//v2b//3bSH/9mkaf/ap3D/2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qocf/XoWX/5cmn///////+/v3///////////////////////// + /////////v37///////fypr/qnEA/9SgXf/cqXT/2adu/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qocf/Yomj/79m//963 + jP/cqXL/2qhw/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/16Fl/+XJp////////v79//// + //////////////////////////////79+///////38qa/6pxAP/UoF3/3Kl0/9mnbv/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//aqHH/2KJo/+/Zv//jwJn/4LSC/96xgP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9eh + Zf/lyaf///////7+/f/////////////////////////////////+/fv//////9/Kmv+qcQD/1KBd/9yp + dP/Zp27/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//26hx/9iiaP/w28H/48CZ/9+ygP/htob/3q97/9mmbv/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2aZu/9mm + bv/Zpm7/2qdu/9qocf/XoWX/5cmn///////+/v3//////////////////////////////////v37//// + ///fypr/qnEA/9SgXf/cqXT/2adu/9qnb//ap27/2aZt/9mmbf/Zpm3/2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9mnb//bqnP/8uDK/+G/l//gs4H/4LWE/+G1 + hf/cq3b/2qZu/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdu/9yqdf/dqnb/3ap3/9ypdf/aqHD/16Fl/+XJp////////v79//////////////////// + //////////////79+///////38qa/6pxAP/UoF3/3Kl0/9qnbv/apm7/26hy/92qdv/dqnb/3ap2/9qn + cP/ap27/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9mmbv/bq3b/37J+//Lf + yP/ctov/3rF+/+C2hf/gtYT/4LWD/9upcv/ap27/2qdv/9qnb//ap2//2qdu/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9ypc//MmE7/wo0v/8KNMP/Pm1T/3at4/9ehZP/lyaf///////7+ + /f/////////////////////////////////+/fv//////9/Kmv+qcQD/1KBd/9ypdP/Zpmz/3Kl0/9ah + Yv/Ejzf/w40u/8eSQf/YpW3/2qhx/9qnbv/ap2//2qdv/9qnb//ap2//2qdu/9qnb//ap2//2qdv/9qn + bv/ZqHH/4LWE/9+xfv/y38j/37aL/9qpcf/gtoX/4LWE/+C2hf/fsoH/26Zw/9qnb//ap2//2qZu/9qo + cv/ap3D/2qdu/9qnb//ap2//2qdv/9qnb//ap2//2aZu/92rd//GkTz/rngD/7F7B/+veQX/r3kE/8iU + Q//bpG3/5cil///////+/v3//////////////////////////////////v37///////fypr/qnEA/9Sg + Xf/bqHL/3Kl0/9WiYf+0fg7/sHoF/7B7B/+ueAH/uIMe/9elav/aqHH/2qdu/9qnb//ap2//2qdu/9up + cv/Zpm7/2qdv/9qnb//apm7/3rGA/+G3hv/esX3/8t/I/+G4kP/bp2//3q55/+G2hf/gtYP/4LaG/96w + ff/apm7/2qZv/96ygf/jvZP/4biM/9qncf/ap27/2qdv/9qnb//ap2//2aZu/9yqdf/PmVL/q3IA/7B4 + Bf+tdAD/snsJ/7N+Df+vegX/xo47/+jMrv///////v79//////////////////////////////////79 + +///////38qa/6pxAP/ToFv/3qt5/9WhYf+wdwf/rXYC/652Av+vdgL/tH8P/654Af/Djzj/3ap2/9mm + bv/ap2//2qZv/+G3iP/kvZT/4LSG/9mnb//apm7/3a55/+G2hf/gtYX/3rF+//Hfx//gt47/3alz/9yp + c//esH3/4LaF/+C0g//gtob/3a14/9unb//jvZL/472U/+S/lv/gtYf/2aZt/9qnb//ap2//2qdv/9qn + cP/apW3/zqdp/+DSq//u5c3/2MOR/7OBGv+weAT/s38P/61zAP/Yu4r///////79/P////////////// + ///////////////////+/fv//////9/Kmv+qcAD/1aJi/9ymbf+4hSP/1LyE/+3kzf/k17X/wJpH/692 + Av+yfAn/t4EY/9qmbv/aqHD/2qVt/+C0hP/kv5b/472T/+S+lf/cqXP/26p1/+G2hf/gtYT/4beH/9yt + eP/v2sD/4LeP/92pc//dq3j/26h0/+Czgf/gtoX/4LWE/+C2hP/bqXL/4LSF/+S/lv/ivJL/5L+W/96x + f//ZpW3/2qdw/9qocf/Yo2j/37yT//z9/P///////v79///////x6tj/t4Yf/7F7CP+udAD/yqtp//// + ///+/fv//////////////////////////////////v37///////fypn/q3IA/9OeWv+7iS//6ODE//// + ///+/v3////+///////JqWH/rnQA/7V/Fv/XpGr/2qZu/92ufP/kv5X/47yS/+O/lf/huIr/2qly/+C1 + g//gtYT/4LWE/+C1hP/ZpGz/8NrB/+C3j//dqXP/3ax4/9yqdf/aqnT/4LWE/+C1hP/gtYX/4LOB/9mp + cv/iuo3/5L6U/+O9kv/kvpT/3Kx4/9mmbf/ap2//2ahx//Xv5v///////vz6//7+/f/9/Pn//////+nf + xv+vfBL/rHAA/8yub////////v37//////////////////////////////////79+///////38ua/61z + AP+6hiD/4da0///////9/Pn//v79//38+v//////8+/k/7B/Ef+9hiL/3Klz/9qqdf/jvZP/472T/+O9 + lP/jvJH/26l0/9+yf//gtoX/4LWD/+C1hP/brHf/26Zu//Hbw//etor/3Khz/92reP/drHj/26l0/9ys + d//htoX/4LWD/+G2hf/esX7/3ap0/+S9kf/jvZT/472U/+O8kf/bqnT/2aNn/+C3i//+//////7+//// + //////////////79+///////49m//6pxAP/Lq2r///////79+/////////////////////////////// + ///+/fv//////9/Kmf+mawD/4NKs///////+/fv///////////////////79//////++l0L/zJVH/9yr + eP/huo3/476U/+O9k//kvpT/3at2/96ufP/htob/4LSD/+G2hf/drXj/3Kp1/9yncf/w28P/3LSI/9qn + bv/erHn/3at3/96seP/bqHP/3a57/+C2hv/gtIP/4baH/92uef/crXn/5L6W/+O8kv/kvpX/47qP/9mj + aP/guI3//////////v///////////////////////v37///////axpj/x6hl///////+/fz///////// + /////////////////////////v37///////axI7/1LyD///////+/fv///////////////////////// + /v/9////1rF+/9mjZ//htor/5L+W/+O8kv/kv5b/3q9+/9ysdv/gtob/4LSD/+G2hv/fsH7/3Khy/96s + ev/bp3D/8NvD/920iP/ZpGr/3Kp2/92reP/dq3f/3at3/9mnb//fsX//4LaF/+C1g//htob/3Kp1/96z + gv/kv5f/4ryS/+S/lv/fs4L/26x4//v38//////////+/////////////////////////v7//Pz7/+/r + 3v///////////////////////////////////////////////v//////8vDl//v69/////////////// + /////////////////v//////+vn2/9yufP/fr33/5L+W/+O8kv/kv5b/37SF/9upc//gtoX/4LWE/+C1 + hf/fs4L/2ahx/92qd//drHn/26dw//Dbw//dtIj/2aRq/9qncP/cqnb/3at4/92qdP/ap27/26hx/+C0 + gv/gtYT/4LWE/+C1hP/bqHL/4biK/+S/lf/jvJL/5MCY/9uqdP/mzq////////79/P////////////// + //////////////7+/f////////////////////////////////////////////////////////////// + ///+/v3////////////////////////////+/fz//////+jRtf/ZqHD/5MCX/+O8kv/kvpX/4bmM/9mo + cf/gtIL/4LWF/+C1hP/htYT/26lz/9mmbv/cqnX/3qx6/9umbv/w2sD/3bSI/9qka//ap3D/2qdw/9uo + cf/ap3D/2qdw/9qmbv/bqnT/4bWF/+C1hP/gtoX/37KA/9upc//ivJH/472U/+O9k//kvpX/2adw/+rY + wv///////v39/////////////////////////////v7+//////////////////////////////////// + /////////////////////v7////////////////////////////+/f3//////+3dyP/YpW3/5LyS/+O+ + lP/jvZP/472T/9uqdf/esX7/4baF/+C1g//htoX/3Kx3/9qmbv/ap2//2qdw/9upc//Yomj/79m//920 + iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qnb//ap2//2qZt/96tef/htoX/4LWD/+G2hv/dr3v/3Kt4/+S+ + lP/jvZL/476V/+S7j//YpG3/8OXV///////+/v3///////////////////////////////////////// + /////////////////////////////////////////////////////////////////////v3///////Dk + 1P/YpGv/4LiK/+S/lv/jvJL/5L6X/92vfP/erXn/4baG/+C0g//gtoX/3a97/9qmbv/ap2//2qdv/9qn + b//aqHD/2KJn/+/Zv//dtIj/2aRr/9qocP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//apm3/3rB9/+C2 + hv/gtYP/4baG/92rdv/dr37/5L+W/+O8kv/kv5f/4baH/9emb//0697///////7+/f////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+/v3///////Hp2//WpGv/4LOC/+TAl//jvJH/5L+X/9+zg//bqnP/4baG/+C1g//gtoX/4LKA/9qn + b//ap2//2qdv/9qnb//ap2//2qhx/9iiaP/v2b//3bSI/9mka//aqHD/2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qncP/fs4H/4LaF/+C1hP/gtYX/2ahz/9+1h//kv5b/47yR/+TAmP/dr3v/26t2//jz + 6v///////v79//////////////////////////////////////////////////////////////////// + ///////////////////+/v3///////bx6f/YqXP/3a55/+PAl//jvJL/476V/+G5i//aqHL/4LSD/+C1 + hP/gtYT/4LSD/9upcf/ap27/2qdv/9qnb//ap2//2qdv/9qocf/Yomf/79m//920iP/ZpGv/2qhw/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//apm7/2qly/+C1g//gtYX/4beG/9ysd//apm7/4bmN/+O+ + lf/jvJL/5MCW/9yqdv/arXn/9vPq/////////v3///////////////////////////////////////// + /////////////////////////////////////v3///////fz7P/ZrXr/2qlz/+S/lv/jvZL/476U/+K7 + kP/aqHD/3Kp1/+G3hv/gtYT/4bWF/9ypdP/apm7/2qdv/9qnb//ap2//2qdv/9qnb//aqHH/2KJn/+/Z + v//dtIj/2aRr/9qocP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9mmbv/bq3X/37SC/9+x + f//bqHH/2aZt/9yqc//kvZH/472U/+O9k//jvZX/2qVt/9msff/28+3///////7+/f////////////// + ///////////////////////////////////////////////////+/v7///////n28f/bsYH/2aRp/+O9 + kv/jvZT/472T/+O+lP/bq3j/2aZt/9mncf/esH3/37SC/92sd//Zpm7/2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qhx/9iiZ//v2b//3bSI/9mka//aqHD/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qZu/9qncP/ap2//2qdu/9qocP/Zpm3/3a56/+S+lf/jvJL/4r6V/+K7j//Zomj/3bOG//v6 + 9/////////7+/////////////////////////////////////////////////////////v7///////v7 + +P/fuYv/16Fm/+G4jP/kvpX/47yS/+S/lv/dsH7/2aVt/9qncP/ap2//2qZv/9qncP/apm7/2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qocf/Yomf/79m//920iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdw/9mlbf/fsoD/5L+V/+O8 + kv/kv5b/4LeI/9mgZP/fu5H/+/z6/////////v7///////////////////////////////////////// + /////v7///////v8+v/fu5L/159j/9+0g//kv5b/4ryS/+S/lv/ftYf/2aVt/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/2KJn/+/Zv//dtIj/2aRr/9qo + cP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qZu/+G3i//jvpX/47yS/+S/lv/fsoH/159j/+HAmv/9/v7///7+/////v////////////// + //////////////////////7///7+//7////iwp3/155j/92vfP/jvpT/47yS/+O+lf/iuY3/26dv/9qn + b//ap2//2qdw/9qnb//ap27/2qdu/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9ii + Z//v2b//3bSI/9mka//aqHD/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qmbv/bqHL/4ruQ/+O+lP/jvpT/4bmN/9uocv/XoWX/5Mik//7/ + /////v7///////////////////////////////7///7+//7////lyKX/2KFm/9qnb//gt4r/476W/+O9 + k//jvZH/3Kp0/9qmbv/ap3D/2qZu/9qqdP/erXn/26hy/92seP/bqXH/2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qocf/Yomf/79m//920iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap3D/2aZt/9ysd//kvZP/5L+X/9+0 + hP/apm7/26ly/9efZf/r0rf///////79/P/+/v3////+/////v/+/v3///79///////kyqz/16Bk/9up + cv/Zpmz/37B//+W/lv/jvpX/3a15/9mlbP/ap3D/2qdv/9qnbf/aqXL/37F//9+wff/er3z/2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/2KJn/+/Zv//dtIj/2aRr/9qocP/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//apm7/3Kp1/9ysef/ap3D/2qdv/9qnb//aqHD/2KJo/+zYwP////////7+//////////////7+//// + ///r1bn/2KFm/9uocf/ap2//2qdv/9qmbv/drHj/26t2/9mmbv/ap2//2qdv/9qnb//aqHH/3q98/9+w + fv/fsH3/3q99/9upcv/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9iiZ//v2b//3bSI/9mk + a//aqHD/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qmbv/apm3/2qdv/9qnb//ap2//2qdw/9qnb//Yo2r/4sOe//Hn + 2f/7+PP/+vfy//Ho2f/jwp3/2KJo/9qncP/ap2//2qdv/9qnb//ap2//2aZt/9qmbf/ap2//2qdv/9qn + b//ap2//2qhy/9yrd//er3z/37B9/92vev/crHf/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qo + cf/Yomf/79m//920iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//26hw/9iiZ//Yo2n/26x4/9qrd//Xo2j/2KJn/9uocP/ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//Zpm3/3Kt2/92tef/Zpm7/2adv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//aqHH/2KJn/+/Zv//dtIj/2aRr/9qocP/ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/26hw/9mmbf/apm3/26hw/9qocf/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qocP/bqHD/2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9iiZ//v2b//3bSI/9mka//aqHD/2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap3D/2qdw/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qocf/Yomf/79m//920 + iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdw/9uocf/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//aqHH/2KJn/+/Zv//dtIj/2aRr/9qocP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + bv/aqXP/2qhx/9qmbv/bp3D/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qmbv/apm7/2aZu/9ys + eP/drXj/2qZu/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qhx/9iiZ//v2b//3bSI/9mka//aqHD/2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//apm3/3Kt3/96vfP/drnr/26pz/9qnbv/ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + bv/cqnT/3ax3/9urdv/fsH7/3q97/9qncP/apm7/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qocf/Yomf/79m//920iP/ZpGv/2qhw/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap27/26p0/9+wfP/fsX7/3rB9/9mncP/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qly/9+wfv/gsX7/37B9/9+wff/fr3z/3a14/9uocP/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/2KJn/+/Z + v//dtIj/2aRr/9qocP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9mncP/brHj/37B+/9+u + e//cqnT/2qdu/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9mmbf/bq3X/37B9/9+wff/fsH3/3q99/9uq + df/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qhx/9iiZ//v2b//3bSI/9mka//aqHD/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//apm7/2qlz/9yrd//apm//2qdw/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//apm7/3q55/9+x + f//fsH3/37F+/9uqdP/Zpm3/2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qocf/Yomf/79m//920iP/ZpGv/2qhw/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//26hw/96teP/bqnT/26p0/9+wff/cqnX/2qZu/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//aqHH/2KJn/+/Zv//dtIj/2aRr/9qo + cP/ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//bpm7/2qZu/9qmbv/aqHL/26lz/9qnbv/ap2//2qdv/9qn + b//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qdv/9qnb//ap2//2qhx/9ii + Z//v2b//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Ultron.Update/favicon.ico b/Ultron.Update/favicon.ico new file mode 100644 index 0000000..730194d Binary files /dev/null and b/Ultron.Update/favicon.ico differ