This commit is contained in:
Xytrizareal committed 2024-03-03 15:55:59 -07:00
1 parent 3b15f25dc6
commit c9ee51457d
21 files changed
+1297 -228

No files matched your search

+11 -6
View File
@@ -3,7 +3,12 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17 # Visual Studio Version 17
VisualStudioVersion = 17.8.34511.84 VisualStudioVersion = 17.8.34511.84
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XPSLauncher", "XPSLauncher\XPSLauncher.csproj", "{A9B79EA0-39D4-47E9-A506-05BE547D83C1}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XPSLauncher", "XPSLauncher\XPSLauncher.csproj", "{1DFB73E7-C99E-43E8-A0AB-F271D8F36C80}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{17082187-CDB9-4EDA-9617-B06AACFC731E}"
ProjectSection(SolutionItems) = preProject
..\..\..\Downloads\pusab.ttf = ..\..\..\Downloads\pusab.ttf
EndProjectSection
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -11,15 +16,15 @@ Global
Release|Any CPU = Release|Any CPU Release|Any CPU = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A9B79EA0-39D4-47E9-A506-05BE547D83C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DFB73E7-C99E-43E8-A0AB-F271D8F36C80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A9B79EA0-39D4-47E9-A506-05BE547D83C1}.Debug|Any CPU.Build.0 = Debug|Any CPU {1DFB73E7-C99E-43E8-A0AB-F271D8F36C80}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A9B79EA0-39D4-47E9-A506-05BE547D83C1}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DFB73E7-C99E-43E8-A0AB-F271D8F36C80}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A9B79EA0-39D4-47E9-A506-05BE547D83C1}.Release|Any CPU.Build.0 = Release|Any CPU {1DFB73E7-C99E-43E8-A0AB-F271D8F36C80}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {18E8BD81-78AC-4652-B81A-25117C7B197C} SolutionGuid = {8069D002-54EA-4D55-8E41-E575FC45A6D8}
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>
+226
View File
@@ -0,0 +1,226 @@
using System.Reflection;
using System.Windows.Forms;
namespace XPSLauncher
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.pictureBox5 = new System.Windows.Forms.PictureBox();
this.pictureBox4 = new System.Windows.Forms.PictureBox();
this.pictureBox3 = new System.Windows.Forms.PictureBox();
this.pictureBox2 = new System.Windows.Forms.PictureBox();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// button1
//
this.button1.Cursor = System.Windows.Forms.Cursors.WaitCursor;
this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button1.Font = new System.Drawing.Font("Pusab", 17.5F);
this.button1.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.button1.Location = new System.Drawing.Point(240, 176);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(120, 40);
this.button1.TabIndex = 0;
this.button1.Text = "2.2";
this.button1.UseVisualStyleBackColor = true;
this.button1.UseWaitCursor = true;
//
// button2
//
this.button2.Cursor = System.Windows.Forms.Cursors.No;
this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button2.Font = new System.Drawing.Font("Pusab", 17.5F);
this.button2.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.button2.Location = new System.Drawing.Point(240, 275);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(120, 40);
this.button2.TabIndex = 1;
this.button2.Text = "2.1";
this.button2.UseVisualStyleBackColor = true;
//
// button3
//
this.button3.Cursor = System.Windows.Forms.Cursors.WaitCursor;
this.button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button3.Font = new System.Drawing.Font("Pusab", 17.5F);
this.button3.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.button3.Location = new System.Drawing.Point(240, 375);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(120, 40);
this.button3.TabIndex = 2;
this.button3.Text = "2.0";
this.button3.UseVisualStyleBackColor = true;
this.button3.UseWaitCursor = true;
//
// button4
//
this.button4.Cursor = System.Windows.Forms.Cursors.WaitCursor;
this.button4.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button4.Font = new System.Drawing.Font("Pusab", 17.5F);
this.button4.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.button4.Location = new System.Drawing.Point(240, 475);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(120, 40);
this.button4.TabIndex = 3;
this.button4.Text = "1.9";
this.button4.UseVisualStyleBackColor = true;
this.button4.UseWaitCursor = true;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Pusab", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label1.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.label1.Location = new System.Drawing.Point(96, 111);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(408, 23);
this.label1.TabIndex = 4;
this.label1.Text = "What version do you want to load?";
//
// pictureBox5
//
this.pictureBox5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50)))));
this.pictureBox5.Cursor = System.Windows.Forms.Cursors.Hand;
this.pictureBox5.Image = global::XPS.Properties.Resources.Twitch;
this.pictureBox5.Location = new System.Drawing.Point(376, 568);
this.pictureBox5.Name = "pictureBox5";
this.pictureBox5.Size = new System.Drawing.Size(65, 62);
this.pictureBox5.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox5.TabIndex = 9;
this.pictureBox5.TabStop = false;
this.pictureBox5.Click += new System.EventHandler(this.twitchButton);
//
// pictureBox4
//
this.pictureBox4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50)))));
this.pictureBox4.Cursor = System.Windows.Forms.Cursors.Hand;
this.pictureBox4.Image = global::XPS.Properties.Resources.YouTube;
this.pictureBox4.Location = new System.Drawing.Point(306, 568);
this.pictureBox4.Name = "pictureBox4";
this.pictureBox4.Size = new System.Drawing.Size(61, 62);
this.pictureBox4.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox4.TabIndex = 8;
this.pictureBox4.TabStop = false;
this.pictureBox4.Click += new System.EventHandler(this.youtubeButton);
//
// pictureBox3
//
this.pictureBox3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50)))));
this.pictureBox3.Cursor = System.Windows.Forms.Cursors.Hand;
this.pictureBox3.Image = global::XPS.Properties.Resources.Twitter;
this.pictureBox3.Location = new System.Drawing.Point(235, 568);
this.pictureBox3.Name = "pictureBox3";
this.pictureBox3.Size = new System.Drawing.Size(61, 62);
this.pictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox3.TabIndex = 7;
this.pictureBox3.TabStop = false;
this.pictureBox3.Click += new System.EventHandler(this.twitterButton);
//
// pictureBox2
//
this.pictureBox2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50)))));
this.pictureBox2.Cursor = System.Windows.Forms.Cursors.Hand;
this.pictureBox2.Image = global::XPS.Properties.Resources.Discord;
this.pictureBox2.Location = new System.Drawing.Point(165, 568);
this.pictureBox2.Name = "pictureBox2";
this.pictureBox2.Size = new System.Drawing.Size(61, 62);
this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox2.TabIndex = 6;
this.pictureBox2.TabStop = false;
this.pictureBox2.Click += new System.EventHandler(this.discordButton);
//
// pictureBox1
//
this.pictureBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50)))));
this.pictureBox1.Cursor = System.Windows.Forms.Cursors.Default;
this.pictureBox1.Image = global::XPS.Properties.Resources.logoPng;
this.pictureBox1.Location = new System.Drawing.Point(190, -60);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(222, 238);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox1.TabIndex = 5;
this.pictureBox1.TabStop = false;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50)))));
this.ClientSize = new System.Drawing.Size(584, 636);
this.Controls.Add(this.pictureBox5);
this.Controls.Add(this.pictureBox4);
this.Controls.Add(this.pictureBox3);
this.Controls.Add(this.pictureBox2);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.label1);
this.Controls.Add(this.button4);
this.Controls.Add(this.button3);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "Form1";
this.Text = "XPS";
this.Load += new System.EventHandler(this.Form1_Load);
((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.PictureBox pictureBox2;
private PictureBox pictureBox3;
private PictureBox pictureBox4;
private PictureBox pictureBox5;
}
}
+208
View File
@@ -0,0 +1,208 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace XPSLauncher
{
public partial class Form1 : Form
{
private static readonly HttpClient client = new HttpClient();
private static readonly string currentVersion = "2.0.0";
public Form1()
{
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.FixedSingle;
this.MaximizeBox = false;
this.pictureBox1.SendToBack();
checkVersion();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void load22(object sender, EventArgs e)
{
launchGDPS("2.2");
}
private void load21(object sender, EventArgs e)
{
launchGDPS("2.1");
}
private void load20(object sender, EventArgs e)
{
launchGDPS("2.0");
}
private void load19(object sender, EventArgs e)
{
launchGDPS("1.9");
}
private void OpenUrl(string url)
{
try
{
Process.Start(new ProcessStartInfo
{
FileName = url,
UseShellExecute = true
});
}
catch (Exception ex)
{
MessageBox.Show($"Failed to open URL: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void launchGDPS(string version)
{
string executionPath = GetExecutionPath();
string path = "";
switch (version)
{
case "2.2":
path = Path.Combine(executionPath, "gdps", "2.2", "XPS.exe");
break;
case "2.1":
path = Path.Combine(executionPath, "gdps", "2.1", "XPS.exe");
break;
case "2.0":
path = Path.Combine(executionPath, "gdps", "2.0", "XPS.exe");
break;
case "1.9":
path = Path.Combine(executionPath, "gdps", "1.9", "XPS.exe");
break;
default:
return;
}
if (File.Exists(path))
{
StartProcess(path);
}
else
{
MessageBox.Show($"Error loading version {version}. Create a support ticket in the Discord and we will try to help you.", $"Error loading {version}", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void discordButton(object sender, EventArgs e)
{
OpenUrl("https://xps.xytriza.com/discord");
}
private void twitterButton(object sender, EventArgs e)
{
OpenUrl("https://xps.xytriza.com/twitter");
}
private void youtubeButton(object sender, EventArgs e)
{
OpenUrl("https://xps.xytriza.com/youtube");
}
private void twitchButton(object sender, EventArgs e)
{
OpenUrl("https://xps.xytriza.com/twitch");
}
private async void checkVersion()
{
var versionCheckResult = await CheckVersionAsync();
this.button1.UseWaitCursor = false;
this.button2.UseWaitCursor = false;
this.button3.UseWaitCursor = false;
this.button4.UseWaitCursor = false;
if (versionCheckResult.HasError)
{
MessageBox.Show("Error checking version. Check your internet connection or try again later", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else if (versionCheckResult.IsNewVersionAvailable)
{
MessageBox.Show("New version released! Click \"OK\" to download the update", "Update Required", MessageBoxButtons.OK, MessageBoxIcon.Information);
OpenUrl("https://xps.xytriza.com/download/windows");
}
else
{
this.button1.Cursor = Cursors.Hand;
this.button2.Cursor = Cursors.Hand;
this.button3.Cursor = Cursors.Hand;
this.button4.Cursor = Cursors.Hand;
this.button1.Click += new System.EventHandler(this.load22);
this.button2.Click += new System.EventHandler(this.load21);
this.button3.Click += new System.EventHandler(this.load20);
this.button4.Click += new System.EventHandler(this.load19);
}
}
public static async Task<VersionCheckResult> CheckVersionAsync()
{
try
{
HttpResponseMessage response = await client.GetAsync("https://xps.xytriza.com/getLatestWindowsVersion.php");
if (response.IsSuccessStatusCode)
{
string latestVersion = await response.Content.ReadAsStringAsync();
return new VersionCheckResult
{
IsNewVersionAvailable = IsNewerVersion(currentVersion, latestVersion.Trim()),
HasError = false
};
}
else
{
return new VersionCheckResult { HasError = true };
}
}
catch
{
return new VersionCheckResult { HasError = true };
}
}
private static bool IsNewerVersion(string currentVersion, string latestVersion)
{
Version currentVer, latestVer;
if (Version.TryParse(currentVersion, out currentVer) && Version.TryParse(latestVersion, out latestVer))
{
return latestVer > currentVer;
}
return false;
}
static string GetExecutionPath() => AppDomain.CurrentDomain.BaseDirectory;
static void StartProcess(string path)
{
try
{
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = path,
WorkingDirectory = Path.GetDirectoryName(path),
UseShellExecute = false
};
Process.Start(startInfo);
}
catch (Exception ex)
{
MessageBox.Show($"Error launching that GDPS version. Create a support ticket in the Discord and we will try to help you.\n\nError message: {ex.Message}", $"Error laucnhing GDPS", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
public class VersionCheckResult
{
public bool IsNewVersionAvailable { get; set; }
public bool HasError { get; set; }
}
+409
View File
@@ -0,0 +1,409 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAQEAAAAEAIABgQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAA
AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP7+/gDt7e0A7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs
7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs
7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs
7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAO3t7QD+/v4A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wDt7e0AJSUlAA8PDwATExMAExMTABMT
EwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMT
EwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMT
EwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTAA8PDwAlJSUA7e3tAP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A7OzsAA8P
DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAADw8PAOzs7AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AOzs7AATExMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAABMTEwDs7OwA////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wDs7OwAExMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATExMA7OzsAP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A7OzsABMTEwAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExMTAOzs
7AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AOzs
7AATExMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAABMTEwDs7OwA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wDs7OwAExMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATExMA7OzsAP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A7OzsABMTEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExMTAOzs7AD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AOzs7AATExMAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMT
EwDs7OwA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wDs7OwAExMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAATExMA7OzsAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A7OzsABMTEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExMTAOzs7AD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AOzs7AATExMAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMTEwDs7OwA////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDs7OwAExMTAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAATExMA7OzsAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A7OzsABMTEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAExMTAOzs7AD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AOzs7AATExMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMTEwDs7OwA////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wDs7OwAExMTAAAAAAAAAAAAAAAABQAA
AAgAAAALAAAACgAAAAIAAAAAAAAAAAAAAAAAAAALAAAAEAAAAA8AAAAPAAAADQAAAAgAAAAAAAAAAAAA
AAQAAAAKAAAACwAAAA0AAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAACAAAABEAAAAWAAAAFQAAABIAAAAOAAAABwAAAAAAAAAAAAAAAAAAAAATExMA7OzsAP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A7OzsABMT
EwAAAAAHAAAASgAAAGgAAABzAAAAawAAAEoAAAApAAAAAAAAAB0AAABxAAAAiwAAAI0AAACKAAAAfwAA
AGMAAAA8AAAAIAAAAEYAAABwAAAAewAAAH0AAABtAAAATwAAADAAAAATAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAUAAAAyAAAAZwAAAI0AAAChAAAAogAAAJYAAACAAAAAXQAAADoAAAAjAAAACwAA
AAAAAAAAExMTAOzs7AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AOzs7AASEREFAAcIrB1NU/wlY2z/Km55/yRdZf8FDxDaAAAAVAAAAE0IGBrcLXR//zaN
m/81jJn/MoaR/y53gf8bR037AAEBtAADA7sbR036Km55/y12gP8ud4L/JF9o/w0jJuoAAACUAAAAOQAA
AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUAAACpDykt7CZkbf82jZr/PZ+v/z2gr/83kqD/LHN9/xc+
Q/cBBQXKAAAAcwAAADYAAAAQAAAAABMTEwDs7OwA////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wDs7OwAEA0MFwsnK/Bc6///XfL//13x//9g9///PJqo/wAA
AMMHFRbhS8LU/1/1//9d8f//XfD//13x//9e9P//WOL4/wUWGP8ud4L/XvP//13x//9d8f//XfH//13x
//9W3fP/FTtB/QAAAGYAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAFgPKS3wP6Ox/1jj+v9d8f//XfH//1zv
//9c7///XfD//13x//9b6///R7nK/xIxNvgAAACFAAAAMAAAAAUTExMA7OzsAP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A7OzsABMSEgAAAACNN5Gg/1vv
//9W5P//VuX//1np//8ZSlL/NpCf/1vw//9W4///VuT//1bk//9W5P//Wu3//z6ktP8ABAX/Sb7T/1nr
//9W5P//V+T//1fk//9W5P//XPL//zGCjv8AAACJAAAADQAAAAAAAAAAAAAAAAAAABELIyfnUdXr/1rv
//9X5v//V+b//1bk//9W5P//VuP//1bj//9W5P//VuT//1ru//9Q0+r/CiAj7gAAAFgAAAATExMTAOzs
7AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AOzs
7AATExMAAAAAEgcZHN5Kzef/UuT//1Df//9R4v//TdXy/0/d/P9Q4P//UN///1Df//9Q3///UeL//1Db
+P8NKi/vAwgI40jK5P9S4///UN///1Df//9Q3///UN///1Tq//8vgI7/AAAAiAAAABQAAAAGAAAABAAA
AAAAAAAWETU87lTn//9S5v//UeL//0vT8P9Q3/7/UN///1Df//9Q3///UN///1Df//9Q3///Vez//yx8
i/8AAACRAAAAGhMTEwDs7OwA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wDs7OwAExMTAAAAAAAAAABTG1Rg/07j//9K2///Str//0vd//9L3P//Stv//0rb
//9K2///Stv//0/m//8odof/AAAAiQcXGsVFzez/TN7//0vb//9L2///S9v//0vb//9O5v//LYCR/wAA
AKoAAABeAAAATAAAADUAAAAiAAAADAADBKgzmK3/Qb3Y/xZCS/8NLDP/SdT1/0vd//9K2///Stv//0rb
//9L2///Stv//03j//85pLv/AAAAsAAAABoTExMA7OzsAP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A7OzsABMTEwAAAAAAAAAAAAAAAKIvkqv/SOD//0TW
//9E1v//RNb//0TW//9E1v//RNb//0fd//86s9P/AQoM0QAAABoIHSLMQszx/0XZ//9E1v//Rdb//0XW
//9F1v//Rtn//z/E6P8gbH//FklW+w0sM+wCCQrMAAAAigAAAEAAAAA2AQUFqQAAAPkFFhr/LpOt/0ba
//9F1///Rdb//0XW//9F1v//Rdb//0XW//9H3v//NqTA/wAAAK8AAAARExMTAOzs7AD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AOzs7AATExMAAAAAAAAA
AAAAAAATBBUZ2jm63/9A1v//PtL//z7S//8+0v//PtL//z/U//8/0Pv/DjZA+AAAAEoAAAAACB8l0T3J
8/8/1P//PtL//z7S//8+0v//P9L//z7S//8/1f//Qtz//0Ha//8+0v3/NbXa/xpbbf8AAAC8AAAAOwAA
AIYVTl37PMny/0Lb//8+0v//PtL//z/S//8+0v//PtL//z7S//8+0v//Q9///yJyif8AAAB+AAAAABMT
EwDs7OwA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wDs7OwAExMTAAAAAAAAAAAAAAAADwIRFdcytN3/OdH//zjN//84zf//OM3//zjN//871v//H3OM/wAA
AKoAAAAeAAAACAcfJtI3xvT/Oc///zjO//84zv//OM3//zjN//84zf7/OM///zrV//861v//OdH//zrT
//892v//GV1y/wAAALoRRFP9O9P//zrS//84zf7/OM7//zjO//85zv//Oc7//zjO/v85zv//O9j//zGv
1v8DEhfdAAAAHgAAAAATExMA7OzsAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A7OzsABMTEwAAAAAAAAAAAAAAAJcfgKD/NdL//zHJ/v8yyf//Msn//zLJ
//8yyf//NM///yWVu/8ABAbOAAAASQAAAB4GHSXPMMHz/zLL//8yyf//Msn+/zLJ//8yyf//Msr//zHF
+f8jjrD/IYio/y++8P8yyv//NM///yqn0v8ABwr/KaPL/zTR//8yyf7/Msn//zLJ//8yyf//Msn+/zLJ
/v8zy///NND//yWVuv8EFBjwAAAAaAAAAR4AAAAEExMTAOzs7AD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AOzs7AATExMAAAAAAAAAAEYMP1H8Lcn//yvF
//8rxP//K8T//yvE//8rxP//K8T//yvE//8uzv//F2yL/wAAAKkAAAA4BBoi0ym68f8rxv//K8T//yvE
//8rxP//K8T//y3N//8dfqD/AAAAwAAAAK0RVmz/L83//yzI//8msOL/ByIr/yi16f8tx///LMX//yzF
//8sxf//LMX//yzF//8sx///K770/xBKXv8AAAD/BRoi9wEJC8UAAABWAAAAGhMTEwDs7OwA////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDs7OwAExMTAAAA
AAoADRLTIKfb/yXF//8kv///JMD//yTA//8kv///JML//yTC//8kv/7/JMH//yXC//8IOEn7AAAAdgMU
GtIhs+v/JML//yTA//8kv///JMD//yTA//8lxf//HJTD/wQjLugEHCXgFXec/ybG//8lxP//H6ba/wIW
Hf8hrOL/JcT//yXA//8lwP//JMD//yXA//8lwP//JsX//x+j1/8EKDX/FXWZ/ybD//8WdZn/AAAAqgAA
ACkTExMA7OzsAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A7OzsABMTEwAAAACAD2qP/x7E//8cu///HLv//xy7//8cu///Hb7//xip5f8Zq+f/Hb7//xy6
//8dwf//GaHZ/wAJDdoCCQzWGKnk/x2+//8cu///HLv//xy7//8cu///HLr//x2+//8cuvz/G7j5/x2+
//8buv//Hsb//xN3oP8AAAD1Foe0/x/F//8du///Hbz//x28//8dvP//Hbz//x28//8dvP//Hr7//x/D
//8ewf//HLLv/wEQFtsAAAAoExMTAOzs7AD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AOzs7AASDgwZACEw6xa3/f8Tuf//FLf//xS3//8Ut///E7r//xW7
//8DNEj/BkRe/xW+//8UuP//FLf//xXB//8KZo3/AAAA/BGW0P8UwP//FLj//xO3//8Ut///E7f//xO3
//8Ut///FLj//xS5//8Uu///FMH//xKd2P8BFyDkAAAAVgMpOPMWsfT/Fr///xa4//8Vt///Fbf//xW3
//8Wt///Frf//xW5//8WvP//F8H//w59q/8AAwSzAAAABRMTEwDs7OwA////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wDs7OwAEw4LIgAmN/kLp+z/CbL9/wm1
//8Jtf//CbT//wqs8/8FU3b/AAAAigAAAKkIfK//Crf//wm0//8Jtf//CZra/wAGCf4DOE//CZjX/wmr
9P8Jsvz/CbT//wm0//8JtP//CbT//wmy/f8JrPT/CJfX/wZhif8AEBfXAAAAOwAAAAAAAABeAik59QqJ
wP8Msfr/DLr//wy7//8Muv//DLv//wy6//8MtP//C5fU/wVObf8AAgS2AAAAGwAAAAATExMA7OzsAP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A7OzsABMT
EwAAAABjABIazAAlNOYBMEbvADFH7wEqPewAFh/UAAAAegAAAAAAAAAYAAYJtQEoOekALEDsACU15gAW
H9QAAABbAAAATgAFB60AGSTTACU15gAtQe0AL0XuAC9F7gAtQu4AJjbpABom1gAGCLAAAABnAAAAEAAA
AAAAAAAAAAAAAAAAADIAAACiASEv5AJCXf0CV3z/AmGN/wJdh/8CSWf/ASg66gAFCLMAAABUAAAAAQAA
AAAAAAAAExMTAOzs7AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AOzs7AATExMAAAAAAAAAAAMAAAAUAAAAHAAAABwAAAAYAAAABwAAAAAAAAAAAAAAAAAA
AAAAAAAWAAAAGQAAABQAAAAHAAAAAAAAAAAAAAAAAAAABgAAABMAAAAZAAAAGgAAABoAAAAaAAAAFgAA
AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAyAAAASgAAAFcAAABRAAAAOQAA
ABgAAAAAAAAAAAAAAAAAAAAAAAAAABMTEwDs7OwA////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wDs7OwAExMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATExMA7OzsAP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A7OzsABMTEwAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExMTAOzs
7AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AOzs
7AATExMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAABMTEwDs7OwA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wDs7OwAExMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATExMA7OzsAP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A7OzsABMTEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExMTAOzs7AD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AOzs7AATExMAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMT
EwDs7OwA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wDs7OwAExMTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAATExMA7OzsAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A7OzsABMTEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExMTAOzs7AD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AOzs7AATExMAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMTEwDs7OwA////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wDs7OwAExMTAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAATExMA7OzsAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A7OzsABMTEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAExMTAOzs7AD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AOzs7AATExMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMTEwDs7OwA////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wDs7OwAExMTAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATExMA7OzsAP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A7OzsAA8P
DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAADw8PAOzs7AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AO3t7QAlJSUADw8PABMTEwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMT
EwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMT
EwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMTEwATExMAExMTABMT
EwATExMAExMTABMTEwATExMADw8PACUlJQDt7e0A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD+/v4A7e3tAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs
7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs
7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs
7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADs7OwA7OzsAOzs7ADt7e0A/v7+AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
/wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
</value>
</data>
</root>
+15 -183
View File
@@ -1,190 +1,22 @@
using Newtonsoft.Json; using System;
using System.Diagnostics; using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
class Program namespace XPSLauncher
{ {
private static readonly HttpClient client = new HttpClient(); internal static class Program
private static readonly string currentVersion = "1.0.300";
static async Task Main(string[] args)
{ {
Console.WriteLine("Loading..."); /// <summary>
/// The main entry point for the application.
var versions = LoadVersionConfig(); /// </summary>
[STAThread]
var versionCheckResult = await CheckVersionAsync(); static void Main()
if (versionCheckResult.HasError || versionCheckResult.IsNewVersionAvailable)
{ {
Console.Clear(); Application.EnableVisualStyles();
if (versionCheckResult.HasError) Application.SetCompatibleTextRenderingDefault(false);
{ Application.Run(new Form1());
Console.WriteLine("Error checking version. Check your internet connection or try again later");
}
else
{
Console.WriteLine("New version available! Download it here: https://xps.xytriza.com/download/windows");
}
Console.ReadLine();
return;
} }
Console.Clear();
Console.WriteLine("Welcome to Xytriza's GDPS!\n");
if (versions.Versions.Count == 0)
{
Console.WriteLine("No versions to load.");
Console.ReadLine();
return;
}
for (int i = 0; i < versions.Versions.Count; i++)
{
Console.WriteLine($"{i + 1}: Load {versions.Versions[i].name}");
}
Console.WriteLine();
if (int.TryParse(Console.ReadLine(), out int choice) && choice >= 1 && choice <= versions.Versions.Count)
{
var selectedVersion = versions.Versions[choice - 1];
string executionPath = GetExecutionPath();
string path = Path.Combine(executionPath, selectedVersion.path);
if (FileExists(path) && path.StartsWith(Path.Combine(executionPath, "gdps"), StringComparison.OrdinalIgnoreCase))
{
StartProcess(path);
}
else
{
Console.WriteLine("File does not exist.");
Console.ReadLine();
}
}
else
{
Console.WriteLine("Invalid choice.");
Console.ReadLine();
}
}
public static async Task<VersionCheckResult> CheckVersionAsync()
{
try
{
HttpResponseMessage response = await client.GetAsync("https://xps.xytriza.com/getLatestWindowsVersion.php");
if (response.IsSuccessStatusCode)
{
string latestVersion = await response.Content.ReadAsStringAsync();
return new VersionCheckResult
{
IsNewVersionAvailable = IsNewerVersion(currentVersion, latestVersion.Trim()),
HasError = false
};
}
else
{
return new VersionCheckResult { HasError = true };
}
}
catch
{
return new VersionCheckResult { HasError = true };
}
}
private static bool IsNewerVersion(string currentVersion, string latestVersion)
{
Version currentVer, latestVer;
if (Version.TryParse(currentVersion, out currentVer) && Version.TryParse(latestVersion, out latestVer))
{
return latestVer > currentVer;
}
return false;
}
static bool FileExists(string path) => File.Exists(path);
static string GetExecutionPath() => AppDomain.CurrentDomain.BaseDirectory;
static void StartProcess(string path)
{
try
{
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = path,
WorkingDirectory = Path.GetDirectoryName(path),
UseShellExecute = false
};
Console.Clear();
Process.Start(startInfo);
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
Console.ReadLine();
}
}
static VersionConfig LoadVersionConfig()
{
string filePath = Path.Combine(GetExecutionPath(), "versions.json");
if (!File.Exists(filePath) || !TryReadConfig(filePath, out VersionConfig? config))
{
config = ResetConfig(filePath);
}
config.Versions = config.Versions.Where(v => FileExists(Path.Combine(GetExecutionPath(), v.path))).ToList();
return config!;
}
static bool TryReadConfig(string filePath, out VersionConfig? config)
{
try
{
string json = File.ReadAllText(filePath);
config = JsonConvert.DeserializeObject<VersionConfig>(json);
return config != null;
}
catch
{
config = null;
return false;
}
}
static VersionConfig ResetConfig(string filePath)
{
var config = new VersionConfig
{
Versions = new List<VersionInfo>
{
new VersionInfo { name = "GD 2.2", path = @"gdps/2.2/XPS.exe" },
new VersionInfo { name = "GD 2.1", path = @"gdps/2.1/XPS.exe" },
new VersionInfo { name = "GD 2.0", path = @"gdps/2.0/XPS.exe" },
new VersionInfo { name = "GD 1.9", path = @"gdps/1.9/XPS.exe" }
}
};
File.WriteAllText(filePath, JsonConvert.SerializeObject(config, Formatting.Indented));
return config;
} }
} }
public class VersionConfig
{
public List<VersionInfo> Versions { get; set; } = new List<VersionInfo>();
}
public class VersionInfo
{
public string? name { get; set; }
public string? path { get; set; }
}
public class VersionCheckResult
{
public bool IsNewVersionAvailable { get; set; }
public bool HasError { get; set; }
}
+36
View File
@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("XPSLauncher")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("XPSLauncher")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("1dfb73e7-c99e-43e8-a0ab-f271d8f36c80")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
+123
View File
@@ -0,0 +1,123 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 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.
// </auto-generated>
//------------------------------------------------------------------------------
namespace XPS.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.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() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("XPS.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Discord {
get {
object obj = ResourceManager.GetObject("Discord", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap logoIco {
get {
object obj = ResourceManager.GetObject("logoIco", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap logoPng {
get {
object obj = ResourceManager.GetObject("logoPng", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Twitch {
get {
object obj = ResourceManager.GetObject("Twitch", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Twitter {
get {
object obj = ResourceManager.GetObject("Twitter", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap YouTube {
get {
object obj = ResourceManager.GetObject("YouTube", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}
+139
View File
@@ -0,0 +1,139 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="logoPng" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\XPS.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="YouTube" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\YouTube.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="logoIco" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\XPS.ico;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Twitter" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Twitter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Discord" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Discord.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Twitch" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Twitch.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>
+26
View File
@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 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.
// </auto-generated>
//------------------------------------------------------------------------------
namespace XPS.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.8.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;
}
}
}
}
+7
View File
@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

+91 -18
View File
@@ -1,23 +1,96 @@
<Project Sdk="Microsoft.NET.Sdk"> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<TargetFramework>net8.0-windows10.0.17763.0</TargetFramework> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ImplicitUsings>enable</ImplicitUsings> <ProjectGuid>{1DFB73E7-C99E-43E8-A0AB-F271D8F36C80}</ProjectGuid>
<Nullable>enable</Nullable> <OutputType>WinExe</OutputType>
<ApplicationIcon>XPS.ico</ApplicationIcon> <RootNamespace>XPS</RootNamespace>
<DebugType>none</DebugType> <AssemblyName>XPS</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x64</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>XPS.ico</ApplicationIcon>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<SubType>Designer</SubType>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\XPS.png" />
<None Include="discord.png" />
<None Include="Resources\Discord.png" />
<None Include="Resources\Twitter.png" />
<None Include="Resources\YouTube.png" />
<None Include="Resources\Twitch.png" />
<Content Include="XPS.ico" /> <Content Include="XPS.ico" />
<Content Include="versions.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ItemGroup> </Project>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
</Project>
-1
View File
@@ -1 +0,0 @@
dotnet publish -r win-x64 -c Release --self-contained true
-20
View File
@@ -1,20 +0,0 @@
{
"Versions": [
{
"name": "GD 2.2",
"path": "gdps/2.2/XPS.exe"
},
{
"name": "GD 2.1",
"path": "gdps/2.1/XPS.exe"
},
{
"name": "GD 2.0",
"path": "gdps/2.0/XPS.exe"
},
{
"name": "GD 1.9",
"path": "gdps/1.9/XPS.exe"
}
]
}