From c247eb2c48397ce3c4ece857c8d831f6d7aafe34 Mon Sep 17 00:00:00 2001 From: exsersewo Date: Mon, 9 Nov 2020 23:49:26 +0000 Subject: [PATCH] Init --- LastRPC.sln | 25 ++ assets/lastrpc.ico | Bin 0 -> 37758 bytes src/LastRPC.csproj | 14 + src/Main.Designer.cs | 407 +++++++++++++++++++++++++ src/Main.cs | 236 +++++++++++++++ src/Main.resx | 695 +++++++++++++++++++++++++++++++++++++++++++ src/Program.cs | 20 ++ 7 files changed, 1397 insertions(+) create mode 100644 LastRPC.sln create mode 100644 assets/lastrpc.ico create mode 100644 src/LastRPC.csproj create mode 100644 src/Main.Designer.cs create mode 100644 src/Main.cs create mode 100644 src/Main.resx create mode 100644 src/Program.cs diff --git a/LastRPC.sln b/LastRPC.sln new file mode 100644 index 0000000..736464a --- /dev/null +++ b/LastRPC.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30615.102 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LastRPC", "src/LastRPC.csproj", "{E471CD5A-4F92-4BA0-847E-8F35ED23F308}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E471CD5A-4F92-4BA0-847E-8F35ED23F308}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E471CD5A-4F92-4BA0-847E-8F35ED23F308}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E471CD5A-4F92-4BA0-847E-8F35ED23F308}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E471CD5A-4F92-4BA0-847E-8F35ED23F308}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A61F4F77-60A7-426F-A2C8-A84235D767B4} + EndGlobalSection +EndGlobal diff --git a/assets/lastrpc.ico b/assets/lastrpc.ico new file mode 100644 index 0000000000000000000000000000000000000000..4c120704fc841147c3fc3006b284bd1cbce5c9c0 GIT binary patch literal 37758 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 literal 0 HcmV?d00001 diff --git a/src/LastRPC.csproj b/src/LastRPC.csproj new file mode 100644 index 0000000..9d741c1 --- /dev/null +++ b/src/LastRPC.csproj @@ -0,0 +1,14 @@ + + + + WinExe + netcoreapp3.1 + true + + + + + + + + \ No newline at end of file diff --git a/src/Main.Designer.cs b/src/Main.Designer.cs new file mode 100644 index 0000000..e9c155f --- /dev/null +++ b/src/Main.Designer.cs @@ -0,0 +1,407 @@ + +namespace LastRPC +{ + partial class Main + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main)); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.statusLabel = new System.Windows.Forms.ToolStripStatusLabel(); + this.notifier = new System.Windows.Forms.NotifyIcon(this.components); + this.notifyMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.panel1 = new System.Windows.Forms.Panel(); + this.logTextBox = new System.Windows.Forms.RichTextBox(); + this.panel2 = new System.Windows.Forms.Panel(); + this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel(); + this.label7 = new System.Windows.Forms.Label(); + this.lastFMUsername = new System.Windows.Forms.TextBox(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.label6 = new System.Windows.Forms.Label(); + this.discordAppId = new System.Windows.Forms.TextBox(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.label5 = new System.Windows.Forms.Label(); + this.lastFMSecret = new System.Windows.Forms.TextBox(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.label4 = new System.Windows.Forms.Label(); + this.lastFMKey = new System.Windows.Forms.TextBox(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.start = new System.Windows.Forms.Button(); + this.stop = new System.Windows.Forms.Button(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.statusStrip1.SuspendLayout(); + this.panel1.SuspendLayout(); + this.panel2.SuspendLayout(); + this.tableLayoutPanel5.SuspendLayout(); + this.tableLayoutPanel4.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // statusStrip1 + // + this.statusStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.statusLabel}); + this.statusStrip1.Location = new System.Drawing.Point(0, 424); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(800, 26); + this.statusStrip1.TabIndex = 2; + this.statusStrip1.Text = "statusStrip1"; + // + // statusLabel + // + this.statusLabel.Name = "statusLabel"; + this.statusLabel.Size = new System.Drawing.Size(50, 20); + this.statusLabel.Text = "Ready"; + // + // notifier + // + this.notifier.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info; + this.notifier.BalloonTipText = "Sample"; + this.notifier.BalloonTipTitle = "LastRPC"; + this.notifier.ContextMenuStrip = this.notifyMenuStrip; + this.notifier.Icon = ((System.Drawing.Icon)(resources.GetObject("notifier.Icon"))); + this.notifier.Text = "LastRPC"; + this.notifier.Visible = true; + this.notifier.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.notifier_MouseDoubleClick); + // + // notifyMenuStrip + // + this.notifyMenuStrip.ImageScalingSize = new System.Drawing.Size(20, 20); + this.notifyMenuStrip.Name = "notifyMenuStrip"; + this.notifyMenuStrip.Size = new System.Drawing.Size(61, 4); + // + // panel1 + // + this.panel1.Controls.Add(this.logTextBox); + this.panel1.Controls.Add(this.panel2); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(800, 424); + this.panel1.TabIndex = 3; + // + // logTextBox + // + this.logTextBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.logTextBox.Location = new System.Drawing.Point(0, 0); + this.logTextBox.Name = "logTextBox"; + this.logTextBox.ReadOnly = true; + this.logTextBox.Size = new System.Drawing.Size(528, 424); + this.logTextBox.TabIndex = 3; + this.logTextBox.Text = ""; + // + // panel2 + // + this.panel2.Controls.Add(this.tableLayoutPanel5); + this.panel2.Controls.Add(this.tableLayoutPanel4); + this.panel2.Controls.Add(this.tableLayoutPanel3); + this.panel2.Controls.Add(this.tableLayoutPanel2); + this.panel2.Controls.Add(this.tableLayoutPanel1); + this.panel2.Controls.Add(this.label3); + this.panel2.Controls.Add(this.label2); + this.panel2.Controls.Add(this.label1); + this.panel2.Controls.Add(this.textBox2); + this.panel2.Controls.Add(this.textBox1); + this.panel2.Dock = System.Windows.Forms.DockStyle.Right; + this.panel2.Location = new System.Drawing.Point(528, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(272, 424); + this.panel2.TabIndex = 2; + // + // tableLayoutPanel5 + // + this.tableLayoutPanel5.ColumnCount = 2; + this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel5.Controls.Add(this.label7, 0, 0); + this.tableLayoutPanel5.Controls.Add(this.lastFMUsername, 1, 0); + this.tableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Top; + this.tableLayoutPanel5.Location = new System.Drawing.Point(0, 105); + this.tableLayoutPanel5.Name = "tableLayoutPanel5"; + this.tableLayoutPanel5.RowCount = 1; + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 48.8F)); + this.tableLayoutPanel5.Size = new System.Drawing.Size(272, 35); + this.tableLayoutPanel5.TabIndex = 18; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Dock = System.Windows.Forms.DockStyle.Fill; + this.label7.Location = new System.Drawing.Point(3, 0); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(130, 35); + this.label7.TabIndex = 0; + this.label7.Text = "LastFM Username"; + this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // lastFMUsername + // + this.lastFMUsername.Location = new System.Drawing.Point(139, 3); + this.lastFMUsername.Name = "lastFMUsername"; + this.lastFMUsername.Size = new System.Drawing.Size(125, 27); + this.lastFMUsername.TabIndex = 1; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.ColumnCount = 2; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel4.Controls.Add(this.label6, 0, 0); + this.tableLayoutPanel4.Controls.Add(this.discordAppId, 1, 0); + this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Top; + this.tableLayoutPanel4.Location = new System.Drawing.Point(0, 70); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.RowCount = 1; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 48.8F)); + this.tableLayoutPanel4.Size = new System.Drawing.Size(272, 35); + this.tableLayoutPanel4.TabIndex = 17; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Dock = System.Windows.Forms.DockStyle.Fill; + this.label6.Location = new System.Drawing.Point(3, 0); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(130, 35); + this.label6.TabIndex = 0; + this.label6.Text = "Discord App Id"; + this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // discordAppId + // + this.discordAppId.Location = new System.Drawing.Point(139, 3); + this.discordAppId.Name = "discordAppId"; + this.discordAppId.Size = new System.Drawing.Size(125, 27); + this.discordAppId.TabIndex = 1; + this.discordAppId.Text = "775484756380352542"; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.ColumnCount = 2; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel3.Controls.Add(this.label5, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.lastFMSecret, 1, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Top; + this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 35); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 48.8F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(272, 35); + this.tableLayoutPanel3.TabIndex = 16; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Dock = System.Windows.Forms.DockStyle.Fill; + this.label5.Location = new System.Drawing.Point(3, 0); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(130, 35); + this.label5.TabIndex = 0; + this.label5.Text = "LastFM Secret"; + this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // lastFMSecret + // + this.lastFMSecret.Location = new System.Drawing.Point(139, 3); + this.lastFMSecret.Name = "lastFMSecret"; + this.lastFMSecret.Size = new System.Drawing.Size(125, 27); + this.lastFMSecret.TabIndex = 1; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.ColumnCount = 2; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel2.Controls.Add(this.label4, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.lastFMKey, 1, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Top; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 48.8F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(272, 35); + this.tableLayoutPanel2.TabIndex = 15; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Dock = System.Windows.Forms.DockStyle.Fill; + this.label4.Location = new System.Drawing.Point(3, 0); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(130, 35); + this.label4.TabIndex = 0; + this.label4.Text = "LastFM Key"; + this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // lastFMKey + // + this.lastFMKey.Location = new System.Drawing.Point(139, 3); + this.lastFMKey.Name = "lastFMKey"; + this.lastFMKey.Size = new System.Drawing.Size(125, 27); + this.lastFMKey.TabIndex = 1; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.Controls.Add(this.start, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.stop, 0, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 389); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 48.8F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(272, 35); + this.tableLayoutPanel1.TabIndex = 8; + // + // start + // + this.start.Dock = System.Windows.Forms.DockStyle.Bottom; + this.start.Location = new System.Drawing.Point(139, 3); + this.start.Name = "start"; + this.start.Size = new System.Drawing.Size(130, 29); + this.start.TabIndex = 2; + this.start.Text = "Start"; + this.start.UseVisualStyleBackColor = true; + this.start.Click += new System.EventHandler(this.start_Click); + // + // stop + // + this.stop.Dock = System.Windows.Forms.DockStyle.Bottom; + this.stop.Location = new System.Drawing.Point(3, 3); + this.stop.Name = "stop"; + this.stop.Size = new System.Drawing.Size(130, 29); + this.stop.TabIndex = 1; + this.stop.Text = "Stop"; + this.stop.UseVisualStyleBackColor = true; + this.stop.Click += new System.EventHandler(this.stop_Click); + // + // label3 + // + this.label3.Location = new System.Drawing.Point(0, 0); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(100, 23); + this.label3.TabIndex = 10; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(0, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(100, 23); + this.label2.TabIndex = 11; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(0, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(100, 23); + this.label1.TabIndex = 12; + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(0, 0); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(100, 27); + this.textBox2.TabIndex = 13; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(0, 0); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(100, 27); + this.textBox1.TabIndex = 14; + // + // Main + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.panel1); + this.Controls.Add(this.statusStrip1); + this.Name = "Main"; + this.Text = "Main"; + this.Resize += new System.EventHandler(this.Main_Resize); + this.statusStrip1.ResumeLayout(false); + this.statusStrip1.PerformLayout(); + this.panel1.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.tableLayoutPanel5.ResumeLayout(false); + this.tableLayoutPanel5.PerformLayout(); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel4.PerformLayout(); + this.tableLayoutPanel3.ResumeLayout(false); + this.tableLayoutPanel3.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.tableLayoutPanel1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.NotifyIcon notifier; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.ContextMenuStrip notifyMenuStrip; + private System.Windows.Forms.ToolStripStatusLabel statusLabel; + private System.Windows.Forms.RichTextBox logTextBox; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.Button start; + private System.Windows.Forms.Button stop; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox discordAppId; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox lastFMSecret; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox lastFMKey; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.TextBox lastFMUsername; + } +} \ No newline at end of file diff --git a/src/Main.cs b/src/Main.cs new file mode 100644 index 0000000..670a30a --- /dev/null +++ b/src/Main.cs @@ -0,0 +1,236 @@ +using DiscordRPC; +using IF.Lastfm.Core.Api; +using IF.Lastfm.Core.Objects; +using Newtonsoft.Json; +using System; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace LastRPC +{ + public partial class Main : Form + { + string configLocation = Path.Combine(AppContext.BaseDirectory, "config.json"); + Config config; + LastfmClient lastfmClient; + DiscordRpcClient rpcClient; + Thread lastFMThread; + LastTrack currentTrack; + bool isRunning = false; + + public Main() + { + if (File.Exists(configLocation)) + { + config = JsonConvert.DeserializeObject(File.ReadAllText(configLocation)); + } + + InitializeComponent(); + + if (config != null) + { + lastFMKey.Text = config.LastFMKey; + lastFMSecret.Text = config.LastFMSecret; + discordAppId.Text = config.DiscordId; + lastFMUsername.Text = config.Username; + } + else + { + config = new Config(); + } + + stop.Enabled = false; + + statusLabel.Text = "Ready"; + } + + private void notifier_MouseDoubleClick(object sender, MouseEventArgs e) + { + Show(); + WindowState = FormWindowState.Normal; + } + + private void Main_Resize(object sender, System.EventArgs e) + { + if (WindowState == FormWindowState.Minimized) + { + Hide(); + } + } + + private void Configure() + { + lastfmClient = new LastfmClient(lastFMKey.Text, lastFMSecret.Text); + + rpcClient = new DiscordRpcClient(discordAppId.Text ?? "775484756380352542"); + config.Set(lastFMKey.Text, lastFMSecret.Text, discordAppId.Text, lastFMUsername.Text); + + File.WriteAllText(configLocation, JsonConvert.SerializeObject(config)); + } + + private string GetLogMessage(string status, string key, string message) + => $"[{DateTime.Now:yyyy/MM/dd HH:mm:ss}] [{status}] [{key}] {message}"; + + private void WriteLog(string message) + { + if (InvokeRequired) + { + this.Invoke(new Action(WriteLog), new object[] { message }); + return; + } + + logTextBox.AppendText(message); + logTextBox.AppendText(Environment.NewLine); + } + + private void StartLastFMScrobbler() + { + string username = lastFMUsername.Text; + statusLabel.Text = "Running"; + isRunning = true; + lastFMThread = new Thread(async () => + { + Thread.CurrentThread.IsBackground = true; + + while (isRunning) + { + WriteLog(GetLogMessage("I", "LastFM Request", "Getting User Scrobbles")); + + var scrobbles = await lastfmClient.User.GetRecentScrobbles(username, extendedResponse: true, count: 1); + + if (scrobbles.Success) + { + if (scrobbles.Content.Count > 0) + { + var mostRecent = scrobbles.Content[0]; + + if (mostRecent.IsNowPlaying.HasValue && mostRecent.IsNowPlaying.Value) + { + WriteLog(GetLogMessage("I", "LastFM Request", "Found Currently playing")); + + if (currentTrack == null || mostRecent.Mbid != currentTrack.Mbid) + { + WriteLog(GetLogMessage("I", "LastFM Request", "Different song, setting Status")); + SetDiscordStatus(mostRecent, true); + } + } + + currentTrack = mostRecent; + } + else + { + WriteLog(GetLogMessage("E", "LastFM Request", "Got Nothing Waiting 30s")); + } + } + else + { + WriteLog(GetLogMessage("E", "LastFM Request", "Wasn't successful, waiting 30s")); + } + + await Task.Delay(TimeSpan.FromSeconds(30)).ConfigureAwait(false); + } + + WriteLog(GetLogMessage("I", "LastFM Request", "Got outside, stopping")); + }); + + lastFMThread.Start(); + } + + private void StopLastFMScrobbler() + { + isRunning = false; + statusLabel.Text = "Ready"; + } + + private void SetDiscordStatus(LastTrack track, bool isPlaying) + { + bool didInit = false; + if (!rpcClient.IsInitialized) + { + WriteLog(GetLogMessage("I", "Discord RPC", "Not Initialised")); + if (rpcClient.Initialize()) + { + WriteLog(GetLogMessage("I", "Discord RPC", "Successfully Initialised")); + didInit = true; + } + else + { + WriteLog(GetLogMessage("E", "Discord RPC", "Failure initialising, is Discord running?")); + } + } + else + { + didInit = true; + } + + if (didInit) + { + Timestamps stamps = null; + + if (track.TimePlayed.HasValue && track.Duration.HasValue) + { + var end = track.TimePlayed.Value.Add(track.Duration.Value); + + stamps = new Timestamps + { + EndUnixMilliseconds = Convert.ToUInt64(end.ToUnixTimeMilliseconds()) + }; + } + + rpcClient.SetPresence(new RichPresence + { + Assets = new Assets + { + LargeImageKey = "lastfm", + SmallImageKey = isPlaying ? "playing" : "paused" + }, + Details = $"{track.ArtistName} - {track.Name}", + Timestamps = stamps + }); + + WriteLog(GetLogMessage("I", "Discord RPC", "Set Status")); + } + } + + private void start_Click(object sender, System.EventArgs e) + { + discordAppId.ReadOnly = true; + lastFMKey.ReadOnly = true; + lastFMSecret.ReadOnly = true; + lastFMUsername.ReadOnly = true; + Configure(); + StartLastFMScrobbler(); + start.Enabled = false; + stop.Enabled = true; + } + + private void stop_Click(object sender, System.EventArgs e) + { + discordAppId.ReadOnly = false; + lastFMKey.ReadOnly = false; + lastFMSecret.ReadOnly = false; + lastFMUsername.ReadOnly = false; + StopLastFMScrobbler(); + start.Enabled = true; + stop.Enabled = false; + } + + public class Config + { + public string LastFMKey; + public string LastFMSecret; + public string DiscordId; + public string Username; + + public void Set(string key, string secret, string id, string username) + { + LastFMKey = key; + LastFMSecret = secret; + DiscordId = id; + Username = username; + } + } + } +} diff --git a/src/Main.resx b/src/Main.resx new file mode 100644 index 0000000..0f06c06 --- /dev/null +++ b/src/Main.resx @@ -0,0 +1,695 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + AAABAAUAEBAAAAEAIABoBAAAVgAAABgYAAABACAAiAkAAL4EAAAgIAAAAQAgAKgQAABGDgAAMDAAAAEA + IACoJQAA7h4AAAAAAAABACAA6E4AAJZEAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAADDDgAAww4AAAAA + AAAAAAAAAAAAAAAAAADqkoIA6pKCCOqSgk3qkoKt6pKC6OqSgv3qkoL96pKC6OqSgq3qkoJN6ZKCCOqS + ggAAAAAAAAAAAOeQgADqkoIA6JGBG+qSgpfqkoLw6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC8OqS + gpfqkoIb6pKCAOmRgQD/nowA/5+NG/SYh7XrkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKCteqSghvqkoIA/56LB/+ejJf+noz/9ZiH/+yTgf/skoD/65KB/+qSgv/qkoL/65KB/+yS + gP/skoH/65KC/+qSgv/qkoKX6pKCB/+ejE7/nozv/56M//udjP/flZf/ypeo/9qTk//qlIX/65WF/9uT + kv/Nman/z4uV/+GNhv/rk4L/6pKC7+qSgk7/noyt/56M//mcj/+jerf/aGrb/1ll5f9RUtX/w7DN/56N + zP9JStT/TFni/0xR2v9bTcX/yYKR/+yTgf/qkoKt/56M5/+fi//JiaX/WWLg/7e99P/l5Pj/tKTY/6Gi + 4f8zQeD/hXvQ/9PR5f/CxOj/O0vk/4lirv/tlIH/6pKC5/+ejP3/n4v/pnq1/2x46P/z9f7///Ht//+u + m/+Db8j/TknN/8mJmv+Xktf/YW3l/zM92/+ocqD/7ZOB/+qSgv3/noz9/5+L/6l8s/9rd+j/8vP9///9 + +v/u0df/aGrb/4yN4P9eWtL/QU3h/3uD5P+0iK7/5o+D/+qSgv/qkoL9/56M5/+fi//RjKH/W2Le/7K5 + 9P/n6fz/oKny/2Bs5v/L0Pf/UmDn/4GK5f/LyuX/fGnE/7p6l//sk4H/6pKC6P+ejK3/noz/+52O/7F/ + sP9wadP/bnPg/3Jz3f+9t+b//fLx/7Kq4v9aXtz/SU3Y/1dLxv/KgpH/7JOB/+qSgq3/noxO/56M7/+e + jP/+noz/75eT/+Oaov/xqqf//6ub//+rm//9s6b/6qCi/9aIlP/gjYf/65KB/+qSgu/qkoJO/56MB/+e + jJf/noz//56M//+ejP//nov//56L//+di///nYv//52L//+ei///n4v/9ZiH/+uSgv/qkoKX6pKCB/+e + jAD/nowb/56Mtv+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//6ejP/0mIe26JGBG+qS + ggD/nYsA/56MAP+ejBv/noyX/56M8f+ejP//noz//56M//+ejP//noz//56M//+ejPH/noyX/5+MG/+e + jAD+n4wAAAAAAAAAAAD/nowA/56MCP+ejE7/noyu/56M6P+ejP3/noz9/56M6P+ejK7/noxO/56MCP+e + jAAAAAAAAAAAAOAHAADAAwAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAQAAwAMAAOAHAAAoAAAAGAAAADAAAAABACAAAAAAAAAJAADDDgAAww4AAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAOaOfwDqkoIA6ZGBCeqSgkHqkoKT6pKC0eqSgvPqkoL+6pKC/uqSgvPqkoLR6pKCk+qS + gkHpkYEJ6pKCAOaOfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6ZGBAOiRgQLqkoI36pKCpuqS + gu3qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgu3qkoKm6pKCN+iQgQLpkYEAAAAAAAAA + AAAAAAAAAAAAAAAAAADokYEA55CAB+qSgmzqkoLm6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC5uqSgmzqkYIH6pKCAAAAAAAAAAAAAAAAAP+ejAD/o5AH9JiHgOuS + gvbqkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gvbqkoKA6ZGCB+qSggAAAAAA/52LAP+ahwD/noxs/p6M9vSYh//qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL26pKCbOaOfgDpkYEA/56MAP+e + jDj/nozl/56M//6ejP/0mIf/6pKC/+qSgf/qkYH/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pGB/+qS + gf/qkoL/6pKC/+qSgv/qkoL/6pKC5eqSgjjqkoIA/52LCP+ejKb/noz//56M//+ejP//nov/95qH/+ua + i//rpJb/7ZuJ/+ySgP/qkYD/6pGA/+ySgP/tmoj/7KWW/+yci//tlIL/7ZOA/+uSgv/qkoL/6pKC/+qS + gqbpkYEI/56MQv+ejOz/noz//56M//+ei//kk5n/r4W4/4Z90v90eN7/kni//8yKmP/qqJz/6qic/8aG + mf+UeL3/fYDe/3pz0v+EZbf/p3Gh/92MiP/rk4L/6pKC/+qSguzqkoJC/56Mkv+ejP//noz//5+L/9SO + oP9oY9P/Slji/1Zj5P9EUuT/IDHh/1Ze3v/g3eb/n6Li/zQ/3f8fMOH/MUDh/zpH4f8uPeH/IjHf/2hS + vv/fjYf/65KC/+qSgv/qkoKT/56M0f+ejP//noz/9ZqQ/3pqyv9IV+P/k5rs/+Lj+f/l5/v/pKXr/42S + 4v+7v+j/MUDh/yg13v+KjeD/zdDp/9fX5//Fx+f/SFXj/yUx3P+6e5j/7ZOB/+qSgv/qkoLR/56M8/+e + jP//n4v/2pCd/1Vb2/9jb+b/6Or7////////9vP//ryu/++1r/9wdt//Givh/3lcuP/sq57/7uLc/+Tl + 6//Aw+j/Q1Di/yMw3f+1eJr/7ZOB/+qSgv/qkoLz/56M/v+ejP//n4v/zIqk/0xX3/98hun/+vr+//// + ////6eX//6KP/+uYlv9QUdj/LDjc/8CAmP/HgZL/f3jS/1Bd4/8tPOH/HS3g/1lMxf/aion/65KC/+qS + gv/qkoL+/56M/v+ejP//n4v/zouj/01X3v97hOn/+fr+////////+vn//9TJ/8elyP9LV+D/Z3Dj/7mi + yP88PdL/HS7g/zVD4f9YZOT/j3rE/9aIi//rk4H/6pKC/+qSgv/qkoL+/56M8/+ejP//n4v/4pOZ/1td + 2f9gbOX/5eb7////////////+vr+/4qT7P9HVeH/q7Hw/52l7/8bLOD/Ymzj/9HT6f/m5Oj/3Kis/9uJ + iP/nkYP/6pKC/+qSgv/qkoLz/56M0f+ejP//noz/+pyO/4lww/9HV+P/jJXs/9/h+v/m5/v/qa/x/09c + 4v9ibeX/5ef7/7i99P8xQOD/ZG/j/9TW6f/FwuH/VFHR/0xFyv/PhY7/7JOB/+qSgv/qkoLR/56Mk/+e + jP//noz//5+L/+GTmv95asv/TVng/1dk5f9aZ+X/TFnh/2Ft5f/CyPb//////+vs+/93fuX/NkXh/zdH + 4/8wQOL/IDDf/2pUvf/ijob/65KC/+qSgv/qkoKT/56MQv+ejOz/noz//56M//+fi//wmZP/wIap/514 + uv+YhtH/spvQ/+Ozv//+0cj//9HI///Ow//sxMv/tJzQ/4Jkvv95Wrb/o2+j/92MiP/rkoL/6pKC/+qS + guzqkoJC/52LCP+ejKb/noz//56M//+ejP//noz//5+L//+fi///pJL//66d//+ij///nYr//52K//+g + jv//rZ3//6aT//+fi//2mYb/7pSB/+uSgv/qkoL/6pKC/+qSgqbqkoII/56MAP+ejDj/nozl/56M//+e + jP//noz//56M//+ejP//noz//52L//+ejP//noz//56M//+ejP//nYv//56M//+ejP/+noz/9JiH/+qS + gv/qkoL/6pKC5eqSgjjqkoIA/52LAP+aiAH/noxt/56M9v+ejP//noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//p6M//SYh//rkoL26pKCbeqPfwHqkoEAAAAAAP+e + jAD/nYsH/56MgP+ejPb/noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+e + jP//noz//56M//6ejPb0mIeA4Y1+B+qSggAAAAAAAAAAAAAAAAD/nowA/56LCP+ejGz/nozm/56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M5v+ejGz/n40I/5+MAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/52LAP+diwL/now4/56Mp/+ejO3/noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejO3/noyn/56MOP+diwL/nYsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+b + iQD/nowA/56MCf+ejEL/noyU/56M0v+ejPT/noz//56M//+ejPT/nozS/56MlP+ejEL/nowJ/56MAP+b + iQAAAAAAAAAAAAAAAAAAAAAA/AA/APAADwDgAAcAwAADAMAAAwCAAAEAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAABAIAAAQDAAAMA4AAHAPAADwD8AD8AKAAAACAA + AABAAAAAAQAgAAAAAAAAEAAAww4AAMMOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADej3YA6ZGCAOmRgQbqkoIx6pKCd+qSgrfqkoLi6pKC+eqSgv/qkoL/6pKC+eqSguLqkoK36pKCd+qS + gjHpkYEG6ZGCAN6PdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA6ZKBAOmRgQXqkoI/6pKCoOqSguTqkoL96pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL96pKC5OqSgqDqkoI/6ZGBBemSgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA6JGBAOqSggDpkoEg6pKCk+qSgu7qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgu7qkoKT6ZGCIOqSggDokYEAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAOeQgQD/qJIA6pKCPuqSgsrqkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoLK6pKCPvKaiADpkYEAAAAAAAAA + AAAAAAAAAAAAAAAAAAD/nYsAmWdfAPSYh0rrkoLf6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoLf6pKCSu6V + hQDpkYEAAAAAAAAAAAAAAAAA/5yKAP+ejAD/now+/p2M3vSYh//qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoLf6pKCPuqSggDpkIEAAAAAAAAAAAD/nowA/56LIP+ejMn/noz//p6M//SYh//qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoLJ6pKCIOqSggAAAAAA/52LAP+diwT/noyT/56M//+ejP//noz//p6M//SY + h//qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoKT6ZGBBemSgQD/nowA/56MQP+ejO3/noz//56M//+e + jP//noz//p6M//WYhv/sk4H/7ZWD/+yZiP/rlYT/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/65SD/+yZ + iP/slYT/7JOB/+uTgf/rkoL/6pKC/+qSgv/qkoL/6pKC/+qSgu3qkoJA6pKCAP+diwX/noyg/56M//+e + jP//noz//56M//+ejP//nov/8pyV/9Wfrf+/pMT/xLXT/9anr//pkYP/7JOB/+qSgv/qkoL/7JOB/+iQ + g//Ypav/zb3T/8qvxv/Lmav/1IqQ/+KOhf/sk4H/65KC/+qSgv/qkoL/6pKC/+qSgqDpkYEF/56MMv+e + jOP/noz//56M//+ejP//nov/9JqR/6x+s/9vadP/WGTi/z1N4/8tPuL/Pkbb/3Javf/KpLj/68jA/+rH + wP+7l7n/alW//0BI2v8zQuP/Lz/j/zA+4P86PdX/U0jI/5lrqP/jj4X/65KC/+qSgv/qkoL/6pKC5OqS + gjL/nox3/56M/f+ejP//noz//56M//ebj/+Udb7/S1jh/0dW4v9SXuL/Xmrk/0RS4/8gMOH/GSvh/4iR + 5//t7uz/pavo/zNC4/8aLOH/HS7g/zA+4f89SuH/PEff/ys64f8bLeL/IzHe/49lrP/qkoL/6pKC/+qS + gv/qkoL96pKCd/+ejLf/noz//56M//+ejP//n4v/voWr/05Z3/9JVuH/cHrn/8vN9P/p6vv/4uT7/6Ws + 8f9KWOT/ur7o/8bI6P83ReH/Gyzg/y094v+Hj+b/yMvp/9fY6f/X1OT/vL/n/0lW4v8aLOH/RkLO/9uL + if/rkoL/6pKC/+qSgv/qkoK3/56M4v+ejP//noz//56M//ucjv+Dbsf/R1bi/1Zj4//Q1Pf///////// + /////v3//t3V/96vuv/h1t3/cHrl/xws4P8jMN7/lHW6/+vIwf/t6uf/7e3q/+7u6v/r6+r/Z3Lk/xor + 4f84O9X/0oaN/+yTgf/qkoL/6pKC/+qSguL/noz5/56M//+ejP//noz/75iU/2hj0/9HVeH/doDo//b3 + /v/////////////q5v//pZT//56J/9qmsv85R+H/Gyzh/1BGyf/ejIf/7piF/+jQzv/W2er/uLzo/32F + 5f8rOuH/Gy3i/0pEzP/djIj/65KC/+qSgv/qkoL/6pKC+f+ejP//noz//56M//+fi//plZb/YWDX/0dV + 4f+Lk+z//v7//////////////+Xg//+gj///non/v4es/zZE4P8fMOH/jmqz/+uSgf+zd5v/aWPQ/z5M + 4v8nN+D/HCzg/xss4f8tNtn/oW6k/+uTgf/qkoL/6pKC/+qSgv/qkoL//56M//+ejP//noz//5+L/+qW + lv9iYdb/RlXh/4mS6//+/v//////////////+vn//8m+//63qv+QgtH/RlTh/0JQ4v/CstL/oXy0/yw1 + 2f8bLOH/Gyzg/yY24P88SuL/aGXU/7R5nP/pkYP/6pKC/+qSgv/qkoL/6pKC/+qSgv//noz5/56M//+e + jP//noz/9JqR/3Bmz/9GVeL/cnzo//T1/f////////////////////3/5uX3/2Nu5f9HVOD/doDo/9/h + 8/9MWeP/Gyvg/y084f9/h+X/trrn/9TX6v/qwbn/8JV//+yTgf/qkoL/6pKC/+qSgv/qkoL/6pKC+f+e + jOL/noz//56M//+ejP//noz/lHW+/0dW4v9TYOL/yc32//////////////////39//+iqfD/S1jh/0pX + 4f+utPL/7e/8/05b5f8bK+D/Ym3j/+rq6v/u7uv/7enm/7qTtf+pcZ//xH+U/+iRg//qkoL/6pKC/+qS + gv/qkoLi/56Mt/+ejP//noz//56M//+fi//RjKH/Vlzc/0hW4f9pdOb/xMj1/+fp+//i5Pr/qK/x/1Vh + 4/9HVeD/anXm/+nr+//4+f7/doDo/y8+4P9BTuL/u7/o/9vc6v+9ud//Q0bW/x0u4P9dTcP/5I+F/+qS + gv/qkoL/6pKC/+qSgrf/nox3/56M/f+ejP//noz//56M//ydjf+sfrP/VFzd/0dW4v9PXOP/Xmrl/1pm + 5P9KWOL/R1bi/2Bt5v/Jzvf///////////+9w/X/Ul/k/zBA4P8vPuH/QE7i/y494f8bLeH/IzHe/5lq + qP/sk4H/6pKC/+qSgv/qkoL96pKCeP+ejDL/nozk/56M//+ejP//noz//56M//ydjf/KiqX/hW/F/2Jh + 1v9WXdz/WGTk/2hq2v+ThtT/29Dp//729P//9vT///Pw//vn5f+/ptH/dnng/0RN3v8qNNr/MDfY/05G + yv+Za6f/5I+F/+uSgv/qkoL/6pKC/+qSguTqkoIy/52LBf+ejKH/noz//56M//+ejP//noz//56M//+f + i//7nY7/6paW/92UoP/frr3/7sfL//24rP//qpn//62d//+tnf//qZn//7ep///Qxv/2w8D/4pmi/8yE + mf/KgpH/34yH/+yTgf/rkoL/6pKC/+qSgv/qkoL/6pKCoeqSggX/nowA/56MQP+ejO7/noz//56M//+e + jP//noz//56M//+ejP//n4v//5+L//+fi///o5H//6KR//+di///nYv//52L//+di///opD//6OS//+e + i///nov//5+L//aZhv/rk4L/6pKC/+qSgv/qkoL/6pKC/+qSgu7qkoJB6pKCAP+diwD/nYsF/56MlP+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//p6M//SYh//qkoL/6pKC/+qSgv/qkoL/6pKClOqRggXqkoIAAAAAAP+e + jAD/nowh/56Myv+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//p6M//SYh//qkoL/6pKC/+qSgsrqkoIh6pKCAAAA + AAAAAAAA/52KAP+ejAD/now//56M3/+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//p6M//SYh//rkoLf6pKCP+qS + ggDqkYEAAAAAAAAAAAAAAAAA/52LAP+hjwD/noxL/56M3/+ejP//noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//p2M3/SY + h0v/278A6pGBAAAAAAAAAAAAAAAAAAAAAAAAAAAA/52LAP+qnAD/now+/56My/+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+e + jMv/now//5GIAP+ejAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/52LAP+ejAD/nowg/56MlP+e + jO7/noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+e + jO//noyU/56MIP+ejAD/nYsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+e + iwD/nYsF/56MQP+ejKL/nozl/56M/f+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M/f+e + jOX/noyi/56MQP+diwX/nowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP+WhwD/nowA/52LBv+ejDL/nox4/56MuP+ejOP/noz6/56M//+ejP//noz6/56M4/+e + jLj/nox4/56MMv+diwb/nowA/5aHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gAH//gAAf/wA + AD/4AAAf8AAAD+AAAAfAAAADgAAAAYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAABwAAAA+AAAAfwAAAP+AAAH/wAAD/+AAB//4AB/ygA + AAAwAAAAYAAAAAEAIAAAAAAAACQAAMMOAADDDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOiQgADnjoAB6ZGBFOmRgUTqkoJ+6pKCsuqS + gtnqkoLy6pKC/eqSgv7qkoL+6pKC/eqSgvLqkoLZ6pKCsuqSgn7pkYFE6ZGBFOeOgAHokIAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADpkYEA6ZGBBumSgTPqkoKB6pKCx+qS + gu/qkoL96pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv3qkoLv6pKCx+qS + goHpkoEz6ZGBBumRgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6ZGBAOiRgQTpkYE56pKCnuqS + gunqkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoLp6pKCnumRgTnokYEE6ZGBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOiPgADrlIMA6ZGBHuqS + govqkoLp6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgunqkoKL6ZGBHuuUgwDoj4AAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6ZGBAOiR + gQLpkoJI6pKCyuqSgv7qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL+6pKCyumR + gkjpkYEC6ZGBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADpkYEA6ZGBB+qSgm3qkoLp6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgunqkoJt6ZGBB+mRgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAPKWhgD1mIcK6pKCgOqSgvXqkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL16pKCgOmRgQrpkYEAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/52LAP+eiwf+nYuA9JiH+OuSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC+OqSgoHpkYEH6ZGBAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/nYsA/5uJAv+ejGz/noz1/p6M//SYh//rkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gvXqkoJt6I+AAumRgQAAAAAAAAAAAAAAAAAAAAAAAAAAAP+cigD/no0A/52MSP+ejOn/noz//56M//6e + jP/0mIf/65KC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoLp6pKCSeqSgwDokIAAAAAAAAAAAAAAAAAAAAAAAP+eiwD/nosf/56Myf+e + jP//noz//56M//+ejP/+noz/9JiH/+uSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKCyuqRgR/qkoIAAAAAAAAAAAAAAAAA/52LAP+c + igP/noyL/56M//+ejP//noz//56M//+ejP//noz//p6M//SYh//rkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgovokYAD6ZGBAAAA + AAAAAAAA/56MAP+ejDr/nozp/56M//+ejP//noz//56M//+ejP//noz//56M//6ejP/0mIf/65KC/+qS + gv/qkYH/6pGB/+qRgP/qkYH/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qR + gf/qkYD/6pGB/+qRgf/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gunpkoI66pKCAAAAAAD/nYsA/5yKBf+ejJ7/noz//56M//+ejP//noz//56M//+ejP//noz//56M//+e + jP//nov/9piG/+2VhP/tno3/7aqc/+20p//ro5T/6pKB/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKB/+ufkP/ss6f/7Kud/+yfj//sloT/7JOB/+uSgf/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoKf6JCBBemRgQD/nowA/56MM/+ejOj/noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+fi//5npD/56Wp/8ytxv+zqtf/tLTi/8DD6P/Tv9D/5ZeM/+2TgP/rkYD/6pGA/+qR + gP/qkYD/6pGA/+uSgP/tk4D/5ZOJ/9i+yf/Mz+n/xsXk/8a92v/GqsT/y5Kj/9iKi//kj4X/7JOB/+yT + gf/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoLp6pKCNOqSggD/oY8A/56Mgf+ejP//noz//56M//+e + jP//noz//56M//+ejP//n4v/9puQ/7yEq/+Bb8r/YWjg/1Rh5P86SeL/Jjbh/ys64f87SOD/X1LH/6Ry + pv/hpaP/67as/+q5sP/qubD/7Lis/9edpP+Waqr/XE/H/0BM4P80QuH/Lz7h/y8+4v8vP+L/Mj7e/0BA + 0v9ZS8X/i2Su/9GGjf/sk4H/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKCge2VhQD/nYsV/56Mx/+e + jP//noz//56M//+ejP//noz//56M//+fi//vmJP/jnLB/05Z3/9IV+L/Slfh/0pX4f9IVeH/MkHg/x4u + 4P8dLeD/HC3h/yMy3/9xeeL/4+Pq/+vr6//r7Ov/t7vo/0xX4f8gMOD/HC3h/x0t4P8dLeD/HCzg/xws + 4P8cLOD/HC3g/x0u4f8cLeH/Hi7h/0dDzf+/fZb/7JOB/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKCx+mR + ghX/noxE/56M7/+ejP//noz//56M//+ejP//noz//56M//abkP+NcsL/Slji/0pY4f9LWOH/SVbg/1Je + 4v9ga+T/X2vl/0FO4/8gMOD/HS3g/xss4P9daOP/5OXq/+zs6v+zt+f/N0Xh/xws4P8fL+D/Hi7g/x0t + 4P8qOeH/PUri/0NQ4f9DS9z/OEXg/yU04P8eLuD/Hy/g/xst4v9PR8r/2oqK/+uTgv/qkoL/6pKC/+qS + gv/qkoL/6pKC7+qSgkX/nox//56M/v+ejP//noz//56M//+ejP//noz//5+L/7eCrv9OWeD/Sljh/0tY + 4f9MWeH/g4ro/83O8//n6fv/6ev7/9vd+f+dpO//RFHj/x8w4P+do+b/7+7q/8/R6f9EUeL/HCzg/x8v + 4P8dLuD/LT3h/3qD5f+7vuj/1dfp/9vc6f/a09//0c/k/6et5/9ATeL/HS7g/x8v4P8jMd7/qnOg/+2U + gf/qkoL/6pKC/+qSgv/qkoL/6pKC/uqSgn//noyz/56M//+ejP//noz//56M//+ejP//noz/85mR/3No + zv9JV+L/S1jh/0lX4f+Gj+v/8vP9/////////////////////////v7/19Tt/3l/4f/O0en/6urq/3mC + 5P8dLeD/Hy/g/x4u4P8zQN//qqrh/+rp6v/t7er/6+vq/+vr6v/r6+r/7Ovq/+/v6v+Plub/Hi7g/x8v + 4P8dLuH/imOu/+2Tgf/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgrP/nozZ/56M//+ejP//noz//56M//+e + jP//n4v/1o6f/1Vc3P9KWOH/Slfh/1ll4//Y2/j////////////////////////9/f//2dL//7Wm//Cv + pv/r2NT/yMvp/zVD4f8dLuD/Hy/g/yIw3v+TbbD/7KaY/+rDu//q5+f/6urq/+rq6v/q6ur/7Ozq/+zs + 6v+BieX/HS3g/x8v4P8cLuH/hGCx/+2Tgf/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgtr/nozz/56M//+e + jP//noz//56M//+ejP//n4v/uYOt/0tY4f9LWOH/SFbh/3yF6f/4+f7////////////////////////p + 5f//pZT//5yK//6cif/3saL/kJLf/x4u4P8fL+D/HS7h/05Gyv/ci4j/65GA/+qVhv/r0Mr/7e7s/+zs + 6v/m5ur/0dPp/5GY5v8wP+H/Hi7g/x8v4P8fL+D/m2un/+2Ugf/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gvP/noz9/56M//+ejP//noz//56M//+ejP//n4v/p3y1/0lX4v9LWOH/SFXh/5mg7v////////////// + ///////////////Wzv//nYv//56M//+ei//5oZT/amXV/x0u4f8fL+D/Hy/g/5Fmq//tk4H/65OB/+uS + gP/YrrX/srfo/4aO5f9fauP/Okjh/yEx4P8eLuD/Hy/g/xwu4f87PdP/zIOQ/+yTgf/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv3/noz+/56M//+ejP//noz//56M//+ejP//n4v/pXu3/0lX4v9LWOH/SVbh/6qw + 8f/////////////////////////////e2f//n47//56M//+ei//ik5r/XF7Z/zJC4f8fL+D/MTzd/8WH + nP/uk3//2oqK/4tkrv9ERdT/Jjbh/x0t4P8cLOD/HS3g/x8v4P8eLuD/HC3h/zI41/+mcaL/65KC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv7/noz+/56M//+ejP//noz//56M//+ejP//n4v/pXu2/0lX + 4v9LWOH/SVbh/6et8P/////////////////////////////49v//vrL//6CP//+nlP+4k8H/TFnh/0lX + 4f8xQOD/WGTj/+TDw//WkJT/XE3D/x8v4P8dLuH/Hy/g/x4u4P8cLeD/HCzg/x8v4P8wPuD/YlPF/7l6 + mf/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv7/noz9/56M//+ejP//noz//56M//+e + jP//n4v/sYCx/0pY4f9LWOH/SFXh/5Sc7f//////////////////////////////////+Pf//+Tf//vm + 5f+Gjej/SFbh/0tY4f9IVeH/m6Hp/+3s6f+Dgdn/HS3g/x8v4P8fL+D/Hi7g/yw74f9JVuL/bXfk/5if + 5//Evt7/5ZuT/+ySgP/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv3/nozz/56M//+e + jP//noz//56M//+ejP//n4v/yoql/1Ba3/9LWOH/SVbh/3V/6P/19f3///////////////////////// + /////////////9ve+f9bZ+T/Slfh/0pX4f9WY+P/19r4/+vs9P9LWOP/HCzg/x8v4P8fL+D/YGvj/7zA + 6P/d3un/6enq/+3u7P/t08z/7JaF/+uSgf/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qS + gvP/noza/56M//+ejP//noz//56M//+ejP//n4v/6JWX/2Jh1v9JV+L/Slfh/1Rg4//N0ff///////// + ////////////////////////+/z+/5Wd7f9JVuH/S1jh/0hW4f99hun/+Pn+/+zt/P9PW+X/Hi7g/x0u + 4P81Q+H/y83o/+7u6v/r6+r/6urq/+vq6v/csrb/0ISN/9uLif/kj4X/6ZGD/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgtr/noyz/56M//+ejP//noz//56M//+ejP//noz//Z2N/49zwf9IV+L/S1jh/0lW + 4f96hOn/6+z8///////////////////////+/v//vMH0/1Rg4/9KV+H/S1jh/05b4v++wvT///////P0 + /f9td+f/MUDg/x4u4P80Q+H/ys3o/+7t6v/r6+r/6+zr/+3j3v+IccH/NTnV/0VCzv9ZS8X/wH2W/+yT + gf/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgrT/nox//56M/v+ejP//noz//56M//+ejP//noz//5+L/9SO + oP9aXtr/Slfi/0tY4f9LWOH/eYLp/8TI9f/l5vv/6er7/9nc+f+hqO//WGTj/0pX4f9LWOH/SFXh/32H + 6f/09P3///////39//+Pl+z/RlTg/zRC4P8gMOD/ZnDk/8vN6P/e3+n/2dvq/6ii2f84Pdb/HC3h/xwt + 4v8qNNv/wH6V/+yTgf/qkoL/6pKC/+qSgv/qkoL/6pKC/uqSgoD/noxF/56M7/+ejP//noz//56M//+e + jP//noz//56M//2ejP+vf7L/UVve/0lX4v9LWOH/SVbh/09c4v9daeT/YWzl/1dj4/9KV+H/Slfh/0tY + 4f9IVeH/aHPm/9rd+f/////////////////P0/f/WGTj/0hV4f8zQuD/IDDg/zVE4f9IVeL/QU7i/yc3 + 4P8eLuD/Hy/g/xst4v9fTsL/4o6G/+uSgv/qkoL/6pKC/+qSgv/qkoL/6pKC7+qSgkX/nYsV/56Mx/+e + jP//noz//56M//+ejP//noz//56M//+ejP/6nY7/uYOt/2Ri1f9JV+L/SFfi/0lX4v9JV+H/SVbh/0pX + 4f9JV+H/SFfi/05c4/98hur/2dz5///////////////////////9/v//t730/1pl4/9HVOD/MkHg/x4u + 4P8cLOD/HC3g/x0u4f8cLuH/Hi7h/0lEzf/Df5T/7JOB/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKCyOqS + ghX/oY8A/56Mgv+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56L/+OTmf+nfLX/eGnM/15g + 2P9UXN3/Ul/i/1dk5f9laNv/h3LI/76o1f/y5Ov///bz///39f//9/X///Xz///w7v//5+L//dXO/9Oj + u/+Qidv/ZnHm/z9I3f8oNNz/KDPc/zI41/9NRsv/iWOv/9KGjf/rk4H/6pKC/+qSgv/qkoL/6pKC/+qS + gv/qkoL/6pKCguqThAD/nowA/56MNP+ejOn/noz//56M//+ejP//noz//56M//+ejP//noz//56M//+f + i///n4v/9puQ/+WUmP/Xj6D/06C3/9vF2//s2OL/+8zG//+xoP//p5b//6yd//+voP//r6D//6yd//+n + l///rJ3//8vB///g2f/84t//7bu//9mSof/EgJ3/u3uY/8mCkf/fjIf/7JOB/+yTgf/qkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoLp6pKCNOqSggD/nYsA/52KBf+ejJ//noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//56M//+fi///n4v//5+L//+lkv//sqL//76y//+qmv//nYv//52L//+d + i///nYv//52L//+di///p5f//7+z//+0pv//pZT//56L//+fi///n4r/95mG/+2Tgf/rkoL/6pKC/+qS + gv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoKf6pGBBeqSgQAAAAAA/56MAP+djDv/nozp/56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//nYv//5yK//+d + i///noz//56M//+ejP//noz//56M//+ejP//noz//5yK//+di///noz//56M//+ejP//noz//p6M//SY + h//rkoL/6pKC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgunqkoI76pKCAAAAAAAAAAAA/52LAP+c + igP/noyM/56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+e + jP//noz//56M//6ejP/0mIf/65KC/+qSgv/qkoL/6pKC/+qSgv/qkoL/6pKC/+qSgozqkYED6pGCAAAA + AAAAAAAAAAAAAP+ejAD/nowf/56Myv+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP/+noz/9JiH/+uSgv/qkoL/6pKC/+qSgv/qkoL/6pKCy+qS + gh/qkoIAAAAAAAAAAAAAAAAAAAAAAP+cigD/n4wA/52LSv+ejOr/noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//p6M//SYh//rkoL/6pKC/+qS + gv/qkoLq6pKCSuqSggDqkYEAAAAAAAAAAAAAAAAAAAAAAAAAAAD/nYsA/5yKAv+ejG7/noz1/56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//6e + jP/0mIf/65KC/+qSgvXqkoJu6pCCAuqRggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/52LAP+d + iwf/noyC/56M+P+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP/+noz/9JiH+OuSgoLpkYEI6pKBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP+djAD/nYsK/56Mgv+ejPX/noz//56M//+ejP//noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz1/p2LgvOXhQr2mYcAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/nYsA/52LCP+ejG7/nozq/56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejOr/noxu/52LCP+diwAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/52LAP+digL/noxJ/56My/+e + jP7/noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz+/56MzP+ejEn/nYoD/52LAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+c + igD/n40A/52LH/+ejI3/nozq/56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejOr/noyN/52LH/+f + jgD/nIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/52LAP+diwT/now7/56MoP+ejOr/noz//56M//+ejP//noz//56M//+e + jP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//nozq/56MoP+e + jDv/nYsE/52LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/nYsA/52LBv+ejDT/noyD/56MyP+e + jPD/noz+/56M//+ejP//noz//56M//+ejP//noz//56M//+ejP//noz//56M//+ejP7/nozw/56MyP+e + jIP/now0/52LBv+djAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+c + igD/mokB/52LFf+ejEb/noyA/56MtP+ejNv/noz0/56M/v+ejP//noz//56M/v+ejPT/nozb/56MtP+e + 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 + Pa094pFhAAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/src/Program.cs b/src/Program.cs new file mode 100644 index 0000000..a066b15 --- /dev/null +++ b/src/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Windows.Forms; + +namespace LastRPC +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.SetHighDpiMode(HighDpiMode.SystemAware); + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Main()); + } + } +}