Reimplement Games From Old Client

This commit is contained in:
Alan Moon 2025-12-11 14:41:56 -08:00
parent 72899af1e4
commit cd77340b7c
20 changed files with 2528 additions and 472 deletions

View File

@ -42,7 +42,7 @@
lvUserList = new ListView();
ilStatusIcons = new ImageList(components);
tpGames = new TabPage();
lvGameList = new ListView();
lvGames = new ListView();
ilGameIcons = new ImageList(components);
tpStore = new TabPage();
lvStoreItems = new ListView();
@ -169,7 +169,7 @@
// tpGames
//
tpGames.BorderStyle = BorderStyle.Fixed3D;
tpGames.Controls.Add(lvGameList);
tpGames.Controls.Add(lvGames);
tpGames.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 0);
tpGames.ImageKey = "Games";
tpGames.Location = new Point(4, 24);
@ -180,23 +180,27 @@
tpGames.Text = "Games";
tpGames.UseVisualStyleBackColor = true;
//
// lvGameList
// lvGames
//
lvGameList.BorderStyle = BorderStyle.None;
lvGameList.Dock = DockStyle.Fill;
lvGameList.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point, 0);
lvGames.BorderStyle = BorderStyle.None;
lvGames.Dock = DockStyle.Fill;
lvGames.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point, 0);
listViewItem1.Tag = "StockMarketGame";
listViewItem1.ToolTipText = "Stock Market";
listViewItem2.Tag = "GuessTheNumberGame";
listViewItem2.ToolTipText = "Guess The Number";
listViewItem3.Tag = "TicTacToeGame";
listViewItem3.ToolTipText = "Tic-Tac-Toe (Multiplayer)";
lvGameList.Items.AddRange(new ListViewItem[] { listViewItem1, listViewItem2, listViewItem3 });
lvGameList.LargeImageList = ilGameIcons;
lvGameList.Location = new Point(3, 3);
lvGameList.MultiSelect = false;
lvGameList.Name = "lvGameList";
lvGameList.Size = new Size(362, 539);
lvGameList.SmallImageList = ilGameIcons;
lvGameList.TabIndex = 0;
lvGameList.UseCompatibleStateImageBehavior = false;
lvGames.Items.AddRange(new ListViewItem[] { listViewItem1, listViewItem2, listViewItem3 });
lvGames.LargeImageList = ilGameIcons;
lvGames.Location = new Point(3, 3);
lvGames.MultiSelect = false;
lvGames.Name = "lvGames";
lvGames.Size = new Size(362, 539);
lvGames.SmallImageList = ilGameIcons;
lvGames.TabIndex = 0;
lvGames.UseCompatibleStateImageBehavior = false;
lvGames.DoubleClick += lvGames_DoubleClick;
//
// ilGameIcons
//
@ -278,7 +282,7 @@
private TabPage tpUsers;
private ListView lvUserList;
private TabPage tpGames;
private ListView lvGameList;
private ListView lvGames;
private ImageList ilTabIcons;
private ImageList ilStatusIcons;
private TableLayoutPanel tlpContactsList;

View File

@ -1,5 +1,6 @@
using Krypton.Toolkit;
using qtcnet_client.Factories;
using qtcnet_client.Forms.Games;
using QtCNETAPI.Schema;
using System;
using System.Collections.Generic;
@ -17,11 +18,14 @@ namespace qtcnet_client.Controls
public ListViewItem? SelectedUser { get; set; }
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public ListViewItem? SelectedStoreItem { get; set; }
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public ListViewItem? SelectedGameItem { get; set; }
public event EventHandler? OnContactControlDoubleClicked;
public event EventHandler? OnUserItemDoubleClicked;
public event EventHandler? OnRoomControlDoubleClicked;
public event EventHandler? OnStoreItemDoubleClicked;
public event EventHandler? OnGameItemDoubleClicked;
private ImageFactory _imgFactory;
public MainTabControl(ImageFactory imageFactory)
@ -193,15 +197,28 @@ namespace qtcnet_client.Controls
private void lvStoreItems_DoubleClick(object sender, EventArgs e)
{
if(lvStoreItems.SelectedItems.Count > 0)
if (lvStoreItems.SelectedItems.Count > 0)
{
ListViewItem? lvi = lvStoreItems.SelectedItems[0];
if(lvi != null)
if (lvi != null)
{
SelectedStoreItem = lvi;
OnStoreItemDoubleClicked?.Invoke(this, EventArgs.Empty);
}
}
}
private void lvGames_DoubleClick(object sender, EventArgs e)
{
if (lvGames.SelectedItems.Count > 0)
{
ListViewItem? lvi = lvGames.SelectedItems[0];
if (lvi != null)
{
SelectedGameItem = lvi;
OnGameItemDoubleClicked?.Invoke(this, EventArgs.Empty);
}
}
}
}
}

View File

