diff --git a/BasicBlockChain/BasicBlockChain.csproj b/BasicBlockChain/BasicBlockChain.csproj
index 44a4f11..174d2f9 100644
--- a/BasicBlockChain/BasicBlockChain.csproj
+++ b/BasicBlockChain/BasicBlockChain.csproj
@@ -5,7 +5,7 @@
Debug
AnyCPU
{34581A96-29BE-4AB6-9298-BC1AD3E78369}
- Exe
+ WinExe
BasicBlockChain
BasicBlockChain
v4.8
@@ -33,9 +33,17 @@
prompt
4
+
+
+
+
+ blocks.ico
+
+
+
@@ -47,6 +55,12 @@
+
+ Form
+
+
+ FrmMain.cs
+
@@ -59,5 +73,13 @@
BasicBlockChain.Core
+
+
+ FrmMain.cs
+
+
+
+
+
\ No newline at end of file
diff --git a/BasicBlockChain/FrmMain.Designer.cs b/BasicBlockChain/FrmMain.Designer.cs
new file mode 100644
index 0000000..b5b4890
--- /dev/null
+++ b/BasicBlockChain/FrmMain.Designer.cs
@@ -0,0 +1,195 @@
+namespace BasicBlockChain
+{
+ partial class FrmMain
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmMain));
+ this.lsbTransactions = new System.Windows.Forms.ListBox();
+ this.lsbPendingTransactions = new System.Windows.Forms.ListBox();
+ this.btnMine = new System.Windows.Forms.Button();
+ this.grpAddTransaction = new System.Windows.Forms.GroupBox();
+ this.btnAdd = new System.Windows.Forms.Button();
+ this.lblFrom = new System.Windows.Forms.Label();
+ this.lblTo = new System.Windows.Forms.Label();
+ this.lblAmount = new System.Windows.Forms.Label();
+ this.txtMinerName = new System.Windows.Forms.TextBox();
+ this.txtFrom = new System.Windows.Forms.TextBox();
+ this.txtTo = new System.Windows.Forms.TextBox();
+ this.txtAmount = new System.Windows.Forms.TextBox();
+ this.grpAddTransaction.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // lsbTransactions
+ //
+ this.lsbTransactions.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)));
+ this.lsbTransactions.FormattingEnabled = true;
+ this.lsbTransactions.Location = new System.Drawing.Point(12, 12);
+ this.lsbTransactions.Name = "lsbTransactions";
+ this.lsbTransactions.Size = new System.Drawing.Size(225, 303);
+ this.lsbTransactions.TabIndex = 0;
+ //
+ // lsbPendingTransactions
+ //
+ this.lsbPendingTransactions.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)));
+ this.lsbPendingTransactions.FormattingEnabled = true;
+ this.lsbPendingTransactions.Location = new System.Drawing.Point(243, 12);
+ this.lsbPendingTransactions.Name = "lsbPendingTransactions";
+ this.lsbPendingTransactions.Size = new System.Drawing.Size(225, 277);
+ this.lsbPendingTransactions.TabIndex = 1;
+ //
+ // btnMine
+ //
+ this.btnMine.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.btnMine.Location = new System.Drawing.Point(393, 297);
+ this.btnMine.Name = "btnMine";
+ this.btnMine.Size = new System.Drawing.Size(75, 23);
+ this.btnMine.TabIndex = 2;
+ this.btnMine.Text = "Mine";
+ this.btnMine.UseVisualStyleBackColor = true;
+ this.btnMine.Click += new System.EventHandler(this.btnMine_Click);
+ //
+ // grpAddTransaction
+ //
+ this.grpAddTransaction.Controls.Add(this.txtAmount);
+ this.grpAddTransaction.Controls.Add(this.txtTo);
+ this.grpAddTransaction.Controls.Add(this.txtFrom);
+ this.grpAddTransaction.Controls.Add(this.lblAmount);
+ this.grpAddTransaction.Controls.Add(this.lblTo);
+ this.grpAddTransaction.Controls.Add(this.lblFrom);
+ this.grpAddTransaction.Controls.Add(this.btnAdd);
+ this.grpAddTransaction.Location = new System.Drawing.Point(474, 12);
+ this.grpAddTransaction.Name = "grpAddTransaction";
+ this.grpAddTransaction.Size = new System.Drawing.Size(155, 135);
+ this.grpAddTransaction.TabIndex = 3;
+ this.grpAddTransaction.TabStop = false;
+ this.grpAddTransaction.Text = "Add transaction";
+ //
+ // btnAdd
+ //
+ this.btnAdd.Location = new System.Drawing.Point(72, 97);
+ this.btnAdd.Name = "btnAdd";
+ this.btnAdd.Size = new System.Drawing.Size(75, 23);
+ this.btnAdd.TabIndex = 0;
+ this.btnAdd.Text = "Add";
+ this.btnAdd.UseVisualStyleBackColor = true;
+ this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
+ //
+ // lblFrom
+ //
+ this.lblFrom.AutoSize = true;
+ this.lblFrom.Location = new System.Drawing.Point(6, 22);
+ this.lblFrom.Name = "lblFrom";
+ this.lblFrom.Size = new System.Drawing.Size(30, 13);
+ this.lblFrom.TabIndex = 1;
+ this.lblFrom.Text = "From";
+ //
+ // lblTo
+ //
+ this.lblTo.AutoSize = true;
+ this.lblTo.Location = new System.Drawing.Point(6, 48);
+ this.lblTo.Name = "lblTo";
+ this.lblTo.Size = new System.Drawing.Size(20, 13);
+ this.lblTo.TabIndex = 2;
+ this.lblTo.Text = "To";
+ //
+ // lblAmount
+ //
+ this.lblAmount.AutoSize = true;
+ this.lblAmount.Location = new System.Drawing.Point(6, 74);
+ this.lblAmount.Name = "lblAmount";
+ this.lblAmount.Size = new System.Drawing.Size(43, 13);
+ this.lblAmount.TabIndex = 3;
+ this.lblAmount.Text = "Amount";
+ //
+ // txtMinerName
+ //
+ this.txtMinerName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.txtMinerName.Location = new System.Drawing.Point(287, 300);
+ this.txtMinerName.Name = "txtMinerName";
+ this.txtMinerName.Size = new System.Drawing.Size(100, 20);
+ this.txtMinerName.TabIndex = 4;
+ //
+ // txtFrom
+ //
+ this.txtFrom.Location = new System.Drawing.Point(47, 19);
+ this.txtFrom.Name = "txtFrom";
+ this.txtFrom.Size = new System.Drawing.Size(100, 20);
+ this.txtFrom.TabIndex = 4;
+ //
+ // txtTo
+ //
+ this.txtTo.Location = new System.Drawing.Point(47, 45);
+ this.txtTo.Name = "txtTo";
+ this.txtTo.Size = new System.Drawing.Size(100, 20);
+ this.txtTo.TabIndex = 5;
+ //
+ // txtAmount
+ //
+ this.txtAmount.Location = new System.Drawing.Point(47, 71);
+ this.txtAmount.Name = "txtAmount";
+ this.txtAmount.Size = new System.Drawing.Size(100, 20);
+ this.txtAmount.TabIndex = 6;
+ //
+ // FrmMain
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(651, 338);
+ this.Controls.Add(this.txtMinerName);
+ this.Controls.Add(this.grpAddTransaction);
+ this.Controls.Add(this.btnMine);
+ this.Controls.Add(this.lsbPendingTransactions);
+ this.Controls.Add(this.lsbTransactions);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Name = "FrmMain";
+ this.Text = "BasicBlockChain";
+ this.grpAddTransaction.ResumeLayout(false);
+ this.grpAddTransaction.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ListBox lsbTransactions;
+ private System.Windows.Forms.ListBox lsbPendingTransactions;
+ private System.Windows.Forms.Button btnMine;
+ private System.Windows.Forms.GroupBox grpAddTransaction;
+ private System.Windows.Forms.TextBox txtAmount;
+ private System.Windows.Forms.TextBox txtTo;
+ private System.Windows.Forms.TextBox txtFrom;
+ private System.Windows.Forms.Label lblAmount;
+ private System.Windows.Forms.Label lblTo;
+ private System.Windows.Forms.Label lblFrom;
+ private System.Windows.Forms.Button btnAdd;
+ private System.Windows.Forms.TextBox txtMinerName;
+ }
+}
\ No newline at end of file
diff --git a/BasicBlockChain/FrmMain.cs b/BasicBlockChain/FrmMain.cs
new file mode 100644
index 0000000..c0b7761
--- /dev/null
+++ b/BasicBlockChain/FrmMain.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Windows.Forms;
+using BasicBlockChain.Core;
+
+namespace BasicBlockChain
+{
+ public partial class FrmMain : Form
+ {
+ private BlockChain _nullCoin = null;
+
+ public FrmMain()
+ {
+ InitializeComponent();
+ _nullCoin = new BlockChain(genesisDate: new DateTime(2000, 1, 1), difficulty: 2);
+ }
+
+ private void btnAdd_Click(object sender, EventArgs e)
+ {
+ if (string.IsNullOrEmpty(txtTo.Text) || string.IsNullOrEmpty(txtFrom.Text) || string.IsNullOrEmpty(txtAmount.Text)) { return; }
+ long amount = Convert.ToInt64(txtAmount.Text);
+ _nullCoin.AddTransaction(new Transaction(txtFrom.Text, txtTo.Text, amount, DateTime.UtcNow));
+ txtTo.Text = string.Empty;
+ txtFrom.Text = string.Empty;
+ txtAmount.Text = string.Empty;
+ Lists_Update();
+ }
+
+ private void btnMine_Click(object sender, EventArgs e)
+ {
+ if (string.IsNullOrEmpty(txtMinerName.Text)) { return; }
+ _nullCoin.ProcessPendingTransactions(DateTime.UtcNow, txtMinerName.Text);
+ Lists_Update();
+ }
+
+ private void Lists_Update()
+ {
+ lsbTransactions.Items.Clear();
+ foreach (Block block in _nullCoin.Chain)
+ {
+ foreach (Transaction transaction in block.Transactions)
+ {
+ lsbTransactions.Items.Add(Transaction_ToString(transaction));
+ }
+ }
+
+ lsbPendingTransactions.Items.Clear();
+ foreach (Transaction transaction in _nullCoin.PendingTransactions)
+ {
+ lsbPendingTransactions.Items.Add(Transaction_ToString(transaction));
+ }
+ }
+
+ private string Transaction_ToString(Transaction transaction)
+ {
+ return string.Format("{0} - {1} - {2} - {3}", transaction.Date, transaction.Sender, transaction.Receiver, transaction.MicroCoinAmount);
+ }
+ }
+}
diff --git a/BasicBlockChain/FrmMain.resx b/BasicBlockChain/FrmMain.resx
new file mode 100644
index 0000000..1eaa6e7
--- /dev/null
+++ b/BasicBlockChain/FrmMain.resx
@@ -0,0 +1,408 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAHYCAAB2AgAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBA
+ AAhATgCDQE0A6kBNAOpBTQCCSUkABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAEFMAC9ATQDQQE0A/0BNAP9ATQD/QE0A/0BNANQ+TgAxAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAM2YABUBNAHdATQD6QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A+kBO
+ AIBVVQADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ04ALkBNAM5ATQD/QE0A/0BNAP9ATQD/QE0A/0BN
+ AP9ATQD/QE0A/0BNAP9ATQD/QE0AxkBOACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQAAEQE0Adz9NAPlATQD/QE0A/0BN
+ AP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQDyQU4AZgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABASwAsQE4AzEBN
+ AP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BN
+ AP9ATQC3RU4AGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBA
+ AARATQB3QE0A+EBNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BN
+ AP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAOo/TABRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAEBLACxATgDMQE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAv9BThL/QE0A/0BN
+ AP9ATQD/QE0A/0FOC/9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0FNAJ5JSQAOAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAVVUAA0BNAHdATQD4QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0NO
+ If9NUb7/Rk5V/0BNAP9ATQD/QE0A/0BNAP9GTlX/TFCs/0FNFP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BN
+ AP9ATQD/QE0A4EBMAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQlAAI0BOAMJATQD/QE0A/0BNAP9ATQD/QE0A/0BN
+ AP9ATQD/QE0B/0dPZv9RUvP/UlL//0ZOVf9ATQD/QE0A/0BNAP9ATQD/Rk5V/1JS//9RUun/RU5O/0BN
+ AP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD+P00AkUlJAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAACQU4AZj9NAPVATQD/QE0A/0BN
+ AP9ATQD/QE0A/0BNAP9ATQD/Qk0g/05Rvf9SUv//UlL//1JS//9GTlX/QE0A/0BNAP9ATQD/QE0A/0ZO
+ Vf9SUv//UlL//1JS//9MUKH/QU0M/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQDUQk0AMgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNTQAKQE0AvkBN
+ AP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQH/R09o/1FS8/9SUv//UlL//1JS//9SUv//Rk5V/0BN
+ AP9ATQD/QE0A/0BNAP9GTlX/UlL//1JS//9SUv//UlL//1BS3P9ETjr/QE0A/0BNAP9ATQD/QE0A/0BN
+ AP9ATQD/QE0A/z9NAPk/TQBxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAP04AeUBNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9CTh7/TVG7/1JS//9SUv//UlL//1JS
+ //9SUv//UlL//0ZOVf9ATQD/QE0A/0BNAP9ATQD/Rk5V/1JS//9SUv//UlL//1JS//9SUv//UlL8/0pQ
+ hf9ATQb/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0FOAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBNAKhATQD/QE0A/0BNAP9ATQD/QE0A/0BNAf9HT2T/UVHx/1JS
+ //9SUv//UlL//1JS//9SUv//UlL//1JS//9GTlX/QE0A/0BNAP9ATQD/QE0A/0ZOVf9SUv//UlL//1JS
+ //9SUv//UlL//1JS//9SUv//TlHO/0NOK/9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP8/TgChAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBTQCqQE0A/0BNAP9ATQD/QE0A/0FN
+ F/9NUbf/UlL//1JS//9SUv//UlL//1JS//9SUv//UlL//1JS//9SUv//Rk5V/0BNAP9ATQD/QE0A/0BN
+ AP9GTlX/UlL//1JS//9SUv//UlL//1JS//9SUv//UlL//1JS//9RUff/SFBy/0BNAv9ATQD/QE0A/0BN
+ AP9ATQD/QU0AqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQU0AqkBN
+ AP9ATQD/QE0A/0BNAP9GTlX/UlL//1JS//9SUv//UlL//1JS//9SUv//UlL//1JS//9SUv//UlL//0ZO
+ Vf9ATQD/QE0A/0BNAP9ATQD/Rk5V/1JS//9SUv//UlL//1JS//9SUv//UlL//1JS//9SUv//UlL//1JS
+ //9FTlL/QE0A/0BNAP9ATQD/QE0A/0FNAKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAEFNAKpATQD/QE0A/0BNAP9ATQD/Rk5V/1JS//9SUv//UlL//1JS//9SUv//UlL//1JS
+ //9SUv//UlL//1JS//9GTlX/QE0A/0BNAP9ATQD/QE0A/0ZOVf9SUv//UlL//1JS//9SUv//UlL//1JS
+ //9SUv//UlL//1JS//9SUv//Rk5V/0BNAP9ATQD/QE0A/0BNAP9BTQCqAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBTQCqQE0A/0BNAP9ATQD/QE0A/0ZOVf9SUv//UlL//1JS
+ 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
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFNAKpATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BN
+ AP9ATQD/Qk8A/2+CAP+ivAD/pb8A/6W/AP9icwD/QE0A/0BNAP9ATQD/QE0A/2FzAP+lvwD/pb8A/5+4
+ AP9ldgD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9BTQCqAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBTQCqQE0A/0BNAP9ATQD/QE0A/0BN
+ AP9ATQD/QE0A/0BNAP9ATQD/UF8A/5CnAP+lvwD/pb8A/6W/AP+lvwD/YnMA/0BNAP9ATQD/QE0A/0BN
+ AP9hcwD/pb8A/6W/AP+lvwD/pb8A/4OZAP9HVQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BN
+ AP9ATQD/QU0AqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQU0AqkBN
+ AP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/aHoA/6K7AP+lvwD/pb8A/6W/AP+lvwD/pb8A/2Jz
+ AP9ATQD/QE0A/0BNAP9ATQD/YXMA/6W/AP+lvwD/pb8A/6W/AP+lvwD/m7QA/11uAP9ATQD/QE0A/0BN
+ AP9ATQD/QE0A/0BNAP9ATQD/QE0A/0FNAKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAEFNAKpATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9NXAD/jaQA/6W/AP+lvwD/pb8A/6W/
+ AP+lvwD/pb8A/6W/AP9icwD/QE0A/0BNAP9ATQD/QE0A/2FzAP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/
+ AP+kvgD/fZIA/0RSAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9BTQCqAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBTQCqQE0A/0BNAP9ATQD/QE0A/0FOAP9oegD/oboA/6W/
+ AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/YnMA/0BNAP9ATQD/QE0A/0BNAP9hcwD/pb8A/6W/
+ AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+UrAD/VWQA/0BNAP9ATQD/QE0A/0BNAP9ATQD/P00AqQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQU0AqkBNAP9ATQD/QE0A/0BN
+ AP9hcgD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/2JzAP9ATQD/QE0A/0BN
+ AP9ATQD/YXMA/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6O9AP9YaQD/QE0A/0BN
+ AP9ATQD/QE0A/z9NAKkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFN
+ AKpATQD/QE0A/0BNAP9ATQD/YnMA/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/
+ AP9icwD/QE0A/0BNAP9ATQD/QE0A/2FzAP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/
+ AP+lvwD/YnMA/0BNAP9ATQD/QE0A/0BNAP8/TQCpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAABBTQCqQE0A/0BNAP9ATQD/QE0A/2JzAP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/
+ AP+lvwD/pb8A/6W/AP+lvwD/YnMA/0BNAP9ATQD/QE0A/0BNAP9hcwD/pb8A/6W/AP+lvwD/pb8A/6W/
+ AP+lvwD/pb8A/6W/AP+lvwD/pb8A/2JzAP9ATQD/QE0A/0BNAP9ATQD/P00AqQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQU0AqkBNAP9ATQD/QE0A/0BNAP9icwD/pb8A/6W/
+ AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/2JzAP9ATQD/QE0A/0BNAP9ATQD/YXMA/6W/
+ AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP9icwD/QE0A/0BNAP9ATQD/QE0A/z9N
+ AKkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFNAKpATQD/QE0A/0BN
+ AP9ATQD/YnMA/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP9fcAD/QE0A/0BN
+ AP9ATQD/QE0A/15vAP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/YnMA/0BN
+ AP9ATQD/QE0A/0BNAP8/TQCpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AABBTQCqQE0A/0BNAP9ATQD/QE0A/2JzAP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6C5
+ AP9neQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/ZXcA/5+5AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/
+ AP+lvwD/pb8A/2JzAP9ATQD/QE0A/0BNAP9ATQD/P00AqQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAQU0AqkBNAP9ATQD/QE0A/0BNAP9icwD/pb8A/6W/AP+lvwD/pb8A/6W/
+ AP+lvwD/pb8A/46mAP9OXQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9LWgD/i6IA/6W/
+ AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP9icwD/QE0A/0BNAP9ATQD/QE0A/z9NAKkAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFNAKpATQD/QE0A/0BNAP9ATQD/YnMA/6W/
+ AP+lvwD/pb8A/6W/AP+lvwD/orsA/2+CAP9BTgD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BN
+ AP9ATQD/QE0A/0FOAP9oegD/orsA/6W/AP+lvwD/pb8A/6W/AP+lvwD/YnMA/0BNAP9ATQD/QE0A/0BN
+ AP8/TQCpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBTQCqQE0A/0BN
+ AP9ATQD/QE0A/2JzAP+lvwD/pb8A/6W/AP+lvwD/lKsA/1NjAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BN
+ AP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/1BfAP+RqAD/pb8A/6W/AP+lvwD/pb8A/2Jz
+ AP9ATQD/QE0A/0BNAP9ATQD/P00AqQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAQU0AqkBNAP9ATQD/QE0A/0BNAP9icwD/pb8A/6W/AP+kvgD/dYkA/0JPAP9ATQD/QE0A/0BN
+ AP9ATQD/QE0A/0BNAP9ATQD/V2cA/1dmAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/Qk8A/3WJ
+ AP+kvgD/pb8A/6W/AP9icwD/QE0A/0BNAP9ATQD/QE0A/z9NAKkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFNAKpATQD/QE0A/0BNAP9ATQD/YnMA/6W/AP+XsAD/V2YA/0BN
+ AP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9CTwD/dYkA/6S+AP+kvgD/dYkA/0JPAP9ATQD/QE0A/0BN
+ AP9ATQD/QE0A/0BNAP9ATQD/V2cA/5evAP+lvwD/YnMA/0BNAP9ATQD/QE0A/0BNAP8/TQCpAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBTQCqQE0A/0BNAP9ATQD/QE0A/2Jz
+ AP+AlQD/RVIA/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9QXwD/kagA/6W/AP+lvwD/pb8A/6W/
+ AP+UqwD/U2MA/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9EUQD/eY4A/2FzAP9ATQD/QE0A/0BN
+ AP9ATQD/P00AqQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQU0AqkBN
+ AP9ATQD/QE0A/0BNAP9CTwD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9tgAD/orsA/6W/
+ AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6K8AP9ugQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BN
+ AP9CTwD/QE0A/0BNAP9ATQD/QE0A/z9NAKkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAEFNAKpATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0ta
+ AP+LogD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/46mAP9OXQD/QE0A/0BN
+ AP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP8/TQCpAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBTQCqQE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BN
+ AP9ATQD/QE0A/2JzAP+etwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/
+ AP+lvwD/oLkA/2h6AP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/P00AqQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQU0AqkBNAP9ATQD/QE0A/0BN
+ AP9ATQD/QE0A/0BNAP9ATQD/RlQA/4KXAP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/
+ AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/iJ4A/0pYAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BN
+ AP9ATQD/QE0A/z9NAKkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFN
+ AKpATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/XG0A/5u0AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/
+ AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+dtgD/X3AA/0BN
+ AP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP8/TQCpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAA/TgChQE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/R1UA/5KpAP+lvwD/pb8A/6W/
+ AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/
+ AP+lvwD/pb8A/5KpAP9HVQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0AoAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQU4AUkBNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BN
+ AP9CTwD/dIgA/6O9AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/
+ AP+lvwD/pb8A/6W/AP+lvwD/o70A/3SIAP9CTwD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0FO
+ AFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/TQBxP00A+UBN
+ AP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9XZwD/lq4A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/
+ AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/l68A/1dnAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BN
+ AP9ATQD/P00A+T9NAHEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAEBLACxATQDOQE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0RRAP95jgD/pL4A/6W/
+ AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/gJUA/0VSAP9ATQD/QE0A/0BN
+ AP9ATQD/QE0A/0BNAP9ATQD/QE0A1EJNADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM2YABUBOAIBATQD8QE0A/0BNAP9ATQD/QE0A/0BN
+ AP9ATQD/QE0A/1tsAP+bswD/pb8A/6W/AP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/AP+ctQD/X3AA/0BN
+ AP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD+P00AkUlJAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0wAOUBN
+ ANtATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/RlQA/4CWAP+lvwD/pb8A/6W/AP+lvwD/pb8A/6W/
+ AP+EmgD/SFYA/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQDgQEwAQAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAA7TgANP00AmUBNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/YnMA/563
+ AP+lvwD/pb8A/6C5AP9oegD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9BTQCqPEsAEQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/TQBJQE0A5kBNAP9ATQD/QE0A/0BN
+ AP9ATQD/QE0A/0BNAP9KWAD/iJ4A/46lAP9NXAD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BN
+ AOo/TABRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZR
+ ABY/TACxQE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0FOAP9BTgD/QE0A/0BNAP9ATQD/QE0A/0BN
+ AP9ATQD/QE0A/0BNALJDTgAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9OAFVATQDvQE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BN
+ AP9ATQD/QE0A/0BNAP9ATQD/P00A9UBOAG8AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQkoAH0BNAL9ATQD/QE0A/0BN
+ AP9ATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD/QE0Axz5MACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAABQE4Ab0BNAPhATQD/QE0A/0BNAP9ATQD/QE0A/0BNAP9ATQD6QE4AgFVVAAMAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBTQArQE0AzkBNAP9ATQD/QE0A/0BNAP9ATQDUPk4AMQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAElJAAdBTQCCQE0A60BN
+ AOtATgCDSUkABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA////+B/////////wD////////8AD////////gAH///////4AAP///////AAAP//////wAAAf
+ /////+AAAAf/////gAAAA/////8AAAAA/////AAAAAB////4AAAAAD////gAAAAAH///+AAAAAAf///4
+ AAAAAB////gAAAAAH///+AAAAAAf///4AAAAAB////gAAAAAH///+AAAAAAf///4AAAAAB////gAAAAA
+ H///+AAAAAAf///4AAAAAB////gAAAAAH///+AAAAAAf///4AAAAAB////gAAAAAH///+AAAAAAf///4
+ AAAAAB////gAAAAAH///+AAAAAAf///4AAAAAB////gAAAAAH///+AAAAAAf///4AAAAAB////gAAAAA
+ H///+AAAAAAf///4AAAAAB////gAAAAAH///+AAAAAAf///4AAAAAB////gAAAAAH///+AAAAAAf///4
+ AAAAAB////gAAAAAH///+AAAAAAf///4AAAAAB////gAAAAAH///+AAAAAAf///4AAAAAB////gAAAAA
+ H////AAAAAA////+AAAAAH////8AAAAA/////8AAAAP/////4AAAB//////4AAAf//////wAAD//////
+ /wAAf///////gAH////////AA/////////AP////////+B////8=
+
+
+
\ No newline at end of file
diff --git a/BasicBlockChain/Program.cs b/BasicBlockChain/Program.cs
index 299272c..59cc372 100644
--- a/BasicBlockChain/Program.cs
+++ b/BasicBlockChain/Program.cs
@@ -1,49 +1,16 @@
using System;
-using BasicBlockChain.Core;
-using VAR.Json;
+using System.Windows.Forms;
namespace BasicBlockChain
{
internal class Program
{
+ [STAThread]
private static void Main(string[] args)
{
- // Example BlockChain with some example data
- Console.WriteLine();
- Console.WriteLine("#### Mining BlockChain with sample data");
- var startTime = DateTime.UtcNow;
- BlockChain nullCoin = new BlockChain(genesisDate: new DateTime(2000, 1, 1), difficulty: 3);
- nullCoin.AddTransaction(new Transaction("VAR", "NAM", 10_000_000, new DateTime(2000, 1, 2)));
- nullCoin.ProcessPendingTransactions(new DateTime(2000, 1, 2), "Kable");
- nullCoin.AddTransaction(new Transaction("NAM", "VAR", 5_000_000, new DateTime(2000, 1, 3)));
- nullCoin.ProcessPendingTransactions(new DateTime(2000, 1, 3), "Kable");
- nullCoin.AddTransaction(new Transaction("NAM", "VAR", 5_000_000, new DateTime(2000, 1, 4)));
- nullCoin.ProcessPendingTransactions(new DateTime(2000, 1, 4), "Kable");
- Console.WriteLine(JsonWriter.WriteObject(nullCoin, indent: true));
- var endTime = DateTime.UtcNow;
- Console.WriteLine($"Duration: {endTime - startTime}");
-
- // Verify
- Console.WriteLine("BlockChain is Valid? {0}", nullCoin.Verify() ? "True" : "False");
-
- // Show balance
- Console.WriteLine("Balance of \"{0}\": {1}", "VAR", nullCoin.GetMicroCoinBalance("VAR"));
- Console.WriteLine("Balance of \"{0}\": {1}", "NAM", nullCoin.GetMicroCoinBalance("NAM"));
- Console.WriteLine("Balance of \"{0}\": {1}", "Kable", nullCoin.GetMicroCoinBalance("Kable"));
-
- // Tamper with the data
- Console.WriteLine();
- Console.WriteLine("#### Tampering with the data");
- nullCoin.Chain[1].Transactions[0].MicroCoinAmount = 1000_000_000;
- Console.WriteLine(JsonWriter.WriteObject(nullCoin, indent: true));
-
- // Verify
- Console.WriteLine("BlockChain is Valid? {0}", nullCoin.Verify() ? "True" : "False");
- Console.WriteLine("Balance of \"{0}\": {1}", "VAR", nullCoin.GetMicroCoinBalance("VAR"));
- Console.WriteLine("Balance of \"{0}\": {1}", "NAM", nullCoin.GetMicroCoinBalance("NAM"));
- Console.WriteLine("Balance of \"{0}\": {1}", "Kable", nullCoin.GetMicroCoinBalance("Kable"));
-
- Console.Read();
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new FrmMain());
}
}
}
diff --git a/BasicBlockChain/blocks.ico b/BasicBlockChain/blocks.ico
new file mode 100644
index 0000000..8df318e
Binary files /dev/null and b/BasicBlockChain/blocks.ico differ