@ -124,91 +124,91 @@
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAuBMAAAJNU0Z0AUkBTAIBAQQC
AAEBAQABAQEQAQABEAEABP8BIQEACP8BQgFNATYHAAE2AwABKAMAAUADAAEgAwABAQEAASAGAAEg/wD/
AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wAuAAMGAQcDNAFUA1EBogNeAdIDWgHpA2AB6ANdAdED
UAGfAzEBTQMFAQYYAAMGAQcDNAFUA1EBogNeAdIDWgHpA2AB6ANdAdEDUAGfAzEBTQMFAQYYAAMGAQcD
NAFUA1EBogNeAdIDWgHpA2AB6ANdAdEDUAGfAzEBTQMFAQYYAAMGAQcDNAFUA1EBogNeAdIDWgHpA2AB
6ANdAdEDUAGfAzEBTQMFAQYUAAMgAS0DVAGrA1sB5ANaAfUDJAH7A0QB/gNEAf4DJAH7A1MB9ANiAeED
UQGhAx4BKhAAAyABLQNUAasDWwHkAVcBWgFXAfUBIQFeASEB+wEgAWABIAH+ASABYAEgAf4BIQFeASEB
+wNTAfQDYgHhA1EBoQMeASoQAAMgAS0DVAGrA1sB5AFXAloB9QEhAl4B+wEgAmAB/gEgAmAB/gEhAl4B
+wNTAfQDYgHhA1EBoQMeASoQAAMgAS0DVAGrA1sB5AJXAVoB9QIhAV4B+wIgAWAB/gIgAWAB/gIhAV4B
+wNTAfQDYgHhA1EBoQMeASoMAAMbASUDWAG9A1oB8gNIAf4DMAH/AzkB/wM8Af8DNgH/AyoB/wMkAf8D
QAH9A14B8ANWAbIDGgEjCAADGwElA1gBvQNaAfIBIAFoASAB/gEAAVcBAAH/AQABZwEAAf8BAAFsAQAB
/wEAAWEBAAH/AQABTAEAAf8BAAFAAQAB/wNAAf0DXgHwA1YBsgEZARoBGQEjCAADGwElA1gBvQNaAfIB
IAJoAf4BAAJXAf8BAAJnAf8BAAJsAf8BAAJhAf8BAAJMAf8BAAJAAf8DQAH9A14B8ANWAbIBGQIaASMI
AAMbASUDWAG9A1oB8gIgAWgB/gIAAVcB/wIAAWcB/wIAAWwB/wIAAWEB/wIAAUwB/wIAAUAB/wNAAf0D
XgHwA1YBsgIZARoBIwQAAwMBBANSAaUDYAHzA0kB/wNVAf8DZQH/A3EB/wN1Af8DcQH/A2QB/wNMAf8D
MQH/A0QB/gNiAe4DUAGaAwMBBAMDAQQBUgFTAVIBpQFgAW8BYAHzAQABggEAAf8BAAGZAQAB/wEAAbYB
AAH/AQABzAEAAf8BAAHTAQAB/wEAAcsBAAH/AQABswEAAf8BAAGIAQAB/wEAAVcBAAH/ASABYAEgAf4D
YgHuA1ABmgMDAQQDAwEEAVICUwGlAWACbwHzAQACggH/AQACmQH/AQACtgH/AQACzAH/AQAC0wH/AQAC
ywH/AQACswH/AQACiAH/AQACVwH/ASACYAH+A2IB7gNQAZoDAwEEAwMBBAJSAVMBpQJgAW8B8wIAAYIB
/wIAAZkB/wIAAbYB/wIAAcwB/wIAAdMB/wIAAcsB/wIAAbMB/wIAAYgB/wIAAVcB/wIgAWAB/gNiAe4D
UAGaAwMBBAMtAUQDYAHoA4AB/gNuAf8DewH/A4UB/wOKAf8DjAH/A4oB/wOFAf8DdgH/A1cB/wMyAf8D
QAH9A14B3QMqAT8DLQFEAWABaQFgAegBIAGAASAB/gEAAcYBAAH/AQAB3AEAAf8BAAHuAQAB/wEAAfgB
AAH/AQAB+wEAAf8BAAH5AQAB/wEAAe8BAAH/AQAB1AEAAf8BAAGcAQAB/wEAAVoBAAH/A0AB/QNeAd0D
KgE/Ay0BRAFgAmkB6AEgAoAB/gEAAsYB/wEAAtwB/wEAAu4B/wEAAvgB/wEAAvsB/wEAAvkB/wEAAu8B
/wEAAtQB/wEAApwB/wEAAloB/wNAAf0DXgHdAyoBPwMtAUQCYAFpAegCIAGAAf4CAAHGAf8CAAHcAf8C
AAHuAf8CAAH4Af8CAAH7Af8CAAH5Af8CAAHvAf8CAAHUAf8CAAGcAf8CAAFaAf8DQAH9A14B3QMqAT8D
TgGVA3cB+AN/Af8DhQH/A4oB/wONAf8DjgH/A44B/wOOAf8DjQH/A4kB/wN3Af8DTQH/AyUB/wNaAfID
SgGLA04BlQFLAXwBSwH4AQAB5QEAAf8BAAHvAQAB/wEAAfgBAAH/AQAB/QEAAf8BAAH/AQAB/wEAAf8B
AAH/AQAB/wEAAf8BAAH+AQAB/wEAAfYBAAH/AQAB1QEAAf8BAAGLAQAB/wEAAUEBAAH/A1oB8gNKAYsD
TgGVAUsCfAH4AQAC5QH/AQAC7wH/AQAC+AH/AQAC/QH/AQAD/wEAA/8BAAP/AQAC/gH/AQAC9gH/AQAC
1QH/AQACiwH/AQACQQH/A1oB8gNKAYsDTgGVAksBfAH4AgAB5QH/AgAB7wH/AgAB+AH/AgAB/QH/AgAC
/wIAAv8CAAL/AgAB/gH/AgAB9gH/AgAB1QH/AgABiwH/AgABQQH/A1oB8gNKAYsDXwHTA34B/AOTAf8D
jgH/A40B/wOOAf8DjgH/A44B/wOOAf8DjgH/A40B/wOFAf8DZwH/AzQB/wNBAfkDWgHEAVsBXwFbAdMB
KwGbASsB/AEOAfsBDgH/AQMB/QEDAf8BAAH+AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8B
AAH/AQAB/wEAAf8BAAH9AQAB/wEAAe8BAAH/AQABuQEAAf8BAAFdAQAB/wNBAfkDWgHEAVsCXwHTASsC
mwH8AQ4C+wH/AQMC/QH/AQAC/gH/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAL9Af8BAALvAf8BAAK5Af8B
AAJdAf8DQQH5A1oBxAJbAV8B0wIrAZsB/AIOAfsB/wIDAf0B/wIAAf4B/wIAAv8CAAL/AgAC/wIAAv8C
AAL/AgAB/QH/AgAB7wH/AgABuQH/AgABXQH/A0EB+QNaAcQDbgH1A4AB/gOfAf8DkwH/A48B/wOOAf8D
jgH/A44B/wOOAf8DjgH/A44B/wOLAf8DdwH/A0gB/wNAAf0DYgHhAVoBbgFaAfUBRAG/AUQB/gEnAf8B
JwH/AQsB/wELAf8BAQH/AQEB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8B
AAH/AQAB/wEAAfkBAAH/AQAB1gEAAf8BAAGBAQAB/wNAAf0DYgHhAVoCbgH1AUQCvwH+AScD/wELA/8B
AQP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAP/AQAC+QH/AQAC1gH/AQACgQH/A0AB/QNiAeECWgFuAfUC
RAG/Af4CJwL/AgsC/wIBAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAH5Af8CAAHWAf8CAAGBAf8D
QAH9A2IB4QNjAfYDgAH+A6sB/wOZAf8DkAH/A44B/wOOAf8DjgH/A44B/wOOAf8DjgH/A40B/wN/Af8D
VQH/A0AB/QNeAeIBSAFyAUgB9gFnAb8BZwH+AUIB/wFCAf8BGQH/ARkB/wEEAf8BBAH/AQAB/wEAAf8B
AAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/QEAAf8BAAHkAQAB/wEAAZgB
AAH/A0AB/QNeAeIBSAJyAfYBZwK/Af4BQgP/ARkD/wEEA/8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAA/8B
AAL9Af8BAALkAf8BAAKYAf8DQAH9A14B4gJIAXIB9gJnAb8B/gJCAv8CGQL/AgQC/wIAAv8CAAL/AgAC
/wIAAv8CAAL/AgAC/wIAAf0B/wIAAeQB/wIAAZgB/wNAAf0DXgHiA2EB1gN+AfwDuAH/A6MB/wOTAf8D
jgH/A44B/wOOAf8DjgH/A44B/wOOAf8DjQH/A4IB/wNcAf8DTQH6A1oBxwFcAWEBXAHWAWQBoQFkAfwB
XwH/AV8B/wEvAf8BLwH/AQwB/wEMAf8BAQH/AQEB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8B
AAH/AQAB/wEAAf8BAAH+AQAB/wEAAeoBAAH/AQABpQEAAf8BNAFNATQB+gNaAccBXAJhAdYBZAKhAfwB
XwP/AS8D/wEMA/8BAQP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAL+Af8BAALqAf8BAAKlAf8BNAJNAfoD
WgHHAlwBYQHWAmQBoQH8Al8C/wIvAv8CDAL/AgEC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAB/gH/AgAB
6gH/AgABpQH/AjQBTQH6A1oBxwNQAZoDgAH5A8UB/wOyAf8DnAH/A5EB/wOOAf8DjgH/A44B/wOOAf8D
jwH/A44B/wODAf8DYAH/A1oB8gNMAZADUAGaAWoBiQFqAfkBfAH/AXwB/wFRAf8BUQH/AR8B/wEfAf8B
BwH/AQcB/wEBAf8BAQH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQIB/wECAf8BAgH+AQIB/wEAAesB
AAH/AQABrQEAAf8BWgFrAVoB8gNMAZADUAGaAWoCiQH5AXwD/wFRA/8BHwP/AQcD/wEBA/8BAAP/AQAD
/wEAA/8BAgP/AQIC/gH/AQAC6wH/AQACrQH/AVoCawHyA0wBkANQAZoCagGJAfkCfAL/AlEC/wIfAv8C
BwL/AgEC/wIAAv8CAAL/AgAC/wICAv8CAgH+Af8CAAHrAf8CAAGtAf8CWgFrAfIDTAGQAy8BSQNsAesD
kAH+A8YB/wOuAf8DnAH/A5MB/wOQAf8DjwH/A5AB/wOTAf8DkwH/A4UB/wNGAf0DYAHgAy0BRQMvAUkD
bAHrAYABvwGAAf4BfwH/AX8B/wFJAf8BSQH/AR8B/wEfAf8BDAH/AQwB/wEFAf8BBQH/AQMB/wEDAf8B
BQH/AQUB/wEKAf8BCgH/AQoB/gEKAf8BAQHtAQEB/wFAAbYBQAH9AWABZgFgAeADLQFFAy8BSQNsAesB
gAK/Af4BfwP/AUkD/wEfA/8BDAP/AQUD/wEDA/8BBQP/AQoD/wEKAv4B/wEBAu0B/wFAArYB/QFgAmYB
4AMtAUUDLwFJA2wB6wKAAb8B/gJ/Av8CSQL/Ah8C/wIMAv8CBQL/AgMC/wIFAv8CCgL/AgoB/gH/AgEB
7QH/AkABtgH9AmABZgHgAy0BRQMDAQQDVgGuA24B9QPZAf8DywH/A7cB/wOnAf8DnQH/A5oB/wOcAf8D
nwH/A5sB/wOJAf8DaAHwA1IBowMDAQQDAwEEA1YBrgNuAfUBqAH/AagB/wGJAf8BiQH/AVwB/wFcAf8B
NwH/ATcB/wEiAf8BIgH/ARsB/wEbAf8BHwH/AR8B/wEmAf8BJgH/AR0B/wEdAf8BBQHzAQUB/wFeAWgB
XgHwA1IBowMDAQQDAwEEA1YBrgNuAfUBqAP/AYkD/wFcA/8BNwP/ASID/wEbA/8BHwP/ASYD/wEdA/8B
BQLzAf8BXgJoAfADUgGjAwMBBAMDAQQDVgGuA24B9QKoAv8CiQL/AlwC/wI3Av8CIgL/AhsC/wIfAv8C
JgL/Ah0C/wIFAfMB/wJeAWgB8ANSAaMDAwEEBAADHAEnA10BxwNtAfYDnwH+A9cB/wPMAf8DwgH/A7sB
/wO3Af8DsQH/A4AB/gNoAfQDWQG8AxsBJggAAxwBJwNdAccBYwFyAWMB9gGAAb8BgAH+AaUB/wGlAf8B
iwH/AYsB/wF0Af8BdAH/AWYB/wFmAf8BXAH/AVwB/wFOAf8BTgH/AVABvwFQAf4BUwFrAVMB9AFXAVkB
VwG8AxsBJggAAxwBJwNdAccBYwJyAfYBgAK/Af4BpQP/AYsD/wF0A/8BZgP/AVwD/wFOA/8BUAK/Af4B
UwJrAfQBVwJZAbwDGwEmCAADHAEnA10BxwJjAXIB9gKAAb8B/gKlAv8CiwL/AnQC/wJmAv8CXAL/Ak4C
/wJQAb8B/gJTAWsB9AJXAVkBvAMbASYMAAMhATADWQG2A2IB7gN9AfoDvgH9A9QB/wPMAf8DvgH9A3kB
+QNsAesDVQGsAx8BLBAAAyEBMANZAbYDYgHuAX0BigF9AfoBrgG+Aa4B/QGfAf8BnwH/AYwB/wGMAf8B
VgG+AVYB/QFoAYkBaAH5AWEBbAFhAesDVQGsAx8BLBAAAyEBMANZAbYDYgHuAX0CigH6Aa4CvgH9AZ8D
/wGMA/8BVgK+Af0BaAKJAfkBYQJsAesDVQGsAx8BLBAAAyEBMANZAbYDYgHuAn0BigH6Aq4BvgH9Ap8C
/wKMAv8CVgG+Af0CaAGJAfkCYQFsAesDVQGsAx8BLBQAAwYBBwM2AVgDVQGsA2YB5QOIAfwDiwH7A2UB
4gNTAacDMwFRAwYBBxgAAwYBBwM2AVgDVQGsA2YB5QF+AaEBfgH8AV8BlgFfAfsDZQHiA1MBpwMzAVED
BgEHGAADBgEHAzYBWANVAawDZgHlAX4CoQH8AV8ClgH7A2UB4gNTAacDMwFRAwYBBxgAAwYBBwM2AVgD
VQGsA2YB5QJ+AaEB/AJfAZYB+wNlAeIDUwGnAzMBUQMGAQcMAAFCAU0BPgcAAT4DAAEoAwABQAMAASAD
AAEBAQABAQYAAQEWAAP/gQAB4AEHAeABBwHgAQcB4AEHAcABAwHAAQMBwAEDAcABAwGAAQEBgAEBAYAB
AQGAAQFQAAGAAQEBgAEBAYABAQGAAQEBwAEDAcABAwHAAQMBwAEDAeABBwHgAQcB4AEHAeABBws=
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAshMAAAJNU0Z0AUkBTAIBAQQB
AAEYAQEBGAEBARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASD/
AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AC4AAwYBBwM0AVQDUQGiA14B0gNaAekDYAHoA10B
0QNQAZ8DMQFNAwUBBhgAAwYBBwM0AVQDUQGiA14B0gNaAekDYAHoA10B0QNQAZ8DMQFNAwUBBhgAAwYB
BwM0AVQDUQGiA14B0gNaAekDYAHoA10B0QNQAZ8DMQFNAwUBBhgAAwYBBwM0AVQDUQGiA14B0gNaAekD
YAHoA10B0QNQAZ8DMQFNAwUBBhQAAyABLQNUAasDWwHkA1oB9QMkAfsDRwH+A0cB/gMkAfsDUwH0A2IB
4QNRAaEDHgEqEAADIAEtA1QBqwNbAeQDWgH1ASEBXgEhAfsBIwFjASMB/gEjAWMBIwH+ASEBXgEhAfsD
UwH0A2IB4QNRAaEDHgEqEAADIAEtA1QBqwNbAeQDWgH1ASECXgH7ASMCYwH+ASMCYwH+ASECXgH7A1MB
9ANiAeEDUQGhAx4BKhAAAyABLQNUAasDWwHkA1oB9QIhAV4B+wIjAWMB/gIjAWMB/gIhAV4B+wNTAfQD
YgHhA1EBoQMeASoMAAMbASUDWAG9A1oB8gNLAf4DMAH/AzkB/wM8Af8DNgH/AyoB/wMkAf8DQAH9A14B
8ANWAbIDGgEjCAADGwElA1gBvQNaAfIBIwFrASMB/gEAAVcBAAH/AQABZwEAAf8BAAFsAQAB/wEAAWEB
AAH/AQABTAEAAf8BAAFAAQAB/wNAAf0DXgHwA1YBsgEZARoBGQEjCAADGwElA1gBvQNaAfIBIwJrAf4B
AAJXAf8BAAJnAf8BAAJsAf8BAAJhAf8BAAJMAf8BAAJAAf8DQAH9A14B8ANWAbIBGQIaASMIAAMbASUD
WAG9A1oB8gIjAWsB/gIAAVcB/wIAAWcB/wIAAWwB/wIAAWEB/wIAAUwB/wIAAUAB/wNAAf0DXgHwA1YB
sgIZARoBIwQAAwMBBANSAaUDYAHzA0kB/wNVAf8DZQH/A3EB/wN1Af8DcQH/A2QB/wNMAf8DMQH/A0cB
/gNiAe4DUAGaAwMBBAMDAQQBUgFTAVIBpQFgAW8BYAHzAQABggEAAf8BAAGZAQAB/wEAAbYBAAH/AQAB
zAEAAf8BAAHTAQAB/wEAAcsBAAH/AQABswEAAf8BAAGIAQAB/wEAAVcBAAH/ASMBYwEjAf4DYgHuA1AB
mgMDAQQDAwEEAVICUwGlAWACbwHzAQACggH/AQACmQH/AQACtgH/AQACzAH/AQAC0wH/AQACywH/AQAC
swH/AQACiAH/AQACVwH/ASMCYwH+A2IB7gNQAZoDAwEEAwMBBAJSAVMBpQJgAW8B8wIAAYIB/wIAAZkB
/wIAAbYB/wIAAcwB/wIAAdMB/wIAAcsB/wIAAbMB/wIAAYgB/wIAAVcB/wIjAWMB/gNiAe4DUAGaAwMB
BAMtAUQDYAHoA4AB/gNuAf8DewH/A4UB/wOKAf8DjAH/A4oB/wOFAf8DdgH/A1cB/wMyAf8DQAH9A14B
3QMqAT8DLQFEAWABaQFgAegBIwGAASMB/gEAAcYBAAH/AQAB3AEAAf8BAAHuAQAB/wEAAfgBAAH/AQAB
+wEAAf8BAAH5AQAB/wEAAe8BAAH/AQAB1AEAAf8BAAGcAQAB/wEAAVoBAAH/A0AB/QNeAd0DKgE/Ay0B
RAFgAmkB6AEjAoAB/gEAAsYB/wEAAtwB/wEAAu4B/wEAAvgB/wEAAvsB/wEAAvkB/wEAAu8B/wEAAtQB
/wEAApwB/wEAAloB/wNAAf0DXgHdAyoBPwMtAUQCYAFpAegCIwGAAf4CAAHGAf8CAAHcAf8CAAHuAf8C
AAH4Af8CAAH7Af8CAAH5Af8CAAHvAf8CAAHUAf8CAAGcAf8CAAFaAf8DQAH9A14B3QMqAT8DTgGVA3cB
+AN/Af8DhQH/A4oB/wONAf8DjgH/A44B/wOOAf8DjQH/A4kB/wN3Af8DTQH/AyUB/wNaAfIDSgGLA04B
lQFRAXwBUQH4AQAB5QEAAf8BAAHvAQAB/wEAAfgBAAH/AQAB/QEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB
/wEAAf8BAAH+AQAB/wEAAfYBAAH/AQAB1QEAAf8BAAGLAQAB/wEAAUEBAAH/A1oB8gNKAYsDTgGVAVEC
fAH4AQAC5QH/AQAC7wH/AQAC+AH/AQAC/QH/AQAD/wEAA/8BAAP/AQAC/gH/AQAC9gH/AQAC1QH/AQAC
iwH/AQACQQH/A1oB8gNKAYsDTgGVAlEBfAH4AgAB5QH/AgAB7wH/AgAB+AH/AgAB/QH/AgAC/wIAAv8C
AAL/AgAB/gH/AgAB9gH/AgAB1QH/AgABiwH/AgABQQH/A1oB8gNKAYsDXwHTA34B/AOTAf8DjgH/A40B
/wOOAf8DjgH/A44B/wOOAf8DjgH/A40B/wOFAf8DZwH/AzQB/wNBAfkDWgHEAVsBXwFbAdMBKwGSASsB
/AEOAfsBDgH/AQMB/QEDAf8BAAH+AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB
/wEAAf8BAAH9AQAB/wEAAe8BAAH/AQABuQEAAf8BAAFdAQAB/wNBAfkDWgHEAVsCXwHTASsCkgH8AQ4C
+wH/AQMC/QH/AQAC/gH/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAL9Af8BAALvAf8BAAK5Af8BAAJdAf8D
QQH5A1oBxAJbAV8B0wIrAZIB/AIOAfsB/wIDAf0B/wIAAf4B/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAB
/QH/AgAB7wH/AgABuQH/AgABXQH/A0EB+QNaAcQDbgH1A4AB/gOfAf8DkwH/A48B/wOOAf8DjgH/A44B
/wOOAf8DjgH/A44B/wOLAf8DdwH/A0gB/wNAAf0DYgHhAVoBbgFaAfUBRwG5AUcB/gEnAf8BJwH/AQsB
/wELAf8BAQH/AQEB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB
/wEAAfkBAAH/AQAB1gEAAf8BAAGBAQAB/wNAAf0DYgHhAVoCbgH1AUcCuQH+AScD/wELA/8BAQP/AQAD
/wEAA/8BAAP/AQAD/wEAA/8BAAP/AQAC+QH/AQAC1gH/AQACgQH/A0AB/QNiAeECWgFuAfUCRwG5Af4C
JwL/AgsC/wIBAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAH5Af8CAAHWAf8CAAGBAf8DQAH9A2IB
4QNjAfYDgAH+A6sB/wOZAf8DkAH/A44B/wOOAf8DjgH/A44B/wOOAf8DjgH/A40B/wN/Af8DVQH/A0AB
/QNeAeIBSAFtAUgB9gFqAbkBagH+AUIB/wFCAf8BGQH/ARkB/wEEAf8BBAH/AQAB/wEAAf8BAAH/AQAB
/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/QEAAf8BAAHkAQAB/wEAAZgBAAH/A0AB
/QNeAeIBSAJtAfYBagK5Af4BQgP/ARkD/wEEA/8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAL9Af8B
AALkAf8BAAKYAf8DQAH9A14B4gJIAW0B9gJqAbkB/gJCAv8CGQL/AgQC/wIAAv8CAAL/AgAC/wIAAv8C
AAL/AgAC/wIAAf0B/wIAAeQB/wIAAZgB/wNAAf0DXgHiA2EB1gN+AfwDuAH/A6MB/wOTAf8DjgH/A44B
/wOOAf8DjgH/A44B/wOOAf8DjQH/A4IB/wNcAf8DTQH6A1oBxwFcAWEBXAHWAWQBmAFkAfwBXwH/AV8B
/wEvAf8BLwH/AQwB/wEMAf8BAQH/AQEB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB
/wEAAf8BAAH+AQAB/wEAAeoBAAH/AQABpQEAAf8BOgFNAToB+gNaAccBXAJhAdYBZAKYAfwBXwP/AS8D
/wEMA/8BAQP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAL+Af8BAALqAf8BAAKlAf8BOgJNAfoDWgHHAlwB
YQHWAmQBmAH8Al8C/wIvAv8CDAL/AgEC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAB/gH/AgAB6gH/AgAB
pQH/AjoBTQH6A1oBxwNQAZoDewH5A8UB/wOyAf8DnAH/A5EB/wOOAf8DjgH/A44B/wOOAf8DjwH/A44B
/wODAf8DYAH/A1oB8gNMAZADUAGaAWoBhgFqAfkBfAH/AXwB/wFRAf8BUQH/AR8B/wEfAf8BBwH/AQcB
/wEBAf8BAQH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQIB/wECAf8BAgH+AQIB/wEAAesBAAH/AQAB
rQEAAf8BWgFrAVoB8gNMAZADUAGaAWoChgH5AXwD/wFRA/8BHwP/AQcD/wEBA/8BAAP/AQAD/wEAA/8B
AgP/AQIC/gH/AQAC6wH/AQACrQH/AVoCawHyA0wBkANQAZoCagGGAfkCfAL/AlEC/wIfAv8CBwL/AgEC
/wIAAv8CAAL/AgAC/wICAv8CAgH+Af8CAAHrAf8CAAGtAf8CWgFrAfIDTAGQAy8BSQNsAesDigH+A8YB
/wOuAf8DnAH/A5MB/wOQAf8DjwH/A5AB/wOTAf8DkwH/A4UB/wNDAf0DYAHgAy0BRQMvAUkDbAHrAYAB
uQGAAf4BfwH/AX8B/wFJAf8BSQH/AR8B/wEfAf8BDAH/AQwB/wEFAf8BBQH/AQMB/wEDAf8BBQH/AQUB
/wEKAf8BCgH/AQoB/gEKAf8BAQHtAQEB/wFAAbYBQAH9AWABZgFgAeADLQFFAy8BSQNsAesBgAK5Af4B
fwP/AUkD/wEfA/8BDAP/AQUD/wEDA/8BBQP/AQoD/wEKAv4B/wEBAu0B/wFAArYB/QFgAmYB4AMtAUUD
LwFJA2wB6wKAAbkB/gJ/Av8CSQL/Ah8C/wIMAv8CBQL/AgMC/wIFAv8CCgL/AgoB/gH/AgEB7QH/AkAB
tgH9AmABZgHgAy0BRQMDAQQDVgGuA24B9QPZAf8DywH/A7cB/wOnAf8DnQH/A5oB/wOcAf8DnwH/A5sB
/wOJAf8DaAHwA1IBowMDAQQDAwEEA1YBrgNuAfUBqAH/AagB/wGJAf8BiQH/AVwB/wFcAf8BNwH/ATcB
/wEiAf8BIgH/ARsB/wEbAf8BHwH/AR8B/wEmAf8BJgH/AR0B/wEdAf8BBQHzAQUB/wFeAWgBXgHwA1IB
owMDAQQDAwEEA1YBrgNuAfUBqAP/AYkD/wFcA/8BNwP/ASID/wEbA/8BHwP/ASYD/wEdA/8BBQLzAf8B
XgJoAfADUgGjAwMBBAMDAQQDVgGuA24B9QKoAv8CiQL/AlwC/wI3Av8CIgL/AhsC/wIfAv8CJgL/Ah0C
/wIFAfMB/wJeAWgB8ANSAaMDAwEEBAADHAEnA10BxwNnAfYDmQH+A9cB/wPMAf8DwgH/A7sB/wO3Af8D
sQH/A4AB/gNoAfQDWQG8AxsBJggAAxwBJwNdAccBYwFtAWMB9gGAAbkBgAH+AaUB/wGlAf8BiwH/AYsB
/wF0Af8BdAH/AWYB/wFmAf8BXAH/AVwB/wFOAf8BTgH/AVMBuQFTAf4BUwFoAVMB9AFXAVkBVwG8AxsB
JggAAxwBJwNdAccBYwJtAfYBgAK5Af4BpQP/AYsD/wF0A/8BZgP/AVwD/wFOA/8BUwK5Af4BUwJoAfQB
VwJZAbwDGwEmCAADHAEnA10BxwJjAW0B9gKAAbkB/gKlAv8CiwL/AnQC/wJmAv8CXAL/Ak4C/wJTAbkB
/gJTAWgB9AJXAVkBvAMbASYMAAMhATADWQG2A2IB7gN9AfoDvgH9A9QB/wPMAf8DvgH9A3MB+QNsAesD
VQGsAx8BLBAAAyEBMANZAbYDYgHuAX0BgQF9AfoBrgG+Aa4B/QGfAf8BnwH/AYwB/wGMAf8BUwG+AVMB
/QFoAYYBaAH5AWEBbAFhAesDVQGsAx8BLBAAAyEBMANZAbYDYgHuAX0CgQH6Aa4CvgH9AZ8D/wGMA/8B
UwK+Af0BaAKGAfkBYQJsAesDVQGsAx8BLBAAAyEBMANZAbYDYgHuAn0BgQH6Aq4BvgH9Ap8C/wKMAv8C
UwG+Af0CaAGGAfkCYQFsAesDVQGsAx8BLBQAAwYBBwM2AVgDVQGsA2YB5QN/AfwDiAH7A2UB4gNTAacD
MwFRAwYBBxgAAwYBBwM2AVgDVQGsA2YB5QF+AZgBfgH8AV8BkwFfAfsDZQHiA1MBpwMzAVEDBgEHGAAD
BgEHAzYBWANVAawDZgHlAX4CmAH8AV8CkwH7A2UB4gNTAacDMwFRAwYBBxgAAwYBBwM2AVgDVQGsA2YB
5QJ+AZgB/AJfAZMB+wNlAeIDUwGnAzMBUQMGAQcMAAFCAU0BPgcAAT4DAAEoAwABQAMAASADAAEBAQAB
AQYAAQEWAAP/gQAB4AEHAeABBwHgAQcB4AEHAcABAwHAAQMBwAEDAcABAwGAAQEBgAEBAYABAQGAAQFQ
AAGAAQEBgAEBAYABAQGAAQEBwAEDAcABAwHAAQMBwAEDAeABBwHgAQcB4AEHAeABBws=
</value>
</data>
<metadata name="ilGameIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
@ -218,169 +218,168 @@
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAziUAAAJNU0Z0AUkBTAIBAQMB
AAFwAQABcAEAASABAAEgAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABgAMAASADAAEBAQABIAYAAUB6
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAlCUAAAJNU0Z0AUkBTAIBAQMB
AAGIAQABiAEAASABAAEgAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABgAMAASADAAEBAQABIAYAAUB6
AANcAecBCAEKAQAB/wMqAUAMAAMqAUADNgFXAz8BbAM/AWwDPwFsAz8BbAM/AWwDPwFsAz8BbAM/AWwD
PwFsAz8BbAM/AWwDPwFsAz8BbAM/AWwDPwFsAz8BbAI7AToBYgMzAVEDGAEhVAADUwGiA1sBwCAAA1QB
pgNZAbzwAAMhATADRgGAFAABFQEfAQQB/wENARUBAAH/AQgBCgEAAf8BCAEKAQAB/wwAA0QBegNTAacC
YQFdAc8CYQFdAc8CYQFdAc8CYQFdAc8CYQFdAc8CYQFdAc8CYQFdAc8CYQFdAc8CYQFdAc8CYQFdAc8C
YQFdAc8CYQFdAc8CYQFdAc8CYQFdAc8CYQFdAc8CYAFdAc4DWQG7AlABTwGbAyoBQFQAA18B0ANmAe4g
YQFdAc8CYQFdAc8CYQFdAc8CYQFdAc8CYQFdAc8CYAFdAc4DWQG7AlABTwGbAyoBQFQAA18B0ANjAe4g
AANhAdQDYwHp5AADWgG/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoB
AAH/AQgBCgEAAf8DWgG/A1oBvwFDAXQBBwH/AUcBdwEMAf8BJQFHAQAB/wEOARkBAAH/DAACSwFKAYoC
WgFYAb0BbwFnAVYB6gFvAWcBVgHqAW8BZwFWAeoBbwFnAVYB6gFvAWcBVgHqAW8BZwFWAeoBbwFnAVYB
6gFvAWcBVgHqAW8BZwFWAeoBbwFnAVYB6gFvAWcBVgHqAW8BZwFWAeoBbwFnAVYB6gFvAWcBVgHqAW8B
ZwFWAeoBbQFjAVkB6QJfAVsB0wNVAa8DLgFIVAADXwHQA2YB7iAAA2EB1ANjAengAAEIAQoBAAH/ARAB
WgFYAb0BaAFnAVwB6gFoAWcBXAHqAWgBZwFcAeoBaAFnAVwB6gFoAWcBXAHqAWgBZwFcAeoBaAFnAVwB
6gFoAWcBXAHqAWgBZwFcAeoBaAFnAVwB6gFoAWcBXAHqAWgBZwFcAeoBaAFnAVwB6gFoAWcBXAHqAWgB
ZwFcAeoBagFjAVoB6QJfAVsB0wNVAa8DLgFIVAADXwHQA2MB7iAAA2EB1ANjAengAAEIAQoBAAH/ARAB
HgEAAf8BIQFBAQAB/wEnAUsBAAH/ASYBSgEAAf8BIQFBAQAB/wEQAR4BAAH/AQgBCgEAAf8BCAEKAQAB
/wEIAQoBAAH/ASkBTgEAAf8BWgGWARAB/wFaAZwBEAH/AXMBtgEmAf8BGAEuAQAB/wwAA0kBhgJaAVgB
twFnAWUBXQHjAWcBZQFdAeMBZwFlAV0B4wFnAWUBXQHjAWwBagFcAeYBdwFqAVYB7QGPAWgBQwH0AcgB
dwEcAfwB/wF4AQAC/wF4AQAB/wGTAW4BQAH1AWwBagFcAeYBZwFlAV0B4wFnAWUBXQHjAWcBZQFdAeMB
ZwFlAV4B4gJeAVsBzQJVAVMBqgIuAS0BRlQAA18B0ANmAe4gAANhAdQDYwHp3AABCAEKAQAB/wE9AXEB
AgH/AUwBhgEHAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AUwBfwEPAf8B
OwFnAQgB/wEhATQBCAH/AVMBjgELAf8BWgGcARAB/wFyAbMBJwH/AVMBgQEbAf8QAAMrAUEDNgFZAkAB
PwFuAkABPwFuAkABPwFuAkABPwFuA0QBewJRAVABnwJdAVsBxQF5AWQBVQHuAf8BeAEAAv8BeAEAAf8C
XwFdAckDRQF8AkABPwFuAkABPwFuAkABPwFuAz8BbQM7AWMDMwFSAxkBIlQAA18B0ANmAe4gAANhAdQD
YwHp2AABFQEpAQAB/wFKAYQBBAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB
/wFSAYwBEAH/AVIBjAEQAf8BUgGMARAB/wFaAZQBEAH/AVYBkAEMAf8BWgGaARAB/wFaAZwBEAH/AXIB
qQEwAf8BCAEKAQAB/wEIAQoBAAH/DAADDAEQAxEBFgMVARwDFQEcAxUBHAMVARwDIQEwAj4BPQFpAlMB
UgGlAW0BZgFfAeUB/wF4AQAC/wF4AQAB/wJVAVMBqgMiATEDFQEcAxUBHAMVARwDFAEbAxMBGQMQARUD
BwEJVAADXwHQA2YB7iAAA2EB1ANjAenUAAEWAScBAgH/AUkBgAEHAf8BUgGMAQgB/wFSAYwBCAH/AVIB
jAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAELAf8BUgGMARAB/wFSAYwBEAH/AVgBkgEQAf8BWgGUARAB
/wFaAZsBEAH/AVoBnAEQAf8BXAGeARIB/wE7AW0BAwH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/CAAD
BQQGBAgBCgMIAQoDCAEKAwgBCgMXAR8COQE4AV0DUQGeAWcBZQFdAeMB/wF4AQAC/wF4AQAB/wNSAaMD
GAEhAwgBCgMIAQoDCAEKAwgBCgMHAQkDBgEHAwIBA1QAA18B0ANmAe4gAANhAdQDYwHp0AADXQHfAUcB
gAEDAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMARAB
/wFSAYwBEAH/AVIBjAEQAf8BWgGUARAB/wFaAZQBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoB
nAEQAf8BWgGYARAB/wEWASoBAAH/AQgBCgEAAf8BCAEKAQAB/xwAAxIBFwM1AVYDUAGaAWcBYgFgAeEB
/wF4AQAC/wF4AQAB/wJRAVABnwMSARhwAANfAdADZgHuIAADYQHUA2MB6dAAASwBUAEAAf8BSgGMAQAB
/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQ4B/wFVAZIBEAH/AVoB
nAEQAf8BWgGcARAB/wFaAZQBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB
/wFaAZQBGAH/AVgBkgEWAf8BEAEeAQAB/wEIAQoBAAH/HAADEgEXAzUBVgNQAZoBZwFiAWAB4QH/AXgB
AAL/AXgBAAH/AlEBUAGfAxIBGHAAA18B0ANmAe4gAANhAdQDYwHp1AADSwGPATMBXgEAAf8BUgGMAQgB
/wFSAYwBCAH/AVIBjAEIAf8BUgGMARAB/wF/AcABMwH/AV8BngEXAf8BIAE/AQAB/wEIAQoBAAH/AVIB
jAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZUBFwH/AVoBlAEYAf8BWgGUARgB
/wFaAZQBGAH/AQgBCgEAAf8BCAEKAQAB/xgAAxIBFwM1AVYDUAGaAWcBYgFgAeEB/wF4AQAC/wF4AQAB
/wJRAVABnwMSARgUAAQBAwMBBAMGBAcBCQMHAQkDBAEFBAIEARQAAxEBFgMhAS8DIQEvAyEBLwMhAS8D
IQEvAyEBLwMhAS8DIQEvAyEBLwNhAdkDcAHxAyEBLwMhAS8DIQEvAyEBLwMhAS8DIQEvAyEBLwMhAS8D
YgHcA2oB7QMhAS8DIQEvAyEBLwMhAS8DIQEvAyEBLwMhAS8DIQEvAyEBLwMNARG4AAFCAXsBAAH/AVIB
jAEIAf8BewHGASkB/wMzAVAEAAMMARABOQFrAQAB/wFaAZwBEAH/AVoBnAEQAf8BXQGXARMB/wFWAZQB
DAH/AVoBnAEQAf8BWgGUARgB/wFaAZQBGAH/AWMBnAEYAf8BYwGlARcB/wEpAVABAAH/AQgBCgEAAf8Y
AAMSARcDNQFWA1ABmgFnAWIBYAHhAf8BeAEAAv8BeAEAAf8CUQFQAZ8DEgEYFAAEAgMJAQwDDwEUAxMB
GgMSARgDCgENAwQBBQQBFAADaQHoA38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B
/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B
/wN/Af8DfwH/A38B/wN/Af8DfwH/A2EBz7wAAQgBCgEAAf8MAAETASMBAAH/AVoBlAEQAf8BWgGcARAB
/wGUAdYBSgH/AQ0BEQECAf8BMQFaAQAB/wFaAZQBEgH/AVoBlAEYAf8BWgGUARgB/wFjAZwBGAH/AWMB
pQEXAf8BawGlASEB/wEQAR4BAAH/GAADEgEXAzUBVgNQAZoBZwFiAWAB4QH/AXgBAAL/AXgBAAH/AlEB
UAGfAxIBGBQAAwUBBgMdASkDMAFKAjsBPAFlAjsBPAFkAygBPAIVARYBHQMGAQgUAAM8AWQDTAGPA0wB
jwNMAY8DTAGPA0wBjwNMAY8DTAGPA0wBjwNMAY8DZwHqA3wB+ANMAY8DTAGPA0wBjwNMAY8DTAGPA0wB
jwNMAY8DTAGPA2gB7ANuAfUDTAGPA0wBjwNMAY8DTAGPA0wBjwNMAY8DTAGPA0wBjwNMAY8DNQFWqAAD
XQHfAQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AzMBUAM6AWAB
SwGFAQcB/wFaAZQBEAH/AVoBnAEQAf8BOQFrAQAB/wMJAQwBEAEeAQAB/wFUAY4BEgH/AVoBlAEYAf8B
YwGcARgB/wFjAZwBGAH/AWMBpQEXAf8BcwG0ASkB/wEQAR4BAAH/GAADEgEXAzUBVgNQAZoBZwFiAWAB
4QH/AXgBAAL/AXgBAAH/AlEBUAGfAxIBGBQAAwkBDAMzAVACTAFNAZECXQFfAckCWwFdAcoDRAF6AykB
PQMMARA8AANfAdADZgHuIAADYQHUA2MB6cwAAQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8B
CAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/ATMBXwECAf8BWgGUARAB/wFaAZwB
EAH/Aa0B5wFjAf8BEAEeAQAB/wEIAQoBAAH/ARQBJgEAAf8BVAGOARIB/wFiAZsBGAH/AWMBnAEYAf8B
YwGlARcB/wFjAaUBFwH/AWMBnAEhAf8BGAEuAQAB/xgAAxIBFwM1AVYDUAGaAWcBYgFgAeEB/wF4AQAC
/wF4AQAB/wJRAVABnwMSARgUAAMJAQsDLgFHA0gBhAJZAVwBwwJcAV8BywNJAYUDLgFHAw8BEzwAA18B
0ANmAe4gAANhAdQDYwHpyAABCAEKAQAB/wErAVIBAAH/AUEBcgEFAf8BSgGEAQYB/wFKAYQBBgH/AUoB
hAEGAf8BQgFzAQYB/wEpAVABAAH/ARABHgEAAf8BHwE6AQAB/wFVAY8BCwH/AVoBlQEQAf8BWgGcARAB
/wHWAf8BjAH/ARABHgEAAf8BGAEuAQAB/wFCAXgBAwH/AVoBlAEYAf8BYgGbARgB/wFjAZwBGAH/AWMB
pQEXAf8BYwGlARcB/wFzAbQBKQH/ARABHgEAAf8YAAMSARcDNQFWA1ABmgFnAWIBYAHhAf8BeAEAAv8B
eAEAAf8CUQFQAZ8DEgEYFAADBgEIAyQBNAM8AWYDUwGnA1gBuAJHAUgBgwMxAU0DDwEUPAADXwHQA2YB
7iAAA2EB1ANjAenEAAEoAU0BAAH/AU4BiAEHAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB
/wFSAYwBCAH/AVIBjAEIAf8BUgGMARAB/wFSAYwBEAH/AVIBjAEQAf8BWgGUARAB/wFaAZwBEAH/AWMB
pQEXAf8BQgF7AQAB/wFKAYQBBgH/AVIBjAEIAf8BWgGYARQB/wFaAZQBGAH/AWMBnAEYAf8BYwGlARcB
/wFjAaUBFwH/AWMBpQEXAf8BlAHJAU0B/wQAAxABFQMaASQDIQEvAxEBFgQCBAEDEgEXAzUBVgNQAZoB
ZwFiAWAB4QH/AXgBAAL/AXgBAAH/AlEBUAGfAxIBGBQAAwMBBAMTARkDJQE2AjsBPAFkAkEBQgFyAzMB
UQMhAS8DCQEMPAADXwHQA2YB7iAAA2EB1ANjAenAAAEpAU4BAgH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB
CAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMARAB/wFSAYwBEAH/AVIBjAEQAf8B
WgGUARAB/wFaAZUBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGUARgB/wFaAZQB
GAH/AWMBnAEYAf8BYwGcARgB/wFjAaUBFwH/AWMBpQEXAf8BYwGlARcB/wFlAaABIQH/BAADHgErAjEB
MAFMAzsBYwMiATEDBwEJAwQBBQMSARgDNgFXA1ABmgFnAWIBYAHhAf8BeAEAAv8BeAEAAf8CUQFQAZ8D
EgEYHAADBwEJAxwBJwMjATICGQEaASMDDwEUAwQBBTwAA18B0ANmAe4gAANhAdQDYwHpvAADRgGAAU4B
iAEHAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB
/wFSAYwBEAH/AVIBjAEQAf8BUgGMARAB/wFaAZQBEAH/AVoBlwEQAf8BWgGcARAB/wFaAZwBEAH/AVoB
nAEQAf8BWgGcARAB/wFaAZQBGAH/AVoBlAEYAf8BYwGcARgB/wFjAaEBGAH/AWMBpQEXAf8BYwGlARcB
/wF4AboBLAH/AQgBCgEAAf8EAAMkATQDRQF8AloBWAG3A04BlAM/AW0DKAE7Ax8BLAM5AV4DUAGaAWcB
YgFgAeEB/wF4AQAC/wF4AQAB/wJRAVABnwMSARgcAAMSARcDPAFmA0oBiQNAAW8DLgFHAw4BEjwAA18B
0ANmAe4gAANhAdQDYwHpvAABNQFeAQcB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIB
jAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMARAB/wFSAYwBEAH/AVoBlAEQAf8BWgGUARAB
/wFaAZsBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBlgEWAf8BWgGUARgB/wFdAZcBGAH/AWMB
nAEYAf8BYwGlARcB/wFjAaUBFwH/AXABswEgAf8BKwFQAQQB/wgAAycBOgJTAVEBogHEAV8BIQH7AW4B
ZQFcAecCXAFaAcQCQwFCAXUDMQFNAkABPwFuAlEBUAGfAWcBZQFdAeMB/wF4AQAC/wF4AQAB/wJRAVAB
nwMSARgcAAMZASIDTgGVAlsBXgHNAlYBVwGyA0QBegMdASkDBgEIBAIEATAAA18B0ANmAe4gAANhAdQD
YwHpvAABSgGEAQYB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BZwGpARcB
/wFSAYwBCAH/AUoBhAEGAf8BSgGEAQYB/wFSAYwBEAH/AVoBlAEQAf8BWgGXARAB/wFaAZwBEAH/AVoB
nAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBlAEYAf8BWgGUARgB/wFfAZgBGAH/AWMBngEYAf8BYwGlARcB
/wFrAakBHQH/ASkBUAEAAf8MAAMiATEDTgGYAYwBbwFKAfMBfAFoAU8B8AFsAWoBXAHmAloBVwHCAlUB
UwGqA1MBpwJZAVcBvAF1AWwBWgHrAf8BeAEAAv8BeAEAAf8CUQFQAZ8DEgEYHAADFAEbAkMBRAF3AlYB
WQG2AlsBXgHNAlYBWAGzAz8BbAMmATgDDAEPAwIBAwgAAwIBAwMNAREDDQERAw0BEQMNAREDDQERAw0B
EQMNAREDDQERAw0BEQNfAdMDZwHvAw0BEQMNAREDDQERAw0BEQMNAREDDQERAw0BEQMNAREDYgHXA2cB
6gMNAREDDQERAw0BEQMNAREDDQERAw0BEQMNAREDDQERAw0BEQMEAQWUAAFKAYQBBgH/AVIBjAEIAf8B
UgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BaQGkAR4B/wEsAVABAwH/AQgBCgEAAf8BNwFhAQcB/wFSAYwB
DgH/AVIBjAEQAf8BfwHBATIB/wFbAV4BWwHTA1oBvwEvAVkBAAH/AUQBegEFAf8BUAGKAQgB/wFaAZwB
DgH/AVoBnAEQAf8BWgGcARAB/wFPAYYBEAH/AUQBdAEMAf8DWgG/EAACGgEZASMDRAF7Al0BWwHKAmMB
XwHaAW4BaQFZAegBewFnAVAB7wF1AWYBWgHsAmEBXAHWAWABXwFbAdgBjwFoAUMB9AH/AXgBAAL/AXgB
AAH/AlEBUAGfAxIBGBwAAw8BEwM0AVMDTQGSAl0BYQHPAl0BYQHUAlIBVAGoAkEBQgFyAyYBOAMUARsD
BgEIAwIBAwNaAcIDfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8D
twJlAWAB4wJlAWAB4wJlAWAB4wJlAWAB4wJqAWEB5gFxAWoBXAHtAYUBaAFKAfQBwgF3ASIB/AH/AXgB
AAL/AXgBAAH/AYcBbgFEAfUCagFhAeYCZQFgAeMCZQFgAeMCZQFgAeMCZQFeAeICXgFbAc0CVQFTAaoC
LgEtAUZUAANfAdADYwHuIAADYQHUA2MB6dwAAQgBCgEAAf8BPQFxAQIB/wFMAYYBBwH/AVIBjAEIAf8B
UgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMARAB/wFMAX8BDwH/ATsBZwEIAf8BIQE0AQgB/wFTAY4B
CwH/AVoBnAEQAf8BcgGzAScB/wFTAYEBGwH/EAADKwFBAzYBWQJAAT8BbgJAAT8BbgJAAT8BbgJAAT8B
bgNEAXsCUQFQAZ8CXQFbAcUBcQFiAVgB7gH/AXgBAAL/AXgBAAH/Al8BXQHJA0UBfAJAAT8BbgJAAT8B
bgJAAT8BbgM/AW0DOwFjAzMBUgMZASJUAANfAdADYwHuIAADYQHUA2MB6dgAARUBKQEAAf8BSgGEAQQB
/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMARAB/wFSAYwBEAH/AVIB
jAEQAf8BWgGUARAB/wFWAZABDAH/AVoBmgEQAf8BWgGcARAB/wFyAakBMAH/AQgBCgEAAf8BCAEKAQAB
/wwAAwwBEAMRARYDFQEcAxUBHAMVARwDFQEcAyEBMAI+AT0BaQJTAVIBpQFpAWYBXwHlAf8BeAEAAv8B
eAEAAf8CVQFTAaoDIgExAxUBHAMVARwDFQEcAxQBGwMTARkDEAEVAwcBCVQAA18B0ANjAe4gAANhAdQD
YwHp1AABFgEnAQIB/wFJAYABBwH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB
/wFSAYwBCwH/AVIBjAEQAf8BUgGMARAB/wFYAZIBEAH/AVoBlAEQAf8BWgGbARAB/wFaAZwBEAH/AVwB
ngESAf8BOwFtAQMB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wgAAwUEBgQIAQoDCAEKAwgBCgMIAQoD
FwEfAjkBOAFdA1EBngJlAWAB4wH/AXgBAAL/AXgBAAH/A1IBowMYASEDCAEKAwgBCgMIAQoDCAEKAwcB
CQMGAQcDAgEDVAADXwHQA2MB7iAAA2EB1ANjAenQAANdAd8BRwGAAQMB/wFSAYwBCAH/AVIBjAEIAf8B
UgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BUgGMARAB/wFaAZQB
EAH/AVoBlAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZgBEAH/ARYBKgEAAf8B
CAEKAQAB/wEIAQoBAAH/HAADEgEXAzUBVgNQAZoBZAJiAeEB/wF4AQAC/wF4AQAB/wJRAVABnwMSARhw
AANfAdADYwHuIAADYQHUA2MB6dAAASwBUAEAAf8BSgGMAQAB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB
/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQ4B/wFVAZIBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZQBEAH/AVoB
nAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZQBGAH/AVgBkgEWAf8BEAEeAQAB
/wEIAQoBAAH/HAADEgEXAzUBVgNQAZoBZAJiAeEB/wF4AQAC/wF4AQAB/wJRAVABnwMSARhwAANfAdAD
YwHuIAADYQHUA2MB6dQAA0sBjwEzAV4BAAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8B
fwHAATMB/wFfAZ4BFwH/ASABPwEAAf8BCAEKAQAB/wFSAYwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwB
EAH/AVoBnAEQAf8BWgGVARcB/wFaAZQBGAH/AVoBlAEYAf8BWgGUARgB/wEIAQoBAAH/AQgBCgEAAf8Y
AAMSARcDNQFWA1ABmgFkAmIB4QH/AXgBAAL/AXgBAAH/AlEBUAGfAxIBGBQABAEDAwEEAwYEBwEJAwcB
CQMEAQUEAgQBFAADEQEWAyEBLwMhAS8DIQEvAyEBLwMhAS8DIQEvAyEBLwMhAS8DIQEvA2EB2QNwAfED
IQEvAyEBLwMhAS8DIQEvAyEBLwMhAS8DIQEvAyEBLwNiAdwDagHtAyEBLwMhAS8DIQEvAyEBLwMhAS8D
IQEvAyEBLwMhAS8DIQEvAw0BEbgAAUIBewEAAf8BUgGMAQgB/wF7AcYBKQH/AzMBUAQAAwwBEAE5AWsB
AAH/AVoBnAEQAf8BWgGcARAB/wFdAZcBEwH/AVYBlAEMAf8BWgGcARAB/wFaAZQBGAH/AVoBlAEYAf8B
YwGcARgB/wFjAaUBFwH/ASkBUAEAAf8BCAEKAQAB/xgAAxIBFwM1AVYDUAGaAWQCYgHhAf8BeAEAAv8B
eAEAAf8CUQFQAZ8DEgEYFAAEAgMJAQwDDwEUAxMBGgMSARgDCgENAwQBBQQBFAADaQHoA38B/wN/Af8D
fwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8D
fwH/A38B/wN/Af8DYgHclAABSgGMAQAB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AWcB
nQEnAf8BCAEKAQAB/wEKAQ8BAAH/AUIBdwEDAf8BUgGMARAB/wFaAZwBEAH/ASUBQQEFAf8EAAM6AWAB
CAEKAQAB/wEIAQoBAAH/BAADRgGAA0YBgANGAYAcAAMKAQ0DIgExAzQBVANEAXgCUQFQAZ8CYQFdAc8B
dwFqAVYB7QF1AWYBWgHsAXwBaAFPAfABxAFfASEB+wH/AXgBAAL/AXgBAAH/AlEBUAGfAxIBGBwAAwYB
CAMYASEDMQFNAkwBTQGRAlgBWgG9Al0BYQHRAlkBXAHDAlEBUwGiAz0BZwIZARoBIwMMAQ8DQAFvA1UB
rQNVAa0DVQGtA1UBrQNVAa0DVQGtA1UBrQNVAa0DVQGtA2gB8AN9AfoDVQGtA1UBrQNVAa0DVQGtA1UB
rQNVAa0DVQGtA1UBrQNwAfEDfAH4A1UBrQNVAa0DVQGtA1UBrQNVAa0DVQGtA1UBrQNVAa0DVQGtA0cB
gZQAATsBbQECAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFTAY4BEAH/AQ8BGwEAAf8B
IwFDAQAB/wFSAYwBEAH/AVIBjAEQAf8BewG9ATAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoB
AAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/KAADAwEEAwkBCwMiATEDOAFbAk8BTgGXAl8BXAHIAW0B
ZgFfAeUBpgFvAToB9wHVAWoBHAH9Af8BeAEAAv8BeAEAAf8CUQFQAZ8DEgEYHAAEAQMCAQMDFQEcAzUB
VgJLAUwBjwJcAV8ByAJdAWMB3wJdAWcB4wJSAVMBpQM0AVMDHAEnKAADXwHQA2YB7iAAA2EB1ANjAem8
AAEIAQoBAAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFOAYIBDwH/AUoB
hAEGAf8BUgGMARAB/wFjAaUBFwH/AQgBCgEAAf8BCAEKAQAB/wETASMBAAH/AUIBcwEGAf8BIAE/AQAB
/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8gAAQBAwMBBAMMARADGAEgAykB
PQM+AWoCVwFWAbUBbQFmAV8B5QGmAW8BOgH3Af8BeAEAAv8BeAEAAf8CUQFQAZ8DEgEYIAAEAQMHAQkD
FAEbAyoBQANDAXYDVQGvAlkBbQHpAlsBXwHQAlABUQGfAzMBUSgAA18B0ANmAe4gAANhAdQDYwHpwAAB
QgFzAQYB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMARAB/wFSAYwB
EAH/AUoBhAEGAf8BEAEeAQAB/wExAVoBAAH/AU0BhAENAf8BWgGcARAB/wFaAZwBEAH/AVIBjAEIAf8B
EAEeAQAB/wEIAQoBAAH/AQgBCgEAAf8DRgGALAADAgEDAwsBDgMgAS4DQwF2AlcBVQGxAWcBZgFgAeAB
lwFjATcB9gGyAWoBKgH5AlEBUAGcAxIBFwwABAEDDAEQAxcBHwMdASgDHQEoAwwBDwgAAw8BFAImAScB
OQJHAUgBgwJgAWcB4QJcAW4B5wNeAdICPwFAAW4oAANfAdADZgHuIAADYQHUA2MB6cQAAUkBiQEAAf8B
UgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BUgGMARAB/wFSAYwB
EAH/AVoBlAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZQBGAH/AUIBcwEGAf8B
CgEOAQAB/zAABAEDAwEEAwwBDwMeASoDOgFhAlkBVwG5AWgBYwFbAeQBeQFkAVUB7gJPAU4BlwMSARcM
AAMCAQMDIQEvAzYBWQJCAUMBdQJBAUIBcwMeASsIAAMEAQUDDAEPAzgBXAJdAWABzgJaAXUB7AJQAXsB
7wNGAX8oAANfAdADZgHuIAADYQHUA2MB6cgAAToBawEAAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B
UgGMARAB/wFSAYwBEAH/AVoBlAEQAf8BWgGUARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwB
EAH/AVoBlAEYAf8BWgGUARgB/wFjAaUBFwH/ARkBLAEDAf84AAMCAQMDCAEKAyABLQJBAUABcQJNAUwB
kQNQAZoCOwE6AWIDDAEPDAADAwEEAysBQQNEAXoDUwGnA1UBrQM3AVoDGAEgAwkBCwMGAQcDDQERAzkB
XwJdAWEB0QJQAXsB7wJKAYwB8wJGAUcBgSgAA18B0ANmAe4gAANhAdQDYwHpzAABLAFVAQAB/wFSAYwB
CAH/AVIBjAEIAf8BUgGMARAB/wFSAYwBEAH/AVoBlAEQAf8BWgGUARAB/wFaAZwBEAH/AVoBnAEQAf8B
WgGcARAB/wFaAZwBEAH/AVoBlAEYAf8BWgGUARgB/wEhAUEBAAH/QAAEAgMHAQkDEAQVARwCFgEVAR0D
DwETAwIBAwwAAwMBBAMwA0sBTAGPAlsBXQHKAlsBZAHeA04BlAM0AVMDFQEcAw0BEQMeASsCQwFEAXcC
XQFjAd8CUQGFAfECWQFtAekDRAF7KAADXwHQA2YB7iAAA2EB1ANjAenIAAESASIBAAH/AUwBhgEGAf8B
UgGMAQgB/wFaAZwBEAH/AVABigEIAf8BUgGMARAB/wFaAZQBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwB
EAH/AVoBnAEQAf8BWgGcAREB/wFpAasBHwH/AQgBCgEAAf9sAAMCAQMDIQEvAzoBYQNVAa0CXwFjAdoD
WgG/AlABUQGfA0QBegJBAUIBcgNJAYUCVgFXAbICVgF3Ae0CYAFkAdsCVQFXAbEDOAFbKAADXwHQA2YB
7iAAA2EB1ANjAenIAAEQAR4BAAH/AUgBfQEHAf8BWQGTARMB/wFVAYgBGAH/CAABIQFBAQAB/wFCAXsB
AAH/AVIBjAEIAf8BVQGRAQgB/wE5AWYBBAH/AVMBVQFQAe94AAMGAQgDFwEfA0QBewJZAVwBxgJbAWgB
5AJDAY8B9AJVAXkB7gJVAXkB7gJRAYUB8QI3AZcB9gIcAcgB/AJZAVwBvgM+AWsDJAE0KAADXwHQA2YB
7iAAA2EB1ANjAenQAAEeAToBAAH/nAAEAgMJAQwDKgM/AUABbgNOAZYCVgFYAbMCWQFcAcECWgFdAccC
WgFdAccCVwFZAbkCUQFSAaQCQAFBAXEDJQE2AxMBGSgAA18B0ANmAe4gAANhAdQDYwHp/wB5AAQBAwsB
DgMmATgDOQFeA0YBfQJKAUsBiwNKAYkDPgFrAyoBPwMXAR8DAgEDLAADUwGiA1oBvyAAA1QBpgNZAbuo
AAFCAU0BPgcAAT4DAAEoAwABgAMAASADAAEBAQABAQYAAQIWAAP/AQAD/wHHAgABBwL/Ac8B8wH/BAAC
/wHPAYcCAAEHAv8BzwHzAf8EAAH/Af4BAAEHAgABBwL/Ac8B8wH/BAAB/wH8AQABBwIAAQcC/wHPAfMB
/wQAAf8B+AEAAQ8CAAEHAv8BzwHzAf8EAAH/AfABAAEHAgABBwL/Ac8B8wH/BAAB/wHgAQABAwIAAQcC
/wHPAfMB/wQAAf8BwAEAAQEB/AEDA/8BzwHzAf8EAAH/AcABAAEBAfwBAwP/Ac8B8wH/BAAB/wHgAgAB
/AEDAeABHwgAAf8B/AEgAQAB/AEDAeABHwgAAf8B/gHgAQAB/AEDAeABHwgAAf8BwAIAAfwBAwHgAR8B
/wHPAfMB/wQAAf8BgAIAAfwBAwHgAR8B/wHPAfMB/wQAAf8DAAH8AQMB4AEfAf8BzwHzAf8EAAH+AgAB
AQEAAQMB4AEfAf8BzwHzAf8EAAH8AgABAQEAAQMB+AEfAf8BzwHzAf8EAAH4AgABAQEAAQMB+AEfAf8B
zwHzAf8EAAH4AgABAwEAAQMB+AEDAf8BzwHzAf8EAAH4AgABBwEAAQMB+AEDCAAB+AIAAQ8BAAEDAfgJ
AAH4AQABRAF/AQABAwH4CQAB+AEAAQEB/wGAAQMB+AEAAf8BzwHzAf8EAAH4AgABfwGAAQMB/AEAAf8B
zwHzAf8EAAH8AgABfwHwAQMBgQGAAf8BzwHzAf8EAAH+AgAB/wHwAQMBgQGAAf8BzwHzAf8EAAH/AgAB
/wH8AQMBgAEAAf8BzwHzAf8EAAH/AYABAQH/Af4BAwGAAQAB/wHPAfMB/wQAAf8BAAEDA/8BgAEAAf8B
zwHzAf8EAAH/AQwBDwP/AcABAAH/Ac8B8wH/BAAB/wHfBP8BwAEAAf8BzwHzAf8EAAb/AfABAQH/Ac8B
8wH/BAAL
fwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A2EBz7wAAQgB
CgEAAf8MAAETASMBAAH/AVoBlAEQAf8BWgGcARAB/wGUAdYBSgH/AQ0BEQECAf8BMQFaAQAB/wFaAZQB
EgH/AVoBlAEYAf8BWgGUARgB/wFjAZwBGAH/AWMBpQEXAf8BawGlASEB/wEQAR4BAAH/GAADEgEXAzUB
VgNQAZoBZAJiAeEB/wF4AQAC/wF4AQAB/wJRAVABnwMSARgUAAMFAQYDHQEpAzABSgI7ATwBZQI7ATwB
ZAMoATwCFQEWAR0DBgEIFAADPAFkA0wBjwNMAY8DTAGPA0wBjwNMAY8DTAGPA0wBjwNMAY8DTAGPA2cB
6gN8AfgDTAGPA0wBjwNMAY8DTAGPA0wBjwNMAY8DTAGPA0wBjwNlAewDbgH1A0wBjwNMAY8DTAGPA0wB
jwNMAY8DTAGPA0wBjwNMAY8DTAGPAzUBVqgAA10B3wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoB
AAH/AQgBCgEAAf8BCAEKAQAB/wMzAVADOgFgAUsBhQEHAf8BWgGUARAB/wFaAZwBEAH/ATkBawEAAf8D
CQEMARABHgEAAf8BVAGOARIB/wFaAZQBGAH/AWMBnAEYAf8BYwGcARgB/wFjAaUBFwH/AXMBtAEpAf8B
EAEeAQAB/xgAAxIBFwM1AVYDUAGaAWQCYgHhAf8BeAEAAv8BeAEAAf8CUQFQAZ8DEgEYFAADCQEMAzMB
UAJMAU0BkQJdAV8ByQJbAV0BygNEAXoDKQE9AwwBEDwAA18B0ANjAe4gAANhAdQDYwHpzAABCAEKAQAB
/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgB
CgEAAf8BMwFfAQIB/wFaAZQBEAH/AVoBnAEQAf8BrQHnAWMB/wEQAR4BAAH/AQgBCgEAAf8BFAEmAQAB
/wFUAY4BEgH/AWIBmwEYAf8BYwGcARgB/wFjAaUBFwH/AWMBpQEXAf8BYwGcASEB/wEYAS4BAAH/GAAD
EgEXAzUBVgNQAZoBZAJiAeEB/wF4AQAC/wF4AQAB/wJRAVABnwMSARgUAAMJAQsDLgFHA0gBhAJZAVwB
wwJcAV8BywNJAYUDLgFHAw8BEzwAA18B0ANjAe4gAANhAdQDYwHpyAABCAEKAQAB/wErAVIBAAH/AUEB
cgEFAf8BSgGEAQYB/wFKAYQBBgH/AUoBhAEGAf8BQgFzAQYB/wEpAVABAAH/ARABHgEAAf8BHwE6AQAB
/wFVAY8BCwH/AVoBlQEQAf8BWgGcARAB/wHWAf8BjAH/ARABHgEAAf8BGAEuAQAB/wFCAXgBAwH/AVoB
lAEYAf8BYgGbARgB/wFjAZwBGAH/AWMBpQEXAf8BYwGlARcB/wFzAbQBKQH/ARABHgEAAf8YAAMSARcD
NQFWA1ABmgFkAmIB4QH/AXgBAAL/AXgBAAH/AlEBUAGfAxIBGBQAAwYBCAMkATQDPAFmA1MBpwNYAbgC
RwFIAYMDMQFNAw8BFDwAA18B0ANjAe4gAANhAdQDYwHpxAABKAFNAQAB/wFOAYgBBwH/AVIBjAEIAf8B
UgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFSAYwB
EAH/AVoBlAEQAf8BWgGcARAB/wFjAaUBFwH/AUIBewEAAf8BSgGEAQYB/wFSAYwBCAH/AVoBmAEUAf8B
WgGUARgB/wFjAZwBGAH/AWMBpQEXAf8BYwGlARcB/wFjAaUBFwH/AZQByQFNAf8EAAMQARUDGgEkAyEB
LwMRARYEAgQBAxIBFwM1AVYDUAGaAWQCYgHhAf8BeAEAAv8BeAEAAf8CUQFQAZ8DEgEYFAADAwEEAxMB
GQMlATYCOwE8AWQCQQFCAXIDMwFRAyEBLwMJAQw8AANfAdADYwHuIAADYQHUA2MB6cAAASkBTgECAf8B
UgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB
EAH/AVIBjAEQAf8BUgGMARAB/wFaAZQBEAH/AVoBlQEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8B
WgGcARAB/wFaAZQBGAH/AVoBlAEYAf8BYwGcARgB/wFjAZwBGAH/AWMBpQEXAf8BYwGlARcB/wFjAaUB
FwH/AWUBoAEhAf8EAAMeASsCMQEwAUwDOwFjAyIBMQMHAQkDBAEFAxIBGAM2AVcDUAGaAWQCYgHhAf8B
eAEAAv8BeAEAAf8CUQFQAZ8DEgEYHAADBwEJAxwBJwMjATICGQEaASMDDwEUAwQBBTwAA18B0ANjAe4g
AANhAdQDYwHpvAADRgGAAU4BiAEHAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB
CAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BUgGMARAB/wFaAZQBEAH/AVoBlwEQAf8B
WgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZQBGAH/AVoBlAEYAf8BYwGcARgB/wFjAaEB
GAH/AWMBpQEXAf8BYwGlARcB/wF4AboBLAH/AQgBCgEAAf8EAAMkATQDRQF8AloBWAG3A04BlAM/AW0D
KAE7Ax8BLAM5AV4DUAGaAWQCYgHhAf8BeAEAAv8BeAEAAf8CUQFQAZ8DEgEYHAADEgEXAzwBZgNKAYkD
QAFvAy4BRwMOARI8AANfAdADYwHuIAADYQHUA2MB6bwAATUBXgEHAf8BUgGMAQgB/wFSAYwBCAH/AVIB
jAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB
/wFaAZQBEAH/AVoBlAEQAf8BWgGbARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZYBFgH/AVoB
lAEYAf8BXQGXARgB/wFjAZwBGAH/AWMBpQEXAf8BYwGlARcB/wFwAbMBIAH/ASsBUAEEAf8IAAMnAToC
UwFRAaIBugFfASEB+wFrAWUBXAHnAlwBWgHEAkMBQgF1AzEBTQJAAT8BbgJRAVABnwJlAWAB4wH/AXgB
AAL/AXgBAAH/AlEBUAGfAxIBGBwAAxkBIgNOAZUCWwFeAc0CVgFXAbIDRAF6Ax0BKQMGAQgEAgQBMAAD
XwHQA2MB7iAAA2EB1ANjAem8AAFKAYQBBgH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B
UgGMAQgB/wFnAakBFwH/AVIBjAEIAf8BSgGEAQYB/wFKAYQBBgH/AVIBjAEQAf8BWgGUARAB/wFaAZcB
EAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGUARgB/wFaAZQBGAH/AV8BmAEYAf8B
YwGeARgB/wFjAaUBFwH/AWsBqQEdAf8BKQFQAQAB/wwAAyIBMQNOAZgBggFvAU8B8wF1AWgBUgHwAmoB
YQHmAloBVwHCAlUBUwGqA1MBpwJZAVcBvAFvAWwBYAHrAf8BeAEAAv8BeAEAAf8CUQFQAZ8DEgEYHAAD
FAEbAkMBRAF3AlYBWQG2AlsBXgHNAlYBWAGzAz8BbAMmATgDDAEPAwIBAwgAAwIBAwMNAREDDQERAw0B
EQMNAREDDQERAw0BEQMNAREDDQERAw0BEQNfAdMDZwHvAw0BEQMNAREDDQERAw0BEQMNAREDDQERAw0B
EQMNAREDYgHXA2cB6gMNAREDDQERAw0BEQMNAREDDQERAw0BEQMNAREDDQERAw0BEQMEAQWUAAFKAYQB
BgH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BaQGkAR4B/wEsAVABAwH/AQgBCgEAAf8B
NwFhAQcB/wFSAYwBDgH/AVIBjAEQAf8BfwHBATIB/wFbAV4BWwHTA1oBvwEvAVkBAAH/AUQBegEFAf8B
UAGKAQgB/wFaAZwBDgH/AVoBnAEQAf8BWgGcARAB/wFPAYYBEAH/AUQBdAEMAf8DWgG/EAACGgEZASMD
RAF7Al0BWwHKAmMBXwHaAmkBXwHoAXMBZwFWAe8BcAFlAV0B7AJhAVwB1gJfAVsB2AGFAWgBSgH0Af8B
eAEAAv8BeAEAAf8CUQFQAZ8DEgEYHAADDwETAzQBUwNNAZICXQFhAc8CXQFhAdQCUgFUAagCQQFCAXID
JgE4AxQBGwMGAQgDAgEDA1oBwgN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8D
fwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8D
fwH/A38B/wN/Af8DfwH/A38B/wNiAdyUAAFKAYwBAAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIB
jAEIAf8BZwGdAScB/wEIAQoBAAH/AQoBDwEAAf8BQgF3AQMB/wFSAYwBEAH/AVoBnAEQAf8BJQFBAQUB
/wQAAzoBYAEIAQoBAAH/AQgBCgEAAf8EAANGAYADRgGAA0YBgBwAAwoBDQMiATEDNAFUA0QBeAJRAVAB
nwJhAV0BzwFxAWoBXAHtAXABZQFdAewBdQFoAVIB8AG6AV8BIQH7Af8BeAEAAv8BeAEAAf8CUQFQAZ8D
EgEYHAADBgEIAxgBIQMxAU0CTAFNAZECWAFaAb0CXQFhAdECWQFcAcMCUQFTAaIDPQFnAhkBGgEjAwwB
DwNAAW8DVQGtA1UBrQNVAa0DVQGtA1UBrQNVAa0DVQGtA1UBrQNVAa0DaAHwA30B+gNVAa0DVQGtA1UB
rQNVAa0DVQGtA1UBrQNVAa0DVQGtA3AB8QN8AfgDVQGtA1UBrQNVAa0DVQGtA1UBrQNVAa0DVQGtA1UB
rQNVAa0DRwGBlAABOwFtAQIB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVMBjgEQAf8B
DwEbAQAB/wEjAUMBAAH/AVIBjAEQAf8BUgGMARAB/wF7Ab0BMAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoB
AAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8oAAMDAQQDCQELAyIBMQM4AVsCTwFOAZcC
XwFcAcgBaQFmAV8B5QGdAW8BQAH3AcwBZwEiAf0B/wF4AQAC/wF4AQAB/wJRAVABnwMSARgcAAQBAwIB
AwMVARwDNQFWAksBTAGPAlwBXwHIAl0BYwHfAmABZQHjAlIBUwGlAzQBUwMcAScoAANfAdADYwHuIAAD
YQHUA2MB6bwAAQgBCgEAAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AU4B
ggEPAf8BSgGEAQYB/wFSAYwBEAH/AWMBpQEXAf8BCAEKAQAB/wEIAQoBAAH/ARMBIwEAAf8BQgFzAQYB
/wEgAT8BAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/yAABAEDAwEEAwwB
EAMYASADKQE9Az4BagJXAVYBtQFpAWYBXwHlAZ0BbwFAAfcB/wF4AQAC/wF4AQAB/wJRAVABnwMSARgg
AAQBAwcBCQMUARsDKgFAA0MBdgNVAa8CWgFqAekCWwFfAdACUAFRAZ8DMwFRKAADXwHQA2MB7iAAA2EB
1ANjAenAAAFCAXMBBgH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB
EAH/AVIBjAEQAf8BSgGEAQYB/wEQAR4BAAH/ATEBWgEAAf8BTQGEAQ0B/wFaAZwBEAH/AVoBnAEQAf8B
UgGMAQgB/wEQAR4BAAH/AQgBCgEAAf8BCAEKAQAB/wNGAYAsAAMCAQMDCwEOAyABLgNDAXYCVwFVAbEC
ZgFgAeABjgFjAT8B9gGpAWoBMgH5AlEBUAGcAxIBFwwABAEDDAEQAxcBHwMdASgDHQEoAwwBDwgAAw8B
FAImAScBOQJHAUgBgwJiAWQB4QJcAWsB5wNeAdICPwFAAW4oAANfAdADYwHuIAADYQHUA2MB6cQAAUkB
iQEAAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BUgGMARAB
/wFSAYwBEAH/AVoBlAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZQBGAH/AUIB
cwEGAf8BCgEOAQAB/zAABAEDAwEEAwwBDwMeASoDOgFhAlkBVwG5AmMBWwHkAXEBYgFYAe4CTwFOAZcD
EgEXDAADAgEDAyEBLwM2AVkCQgFDAXUCQQFCAXMDHgErCAADBAEFAwwBDwM4AVwCXQFgAc4CXQFwAewC
VgFzAe8DRgF/KAADXwHQA2MB7iAAA2EB1ANjAenIAAE6AWsBAAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB
CAH/AVIBjAEQAf8BUgGMARAB/wFaAZQBEAH/AVoBlAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8B
WgGcARAB/wFaAZQBGAH/AVoBlAEYAf8BYwGlARcB/wEZASwBAwH/OAADAgEDAwgBCgMgAS0CQQFAAXEC
TQFMAZEDUAGaAjsBOgFiAwwBDwwAAwMBBAMrAUEDRAF6A1MBpwNVAa0DNwFaAxgBIAMJAQsDBgEHAw0B
EQM5AV8CXQFhAdECVgFzAe8CTwGCAfMCRgFHAYEoAANfAdADYwHuIAADYQHUA2MB6cwAASwBVQEAAf8B
UgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFaAZQBEAH/AVoBlAEQAf8BWgGcARAB/wFaAZwB
EAH/AVoBnAEQAf8BWgGcARAB/wFaAZQBGAH/AVoBlAEYAf8BIQFBAQAB/0AABAIDBwEJAxAEFQEcAhYB
FQEdAw8BEwMCAQMMAAMDAQQDMANLAUwBjwJbAV0BygJbAWEB3gNOAZQDNAFTAxUBHAMNAREDHgErAkMB
RAF3Al0BYwHfAlYBfgHxAloBagHpA0QBeygAA18B0ANjAe4gAANhAdQDYwHpyAABEgEiAQAB/wFMAYYB
BgH/AVIBjAEIAf8BWgGcARAB/wFQAYoBCAH/AVIBjAEQAf8BWgGUARAB/wFaAZwBEAH/AVoBnAEQAf8B
WgGcARAB/wFaAZwBEAH/AVoBnAERAf8BaQGrAR8B/wEIAQoBAAH/bAADAgEDAyEBLwM6AWEDVQGtAl8B
YwHaA1oBvwJQAVEBnwNEAXoCQQFCAXIDSQGFAlYBVwGyAlwBcQHtAmABZAHbAlUBVwGxAzgBWygAA18B
0ANjAe4gAANhAdQDYwHpyAABEAEeAQAB/wFIAX0BBwH/AVkBkwETAf8BVQGIARgB/wgAASEBQQEAAf8B
QgF7AQAB/wFSAYwBCAH/AVUBkQEIAf8BOQFmAQQB/wJZAVYB73gAAwYBCAMXAR8DRAF7AlkBXAHGAlsB
YwHkAkoBhQH0AlgBcQHuAlgBcQHuAlYBfgHxAj8BjgH2AiIBwgH8AlkBXAG+Az4BawMkATQoAANfAdAD
YwHuIAADYQHUA2MB6dAAAR4BOgEAAf+cAAQCAwkBDAMqAz8BQAFuA04BlgJWAVgBswJZAVwBwQJaAV0B
xwJaAV0BxwJXAVkBuQJRAVIBpAJAAUEBcQMlATYDEwEZKAADXwHQA2MB7iAAA2EB1ANjAen/AHkABAED
CwEOAyYBOAM5AV4DRgF9AkoBSwGLA0oBiQM+AWsDKgE/AxcBHwMCAQMsAANTAaIDWgG/IAADVAGmA1kB
u6gAAUIBTQE+BwABPgMAASgDAAGAAwABIAMAAQEBAAEBBgABAhYAA/8BAAP/AccCAAEHAv8BzwHzAf8E
AAL/Ac8BhwIAAQcC/wHPAfMB/wQAAf8B/gEAAQcCAAEHAv8BzwHzAf8EAAH/AfwBAAEHAgABBwL/Ac8B
8wH/BAAB/wH4AQABDwIAAQcC/wHPAfMB/wQAAf8B8AEAAQcCAAEHAv8BzwHzAf8EAAH/AeABAAEDAgAB
BwL/Ac8B8wH/BAAB/wHAAQABAQH8AQMD/wHPAfMB/wQAAf8BwAEAAQEB/AEDA/8BzwHzAf8EAAH/AeAC
AAH8AQMB4AEfCAAB/wH8ASABAAH8AQMB4AEfCAAB/wH+AeABAAH8AQMB4AEfCAAB/wHAAgAB/AEDAeAB
HwH/Ac8B8wH/BAAB/wGAAgAB/AEDAeABHwH/Ac8B8wH/BAAB/wMAAfwBAwHgAR8B/wHPAfMB/wQAAf4C
AAEBAQABAwHgAR8B/wHPAfMB/wQAAfwCAAEBAQABAwH4AR8B/wHPAfMB/wQAAfgCAAEBAQABAwH4AR8B
/wHPAfMB/wQAAfgCAAEDAQABAwH4AQMB/wHPAfMB/wQAAfgCAAEHAQABAwH4AQMIAAH4AgABDwEAAQMB
+AkAAfgBAAFEAX8BAAEDAfgJAAH4AQABAQH/AYABAwH4AQAB/wHPAfMB/wQAAfgCAAF/AYABAwH8AQAB
/wHPAfMB/wQAAfwCAAF/AfABAwGBAYAB/wHPAfMB/wQAAf4CAAH/AfABAwGBAYAB/wHPAfMB/wQAAf8C
AAH/AfwBAwGAAQAB/wHPAfMB/wQAAf8BgAEBAf8B/gEDAYABAAH/Ac8B8wH/BAAB/wEAAQMD/wGAAQAB
/wHPAfMB/wQAAf8BDAEPA/8BwAEAAf8BzwHzAf8EAAH/Ad8E/wHAAQAB/wHPAfMB/wQABv8B8AEBAf8B
zwHzAf8EAAs=
</value>
</data>
<metadata name="ilStoreIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
@ -390,217 +389,211 @@
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAODEAAAJNU0Z0AUkBTAMBAQAB
EAEAARABAAEyAQABMgEABP8BIQEACP8BQgFNATYHAAE2AwABKAMAAcgDAAEyAwABAQEAASAFAAFAAZz/
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAxi8AAAJNU0Z0AUkBTAMBAQAB
KAEAASgBAAEyAQABMgEABP8BIQEACP8BQgFNATYHAAE2AwABKAMAAcgDAAEyAwABAQEAASAFAAFAAZz/
AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wDmAAQBAwMBBAMHAQkDCgENAw4BEgMQARUDEgEXAxIBGAMSARcD
EAEVAw4BEgMKAQ0DBgEIAwMBBAQB/wD/AOYAAwUBBgMNAREDGgEkAyYBOAEyATEBMAFMAToBOAE2AVoB
PgE8ATkBYgFAAT4BOwFmAT4BPAE5AWIBOQE4ATYBWQExATABLwFKAyUBNgMZASIDDAEPAwQBBf8A/wDa
AAMHAQkDEwEZASQCIwMzATIBTwFEAUIBPQFsAVMBTQFDAYQBYQFWAUUBmAFtAV4BRAGoAXYBZAFCAbIB
ewFnAUEBtwF9AWcBQAG6AXsBZwFBAbcBdQFjAUMBsQFsAV0BRAGnAV8BVQFEAZYBUQFLAUIBggFBAUAB
PAFoATIBMQEwAUwCIgEhATADEQEWAwYBB/8A/wDCAAQBAwMBBAMJAQsDGgEkAi8BLgFIAU0BSAFBAXsB
bQFfAUMBqQGXAXMBNAHRAbQBgAEeAekBygGEAQ4B9gHVAYwBBAH9AdsBjAEAAf8B2wGMAQAB/wHbAYwB
AAH/AdsBjAEAAf8B1wGJAQIB/gHVAYsBBAH9AckBhQERAfQBtAF/ASEB5gGSAXEBNwHNAWkBXAFEAaQB
SQFGAT8BdQEtAiwBQwMYASEDCAEKAwMBBP8A/wC6AAMEAQUDFQEcAi8BLgFHAVIBTQFDAYMBeQFlAUEB
tgGdAXQBMAHXAbMBfwEgAecBxAGFARMB8gHRAYoBCgH5AdUBjAEEAf0B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B1wGJAQIB/gHSAYYBBAH8Ac4BhgEMAfgBxQGFARQB
8QGzAX8BJAHlAZsBdQEzAdQBcwFiAUIBsAFNAUkBQQF8AisBKgFAAxIBGAMCAQP/AP8ArgADAgEDAwcB
CQMgAS4BPAE6ATgBXgFhAVYBRAGZAY4BbgE6AckBvAGBARwB7AHVAYoBBgH7AdsBjAEAAf8B2wGMAQAB
EAEVAw4BEgMKAQ0DBgEIAwMBBAQB/wD/AOYAAwUBBgMNAREDGgEkAyYBOAIxATABTAM3AVoCOwE6AWID
PAFmAjsBOgFiAzYBWQMwAUoDJQE2AxkBIgMMAQ8DBAEF/wD/ANoAAwcBCQMTARkDIwEzAzIBTwM/AWwD
SAGEAU8CTgGYAVYBVQFSAagBWwFZAVQBsgFdAVsBVgG3AV0BWgFVAboBXQFbAVYBtwFaAVgBVQGxAVYB
VAFSAacDTgGWA0cBggM9AWgCMQEwAUwDIQEwAxEBFgMGAQf/AP8AwgAEAQMDAQQDCQELAxoBJAMuAUgD
RAF7AVYBVQFSAakBbwFkAVEB0QGSAXMBOgHpAbMBewEcAfYBzAGMAQoB/QHbAYwBAAH/AdsBjAEAAf8B
2wGMAQAB/wHbAYwBAAH/AdEBgwEFAf4BzAGLAQoB/QGwAXsBIwH0AY4BcwFBAeYBawFhAVMBzQFUAVIB
UQGkAkMBQgF1AywBQwMYASEDCAEKAwMBBP8A/wC6AAMEAQUDFQEcAy4BRwJIAUcBgwFcAVkBVAG2AXQB
ZwFOAdcBkAFzAT8B5wGrAXsBKQHyAb8BhwEYAfkBzAGMAQoB/QHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHRAYMBBQH+AcwBfgEKAfwBvwF+ARoB+AGpAX4BKwHxAY4B
cwFBAeUBdAFmAVEB1AFYAVcBVAGwA0UBfAMqAUADEgEYAwIBA/8A/wCuAAMCAQMDBwEJAyABLgM5AV4C
TwFOAZkBaQFiAVQByQGdAXYBNwHsAcwBhwEPAfsB2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHXAYkBAgH+AdMBhwEIAfoBtAF+AR8B
6AGIAWwBOwHEAVwBVAFEAZMBOAE3ATUBVwMdASkDBgEIBAL/AP8ApgADCAEKAhYBFQEdAUUBQgE9AW4B
eQFlAUEBtgHGAYUBEwHzAdIBhgEEAfwB2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwB
AAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B
2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHVAYoB
BgH7AcEBhAEUAfABcgFhAUMBrQFAAT4BOgFlAxIBGAMGAQj/AP8AngAEAQMGAQgDJAE0AUoBRgE/AXYB
fQFmAUABuQGzAX0BIQHmAdUBigEGAfsB1wGIAQIB/gHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwB
AAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B
2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwB
AAH/AdcBiAECAf4B0wGGAQgB+gGrAXoBJgHiAXcBZAFCAbMBRAFCAT0BbQMgAS4DBQEGBAH/AP8AkgAE
AQMGAQgDHQEpAUQBQgE9AWwBhAFqAT0BwAG2AYABHgHpAdcBiQECAf4B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdEBgwEFAf4BxgF+ARQB+gGQAXIBOgHoAWUBXwFVAcQDTQGTAzYB
VwMdASkDBgEIBAL/AP8ApgADCAEKAhYBFQEdAkABPwFuAVwBWQFUAbYBrQF/ASYB8wHMAX4BCgH8AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdcBiAECAf4BswF9ASEB
5gF7AWcBQQG3AT8BPQE6AWQCGgEZASMDBQEG/wD/AJIABAIDDwETAT8BPQE6AWQBdgFkAUIBsgHRAYoB
CgH5AdUBjAEEAf0B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8BzAGHAQ8B+wGkAXkBKwHwAVgBVwFTAa0CPAE7AWUD
EgEYAwYBCP8A/wCeAAQBAwYBCAMkATQDQwF2AV4BWwFVAbkBjgFyAUEB5gHMAYcBDwH7AdEBggEFAf4B
2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwB
AAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B
2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHSAYYBBAH8AcsBhAEOAfYBbQFeAUQBqAE5ATgB
NgFZAwwBEAQB/wD/AI4AAxIBFwIsASsBQgFoAVsBRAGiAaQBeAEsAdwB1wGJAQIB/gHbAYwBAAH/AdsB
2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHRAYIBBQH+AcYBfgEUAfoBhgFtAUMB4gFbAVgB
VAGzAz8BbQMgAS4DBQEGBAH/AP8AkgAEAQMGAQgDHQEpAz8BbAFiAV0BVQHAAZMBcwE6AekB0QGDAQUB
/gHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B1wGJAQIB/gHVAYwBBAH9AZ4BdgEwAdYBYQFWAUQBmQInASYBOQMPARP/
AP8AhgAEAQMCAQMDJAE0AUsBSAFBAXkBmAFyATMB0gHOAYYBDAH4AdsBjAEAAf8B2wGMAQAB/wHbAYwB
AAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B
jAEAAf8B0QGCAQUB/gGOAXIBQQHmAV0BWwFWAbcCPAE7AWQCGgEZASMDBQEG/wD/AJIABAIDDwETAjwB
OwFkAVsBWQFUAbIBvwGHARgB+QHMAYwBCgH9AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B
2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwB
AAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B
2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHJAYcBDwH1AZABcAE3AcsBRAFCAT0BbAMgAS0E
Av8A/wCCAAMCAQMDCQEMATsBOQE3AVwBfQFmAUACuQGBAR0B6wHXAYgBAgH+AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHWAYwBBAH9AbMBfwEgAecBcgFhAUMB
rQE1ATQBMwFSAwYBBwQC/wD/AH4AAwgBCgMeASoBUgFNAUMBgwGoAXoBJwHfAcsBhAEOAfYB2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGLAQAB/wHbAYsBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsB
iwEAAf8B2wGLAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHJAYUBEQH0AZ4BdAEwAdcBSwFIAUEBeQMYASEDBgEI/wD/AH4AAw8BEwEzATIBMQFOAW0BXgFEAagB
0QGKAQoB+QHWAYwBBAH9AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEBAf8B2wGNAQIB/wHcAY0B
BAH/AdwBjgEFAf8B3AGNAQQB/wHbAY0BAgH/AdsBjAEBAf8B2wGNAQIB/wHbAY0BAgH/AdsBjAEBAf8B
2wGMAQAB/wHbAYwBAQH/AdsBjQECAf8B2wGNAQMB/wHbAY0BAwH/AdsBjAEBAf8B2wGMAQAB/wHbAYwB
AAH/AdsBjAEAAf8B2wGMAQIB/wHcAY0BBAH/AdwBjQEFAf8B3AGNAQQB/wHbAY0BAgH/AdsBjAEBAf8B
2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B0gGHAQQB/AHJAYcBDwH1AWQBWQFFAZ4CLAErAUIDDAEQ/wD/
AHoABAEDFgEeAUsBSAFAAXgBiAFsATsBxAHXAYgBAgH+AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsB
iwEAAf8B2wGNAQMB/wHcAZABCQH/Ad4BlQEVAf8B3wGYARoB/wHeAZYBFgH/Ad0BkQEMAf8B2wGNAQQB
/wHcAY8BCAH/AdwBjwEIAf8B3AGOAQUB/wHbAYwBAgH/AdwBjQEEAf8B3QGRAQoB/wHdAZQBEQH/Ad0B
kwEQAf8B2wGNAQQB/wHbAYwBAQH/AdsBjAEAAf8B2wGMAQEB/wHcAY8BCAH/Ad4BlAESAf8B3wGXARoB
/wHeAZYBFgH/Ad0BkQEMAf8B3AGNAQQB/wHbAYsBAAH/AdsBjAEAAf8B2wGMAQAB/wHXAYkBAgH+AdUB
jAEEAf0BfgFoAT4BvAFDAUEBPAFrAxMBGv8A/wB6AAMFAQYDIAEtAWIBWAFFAZoBoAF1ASwB2QHbAYwB
AAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAQH/Ad0BkgEQAf8B4QGfASwB/wHmAbIBVQH/AekBuwFoAf8B
6wG/AXEB/wHqAbwBbAH/AecBsgFWAf8B5AGrAUUB/wHlAa8BTQH/AeMBpwE8Af8B4AGaASAB/wHdAZIB
DgH/AeABmwEiAf8B5gGxAVIB/wHnAbUBWgH/AeUBrAFHAf8B3QGUAREB/wHcAY4BBQH/AdwBkAEJAf8B
4AGcASUB/wHlAawBSAH/AekBugFnAf8B6gG+AXAB/wHqAbwBagH/AegBtQFbAf8B4gGiATMB/wHeAZUB
FQH/AdsBjAEBAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8BmAFyATMB0gFaAVIBRAGOAxwBJwMDAQT/
AP8AdgADCwEOAioBKQE+AXwBZgFAArgBfwEdAeoB2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGNAQQB
/wHhAZ8BLAH/AekBuQFmAf8B8wHbAbEB/wH2AeQBwwH/AfcB5wHMAf8B9wHnAcwB/wH0AdwBswH/AfEB
0wGeAf8B8gHWAaUB/wHsAcMBewH/AeQBpwE+Af8B3wGaAR8B/wHlAa0BSgH/AfMB2gGuAf8B8wHaAa8B
/wHtAccBgwH/Ad8BmgEfAf8B3QGRAQwB/wHeAZcBGwH/AecBtQFcAf8B8AHPAZcB/wH2AeQBxwH/AfYB
5gHJAf8B9gHkAcUB/wH1Ad8BuQH/AesBwAF0Af8B4wGlATkB/wHcAY4BBgH/AdsBjAEBAf8B2wGMAQAB
/wHbAYwBAAH/Aa4BfgElAeMBcQFgAUQBrAMlATYDBwEJ/wD/AHYAAxIBGAE0ATMBMgFQAY4BbgE6AckB
xAGFARMB8gHbAYwBAAH/AdsBjAEAAf8B3AGOAQQB/wHdAZMBEAH/AeoBvAFqAf8B8QHTAZ8B/wHzAdoB
rwH/Ae4ByAGGAf8B7AHCAXkB/wHxAdQBoAH/AfcB5QHGAf8B+QHtAdgB/wH0Ad4BtwH/AeoBvQFtAf8B
3wGZAR4B/wHgAZwBJQH/AekBuQFkAf8B+AHpAc8B/wHvAc0BkQH/AeYBsAFQAf8B3QGSAQ4B/wHfAZcB
GgH/AeUBqwFHAf8B8gHWAaUB/wHyAdcBpwH/Ae4BygGLAf8B6gG9AW0B/wHrAcIBeQH/AfAB0gGdAf8B
8gHWAaYB/wHsAcQBfQH/Ad8BmgEgAf8B3AGQAQoB/wHbAYsBAAH/AdsBjAEAAf8BvwGCARkB7QGCAWoB
PgG/Ai4BLQFGAw4BEv8A/wB2AAMYASABPAE7ATgBXwGbAXUBMwHUAc4BhgEMAfgB2wGMAQAB/wHbAYwB
AAH/Ad0BkQELAf8B4AGcASMB/wHvAc0BkQH/AfMB3AGyAf8B7QHHAYUB/wHmAbABUQH/AeUBrQFLAf8B
7wHMAZAB/wH2AeUBxgH/AfoB8QHhAf8B9AHfAboB/wHpAbkBZQH/Ad0BkQEMAf8B4AGdAScB/wHrAb4B
cAH/AfoB7wHcAf8B7AHCAXkB/wHhAaABLwH/AdsBjQEFAf8B4QGfASwB/wHqAbsBagH/AfYB4gG/Af8B
8AHPAZYB/wHlAa0BTAH/AeEBoAEtAf8B4wGmATsB/wHoAbcBYwH/Ae8BzQGTAf8B7QHFAYAB/wHhAZ4B
KgH/Ad0BkgEPAf8B2wGLAQAB/wHbAYwBAAH/AckBhQERAfQBkAFwATYBzAE2ATUBMwFTAxMBGf8A/wB2
AAMdASgBQwFBATwBawGmAXgBKgHdAdIBhgEEAfwB2wGMAQAB/wHbAYsBAAH/Ad4BlAEUAf8B4wGlATkB
/wHyAdYBpgH/AfIB1wGnAf8B4wGmATwB/wHgAZsBIwH/AeMBpQE5Af8B8AHOAZUB/wH0Ad4BuAH/AfUB
4wHEAf8B8wHbAbIB/wHoAbcBYAH/AdwBjgEEAf8B4AGdAScB/wHqAb4BcAH/AfkB7AHYAf8B6QG5AWcB
/wHeAZcBHAH/AdoBiwEDAf8B5AGoAUMB/wHtAcgBhgH/AfQB3gG2Af8B6gG7AWsB/wHcAY8BCwH/AdsB
iwEDAf8B3AGNAQYB/wHdAZMBEgH/AeUBrAFJAf8B5gGwAVEB/wHgAZ0BKAH/Ad0BkgEPAf8B2wGLAQAB
/wHbAYwBAAH/AdEBiQEKAfkBnQF1ATAB1QE8ATsBOAFfAxgBIP8A/wB2AAMfASwBRgFDAT4BcAGoAXoB
JwHfAdUBjAEEAf0B2wGMAQAB/wHbAYsBAAH/Ad4BlQEXAf8B5AGoAT8B/wHyAdcBpwH/AfEB1QGkAf8B
4gGiATMB/wHeAZYBFwH/Ad4BlgEYAf8B5AGoAT8B/wHqAb4BcAH/AfAB0QGcAf8B8wHaAbAB/wHpAbkB
ZwH/AdwBjwEGAf8B4AGdAScB/wHqAb4BcAH/AfkB7AHYAf8B6QG5AWcB/wHeAZcBHAH/AdoBiwEDAf8B
5AGrAUgB/wHuAcoBiwH/AfMB2gGvAf8B6AG4AWMB/wHbAY4BBgH/AdsBjAECAf8B2wGMAQIB/wHcAY4B
BwH/Ad4BlwEaAf8B3wGYAR0B/wHdAZIBDgH/AdwBjgEFAf8B2wGMAQAB/wHbAYwBAAH/AdMBhgEIAfoB
oAF3AS8B2AE/AT0BOgFkAhoBGQEj/wD/AHYAAyABLQFIAUQBPwFyAaoBewEoAeAB1QGMAQQB/QHbAYwB
AAH/AdsBigEAAf8B3gGWARgB/wHkAaoBQgH/AfIB1wGoAf8B8QHUAaEB/wHhAaABLgH/Ad0BkwEQAf8B
2wGNAQMB/wHcAZABCgH/AeQBqwFGAf8B7QHHAYYB/wHzAdkBrgH/AeoBuwFqAf8B3AGPAQgB/wHhAZ8B
LAH/AesBwAF0Af8B+QHtAdoB/wHqAbwBbAH/Ad8BmgEhAf8B2wGLAQQB/wHlAawBSgH/Ae4BywGOAf8B
8gHZAasB/wHnAbYBXwH/AdsBjQEEAf8B2wGMAQEB/wHbAYwBAAH/AdsBjAEAAf8B2wGLAQAB/wHbAYsB
AAH/AdsBiwEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B1AGKAQYB+wGgAXgBLAHZAUABPgE6AWUD
GgEk/wD/AHYAAh8BHgErAUUBQwE+AW8BpwF5ASoB3gHSAYYBBAH8AdsBjAEAAf8B2wGKAQAB/wHeAZYB
GAH/AeQBqgFCAf8B8gHXAagB/wHxAdQBoQH/AeEBoAEuAf8B3QGSARAB/wHbAYsBAAH/AdoBiwEBAf8B
4wGoAUAB/wHtAccBhQH/AfMB2QGuAf8B6gG7AWsB/wHdAZABCgH/AeIBowE0Af8B7AHEAX0B/wH6Ae8B
3gH/AewBwQF3Af8B4QGfAS0B/wHcAY0BBQH/AeUBrQFKAf8B7gHLAY4B/wHyAdkBqwH/AecBtwFfAf8B
2wGOAQQB/wHbAYwBAQH/AdsBjAEAAf8B2wGMAQAB/wHbAYsBAAH/AdsBiwEAAf8B2wGMAQAB/wHbAYwB
AAH/AdsBjAEAAf8B2wGMAQAB/wHSAYYBCAH6AZ8BdwEvAdgBPgE8ATkBYgMZASL/AP8AdgADGwElAUAB
PgE6AWUBoAF1ASwB2QHTAYYBCAH6AdsBjAEAAf8B2wGKAQAB/wHeAZUBGAH/AeQBqQFBAf8B8gHXAagB
/wHxAdQBogH/AeEBoQEvAf8B3QGSARAB/wHbAYsBAAH/AdoBigEAAf8B4wGnAUEB/wHtAccBhgH/AfMB
2QGtAf8B6gG8AWsB/wHdAZQBEQH/AecBswFZAf8B8gHVAaMB/wH8AfcB7gH/AfIB1wGpAf8B6AG3AWAB
/wHdAZQBEwH/AeYBrgFNAf8B7gHKAY0B/wHzAdkBrAH/AegBtwFgAf8B2wGOAQQB/wHbAYwBAQH/AdsB
jAEAAf8B2wGMAQIB/wHcAY8BCQH/AdwBkAEKAf8B3AGOAQYB/wHbAY0BAgH/AdsBjAEAAf8B2wGMAQAB
/wHLAYoBDgH3AZcBcwE0AdEBOQE4ATYBWQIWARUBHf8A/wB2AAIWARUBHQE5ATgBNgFZAZUBcQE0AdAB
ygGEAQ4B9gHbAYwBAAH/AdsBiwEAAf8B3gGUARUB/wHjAacBPAH/AfIB1gGmAf8B8gHWAaUB/wHjAaYB
OwH/Ad4BlQEVAf8B2wGLAQEB/wHbAYwBAwH/AeQBqwFJAf8B7gHLAY8B/wHyAdgBqQH/AekBugFnAf8B
3QGVARMB/wHpAboBaAH/AfQB3AGzAf8B/QH7AfYB/wH1AeEBvgH/AesBwAF2Af8B3gGXARkB/wHlAa0B
SgH/Ae4ByAGHAf8B9AHbAbIB/wHpAboBaAH/Ad0BkQELAf8B2wGNAQMB/wHcAY4BBQH/Ad0BkgEPAf8B
4QGeASoB/wHhAZ8BLAH/Ad0BlAEUAf8B3AGPAQcB/wHbAYwBAAH/AdsBjAEAAf8BxAGFARMB8gGLAW0B
OQHHATMBMgExAU4DEQEW/wD/AHYAAw8BEwIvAS4BSAGGAWsBPAHCAb0BggEWAe8B2wGMAQAB/wHbAYsB
AAH/Ad0BkgEPAf8B4QGgAS0B/wHxAdMBoAH/AfMB2wGwAf8B5wG2AV4B/wHgAZwBJAH/AdsBjQEDAf8B
3AGRAQsB/wHoAbcBXwH/AfIB2AGpAf8B8QHUAaAB/wHnAbMBWQH/AdwBjwEJAf8B5AGpAUAB/wHuAcoB
iwH/AfsB8wHkAf8B7gHJAYkB/wHjAagBPgH/AdwBjwEJAf8B4wGlATgB/wHsAcIBeQH/AfYB4gHBAf8B
7QHFAX8B/wHgAZoBIAH/AdwBjwEJAf8B3gGVARQB/wHiAaUBNwH/AewBxQGAAf8B7AHEAX8B/wHiAaIB
MgH/Ad0BkwESAf8B2wGLAQAB/wHbAYwBAAH/AbgBfwEdAeoBfAFmAUABuAMqAT8DCwEO/wD/AHYAAwgB
CgImASUBNwFvAV8BQwGqAasBegEmAeIB2wGMAQAB/wHbAYwBAAH/AdwBjwEHAf8B3gGXARkB/wHsAcMB
fAH/AfIB1wGoAf8B8QHTAZ8B/wHqAb8BcQH/AecBswFWAf8B6AG4AWIB/wHvAc8BlgH/AfQB3QG1Af8B
7AHDAXsB/wHjAaYBOwH/AdsBjQEFAf8B4QGfASoB/wHqAbwBawH/AfYB4wHCAf8B6QG5AWUB/wHgAZsB
IwH/AdwBjAEEAf8B4AGaASEB/wHnAbMBVwH/AfMB2wGxAf8B8gHVAaIB/wHrAcABdQH/AecBtAFaAf8B
6QG5AWYB/wHuAckBiQH/AfEB1AGhAf8B7AHFAYAB/wHgAZwBJgH/Ad0BkQENAf8B2wGMAQAB/wHbAYwB
AAH/AaMBeAEsAdsBZAFZAUUBngMhAS8DBgEH/wD/AHYAAwIBAwEcAhsBJgFYAVEBRAGMAZcBcwE0AdEB
2wGMAQAB/wHbAYwBAAH/AdsBjAEBAf8B3AGPAQYB/wHlAa4BTAH/Ae4BywGOAf8B9wHmAcsB/wH0Ad4B
twH/AfIB2QGrAf8B9AHdAbYB/wH1AeABvAH/AfIB2AGpAf8B5QGuAUwB/wHeAZcBGwH/AdsBjAEDAf8B
3wGXARoB/wHlAa0BSwH/Ae4BzAGQAf8B5AGqAUQB/wHeAZMBEgH/AdsBiwECAf8B3AGQAQsB/wHiAaEB
MAH/Ae4BygGLAf8B9AHcAbIB/wH2AeIBwAH/AfMB2AGrAf8B9AHcAbIB/wH3AeUBxwH/AfEB0wGeAf8B
6AG3AWAB/wHdAZIBDgH/AdsBjQEEAf8B2wGMAQAB/wHYAYkBAgH+AY4BbgE6AckBTwFLAUIBfwMYASAE
Af8A/wB2AAQBAxMBGQFAAT4BOgFlAXwBZgFAAbgB1wGIAQIB/gHbAYwBAAH/AdsBjAEAAf8B2wGNAQIB
/wHeAZcBGQH/AeMBpwE9Af8B6gG9AW8B/wHtAccBhAH/Ae4BzAGPAf8B7gHKAYsB/wHqAb0BbgH/AeUB
rQFJAf8B3wGYARsB/wHcAY8BBwH/AdsBjAEBAf8B3AGQAQgB/wHeAZYBFwH/AeEBoAEtAf8B3gGVARUB
/wHcAY4BBgH/AdsBjAEBAf8B2wGNAQMB/wHdAZMBEQH/AeIBpAE1Af8B6AG2AV8B/wHtAccBhAH/Ae4B
ywGNAf8B7gHJAYgB/wHsAcEBdwH/AeUBrAFIAf8B4AGaASIB/wHbAY0BBAH/AdsBjAEBAf8B1wGIAQIB
/gHSAYYBBAH8AXMBYQFDAa8BOAE3ATUBVwMQARX/AP8AfgADCwEOAykBPQFgAVYBRQGXAb0BggEXAe4B
0wGHAQgB+gHbAYwBAAH/AdsBjAEAAf8B2wGNAQQB/wHdAZQBEwH/AeEBnwEuAf8B5AGqAUQB/wHmAa8B
TwH/AeUBrAFKAf8B4gGhATEB/wHeAZYBFgH/AdwBjgEFAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEBAf8B
2wGNAQIB/wHcAY4BBQH/AdsBjQECAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGNAQMB/wHdAZEB
DQH/AeABnAEmAf8B4wGpAUIB/wHmAa8BTgH/AeUBrAFIAf8B4gGjATUB/wHeAZYBGAH/AdwBjgEGAf8B
2wGMAQAB/wHbAYwBAAH/AdEBigEKAfkBtgGAAR4B6QFYAVEBRAGNAyMBMgMJAQz/AP8AfgADBAEFAxIB
FwFGAUMBPgFxAZsBdQEwAdUBxgGFARMB8wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYsBAAH/AdoB
igEAAf8B2wGLAQAB/wHbAYsBAAH/AdoBigEAAf8B2wGLAQAB/wHbAYsBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYsBAAH/AdsBiwEAAf8B2gGKAQAB/wHbAYsBAAH/AdsBiwEAAf8B2gGKAQAB
/wHbAYsBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AcABhAEUAfABjgFwATkBygFBAT8BOwFnAwwB
EAMDAQT/AP8AfgAEAgMGAQgCLwEuAUgBYgFYAUUBmgGrAXwBJwHhAdYBjAEEAf0B2wGMAQAB/wHbAYwB
AAH/AdsBjAEAAf8B2wGLAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGLAQAB/wHbAYwBAAH/AdsBjAEAAf8B
2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwB
AAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYsBAAH/AdsBjAEAAf8B
2wGMAQAB/wHbAYsBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdIBhgEEAfwBpAF4ASwB3AFYAVEB
RAGNAisBKgFAAwQBBQQB/wD/AIYAAxsBJQE8ATsBOAFfAYIBagE/Ab4BvwGCARkB7QHbAYwBAAH/AdsB
2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8BzAF+AQoB/AG0AXsB
HAH2AVYBVQFSAagDNgFZAwwBEAQB/wD/AI4AAxIBFwMrAUICUwFRAaIBfQFrAUsB3AHRAYMBBQH+AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8BtgGAAR4B6QF5AWUBQQG2ATYB
NQEzAVQDFwEf/wD/AI4AAwcBCQMbASUBVgFQAUQBiQGVAXIBNgHPAdsBjAEAAf8B2wGMAQAB/wHbAYwB
/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHRAYMBBQH+AcwBjAEKAf0BdgFnAU4B1gJPAU4BmQInASYB
OQMPARP/AP8AhgAEAQMCAQMDJAE0A0QBeQFxAWUBUQHSAb8BfgEaAfgB2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AbIBgQEeAfUBawFiAVMBywM/AWwDIAEtBAL/
AP8AggADAgEDAwkBDAM4AVwBXgFbAVUBuQGYAXcBOgHrAdEBggEFAf4B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/Ac0BjAEKAf0BkAFzAT8B5wFYAVcBUwGtAzMB
UgMGAQcEAv8A/wB+AAMIAQoDHgEqAkgBRwGDAYABawFFAd8BtAF7ARwB9gHbAYwBAAH/AdsBjAEAAf8B
2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYsBAAH/AdsBiwEAAf8B2wGMAQAB/wHbAYwB
AAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B
2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGLAQAB/wHbAYsB
AAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AbABewEjAfQB
dAFnAU4B1wNEAXkDGAEhAwYBCP8A/wB+AAMPARMDMQFOAVYBVQFSAagBvwGHARgB+QHNAYwBCgH9AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEBAf8B2wGNAQIB/wHcAY0BBAH/AdwBjgEFAf8B3AGNAQQB
/wHbAY0BAgH/AdsBjAEBAf8B2wGNAQIB/wHbAY0BAgH/AdsBjAEBAf8B2wGMAQAB/wHbAYwBAQH/AdsB
jQECAf8B2wGNAQMB/wHbAY0BAwH/AdsBjAEBAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQIB
/wHcAY0BBAH/AdwBjQEFAf8B3AGNAQQB/wHbAY0BAgH/AdsBjAEBAf8B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8BzAF+AQoB/AGyAYEBHgH1AlEBTwGeAysBQgMMARD/AP8AegAEAQMWAR4DRAF4AWUBXwFVAcQB
0QGCAQUB/gHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYsBAAH/AdsBjQEDAf8B3AGQAQkB/wHeAZUB
FQH/Ad8BmAEaAf8B3gGWARYB/wHdAZEBDAH/AdsBjQEEAf8B3AGPAQgB/wHcAY8BCAH/AdwBjgEFAf8B
2wGMAQIB/wHcAY0BBAH/Ad0BkQEKAf8B3QGUAREB/wHdAZMBEAH/AdsBjQEEAf8B2wGMAQEB/wHbAYwB
AAH/AdsBjAEBAf8B3AGPAQgB/wHeAZQBEgH/Ad8BlwEaAf8B3gGWARYB/wHdAZEBDAH/AdwBjQEEAf8B
2wGLAQAB/wHbAYwBAAH/AdsBjAEAAf8B0QGDAQUB/gHMAYwBCgH9AV8BWwFVAbwDPgFrAxMBGv8A/wB6
AAMFAQYDIAEtAVECUAGaAXgBZgFMAdkB2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQEB/wHdAZIB
EAH/AeEBnwEsAf8B5gGyAVUB/wHpAbsBaAH/AesBvwFxAf8B6gG8AWwB/wHnAbIBVgH/AeQBqwFFAf8B
5QGvAU0B/wHjAacBPAH/AeABmgEgAf8B3QGSAQ4B/wHgAZsBIgH/AeYBsQFSAf8B5wG1AVoB/wHlAawB
RwH/Ad0BlAERAf8B3AGOAQUB/wHcAZABCQH/AeABnAElAf8B5QGsAUgB/wHpAboBZwH/AeoBvgFwAf8B
6gG8AWoB/wHoAbUBWwH/AeIBogEzAf8B3gGVARUB/wHbAYwBAQH/AdsBjAEAAf8B2wGMAQAB/wHbAYwB
AAH/AXEBZQFRAdIDTAGOAxwBJwMDAQT/AP8AdgADCwEOAykBPgFdAVoBVAG4AZYBcwE6AeoB2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGNAQQB/wHhAZ8BLAH/AekBuQFmAf8B8wHbAbEB/wH2AeQBwwH/AfcB
5wHMAf8B9wHnAcwB/wH0AdwBswH/AfEB0wGeAf8B8gHWAaUB/wHsAcMBewH/AeQBpwE+Af8B3wGaAR8B
/wHlAa0BSgH/AfMB2gGuAf8B8wHaAa8B/wHtAccBgwH/Ad8BmgEfAf8B3QGRAQwB/wHeAZcBGwH/AecB
tQFcAf8B8AHPAZcB/wH2AeQBxwH/AfYB5gHJAf8B9gHkAcUB/wH1Ad8BuQH/AesBwAF0Af8B4wGlATkB
/wHcAY4BBgH/AdsBjAEBAf8B2wGMAQAB/wHbAYwBAAH/AYgBbgFEAeMBWAFWAVQBrAMlATYDBwEJ/wD/
AHYAAxIBGAMzAVABaQFiAVQByQGrAXsBKQHyAdsBjAEAAf8B2wGMAQAB/wHcAY4BBAH/Ad0BkwEQAf8B
6gG8AWoB/wHxAdMBnwH/AfMB2gGvAf8B7gHIAYYB/wHsAcIBeQH/AfEB1AGgAf8B9wHlAcYB/wH5Ae0B
2AH/AfQB3gG3Af8B6gG9AW0B/wHfAZkBHgH/AeABnAElAf8B6QG5AWQB/wH4AekBzwH/Ae8BzQGRAf8B
5gGwAVAB/wHdAZIBDgH/Ad8BlwEaAf8B5QGrAUcB/wHyAdYBpQH/AfIB1wGnAf8B7gHKAYsB/wHqAb0B
bQH/AesBwgF5Af8B8AHSAZ0B/wHyAdYBpgH/AewBxAF9Af8B3wGaASAB/wHcAZABCgH/AdsBiwEAAf8B
2wGMAQAB/wGdAXYBNAHtAWEBXAFVAb8CLgEtAUYDDgES/wD/AHYAAxgBIAM5AV8BdAFmAVEB1AG/AX4B
GgH4AdsBjAEAAf8B2wGMAQAB/wHdAZEBCwH/AeABnAEjAf8B7wHNAZEB/wHzAdwBsgH/Ae0BxwGFAf8B
5gGwAVEB/wHlAa0BSwH/Ae8BzAGQAf8B9gHlAcYB/wH6AfEB4QH/AfQB3wG6Af8B6QG5AWUB/wHdAZEB
DAH/AeABnQEnAf8B6wG+AXAB/wH6Ae8B3AH/AewBwgF5Af8B4QGgAS8B/wHbAY0BBQH/AeEBnwEsAf8B
6gG7AWoB/wH2AeIBvwH/AfABzwGWAf8B5QGtAUwB/wHhAaABLQH/AeMBpgE7Af8B6AG3AWMB/wHvAc0B
kwH/Ae0BxQGAAf8B4QGeASoB/wHdAZIBDwH/AdsBiwEAAf8B2wGMAQAB/wGwAXsBIwH0AWoBYwFTAcwD
NAFTAxMBGf8A/wB2AAMdASgDPgFrAX0BagFJAd0BzAF+AQoB/AHbAYwBAAH/AdsBiwEAAf8B3gGUARQB
/wHjAaUBOQH/AfIB1gGmAf8B8gHXAacB/wHjAaYBPAH/AeABmwEjAf8B4wGlATkB/wHwAc4BlQH/AfQB
3gG4Af8B9QHjAcQB/wHzAdsBsgH/AegBtwFgAf8B3AGOAQQB/wHgAZ0BJwH/AeoBvgFwAf8B+QHsAdgB
/wHpAbkBZwH/Ad4BlwEcAf8B2gGLAQMB/wHkAagBQwH/Ae0ByAGGAf8B9AHeAbYB/wHqAbsBawH/AdwB
jwELAf8B2wGLAQMB/wHcAY0BBgH/Ad0BkwESAf8B5QGsAUkB/wHmAbABUQH/AeABnQEoAf8B3QGSAQ8B
/wHbAYsBAAH/AdsBjAEAAf8BvwGGARgB+QF0AWgBUAHVAzkBXwMYASD/AP8AdgADHwEsAkEBQAFwAYAB
awFFAd8BzAGMAQoB/QHbAYwBAAH/AdsBiwEAAf8B3gGVARcB/wHkAagBPwH/AfIB1wGnAf8B8QHVAaQB
/wHiAaIBMwH/Ad4BlgEXAf8B3gGWARgB/wHkAagBPwH/AeoBvgFwAf8B8AHRAZwB/wHzAdoBsAH/AekB
uQFnAf8B3AGPAQYB/wHgAZ0BJwH/AeoBvgFwAf8B+QHsAdgB/wHpAbkBZwH/Ad4BlwEcAf8B2gGLAQMB
/wHkAasBSAH/Ae4BygGLAf8B8wHaAa8B/wHoAbgBYwH/AdsBjgEGAf8B2wGMAQIB/wHbAYwBAgH/AdwB
jgEHAf8B3gGXARoB/wHfAZgBHQH/Ad0BkgEOAf8B3AGOAQUB/wHbAYwBAAH/AdsBjAEAAf8BxgF+ARQB
+gF3AWgBTQHYAjwBOwFkAhoBGQEj/wD/AHYAAyABLQJCAUEBcgGEAW0BRwHgAcwBjAEKAf0B2wGMAQAB
/wHbAYoBAAH/Ad4BlgEYAf8B5AGqAUIB/wHyAdcBqAH/AfEB1AGhAf8B4QGgAS4B/wHdAZMBEAH/AdsB
jQEDAf8B3AGQAQoB/wHkAasBRgH/Ae0BxwGGAf8B8wHZAa4B/wHqAbsBagH/AdwBjwEIAf8B4QGfASwB
/wHrAcABdAH/AfkB7QHaAf8B6gG8AWwB/wHfAZoBIQH/AdsBiwEEAf8B5QGsAUoB/wHuAcsBjgH/AfIB
2QGrAf8B5wG2AV8B/wHbAY0BBAH/AdsBjAEBAf8B2wGMAQAB/wHbAYwBAAH/AdsBiwEAAf8B2wGLAQAB
/wHbAYsBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AcsBhwEPAfsBeAFmAUwB2QI8ATsBZQMaAST/
AP8AdgADHgErA0ABbwF/AWoBSQHeAcwBfgEKAfwB2wGMAQAB/wHbAYoBAAH/Ad4BlgEYAf8B5AGqAUIB
/wHyAdcBqAH/AfEB1AGhAf8B4QGgAS4B/wHdAZIBEAH/AdsBiwEAAf8B2gGLAQEB/wHjAagBQAH/Ae0B
xwGFAf8B8wHZAa4B/wHqAbsBawH/Ad0BkAEKAf8B4gGjATQB/wHsAcQBfQH/AfoB7wHeAf8B7AHBAXcB
/wHhAZ8BLQH/AdwBjQEFAf8B5QGtAUoB/wHuAcsBjgH/AfIB2QGrAf8B5wG3AV8B/wHbAY4BBAH/AdsB
jAEBAf8B2wGMAQAB/wHbAYwBAAH/AdsBiwEAAf8B2wGLAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AcUBfgEUAfoBdwFoAU0B2AI7AToBYgMZASL/AP8AdgADGwElAjwBOwFlAXgBZgFMAdkB
xgF+ARQB+gHbAYwBAAH/AdsBigEAAf8B3gGVARgB/wHkAakBQQH/AfIB1wGoAf8B8QHUAaIB/wHhAaEB
LwH/Ad0BkgEQAf8B2wGLAQAB/wHaAYoBAAH/AeMBpwFBAf8B7QHHAYYB/wHzAdkBrQH/AeoBvAFrAf8B
3QGUAREB/wHnAbMBWQH/AfIB1QGjAf8B/AH3Ae4B/wHyAdcBqQH/AegBtwFgAf8B3QGUARMB/wHmAa4B
TQH/Ae4BygGNAf8B8wHZAawB/wHoAbcBYAH/AdsBjgEEAf8B2wGMAQEB/wHbAYwBAAH/AdsBjAECAf8B
3AGPAQkB/wHcAZABCgH/AdwBjgEGAf8B2wGNAQIB/wHbAYwBAAH/AdsBjAEAAf8BvAGHARwB9wFvAWQB
UQHRAzYBWQIWARUBHf8A/wB2AAIWARUBHQM2AVkBbgFjAVIB0AGzAXsBHAH2AdsBjAEAAf8B2wGLAQAB
/wHeAZQBFQH/AeMBpwE8Af8B8gHWAaYB/wHyAdYBpQH/AeMBpgE7Af8B3gGVARUB/wHbAYsBAQH/AdsB
jAEDAf8B5AGrAUkB/wHuAcsBjwH/AfIB2AGpAf8B6QG6AWcB/wHdAZUBEwH/AekBugFoAf8B9AHcAbMB
/wH9AfsB9gH/AfUB4QG+Af8B6wHAAXYB/wHeAZcBGQH/AeUBrQFKAf8B7gHIAYcB/wH0AdsBsgH/AekB
ugFoAf8B3QGRAQsB/wHbAY0BAwH/AdwBjgEFAf8B3QGSAQ8B/wHhAZ4BKgH/AeEBnwEsAf8B3QGUARQB
/wHcAY8BBwH/AdsBjAEAAf8B2wGMAQAB/wGrAXsBKQHyAWUBXwFUAccDMQFOAxEBFv8A/wB2AAMPARMD
LgFIAWEBXQFVAcIBnwF3AS8B7wHbAYwBAAH/AdsBiwEAAf8B3QGSAQ8B/wHhAaABLQH/AfEB0wGgAf8B
8wHbAbAB/wHnAbYBXgH/AeABnAEkAf8B2wGNAQMB/wHcAZEBCwH/AegBtwFfAf8B8gHYAakB/wHxAdQB
oAH/AecBswFZAf8B3AGPAQkB/wHkAakBQAH/Ae4BygGLAf8B+wHzAeQB/wHuAckBiQH/AeMBqAE+Af8B
3AGPAQkB/wHjAaUBOAH/AewBwgF5Af8B9gHiAcEB/wHtAcUBfwH/AeABmgEgAf8B3AGPAQkB/wHeAZUB
FAH/AeIBpQE3Af8B7AHFAYAB/wHsAcQBfwH/AeIBogEyAf8B3QGTARIB/wHbAYsBAAH/AdsBjAEAAf8B
lgFzAToB6gFdAVoBVAG4AyoBPwMLAQ7/AP8AdgADCAEKAyUBNwFWAVUBUwGqAYYBbQFDAeIB2wGMAQAB
/wHbAYwBAAH/AdwBjwEHAf8B3gGXARkB/wHsAcMBfAH/AfIB1wGoAf8B8QHTAZ8B/wHqAb8BcQH/AecB
swFWAf8B6AG4AWIB/wHvAc8BlgH/AfQB3QG1Af8B7AHDAXsB/wHjAaYBOwH/AdsBjQEFAf8B4QGfASoB
/wHqAbwBawH/AfYB4wHCAf8B6QG5AWUB/wHgAZsBIwH/AdwBjAEEAf8B4AGaASEB/wHnAbMBVwH/AfMB
2wGxAf8B8gHVAaIB/wHrAcABdQH/AecBtAFaAf8B6QG5AWYB/wHuAckBiQH/AfEB1AGhAf8B7AHFAYAB
/wHgAZwBJgH/Ad0BkQENAf8B2wGMAQAB/wHbAYwBAAH/AXsBagFMAdsCUQFPAZ4DIQEvAwYBB/8A/wB2
AAMCAQMDGwEmA0sBjAFvAWQBUQHRAdsBjAEAAf8B2wGMAQAB/wHbAYwBAQH/AdwBjwEGAf8B5QGuAUwB
/wHuAcsBjgH/AfcB5gHLAf8B9AHeAbcB/wHyAdkBqwH/AfQB3QG2Af8B9QHgAbwB/wHyAdgBqQH/AeUB
rgFMAf8B3gGXARsB/wHbAYwBAwH/Ad8BlwEaAf8B5QGtAUsB/wHuAcwBkAH/AeQBqgFEAf8B3gGTARIB
/wHbAYsBAgH/AdwBkAELAf8B4gGhATAB/wHuAcoBiwH/AfQB3AGyAf8B9gHiAcAB/wHzAdgBqwH/AfQB
3AGyAf8B9wHlAccB/wHxAdMBngH/AegBtwFgAf8B3QGSAQ4B/wHbAY0BBAH/AdsBjAEAAf8B0gGDAQUB
/gFpAWIBVAHJA0YBfwMYASAEAf8A/wB2AAQBAxMBGQI8ATsBZQFdAVoBVAG4AdEBggEFAf4B2wGMAQAB
/wHbAYwBAAH/AdsBjQECAf8B3gGXARkB/wHjAacBPQH/AeoBvQFvAf8B7QHHAYQB/wHuAcwBjwH/Ae4B
ygGLAf8B6gG9AW4B/wHlAa0BSQH/Ad8BmAEbAf8B3AGPAQcB/wHbAYwBAQH/AdwBkAEIAf8B3gGWARcB
/wHhAaABLQH/Ad4BlQEVAf8B3AGOAQYB/wHbAYwBAQH/AdsBjQEDAf8B3QGTAREB/wHiAaQBNQH/AegB
tgFfAf8B7QHHAYQB/wHuAcsBjQH/Ae4ByQGIAf8B7AHBAXcB/wHlAawBSAH/AeABmgEiAf8B2wGNAQQB
/wHbAYwBAQH/AdEBggEFAf4BzAF+AQoB/AFZAVYBVAGvAzYBVwMQARX/AP8AfgADCwEOAykBPQJPAU4B
lwGcAXcBMQHuAcYBfgEUAfoB2wGMAQAB/wHbAYwBAAH/AdsBjQEEAf8B3QGUARMB/wHhAZ8BLgH/AeQB
qgFEAf8B5gGvAU8B/wHlAawBSgH/AeIBoQExAf8B3gGWARYB/wHcAY4BBQH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAQH/AdsBjQECAf8B3AGOAQUB/wHbAY0BAgH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsB
jQEDAf8B3QGRAQ0B/wHgAZwBJgH/AeMBqQFCAf8B5gGvAU4B/wHlAawBSAH/AeIBowE1Af8B3gGWARgB
/wHcAY4BBgH/AdsBjAEAAf8B2wGMAQAB/wG/AYcBGAH5AZMBcwE6AekDSwGNAyMBMgMJAQz/AP8AfgAD
BAEFAxIBFwJBAUABcQF0AWgBUAHVAa0BfwEmAfMB2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGLAQAB
/wHaAYoBAAH/AdsBiwEAAf8B2wGLAQAB/wHaAYoBAAH/AdsBiwEAAf8B2wGLAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGLAQAB/wHbAYsBAAH/AdoBigEAAf8B2wGLAQAB/wHbAYsBAAH/AdoB
igEAAf8B2wGLAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wGjAXkBKwHwAWkBYQFUAcoDPQFnAwwB
EAMDAQT/AP8AfgAEAgMGAQgDLgFIAVECUAGaAYQBbgFHAeEBzQGMAQoB/QHbAYwBAAH/AdsBjAEAAf8B
2wGMAQAB/wHbAYsBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYsBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwB
AAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B
2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBiwEAAf8B2wGMAQAB/wHbAYwB
AAH/AdsBiwEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8BzAF+AQoB/AF9AWsBSwHcA0sBjQMqAUAD
BAEFBAH/AP8AhgADGwElAzkBXwFgAV0BVQG+AZ0BdgE0Ae0B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B
2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwB
AAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B
2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wGLAW0BOQHHAU8BSgFCAX4DFgEeAwUBBv8A/wCO
AAMCAQMDDAEQAi4BLQFGAVoBUgFEAY4BpwF5ASoB3gHJAYUBEQH0AdsBjAEAAf8B2wGMAQAB/wHbAYwB
AAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B
2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwB
AAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B
xAGFARMB8gGgAXcBLwHYAVQBTgFDAYYCKgEpAT4DCgENBAL/AP8AkgADAgEDAxABFQE1ATQBMwFRAWkB
XAFEAaQBnQF0ATAB1wHIAYYBDwH1AdcBiQECAf4B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B1wGIAQIB/gHFAYQBEwHzAZcBcwE0AdEBYgFYAUUBmgIwAS8BSQMNARED
AgED/wD/AJYABAEDAgEDAxQBGwEtAiwBQwFjAVgBRQGbAaABdQEsAdkB1QGMAQQB/QHbAYwBAAH/AdsB
AAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AZMBcwE6AekBXAFZAVQBtgM0AVQDFwEf/wD/AI4AAwcB
CQMbASUDSgGJAW8BZQFTAc8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHSAYYBBAH8AZgBcgEzAdIBXAFUAUUB
kgMoATsDEgEXAwIBA/8A/wCiAAMGAQgDEgEYAjMBMgFPAVYBUAFEAYkBiAFsATsBxAGxAX8BJAHlAdEB
igEKAfkB1wGJAQIB/gHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AWUBXwFUAccDRgF+AxYBHgMFAQb/AP8AjgADAgEDAwwBEAIuAS0BRgNMAY4BfwFqAUkB
3gGwAXsBIwH0AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHXAYgBAgH+Ac4BhgEMAfgBqwF8AScB4QGCAWoBPwG+AVABSwFCAYECLwEuAUgD
DwEUAwYBB/8A/wCqAAQBAwwBEAMmATgBTAFIAUEBegF3AWQBQgGzAaQBeAEsAdwBvQGCARcB7gHLAYkB
DgH3AdIBhgEEAfwB1wGIAQIB/gHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B
2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHXAYgBAgH+AdIBhgEEAfwBygGEAQ4B9gG+AYIB
GQHtAaABeAEsAdkBcgFhAUMBrQFGAUMBPgFxAyMBMgMKAQ0EAf8A/wCyAAMDAQQDDAEPAxgBIQEyATEB
MAFMAU0BSQFBAXwBdQFjAUMBsQGbAXUBMAHVAcABhAEUAfAB1AGJAQYB+wHbAYwBAAH/AdsBjAEAAf8B
2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B1wGJAQIB/gHSAYYB
CAH6Ab0BggEWAe8BmAFyATMB0gFxAWABRAGsAUoBRgE/AXYCLwEuAUcDFgEeAwoBDQMCAQP/AP8AugAE
AQMCAQMDEwEZAiUBJAE1AToBOQE3AVsBTwFKAUIBfgFkAVgBRQGcAXcBZAFCAbMBiAFsATsBxAGVAXEB
NAHQAZ4BdAEwAdcBowF4ASwB2wGnAXkBKgHeAaMBeAEsAdsBngF2ATAB1gGVAXIBNgHPAYUBawE8AcIB
dQFjAUMBsQFiAVgBRQGaAUwBSAFBAXoBOAE3ATUBVwMiATEDEQEWBAIEAf8A/wDKAAQCAwUBBgMTARkD
IwEyAjUBMwFTAUUBQwE+AW8BVQFOAUMBiAFgAVYBRQGXAWcBWwFFAaABawFdAUMBpQFnAVoBRQGgAV8B
VQFEAZYBVAFOAUMBhgFEAUIBPQFsAjMBMgFPAyEBLwMRARYDAwEEBAH/AP8A2gAEAgMGAQgDDAEPAxME
GQEiAx4BKgMhAS8BJAIjATMDJQE2ASQCIwEzAyABLgMdASkDGAEhAxIBGAMLAQ4DBgEHBAH/AP8A9gAE
AQcCAQMEAgQB/wD/AP8A/wD/ANUAAUIBTQE+BwABPgMAASgDAAHIAwABMgMAAQEBAAEBBQABeAEFFgAD
/wEABv8BwBUABv8BwBUABv8BwBUABv8BwBUAAv8BwAEAAX8B/wHAFQAC/wHAAQABfwH/AcAVAAH/Af4C
AAEPAf8BwBUAAf8B8AIAAQMB/wHAFQAB/wHwAgABAQH/AcAVAAH/AcADAAF/AcAVAAH/AcADAAF/AcAV
AAH/BAABHwHAFQAB/gQAAR8BwBUAAf4EAAEPAcAVAAH+BAABDwHAFQAB+AQAAQcBwBUAAfgEAAEDAcAV
AAH4BAABAwHAFQAB+AQAAQMBwBUAAfAEAAEDAcAVAAHwBAABAQHAFQAB8AQAAQEBwBUAAfAEAAEBAcAV
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8BqwF7ASkB8gF3AWgBTQHYA0kBhgMpAT4DCgENBAL/
AP8AkgADAgEDAxABFQMzAVEBVAFSAVEBpAF0AWcBTgHXAbIBgAEeAfUB0QGDAQUB/gHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHRAYIBBQH+Aa0BfgEmAfMBbwFkAVEB
0QFRAlABmgMvAUkDDQERAwIBA/8A/wCWAAQBAwIBAwMUARsDLAFDAVEBUAFPAZsBeAFmAUwB2QHMAYwB
CgH9AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B
2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwB
AAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AcwBfgEKAfwB
cQFlAVEB0gNNAZIDKAE7AxIBFwMCAQP/AP8AogADBgEIAxIBGAMyAU8DSgGJAWUBXwFVAcQBjQFzAUEB
5QG/AYcBGAH5AdEBgwEFAf4B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsB
jAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB
/wHbAYwBAAH/AdsBjAEAAf8B0QGCAQUB/gG/AX4BGgH4AYQBbgFHAeEBYAFdAVUBvgJHAUYBgQMuAUgD
DwEUAwYBB/8A/wCqAAQBAwwBEAMmATgDRAF6AVsBWAFUAbMBfQFrAUsB3AGcAXcBMQHuAbwBhgEcAfcB
zAF+AQoB/AHRAYIBBQH+AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwB
AAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdEBggEFAf4BzAF+AQoB/AGzAXsBHAH2AZ0BdgE0Ae0B
eAFmAUwB2QFYAVcBUwGtAkEBQAFxAyMBMgMKAQ0EAf8A/wCyAAMDAQQDDAEPAxgBIQIxATABTANFAXwB
WgFYAVUBsQF0AWgBUAHVAaMBeQErAfABywGGAQ8B+wHbAYwBAAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwB
AAH/AdsBjAEAAf8B2wGMAQAB/wHbAYwBAAH/AdsBjAEAAf8B0QGDAQUB/gHFAX4BFAH6AZ8BdwEvAe8B
cQFlAVEB0gFYAVYBVAGsA0MBdgMuAUcDFgEeAwoBDQMCAQP/AP8AugAEAQMCAQMDEwEZAyQBNQM4AVsD
RgF+AlEBUAGcAVsBWAFUAbMBZQFfAVUBxAFuAWMBUgHQAXQBZwFOAdcBewFqAUwB2wF/AWoBSQHeAXsB
agFMAdsBdgFnAU4B1gFvAWUBUwHPAWEBXQFVAcIBWgFYAVUBsQFRAlABmgNEAXoDNgFXAyIBMQMRARYE
AgQB/wD/AMoABAIDBQEGAxMBGQMjATIDNAFTA0ABbwNJAYgCTwFOAZcBUwFSAVEBoAFUAVMBUgGlAVMB
UgFRAaADTgGWA0kBhgM/AWwDMgFPAyEBLwMRARYDAwEEBAH/AP8A2gAEAgMGAQgDDAEPAxMEGQEiAx4B
KgMhAS8DIwEzAyUBNgMjATMDIAEuAx0BKQMYASEDEgEYAwsBDgMGAQcEAf8A/wD2AAQBBwIBAwQCBAH/
AP8A/wD/AP8A1QABQgFNAT4HAAE+AwABKAMAAcgDAAEyAwABAQEAAQEFAAF4AQUWAAP/AQAG/wHAFQAG
/wHAFQAG/wHAFQAG/wHAFQAC/wHAAQABfwH/AcAVAAL/AcABAAF/Af8BwBUAAf8B/gIAAQ8B/wHAFQAB
/wHwAgABAwH/AcAVAAH/AfACAAEBAf8BwBUAAf8BwAMAAX8BwBUAAf8BwAMAAX8BwBUAAf8EAAEfAcAV
AAH+BAABHwHAFQAB/gQAAQ8BwBUAAf4EAAEPAcAVAAH4BAABBwHAFQAB+AQAAQMBwBUAAfgEAAEDAcAV
AAH4BAABAwHAFQAB8AQAAQMBwBUAAfAEAAEBAcAVAAHwBAABAQHAFQAB8AQAAQEBwBUAAfAEAAEBAcAV
AAHwBAABAQHAFQAB8AQAAQEBwBUAAfAEAAEBAcAVAAHwBAABAQHAFQAB8AQAAQEBwBUAAfAEAAEBAcAV
AAHwBAABAQHAFQAB8AQAAQEBwBUAAfAEAAEBAcAVAAHwBAABAQHAFQAB8AQAAQMBwBUAAfgEAAEDAcAV
AAH4BAABAwHAFQAB+AQAAQMBwBUAAf4EAAEPAcAVAAH+BAABDwHAFQAB/gQAAQ8BwBUAAf8EAAEfAcAV
AAH/BAABPwHAFQAB/wHAAwABfwHAFQAB/wHgAwAB/wHAFQAB/wHwAgABAQH/AcAVAAH/AfgCAAEDAf8B
wBUAAv8CAAEfAf8BwBUAAv8BgAEAAT8B/wHAFQAC/wH+AQ8C/wHAFQAG/wHAFQAL
AAHwBAABAQHAFQAB8AQAAQEBwBUAAfAEAAEBAcAVAAHwBAABAwHAFQAB+AQAAQMBwBUAAfgEAAEDAcAV
AAH4BAABAwHAFQAB/gQAAQ8BwBUAAf4EAAEPAcAVAAH+BAABDwHAFQAB/wQAAR8BwBUAAf8EAAE/AcAV
AAH/AcADAAF/AcAVAAH/AeADAAH/AcAVAAH/AfACAAEBAf8BwBUAAf8B+AIAAQMB/wHAFQAC/wIAAR8B
/wHAFQAC/wGAAQABPwH/AcAVAAL/Af4BDwL/AcAVAAb/AcAVAAs=
</value>
</data>
<metadata name="ilTabIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
@ -610,8 +603,8 @@
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA5hgAAAJNU0Z0AUkBTAIBAQUB
AAEIAQEBCAEBARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASAa
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA5BgAAAJNU0Z0AUkBTAIBAQUB
AAEgAQEBIAEBARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASAa
AAM3AVoDWAG4A2MB3wJjAV0B3wFiAl0B3wNdAd8DXQHfAWECXQHfA2MB3wNjAd8DVQGsAzABS8wAAzsB
YgNdAcUDaAH0AZ8BZQExAf8BlwFTARcB/wGWAUsBCQH/AZMBRgEBAf8BjAFDAQMB/wF9AUABCwH/AWsB
QAEaAf8BbgFQATYB/wNoAfADWgG3AzQBVMQAAzUBVQNdAccCbgFaAfUBuAFlARsB/wG5AVgBAgH/AckB
@ -632,10 +625,10 @@
/wFjAWEBXQHfwAAB/wHMAZ8C/wGsAWMC/wGTATMC/wGBAREC/wF5AQIC/wGCARYC/wGaAUsC/wGuAXgC
/wGlAVcC/wGBARcC/wF5AQQC/wF4AQAC/wF4AQAB/wHwAXEBAAH/AdUBcQEXAf8CYwFdAd/AAAH/AekB
1QL/AbwBgQL/AaQBVAL/AY4BKgL/AX8BDQL/AXkBAgL/AXsBCQL/AYIBHQL/AXgBAAL/AXgBAAL/AXgB
AQL/AXoBBAL/AXoBAwH/AfMBdAEDAf8B4gGEATIB/wNjAd/AAANeAdIBiAGBAXEB+QH/AbsBfQL/AaMB
AQL/AXoBBAL/AXoBAwH/AfMBdAEDAf8B4gGEATIB/wNjAd/AAANeAdIBhQF9AWsB+QH/AbsBfQL/AaMB
UgL/AZABLAL/AYIBEwL/AX0BCAL/AXoBBAL/AXkBAgL/AXoBBAL/AX0BCQL/AYABDwL/AX8BDQH/AfgB
hgEgAf8DaAH0A1gBuMAAAzwBZgNjAdUDfAH4Af8BvgGFAv8BqgFfAv8BmQE+Av8BjQEnAv8BhgEaAv8B
gwEVAv8BhQEZAv8BigEiAv8BjQEoAv8BkwEzAf8CbgFoAfUDXQHFAzYBWcQAA0IBcgNjAdUBiAGDAXsB
gwEVAv8BhQEZAv8BigEiAv8BjQEoAv8BkwEzAf8CbgFoAfUDXQHFAzYBWcQAA0IBcgNjAdUBhQGAAXUB
+QH/AckBmQL/AbwBfwL/Aa4BZgL/AaQBUwL/AZ8BSgL/AZ8BSwL/AaMBUQL/AacBWAH/A3wB+ANdAccD
OwFizAADPAFlA14B0gH/Ae8B4AL/AdwBvAL/Ac0BnwL/AcEBigL/AbsBfwL/Ab8BhgL/Ac0BoQL/AekB
1gH/A1wBxAM1AVXIAANnAe8CZwFZAe8BZwFdAVkB7wFnAVsBWQHvAWcBWwFZAe8BZwJZAe8BZwFkAVkB
@ -661,8 +654,8 @@
8wFzAQAB/wH6AXYBAAH/Af4BeAEAAv8BewEIAv8BiAEnAv8BogFTAf8B/gGBARcB/wH8AXgBBAH/AewB
bwEAAf8BwQFbAQAB/wGGAUEBAwH/AXgBVgE2Af8DYwHfBP8BrAGWAWAB/wGDAYIBfwH/AYUBggF9Af8B
swGTAUQB/wHPAZQBAAH/Ad4BzAGfAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOoAf8I
AAMaASQDUgGgAmMBSAH2AaIBcwEAAf8BrgF8AQAB/wGwAX0BAAH/AagBeAEAAf8BlQFqAQAB/wGAAXUB
IQH+AVwCWQHGA1cBtQMWAR4IAAMCAQMDGgEjAzgBXANUAagDYgHXA3AB8QOAAf4DgQH/A4EB/wOBAf8D
AAMaASQDUgGgAmMBSAH2AaIBcwEAAf8BrgF8AQAB/wGwAX0BAAH/AagBeAEAAf8BlQFqAQAB/wGAAXgB
JAH+AVwCWQHGA1cBtQMWAR4IAAMCAQMDGgEjAzgBXANUAagDYgHXA3AB8QOAAf4DgQH/A4EB/wOBAf8D
gQH9A2gB8ANhAdQDUwGlAzYBWQMYASAB/wGyAW8B/wH9AYABEQH/AfwBdwEBAf8B/QF3AQAC/wF4AQAC
/wF/AQ8C/wGSATsC/wGzAYMC/wHqAeAC/wGQAT0C/wF7AQoB/wH8AXcBAAH/AeUBbAEAAf8BsQFUAQAB
/wGEAUsBGgH/A2MB3wT/AdkBqgE3Af8BvgGYATgB/wHAAZgBNgH/AdwBogEUAf8BzwGUAQAB/wHeAcwB
@ -688,7 +681,7 @@
wAL/AeoB4AL/AZ0BVwL/AX4BEQL/AXgBAAL/AXgBAAH/AfABcQEAAf8BywFkAQkB/wFjAWEBXQHfBP8B
hgGDAX4B/wOBAf8DgQH/AYYBgwF7Af8BzwGUAQAB/wHeAcwBnwH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D
gQH/A4EB/wOBAf8DkwH/A2IB7gHvAbQBIQH/AfcB3AGXCf8DkQH/A4gB/wOHAf8DhwH/A4EB/wNXAf8D
5gH/A6MB/wG2AZEBNgH/AXUBagFBAfkEAANXAbIDZQHnA4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB
5gH/A6MB/wG2AZEBNgH/AW8BagFBAfkEAANXAbIDZQHnA4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB
/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wNVAa8B/wHMAZ8C/wGsAWMC/wGTATMC/wGBAREC/wF5AQIC
/wGCARYC/wGaAUsC/wGuAXgC/wGlAVcC/wGBARcC/wF5AQQC/wF4AQAC/wF4AQAB/wHwAXEBAAH/AdUB
cQEXAf8CYwFdAd8E/wGLAYYBeQH/A4EB/wOBAf8BjgGGAXEB/wHPAZQBAAH/Ad4BzAGfAf8DoQH/A6EB
@ -699,7 +692,7 @@
pwGUAWcB/wGDAYIBfwH/AYUBgwF+Af8BsAGUAU4B/wHTAZcBAgH/AeABzgGfAf8D5wH/A+cB/wPnAf8D
5wH/A+cB/wPnAf8D5wH/A+cB/wPAAf8DBwEJA2IB7gHxAbwBOwH/AfoB6gHCAf8D3AH/A3cB/wNoAf8D
aAH/A2gB/wMyCf8B8gHdAakB/wHqAakBCAH/Az4BagQAA2QB2wNoAfQDgQH/A4EB/wOBAf8DgQH/A4EB
/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A1UBrwNeAdIBiAGBAXEB+QH/AbsBfQL/AaMB
/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A1UBrwNeAdIBhQF9AWsB+QH/AbsBfQL/AaMB
UgL/AZABLAL/AYIBEwL/AX0BCAL/AXoBBAL/AXkBAgL/AXoBBAL/AX0BCQL/AYABDwL/AX8BDQH/AfgB
hgEgAf8DaAH0A1gBuAT/AdcBsQFSAf8BmgGPAXQB/wGgAZIBbQH/AeABrwE3Af8B5wGpARAB/wHrAdUB
oAH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DkwH/BAADMwFRA2gB8AHzAcYBWAH/AfoB
@ -707,17 +700,16 @@
gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wN9AfoDVQGqAzwBZgNjAdUDfAH4Af8BvgGFAv8B
qgFfAv8BmQE+Av8BjQEnAv8BhgEaAv8BgwEVAv8BhQEZAv8BigEiAv8BjQEoAv8BkwEzAf8CbgFoAfUD
XQHFAzYBWQT/AfQBzQFsAf8B9AHLAWYB/wH0AcsBZQH/AfQBywFlAf8B8QHBAUkB/wH5AeMBrAH/A4kB
/wOJAf8DiQH/A4kB/wOJAf8DiQH/A4kB/wOJAf8DmgH/CAADIgExA18ByQGDAX0BZwH6AfMBygFlAf8B
+QHhAaYB/wH7Ae0BzAH/AfsB7AHIAf8B+AHdAZsB/wGwAYIBcgH+AmUBXgHiAz0BaAQBCAADBgEIAzEB
TANQAZsDZQHsA30B+gOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DfQH6A2oB7QNQAZsDLwFJBAAD
QgFyA2MB1QGIAYMBewH5Af8ByQGZAv8BvAF/Av8BrgFmAv8BpAFTAv8BnwFKAv8BnwFLAv8BowFRAv8B
pwFYAf8DfAH4A10BxwM7AWIEAED/EAADDwETA0cBggNkAdsBmAF+AW8B/ANnAeoDVAGoAygBOxwAAwUB
BgMSARcDOgFgA1EBnwNfAdMDZwHvA2MB9gNiAe4DXgHSA1EBngM5AV8DEQEWAwUBBgwAAzwBZQNeAdIB
/wHvAeAC/wHcAbwC/wHNAZ8C/wHBAYoC/wG7AX8C/wG/AYYC/wHNAaEC/wHpAdYB/wNcAcQDNQFVCAAB
QgFNAT4HAAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/wEAAcABAwYAAYABAWYAAYABAQYAAcAB
AwgAAf8B/AIAAcABAwIAAf8B/AIAAYABAQIAAf8B+QYAAf8B+QYAAfABEwYAAcABAwYAAYABAQL/BAAB
gAEBAcABAQUAAQEBgAYAAQEHAAEBBwABAQcAAQEGAAGAAQEGAAHAAQMCAAGAAQECAAHwAR8BwAEBAcAB
Aws=
/wOJAf8DiQH/A4kB/wOJAf8DiQH/A4kB/wOJAf8DmgH/CAADIgExA18ByQJ9AWcB+gHzAcoBZQH/AfkB
4QGmAf8B+wHtAcwB/wH7AewByAH/AfgB3QGbAf8BqgGAAXUB/gJlAV4B4gM9AWgEAQgAAwYBCAMxAUwD
UAGbA2UB7AN9AfoDgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A30B+gNqAe0DUAGbAy8BSQQAA0IB
cgNjAdUBhQGAAXUB+QH/AckBmQL/AbwBfwL/Aa4BZgL/AaQBUwL/AZ8BSgL/AZ8BSwL/AaMBUQL/AacB
WAH/A3wB+ANdAccDOwFiBABA/xAAAw8BEwNHAYIDZAHbAY8BfgFvAfwDZwHqA1QBqAMoATscAAMFAQYD
EgEXAzoBYANRAZ8DXwHTA2cB7wNjAfYDYgHuA14B0gNRAZ4DOQFfAxEBFgMFAQYMAAM8AWUDXgHSAf8B
7wHgAv8B3AG8Av8BzQGfAv8BwQGKAv8BuwF/Av8BvwGGAv8BzQGhAv8B6QHWAf8DXAHEAzUBVQgAAUIB
TQE+BwABPgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYAA/8BAAHAAQMGAAGAAQFmAAGAAQEGAAHAAQMI
AAH/AfwCAAHAAQMCAAH/AfwCAAGAAQECAAH/AfkGAAH/AfkGAAHwARMGAAHAAQMGAAGAAQEC/wQAAYAB
AQHAAQEFAAEBAYAGAAEBBwABAQcAAQEHAAEBBgABgAEBBgABwAEDAgABgAEBAgAB8AEfAcABAQHAAQML
</value>
</data>
</root>

View File

@ -0,0 +1,135 @@
namespace qtcnet_client.Forms.Games
{
partial class GuessTheNumber
{
/// <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()
{
lblHeader = new Label();
nudNumberGuess = new NumericUpDown();
btnGuess = new Button();
lblPrizeInfo = new Label();
lblResult = new Label();
btnClaimPrize = new Button();
((System.ComponentModel.ISupportInitialize)nudNumberGuess).BeginInit();
SuspendLayout();
//
// lblHeader
//
lblHeader.Font = new Font("Segoe UI", 15F, FontStyle.Bold);
lblHeader.Location = new Point(12, 9);
lblHeader.Name = "lblHeader";
lblHeader.Size = new Size(486, 62);
lblHeader.TabIndex = 0;
lblHeader.Text = "Please Wait, Getting Number...";
lblHeader.TextAlign = ContentAlignment.MiddleCenter;
//
// nudNumberGuess
//
nudNumberGuess.Location = new Point(190, 127);
nudNumberGuess.Maximum = new decimal(new int[] { 500, 0, 0, 0 });
nudNumberGuess.Name = "nudNumberGuess";
nudNumberGuess.Size = new Size(120, 23);
nudNumberGuess.TabIndex = 1;
//
// btnGuess
//
btnGuess.ForeColor = Color.Black;
btnGuess.Location = new Point(225, 156);
btnGuess.Name = "btnGuess";
btnGuess.Size = new Size(46, 23);
btnGuess.TabIndex = 2;
btnGuess.Text = "Guess";
btnGuess.UseVisualStyleBackColor = true;
btnGuess.Click += btnGuess_Click;
//
// lblPrizeInfo
//
lblPrizeInfo.Font = new Font("Segoe UI", 9F, FontStyle.Bold);
lblPrizeInfo.ForeColor = Color.Black;
lblPrizeInfo.Location = new Point(142, 180);
lblPrizeInfo.Name = "lblPrizeInfo";
lblPrizeInfo.Size = new Size(212, 63);
lblPrizeInfo.TabIndex = 3;
lblPrizeInfo.Text = "Prize Possibilities:\r\nGuess Is Higher By 10 - Jackpot Spin\r\nGuess Is Lower By 10 - 200 Q's\r\nGuess Is Equal - Jackpot";
lblPrizeInfo.TextAlign = ContentAlignment.TopCenter;
//
// lblResult
//
lblResult.Font = new Font("Segoe UI", 9F, FontStyle.Bold);
lblResult.Location = new Point(12, 81);
lblResult.Name = "lblResult";
lblResult.Size = new Size(477, 15);
lblResult.TabIndex = 4;
lblResult.Text = "lblResult";
lblResult.TextAlign = ContentAlignment.MiddleCenter;
lblResult.Visible = false;
//
// btnClaimPrize
//
btnClaimPrize.ForeColor = Color.Black;
btnClaimPrize.Location = new Point(200, 100);
btnClaimPrize.Name = "btnClaimPrize";
btnClaimPrize.Size = new Size(99, 23);
btnClaimPrize.TabIndex = 5;
btnClaimPrize.Text = "PRIZE_CLAIM";
btnClaimPrize.UseVisualStyleBackColor = true;
btnClaimPrize.Visible = false;
//
// GuessTheNumber
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
BackColor = Color.DodgerBlue;
ClientSize = new Size(511, 253);
Controls.Add(btnClaimPrize);
Controls.Add(lblResult);
Controls.Add(lblPrizeInfo);
Controls.Add(btnGuess);
Controls.Add(nudNumberGuess);
Controls.Add(lblHeader);
ForeColor = Color.White;
FormBorderStyle = FormBorderStyle.FixedDialog;
MaximizeBox = false;
MinimizeBox = false;
Name = "GuessTheNumber";
StartPosition = FormStartPosition.CenterScreen;
Text = "QtC.NET qGame - Guess The Number";
Load += GuessTheNumber_Load;
((System.ComponentModel.ISupportInitialize)nudNumberGuess).EndInit();
ResumeLayout(false);
}
#endregion
private Label lblHeader;
private NumericUpDown nudNumberGuess;
private Button btnGuess;
private Label lblPrizeInfo;
private Label lblResult;
private Button btnClaimPrize;
}
}

View File

@ -0,0 +1,132 @@
using qtcnet_client.Services;
using QtCNETAPI.Services.ApiService;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace qtcnet_client.Forms.Games
{
public partial class GuessTheNumber : Form
{
private IApiService _apiService;
private AudioService _audioService;
private int _number;
private int _guesses;
public GuessTheNumber(IApiService apiService, AudioService audioService)
{
_apiService = apiService;
_audioService = audioService;
InitializeComponent();
}
private async void GuessTheNumber_Load(object sender, EventArgs e) => await InitializeGTNGame();
private async void btnGuess_Click(object sender, EventArgs e)
{
if(nudNumberGuess.Value > 0)
{
btnGuess.Enabled = false;
int guess = int.Parse(nudNumberGuess.Value.ToString());
var result = await _apiService.GuessRandomNumber(_number, guess);
if(result != null && result.Success)
{
switch(result.Data)
{
case QtCNETAPI.Enums.NumberGuessResult.Higher:
lblResult.Text = "Your Guess Was Higher By 10! You've Earned A Jackpot Spin!";
btnClaimPrize.Text = "Spin";
btnClaimPrize.Click += BtnClaimPrize_Click_JackpotSpin;
lblResult.Visible = true;
btnClaimPrize.Visible = true;
break;
case QtCNETAPI.Enums.NumberGuessResult.Lower:
lblResult.Text = "Your Guess Was Lower By 10! You've Earned 200 Q's!";
btnClaimPrize.Text = "Claim";
btnClaimPrize.Click += BtnClaimPrize_Click_QClaim;
lblResult.Visible = true;
btnClaimPrize.Visible = true;
break;
case QtCNETAPI.Enums.NumberGuessResult.Correct:
lblResult.Text = "Your Correct! You've Earned The Jackpot!";
btnClaimPrize.Text = "Claim";
btnClaimPrize.Click += BtnClaimPrize_Click_QClaimJackpot;
lblResult.Visible = true;
btnClaimPrize.Visible = true;
break;
case QtCNETAPI.Enums.NumberGuessResult.Incorrect:
if (_guesses >= 2)
{
lblResult.Text = "Unfortunately you've used up all your guesses for this round.";
lblResult.Visible = true;
btnGuess.Visible = false;
break;
}
else _guesses++;
lblResult.Text = $"Incorrect. You Get Three Chances. You Guessed {_guesses} Time(s)";
lblResult.Visible = true;
btnGuess.Enabled = true;
break;
}
}
}
}
private void BtnClaimPrize_Click_QClaimJackpot(object? sender, EventArgs e)
{
throw new NotImplementedException("need to figure out how to do this, sorry :)");
}
private async void BtnClaimPrize_Click_QClaim(object? sender, EventArgs e)
{
var result = await _apiService.AddCurrencyToCurrentUser(200, false);
if (result != null && result.Success) Close();
else
{
MessageBox.Show("We Weren't Able To Claim Your Prize. You Can Try Again.", "Uh Oh...", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private async void BtnClaimPrize_Click_JackpotSpin(object? sender, EventArgs e)
{
Random rnd = new();
JackpotSpinForm tokenJackpotSpinner = new(_audioService)
{
CurrencyWon = rnd.Next(0, 200)
};
var formResult = tokenJackpotSpinner.ShowDialog();
if (formResult == DialogResult.OK)
{
var result = await _apiService.AddCurrencyToCurrentUser(tokenJackpotSpinner.CurrencyWon, false);
if (result != null && result.Success) Close();
else
{
MessageBox.Show("We Weren't Able To Claim Your Prize. You Can Try Again.", "Uh Oh...", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private async Task InitializeGTNGame()
{
var result = await _apiService.GetRandomNumber();
if (result != null && result.Success)
{
_number = result.Data;
lblHeader.Text = "I've picked a number between 1 and 500.\nWhat Is It?";
}
}
}
}

View File

@ -0,0 +1,120 @@
<?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>
</root>

View File

@ -0,0 +1,206 @@
namespace qtcnet_client.Forms.Games
{
partial class StockMarketGame
{
/// <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()
{
pStockManagement = new Panel();
nudStockBuySellAmount = new NumericUpDown();
btnSell = new Button();
btnBuy = new Button();
lblStockCount = new Label();
pMarketStatus = new Panel();
lblCurrentStockPrice = new Label();
lblMarketStatus = new Label();
pbDollarSignRight = new PictureBox();
pbDollarSignLeft = new PictureBox();
btnRefresh = new Button();
pStockManagement.SuspendLayout();
((System.ComponentModel.ISupportInitialize)nudStockBuySellAmount).BeginInit();
pMarketStatus.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pbDollarSignRight).BeginInit();
((System.ComponentModel.ISupportInitialize)pbDollarSignLeft).BeginInit();
SuspendLayout();
//
// pStockManagement
//
pStockManagement.Controls.Add(nudStockBuySellAmount);
pStockManagement.Controls.Add(btnSell);
pStockManagement.Controls.Add(btnBuy);
pStockManagement.Controls.Add(lblStockCount);
pStockManagement.Location = new Point(230, 138);
pStockManagement.Name = "pStockManagement";
pStockManagement.Size = new Size(135, 81);
pStockManagement.TabIndex = 3;
//
// nudStockBuySellAmount
//
nudStockBuySellAmount.Enabled = false;
nudStockBuySellAmount.Location = new Point(48, 7);
nudStockBuySellAmount.Name = "nudStockBuySellAmount";
nudStockBuySellAmount.Size = new Size(42, 23);
nudStockBuySellAmount.TabIndex = 9;
//
// btnSell
//
btnSell.Enabled = false;
btnSell.ForeColor = Color.Black;
btnSell.Location = new Point(88, 52);
btnSell.Name = "btnSell";
btnSell.Size = new Size(39, 23);
btnSell.TabIndex = 8;
btnSell.Text = "Sell";
btnSell.UseVisualStyleBackColor = true;
btnSell.Click += btnSell_Click;
//
// btnBuy
//
btnBuy.Enabled = false;
btnBuy.ForeColor = Color.Black;
btnBuy.Location = new Point(9, 52);
btnBuy.Name = "btnBuy";
btnBuy.Size = new Size(39, 23);
btnBuy.TabIndex = 7;
btnBuy.Text = "Buy";
btnBuy.UseVisualStyleBackColor = true;
btnBuy.Click += btnBuy_Click;
//
// lblStockCount
//
lblStockCount.Font = new Font("Segoe UI", 7F, FontStyle.Bold);
lblStockCount.ImageAlign = ContentAlignment.MiddleRight;
lblStockCount.Location = new Point(11, 34);
lblStockCount.Name = "lblStockCount";
lblStockCount.Size = new Size(115, 12);
lblStockCount.TabIndex = 6;
lblStockCount.Text = "Your Stock Count - 999";
lblStockCount.TextAlign = ContentAlignment.MiddleCenter;
//
// pMarketStatus
//
pMarketStatus.Controls.Add(lblCurrentStockPrice);
pMarketStatus.Controls.Add(lblMarketStatus);
pMarketStatus.Controls.Add(pbDollarSignRight);
pMarketStatus.Controls.Add(pbDollarSignLeft);
pMarketStatus.Location = new Point(3, 7);
pMarketStatus.Name = "pMarketStatus";
pMarketStatus.Size = new Size(586, 100);
pMarketStatus.TabIndex = 4;
//
// lblCurrentStockPrice
//
lblCurrentStockPrice.Font = new Font("Segoe UI", 9F, FontStyle.Bold);
lblCurrentStockPrice.ForeColor = Color.Black;
lblCurrentStockPrice.Location = new Point(194, 73);
lblCurrentStockPrice.Name = "lblCurrentStockPrice";
lblCurrentStockPrice.Size = new Size(199, 15);
lblCurrentStockPrice.TabIndex = 5;
lblCurrentStockPrice.Text = "Current Price Per Stock Is 999 Q's";
lblCurrentStockPrice.TextAlign = ContentAlignment.MiddleCenter;
//
// lblMarketStatus
//
lblMarketStatus.Font = new Font("Segoe UI", 35F, FontStyle.Bold | FontStyle.Italic);
lblMarketStatus.Location = new Point(90, 4);
lblMarketStatus.Name = "lblMarketStatus";
lblMarketStatus.Size = new Size(408, 62);
lblMarketStatus.TabIndex = 5;
lblMarketStatus.Text = "MARKET_STATUS";
lblMarketStatus.TextAlign = ContentAlignment.MiddleCenter;
//
// pbDollarSignRight
//
pbDollarSignRight.Image = Properties.Resources.dollar_money;
pbDollarSignRight.Location = new Point(500, 3);
pbDollarSignRight.Name = "pbDollarSignRight";
pbDollarSignRight.Size = new Size(83, 94);
pbDollarSignRight.SizeMode = PictureBoxSizeMode.Zoom;
pbDollarSignRight.TabIndex = 4;
pbDollarSignRight.TabStop = false;
//
// pbDollarSignLeft
//
pbDollarSignLeft.Image = Properties.Resources.dollar_money;
pbDollarSignLeft.Location = new Point(3, 3);
pbDollarSignLeft.Name = "pbDollarSignLeft";
pbDollarSignLeft.Size = new Size(83, 94);
pbDollarSignLeft.SizeMode = PictureBoxSizeMode.Zoom;
pbDollarSignLeft.TabIndex = 3;
pbDollarSignLeft.TabStop = false;
//
// btnRefresh
//
btnRefresh.Enabled = false;
btnRefresh.ForeColor = Color.Black;
btnRefresh.Location = new Point(270, 113);
btnRefresh.Name = "btnRefresh";
btnRefresh.Size = new Size(56, 23);
btnRefresh.TabIndex = 10;
btnRefresh.Text = "Refresh";
btnRefresh.UseVisualStyleBackColor = true;
btnRefresh.Click += btnRefresh_Click;
//
// StockMarketGame
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
BackColor = Color.DodgerBlue;
ClientSize = new Size(595, 227);
Controls.Add(btnRefresh);
Controls.Add(pMarketStatus);
Controls.Add(pStockManagement);
ForeColor = Color.White;
FormBorderStyle = FormBorderStyle.FixedDialog;
MaximizeBox = false;
MinimizeBox = false;
Name = "StockMarketGame";
StartPosition = FormStartPosition.CenterScreen;
Text = "QtC.NET qGame - Stock Market";
Load += StockMarketGame_Load;
pStockManagement.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)nudStockBuySellAmount).EndInit();
pMarketStatus.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)pbDollarSignRight).EndInit();
((System.ComponentModel.ISupportInitialize)pbDollarSignLeft).EndInit();
ResumeLayout(false);
}
#endregion
private Panel pStockManagement;
private Button btnSell;
private Button btnBuy;
private Label lblStockCount;
private Panel pMarketStatus;
private Label lblCurrentStockPrice;
private Label lblMarketStatus;
private PictureBox pbDollarSignRight;
private PictureBox pbDollarSignLeft;
private Button btnRefresh;
private NumericUpDown nudStockBuySellAmount;
}
}

View File

@ -0,0 +1,151 @@
using QtCNETAPI.Services.ApiService;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace qtcnet_client.Forms.Games
{
public partial class StockMarketGame : Form
{
private IApiService _apiService;
private int StockPrice = 0;
public StockMarketGame(IApiService apiService)
{
_apiService = apiService;
InitializeComponent();
}
private async void StockMarketGame_Load(object sender, EventArgs e) => await InitializeStockMarketGame();
private async void btnRefresh_Click(object sender, EventArgs e) => await InitializeStockMarketGame();
private async void btnBuy_Click(object sender, EventArgs e)
{
if (nudStockBuySellAmount.Value > 0)
{
nudStockBuySellAmount.Enabled = false;
btnBuy.Enabled = false;
btnSell.Enabled = false;
btnRefresh.Enabled = false;
// buy stock
var amountToBuy = int.Parse(nudStockBuySellAmount.Value.ToString());
var result = await _apiService.BuyStock(amountToBuy);
if (result != null && result.Success && result.Data != null)
{
lblStockCount.Text = $"Your Stock Count - {result.Data.StockAmount}";
_apiService.CurrentUser?.StockAmount = result.Data.StockAmount;
_apiService.CurrentUser?.CurrencyAmount = result.Data.CurrencyAmount;
nudStockBuySellAmount.Enabled = true;
nudStockBuySellAmount.Value = 0;
btnBuy.Enabled = true;
btnSell.Enabled = true;
btnRefresh.Enabled = true;
}
else
{
MessageBox.Show("Buy Failed. Either You Don't Have Enough Q's Or A Server Side Error Occured.", "Oops.", MessageBoxButtons.OK, MessageBoxIcon.Error);
nudStockBuySellAmount.Enabled = true;
nudStockBuySellAmount.Value = 0;
btnBuy.Enabled = true;
btnSell.Enabled = true;
btnRefresh.Enabled = true;
}
}
}
private async void btnSell_Click(object sender, EventArgs e)
{
if(nudStockBuySellAmount.Value > 0)
{
nudStockBuySellAmount.Enabled = false;
btnBuy.Enabled = false;
btnSell.Enabled = false;
btnRefresh.Enabled = false;
// sell stock
var amountToSell = int.Parse(nudStockBuySellAmount.Value.ToString());
var result = await _apiService.SellStock(amountToSell);
if (result != null && result.Success && result.Data != null)
{
lblStockCount.Text = $"Your Stock Count - {result.Data.StockAmount}";
_apiService.CurrentUser?.StockAmount = result.Data.StockAmount;
_apiService.CurrentUser?.CurrencyAmount = result.Data.CurrencyAmount;
nudStockBuySellAmount.Enabled = true;
nudStockBuySellAmount.Value = 0;
btnBuy.Enabled = true;
btnSell.Enabled = true;
btnRefresh.Enabled = true;
} else
{
MessageBox.Show("Sell Failed. Either You Don't Have Enough Stock Or A Server Side Error Occured.", "Oops.", MessageBoxButtons.OK, MessageBoxIcon.Error);
nudStockBuySellAmount.Enabled = true;
nudStockBuySellAmount.Value = 0;
btnBuy.Enabled = true;
btnSell.Enabled = true;
btnRefresh.Enabled = true;
}
}
}
private async Task InitializeStockMarketGame()
{
var currentStockPriceResult = await _apiService.GetCurrentStockPrice();
if (currentStockPriceResult != null && currentStockPriceResult.Success)
{
lblCurrentStockPrice.Text = $"Current Price Per Stock Is {currentStockPriceResult.Data} Q's";
lblStockCount.Text = $"Your Stock Count - {_apiService.CurrentUser?.StockAmount}";
switch (currentStockPriceResult.Data)
{
case < 49:
lblMarketStatus.Text = "not good cheif :(";
lblMarketStatus.ForeColor = Color.Red;
break;
case < 99:
lblMarketStatus.Text = "its aight :/";
lblMarketStatus.ForeColor = Color.DarkGreen;
break;
case < 149:
lblMarketStatus.Text = "its good :)";
lblMarketStatus.ForeColor = Color.Green;
break;
case < 199:
lblMarketStatus.Text = "very good :D";
lblMarketStatus.ForeColor = Color.Blue;
break;
case > 200:
lblMarketStatus.Text = "$ AWESOME $";
lblMarketStatus.ForeColor = Color.LightGreen;
break;
default:
lblMarketStatus.Text = "Cannot Determine";
lblMarketStatus.ForeColor = Color.White;
break;
}
nudStockBuySellAmount.Enabled = true;
btnBuy.Enabled = true;
btnSell.Enabled = true;
btnRefresh.Enabled = true;
}
else
{
MessageBox.Show("The Stock Market Endpoint Could Not Be Reached. Please Check Your Internet Connection", "Uh Oh.", MessageBoxButtons.OK, MessageBoxIcon.Error);
Close();
}
}
}
}

View File

@ -0,0 +1,120 @@
<?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>
</root>

View File

@ -0,0 +1,457 @@
namespace qtcnet_client.Forms.Games
{
partial class TicTacToeGame
{
/// <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()
{
pBoard = new Panel();
btnSquare9 = new Button();
btnSquare1 = new Button();
btnSquare7 = new Button();
btnSquare8 = new Button();
btnSquare6 = new Button();
btnSquare4 = new Button();
btnSquare5 = new Button();
btnSquare3 = new Button();
btnSquare2 = new Button();
pbBoard = new PictureBox();
pSymbolSelection = new Panel();
btnOSelect = new Button();
btnXSelect = new Button();
label1 = new Label();
pLoading = new Panel();
btnPlayAgain = new Button();
lblPlayAgain = new Label();
lblLoadStatus = new Label();
lblPlayerOne = new Label();
lblP1Username = new Label();
lblP2Username = new Label();
lblPlayerTwo = new Label();
lvUserlist = new ListView();
rtxtChatbox = new RichTextBox();
btnSend = new Button();
rtxtChat = new RichTextBox();
lblJackpotWon = new Label();
pBoard.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pbBoard).BeginInit();
pSymbolSelection.SuspendLayout();
pLoading.SuspendLayout();
SuspendLayout();
//
// pBoard
//
pBoard.Controls.Add(btnSquare9);
pBoard.Controls.Add(btnSquare1);
pBoard.Controls.Add(btnSquare7);
pBoard.Controls.Add(btnSquare8);
pBoard.Controls.Add(btnSquare6);
pBoard.Controls.Add(btnSquare4);
pBoard.Controls.Add(btnSquare5);
pBoard.Controls.Add(btnSquare3);
pBoard.Controls.Add(btnSquare2);
pBoard.Controls.Add(pbBoard);
pBoard.Enabled = false;
pBoard.Location = new Point(30, 18);
pBoard.Name = "pBoard";
pBoard.Size = new Size(541, 474);
pBoard.TabIndex = 0;
//
// btnSquare9
//
btnSquare9.BackgroundImageLayout = ImageLayout.Stretch;
btnSquare9.FlatAppearance.BorderSize = 0;
btnSquare9.FlatStyle = FlatStyle.Flat;
btnSquare9.Location = new Point(374, 341);
btnSquare9.Name = "btnSquare9";
btnSquare9.Size = new Size(99, 90);
btnSquare9.TabIndex = 11;
btnSquare9.UseVisualStyleBackColor = true;
btnSquare9.Click += btnSquareX_Click;
//
// btnSquare1
//
btnSquare1.BackgroundImageLayout = ImageLayout.Stretch;
btnSquare1.FlatAppearance.BorderSize = 0;
btnSquare1.FlatStyle = FlatStyle.Flat;
btnSquare1.Location = new Point(79, 49);
btnSquare1.Name = "btnSquare1";
btnSquare1.Size = new Size(99, 90);
btnSquare1.TabIndex = 4;
btnSquare1.UseVisualStyleBackColor = true;
btnSquare1.Click += btnSquareX_Click;
//
// btnSquare7
//
btnSquare7.BackgroundImageLayout = ImageLayout.Stretch;
btnSquare7.FlatAppearance.BorderSize = 0;
btnSquare7.FlatStyle = FlatStyle.Flat;
btnSquare7.Location = new Point(79, 341);
btnSquare7.Name = "btnSquare7";
btnSquare7.Size = new Size(99, 90);
btnSquare7.TabIndex = 10;
btnSquare7.UseVisualStyleBackColor = true;
btnSquare7.Click += btnSquareX_Click;
//
// btnSquare8
//
btnSquare8.BackgroundImageLayout = ImageLayout.Stretch;
btnSquare8.FlatAppearance.BorderSize = 0;
btnSquare8.FlatStyle = FlatStyle.Flat;
btnSquare8.Location = new Point(229, 341);
btnSquare8.Name = "btnSquare8";
btnSquare8.Size = new Size(99, 90);
btnSquare8.TabIndex = 9;
btnSquare8.UseVisualStyleBackColor = true;
btnSquare8.Click += btnSquareX_Click;
//
// btnSquare6
//
btnSquare6.BackgroundImageLayout = ImageLayout.Stretch;
btnSquare6.FlatAppearance.BorderSize = 0;
btnSquare6.FlatStyle = FlatStyle.Flat;
btnSquare6.Location = new Point(374, 195);
btnSquare6.Name = "btnSquare6";
btnSquare6.Size = new Size(99, 90);
btnSquare6.TabIndex = 8;
btnSquare6.UseVisualStyleBackColor = true;
btnSquare6.Click += btnSquareX_Click;
//
// btnSquare4
//
btnSquare4.BackgroundImageLayout = ImageLayout.Stretch;
btnSquare4.FlatAppearance.BorderSize = 0;
btnSquare4.FlatStyle = FlatStyle.Flat;
btnSquare4.Location = new Point(79, 195);
btnSquare4.Name = "btnSquare4";
btnSquare4.Size = new Size(99, 90);
btnSquare4.TabIndex = 7;
btnSquare4.UseVisualStyleBackColor = true;
btnSquare4.Click += btnSquareX_Click;
//
// btnSquare5
//
btnSquare5.BackgroundImageLayout = ImageLayout.Stretch;
btnSquare5.FlatAppearance.BorderSize = 0;
btnSquare5.FlatStyle = FlatStyle.Flat;
btnSquare5.Location = new Point(229, 195);
btnSquare5.Name = "btnSquare5";
btnSquare5.Size = new Size(99, 90);
btnSquare5.TabIndex = 6;
btnSquare5.UseVisualStyleBackColor = true;
btnSquare5.Click += btnSquareX_Click;
//
// btnSquare3
//
btnSquare3.BackgroundImageLayout = ImageLayout.Stretch;
btnSquare3.FlatAppearance.BorderSize = 0;
btnSquare3.FlatStyle = FlatStyle.Flat;
btnSquare3.Location = new Point(374, 49);
btnSquare3.Name = "btnSquare3";
btnSquare3.Size = new Size(99, 90);
btnSquare3.TabIndex = 5;
btnSquare3.UseVisualStyleBackColor = true;
btnSquare3.Click += btnSquareX_Click;
//
// btnSquare2
//
btnSquare2.BackgroundImageLayout = ImageLayout.Stretch;
btnSquare2.FlatAppearance.BorderSize = 0;
btnSquare2.FlatStyle = FlatStyle.Flat;
btnSquare2.Location = new Point(229, 49);
btnSquare2.Name = "btnSquare2";
btnSquare2.Size = new Size(99, 90);
btnSquare2.TabIndex = 3;
btnSquare2.UseVisualStyleBackColor = true;
btnSquare2.Click += btnSquareX_Click;
//
// pbBoard
//
pbBoard.Image = Properties.Resources.Tic_tac_toe;
pbBoard.Location = new Point(27, 15);
pbBoard.Name = "pbBoard";
pbBoard.Size = new Size(501, 444);
pbBoard.SizeMode = PictureBoxSizeMode.Zoom;
pbBoard.TabIndex = 0;
pbBoard.TabStop = false;
//
// pSymbolSelection
//
pSymbolSelection.BorderStyle = BorderStyle.FixedSingle;
pSymbolSelection.Controls.Add(btnOSelect);
pSymbolSelection.Controls.Add(btnXSelect);
pSymbolSelection.Controls.Add(label1);
pSymbolSelection.Location = new Point(161, 109);
pSymbolSelection.Name = "pSymbolSelection";
pSymbolSelection.Size = new Size(275, 255);
pSymbolSelection.TabIndex = 3;
pSymbolSelection.Visible = false;
//
// btnOSelect
//
btnOSelect.BackgroundImage = Properties.Resources.O;
btnOSelect.BackgroundImageLayout = ImageLayout.Stretch;
btnOSelect.FlatAppearance.BorderSize = 0;
btnOSelect.FlatStyle = FlatStyle.Flat;
btnOSelect.Location = new Point(157, 104);
btnOSelect.Name = "btnOSelect";
btnOSelect.Size = new Size(91, 89);
btnOSelect.TabIndex = 2;
btnOSelect.UseVisualStyleBackColor = true;
btnOSelect.Click += btnOSelect_Click;
//
// btnXSelect
//
btnXSelect.BackgroundImage = Properties.Resources.X;
btnXSelect.BackgroundImageLayout = ImageLayout.Stretch;
btnXSelect.FlatAppearance.BorderSize = 0;
btnXSelect.FlatStyle = FlatStyle.Flat;
btnXSelect.Location = new Point(34, 103);
btnXSelect.Name = "btnXSelect";
btnXSelect.Size = new Size(91, 89);
btnXSelect.TabIndex = 1;
btnXSelect.UseVisualStyleBackColor = true;
btnXSelect.Click += btnXSelect_Click;
//
// label1
//
label1.Font = new Font("Segoe UI", 15F, FontStyle.Bold, GraphicsUnit.Point, 0);
label1.ForeColor = Color.White;
label1.Location = new Point(11, 14);
label1.Name = "label1";
label1.Size = new Size(250, 49);
label1.TabIndex = 0;
label1.Text = "Please Select Symbol";
label1.TextAlign = ContentAlignment.MiddleCenter;
//
// pLoading
//
pLoading.BorderStyle = BorderStyle.FixedSingle;
pLoading.Controls.Add(btnPlayAgain);
pLoading.Controls.Add(lblPlayAgain);
pLoading.Controls.Add(lblLoadStatus);
pLoading.Location = new Point(161, 109);
pLoading.Name = "pLoading";
pLoading.Size = new Size(275, 255);
pLoading.TabIndex = 2;
pLoading.Visible = false;
//
// btnPlayAgain
//
btnPlayAgain.Location = new Point(97, 223);
btnPlayAgain.Name = "btnPlayAgain";
btnPlayAgain.Size = new Size(75, 23);
btnPlayAgain.TabIndex = 2;
btnPlayAgain.Text = "Play Again";
btnPlayAgain.UseVisualStyleBackColor = true;
btnPlayAgain.Visible = false;
btnPlayAgain.Click += btnPlayAgain_Click;
//
// lblPlayAgain
//
lblPlayAgain.ForeColor = Color.White;
lblPlayAgain.Location = new Point(28, 134);
lblPlayAgain.Name = "lblPlayAgain";
lblPlayAgain.Size = new Size(218, 86);
lblPlayAgain.TabIndex = 1;
lblPlayAgain.Text = "If you wish to play with a different user, you can close\r\nthis window and match up again. Otherwise click\r\n\"Play Again\"";
lblPlayAgain.TextAlign = ContentAlignment.MiddleCenter;
lblPlayAgain.Visible = false;
//
// lblLoadStatus
//
lblLoadStatus.Font = new Font("Segoe UI", 21.75F, FontStyle.Bold, GraphicsUnit.Point, 0);
lblLoadStatus.ForeColor = Color.White;
lblLoadStatus.Location = new Point(11, 4);
lblLoadStatus.Name = "lblLoadStatus";
lblLoadStatus.Size = new Size(250, 130);
lblLoadStatus.TabIndex = 0;
lblLoadStatus.Text = "Text";
lblLoadStatus.TextAlign = ContentAlignment.MiddleCenter;
//
// lblPlayerOne
//
lblPlayerOne.Font = new Font("Segoe UI", 12F, FontStyle.Bold | FontStyle.Italic);
lblPlayerOne.ForeColor = Color.White;
lblPlayerOne.Location = new Point(30, 501);
lblPlayerOne.Name = "lblPlayerOne";
lblPlayerOne.Size = new Size(29, 23);
lblPlayerOne.TabIndex = 2;
lblPlayerOne.Text = "P1";
//
// lblP1Username
//
lblP1Username.AutoSize = true;
lblP1Username.Font = new Font("Segoe UI", 15F, FontStyle.Bold | FontStyle.Italic);
lblP1Username.ForeColor = Color.White;
lblP1Username.Location = new Point(26, 519);
lblP1Username.Name = "lblP1Username";
lblP1Username.Size = new Size(105, 28);
lblP1Username.TabIndex = 3;
lblP1Username.Text = "Username";
//
// lblP2Username
//
lblP2Username.AutoSize = true;
lblP2Username.Font = new Font("Segoe UI", 15F, FontStyle.Bold | FontStyle.Italic);
lblP2Username.ForeColor = Color.White;
lblP2Username.Location = new Point(466, 519);
lblP2Username.Name = "lblP2Username";
lblP2Username.Size = new Size(105, 28);
lblP2Username.TabIndex = 5;
lblP2Username.Text = "Username";
lblP2Username.TextAlign = ContentAlignment.MiddleRight;
//
// lblPlayerTwo
//
lblPlayerTwo.Font = new Font("Segoe UI", 12F, FontStyle.Bold | FontStyle.Italic);
lblPlayerTwo.ForeColor = Color.White;
lblPlayerTwo.Location = new Point(540, 501);
lblPlayerTwo.Name = "lblPlayerTwo";
lblPlayerTwo.Size = new Size(29, 23);
lblPlayerTwo.TabIndex = 4;
lblPlayerTwo.Text = "P2";
//
// lvUserlist
//
lvUserlist.Alignment = ListViewAlignment.Left;
lvUserlist.Location = new Point(577, 48);
lvUserlist.MultiSelect = false;
lvUserlist.Name = "lvUserlist";
lvUserlist.Size = new Size(309, 211);
lvUserlist.TabIndex = 6;
lvUserlist.UseCompatibleStateImageBehavior = false;
lvUserlist.View = View.SmallIcon;
//
// rtxtChatbox
//
rtxtChatbox.Location = new Point(577, 497);
rtxtChatbox.Name = "rtxtChatbox";
rtxtChatbox.Size = new Size(230, 49);
rtxtChatbox.TabIndex = 8;
rtxtChatbox.Text = "";
rtxtChatbox.KeyDown += rtxtChatbox_KeyDown;
//
// btnSend
//
btnSend.BackgroundImage = Properties.Resources.SendIcon;
btnSend.BackgroundImageLayout = ImageLayout.Zoom;
btnSend.FlatAppearance.BorderSize = 0;
btnSend.FlatStyle = FlatStyle.Flat;
btnSend.Location = new Point(811, 497);
btnSend.Name = "btnSend";
btnSend.Size = new Size(75, 50);
btnSend.TabIndex = 9;
btnSend.UseVisualStyleBackColor = true;
btnSend.Click += btnSend_Click;
//
// rtxtChat
//
rtxtChat.Font = new Font("Segoe UI", 10F);
rtxtChat.HideSelection = false;
rtxtChat.Location = new Point(577, 265);
rtxtChat.Name = "rtxtChat";
rtxtChat.ReadOnly = true;
rtxtChat.Size = new Size(309, 227);
rtxtChat.TabIndex = 10;
rtxtChat.Text = "";
//
// lblJackpotWon
//
lblJackpotWon.AutoSize = true;
lblJackpotWon.Font = new Font("Segoe UI", 12F, FontStyle.Bold | FontStyle.Italic);
lblJackpotWon.ForeColor = Color.Blue;
lblJackpotWon.Location = new Point(744, 18);
lblJackpotWon.Name = "lblJackpotWon";
lblJackpotWon.Size = new Size(142, 21);
lblJackpotWon.TabIndex = 11;
lblJackpotWon.Text = "3 Wins = Jackpot!";
//
// TicTacToeGame
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
BackColor = Color.DodgerBlue;
ClientSize = new Size(898, 558);
Controls.Add(lblJackpotWon);
Controls.Add(rtxtChat);
Controls.Add(btnSend);
Controls.Add(rtxtChatbox);
Controls.Add(lvUserlist);
Controls.Add(lblP2Username);
Controls.Add(lblPlayerTwo);
Controls.Add(lblP1Username);
Controls.Add(lblPlayerOne);
Controls.Add(pLoading);
Controls.Add(pSymbolSelection);
Controls.Add(pBoard);
FormBorderStyle = FormBorderStyle.FixedDialog;
MaximizeBox = false;
Name = "TicTacToeGame";
StartPosition = FormStartPosition.CenterScreen;
Text = "QtC.NET qGame - qTic-Tac-Toe";
FormClosed += TicTacToeGame_FormClosed;
Load += Main_Load;
pBoard.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)pbBoard).EndInit();
pSymbolSelection.ResumeLayout(false);
pLoading.ResumeLayout(false);
ResumeLayout(false);
PerformLayout();
}
#endregion
private Panel pBoard;
private PictureBox pbBoard;
private Button btnSquare9;
private Button btnSquare7;
private Button btnSquare8;
private Button btnSquare6;
private Button btnSquare4;
private Button btnSquare5;
private Button btnSquare3;
private Button btnSquare1;
private Button btnSquare2;
private Panel pLoading;
private Label lblLoadStatus;
private Label lblPlayerOne;
private Label lblP1Username;
private Label lblP2Username;
private Label lblPlayerTwo;
private Panel pSymbolSelection;
private Button btnOSelect;
private Button btnXSelect;
private Label label1;
private ListView lvUserlist;
private RichTextBox rtxtChatbox;
private Button btnSend;
private Label lblPlayAgain;
private Button btnPlayAgain;
private RichTextBox rtxtChat;
private Label lblJackpotWon;
}
}

View File

@ -0,0 +1,523 @@
using Microsoft.AspNetCore.SignalR.Client;
using qtcnet_client.Forms;
using qtcnet_client.Services;
using QtCNETAPI.Enums;
using QtCNETAPI.Models;
using QtCNETAPI.Schema;
using QtCNETAPI.Services.ApiService;
using System.Threading.Tasks;
using qtcnet_client.Model;
namespace qtcnet_client.Forms.Games
{
public partial class TicTacToeGame : Form
{
private HubConnection? GameHubConnection { get; set; }
private GameRoom? CurrentRoom { get; set; }
private IApiService _apiService;
private ClientConfig _config;
private AudioService _audioService = new();
private int WinCount { get; set; }
private bool JackpotWon { get; set; } = false;
public TicTacToeGame(IApiService apiService, ClientConfig config)
{
_apiService = apiService;
_config = config;
InitializeComponent();
}
private async void Main_Load(object sender, EventArgs e)
{
// first, connect to the game hub
GameHubConnection = new HubConnectionBuilder()
.WithUrl($"{_config.ServerBaseUri}/tttgame", options =>
{
options.AccessTokenProvider = () => Task.FromResult(_apiService.SessionToken)!;
})
.WithAutomaticReconnect()
.Build();
pLoading.Visible = true;
lblLoadStatus.Text = "Connecting\nTo\nHub...";
GameHubConnection.On<GameRoom>("WaitingForPlayer", (room) =>
{
CurrentRoom = room;
BeginInvoke(delegate ()
{
if (room.Player1 != null)
{
lblP1Username.Text = room.Player1.Username;
lvUserlist.Items.Add(room.Player1.Id, room.Player1.Username, room.Player1.Status);
}
lblLoadStatus.Text = "Waiting\nFor\nPlayer...";
});
});
GameHubConnection.On<GameRoom>("GameStart", (room) =>
{
CurrentRoom = room;
BeginInvoke(delegate ()
{
pLoading.Visible = false;
pSymbolSelection.Visible = false;
});
});
GameHubConnection.On<GameRoom, string?>("GameEnd", (room, usernameDisconnected) =>
{
CurrentRoom = room;
BeginInvoke(delegate ()
{
if (room.Player1 == null) lblP1Username.Text = "Username";
if (room.Player2 == null) lblP2Username.Text = "Username";
ToggleBoardControl(false);
switch (room.Status)
{
case GameStatus.P1Win:
{
if (_apiService.CurrentUser?.Id == room.Player1?.Id)
{
lblLoadStatus.Text = "You Won!";
WinCount++;
if (WinCount >= 3)
{
JackpotWon = true;
lblJackpotWon.Text = "You Won A Spin!";
}
}
else lblLoadStatus.Text = "You Lost!";
lblPlayAgain.Visible = true;
btnPlayAgain.Visible = true;
break;
}
case GameStatus.P2Win:
{
if (_apiService.CurrentUser?.Id == room.Player2?.Id)
{
lblLoadStatus.Text = "You Won!";
WinCount++;
if (WinCount >= 3)
{
JackpotWon = true;
lblJackpotWon.Text = "You Won A Spin!";
}
}
else lblLoadStatus.Text = "You Lost!";
lblPlayAgain.Visible = true;
btnPlayAgain.Visible = true;
break;
}
case GameStatus.PlayerDisconnected:
{
if (!string.IsNullOrEmpty(usernameDisconnected))
lblLoadStatus.Text = $"Game Ended.\nUser {usernameDisconnected}\nDisconnected.";
lblPlayAgain.Visible = false;
btnPlayAgain.Visible = false;
break;
}
case GameStatus.NoWin:
lblLoadStatus.Text = "It's a draw!";
lblPlayAgain.Visible = true;
btnPlayAgain.Visible = true;
break;
}
pLoading.Visible = true;
});
});
GameHubConnection.On<GameRoom>("RestartGame", (room) =>
{
CurrentRoom = room;
BeginInvoke(delegate ()
{
if (pLoading.Visible) pLoading.Visible = false;
});
ClearBoard();
ToggleBoardControl(true);
BeginInvoke(delegate ()
{
List<Button> buttons = [btnSquare1, btnSquare2, btnSquare3, btnSquare4, btnSquare5, btnSquare6, btnSquare7, btnSquare8, btnSquare9];
foreach (Button button in buttons)
{
if (button.BackgroundImage == null)
button.Enabled = true;
}
});
});
GameHubConnection.On<GameRoom>("SelectSymbol", (room) =>
{
CurrentRoom = room;
BeginInvoke(delegate ()
{
if (room.Player1 != null)
{
lblP1Username.Text = room.Player1.Username;
if (!lvUserlist.Items.ContainsKey(room.Player1.Id)) lvUserlist.Items.Add(room.Player1.Id, room.Player1.Username, room.Player1.Status);
}
if (room.Player2 != null)
{
lblP2Username.Text = room.Player2.Username;
if (!lvUserlist.Items.ContainsKey(room.Player2.Id)) lvUserlist.Items.Add(room.Player2.Id, room.Player2.Username, room.Player2.Status);
}
if (pLoading.Visible) pLoading.Visible = false;
pSymbolSelection.Visible = true;
pBoard.Enabled = true;
ToggleAllSquareButtons(false);
});
});
GameHubConnection.On<GameRoom>("SelectingSymbol", (room) =>
{
CurrentRoom = room;
BeginInvoke(delegate ()
{
if (pSymbolSelection.Visible) return;
if (room.Player1 != null)
{
lblP1Username.Text = room.Player1.Username;
if (!lvUserlist.Items.ContainsKey(room.Player1.Id)) lvUserlist.Items.Add(room.Player1.Id, room.Player1.Username, room.Player1.Status);
}
if (room.Player2 != null)
{
lblP2Username.Text = room.Player2.Username;
if (!lvUserlist.Items.ContainsKey(room.Player2.Id)) lvUserlist.Items.Add(room.Player2.Id, room.Player2.Username, room.Player2.Status);
}
pLoading.Visible = true;
lblLoadStatus.Text = $"Player 1\nIs Selecting\nSymbol...";
});
});
GameHubConnection.On<GameRoom, TicTacToeMove>("UpdateBoard", (room, move) =>
{
CurrentRoom = room;
UpdateBoardUI(move);
});
GameHubConnection.On<GameRoom>("StartTurn", (room) =>
{
CurrentRoom = room;
ToggleBoardControl(true);
AddChatMessage("[SERVER] Your Turn!");
});
GameHubConnection.On<GameRoom>("EndTurn", (room) =>
{
CurrentRoom = room;
ToggleBoardControl(false);
AddChatMessage("[SERVER] Other Players Turn");
});
GameHubConnection.On<string>("ReceiveMessage", (msg) =>
{
AddChatMessage(msg);
if (msg.Split('[')[1] != _apiService.CurrentUser?.Username)
_audioService.PlaySoundEffect("sndMessage");
});
try { await GameHubConnection.StartAsync(); }
catch (HttpRequestException ex)
{
MessageBox.Show($"Sorry, We Couldn't Connect To The Game Server Due To An Error. Please Try Again Later.\n\n{ex.Message}", "Oops.", MessageBoxButtons.OK, MessageBoxIcon.Error);
Environment.Exit(0);
}
lblLoadStatus.Text = "Finding\nRoom...";
await GameHubConnection.SendAsync("FindRoom");
}
private async void TicTacToeGame_FormClosed(object sender, FormClosedEventArgs e)
{
if (GameHubConnection != null && GameHubConnection.State == HubConnectionState.Connected)
{
if(JackpotWon)
{
// start a jackpot spin
Random rnd = new();
JackpotSpinForm currencyJackpotSpinner = new(_audioService)
{
CurrencyWon = rnd.Next(0, 200)
};
var dialogResult = currencyJackpotSpinner.ShowDialog();
if (dialogResult == DialogResult.OK)
{
await _apiService.AddCurrencyToCurrentUser(currencyJackpotSpinner.CurrencyWon, false);
}
}
// stop and dispose connection
await GameHubConnection.StopAsync();
await GameHubConnection.DisposeAsync();
GameHubConnection = null;
}
}
private async void btnXSelect_Click(object sender, EventArgs e) => await SelectSymbol(TicTacToeSymbol.X);
private async void btnOSelect_Click(object sender, EventArgs e) => await SelectSymbol(TicTacToeSymbol.O);
private async void btnPlayAgain_Click(object sender, EventArgs e)
{
if (GameHubConnection != null && GameHubConnection.State == HubConnectionState.Connected && CurrentRoom != null)
{
await GameHubConnection.SendAsync("RestartGame", CurrentRoom.Id);
}
}
private async void btnSquareX_Click(object sender, EventArgs e)
{
// create move
TicTacToeMove move = new TicTacToeMove
{
User = _apiService.CurrentUser!
};
if (sender is Button btn)
{
switch (btn.Name)
{
case "btnSquare1":
move.Point = 1;
break;
case "btnSquare2":
move.Point = 2;
break;
case "btnSquare3":
move.Point = 3;
break;
case "btnSquare4":
move.Point = 4;
break;
case "btnSquare5":
move.Point = 5;
break;
case "btnSquare6":
move.Point = 6;
break;
case "btnSquare7":
move.Point = 7;
break;
case "btnSquare8":
move.Point = 8;
break;
case "btnSquare9":
move.Point = 9;
break;
}
}
// send move
if (GameHubConnection != null && GameHubConnection.State == HubConnectionState.Connected && CurrentRoom != null)
await GameHubConnection.SendAsync("MakeMove", CurrentRoom.Id, move);
}
private async void btnSend_Click(object sender, EventArgs e)
{
if ((GameHubConnection != null && GameHubConnection.State == HubConnectionState.Connected && CurrentRoom != null) &&
!string.IsNullOrWhiteSpace(rtxtChatbox.Text))
{
await GameHubConnection.SendAsync("SendRoomMessage", CurrentRoom.Id, $"[{_apiService.CurrentUser?.Username}] {rtxtChatbox.Text}");
_audioService.PlaySoundEffect("sndSendClick");
rtxtChatbox.Clear();
}
}
private void rtxtChatbox_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Enter)
btnSend_Click(sender, e);
}
private void ToggleBoardControl(bool toggle)
{
if (IsHandleCreated && !IsDisposed)
{
Invoke(delegate ()
{
pBoard.Enabled = toggle;
});
}
}
private void ToggleAllSquareButtons(bool toggle)
{
if (IsHandleCreated && !IsDisposed)
{
Invoke(delegate ()
{
List<Button> buttons = [btnSquare1, btnSquare2, btnSquare3, btnSquare4, btnSquare5, btnSquare6, btnSquare7, btnSquare8, btnSquare9];
foreach (Button button in buttons)
button.Enabled = toggle;
});
}
}
private async Task SelectSymbol(TicTacToeSymbol symbol)
{
if (GameHubConnection != null && GameHubConnection.State == HubConnectionState.Connected && CurrentRoom != null)
{
await GameHubConnection.SendAsync("SetSymbol", CurrentRoom.Id, symbol);
ToggleAllSquareButtons(true);
}
}
private void UpdateBoardUI(TicTacToeMove move)
{
if (IsHandleCreated && !IsDisposed && CurrentRoom != null)
{
// play move made sound
_audioService.PlaySoundEffect("sndTTTMoveMade");
Invoke(delegate ()
{
switch (CurrentRoom.Board.Square1)
{
case TicTacToeSymbol.X:
btnSquare1.BackgroundImage = Properties.Resources.X;
btnSquare1.Enabled = false;
break;
case TicTacToeSymbol.O:
btnSquare1.BackgroundImage = Properties.Resources.O;
btnSquare1.Enabled = false;
break;
}
switch (CurrentRoom.Board.Square2)
{
case TicTacToeSymbol.X:
btnSquare2.BackgroundImage = Properties.Resources.X;
btnSquare2.Enabled = false;
break;
case TicTacToeSymbol.O:
btnSquare2.BackgroundImage = Properties.Resources.O;
btnSquare2.Enabled = false;
break;
}
switch (CurrentRoom.Board.Square3)
{
case TicTacToeSymbol.X:
btnSquare3.BackgroundImage = Properties.Resources.X;
btnSquare3.Enabled = false;
break;
case TicTacToeSymbol.O:
btnSquare3.BackgroundImage = Properties.Resources.O;
btnSquare3.Enabled = false;
break;
}
switch (CurrentRoom.Board.Square4)
{
case TicTacToeSymbol.X:
btnSquare4.BackgroundImage = Properties.Resources.X;
btnSquare4.Enabled = false;
break;
case TicTacToeSymbol.O:
btnSquare4.BackgroundImage = Properties.Resources.O;
btnSquare4.Enabled = false;
break;
}
switch (CurrentRoom.Board.Square5)
{
case TicTacToeSymbol.X:
btnSquare5.BackgroundImage = Properties.Resources.X;
btnSquare5.Enabled = false;
break;
case TicTacToeSymbol.O:
btnSquare5.BackgroundImage = Properties.Resources.O;
btnSquare5.Enabled = false;
break;
}
switch (CurrentRoom.Board.Square6)
{
case TicTacToeSymbol.X:
btnSquare6.BackgroundImage = Properties.Resources.X;
btnSquare6.Enabled = false;
break;
case TicTacToeSymbol.O:
btnSquare6.BackgroundImage = Properties.Resources.O;
btnSquare6.Enabled = false;
break;
}
switch (CurrentRoom.Board.Square7)
{
case TicTacToeSymbol.X:
btnSquare7.BackgroundImage = Properties.Resources.X;
btnSquare7.Enabled = false;
break;
case TicTacToeSymbol.O:
btnSquare7.BackgroundImage = Properties.Resources.O;
btnSquare7.Enabled = false;
break;
}
switch (CurrentRoom.Board.Square8)
{
case TicTacToeSymbol.X:
btnSquare8.BackgroundImage = Properties.Resources.X;
btnSquare8.Enabled = false;
break;
case TicTacToeSymbol.O:
btnSquare8.BackgroundImage = Properties.Resources.O;
btnSquare8.Enabled = false;
break;
}
switch (CurrentRoom.Board.Square9)
{
case TicTacToeSymbol.X:
btnSquare9.BackgroundImage = Properties.Resources.X;
btnSquare9.Enabled = false;
break;
case TicTacToeSymbol.O:
btnSquare9.BackgroundImage = Properties.Resources.O;
btnSquare9.Enabled = false;
break;
}
});
}
}
private void AddChatMessage(string msg)
{
if (IsHandleCreated && !IsDisposed)
{
Invoke(delegate ()
{
rtxtChat.AppendText($"{msg}\n");
});
}
}
private void ClearBoard()
{
if (IsHandleCreated && !IsDisposed)
{
Invoke(delegate ()
{
List<Button> buttons = [btnSquare1, btnSquare2, btnSquare3, btnSquare4, btnSquare5, btnSquare6, btnSquare7, btnSquare8, btnSquare9];
foreach (Button button in buttons)
button.BackgroundImage = null;
});
}
}
}
}

View File

@ -0,0 +1,120 @@
<?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>
</root>

View File

@ -1,22 +1,17 @@
using Krypton.Toolkit;
using Microsoft.AspNetCore.Mvc.Routing;
using Microsoft.VisualBasic.ApplicationServices;
using qtcnet_client.Controls;
using qtcnet_client.Factories;
using qtcnet_client.Forms;
using qtcnet_client.Forms.Games;
using qtcnet_client.Model;
using qtcnet_client.Properties;
using qtcnet_client.Services;
using QtCNETAPI.Dtos.User;
using QtCNETAPI.Events;
using QtCNETAPI.Models;
using QtCNETAPI.Schema;
using QtCNETAPI.Services;
using QtCNETAPI.Services.ApiService;
using QtCNETAPI.Services.GatewayService;
using System.Drawing.Drawing2D;
using System.Runtime.ExceptionServices;
using System.Threading.Tasks;
namespace qtcnet_client
{
@ -615,6 +610,7 @@ namespace qtcnet_client
MainTabControl.OnContactControlDoubleClicked += MainTabControl_OnContactControlDoubleClicked;
MainTabControl.OnUserItemDoubleClicked += MainTabControl_OnUserItemDoubleClicked;
MainTabControl.OnStoreItemDoubleClicked += MainTabControl_OnStoreItemDoubleClicked;
MainTabControl.OnGameItemDoubleClicked += MainTabControl_OnGameItemDoubleClicked;
// get and set contacts
var _currentUserContacts = await _apiService.GetCurrentUserContacts();
@ -663,6 +659,9 @@ namespace qtcnet_client
};
Controls.Add(llblAdminPanel);
// set isadmin to true for other admin stuff
IsAdmin = true;
}
ResumeLayout(true);
@ -704,6 +703,30 @@ namespace qtcnet_client
}
}
private void MainTabControl_OnGameItemDoubleClicked(object? sender, EventArgs e)
{
if(sender is MainTabControl _ctrl)
{
string? gameSelected = (string?)_ctrl.SelectedGameItem?.Tag;
switch (gameSelected)
{
case "StockMarketGame":
StockMarketGame stockMarketGame = new(_apiService);
stockMarketGame.Show();
break;
case "GuessTheNumberGame":
GuessTheNumber guessTheNumber = new(_apiService, _audioService);
guessTheNumber.Show();
break;
case "TicTacToeGame":
TicTacToeGame ticTacToeGame = new(_apiService, _config);
ticTacToeGame.Show();
break;
}
}
}
private async void MainTabControl_OnStoreItemDoubleClicked(object? sender, EventArgs e)
{
if (sender is MainTabControl _ctrl && _ctrl.SelectedStoreItem?.Tag is int _itemId)

View File

@ -149,6 +149,16 @@ namespace qtcnet_client.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap dollar_money {
get {
object obj = ResourceManager.GetObject("dollar-money", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
@ -159,6 +169,16 @@ namespace qtcnet_client.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap O {
get {
object obj = ResourceManager.GetObject("O", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
@ -228,5 +248,25 @@ namespace qtcnet_client.Properties {
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Tic_tac_toe {
get {
object obj = ResourceManager.GetObject("Tic-tac-toe", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap X {
get {
object obj = ResourceManager.GetObject("X", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@ -169,4 +169,16 @@
<data name="AssemblyVersion" xml:space="preserve">
<value>1.0.0</value>
</data>
<data name="Tic-tac-toe" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Tic-tac-toe.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="X" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\X.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="O" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\O.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="dollar-money" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\dollar-money.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

View File

@ -69,4 +69,8 @@
</None>
</ItemGroup>
<ItemGroup>
<Folder Include="Forms\Games\" />
</ItemGroup>
</Project>