diff --git a/AmiiBomb.sln b/AmiiBomb.sln new file mode 100644 index 0000000..01ad083 --- /dev/null +++ b/AmiiBomb.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.24720.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AmiiBomb", "AmiiBomb\AmiiBomb.csproj", "{BD0FE5AD-B8C1-4246-ADFB-2D0F5F26602C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BD0FE5AD-B8C1-4246-ADFB-2D0F5F26602C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BD0FE5AD-B8C1-4246-ADFB-2D0F5F26602C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BD0FE5AD-B8C1-4246-ADFB-2D0F5F26602C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BD0FE5AD-B8C1-4246-ADFB-2D0F5F26602C}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/AmiiBomb/About_Form.Designer.cs b/AmiiBomb/About_Form.Designer.cs new file mode 100644 index 0000000..7e0d9c2 --- /dev/null +++ b/AmiiBomb/About_Form.Designer.cs @@ -0,0 +1,188 @@ +namespace AmiiBomb +{ + partial class About_Form + { + /// + /// 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(About_Form)); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.label10 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.label9 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.label10); + this.groupBox1.Controls.Add(this.label8); + this.groupBox1.Location = new System.Drawing.Point(4, -2); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(141, 249); + this.groupBox1.TabIndex = 23; + this.groupBox1.TabStop = false; + // + // label10 + // + this.label10.Location = new System.Drawing.Point(6, 120); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(129, 126); + this.label10.TabIndex = 25; + this.label10.Text = "English Translation by Ac_K"; + this.label10.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(36, 23); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(73, 91); + this.label8.TabIndex = 24; + this.label8.Text = "AmiiBomb\r\nv0.2 Alpha\r\n\r\nAmiiBombuino\r\nv0.2 Alpha\r\n\r\nby Ac_K"; + this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(38, 274); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 24; + this.button1.Text = "OK !"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // label9 + // + this.label9.Location = new System.Drawing.Point(152, 255); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(343, 32); + this.label9.TabIndex = 25; + this.label9.Text = "● If you want to thanks me for AmiiBomb, you can donate me to this paypal adress." + + " Thanks!\r\n"; + // + // textBox1 + // + this.textBox1.BackColor = System.Drawing.Color.White; + this.textBox1.Location = new System.Drawing.Point(154, 290); + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.Size = new System.Drawing.Size(242, 20); + this.textBox1.TabIndex = 26; + this.textBox1.Text = "ackeedy@gmail.com"; + // + // textBox2 + // + this.textBox2.BackColor = System.Drawing.Color.White; + this.textBox2.Location = new System.Drawing.Point(155, 32); + this.textBox2.Multiline = true; + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBox2.Size = new System.Drawing.Size(340, 96); + this.textBox2.TabIndex = 29; + this.textBox2.Text = resources.GetString("textBox2.Text"); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label3.Location = new System.Drawing.Point(151, 9); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(78, 20); + this.label3.TabIndex = 28; + this.label3.Text = "Libraries"; + // + // textBox3 + // + this.textBox3.BackColor = System.Drawing.Color.White; + this.textBox3.Location = new System.Drawing.Point(155, 154); + this.textBox3.Multiline = true; + this.textBox3.Name = "textBox3"; + this.textBox3.ReadOnly = true; + this.textBox3.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBox3.Size = new System.Drawing.Size(340, 90); + this.textBox3.TabIndex = 31; + this.textBox3.Text = resources.GetString("textBox3.Text"); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(151, 131); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(67, 20); + this.label1.TabIndex = 30; + this.label1.Text = "Thanks"; + // + // About_Form + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(507, 326); + this.Controls.Add(this.textBox3); + this.Controls.Add(this.label1); + this.Controls.Add(this.textBox2); + this.Controls.Add(this.label3); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.label9); + this.Controls.Add(this.button1); + this.Controls.Add(this.groupBox1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "About_Form"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "About AmiiBomb"; + this.Shown += new System.EventHandler(this.About_Form_Shown); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Button button1; + public System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox textBox1; + public System.Windows.Forms.Label label9; + private System.Windows.Forms.TextBox textBox2; + public System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox textBox3; + public System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/AmiiBomb/About_Form.cs b/AmiiBomb/About_Form.cs new file mode 100644 index 0000000..81e3aaf --- /dev/null +++ b/AmiiBomb/About_Form.cs @@ -0,0 +1,48 @@ +using System.Diagnostics; +using System.Windows.Forms; + +namespace AmiiBomb +{ + public partial class About_Form : Form + { + public About_Form() + { + InitializeComponent(); + } + + private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Process.Start("https://github.com/Falco20019/libamiibo"); + } + + private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Process.Start("https://github.com/socram8888/amiitool"); + } + + private void linkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Process.Start("http://www.amiibo.life/"); + } + + private void linkLabel4_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Process.Start("https://github.com/konstantin-kelemen/arduino-amiibo-tools"); + } + + private void linkLabel5_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Process.Start("https://gist.github.com/bkifft/c6fa52dc39e29b85cb2787ac6dd633ed"); + } + + private void button1_Click(object sender, System.EventArgs e) + { + this.Close(); + } + + private void About_Form_Shown(object sender, System.EventArgs e) + { + Translate_Class.Translate(this); + } + } +} diff --git a/AmiiBomb/About_Form.resx b/AmiiBomb/About_Form.resx new file mode 100644 index 0000000..7b3434e --- /dev/null +++ b/AmiiBomb/About_Form.resx @@ -0,0 +1,1819 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + -> Falco20019 for LibAmiibo +https://github.com/Falco20019/libamiibo + +-> AngleSharp +https://anglesharp.github.io/ + +-> Christophe Diericx for +ArduinoSketchUploader +https://github.com/christophediericx/ArduinoSketchUploader + +-> MoonGateLabs for i18n-Unity-CSharp +https://github.com/MoonGateLabs/i18n-unity-csharp + + + -> Socram8888 for Amiitool +https://github.com/socram8888/amiitool + +-> John "LouieGeetoo" Pray for Amiibo.life +http://www.amiibo.life + +-> Konstantin-Kelemen for Arduino Sketches and his guide +https://github.com/konstantin-kelemen/arduino-amiibo-tools + +-> Bkifft for AmiiScript.sh +https://gist.github.com/bkifft/c6fa52dc39e29b85cb2787ac6dd633ed + +-> Contributors of 3DBrew.org +https://www.3dbrew.org/wiki/Amiibo + +-> And many others for various informations on Amiibo... + + + + + AAABAAUAEBAAAAAAIABoBAAAVgAAACAgAAAAACAAqBAAAL4EAAAwMAAAAAAgAKglAABmFQAAQEAAAAAA + IAAoQgAADjsAAICAAAAAACAAKAgBADZ9AAAoAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wH///8B////AQAAAAcAAAAHBAEA5wQBAP0EAQD9BAEA+wAAAAkAAAAH////Af// + /wH///8B////Af///wH///8B////AQAAAAsHAgD1CAIA/6s9AP+4QgD/uEIA/7hCAP8JAwD/CAIA/wIA + ABf///8B////Af///wH///8B////Af///wEAAADvtUEA/7pDAP+3QgD/t0IA/7dCAP+3QgD/uUMA/71E + AP8IAgD/AAAAB////wH///8B////Af///wEAAAADAQAA77JAAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+6QwD/CQMA/wAAAAn///8B////Af///wH///8BAAAA+60+AP+3QgL//Jll//6aZv/+mmb//ppm//6c + aP+9SQv/t0IA/7hCAP8EAQD7////Af///wH///8B////AQAAAP2sPQD/+5ll//+ZZP//m2f//5tn//+b + Z///mmb//51p/7pGBv+4QgD/BAEA/f///wH///8B////Af///wEAAAD9rD0A//uXYv/o7t///ppm//+b + Z///m2f//5tn//+caP+6Rgb/uEIA/wQBAP3///8B////Af///wH///8BAAAA+6w7AP/m6tz/6PHk/+jv + 4f//mmb//5tn//+bZ///nGj/ukYG/7hCAP8EAQD7////Af///wH///8B////AQAAAAMBAADvsT8B/+fu + 4P/+m2f//5tn//+bZ///m2f//Ztn/71HBv8JAwD/AAAACf///wH///8B////Af///wH///8BAAAA77RA + AP/9m2b//51o//+daP//nWj//59q/75JCf+9RAD/CAIA/wAAAAf///8B////Af///wH///8B////AQAA + AAsHAgD1CwYE/wsGBP8LBgT/CwYE/wsGBP8IAwD/CAIA/wIAABf///8B////Af///wH///8B////Af// + /wH///8BAAAABwAAAPkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAABf///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAD5AAAA/wAAAP8AAQL/AAAA/wAAAP8AAAAT////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAEQAAABcAAAD/Bjt2/wABAv8AAAAxAAAAA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAFwAAAP8GO3b/AAAA/wAAABP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAAHAAEC9wAAAP0AAAAR////Af// + /wH///8B////AQAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8oAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAA////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAzwAAAPsAAAD7AAAA+wAA + APsAAAD7AAAA+wAAAPkAAAAF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAsAAAANAAAADQAAAA0IAwDTCAMA/wgD + AP8IAwD/CAMA/wgDAP8IAwD/CAMA+wAAAA8AAAANAAAADQAAAA3///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA6QAAAP8AAAD/AAAA/545 + AP+6QwD/ukMA/7pDAP+6QwD/ukMA/7pDAP+5QgD/AgEA/wAAAP8AAAD/AAAA/wAAABf///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAEwAAABcPBQDrEAUA/xAF + AP8QBQD/nTgA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7ZBAP8RBgD/EAUA/xAFAP8QBQD/BAEAKQAA + ABf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADdAAAA/7NA + AP+9RAD/vUQA/71EAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7xEAP+9RAD/vUQA/8NG + AP8QBQD/AAAA/wAAAA3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AN0AAAD/rT4A/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/vUQA/xAFAP8AAAD/AAAADf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAA3QAAAP+tPgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+9RAD/EAUA/wAAAP8AAAAN////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAABQAAAAUCAADdAgEA/60+AP+3QgD/t0IB/7dCAf+3QgH/t0IB/7dCAf+3QgH/t0IB/7dC + Af+3QgH/t0IB/7dCAP+3QgD/t0IA/71EAP8SBgD/AgEA/wAAAA8AAAAF////Af///wH///8B////Af// + /wH///8B////Af///wEAAAD5AAAA+6Q7AP+2QQD/tkIA/7ZAAP/6mGT//ppm//6aZv/+mmb//ppm//6a + Zv/+mmb//ppm//6aZv/+nWn/wU8S/7dCAP+3QgD/t0IA/7ZBAP+5QgD/CAMA+wAAAPn///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPsAAAD/pTsA/7ZBAP+4QwT/t0IF//uZZP//m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+dav/DUBb/uEQF/7dCAP+3QgD/t0IA/7pDAP8IAwD/AAAA+/// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA+wAAAP+lOwD/tD4A//iXYv//nGj//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5pm//+caP//n2z/vkoN/7dCAP+3QgD/ukMA/wgD + AP8AAAD7////Af///wH///8B////Af///wH///8B////Af///wEAAAD7AAAA/6U7AP+0PwD/+JZh//+b + Z///mGL//5hi//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+eav++Sg3/t0IA/7dC + AP+6QwD/CAMA/wAAAPv///8B////Af///wH///8B////Af///wH///8B////AQAAAPsAAAD/pTsA/7Q/ + AP/4lmH//5ll/+nq2//p7N3//ptn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//55q/75K + Df+3QgD/t0IA/7pDAP8IAwD/AAAA+////wH///8B////Af///wH///8B////Af///wH///8BAAAA+wAA + AP+lOwD/tD8A//iVX///mGP/6O/i/+jx5P/+mmX//5ll//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///nmr/vkoN/7dCAP+3QgD/ukMA/wgDAP8AAAD7////Af///wH///8B////Af///wH///8B////Af// + /wEAAAD7AAAA/6U7AP+1PAD/5ePT/+jv4f/o8uT/6PLl/+jv4v/p7d///5ll//+bZ///m2f//5tn//+b + Z///m2f//5tn//+eav++Sg3/t0IA/7dCAP+6QwD/CAMA/wAAAPv///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPkAAAD7pDsA/7Q8AP/l5Nb/5/Hk/+fx5P/o8uX/6PHk/+jv4f//mWX//5tn//+b + Z///m2f//5tn//+bZ///m2f//55q/75KDf+3QgD/tkEA/7lCAP8IAwD7AAAA+f///wH///8B////Af// + /wH///8B////Af///wH///8BAAAABQAAAAUCAADdAgAA/60/A/+2PwP/5+zf/+jx5P/+m2j//ptn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///nmr/vkoN/71EAP8SBgD/AgEA/wAAAA8AAAAF////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAN0AAAD/rT4A/7Y/AP/n6tv/6O/h//6b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//Jlk//ucaP++Sg3/vUQA/xAFAP8AAAD/AAAADf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA3QAAAP+tPgD/tkAA//uX + Yv//mWX//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+dav/AThL/tkAA/7ZBAP+9RAD/EAUA/wAA + AP8AAAAN////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADdAAAA/7NA + AP+8QgD//J5n//+gav//oGr//6Bq//+gav//oGr//6Bq//+gav//oGr//6Nt/8dREv+9RAD/vUQA/8NG + AP8QBQD/AAAA/wAAAA3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + ABMAAAAXDwUA6w8FAP8VDQj/Fg0J/xYNCf8WDQn/Fg0J/xYNCf8WDQn/Fg0J/xYNCf8WDQn/EAYB/xAF + AP8QBQD/EAUA/wQBACkAAAAX////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADpAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAF////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAAsAAAANAAAA8wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAALQAAAA3///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADzAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAj////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPMAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAACP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA9QAA + AP8AAAD/AAAA/wAAAP8AAAD/AAIF/wADBv8AAAD/AAAA/wAAAP8AAAD/AAAAJf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAAhAAAAIwAAACMAAAArAAAA/wAAAP8GO3b/B0B+/wADBv8AAAD/AAAASQAAACMAAAAF////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAA0AAAD/AAAA/wY3bv8GO3b/AAIE/wAAAP8AAAA/AAAAFwAA + AAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABcAAAApAAAA/wAAAP8GOXH/Bjp0/wAB + Af8AAAD/AAAAJf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAABcAAAD/AAAA/wc9 + ef8HPnz/AAEB/wAAAP8AAAAj////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AA0AAAANAAIF8wADBf8AAAD/AAAA/wAAACP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADxAAAA+wAAAPsAAAD7AAAAI////wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAKAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAALcAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA9QAA + AAX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAALsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA+QAAAAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAABEAAAATAAAAEwAAABMAAAATAAAAEwwEAL0NBAD/DQQA/w0EAP8NBAD/DQQA/w0E + AP8NBAD/DQQA/w0EAP8NBAD/DQQA+wAAABUAAAATAAAAEwAAABMAAAATAAAAEwAAAAP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAN8AAAD/AAAA/wAAAP8AAAD/AAAA/5E0AP+7QwD/u0MA/7tD + AP+7QwD/u0MA/7tDAP+7QwD/u0MA/7tDAP+7QwD/ukMA/wMBAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ACP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAN0AAAD/AAAA/wAAAP8AAAD/AAAA/44z + AP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7dCAP+2QgD/t0IA/7dCAP+2QgD/tkEA/wMBAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAACH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABsAAAAhAAAAIRcIAOEXCAD/FwgA/xcI + AP8XCAD/FwgA/5E0AP+3QgD/tkIA/7ZBAP+3QgD/tkIA/7dCAP+2QgD/tkEA/7dCAP+2QgD/tkEA/xkJ + AP8XCAD/FwgA/xcIAP8XCAD/GQkA/wcCADsAAAAhAAAAIQAAAAP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/7A/ + AP/ARQD/wEUA/8BFAP/ARQD/wEUA/7hCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7ZBAP+3QgD/tkEA/7ZB + AP+3QgD/tkIA/79FAP/ARQD/v0UA/79FAP/ARQD/yUgA/xkJAP8AAAD/AAAA/wAAABX///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AM0AAAD/AAAA/6g8AP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7dC + AP+2QgD/t0IA/7dCAP+2QgD/t0IA/7dCAP+2QgD/t0IA/7dCAP+2QgD/wEUA/xcIAP8AAAD/AAAA/wAA + ABP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAM0AAAD/AAAA/6g8AP+3QgD/tkIA/7ZBAP+3QgD/tkIA/7ZBAP+3QgD/tkIA/7ZB + AP+3QgD/tkIA/7dCAP+2QgD/tkEA/7dCAP+2QgD/tkEA/7dCAP+2QgD/tkEA/7dCAP+2QgD/v0UA/xcI + AP8AAAD/AAAA/wAAABP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAM0AAAD/AAAA/6g8AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7ZBAP+3QgD/tkEA/7ZBAP+3QgD/tkEA/7ZBAP+3QgD/tkEA/7ZB + AP+3QgD/v0UA/xcIAP8AAAD/AAAA/wAAABP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM0AAAD/AAAA/6g8AP+3QgD/t0IA/7ZC + AP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7dCAP+2QgD/t0IA/7dCAP+2QgD/t0IA/7dC + AP+2QgD/t0IA/7dCAP+2QgD/wEUA/xcIAP8AAAD/AAAA/wAAABP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAcAAAAHAAAABwMBAM0DAQD/AwEA/6g8 + AP+3QgD/tkIA/7dCAv+3QgL/t0IC/7dCAv+3QgL/t0IC/7dCAv+3QgL/t0IC/7dCAv+3QgL/t0IC/7dC + Av+3QgL/t0IC/7dCAP+2QgD/tkEA/7dCAP+2QgD/v0UA/xoJAP8DAQD/AwEA/wAAABcAAAAHAAAAB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPUAAAD5AAAA+Zs3 + AP22QQD/tkEA/7ZCAP+3QgD/tUAA//iXYv/9mmb//Zpm//2aZv/9mmb//Zpm//2aZv/9mmb//Zpm//2a + Zv/9mmb//Zpm//2aZv/9mmb//Z5r/8ZVG/+3QgD/tkEA/7ZBAP+3QgD/tkIA/7ZBAP+2QQD/ukMA/w0E + APsAAAD5AAAA9f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APkAAAD/AAAA/5w4AP+3QgD/t0IA/7ZCAP+3QgD/tUAA//mYY///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZv//m2f//5tn//+bZv//m2f//59r/8dVG/+2QgD/t0IA/7dCAP+2QgD/t0IA/7dC + AP+2QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/tkEA/7lEBv+5RAf/uEMH//qXY//+mmf//ppm//6a + Zv/+mmf//ppm//6aZv/+mmf//ppm//6bZv//mmb//ppm//6bZv//mmb//p5r/8lYIP+5RAf/uUUH/7dC + Af+2QgD/tkEA/7dCAP+2QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/sz0A//aVYP//nGn//p1p//6a + Z///m2f//ptm//6aZ///m2f//ptm//6aZ///m2f//ptm//6aZv//m2f//ppm//6aZv//m2f//ppm//6c + aP//nGn//qFv/8JPFf+3QgD/tkEA/7ZBAP+3QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/sz0A//WT + Xv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZv//m2f//5tn//+b + Zv//m2f//5tn//+bZv//m2f//59s/8FPFP+2QgD/t0IA/7dCAP+2QgD/u0MA/w0EAP8AAAD/AAAA+f// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4 + AP+3QgD/sz0A//WTXv/+mmf//ptn//6WYP/+lmD//pZg//6aZv/+mmf//ppm//6aZv/+mmf//ppm//6b + Zv//mmb//ppm//6bZv//mmb//ppm//6bZv//mmb//p9s/8FPFP+2QgD/tkEA/7dCAP+2QgD/u0MA/w0E + AP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APkAAAD/AAAA/5w4AP+3QgD/sz0A//WTXv//m2f//plk/+rn1v/p69r/6era//6bZ///m2f//ptm//6a + Z///m2f//ptm//6aZv//m2f//ppm//6aZv//m2f//ppm//6aZv//m2f//p9s/8FPFP+3QgD/tkEA/7ZB + AP+3QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/sz0A//WTXv//m2f//5lk/+ju4P/o8uX/6PHk//6b + Z///m2f//5tn//+bZ///m2f//5tn//+bZv//m2f//5tn//+bZv//m2f//5tn//+bZv//m2f//59s/8FP + FP+2QgD/t0IA/7dCAP+2QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/sz0A//WSXP/+mWT//pdg/+ju + 4P/n8uT/5/Hk//6ZZP/+mWT//plk//6aZv/+mmf//ppm//6bZv//mmb//ppm//6bZv//mmb//ppm//6b + Zv//mmb//p9s/8FPFP+2QgD/tkEA/7dCAP+2QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/tDkA/+Tb + yv/o7uD/6O7g/+jx5P/o8uX/6PHl/+ju4P/o7uD/6erc//6ZZP//m2f//ptm//6aZv//m2f//ppm//6a + Zv//m2f//ppm//6aZv//m2f//p9s/8FPFP+3QgD/tkEA/7ZBAP+3QgD/u0MA/w0EAP8AAAD/AAAA+f// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4 + AP+3QgD/tDkA/+Tg0P/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6O7g//+ZZP//m2f//5tn//+b + Zv//m2f//5tn//+bZv//m2f//5tn//+bZv//m2f//59s/8FPFP+2QgD/t0IA/7dCAP+2QgD/u0MA/w0E + AP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APUAAAD5AAAA+Zs3AP22QQD/szkA/+Pezv/n8OP/5/Dj/+fx5P/n8uT/5/Lk/+fx5P/n8eT/6O7f//6Z + Y//+mmf//ppm//6bZv//mmb//ppm//6bZv//mmb//ppm//6bZv//mmb//p9s/8FPFP+2QgD/tkIA/7ZB + AP+2QQD/ukMA/w0EAPsAAAD5AAAA9f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAcAAAAHAAAABwMBAM0DAQD/AwEA/6g9BP+3QwT/tj4E/+bq3P/o8uX/5/Hk//6b + aP/+m2f//ptn//6bZv//m2f//5pm//6bZ///m2f//ptm//6bZ///m2f//ptm//6bZ///m2f//p9s/8FP + FP+3QgD/wEUA/xoJAP8DAQD/AwEA/wAAABcAAAAHAAAAB////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM0AAAD/AAAA/6g8AP+3QgD/tT0A/+bq + 3P/n8uX/6PHk//6bZ///m2b//5tn//+bZ///m2b//5tn//+bZ///m2f//5tm//+bZ///m2f//5tm//+b + Z///m2f//59s/8FPFP+3QgD/wEUA/xcIAP8AAAD/AAAA/wAAABP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM0AAAD/AAAA/6g8 + AP+3QgD/tT0A/+bl1v/o7uD/6O7f//6bZ///m2f//ptn//6aZ///m2f//ptn//6bZ///m2f//ptn//6b + Z///m2f//ptn//uYZP/5mGP/+Zxo/8FOE/+2QgD/v0UA/xcIAP8AAAD/AAAA/wAAABP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AM0AAAD/AAAA/6g8AP+3QgD/tUAA//mWYP//mWT//5lk//6bZv//m2f//5pm//6bZv//m2f//5pm//6b + Z///m2f//ptm//6bZ///m2f//p9s/8VUG/+1QAD/tT8A/7ZBAP+3QgD/wEUA/xcIAP8AAAD/AAAA/wAA + ABP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAM0AAAD/AAAA/6g8AP+3QgD/tUAA//mYY///m2b//5tn//+bZ///m2b//5tn//+b + Z///m2b//5tn//+bZ///m2f//5tm//+bZ///m2f//59r/8dVG/+3QgD/t0IA/7dCAP+3QgD/wEUA/xcI + AP8AAAD/AAAA/wAAABP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/7A/AP/ARQD/vkMA//ufaP//omz//qJs//6i + bP//omz//qJs//6ibP//omz//qJs//6ibP//omz//qJs//6ibP//omz//qdx/89aHP/ARQD/wEUA/8BF + AP/ARQD/yUgA/xkJAP8AAAD/AAAA/wAAABX///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABsAAAAjAAAAIxcIAOEYCAD/FwgA/yAT + DP8hFA3/IRQN/yEUDf8hFA3/IRQN/yEUDf8hFA3/IRQN/yEUDf8hFA3/IRQN/yEUDf8hFA3/IRQO/xoL + A/8YCAD/GAgA/xgIAP8YCAD/GQkA/wcCADsAAAAjAAAAIwAAAAP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AN0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAACH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAN8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAACP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAABEAAAATAAAAEwAAAO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEEAAAATAAAAEwAA + AAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAO0AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ADP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAADP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAECP8ABAj/AAQJ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADf///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAADEAAAAzAAAAMwAA + ADMAAAAzAAAAPwAAAP8AAAD/AAAA/wY6c/8HP33/BkGA/wAECf8AAAD/AAAA/wAAAGkAAAAzAAAAMwAA + AAv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAEwAAAP8AAAD/AAAA/wY5cf8HPnv/Bz99/wAECP8AAAD/AAAA/wAA + AEX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAFQAAAP8AAAD/AAAA/wY0aP8GOXH/Bjpz/wAD + Bv8AAAD/AAAA/wAAAFsAAAAhAAAAIQAAAAf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAACEAAAAjAAAAOwAA + AP8AAAD/AAAA/wY2bP8GOXH/Bjhw/wABAv8AAAD/AAAA/wAAADf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAIQAAAP8AAAD/AAAA/wc7dv8HPnv/Bz16/wABAv8AAAD/AAAA/wAAADP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAIwAAAP8AAAD/AAAA/wc9ef8HP33/Bj59/wABAv8AAAD/AAAA/wAA + ADP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAABMAAAATAAAAEwAECO0ABAn/AAQI/wAA + AP8AAAD/AAAA/wAAADP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAOkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAADP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//ygA + AABAAAAAgAAAAAEAIAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAChAAAA9wAAAPcAAAD3AAAA9wAAAPcAAAD3AAAA9wAAAPcAAAD3AAAA9wAA + APcAAAD3AAAA9wAAAPcAAADzAAAAB////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAowAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA9wAAAAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAKMAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPcAAAAH////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAFQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAA + ABkQBQCpEQYA/xEGAP8RBgD/EQYA/xEGAP8RBgD/EQYA/xEGAP8RBgD/EQYA/xEGAP8RBgD/EQYA/xEG + AP8RBgD5AQAAGwAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAF////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAANUAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/hC8A/71EAP+9RAD/vUQA/71EAP+9RAD/vUQA/71EAP+9RAD/vUQA/71E + AP+9RAD/vUQA/71EAP+9RAD/vEMA/wUCAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAL/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADTAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4AuAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7ZBAP8FAgD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAC3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA0wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+ALgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+2QQD/BQIA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAt////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAIQAAAC0AAAAtAAAALR4LANcgCwD/IAsA/yALAP8gCwD/IAsA/yAL + AP8gCwD/hjAA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/tkEA/yEMAP8gCwD/IAsA/yALAP8gCwD/IAsA/yALAP8iDAD/CgMASwAAAC0AAAAtAAAALQAA + AAX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAL8AAAD/AAAA/wAAAP+uPwD/w0YA/8NG + AP/DRgD/w0YA/8NGAP/DRgD/w0YA/7pDAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/CRgD/w0YA/8NGAP/DRgD/w0YA/8NGAP/DRgD/z0sA/yIM + AP8AAAD/AAAA/wAAAP8AAAAb////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAC7AAAA/wAA + AP8AAAD/ozsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/8NGAP8gCwD/AAAA/wAAAP8AAAD/AAAAGf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAuwAAAP8AAAD/AAAA/6M7AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/DRgD/IAsA/wAAAP8AAAD/AAAA/wAAABn///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAALsAAAD/AAAA/wAAAP+jOwD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/w0YA/yALAP8AAAD/AAAA/wAA + AP8AAAAZ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAC7AAAA/wAAAP8AAAD/ozsA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/8NG + AP8gCwD/AAAA/wAAAP8AAAD/AAAAGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAuwAA + AP8AAAD/AAAA/6M7AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP/DRgD/IAsA/wAAAP8AAAD/AAAA/wAAABn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAALsAAAD/AAAA/wAAAP+jOwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/w0YA/yALAP8AAAD/AAAA/wAAAP8AAAAZ////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAcAAAAHAAAABwAAAAcEAQC7BQIA/wUCAP8FAgD/ozoA/7dCAP+3QgD/t0IA/7dC + Av+3QgP/t0ID/7dCA/+3QgP/t0ID/7dCA/+3QgP/t0ID/7dCA/+3QgP/t0ID/7dCA/+3QgP/t0ID/7dC + A/+3QgP/t0ID/7dCA/+3QgP/t0IB/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/8NGAP8jDAD/BQIA/wUC + AP8FAgD/AQAAHQAAAAcAAAAHAAAAB////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADzAAAA9wAAAPcAAAD3kjQA/bZBAP+2QQD/tkEA/7ZC + AP+3QgD/t0IA/7U/AP/2lmH//Zpm//2aZv/9mmb//Zpm//2aZv/9mmb//Zpm//2aZv/9mmb//Zpm//2a + Zv/9mmb//Zpm//2aZv/9mmb//Zpm//2aZv/9mmb//Z9s/8xcJP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/tkEA/7ZBAP+2QQD/u0MA/xEGAPkAAAD3AAAA9wAAAPP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA9wAAAP8AAAD/AAAA/5M1 + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+1PwD/+Jdi//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+gbf/MXCT/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/71EAP8RBgD/AAAA/wAAAP8AAAD3////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APcAAAD/AAAA/wAAAP+TNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/tT8A//iXYv//m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///oG3/zFwk/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+9RAD/EQYA/wAA + AP8AAAD/AAAA9////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAD3AAAA/wAAAP8AAAD/kzUA/7dCAP+3QgD/tkEA/7lFCf+6Rgr/ukYK/7hD + Cv/4l2L//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//6Bt/85fKv+6Rgr/ukYK/7pGCv+3QgL/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/vUQA/xEGAP8AAAD/AAAA/wAAAPf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA9wAAAP8AAAD/AAAA/5M1AP+3QgD/t0IA/7E7 + AP/zk17//51q//+dav//nWr//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+aZv//nWn//51q//+dav//pHH/xVQc/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/71EAP8RBgD/AAAA/wAAAP8AAAD3////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPcAAAD/AAAA/wAA + AP+TNQD/t0IA/7dCAP+yPAD/8pFc//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//6Fu/8VTG/+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+9RAD/EQYA/wAAAP8AAAD/AAAA9/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAD3AAAA/wAAAP8AAAD/kzUA/7dCAP+3QgD/sjwA//KRXP//m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+hbv/FUxv/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/vUQA/xEG + AP8AAAD/AAAA/wAAAPf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA9wAAAP8AAAD/AAAA/5M1AP+3QgD/t0IA/7I8AP/ykVz//5tn//+b + Z///m2f//5Vf//+VXv//lV7//5Ve//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///oW7/xVMb/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/71EAP8RBgD/AAAA/wAAAP8AAAD3////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPcAAAD/AAAA/wAAAP+TNQD/t0IA/7dC + AP+yPAD/8pFc//+bZ///m2f//5hj/+vj0f/q6df/6unX/+rn1v/+m2j//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6Fu/8VT + G/+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+9RAD/EQYA/wAAAP8AAAD/AAAA9////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAD3AAAA/wAA + AP8AAAD/kzUA/7dCAP+3QgD/sjwA//KRXP//m2f//5tn//+YY//p7d//6PLl/+jy5f/o8eT//pto//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+hbv/FUxv/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/vUQA/xEGAP8AAAD/AAAA/wAA + APf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAA9wAAAP8AAAD/AAAA/5M1AP+3QgD/t0IA/7I8AP/ykVz//5tn//+bZ///mGP/6e3f/+jy + 5f/o8uX/6PHk//6baP//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///oW7/xVMb/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/71E + AP8RBgD/AAAA/wAAAP8AAAD3////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPcAAAD/AAAA/wAAAP+TNQD/t0IA/7dCAP+yPAD/8o9Y//+Y + Y///mGP//5Vf/+nt3//o8uX/6PLl/+jx5P/+mWT//5hj//+YY///mGP//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6Fu/8VTG/+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+9RAD/EQYA/wAAAP8AAAD/AAAA9////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAD3AAAA/wAAAP8AAAD/kzUA/7dC + AP+3QgD/szYA/+PUwf/p7d//6e3f/+nt3v/o8uT/6PLl/+jy5f/o8uX/6e3f/+nt3//p7d//6ujZ//+Y + Y///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+h + bv/FUxv/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/vUQA/xEGAP8AAAD/AAAA/wAAAPf///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA9wAA + AP8AAAD/AAAA/5M1AP+3QgD/t0IA/7M2AP/j2sr/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+nt3///mGP//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///oW7/xVMb/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/71EAP8RBgD/AAAA/wAA + AP8AAAD3////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPcAAAD/AAAA/wAAAP+TNQD/t0IA/7dCAP+zNgD/49rK/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/p7d///5hj//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6Fu/8VTG/+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+9RAD/EQYA/wAAAP8AAAD/AAAA9////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADzAAAA9wAAAPcAAAD3kjQA/bZBAP+2QQD/sjYA/+LX + xv/n8OP/5/Dj/+fw4//n8eT/6PLl/+jy5f/o8uX/6PHk/+jx5P/o8eT/6e3e//+YY///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+hbv/FUxv/t0IA/7dC + AP+3QgD/tkEA/7ZBAP+2QQD/u0MA/xEGAPkAAAD3AAAA9wAAAPP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAABwAAAAcAAAAHAAAABwQB + ALsFAgD/BQIA/wUBAP+kPAX/t0MG/7dDBv+2PQb/5ufa/+jy5f/o8uX/6PHk//6caf/+m2j//pto//6b + aP//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///oW7/xVMb/7dCAP+3QgD/w0YA/yMMAP8FAgD/BQIA/wUCAP8BAAAdAAAABwAAAAcAAAAH////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAC7AAAA/wAAAP8AAAD/ozsA/7dCAP+3QgD/tTwA/+bn2v/o8uX/6PLl/+jx + 5P/+m2j//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//6Fu/8VTG/+3QgD/t0IA/8NGAP8gCwD/AAAA/wAAAP8AAAD/AAAAGf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAuwAAAP8AAAD/AAAA/6M7AP+3QgD/t0IA/7U8 + AP/m59r/6PLl/+jy5f/o8eT//pto//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+hbv/FUxv/t0IA/7dCAP/DRgD/IAsA/wAA + AP8AAAD/AAAA/wAAABn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAALsAAAD/AAAA/wAA + AP+jOwD/t0IA/7dCAP+1PAD/5uHR/+nt3//p7d//6e3e//6baP//m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ//6mGP/+Jdi//iXYv/4nWn/xFMa/7dC + AP+3QgD/w0YA/yALAP8AAAD/AAAA/wAAAP8AAAAZ////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAC7AAAA/wAAAP8AAAD/ozsA/7dCAP+3QgD/tT8A//iUXv//mGP//5hj//+YY///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///oG3/y1ok/7U/ + AP+1PwD/tT8A/7ZBAP+3QgD/t0IA/8NGAP8gCwD/AAAA/wAAAP8AAAD/AAAAGf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAuwAAAP8AAAD/AAAA/6M7AP+3QgD/t0IA/7U/AP/4l2L//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//6Bt/8xcJP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/DRgD/IAsA/wAAAP8AAAD/AAAA/wAA + ABn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAALsAAAD/AAAA/wAAAP+jOwD/t0IA/7dC + AP+1PwD/+Jdi//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+gbf/MXCT/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/w0YA/yAL + AP8AAAD/AAAA/wAAAP8AAAAZ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAC/AAAA/wAA + AP8AAAD/rj8A/8NGAP/DRgD/wUMA//uhaP//pW7//6Vu//+lbv//pW7//6Vu//+lbv//pW7//6Vu//+l + bv//pW7//6Vu//+lbv//pW7//6Vu//+lbv//pW7//6Vu//+lbv//q3T/12In/8NGAP/DRgD/w0YA/8NG + AP/DRgD/w0YA/89LAP8iDAD/AAAA/wAAAP8AAAD/AAAAG////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAIQAAAC0AAAAtAAAALR4LANcgCwD/IAsA/x8LAP8rGhH/LBsS/ywbEv8sGxL/LBsS/ywb + Ev8sGxL/LBsS/ywbEv8sGxL/LBsS/ywbEv8sGxL/LBsS/ywbEv8sGxL/LBsS/ywbEv8sGxL/LBwT/yMQ + Bv8gCwD/IAsA/yALAP8gCwD/IAsA/yALAP8iDAD/CgMASwAAAC0AAAAtAAAALQAAAAX///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADTAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAC3///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA0wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAAt////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAANUAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAL////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAVAAAAGQAAABkAAAAZAAAA5wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAVQAAABkAAAAZAAAAGQAAAAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AOcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADnAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABF////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA5wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAARf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAOcAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEX///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADnAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABF////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA5wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAARf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAO8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAFCv8ABgz/AAYM/wAGDP8AAAH/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAEn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAA/AAAARQAA + AEUAAABFAAAARQAAAEUAAABFAAAATwAAAP8AAAD/AAAA/wAAAP8GOXH/B0B+/wdAfv8HQoL/AAYM/wAA + AP8AAAD/AAAA/wAAAIUAAABFAAAARQAAAEUAAAAT////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABkAAAD/AAAA/wAAAP8AAAD/Bjdu/wc+ + e/8HPnv/B0B+/wAGDP8AAAD/AAAA/wAAAP8AAABb////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAAZAAAA/wAA + AP8AAAD/AAAA/wY3bv8HPnv/Bz57/wdAfv8ABgz/AAAA/wAAAP8AAAD/AAAAW////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAGwAAAP8AAAD/AAAA/wAAAP8FMWL/Bjdu/wY3bv8GOXH/AAMH/wAAAP8AAAD/AAAA/wAA + AHUAAAAtAAAALQAAAC0AAAAN////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAAUAAAAtAAAALQAAAC0AAABLAAAA/wAAAP8AAAD/AAAA/wY0 + aP8GN27/Bjdu/wY3bf8AAgP/AAAA/wAAAP8AAAD/AAAASf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAALQAA + AP8AAAD/AAAA/wAAAP8HO3X/Bz57/wc+e/8HPXr/AAID/wAAAP8AAAD/AAAA/wAAAEX///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAC0AAAD/AAAA/wAAAP8AAAD/Bzt1/wc+e/8HPnv/Bz16/wACA/8AAAD/AAAA/wAA + AP8AAABF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAvAAAA/wAAAP8AAAD/AAAA/wc8eP8HQH7/B0B+/wc/ + ff8AAgP/AAAA/wAAAP8AAAD/AAAARf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAABQAAABkAAAAZAAAAGQAA + ABkABQvnAAYM/wAGDP8ABgv/AAAA/wAAAP8AAAD/AAAA/wAAAEX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA5wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABF////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAOcAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAARf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADjAAAA9wAA + APcAAAD3AAAA9wAAAPcAAAD3AAAA9wAAAEX///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAoAAAAgAAAAAABAAABACAAAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAA////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAARQAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAA + APEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAA + APEAAADxAAAA8QAAAOMAAAAN////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAABNAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+wAAAA////8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAEkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADxAAAAD////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAASQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPEAAAAP////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAABJAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA8QAAAA////8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAEkAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADxAAAAD/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAANwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAACEAAAAxAAAAMQAA + ADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEKBABtJw4A/yMN + AP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMN + AP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8lDQD/IQwA9QIB + AD0AAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAA + ADEAAAAR////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAsQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/zgUAP/YTgD/wkYA/8JGAP/CRgD/wkYA/8JGAP/CRgD/wkYA/8JG + AP/CRgD/wkYA/8JGAP/CRgD/wkYA/8JGAP/CRgD/wkYA/8JGAP/CRgD/wkYA/8JGAP/CRgD/wkYA/8JG + AP/CRgD/wkYA/8JGAP/CRgD/wkYA/8tJAP+3QgD/CwQA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAF////8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAACnAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/NRMA/81K + AP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hC + AP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/wEUA/64+ + AP8KBAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAWf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAKcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP81EwD/zEoA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+/RQD/rT4A/woEAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABZ////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAApwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zUT + AP/MSgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/79F + AP+tPgD/CgQA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAFn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAACnAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/NRMA/8xKAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/v0UA/60+AP8KBAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAWf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AKcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP81EwD/zEoA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+/RQD/rT4A/woEAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAABZ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAmwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMNAP/PSwD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/8BFAP+sPQD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAKQAAAFkAAABZAAAAWQAAAFkAAABZAAAAWQAA + AFkpDwDFSRoA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AX + AP9AFwD/YiMA/8VHAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/vEQA/7A/AP9GGgD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AX + AP9AFwD/QBcA/0AXAP9IGgD/FggAkwAAAFkAAABZAAAAWQAAAFkAAABZAAAAWQAAAFkAAAAR////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAACHAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4cxAP/sVQD/z0sA/89LAP/PSwD/z0sA/89L + AP/PSwD/z0sA/89LAP/PSwD/z0sA/89LAP/PSwD/z0sA/89LAP/ISAD/tEEA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+2QgD/uEMA/85KAP/PSwD/z0sA/89L + AP/PSwD/z0sA/89LAP/PSwD/z0sA/89LAP/PSwD/z0sA/89LAP/PSwD/z0sA/+pVAP9IGgD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADn///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAMf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/3crAP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/89LAP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ADH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dysA/9BLAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AX + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAMf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAdwAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAAx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3crAP/QSwD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/89L + AP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAB3AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/3crAP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/89LAP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAADH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dysA/9BL + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAMf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAdwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3cr + AP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/89LAP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAcQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP90KgD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7U/AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+ + AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+ + AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+ + AP+0PgD/tD4A/7Q+AP+1PwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP/QSwD/OxUA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAp////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAA + AA8FAgB/DAQA/woEAP8KBAD/CgQA/woEAP8KBAD/CgQA/3ssAP/PSgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/ukYF/7tIBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tH + Bv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tH + Bv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0gH/7pGBP+3QQD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/85KAP9HGQD/CgQA/woE + AP8KBAD/CgQA/woEAP8KBAD/CwQA/wIBAD0AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAP////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADjAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8VAdAPfFRwD/rT4A/60+AP+tPgD/rT4A/60+ + AP+tPgD/s0EA/7hDAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7M9AP/uhk7/+55r//uWYf/7lmH/+5Zh//uW + Yf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uW + Yf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uW + Yf/7lmH/+5Zh//uWYf/7oG3/531F/685AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/uEMA/7BAAP+tPgD/rT4A/60+AP+tPgD/rT4A/64+AP+3QgD/IQwA8wAA + APEAAADxAAAA8QAAAPEAAADxAAAA8QAAAOP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPsAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/WSAA/9pOAP+/RQD/v0UA/79FAP+/RQD/v0UA/79FAP+6QwD/tkIA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/sz0A//ONVv//qHb//59r//+fa///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+f + a///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+f + a///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+qef/shEz/rzgA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+2QgD/vEQA/79F + AP+/RQD/v0UA/79FAP+/RQD/wEUA/8pJAP8kDgD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+zPQD/8YpT//+kcf//m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//6Z0/+qBSf+vOAD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMN + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7M9AP/xilP//6Rx//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///pnT/6oFJ/684 + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + APH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/sz0A//GKU///pHH//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+mdP/qgUn/rzgA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JG + AP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+zPQD/8YpT//+kcf//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6Z0/+qB + Sf+vOAD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAADx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+4QwD/sjwA/7A4AP+wOQD/sDkA/7A5AP+wOQD/sDkA/6w0AP/wiFH//6Vy//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///p3X/6H5G/6cuAP+wOQD/sDkA/7A5AP+wOQD/sDkA/7A4 + AP+zPQD/uEMA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hC + AP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7VAAP/ATQ3/xVUX/8VT + FP/FUxT/xVMU/8VTFP/FUxT/wk8U//SNV///om///5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+k + cf/uhk//vksU/8VTFP/FUxT/xVMU/8VTFP/FUxT/xVYX/79LC/+1PwD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/rDUA/+l/R///rXz//6Bt//+gbf//oG3//6Bt//+gbf//oW3//5xo//+a + Zv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5pm//+daf//oW3//6Bt//+gbf//oG3//6Bt//+g + bf//rn3/4HU6/6w0AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+tNgD/5nxD//+n + df//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FL + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/602AP/mfEP//6d1//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/rTYA/+Z8 + Q///p3X//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1Uf + AP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+tNgD/5nxD//+ndf//m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/602 + AP/mfEP//6d1//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/rTYA/+Z8Q///p3X//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+tNgD/5nxD//+ndf//m2f//5tn//+bZ///m2f//5tn//+caP//kln//45V//+PVv//j1b//49W//+P + Vv//j1b//5BX//+aZv//nGj//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/602AP/mfEP//6d1//+bZ///m2f//5tn//+b + Z///m2f//5hi//PJqf/v2cH/8NS5//DUuf/w1Ln/8NS5/+/WvP/x0LX//p5s//+YZP//m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8f// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/rTYA/+Z8Q///p3X//5tn//+bZ///m2f//5tn//+bZ///lV7/6evb/+P////l/vb/5f72/+X+ + 9v/l/vb/5P/8/+b47v/+oW///5Zh//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601 + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMN + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+tNgD/5nxD//+ndf//m2f//5tn//+b + Z///m2f//5tn//+WX//s4c3/5vrx/+jy5f/o8uX/6PLl/+jy5f/n9ur/6e3e//6gbv//l2L//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + APH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/602AP/mfEP//6d1//+bZ///m2f//5tn//+bZ///m2f//5Zf/+zhzf/m+vH/6PLl/+jy + 5f/o8uX/6PLl/+f26v/p7d7//qBu//+XYv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95y + N/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JG + AP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/rTYA/+Z8Q///p3X//5tn//+b + Z///m2f//5tn//+bZ///ll//7OHN/+b68f/o8uX/6PLl/+jy5f/o8uX/5/bq/+nt3v/+oG7//5di//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAADx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+tNgD/5nxD//+ndf//m2f//5tn//+bZ///m2f//5tn//+WX//s4c3/5vrx/+jy + 5f/o8uX/6PLl/+jy5f/n9ur/6e3e//6gbv//l2L//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+o + dv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hC + AP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/602AP/mfEP//6d1//+b + Z///m2f//5tn//+bZ///m2f//5Zf/+zhzf/m+vH/6PLl/+jy5f/o8uX/6PLl/+f26v/p7d7//qBu//+X + Yv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/rTcA/+d5Pv//om3//5Zf//+WX///ll///5Zf//+WX///kFf/7ODM/+b6 + 8v/o8uX/6PLl/+jy5f/o8uX/5/bq/+nt3v//m2f//5Ja//+WX///ll///5Zf//+WX///lV///5dh//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///qHb/3nI3/601AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+vLQD/2qqF//Lu + 5P/s4c3/7OHN/+zhzf/s4c3/7OHN/+zgy//p7+D/6PTn/+jy5f/o8uX/6PLl/+jy5f/o8+b/6PHk/+zi + zv/s4Mz/7OHN/+zhzf/s4c3/7OHN/+vo1v/w07n//5dh//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FL + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7AqAP/Wup3/7f///+b68f/m+vH/5vrx/+b68f/m+vH/5vvy/+j0 + 5//o8eT/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8ub/5vrw/+b78v/m+vH/5vrx/+b68f/m+vH/5P/+/+ro + 1///ll7//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/sCsA/9e1 + lf/v////6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/m+vH/7OHN//+WX///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1Uf + AP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+wKwD/17WV/+/////o8uX/6PLl/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+b6 + 8f/s4c3//5Zf//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7Ar + AP/XtZX/7////+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/5vrx/+zhzf//ll///5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/sCsA/9e1lf/v////6PLl/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy + 5f/m+vH/7OHN//+WX///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAD7AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1kgAP/aTgD/v0UA/79FAP+/RQD/v0UA/79F + AP+3LQD/27ub//D////q+e//6vnv/+r57//q+e//6vnv/+r67//o8+f/6PHk/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+f16v/n9ur/5/bq/+f26v/n9ur/5/bq/+X+9//r5NH//5Zf//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/tkIA/7xEAP+/RQD/v0UA/79FAP+/RQD/v0UA/8BFAP/KSQD/JA4A/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAOMAAADxAAAA8QAAAPEAAADxAAAA8QAA + APEAAADxUB0A98VHAP+tPgD/rT4A/60+AP+tPgD/rT4A/6YpAP/SrY3/7fXx/+Xo2P/l6Nj/5ejY/+Xo + 2P/l6Nj/5efY/+fw4v/o8+b/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6e3e/+nt3v/p7d7/6e3e/+nt + 3v/p7d7/5/Xp/+3dx///ll///5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QwD/sEAA/60+ + AP+tPgD/rT4A/60+AP+tPgD/rj4A/7dCAP8hDADzAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA4/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8FAgB/DAQA/woEAP8KBAD/CgQA/woE + AP8KBAD/CgIA/3wzCP/SVQ7/ukwN/7pMDf+6TA3/ukwN/7pLDf+3Qg3/4NK8/+3++v/o8uX/6PLl/+jy + 5f/o8uX/5/bq/+nt3v/9pXX//pxp//6gbv/+oG7//qBu//6gbv/+oG///p9t//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601 + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/85KAP9HGQD/CgQA/woEAP8KBAD/CgQA/woEAP8KBAD/CwQA/wIB + AD0AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAHEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/cyUA/89EAP+1OwD/tTsA/7U7 + AP+1OwD/tToA/7IvAP/fz7f/7f/8/+jy5f/o8uX/6PLl/+jy5f/n9ur/6e3e//+daf//k13//5di//+X + Yv//l2L//5di//+XYf//mGP//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/0EsA/zsV + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAKf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAdwAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dCAP+3QQD/tDcA/9/Quf/t//v/6PLl/+jy + 5f/o8uX/6PLl/+f26v/p7d7//qBu//+XYv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95y + N/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAAx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3crAP/QSwD/t0IA/7dC + AP+3QgD/t0IA/7dBAP+0NwD/39C5/+3/+//o8uX/6PLl/+jy5f/o8uX/5/bq/+nt3v/+oG7//5di//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dCAP+3QgD/t0IA/89L + AP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0EA/7Q3AP/f0Ln/7f/7/+jy + 5f/o8uX/6PLl/+jy5f/n9ur/6e3e//6gbv//l2L//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+o + dv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dC + AP+3QgD/t0IA/7dCAP+3QQD/tDcA/9/Quf/t//v/6PLl/+jy5f/o8uX/6PLl/+f26v/p7d7//qBu//+X + Yv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dC + AP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAB3AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/3crAP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dBAP+0NgD/3dfD/+v/ + ///m+vH/5vrx/+b68f/m+vH/5f/3/+f16f/+oG///5di//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5pm//+eav//pXH//6Rx//+kcf//pHH//6Rx//+k + cf//soH/4nc8/6w0AP+3QgD/t0IA/7dCAP+3QgD/t0IA/89LAP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAADH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dysA/9BL + AP+3QgD/t0IA/7dCAP+3QgD/t0EA/7Q4AP/iwqX/8O3g/+zhzf/s4c3/7OHN/+zhzf/s5NH/7d3H//6f + bf//mGP//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///nWn/+5Zh//CIU//xilP/8YpT//GKU//xilP/8YpT//GUX//WaSz/rzgA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAMf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAdwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/sz0A//KG + Tf//n2n//5Zf//+WX///ll///5Zf//+WX///lmD//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+ndf/pf0f/qjIA/7M9AP+zPQD/sz0A/7M9 + AP+zPQD/szwA/7U/AP+4QwD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3cr + AP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+zPQD/8YpT//+kcf//m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//6Z0/+qBSf+vOAD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/89LAP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7M9 + AP/xilP//6Rx//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///pnT/6oFJ/684AP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP93KwD/0EsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/sz0A//GKU///pHH//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+mdP/qgUn/rzgA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3crAP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+zPQD/8YpT//+kcf//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6Z0/+qBSf+vOAD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/89LAP9AFwD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7M9AP/xilP//6Rx//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///pnT/6oFJ/684AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAMf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/sz0A//GKU///pHH//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+mdP/qgUn/rzgA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAACHAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/4cxAP/sVQD/z0sA/89LAP/PSwD/z0sA/89LAP/LRQD//5xe//+6gP//sHX//7B1//+w + df//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+w + df//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+w + df//sHX//7B1//+wdf//sHX//7yD//+SU//GPwD/z0sA/89LAP/PSwD/z0sA/89LAP/PSwD/z0sA/89L + AP/PSwD/z0sA/89LAP/PSwD/z0sA/+pVAP9IGgD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ADn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAACkAAABZAAAAWQAAAFkAAABZAAAAWQAAAFkAAABZKQ8AxUkaAP9AFwD/QBcA/0AX + AP9AFwD/QBcA/z4VAP9UMB3/WTkn/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2 + JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2 + JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZOij/Ui0Z/z0U + AP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/SBoA/xYI + AJMAAABZAAAAWQAAAFkAAABZAAAAWQAAAFkAAABZAAAAEf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAACbAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAQ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAKcAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAABZ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAApwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAFn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAACnAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAWf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAKcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABZ////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAApwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAFn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAACxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAX////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + ACEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAA1wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAoQAAADEAAAAxAAAAMQAA + ADEAAAAxAAAAMQAAADEAAAAR////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADJAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAB/////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAzwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAif///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADPAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAzwAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAif// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AIn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAzwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAif///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADPAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAACJ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAzwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAif///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA7QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AQgP/wIOG/8BDBj/AQwY/wEMGP8BDBj/AQwY/wENGf8AAgX/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAnf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAABvAAAAiQAAAIkAAACJAAAAiQAAAIkAAACJAAAAiQAAAIkAAACJAAAAiQAAAIkAAACJAAAAiQAA + AIkAAAChAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8FKlX/CEuU/wdCgv8HQoL/B0KC/wdC + gv8HQoL/B0aK/wENGf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3QAAAIkAAACJAAAAiQAA + AIkAAACJAAAAiQAAAIkAAABL////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABMAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wUoUP8IR43/Bz57/wc+e/8HPnv/Bz57/wc+e/8HQoL/AQwY/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAACt////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAMQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BShQ/whHjP8HPnv/Bz57/wc+ + e/8HPnv/Bz57/wdCgv8BDBj/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAALf///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAAxAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8FKFD/CEeM/wc+e/8HPnv/Bz57/wc+e/8HPnv/B0KC/wEMGP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAt////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAADEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wUoUP8IR4z/Bz57/wc+ + e/8HPnv/Bz57/wc+e/8HQoL/AQwY/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAC3////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAMQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/BShQ/whHjP8HPnv/Bz57/wc+e/8HPnv/Bz57/wdCgv8BDBj/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAALf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAAxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8GLVv/CVGf/whH + jP8IR4z/CEeM/whHjP8IR4z/CEuU/wEOG/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAArf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAADkAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wMaNP8FLlv/BShQ/wUoUP8FKFD/BShQ/wUoUP8FK1X/AAEC/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADPAAAAWQAAAFkAAABZAAAAWQAAAFkAAABZAAAAWQAA + ADH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAEQAAAFkAAABZAAAAWQAAAFkAAABZAAAAWQAAAFkAAACTAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8EHz3/BSxY/wUoUP8FKFD/BShQ/wUoUP8FKlP/BSZM/wAD + Bf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAm////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAEMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wc5 + cf8JTZr/CEeM/whHjP8IR4z/CEeM/whKkv8IQoT/AAUI/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAACJ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAWQAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BjJj/whEh/8HPnv/Bz57/wc+e/8HPnv/B0GA/wc6 + dP8ABAf/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAABZAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8GMmP/CESH/wc+e/8HPnv/Bz57/wc+e/8HQYD/Bzp0/wAEB/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAif///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AFkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wYyY/8IRIf/Bz57/wc+e/8HPnv/Bz57/wdB + gP8HOnT/AAQH/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAWQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/BjJj/whEh/8HPnv/Bz57/wc+e/8HPnv/B0GA/wc6dP8ABAf/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAABZAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8GMmP/CESI/wc+e/8HPnv/Bz57/wc+ + e/8HQYD/Bzp0/wAEB/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAif///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAF8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wY1af8ISI//B0KC/wdCgv8HQoL/B0KC/wdFiP8HPXv/AAQH/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAACJ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAEQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAQoT1wINGv8BDBj/AQwY/wEM + GP8BDBj/AQ0Z/wELFv8AAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADJAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAif///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAzwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADPAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAif// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA1wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AI////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADDAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAA + APEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAAgf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA + + + \ No newline at end of file diff --git a/AmiiBomb/AmiiBomb.csproj b/AmiiBomb/AmiiBomb.csproj new file mode 100644 index 0000000..2f3585f --- /dev/null +++ b/AmiiBomb/AmiiBomb.csproj @@ -0,0 +1,295 @@ + + + + + Debug + AnyCPU + {BD0FE5AD-B8C1-4246-ADFB-2D0F5F26602C} + WinExe + Properties + AmiiBomb + AmiiBomb + v4.6.1 + 512 + true + publier\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + AmiiBomb_Icon.ico + + + + ..\packages\AngleSharp.0.9.9\lib\net45\AngleSharp.dll + False + + + ..\packages\BouncyCastle.1.8.1\lib\BouncyCastle.Crypto.dll + False + + + ..\packages\IntelHexFormatReader.2.2.2\lib\net452\IntelHexFormatReader.dll + False + + + ..\packages\Newtonsoft.Json.10.0.1\lib\net45\Newtonsoft.Json.dll + False + + + ..\packages\NLog.4.4.6\lib\net45\NLog.dll + False + + + bin\Debug\lib\RJCP.SerialPortStream.dll + False + + + + + + + + + + + + + + + + + Form + + + About_Form.cs + + + Form + + + Arduino_Form.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Form + + + Flash_Form.cs + + + Form + + + Main_Form.cs + + + + + + About_Form.cs + + + Arduino_Form.cs + + + Flash_Form.cs + + + Main_Form.cs + + + ResXFileCodeGenerator + Designer + Resources.Designer.cs + + + + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + False + .NET Framework 3.5 SP1 + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AmiiBomb/AmiiBomb.csproj.user b/AmiiBomb/AmiiBomb.csproj.user new file mode 100644 index 0000000..c96b510 --- /dev/null +++ b/AmiiBomb/AmiiBomb.csproj.user @@ -0,0 +1,13 @@ + + + + publier\ + + + + + + fr-FR + false + + \ No newline at end of file diff --git a/AmiiBomb/AmiiBomb_Icon.ico b/AmiiBomb/AmiiBomb_Icon.ico new file mode 100644 index 0000000..52aa0d2 Binary files /dev/null and b/AmiiBomb/AmiiBomb_Icon.ico differ diff --git a/AmiiBomb/Arduino_Form.Designer.cs b/AmiiBomb/Arduino_Form.Designer.cs new file mode 100644 index 0000000..f4c89a8 --- /dev/null +++ b/AmiiBomb/Arduino_Form.Designer.cs @@ -0,0 +1,156 @@ +namespace AmiiBomb +{ + partial class Arduino_Form + { + /// + /// 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(Arduino_Form)); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.comboBox2 = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.button1 = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.comboBox2); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Controls.Add(this.comboBox1); + this.groupBox1.Location = new System.Drawing.Point(8, 7); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(317, 75); + this.groupBox1.TabIndex = 7; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Arduino"; + // + // comboBox2 + // + this.comboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBox2.FormattingEnabled = true; + this.comboBox2.Items.AddRange(new object[] { + "Mega 2560 - ATMega2560 (STK500v2)", + "Micro - ATMega32U4 (AVR109)", + "Nano (R3) - ATMega328P (STK500v1)", + "Uno (R3) - ATMega328P (STK500v1)"}); + this.comboBox2.Location = new System.Drawing.Point(117, 43); + this.comboBox2.Name = "comboBox2"; + this.comboBox2.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.comboBox2.Size = new System.Drawing.Size(194, 21); + this.comboBox2.TabIndex = 3; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(6, 46); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(78, 13); + this.label2.TabIndex = 2; + this.label2.Text = "Arduino Model:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(6, 19); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(29, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Port:"; + // + // comboBox1 + // + this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Location = new System.Drawing.Point(117, 16); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(194, 21); + this.comboBox1.TabIndex = 1; + // + // textBox1 + // + this.textBox1.BackColor = System.Drawing.Color.Black; + this.textBox1.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox1.ForeColor = System.Drawing.Color.White; + this.textBox1.Location = new System.Drawing.Point(8, 84); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBox1.Size = new System.Drawing.Size(528, 197); + this.textBox1.TabIndex = 9; + // + // button1 + // + this.button1.Image = global::AmiiBomb.Properties.Resources.AmiiBomb_Iconx32; + this.button1.Location = new System.Drawing.Point(355, 21); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(158, 45); + this.button1.TabIndex = 8; + this.button1.Text = "Flash AmiiBombuino!"; + this.button1.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // Arduino_Form + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(544, 288); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.button1); + this.Controls.Add(this.groupBox1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Arduino_Form"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "AmiiBombuino Flasher"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Arduino_Form_FormClosed); + this.Load += new System.EventHandler(this.Arduino_Form_Load); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private System.Windows.Forms.ComboBox comboBox2; + private System.Windows.Forms.ComboBox comboBox1; + private System.Windows.Forms.TextBox textBox1; + public System.Windows.Forms.GroupBox groupBox1; + public System.Windows.Forms.Label label2; + public System.Windows.Forms.Label label1; + public System.Windows.Forms.Button button1; + } +} \ No newline at end of file diff --git a/AmiiBomb/Arduino_Form.cs b/AmiiBomb/Arduino_Form.cs new file mode 100644 index 0000000..e1fa8cd --- /dev/null +++ b/AmiiBomb/Arduino_Form.cs @@ -0,0 +1,98 @@ +using System; +using System.Linq; +using System.Windows.Forms; +using ArduinoUploader; +using ArduinoUploader.Hardware; +using NLog.Config; +using NLog; +using System.Threading; + +namespace AmiiBomb +{ + public partial class Arduino_Form : Form + { + Thread Flash_Thread; + private I18n i18n = I18n.Instance; + public Arduino_Form() + { + InitializeComponent(); + this.Opacity = 0; + } + + private void Arduino_Form_Load(object sender, EventArgs e) + { + Translate_Class.Translate(this); + + comboBox1.DataSource = COMPortInfo.GetCOMPortsInfo(); + comboBox1.DisplayMember = "Description"; + comboBox1.ValueMember = "Name"; + + if (comboBox1.Items.Count > 0) + { + comboBox1.SelectedIndex = 0; + comboBox2.SelectedIndex = 3; + this.Opacity = 100; + } + else + { + MessageBox.Show(i18n.__("AmiiBombuino_No_Com_Port"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); + this.Close(); + } + } + + private void button1_Click(object sender, EventArgs e) + { + var config = new LoggingConfiguration(); + var consoleTarget = new TextBoxTarget(); + consoleTarget.TextBox_Console = textBox1; + consoleTarget.Layout = "${message}"; + config.AddTarget("console", consoleTarget); + config.LoggingRules.Add(new LoggingRule("*", LogLevel.Debug, consoleTarget)); + LogManager.Configuration = config; + + string Port = comboBox1.SelectedValue.ToString(); + string ArduinoFile = comboBox2.SelectedItem.ToString().Split(' ').First(); + int ArduinoID = comboBox2.SelectedIndex; + + Flash_Thread = new Thread(() => Flash(Port, ArduinoFile, ArduinoID)); + Flash_Thread.Start(); + + } + + private void Flash(string Port, string ArduinoFile, int ArduinoID) + { + bool AllDone = false; + + try + { + var options = new ArduinoSketchUploaderOptions + { + PortName = Port, + FileName = Application.StartupPath + @"\lib\ArduinoHex\AmiiBombuino." + ArduinoFile + ".hex", + ArduinoModel = (ArduinoModel)ArduinoID + }; + + var uploader = new ArduinoSketchUploader(options); + uploader.UploadSketch(); + AllDone = true; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + finally + { + if (AllDone) + { + MessageBox.Show(i18n.__("AmiiBombuino_All_Done"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); + this.Invoke(new Action(() => this.Close())); + } + } + } + + private void Arduino_Form_FormClosed(object sender, FormClosedEventArgs e) + { + if (Flash_Thread != null) Flash_Thread.Abort(); + } + } +} diff --git a/AmiiBomb/Arduino_Form.resx b/AmiiBomb/Arduino_Form.resx new file mode 100644 index 0000000..d2ea5c3 --- /dev/null +++ b/AmiiBomb/Arduino_Form.resx @@ -0,0 +1,1787 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + AAABAAUAEBAAAAAAIABoBAAAVgAAACAgAAAAACAAqBAAAL4EAAAwMAAAAAAgAKglAABmFQAAQEAAAAAA + IAAoQgAADjsAAICAAAAAACAAKAgBADZ9AAAoAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wH///8B////AQAAAAcAAAAHBAEA5wQBAP0EAQD9BAEA+wAAAAkAAAAH////Af// + /wH///8B////Af///wH///8B////AQAAAAsHAgD1CAIA/6s9AP+4QgD/uEIA/7hCAP8JAwD/CAIA/wIA + ABf///8B////Af///wH///8B////Af///wEAAADvtUEA/7pDAP+3QgD/t0IA/7dCAP+3QgD/uUMA/71E + AP8IAgD/AAAAB////wH///8B////Af///wEAAAADAQAA77JAAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+6QwD/CQMA/wAAAAn///8B////Af///wH///8BAAAA+60+AP+3QgL//Jll//6aZv/+mmb//ppm//6c + aP+9SQv/t0IA/7hCAP8EAQD7////Af///wH///8B////AQAAAP2sPQD/+5ll//+ZZP//m2f//5tn//+b + Z///mmb//51p/7pGBv+4QgD/BAEA/f///wH///8B////Af///wEAAAD9rD0A//uXYv/o7t///ppm//+b + Z///m2f//5tn//+caP+6Rgb/uEIA/wQBAP3///8B////Af///wH///8BAAAA+6w7AP/m6tz/6PHk/+jv + 4f//mmb//5tn//+bZ///nGj/ukYG/7hCAP8EAQD7////Af///wH///8B////AQAAAAMBAADvsT8B/+fu + 4P/+m2f//5tn//+bZ///m2f//Ztn/71HBv8JAwD/AAAACf///wH///8B////Af///wH///8BAAAA77RA + AP/9m2b//51o//+daP//nWj//59q/75JCf+9RAD/CAIA/wAAAAf///8B////Af///wH///8B////AQAA + AAsHAgD1CwYE/wsGBP8LBgT/CwYE/wsGBP8IAwD/CAIA/wIAABf///8B////Af///wH///8B////Af// + /wH///8BAAAABwAAAPkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAABf///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAD5AAAA/wAAAP8AAQL/AAAA/wAAAP8AAAAT////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAEQAAABcAAAD/Bjt2/wABAv8AAAAxAAAAA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAFwAAAP8GO3b/AAAA/wAAABP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAAHAAEC9wAAAP0AAAAR////Af// + /wH///8B////AQAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8oAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAA////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAzwAAAPsAAAD7AAAA+wAA + APsAAAD7AAAA+wAAAPkAAAAF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAsAAAANAAAADQAAAA0IAwDTCAMA/wgD + AP8IAwD/CAMA/wgDAP8IAwD/CAMA+wAAAA8AAAANAAAADQAAAA3///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA6QAAAP8AAAD/AAAA/545 + AP+6QwD/ukMA/7pDAP+6QwD/ukMA/7pDAP+5QgD/AgEA/wAAAP8AAAD/AAAA/wAAABf///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAEwAAABcPBQDrEAUA/xAF + AP8QBQD/nTgA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7ZBAP8RBgD/EAUA/xAFAP8QBQD/BAEAKQAA + ABf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADdAAAA/7NA + AP+9RAD/vUQA/71EAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7xEAP+9RAD/vUQA/8NG + AP8QBQD/AAAA/wAAAA3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AN0AAAD/rT4A/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/vUQA/xAFAP8AAAD/AAAADf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAA3QAAAP+tPgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+9RAD/EAUA/wAAAP8AAAAN////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAABQAAAAUCAADdAgEA/60+AP+3QgD/t0IB/7dCAf+3QgH/t0IB/7dCAf+3QgH/t0IB/7dC + Af+3QgH/t0IB/7dCAP+3QgD/t0IA/71EAP8SBgD/AgEA/wAAAA8AAAAF////Af///wH///8B////Af// + /wH///8B////Af///wEAAAD5AAAA+6Q7AP+2QQD/tkIA/7ZAAP/6mGT//ppm//6aZv/+mmb//ppm//6a + Zv/+mmb//ppm//6aZv/+nWn/wU8S/7dCAP+3QgD/t0IA/7ZBAP+5QgD/CAMA+wAAAPn///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPsAAAD/pTsA/7ZBAP+4QwT/t0IF//uZZP//m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+dav/DUBb/uEQF/7dCAP+3QgD/t0IA/7pDAP8IAwD/AAAA+/// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA+wAAAP+lOwD/tD4A//iXYv//nGj//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5pm//+caP//n2z/vkoN/7dCAP+3QgD/ukMA/wgD + AP8AAAD7////Af///wH///8B////Af///wH///8B////Af///wEAAAD7AAAA/6U7AP+0PwD/+JZh//+b + Z///mGL//5hi//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+eav++Sg3/t0IA/7dC + AP+6QwD/CAMA/wAAAPv///8B////Af///wH///8B////Af///wH///8B////AQAAAPsAAAD/pTsA/7Q/ + AP/4lmH//5ll/+nq2//p7N3//ptn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//55q/75K + Df+3QgD/t0IA/7pDAP8IAwD/AAAA+////wH///8B////Af///wH///8B////Af///wH///8BAAAA+wAA + AP+lOwD/tD8A//iVX///mGP/6O/i/+jx5P/+mmX//5ll//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///nmr/vkoN/7dCAP+3QgD/ukMA/wgDAP8AAAD7////Af///wH///8B////Af///wH///8B////Af// + /wEAAAD7AAAA/6U7AP+1PAD/5ePT/+jv4f/o8uT/6PLl/+jv4v/p7d///5ll//+bZ///m2f//5tn//+b + Z///m2f//5tn//+eav++Sg3/t0IA/7dCAP+6QwD/CAMA/wAAAPv///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPkAAAD7pDsA/7Q8AP/l5Nb/5/Hk/+fx5P/o8uX/6PHk/+jv4f//mWX//5tn//+b + Z///m2f//5tn//+bZ///m2f//55q/75KDf+3QgD/tkEA/7lCAP8IAwD7AAAA+f///wH///8B////Af// + /wH///8B////Af///wH///8BAAAABQAAAAUCAADdAgAA/60/A/+2PwP/5+zf/+jx5P/+m2j//ptn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///nmr/vkoN/71EAP8SBgD/AgEA/wAAAA8AAAAF////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAN0AAAD/rT4A/7Y/AP/n6tv/6O/h//6b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//Jlk//ucaP++Sg3/vUQA/xAFAP8AAAD/AAAADf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA3QAAAP+tPgD/tkAA//uX + Yv//mWX//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+dav/AThL/tkAA/7ZBAP+9RAD/EAUA/wAA + AP8AAAAN////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADdAAAA/7NA + AP+8QgD//J5n//+gav//oGr//6Bq//+gav//oGr//6Bq//+gav//oGr//6Nt/8dREv+9RAD/vUQA/8NG + AP8QBQD/AAAA/wAAAA3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + ABMAAAAXDwUA6w8FAP8VDQj/Fg0J/xYNCf8WDQn/Fg0J/xYNCf8WDQn/Fg0J/xYNCf8WDQn/EAYB/xAF + AP8QBQD/EAUA/wQBACkAAAAX////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADpAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAF////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAAsAAAANAAAA8wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAALQAAAA3///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADzAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAj////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPMAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAACP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA9QAA + AP8AAAD/AAAA/wAAAP8AAAD/AAIF/wADBv8AAAD/AAAA/wAAAP8AAAD/AAAAJf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAAhAAAAIwAAACMAAAArAAAA/wAAAP8GO3b/B0B+/wADBv8AAAD/AAAASQAAACMAAAAF////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAA0AAAD/AAAA/wY3bv8GO3b/AAIE/wAAAP8AAAA/AAAAFwAA + AAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABcAAAApAAAA/wAAAP8GOXH/Bjp0/wAB + Af8AAAD/AAAAJf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAABcAAAD/AAAA/wc9 + ef8HPnz/AAEB/wAAAP8AAAAj////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AA0AAAANAAIF8wADBf8AAAD/AAAA/wAAACP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADxAAAA+wAAAPsAAAD7AAAAI////wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAKAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAALcAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA9QAA + AAX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAALsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA+QAAAAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAABEAAAATAAAAEwAAABMAAAATAAAAEwwEAL0NBAD/DQQA/w0EAP8NBAD/DQQA/w0E + AP8NBAD/DQQA/w0EAP8NBAD/DQQA+wAAABUAAAATAAAAEwAAABMAAAATAAAAEwAAAAP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAN8AAAD/AAAA/wAAAP8AAAD/AAAA/5E0AP+7QwD/u0MA/7tD + AP+7QwD/u0MA/7tDAP+7QwD/u0MA/7tDAP+7QwD/ukMA/wMBAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ACP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAN0AAAD/AAAA/wAAAP8AAAD/AAAA/44z + AP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7dCAP+2QgD/t0IA/7dCAP+2QgD/tkEA/wMBAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAACH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABsAAAAhAAAAIRcIAOEXCAD/FwgA/xcI + AP8XCAD/FwgA/5E0AP+3QgD/tkIA/7ZBAP+3QgD/tkIA/7dCAP+2QgD/tkEA/7dCAP+2QgD/tkEA/xkJ + AP8XCAD/FwgA/xcIAP8XCAD/GQkA/wcCADsAAAAhAAAAIQAAAAP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/7A/ + AP/ARQD/wEUA/8BFAP/ARQD/wEUA/7hCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7ZBAP+3QgD/tkEA/7ZB + AP+3QgD/tkIA/79FAP/ARQD/v0UA/79FAP/ARQD/yUgA/xkJAP8AAAD/AAAA/wAAABX///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AM0AAAD/AAAA/6g8AP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7dC + AP+2QgD/t0IA/7dCAP+2QgD/t0IA/7dCAP+2QgD/t0IA/7dCAP+2QgD/wEUA/xcIAP8AAAD/AAAA/wAA + ABP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAM0AAAD/AAAA/6g8AP+3QgD/tkIA/7ZBAP+3QgD/tkIA/7ZBAP+3QgD/tkIA/7ZB + AP+3QgD/tkIA/7dCAP+2QgD/tkEA/7dCAP+2QgD/tkEA/7dCAP+2QgD/tkEA/7dCAP+2QgD/v0UA/xcI + AP8AAAD/AAAA/wAAABP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAM0AAAD/AAAA/6g8AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7ZBAP+3QgD/tkEA/7ZBAP+3QgD/tkEA/7ZBAP+3QgD/tkEA/7ZB + AP+3QgD/v0UA/xcIAP8AAAD/AAAA/wAAABP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM0AAAD/AAAA/6g8AP+3QgD/t0IA/7ZC + AP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7dCAP+2QgD/t0IA/7dCAP+2QgD/t0IA/7dC + AP+2QgD/t0IA/7dCAP+2QgD/wEUA/xcIAP8AAAD/AAAA/wAAABP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAcAAAAHAAAABwMBAM0DAQD/AwEA/6g8 + AP+3QgD/tkIA/7dCAv+3QgL/t0IC/7dCAv+3QgL/t0IC/7dCAv+3QgL/t0IC/7dCAv+3QgL/t0IC/7dC + Av+3QgL/t0IC/7dCAP+2QgD/tkEA/7dCAP+2QgD/v0UA/xoJAP8DAQD/AwEA/wAAABcAAAAHAAAAB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPUAAAD5AAAA+Zs3 + AP22QQD/tkEA/7ZCAP+3QgD/tUAA//iXYv/9mmb//Zpm//2aZv/9mmb//Zpm//2aZv/9mmb//Zpm//2a + Zv/9mmb//Zpm//2aZv/9mmb//Z5r/8ZVG/+3QgD/tkEA/7ZBAP+3QgD/tkIA/7ZBAP+2QQD/ukMA/w0E + APsAAAD5AAAA9f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APkAAAD/AAAA/5w4AP+3QgD/t0IA/7ZCAP+3QgD/tUAA//mYY///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZv//m2f//5tn//+bZv//m2f//59r/8dVG/+2QgD/t0IA/7dCAP+2QgD/t0IA/7dC + AP+2QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/tkEA/7lEBv+5RAf/uEMH//qXY//+mmf//ppm//6a + Zv/+mmf//ppm//6aZv/+mmf//ppm//6bZv//mmb//ppm//6bZv//mmb//p5r/8lYIP+5RAf/uUUH/7dC + Af+2QgD/tkEA/7dCAP+2QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/sz0A//aVYP//nGn//p1p//6a + Z///m2f//ptm//6aZ///m2f//ptm//6aZ///m2f//ptm//6aZv//m2f//ppm//6aZv//m2f//ppm//6c + aP//nGn//qFv/8JPFf+3QgD/tkEA/7ZBAP+3QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/sz0A//WT + Xv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZv//m2f//5tn//+b + Zv//m2f//5tn//+bZv//m2f//59s/8FPFP+2QgD/t0IA/7dCAP+2QgD/u0MA/w0EAP8AAAD/AAAA+f// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4 + AP+3QgD/sz0A//WTXv/+mmf//ptn//6WYP/+lmD//pZg//6aZv/+mmf//ppm//6aZv/+mmf//ppm//6b + Zv//mmb//ppm//6bZv//mmb//ppm//6bZv//mmb//p9s/8FPFP+2QgD/tkEA/7dCAP+2QgD/u0MA/w0E + AP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APkAAAD/AAAA/5w4AP+3QgD/sz0A//WTXv//m2f//plk/+rn1v/p69r/6era//6bZ///m2f//ptm//6a + Z///m2f//ptm//6aZv//m2f//ppm//6aZv//m2f//ppm//6aZv//m2f//p9s/8FPFP+3QgD/tkEA/7ZB + AP+3QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/sz0A//WTXv//m2f//5lk/+ju4P/o8uX/6PHk//6b + Z///m2f//5tn//+bZ///m2f//5tn//+bZv//m2f//5tn//+bZv//m2f//5tn//+bZv//m2f//59s/8FP + FP+2QgD/t0IA/7dCAP+2QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/sz0A//WSXP/+mWT//pdg/+ju + 4P/n8uT/5/Hk//6ZZP/+mWT//plk//6aZv/+mmf//ppm//6bZv//mmb//ppm//6bZv//mmb//ppm//6b + Zv//mmb//p9s/8FPFP+2QgD/tkEA/7dCAP+2QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/tDkA/+Tb + yv/o7uD/6O7g/+jx5P/o8uX/6PHl/+ju4P/o7uD/6erc//6ZZP//m2f//ptm//6aZv//m2f//ppm//6a + Zv//m2f//ppm//6aZv//m2f//p9s/8FPFP+3QgD/tkEA/7ZBAP+3QgD/u0MA/w0EAP8AAAD/AAAA+f// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4 + AP+3QgD/tDkA/+Tg0P/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6O7g//+ZZP//m2f//5tn//+b + Zv//m2f//5tn//+bZv//m2f//5tn//+bZv//m2f//59s/8FPFP+2QgD/t0IA/7dCAP+2QgD/u0MA/w0E + AP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APUAAAD5AAAA+Zs3AP22QQD/szkA/+Pezv/n8OP/5/Dj/+fx5P/n8uT/5/Lk/+fx5P/n8eT/6O7f//6Z + Y//+mmf//ppm//6bZv//mmb//ppm//6bZv//mmb//ppm//6bZv//mmb//p9s/8FPFP+2QgD/tkIA/7ZB + AP+2QQD/ukMA/w0EAPsAAAD5AAAA9f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAcAAAAHAAAABwMBAM0DAQD/AwEA/6g9BP+3QwT/tj4E/+bq3P/o8uX/5/Hk//6b + aP/+m2f//ptn//6bZv//m2f//5pm//6bZ///m2f//ptm//6bZ///m2f//ptm//6bZ///m2f//p9s/8FP + FP+3QgD/wEUA/xoJAP8DAQD/AwEA/wAAABcAAAAHAAAAB////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM0AAAD/AAAA/6g8AP+3QgD/tT0A/+bq + 3P/n8uX/6PHk//6bZ///m2b//5tn//+bZ///m2b//5tn//+bZ///m2f//5tm//+bZ///m2f//5tm//+b + Z///m2f//59s/8FPFP+3QgD/wEUA/xcIAP8AAAD/AAAA/wAAABP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM0AAAD/AAAA/6g8 + AP+3QgD/tT0A/+bl1v/o7uD/6O7f//6bZ///m2f//ptn//6aZ///m2f//ptn//6bZ///m2f//ptn//6b + Z///m2f//ptn//uYZP/5mGP/+Zxo/8FOE/+2QgD/v0UA/xcIAP8AAAD/AAAA/wAAABP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AM0AAAD/AAAA/6g8AP+3QgD/tUAA//mWYP//mWT//5lk//6bZv//m2f//5pm//6bZv//m2f//5pm//6b + Z///m2f//ptm//6bZ///m2f//p9s/8VUG/+1QAD/tT8A/7ZBAP+3QgD/wEUA/xcIAP8AAAD/AAAA/wAA + ABP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAM0AAAD/AAAA/6g8AP+3QgD/tUAA//mYY///m2b//5tn//+bZ///m2b//5tn//+b + Z///m2b//5tn//+bZ///m2f//5tm//+bZ///m2f//59r/8dVG/+3QgD/t0IA/7dCAP+3QgD/wEUA/xcI + AP8AAAD/AAAA/wAAABP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/7A/AP/ARQD/vkMA//ufaP//omz//qJs//6i + bP//omz//qJs//6ibP//omz//qJs//6ibP//omz//qJs//6ibP//omz//qdx/89aHP/ARQD/wEUA/8BF + AP/ARQD/yUgA/xkJAP8AAAD/AAAA/wAAABX///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABsAAAAjAAAAIxcIAOEYCAD/FwgA/yAT + DP8hFA3/IRQN/yEUDf8hFA3/IRQN/yEUDf8hFA3/IRQN/yEUDf8hFA3/IRQN/yEUDf8hFA3/IRQO/xoL + A/8YCAD/GAgA/xgIAP8YCAD/GQkA/wcCADsAAAAjAAAAIwAAAAP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AN0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAACH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAN8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAACP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAABEAAAATAAAAEwAAAO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEEAAAATAAAAEwAA + AAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAO0AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ADP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAADP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAECP8ABAj/AAQJ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADf///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAADEAAAAzAAAAMwAA + ADMAAAAzAAAAPwAAAP8AAAD/AAAA/wY6c/8HP33/BkGA/wAECf8AAAD/AAAA/wAAAGkAAAAzAAAAMwAA + AAv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAEwAAAP8AAAD/AAAA/wY5cf8HPnv/Bz99/wAECP8AAAD/AAAA/wAA + AEX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAFQAAAP8AAAD/AAAA/wY0aP8GOXH/Bjpz/wAD + Bv8AAAD/AAAA/wAAAFsAAAAhAAAAIQAAAAf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAACEAAAAjAAAAOwAA + AP8AAAD/AAAA/wY2bP8GOXH/Bjhw/wABAv8AAAD/AAAA/wAAADf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAIQAAAP8AAAD/AAAA/wc7dv8HPnv/Bz16/wABAv8AAAD/AAAA/wAAADP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAIwAAAP8AAAD/AAAA/wc9ef8HP33/Bj59/wABAv8AAAD/AAAA/wAA + ADP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAABMAAAATAAAAEwAECO0ABAn/AAQI/wAA + AP8AAAD/AAAA/wAAADP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAOkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAADP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//ygA + AABAAAAAgAAAAAEAIAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAChAAAA9wAAAPcAAAD3AAAA9wAAAPcAAAD3AAAA9wAAAPcAAAD3AAAA9wAA + APcAAAD3AAAA9wAAAPcAAADzAAAAB////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAowAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA9wAAAAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAKMAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPcAAAAH////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAFQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAA + ABkQBQCpEQYA/xEGAP8RBgD/EQYA/xEGAP8RBgD/EQYA/xEGAP8RBgD/EQYA/xEGAP8RBgD/EQYA/xEG + AP8RBgD5AQAAGwAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAF////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAANUAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/hC8A/71EAP+9RAD/vUQA/71EAP+9RAD/vUQA/71EAP+9RAD/vUQA/71E + AP+9RAD/vUQA/71EAP+9RAD/vEMA/wUCAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAL/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADTAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4AuAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7ZBAP8FAgD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAC3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA0wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+ALgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+2QQD/BQIA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAt////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAIQAAAC0AAAAtAAAALR4LANcgCwD/IAsA/yALAP8gCwD/IAsA/yAL + AP8gCwD/hjAA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/tkEA/yEMAP8gCwD/IAsA/yALAP8gCwD/IAsA/yALAP8iDAD/CgMASwAAAC0AAAAtAAAALQAA + AAX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAL8AAAD/AAAA/wAAAP+uPwD/w0YA/8NG + AP/DRgD/w0YA/8NGAP/DRgD/w0YA/7pDAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/CRgD/w0YA/8NGAP/DRgD/w0YA/8NGAP/DRgD/z0sA/yIM + AP8AAAD/AAAA/wAAAP8AAAAb////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAC7AAAA/wAA + AP8AAAD/ozsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/8NGAP8gCwD/AAAA/wAAAP8AAAD/AAAAGf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAuwAAAP8AAAD/AAAA/6M7AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/DRgD/IAsA/wAAAP8AAAD/AAAA/wAAABn///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAALsAAAD/AAAA/wAAAP+jOwD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/w0YA/yALAP8AAAD/AAAA/wAA + AP8AAAAZ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAC7AAAA/wAAAP8AAAD/ozsA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/8NG + AP8gCwD/AAAA/wAAAP8AAAD/AAAAGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAuwAA + AP8AAAD/AAAA/6M7AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP/DRgD/IAsA/wAAAP8AAAD/AAAA/wAAABn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAALsAAAD/AAAA/wAAAP+jOwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/w0YA/yALAP8AAAD/AAAA/wAAAP8AAAAZ////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAcAAAAHAAAABwAAAAcEAQC7BQIA/wUCAP8FAgD/ozoA/7dCAP+3QgD/t0IA/7dC + Av+3QgP/t0ID/7dCA/+3QgP/t0ID/7dCA/+3QgP/t0ID/7dCA/+3QgP/t0ID/7dCA/+3QgP/t0ID/7dC + A/+3QgP/t0ID/7dCA/+3QgP/t0IB/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/8NGAP8jDAD/BQIA/wUC + AP8FAgD/AQAAHQAAAAcAAAAHAAAAB////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADzAAAA9wAAAPcAAAD3kjQA/bZBAP+2QQD/tkEA/7ZC + AP+3QgD/t0IA/7U/AP/2lmH//Zpm//2aZv/9mmb//Zpm//2aZv/9mmb//Zpm//2aZv/9mmb//Zpm//2a + Zv/9mmb//Zpm//2aZv/9mmb//Zpm//2aZv/9mmb//Z9s/8xcJP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/tkEA/7ZBAP+2QQD/u0MA/xEGAPkAAAD3AAAA9wAAAPP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA9wAAAP8AAAD/AAAA/5M1 + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+1PwD/+Jdi//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+gbf/MXCT/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/71EAP8RBgD/AAAA/wAAAP8AAAD3////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APcAAAD/AAAA/wAAAP+TNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/tT8A//iXYv//m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///oG3/zFwk/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+9RAD/EQYA/wAA + AP8AAAD/AAAA9////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAD3AAAA/wAAAP8AAAD/kzUA/7dCAP+3QgD/tkEA/7lFCf+6Rgr/ukYK/7hD + Cv/4l2L//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//6Bt/85fKv+6Rgr/ukYK/7pGCv+3QgL/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/vUQA/xEGAP8AAAD/AAAA/wAAAPf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA9wAAAP8AAAD/AAAA/5M1AP+3QgD/t0IA/7E7 + AP/zk17//51q//+dav//nWr//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+aZv//nWn//51q//+dav//pHH/xVQc/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/71EAP8RBgD/AAAA/wAAAP8AAAD3////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPcAAAD/AAAA/wAA + AP+TNQD/t0IA/7dCAP+yPAD/8pFc//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//6Fu/8VTG/+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+9RAD/EQYA/wAAAP8AAAD/AAAA9/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAD3AAAA/wAAAP8AAAD/kzUA/7dCAP+3QgD/sjwA//KRXP//m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+hbv/FUxv/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/vUQA/xEG + AP8AAAD/AAAA/wAAAPf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA9wAAAP8AAAD/AAAA/5M1AP+3QgD/t0IA/7I8AP/ykVz//5tn//+b + Z///m2f//5Vf//+VXv//lV7//5Ve//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///oW7/xVMb/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/71EAP8RBgD/AAAA/wAAAP8AAAD3////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPcAAAD/AAAA/wAAAP+TNQD/t0IA/7dC + AP+yPAD/8pFc//+bZ///m2f//5hj/+vj0f/q6df/6unX/+rn1v/+m2j//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6Fu/8VT + G/+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+9RAD/EQYA/wAAAP8AAAD/AAAA9////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAD3AAAA/wAA + AP8AAAD/kzUA/7dCAP+3QgD/sjwA//KRXP//m2f//5tn//+YY//p7d//6PLl/+jy5f/o8eT//pto//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+hbv/FUxv/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/vUQA/xEGAP8AAAD/AAAA/wAA + APf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAA9wAAAP8AAAD/AAAA/5M1AP+3QgD/t0IA/7I8AP/ykVz//5tn//+bZ///mGP/6e3f/+jy + 5f/o8uX/6PHk//6baP//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///oW7/xVMb/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/71E + AP8RBgD/AAAA/wAAAP8AAAD3////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPcAAAD/AAAA/wAAAP+TNQD/t0IA/7dCAP+yPAD/8o9Y//+Y + Y///mGP//5Vf/+nt3//o8uX/6PLl/+jx5P/+mWT//5hj//+YY///mGP//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6Fu/8VTG/+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+9RAD/EQYA/wAAAP8AAAD/AAAA9////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAD3AAAA/wAAAP8AAAD/kzUA/7dC + AP+3QgD/szYA/+PUwf/p7d//6e3f/+nt3v/o8uT/6PLl/+jy5f/o8uX/6e3f/+nt3//p7d//6ujZ//+Y + Y///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+h + bv/FUxv/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/vUQA/xEGAP8AAAD/AAAA/wAAAPf///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA9wAA + AP8AAAD/AAAA/5M1AP+3QgD/t0IA/7M2AP/j2sr/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+nt3///mGP//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///oW7/xVMb/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/71EAP8RBgD/AAAA/wAA + AP8AAAD3////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPcAAAD/AAAA/wAAAP+TNQD/t0IA/7dCAP+zNgD/49rK/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/p7d///5hj//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6Fu/8VTG/+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+9RAD/EQYA/wAAAP8AAAD/AAAA9////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADzAAAA9wAAAPcAAAD3kjQA/bZBAP+2QQD/sjYA/+LX + xv/n8OP/5/Dj/+fw4//n8eT/6PLl/+jy5f/o8uX/6PHk/+jx5P/o8eT/6e3e//+YY///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+hbv/FUxv/t0IA/7dC + AP+3QgD/tkEA/7ZBAP+2QQD/u0MA/xEGAPkAAAD3AAAA9wAAAPP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAABwAAAAcAAAAHAAAABwQB + ALsFAgD/BQIA/wUBAP+kPAX/t0MG/7dDBv+2PQb/5ufa/+jy5f/o8uX/6PHk//6caf/+m2j//pto//6b + aP//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///oW7/xVMb/7dCAP+3QgD/w0YA/yMMAP8FAgD/BQIA/wUCAP8BAAAdAAAABwAAAAcAAAAH////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAC7AAAA/wAAAP8AAAD/ozsA/7dCAP+3QgD/tTwA/+bn2v/o8uX/6PLl/+jx + 5P/+m2j//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//6Fu/8VTG/+3QgD/t0IA/8NGAP8gCwD/AAAA/wAAAP8AAAD/AAAAGf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAuwAAAP8AAAD/AAAA/6M7AP+3QgD/t0IA/7U8 + AP/m59r/6PLl/+jy5f/o8eT//pto//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+hbv/FUxv/t0IA/7dCAP/DRgD/IAsA/wAA + AP8AAAD/AAAA/wAAABn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAALsAAAD/AAAA/wAA + AP+jOwD/t0IA/7dCAP+1PAD/5uHR/+nt3//p7d//6e3e//6baP//m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ//6mGP/+Jdi//iXYv/4nWn/xFMa/7dC + AP+3QgD/w0YA/yALAP8AAAD/AAAA/wAAAP8AAAAZ////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAC7AAAA/wAAAP8AAAD/ozsA/7dCAP+3QgD/tT8A//iUXv//mGP//5hj//+YY///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///oG3/y1ok/7U/ + AP+1PwD/tT8A/7ZBAP+3QgD/t0IA/8NGAP8gCwD/AAAA/wAAAP8AAAD/AAAAGf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAuwAAAP8AAAD/AAAA/6M7AP+3QgD/t0IA/7U/AP/4l2L//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//6Bt/8xcJP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/DRgD/IAsA/wAAAP8AAAD/AAAA/wAA + ABn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAALsAAAD/AAAA/wAAAP+jOwD/t0IA/7dC + AP+1PwD/+Jdi//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+gbf/MXCT/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/w0YA/yAL + AP8AAAD/AAAA/wAAAP8AAAAZ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAC/AAAA/wAA + AP8AAAD/rj8A/8NGAP/DRgD/wUMA//uhaP//pW7//6Vu//+lbv//pW7//6Vu//+lbv//pW7//6Vu//+l + bv//pW7//6Vu//+lbv//pW7//6Vu//+lbv//pW7//6Vu//+lbv//q3T/12In/8NGAP/DRgD/w0YA/8NG + AP/DRgD/w0YA/89LAP8iDAD/AAAA/wAAAP8AAAD/AAAAG////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAIQAAAC0AAAAtAAAALR4LANcgCwD/IAsA/x8LAP8rGhH/LBsS/ywbEv8sGxL/LBsS/ywb + Ev8sGxL/LBsS/ywbEv8sGxL/LBsS/ywbEv8sGxL/LBsS/ywbEv8sGxL/LBsS/ywbEv8sGxL/LBwT/yMQ + Bv8gCwD/IAsA/yALAP8gCwD/IAsA/yALAP8iDAD/CgMASwAAAC0AAAAtAAAALQAAAAX///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADTAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAC3///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA0wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAAt////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAANUAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAL////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAVAAAAGQAAABkAAAAZAAAA5wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAVQAAABkAAAAZAAAAGQAAAAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AOcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADnAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABF////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA5wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAARf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAOcAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEX///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADnAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABF////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA5wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAARf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAO8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAFCv8ABgz/AAYM/wAGDP8AAAH/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAEn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAA/AAAARQAA + AEUAAABFAAAARQAAAEUAAABFAAAATwAAAP8AAAD/AAAA/wAAAP8GOXH/B0B+/wdAfv8HQoL/AAYM/wAA + AP8AAAD/AAAA/wAAAIUAAABFAAAARQAAAEUAAAAT////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABkAAAD/AAAA/wAAAP8AAAD/Bjdu/wc+ + e/8HPnv/B0B+/wAGDP8AAAD/AAAA/wAAAP8AAABb////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAAZAAAA/wAA + AP8AAAD/AAAA/wY3bv8HPnv/Bz57/wdAfv8ABgz/AAAA/wAAAP8AAAD/AAAAW////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAGwAAAP8AAAD/AAAA/wAAAP8FMWL/Bjdu/wY3bv8GOXH/AAMH/wAAAP8AAAD/AAAA/wAA + AHUAAAAtAAAALQAAAC0AAAAN////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAAUAAAAtAAAALQAAAC0AAABLAAAA/wAAAP8AAAD/AAAA/wY0 + aP8GN27/Bjdu/wY3bf8AAgP/AAAA/wAAAP8AAAD/AAAASf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAALQAA + AP8AAAD/AAAA/wAAAP8HO3X/Bz57/wc+e/8HPXr/AAID/wAAAP8AAAD/AAAA/wAAAEX///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAC0AAAD/AAAA/wAAAP8AAAD/Bzt1/wc+e/8HPnv/Bz16/wACA/8AAAD/AAAA/wAA + AP8AAABF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAvAAAA/wAAAP8AAAD/AAAA/wc8eP8HQH7/B0B+/wc/ + ff8AAgP/AAAA/wAAAP8AAAD/AAAARf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAABQAAABkAAAAZAAAAGQAA + ABkABQvnAAYM/wAGDP8ABgv/AAAA/wAAAP8AAAD/AAAA/wAAAEX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA5wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABF////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAOcAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAARf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADjAAAA9wAA + APcAAAD3AAAA9wAAAPcAAAD3AAAA9wAAAEX///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAoAAAAgAAAAAABAAABACAAAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAA////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAARQAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAA + APEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAA + APEAAADxAAAA8QAAAOMAAAAN////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAABNAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+wAAAA////8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAEkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADxAAAAD////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAASQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPEAAAAP////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAABJAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA8QAAAA////8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAEkAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADxAAAAD/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAANwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAACEAAAAxAAAAMQAA + ADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEKBABtJw4A/yMN + AP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMN + AP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8lDQD/IQwA9QIB + AD0AAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAA + ADEAAAAR////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAsQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/zgUAP/YTgD/wkYA/8JGAP/CRgD/wkYA/8JGAP/CRgD/wkYA/8JG + AP/CRgD/wkYA/8JGAP/CRgD/wkYA/8JGAP/CRgD/wkYA/8JGAP/CRgD/wkYA/8JGAP/CRgD/wkYA/8JG + AP/CRgD/wkYA/8JGAP/CRgD/wkYA/8tJAP+3QgD/CwQA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAF////8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAACnAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/NRMA/81K + AP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hC + AP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/wEUA/64+ + AP8KBAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAWf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAKcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP81EwD/zEoA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+/RQD/rT4A/woEAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABZ////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAApwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zUT + AP/MSgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/79F + AP+tPgD/CgQA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAFn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAACnAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/NRMA/8xKAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/v0UA/60+AP8KBAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAWf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AKcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP81EwD/zEoA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+/RQD/rT4A/woEAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAABZ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAmwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMNAP/PSwD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/8BFAP+sPQD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAKQAAAFkAAABZAAAAWQAAAFkAAABZAAAAWQAA + AFkpDwDFSRoA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AX + AP9AFwD/YiMA/8VHAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/vEQA/7A/AP9GGgD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AX + AP9AFwD/QBcA/0AXAP9IGgD/FggAkwAAAFkAAABZAAAAWQAAAFkAAABZAAAAWQAAAFkAAAAR////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAACHAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4cxAP/sVQD/z0sA/89LAP/PSwD/z0sA/89L + AP/PSwD/z0sA/89LAP/PSwD/z0sA/89LAP/PSwD/z0sA/89LAP/ISAD/tEEA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+2QgD/uEMA/85KAP/PSwD/z0sA/89L + AP/PSwD/z0sA/89LAP/PSwD/z0sA/89LAP/PSwD/z0sA/89LAP/PSwD/z0sA/+pVAP9IGgD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADn///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAMf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/3crAP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/89LAP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ADH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dysA/9BLAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AX + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAMf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAdwAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAAx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3crAP/QSwD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/89L + AP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAB3AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/3crAP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/89LAP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAADH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dysA/9BL + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAMf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAdwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3cr + AP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/89LAP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAcQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP90KgD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7U/AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+ + AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+ + AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+ + AP+0PgD/tD4A/7Q+AP+1PwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP/QSwD/OxUA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAp////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAA + AA8FAgB/DAQA/woEAP8KBAD/CgQA/woEAP8KBAD/CgQA/3ssAP/PSgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/ukYF/7tIBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tH + Bv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tH + Bv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0gH/7pGBP+3QQD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/85KAP9HGQD/CgQA/woE + AP8KBAD/CgQA/woEAP8KBAD/CwQA/wIBAD0AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAP////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADjAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8VAdAPfFRwD/rT4A/60+AP+tPgD/rT4A/60+ + AP+tPgD/s0EA/7hDAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7M9AP/uhk7/+55r//uWYf/7lmH/+5Zh//uW + Yf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uW + Yf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uW + Yf/7lmH/+5Zh//uWYf/7oG3/531F/685AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/uEMA/7BAAP+tPgD/rT4A/60+AP+tPgD/rT4A/64+AP+3QgD/IQwA8wAA + APEAAADxAAAA8QAAAPEAAADxAAAA8QAAAOP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPsAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/WSAA/9pOAP+/RQD/v0UA/79FAP+/RQD/v0UA/79FAP+6QwD/tkIA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/sz0A//ONVv//qHb//59r//+fa///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+f + a///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+f + a///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+qef/shEz/rzgA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+2QgD/vEQA/79F + AP+/RQD/v0UA/79FAP+/RQD/wEUA/8pJAP8kDgD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+zPQD/8YpT//+kcf//m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//6Z0/+qBSf+vOAD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMN + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7M9AP/xilP//6Rx//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///pnT/6oFJ/684 + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + APH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/sz0A//GKU///pHH//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+mdP/qgUn/rzgA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JG + AP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+zPQD/8YpT//+kcf//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6Z0/+qB + Sf+vOAD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAADx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+4QwD/sjwA/7A4AP+wOQD/sDkA/7A5AP+wOQD/sDkA/6w0AP/wiFH//6Vy//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///p3X/6H5G/6cuAP+wOQD/sDkA/7A5AP+wOQD/sDkA/7A4 + AP+zPQD/uEMA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hC + AP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7VAAP/ATQ3/xVUX/8VT + FP/FUxT/xVMU/8VTFP/FUxT/wk8U//SNV///om///5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+k + cf/uhk//vksU/8VTFP/FUxT/xVMU/8VTFP/FUxT/xVYX/79LC/+1PwD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/rDUA/+l/R///rXz//6Bt//+gbf//oG3//6Bt//+gbf//oW3//5xo//+a + Zv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5pm//+daf//oW3//6Bt//+gbf//oG3//6Bt//+g + bf//rn3/4HU6/6w0AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+tNgD/5nxD//+n + df//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FL + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/602AP/mfEP//6d1//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/rTYA/+Z8 + Q///p3X//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1Uf + AP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+tNgD/5nxD//+ndf//m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/602 + AP/mfEP//6d1//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/rTYA/+Z8Q///p3X//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+tNgD/5nxD//+ndf//m2f//5tn//+bZ///m2f//5tn//+caP//kln//45V//+PVv//j1b//49W//+P + Vv//j1b//5BX//+aZv//nGj//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/602AP/mfEP//6d1//+bZ///m2f//5tn//+b + Z///m2f//5hi//PJqf/v2cH/8NS5//DUuf/w1Ln/8NS5/+/WvP/x0LX//p5s//+YZP//m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8f// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/rTYA/+Z8Q///p3X//5tn//+bZ///m2f//5tn//+bZ///lV7/6evb/+P////l/vb/5f72/+X+ + 9v/l/vb/5P/8/+b47v/+oW///5Zh//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601 + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMN + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+tNgD/5nxD//+ndf//m2f//5tn//+b + Z///m2f//5tn//+WX//s4c3/5vrx/+jy5f/o8uX/6PLl/+jy5f/n9ur/6e3e//6gbv//l2L//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + APH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/602AP/mfEP//6d1//+bZ///m2f//5tn//+bZ///m2f//5Zf/+zhzf/m+vH/6PLl/+jy + 5f/o8uX/6PLl/+f26v/p7d7//qBu//+XYv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95y + N/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JG + AP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/rTYA/+Z8Q///p3X//5tn//+b + Z///m2f//5tn//+bZ///ll//7OHN/+b68f/o8uX/6PLl/+jy5f/o8uX/5/bq/+nt3v/+oG7//5di//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAADx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+tNgD/5nxD//+ndf//m2f//5tn//+bZ///m2f//5tn//+WX//s4c3/5vrx/+jy + 5f/o8uX/6PLl/+jy5f/n9ur/6e3e//6gbv//l2L//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+o + dv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hC + AP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/602AP/mfEP//6d1//+b + Z///m2f//5tn//+bZ///m2f//5Zf/+zhzf/m+vH/6PLl/+jy5f/o8uX/6PLl/+f26v/p7d7//qBu//+X + Yv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/rTcA/+d5Pv//om3//5Zf//+WX///ll///5Zf//+WX///kFf/7ODM/+b6 + 8v/o8uX/6PLl/+jy5f/o8uX/5/bq/+nt3v//m2f//5Ja//+WX///ll///5Zf//+WX///lV///5dh//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///qHb/3nI3/601AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+vLQD/2qqF//Lu + 5P/s4c3/7OHN/+zhzf/s4c3/7OHN/+zgy//p7+D/6PTn/+jy5f/o8uX/6PLl/+jy5f/o8+b/6PHk/+zi + zv/s4Mz/7OHN/+zhzf/s4c3/7OHN/+vo1v/w07n//5dh//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FL + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7AqAP/Wup3/7f///+b68f/m+vH/5vrx/+b68f/m+vH/5vvy/+j0 + 5//o8eT/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8ub/5vrw/+b78v/m+vH/5vrx/+b68f/m+vH/5P/+/+ro + 1///ll7//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/sCsA/9e1 + lf/v////6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/m+vH/7OHN//+WX///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1Uf + AP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+wKwD/17WV/+/////o8uX/6PLl/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+b6 + 8f/s4c3//5Zf//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7Ar + AP/XtZX/7////+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/5vrx/+zhzf//ll///5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/sCsA/9e1lf/v////6PLl/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy + 5f/m+vH/7OHN//+WX///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAD7AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1kgAP/aTgD/v0UA/79FAP+/RQD/v0UA/79F + AP+3LQD/27ub//D////q+e//6vnv/+r57//q+e//6vnv/+r67//o8+f/6PHk/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+f16v/n9ur/5/bq/+f26v/n9ur/5/bq/+X+9//r5NH//5Zf//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/tkIA/7xEAP+/RQD/v0UA/79FAP+/RQD/v0UA/8BFAP/KSQD/JA4A/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAOMAAADxAAAA8QAAAPEAAADxAAAA8QAA + APEAAADxUB0A98VHAP+tPgD/rT4A/60+AP+tPgD/rT4A/6YpAP/SrY3/7fXx/+Xo2P/l6Nj/5ejY/+Xo + 2P/l6Nj/5efY/+fw4v/o8+b/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6e3e/+nt3v/p7d7/6e3e/+nt + 3v/p7d7/5/Xp/+3dx///ll///5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QwD/sEAA/60+ + AP+tPgD/rT4A/60+AP+tPgD/rj4A/7dCAP8hDADzAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA4/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8FAgB/DAQA/woEAP8KBAD/CgQA/woE + AP8KBAD/CgIA/3wzCP/SVQ7/ukwN/7pMDf+6TA3/ukwN/7pLDf+3Qg3/4NK8/+3++v/o8uX/6PLl/+jy + 5f/o8uX/5/bq/+nt3v/9pXX//pxp//6gbv/+oG7//qBu//6gbv/+oG///p9t//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601 + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/85KAP9HGQD/CgQA/woEAP8KBAD/CgQA/woEAP8KBAD/CwQA/wIB + AD0AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAHEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/cyUA/89EAP+1OwD/tTsA/7U7 + AP+1OwD/tToA/7IvAP/fz7f/7f/8/+jy5f/o8uX/6PLl/+jy5f/n9ur/6e3e//+daf//k13//5di//+X + Yv//l2L//5di//+XYf//mGP//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/0EsA/zsV + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAKf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAdwAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dCAP+3QQD/tDcA/9/Quf/t//v/6PLl/+jy + 5f/o8uX/6PLl/+f26v/p7d7//qBu//+XYv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95y + N/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAAx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3crAP/QSwD/t0IA/7dC + AP+3QgD/t0IA/7dBAP+0NwD/39C5/+3/+//o8uX/6PLl/+jy5f/o8uX/5/bq/+nt3v/+oG7//5di//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dCAP+3QgD/t0IA/89L + AP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0EA/7Q3AP/f0Ln/7f/7/+jy + 5f/o8uX/6PLl/+jy5f/n9ur/6e3e//6gbv//l2L//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+o + dv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dC + AP+3QgD/t0IA/7dCAP+3QQD/tDcA/9/Quf/t//v/6PLl/+jy5f/o8uX/6PLl/+f26v/p7d7//qBu//+X + Yv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dC + AP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAB3AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/3crAP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dBAP+0NgD/3dfD/+v/ + ///m+vH/5vrx/+b68f/m+vH/5f/3/+f16f/+oG///5di//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5pm//+eav//pXH//6Rx//+kcf//pHH//6Rx//+k + cf//soH/4nc8/6w0AP+3QgD/t0IA/7dCAP+3QgD/t0IA/89LAP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAADH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dysA/9BL + AP+3QgD/t0IA/7dCAP+3QgD/t0EA/7Q4AP/iwqX/8O3g/+zhzf/s4c3/7OHN/+zhzf/s5NH/7d3H//6f + bf//mGP//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///nWn/+5Zh//CIU//xilP/8YpT//GKU//xilP/8YpT//GUX//WaSz/rzgA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAMf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAdwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/sz0A//KG + Tf//n2n//5Zf//+WX///ll///5Zf//+WX///lmD//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+ndf/pf0f/qjIA/7M9AP+zPQD/sz0A/7M9 + AP+zPQD/szwA/7U/AP+4QwD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3cr + AP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+zPQD/8YpT//+kcf//m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//6Z0/+qBSf+vOAD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/89LAP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7M9 + AP/xilP//6Rx//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///pnT/6oFJ/684AP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP93KwD/0EsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/sz0A//GKU///pHH//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+mdP/qgUn/rzgA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3crAP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+zPQD/8YpT//+kcf//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6Z0/+qBSf+vOAD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/89LAP9AFwD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7M9AP/xilP//6Rx//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///pnT/6oFJ/684AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAMf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/sz0A//GKU///pHH//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+mdP/qgUn/rzgA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAACHAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/4cxAP/sVQD/z0sA/89LAP/PSwD/z0sA/89LAP/LRQD//5xe//+6gP//sHX//7B1//+w + df//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+w + df//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+w + df//sHX//7B1//+wdf//sHX//7yD//+SU//GPwD/z0sA/89LAP/PSwD/z0sA/89LAP/PSwD/z0sA/89L + AP/PSwD/z0sA/89LAP/PSwD/z0sA/+pVAP9IGgD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ADn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAACkAAABZAAAAWQAAAFkAAABZAAAAWQAAAFkAAABZKQ8AxUkaAP9AFwD/QBcA/0AX + AP9AFwD/QBcA/z4VAP9UMB3/WTkn/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2 + JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2 + JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZOij/Ui0Z/z0U + AP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/SBoA/xYI + AJMAAABZAAAAWQAAAFkAAABZAAAAWQAAAFkAAABZAAAAEf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAACbAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAQ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAKcAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAABZ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAApwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAFn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAACnAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAWf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAKcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABZ////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAApwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAFn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAACxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAX////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + ACEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAA1wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAoQAAADEAAAAxAAAAMQAA + ADEAAAAxAAAAMQAAADEAAAAR////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADJAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAB/////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAzwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAif///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADPAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAzwAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAif// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AIn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAzwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAif///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADPAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAACJ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAzwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAif///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA7QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AQgP/wIOG/8BDBj/AQwY/wEMGP8BDBj/AQwY/wENGf8AAgX/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAnf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAABvAAAAiQAAAIkAAACJAAAAiQAAAIkAAACJAAAAiQAAAIkAAACJAAAAiQAAAIkAAACJAAAAiQAA + AIkAAAChAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8FKlX/CEuU/wdCgv8HQoL/B0KC/wdC + gv8HQoL/B0aK/wENGf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3QAAAIkAAACJAAAAiQAA + AIkAAACJAAAAiQAAAIkAAABL////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABMAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wUoUP8IR43/Bz57/wc+e/8HPnv/Bz57/wc+e/8HQoL/AQwY/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAACt////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAMQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BShQ/whHjP8HPnv/Bz57/wc+ + e/8HPnv/Bz57/wdCgv8BDBj/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAALf///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAAxAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8FKFD/CEeM/wc+e/8HPnv/Bz57/wc+e/8HPnv/B0KC/wEMGP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAt////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAADEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wUoUP8IR4z/Bz57/wc+ + e/8HPnv/Bz57/wc+e/8HQoL/AQwY/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAC3////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAMQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/BShQ/whHjP8HPnv/Bz57/wc+e/8HPnv/Bz57/wdCgv8BDBj/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAALf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAAxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8GLVv/CVGf/whH + jP8IR4z/CEeM/whHjP8IR4z/CEuU/wEOG/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAArf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAADkAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wMaNP8FLlv/BShQ/wUoUP8FKFD/BShQ/wUoUP8FK1X/AAEC/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADPAAAAWQAAAFkAAABZAAAAWQAAAFkAAABZAAAAWQAA + ADH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAEQAAAFkAAABZAAAAWQAAAFkAAABZAAAAWQAAAFkAAACTAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8EHz3/BSxY/wUoUP8FKFD/BShQ/wUoUP8FKlP/BSZM/wAD + Bf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAm////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAEMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wc5 + cf8JTZr/CEeM/whHjP8IR4z/CEeM/whKkv8IQoT/AAUI/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAACJ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAWQAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BjJj/whEh/8HPnv/Bz57/wc+e/8HPnv/B0GA/wc6 + dP8ABAf/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAABZAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8GMmP/CESH/wc+e/8HPnv/Bz57/wc+e/8HQYD/Bzp0/wAEB/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAif///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AFkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wYyY/8IRIf/Bz57/wc+e/8HPnv/Bz57/wdB + gP8HOnT/AAQH/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAWQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/BjJj/whEh/8HPnv/Bz57/wc+e/8HPnv/B0GA/wc6dP8ABAf/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAABZAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8GMmP/CESI/wc+e/8HPnv/Bz57/wc+ + e/8HQYD/Bzp0/wAEB/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAif///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAF8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wY1af8ISI//B0KC/wdCgv8HQoL/B0KC/wdFiP8HPXv/AAQH/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAACJ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAEQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAQoT1wINGv8BDBj/AQwY/wEM + GP8BDBj/AQ0Z/wELFv8AAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADJAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAif///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAzwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADPAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAif// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA1wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AI////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADDAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAA + APEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAAgf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA + + + \ No newline at end of file diff --git a/AmiiBomb/Class/AmiiboLife_Class.cs b/AmiiBomb/Class/AmiiboLife_Class.cs new file mode 100644 index 0000000..b7dbf97 --- /dev/null +++ b/AmiiBomb/Class/AmiiboLife_Class.cs @@ -0,0 +1,41 @@ +using AngleSharp.Parser.Html; +using System; +using System.Drawing; +using System.Linq; + +namespace AmiiBomb +{ + class AmiiboLife_Class + { + public static string BaseAdress = "http://amiibo.life/nfc/"; + + public static string[] Get_Amiibo_Info(string Amiibo_NFC_ID) + { + var HTML_Dom = new HtmlParser().Parse(Helper_Class.Get_Source_From_Url(BaseAdress + Amiibo_NFC_ID)); + + try + { + return new string[] + { + Helper_Class.Clean_NewLine_Spaces(HTML_Dom.QuerySelectorAll("div.figure-info h1.name").First().TextContent), //Name + Helper_Class.Clean_NewLine_Spaces(HTML_Dom.QuerySelectorAll("div.figure-info p.series-name").First().TextContent), //Series + HTML_Dom.QuerySelectorAll("div.figure.show.row img").First().GetAttribute("src") //Picture Link + }; + } + catch + { + return new string[] { "", "", "" }; + } + } + } + + [Serializable] + class AmiiboLife_Cache_Class + { + public string SHA1 { get; set; } + public string Name { get; set; } + public string Serie { get; set; } + public string NFC_ID { get; set; } + public Image Picture { get; set; } + } +} diff --git a/AmiiBomb/Class/Amiibo_Class.cs b/AmiiBomb/Class/Amiibo_Class.cs new file mode 100644 index 0000000..0baadcc --- /dev/null +++ b/AmiiBomb/Class/Amiibo_Class.cs @@ -0,0 +1,200 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Text; + +namespace AmiiBomb +{ + class Amiibo_Class + { + public static byte[] Generate_Password(string Long_UID) + { + int Padding = 0; + + if (Long_UID.Length == 9*2) { Padding = 2; } + + int pw1 = 0xAA ^ Convert.ToInt32(Long_UID.Substring(2, 2), 16) ^ Convert.ToInt32(Long_UID.Substring(6 + Padding, 2), 16); + int pw2 = 0x55 ^ Convert.ToInt32(Long_UID.Substring(4, 2), 16) ^ Convert.ToInt32(Long_UID.Substring(8 + Padding, 2), 16); + int pw3 = 0xAA ^ Convert.ToInt32(Long_UID.Substring(6 + Padding, 2), 16) ^ Convert.ToInt32(Long_UID.Substring(10 + Padding, 2), 16); + int pw4 = 0x55 ^ Convert.ToInt32(Long_UID.Substring(8 + Padding, 2), 16) ^ Convert.ToInt32(Long_UID.Substring(12 + Padding, 2), 16); + + return Helper_Class.String_To_Byte_Array(pw1.ToString("X2") + pw2.ToString("X2") + pw3.ToString("X2") + pw4.ToString("X2")); + } + + public static byte[] Calculate_Long_UID(string Short_UID) + { + /* + 0x00 - UID0 - Manufacturer Code (0x04 for NXP) + 0x01 - UID1 + 0x02 - UID2 + 0x03 - BCC0 - 0x88 ^ UID0 ^ UID1 ^ UID2 + 0x04 - UID3 (Never 0x88) + 0x05 - UID4 + 0x06 - UID5 + 0x07 - UID6 + 0x08 - BCC1 - UID3 ^ UID4 ^ UID5 ^ UID6 + */ + + int BCC0 = 0x88 ^ Convert.ToInt32(Short_UID.Substring(0, 2), 16) ^ Convert.ToInt32(Short_UID.Substring(2, 2), 16) ^ Convert.ToInt32(Short_UID.Substring(4, 2), 16); + int BCC1 = Convert.ToInt32(Short_UID.Substring(6, 2), 16) ^ Convert.ToInt32(Short_UID.Substring(8, 2), 16) ^ Convert.ToInt32(Short_UID.Substring(10, 2), 16) ^ Convert.ToInt32(Short_UID.Substring(12, 2), 16); + + return Helper_Class.String_To_Byte_Array(Short_UID.Substring(0, 6) + BCC0.ToString("X2") + Short_UID.Substring(6, 8) + BCC1.ToString("X2")); + } + + public static bool IsEncrypted(byte[] Data) + { + /* + 0x04 - Manufacturer Code (0x04 for NXP) + 0x48 - Internal Byte, Always 0x48 + Todo - Add a LockBytes Check ? + */ + if (Data[9] == 0x48) return true; + else return false; + } + + public static byte[] Decrypt(byte[] Data, AmiiboKeys Keyfile) + { + byte[] Decrypted = new byte[NtagHelpers.NFC3D_AMIIBO_SIZE]; + Keyfile.Unpack(Data, Decrypted); + return Decrypted; + } + + public static byte[] Encrypt(byte[] Data, AmiiboKeys Keyfile) + { + byte[] Encrypted = new byte[NtagHelpers.NFC3D_NTAG_SIZE]; + Keyfile.Pack(Data, Encrypted); + return Encrypted; + } + + public static byte[] Patch(byte[] Data, string UID) + { + // ToDo: Fix UID Cast + + byte[] Decrypted_Amiibo; + if (IsEncrypted(Data)) Decrypted_Amiibo = Amiibo_Class.Decrypt(Data, Main_Form.AmiiKeys); + else Decrypted_Amiibo = Data; + + byte[] Password_Amiibo = Amiibo_Class.Generate_Password(UID); + byte[] UID_Long = NtagHelpers.StringToByteArrayFastest(UID); + + Array.Copy(UID_Long, 0x008, Decrypted_Amiibo, 0x000, 0x001); //Put LastChar of Long UID + Array.Copy(new byte[] { 0x00, 0x00 }, 0x000, Decrypted_Amiibo, 0x002, 0x002); //Reset Static Lock Bytes + Array.Copy(UID_Long, 0x000, Decrypted_Amiibo, 0x1D4, 0x008); //Modify UID + Array.Copy(new byte[] { 0x00, 0x00, 0x00 }, 0x000, Decrypted_Amiibo, 0x208, 0x003); //Reset Dynamic Lock Bytes + Array.Copy(Password_Amiibo, 0x000, Decrypted_Amiibo, 0x214, 0x004); //Modify Password + Array.Copy(new byte[] { 0x80, 0x80 }, 0x000, Decrypted_Amiibo, 0x218, 0x002); //Reset PACK0 & PACK1 + + return Amiibo_Class.Encrypt(Decrypted_Amiibo, Main_Form.AmiiKeys); + } + + public static string Get_NFC_ID(byte[] internalTag) + { + return String.Format("{0:X2}{1:X2}{2:X2}{3:X2}-{4:X2}{5:X2}{6:X2}{7:X2}", + internalTag[0x1DC], internalTag[0x1DD], internalTag[0x1DE], internalTag[0x1DF], internalTag[0x1E0], internalTag[0x1E1], internalTag[0x1E2], internalTag[0x1E3]); + } + + public static string Get_Character_ID(byte[] internalTag) + { + return String.Format("{0:X2}{1:X2}", internalTag[0x1E0], internalTag[0x1E1]); + } + + public static string Get_GameSeries_ID(byte[] internalTag) + { + return String.Format("{0:X2}{1:X2}{2:X2}", internalTag[0x1DC], internalTag[0x1DD], internalTag[0x1DE]).Substring(0, 3); + } + + //Need to fix strange size of Nickname and owner of 0xF instead of 0x14!! + + public static string Get_Amiibo_Nickname(byte[] internalTag) + { + byte[] Amiibo_Nickname_Buffer = new byte[0x14]; + Array.Copy(internalTag, 0x02C + 0x0C, Amiibo_Nickname_Buffer, 0x000, Amiibo_Nickname_Buffer.Length); + + return Encoding.BigEndianUnicode.GetString(Amiibo_Nickname_Buffer); + } + + public static string Get_Amiibo_Mii_Nickname(byte[] internalTag) + { + byte[] Amiibo_Mii_Nickname_Buffer = new byte[0x14]; + Array.Copy(internalTag, 0x02C + 0x020 + 0x01A, Amiibo_Mii_Nickname_Buffer, 0x000, Amiibo_Mii_Nickname_Buffer.Length); + + return Encoding.Unicode.GetString(Amiibo_Mii_Nickname_Buffer); + } + + public static string Get_Amiibo_Write_Counter(byte[] internalTag) + { + byte[] Amiibo_Write_Counter = new byte[0x02]; + Array.Copy(internalTag, 0x02C + 0x088, Amiibo_Write_Counter, 0x000, Amiibo_Write_Counter.Length); + Array.Reverse(Amiibo_Write_Counter); + + return BitConverter.ToInt16(Amiibo_Write_Counter, 0).ToString(); + } + + public static string Get_Amiibo_AppID(byte[] internalTag) + { + byte[] Amiibo_AppID = new byte[0x04]; + Array.Copy(internalTag, 0x02C + 0x08A, Amiibo_AppID, 0x000, Amiibo_AppID.Length); + + return BitConverter.ToString(Amiibo_AppID).Replace("-", ""); + } + + public static string Get_Amiibo_Initialized_AppID(byte[] internalTag) + { + byte[] Amiibo_Initialized_AppID = new byte[0x08]; + Array.Copy(internalTag, 0x02C + 0x080, Amiibo_Initialized_AppID, 0x000, Amiibo_Initialized_AppID.Length); + string AppID = BitConverter.ToString(Amiibo_Initialized_AppID).Replace("-", ""); + return AppID.Substring(0, 8) + "-" + AppID.Substring(8, 8); + } + + public static string Get_Amiibo_Country(byte[] internalTag) + { + byte[] Amiibo_CountryCode = new byte[0x01]; + Array.Copy(internalTag, 0x02C + 0x001, Amiibo_CountryCode, 0x000, Amiibo_CountryCode.Length); + + return CountryCode_Class.Get_Country_Name(Amiibo_CountryCode[0]); + } + + public static int Get_Amiibo_Initialize_UserData(byte[] internalTag) + { + byte[] Amiibo_Initialize = new byte[0x01]; + Array.Copy(internalTag, 0x02C, Amiibo_Initialize, 0x000, Amiibo_Initialize.Length); + + return Amiibo_Initialize[0] & 0x30; + } + + public static string Get_Amiibo_LastModifiedDate(byte[] internalTag) + { + var Amiibo_Date_Buffer = new byte[0x02]; + Array.Copy(internalTag, 0x02C + 0x006, Amiibo_Date_Buffer, 0x000, Amiibo_Date_Buffer.Length); + Array.Reverse(Amiibo_Date_Buffer); + + return NtagHelpers.DateTimeFromTag((BitConverter.ToUInt16(Amiibo_Date_Buffer, 0))).ToShortDateString(); + } + + public static byte[] Dump_AppData(byte[] Data) + { + byte[] Decrypted_Amiibo; + if (IsEncrypted(Data)) Decrypted_Amiibo = Amiibo_Class.Decrypt(Data, Main_Form.AmiiKeys); + else Decrypted_Amiibo = Data; + + byte[] Amiibo_AppData = new byte[0x0D8]; + Array.Copy(Decrypted_Amiibo, 0x0DC, Amiibo_AppData, 0x000, 0x0D8); + + return Amiibo_AppData; + } + + public static byte[] WriteAppData(byte[] Data, byte[] AppData) + { + byte[] Decrypted_Amiibo; + if (IsEncrypted(Data)) Decrypted_Amiibo = Amiibo_Class.Decrypt(Data, Main_Form.AmiiKeys); + else Decrypted_Amiibo = Data; + + Array.Copy(AppData, 0x000, Decrypted_Amiibo, 0x0DC, 0x0D8); + + if (IsEncrypted(Data)) return Amiibo_Class.Encrypt(Decrypted_Amiibo, Main_Form.AmiiKeys); + else return Decrypted_Amiibo; + + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/ArduinoSketchUploader.cs b/AmiiBomb/Class/ArduinoUploader/ArduinoSketchUploader.cs new file mode 100644 index 0000000..c1d7901 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/ArduinoSketchUploader.cs @@ -0,0 +1,143 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using ArduinoUploader.BootloaderProgrammers; +using ArduinoUploader.Hardware; +using IntelHexFormatReader; +using IntelHexFormatReader.Model; +using NLog; +using RJCP.IO.Ports; + +namespace ArduinoUploader +{ + public class ArduinoSketchUploader + { + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); + private readonly ArduinoSketchUploaderOptions options; + + public ArduinoSketchUploader(ArduinoSketchUploaderOptions options) + { + logger.Info("Starting AmiiBombuino Flasher..."); + this.options = options; + } + + public void UploadSketch() + { + var hexFileName = options.FileName; + logger.Info("Starting upload process for file '{0}'.", hexFileName); + var hexFileContents = File.ReadAllLines(hexFileName); + UploadSketch(hexFileContents); + } + + public void UploadSketch(IEnumerable hexFileContents) + { + var serialPortName = options.PortName; + + var ports = SerialPortStream.GetPortNames(); + + if (!ports.Any() || ports.Distinct().SingleOrDefault( + x => x.Equals(serialPortName, StringComparison.OrdinalIgnoreCase)) == null) + { + UploaderLogger.LogErrorAndQuit( + string.Format("Specified COM port name '{0}' is not valid.", serialPortName)); + } + + logger.Trace("Creating serial port '{0}'...", serialPortName); + SerialPortBootloaderProgrammer programmer = null; + + IMCU mcu = null; + SerialPortConfig serialPortConfig; + + switch (options.ArduinoModel) + { + case ArduinoModel.Mega2560: + { + mcu = new ATMega2560(); + serialPortConfig = new SerialPortConfig(serialPortName, 115200); + programmer = new WiringBootloaderProgrammer(serialPortConfig, mcu); + break; + } + case ArduinoModel.Micro: + { + mcu = new ATMega32U4(); + serialPortConfig = new SerialPortConfig(serialPortName, 57600); + programmer = new ButterflyBootloaderProgrammer(serialPortConfig, mcu); + break; + } + case ArduinoModel.NanoR3: + { + mcu = new ATMega328P(); + serialPortConfig = new SerialPortConfig(serialPortName, 57600); + programmer = new OptibootBootloaderProgrammer(serialPortConfig, mcu); + break; + } + case ArduinoModel.UnoR3: + { + mcu = new ATMega328P(); + serialPortConfig = new SerialPortConfig(serialPortName, 115200); + programmer = new OptibootBootloaderProgrammer(serialPortConfig, mcu); + break; + } + default: + { + UploaderLogger.LogErrorAndQuit( + string.Format("Unsupported model: {0}!", options.ArduinoModel)); + break; + } + } + + try + { + programmer.Open(); + + logger.Info("Establishing sync..."); + programmer.EstablishSync(); + logger.Info("Sync established."); + + logger.Info("Checking device signature..."); + programmer.CheckDeviceSignature(); + logger.Info("Device signature checked."); + + logger.Info("Initializing device..."); + programmer.InitializeDevice(); + logger.Info("Device initialized."); + + logger.Info("Enabling programming mode on the device..."); + programmer.EnableProgrammingMode(); + logger.Info("Programming mode enabled."); + + logger.Info("Programming device..."); + programmer.ProgramDevice(ReadHexFile(hexFileContents, mcu.Flash.Size)); + logger.Info("Device programmed."); + + logger.Info("Leaving programming mode..."); + programmer.LeaveProgrammingMode(); + logger.Info("Left programming mode!"); + } + finally + { + programmer.Close(); + } + logger.Info("All done, shutting down!"); + } + + #region Private Methods + + private static MemoryBlock ReadHexFile(IEnumerable hexFileContents, int memorySize) + { + try + { + var reader = new HexFileReader(hexFileContents, memorySize); + return reader.Parse(); + } + catch (Exception ex) + { + UploaderLogger.LogErrorAndQuit(ex.Message); + } + return null; + } + + #endregion + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/ArduinoSketchUploaderOptions.cs b/AmiiBomb/Class/ArduinoUploader/ArduinoSketchUploaderOptions.cs new file mode 100644 index 0000000..2bf2c3a --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/ArduinoSketchUploaderOptions.cs @@ -0,0 +1,11 @@ +using ArduinoUploader.Hardware; + +namespace ArduinoUploader +{ + public class ArduinoSketchUploaderOptions + { + public string FileName { get; set; } + public string PortName { get; set; } + public ArduinoModel ArduinoModel { get; set; } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/ArduinoBootloaderProgrammer.cs b/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/ArduinoBootloaderProgrammer.cs new file mode 100644 index 0000000..4ed6228 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/ArduinoBootloaderProgrammer.cs @@ -0,0 +1,28 @@ +using ArduinoUploader.Hardware; + +namespace ArduinoUploader.BootloaderProgrammers +{ + internal abstract class ArduinoBootloaderProgrammer : SerialPortBootloaderProgrammer + { + protected int MaxSyncRetries { get { return 20; } } + + protected abstract void Reset(); + + protected ArduinoBootloaderProgrammer(SerialPortConfig serialPortConfig, IMCU mcu) + : base(serialPortConfig, mcu) + { + } + + public override void Open() + { + base.Open(); + Reset(); + } + + public override void Close() + { + Reset(); + base.Close(); + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/BootloaderProgrammer.cs b/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/BootloaderProgrammer.cs new file mode 100644 index 0000000..43c0785 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/BootloaderProgrammer.cs @@ -0,0 +1,84 @@ +using System.Linq; +using System.Threading; +using ArduinoUploader.Hardware; +using ArduinoUploader.Hardware.Memory; +using IntelHexFormatReader.Model; +using NLog; + +namespace ArduinoUploader.BootloaderProgrammers +{ + internal abstract class BootloaderProgrammer : IBootloaderProgrammer + { + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); + + protected IMCU MCU { get; private set; } + + protected BootloaderProgrammer(IMCU mcu) + { + MCU = mcu; + } + + public abstract void Open(); + public abstract void Close(); + public abstract void EstablishSync(); + public abstract void CheckDeviceSignature(); + public abstract void InitializeDevice(); + public abstract void EnableProgrammingMode(); + public abstract void LeaveProgrammingMode(); + public abstract void LoadAddress(IMemory memory, int offset); + public abstract void ExecuteWritePage(IMemory memory, int offset, byte[] bytes); + public abstract byte[] ExecuteReadPage(IMemory memory); + + public virtual void ProgramDevice(MemoryBlock memoryBlock) + { + var sizeToWrite = memoryBlock.HighestModifiedOffset + 1; + var flashMem = MCU.Flash; + var pageSize = flashMem.PageSize; + logger.Info("Preparing to write {0} bytes...", sizeToWrite); + logger.Info("Flash page size: {0}.", pageSize); + + int offset; + for (offset = 0; offset < sizeToWrite; offset += pageSize) + { + var needsWrite = false; + for (var i = offset; i < offset + pageSize; i++) + { + if (!memoryBlock.Cells[i].Modified) continue; + needsWrite = true; + break; + } + if (needsWrite) + { + logger.Debug("Executing paged write @ address {0} (page size {1})...", offset, pageSize); + var bytesToCopy = memoryBlock.Cells.Skip(offset).Take(pageSize).Select(x => x.Value).ToArray(); + + logger.Trace("Checking if bytes at offset {0} need to be overwritten...", offset); + LoadAddress(flashMem, offset); + var bytesAlreadyPresent = ExecuteReadPage(flashMem); + if (bytesAlreadyPresent.SequenceEqual(bytesToCopy)) + { + logger.Trace("Bytes to be written are identical to bytes already present - skipping actual write!"); + continue; + } + logger.Trace("Writing page at offset {0}.", offset); + LoadAddress(flashMem, offset); + ExecuteWritePage(flashMem, offset, bytesToCopy); + + logger.Trace("Page written, now verifying..."); + Thread.Sleep(10); + LoadAddress(flashMem, offset); + var verify = ExecuteReadPage(flashMem); + var succeeded = verify.SequenceEqual(bytesToCopy); + if (!succeeded) + UploaderLogger.LogErrorAndQuit( + "Difference encountered during verification, write failed!"); + } + else + { + logger.Trace("Skip writing page..."); + } + } + logger.Info("{0} bytes written to flash memory!", sizeToWrite); + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/ButterflyBootloaderProgrammer.cs b/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/ButterflyBootloaderProgrammer.cs new file mode 100644 index 0000000..d9449f0 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/ButterflyBootloaderProgrammer.cs @@ -0,0 +1,219 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using ArduinoUploader.Hardware; +using ArduinoUploader.Hardware.Memory; +using ArduinoUploader.Protocols.AVR109; +using ArduinoUploader.Protocols.AVR109.Messages; +using NLog; +using RJCP.IO.Ports; + +namespace ArduinoUploader.BootloaderProgrammers +{ + internal class ButterflyBootloaderProgrammer : ArduinoBootloaderProgrammer + { + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); + private const string EXPECTED_DEVICE_SIGNATURE = "1e-95-87"; + private const int VIRTUAL_COM_CREATION_TIMEOUT = 1000; + private string[] originalPorts; + + public ButterflyBootloaderProgrammer(SerialPortConfig serialPortConfig, IMCU mcu) + : base(serialPortConfig, mcu) + { + } + + protected override void Reset() + { + logger.Info("Issuing forced 1200bps reset..."); + var currentPortName = SerialPort.PortName; + originalPorts = SerialPortStream.GetPortNames(); + + SerialPort.Close(); + + SerialPort = new SerialPortStream(currentPortName, 1200); + SerialPort.Open(); + SerialPort.Close(); + Thread.Sleep(VIRTUAL_COM_CREATION_TIMEOUT); + } + + public override void Close() + { + try + { + logger.Info("Closing..."); + SerialPort.Close(); + logger.Info("Waiting for virtual port to disappear..."); + Thread.Sleep(VIRTUAL_COM_CREATION_TIMEOUT); + } + catch (Exception ex) + { + UploaderLogger.LogErrorAndQuit( + string.Format("Exception during close of the programmer: '{0}'.", + ex.Message)); + } + } + + public override void EstablishSync() + { + var ports = SerialPortStream.GetPortNames(); + var newPort = ports.Except(originalPorts).SingleOrDefault(); + + if (newPort == null) + UploaderLogger.LogErrorAndQuit( + string.Format( + "No (unambiguous) virtual COM port detected (after {0}ms).", + VIRTUAL_COM_CREATION_TIMEOUT)); + + SerialPort = new SerialPortStream + { + BaudRate = 57600, + PortName = newPort, + DataBits = 8, + Parity = Parity.None, + StopBits = StopBits.One, + Handshake = Handshake.DtrRts + }; + try + { + SerialPort.Open(); + } + catch (Exception ex) + { + UploaderLogger.LogErrorAndQuit( + string.Format("Unable to open serial port - {0}.", ex.Message)); + } + } + + public override void CheckDeviceSignature() + { + logger.Debug("Expecting to find '{0}'...", EXPECTED_DEVICE_SIGNATURE); + Send(new ReadSignatureBytesRequest()); + var response = Receive(3); + if (response == null) + UploaderLogger.LogErrorAndQuit( + "Unable to check device signature!"); + + var signature = response.Signature; + if (signature[0] != 0x1e || signature[1] != 0x95 || signature[2] != 0x87) + UploaderLogger.LogErrorAndQuit( + string.Format( + "Unexpected device signature - found '{0}'- expected '{1}'.", + BitConverter.ToString(signature), + EXPECTED_DEVICE_SIGNATURE)); + } + + public override void InitializeDevice() + { + Send(new ReturnSoftwareIdentifierRequest()); + var softIdResponse = Receive(7); + if (softIdResponse == null) + UploaderLogger.LogErrorAndQuit( + "Unable to retrieve software identifier!"); + + logger.Info("Software identifier: '{0}'", + Encoding.ASCII.GetString(softIdResponse.Bytes)); + + Send(new ReturnSoftwareVersionRequest()); + var softVersionResponse = Receive(2); + if (softVersionResponse == null) + UploaderLogger.LogErrorAndQuit( + "Unable to retrieve software version!"); + + logger.Info("Software Version: {0}.{1}", + softVersionResponse.MajorVersion, softVersionResponse.MinorVersion); + + Send(new ReturnProgrammerTypeRequest()); + var progTypeResponse = Receive(1); + if (progTypeResponse == null) + UploaderLogger.LogErrorAndQuit( + "Unable to retrieve programmer type!"); + + logger.Info("Programmer type: {0}.", progTypeResponse.ProgrammerType); + + Send(new CheckBlockSupportRequest()); + var checkBlockResponse = Receive(3); + if (checkBlockResponse == null) + UploaderLogger.LogErrorAndQuit("Unable to retrieve block support!"); + if (!checkBlockResponse.HasBlockSupport) + UploaderLogger.LogErrorAndQuit("Block support is not supported!"); + + logger.Info("Block support - buffer size {0} bytes.", checkBlockResponse.BufferSize); + + Send(new ReturnSupportedDeviceCodesRequest()); + var devices = new List(); + do + { + var nextByte = (byte) ReceiveNext(); + if (nextByte != Constants.NULL) devices.Add(nextByte); + else break; + } + while (true); + + var supportedDevices = string.Join("-", devices); + logger.Info("Supported devices: {0}.", supportedDevices); + + var devCode = MCU.DeviceCode; + if (!devices.Contains(devCode)) + UploaderLogger.LogErrorAndQuit( + string.Format("Device {0} not in supported list of devices: {1}!", + devCode, supportedDevices)); + + logger.Info("Selecting device type '{0}'...", devCode); + Send(new SelectDeviceTypeRequest(devCode)); + var response = ReceiveNext(); + if (response != Constants.CARRIAGE_RETURN) + UploaderLogger.LogErrorAndQuit("Unable to execute select device type command!"); + } + + public override void EnableProgrammingMode() + { + Send(new EnterProgrammingModeRequest()); + var response = ReceiveNext(); + if (response != Constants.CARRIAGE_RETURN) + UploaderLogger.LogErrorAndQuit("Unable to enter programming mode!"); + } + + public override void LoadAddress(IMemory memory, int offset) + { + logger.Trace("Sending load address request: {0}.", offset); + Send(new SetAddressRequest(offset / 2)); + var response = ReceiveNext(); + if (response != Constants.CARRIAGE_RETURN) + UploaderLogger.LogErrorAndQuit("Unable to execute set address request!"); + } + + public override byte[] ExecuteReadPage(IMemory memory) + { + var type = memory.Type; + var blockSize = memory.PageSize; + Send(new StartBlockReadRequest(type, blockSize)); + var response = Receive(blockSize); + return response.Bytes; + } + + public override void ExecuteWritePage(IMemory memory, int offset, byte[] bytes) + { + var type = memory.Type; + var blockSize = memory.PageSize; + Send(new StartBlockLoadRequest(type, blockSize, bytes)); + var response = ReceiveNext(); + if (response != Constants.CARRIAGE_RETURN) + UploaderLogger.LogErrorAndQuit("Unable to execute write page!"); + } + + public override void LeaveProgrammingMode() + { + Send(new LeaveProgrammingModeRequest()); + var leaveProgModeResp = ReceiveNext(); + if (leaveProgModeResp != Constants.CARRIAGE_RETURN) + UploaderLogger.LogErrorAndQuit("Unable to leave programming mode!"); + + Send(new ExitBootLoaderRequest()); + var exitBootloaderResp = ReceiveNext(); + if (exitBootloaderResp != Constants.CARRIAGE_RETURN) + UploaderLogger.LogErrorAndQuit("Unable to exit boot loader!"); + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/IBootloaderProgrammer.cs b/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/IBootloaderProgrammer.cs new file mode 100644 index 0000000..20d11cb --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/IBootloaderProgrammer.cs @@ -0,0 +1,20 @@ +using ArduinoUploader.Hardware.Memory; +using IntelHexFormatReader.Model; + +namespace ArduinoUploader.BootloaderProgrammers +{ + internal interface IBootloaderProgrammer + { + void Open(); + void Close(); + void EstablishSync(); + void CheckDeviceSignature(); + void InitializeDevice(); + void EnableProgrammingMode(); + void LeaveProgrammingMode(); + void ProgramDevice(MemoryBlock memoryBlock); + void LoadAddress(IMemory memory, int offset); + void ExecuteWritePage(IMemory memory, int offset, byte[] bytes); + byte[] ExecuteReadPage(IMemory memory); + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/OptibootBootloaderProgrammer.cs b/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/OptibootBootloaderProgrammer.cs new file mode 100644 index 0000000..9047d0a --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/OptibootBootloaderProgrammer.cs @@ -0,0 +1,187 @@ +using System; +using System.Threading; +using ArduinoUploader.Hardware; +using ArduinoUploader.Hardware.Memory; +using ArduinoUploader.Protocols; +using ArduinoUploader.Protocols.STK500v1; +using ArduinoUploader.Protocols.STK500v1.Messages; +using NLog; + +namespace ArduinoUploader.BootloaderProgrammers +{ + internal class OptibootBootloaderProgrammer : ArduinoBootloaderProgrammer + { + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); + private const string EXPECTED_DEVICE_SIGNATURE = "1e-95-0f"; + + internal OptibootBootloaderProgrammer(SerialPortConfig serialPortConfig, IMCU mcu) + : base(serialPortConfig, mcu) + { + } + + public override void Open() + { + base.Open(); + // The Uno (and Nano R3) will have auto-reset because DTR is true when opening the serial connection, + // so we just wait a small amount of time for it to come back. + Thread.Sleep(250); + } + + protected override void Reset() + { + ToggleDtrRts(250, 50); + } + + public override void EstablishSync() + { + int i; + for (i = 0; i < MaxSyncRetries; i++) + { + Send(new GetSyncRequest()); + var result = Receive(); + if (result == null) continue; + if (result.IsInSync) break; + } + + if (i == MaxSyncRetries) + UploaderLogger.LogErrorAndQuit( + string.Format( + "Unable to establish sync after {0} retries.", MaxSyncRetries)); + + var nextByte = ReceiveNext(); + + if (nextByte != Constants.RESP_STK_OK) + UploaderLogger.LogErrorAndQuit( + "Unable to establish sync."); + } + + protected void SendWithSyncRetry(IRequest request) + { + byte nextByte; + while (true) + { + Send(request); + nextByte = (byte) ReceiveNext(); + if (nextByte == Constants.RESP_STK_NOSYNC) + { + EstablishSync(); + continue; + } + break; + } + if (nextByte != Constants.RESP_STK_INSYNC) + UploaderLogger.LogErrorAndQuit( + string.Format( + "Unable to aqcuire sync in SendWithSyncRetry for request of type {0}!", + request.GetType())); + } + + public override void CheckDeviceSignature() + { + logger.Debug("Expecting to find '{0}'...", EXPECTED_DEVICE_SIGNATURE); + SendWithSyncRetry(new ReadSignatureRequest()); + var response = Receive(4); + if (response == null || !response.IsCorrectResponse) + UploaderLogger.LogErrorAndQuit( + "Unable to check device signature!"); + + var signature = response.Signature; + if (signature[0] != 0x1e || signature[1] != 0x95 || signature[2] != 0x0f) + UploaderLogger.LogErrorAndQuit( + string.Format( + "Unexpected device signature - found '{0}'- expected '{1}'.", + BitConverter.ToString(signature), + EXPECTED_DEVICE_SIGNATURE)); + } + + public override void InitializeDevice() + { + var majorVersion = GetParameterValue(Constants.PARM_STK_SW_MAJOR); + var minorVersion = GetParameterValue(Constants.PARM_STK_SW_MINOR); + logger.Info("Retrieved software version: {0}.", + string.Format("{0}.{1}", majorVersion, minorVersion)); + + logger.Info("Setting device programming parameters..."); + SendWithSyncRetry(new SetDeviceProgrammingParametersRequest((MCU)MCU)); + var nextByte = ReceiveNext(); + + if (nextByte != Constants.RESP_STK_OK) + UploaderLogger.LogErrorAndQuit( + "Unable to set device programming parameters!"); + } + + public override void EnableProgrammingMode() + { + SendWithSyncRetry(new EnableProgrammingModeRequest()); + var nextByte = ReceiveNext(); + if (nextByte == Constants.RESP_STK_OK) return; + if (nextByte == Constants.RESP_STK_NODEVICE || nextByte == Constants.RESP_STK_Failed) + UploaderLogger.LogErrorAndQuit( + "Unable to enable programming mode on the device!"); + } + + public override void LeaveProgrammingMode() + { + SendWithSyncRetry(new LeaveProgrammingModeRequest()); + var nextByte = ReceiveNext(); + if (nextByte == Constants.RESP_STK_OK) return; + if (nextByte == Constants.RESP_STK_NODEVICE || nextByte == Constants.RESP_STK_Failed) + UploaderLogger.LogErrorAndQuit( + "Unable to leave programming mode on the device!"); + } + + private uint GetParameterValue(byte param) + { + logger.Trace("Retrieving parameter '{0}'...", param); + SendWithSyncRetry(new GetParameterRequest(param)); + var nextByte = ReceiveNext(); + var paramValue = (uint)nextByte; + nextByte = ReceiveNext(); + + if (nextByte == Constants.RESP_STK_Failed) + UploaderLogger.LogErrorAndQuit( + string.Format("Retrieving parameter '{0}' failed!", param)); + + if (nextByte != Constants.RESP_STK_OK) + UploaderLogger.LogErrorAndQuit( + string.Format( + "General protocol error while retrieving parameter '{0}'.", + param)); + + return paramValue; + } + + public override void ExecuteWritePage(IMemory memory, int offset, byte[] bytes) + { + SendWithSyncRetry(new ExecuteProgramPageRequest(memory, bytes)); + var nextByte = ReceiveNext(); + if (nextByte == Constants.RESP_STK_OK) return; + UploaderLogger.LogErrorAndQuit( + string.Format("Write at offset {0} failed!", offset)); + } + + public override byte[] ExecuteReadPage(IMemory memory) + { + var pageSize = memory.PageSize; + SendWithSyncRetry(new ExecuteReadPageRequest(memory.Type, pageSize)); + var bytes = ReceiveNext(pageSize); + if (bytes == null) + UploaderLogger.LogErrorAndQuit("Execute read page failed!"); + + var nextByte = ReceiveNext(); + if (nextByte == Constants.RESP_STK_OK) return bytes; + UploaderLogger.LogErrorAndQuit("Execute read page failed!"); + return null; + } + + public override void LoadAddress(IMemory memory, int addr) + { + logger.Trace("Sending load address request: {0}.", addr); + addr = addr >> 1; + SendWithSyncRetry(new LoadAddressRequest(addr)); + var result = ReceiveNext(); + if (result == Constants.RESP_STK_OK) return; + UploaderLogger.LogErrorAndQuit(string.Format("LoadAddress failed with result {0}!", result)); + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/SerialPortBootloaderProgrammer.cs b/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/SerialPortBootloaderProgrammer.cs new file mode 100644 index 0000000..46e5d44 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/SerialPortBootloaderProgrammer.cs @@ -0,0 +1,134 @@ +using System; +using System.Threading; +using ArduinoUploader.Hardware; +using ArduinoUploader.Protocols; +using NLog; +using RJCP.IO.Ports; + +namespace ArduinoUploader.BootloaderProgrammers +{ + internal abstract class SerialPortBootloaderProgrammer : BootloaderProgrammer + { + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); + + protected SerialPortConfig serialPortConfig; + protected SerialPortStream SerialPort { get; set; } + + protected SerialPortBootloaderProgrammer(SerialPortConfig serialPortConfig, IMCU mcu) + : base(mcu) + { + this.serialPortConfig = serialPortConfig; + } + + public override void Open() + { + var portName = serialPortConfig.PortName; + var baudRate = serialPortConfig.BaudRate; + logger.Info("Opening serial port {0} - baudrate {1}", serialPortConfig.PortName, serialPortConfig.BaudRate); + + SerialPort = new SerialPortStream(portName, baudRate) + { + ReadTimeout = serialPortConfig.ReadTimeOut, + WriteTimeout = serialPortConfig.WriteTimeOut, + DtrEnable = true // This means the Arduino will reset the moment we open the serial connection. + }; + try + { + SerialPort.Open(); + } + catch (ObjectDisposedException ex) + { + UploaderLogger.LogErrorAndQuit( + string.Format("Unable to open serial port {0} - {1}.", portName, ex.Message)); + } + catch (InvalidOperationException ex) + { + UploaderLogger.LogErrorAndQuit( + string.Format("Unable to open serial port {0} - {1}.", portName, ex.Message)); + } + logger.Trace("Opened serial port {0} with baud rate {1}!", portName, baudRate); + } + + public override void Close() + { + logger.Info("Closing serial port..."); + SerialPort.DtrEnable = false; + SerialPort.RtsEnable = false; + try + { + SerialPort.Close(); + } + catch (Exception) + { + // Ignore + } + } + + protected void ToggleDtrRts(int wait1, int wait2, bool invert = false) + { + logger.Trace("Toggling DTR/RTS..."); + + SerialPort.DtrEnable = invert; + SerialPort.RtsEnable = invert; + + Thread.Sleep(wait1); + + SerialPort.DtrEnable = !invert; + SerialPort.RtsEnable = !invert; + + Thread.Sleep(wait2); + } + + protected virtual void Send(IRequest request) + { + var bytes = request.Bytes; + var length = bytes.Length; + logger.Trace( + "Sending {0} bytes: {1}{2}", + length, Environment.NewLine, BitConverter.ToString(bytes)); + SerialPort.Write(bytes, 0, length); + } + + protected TResponse Receive(int length = 1) where TResponse : Response, new() + { + var bytes = ReceiveNext(length); + if (bytes == null) return null; + return new TResponse { Bytes = bytes }; + } + + protected int ReceiveNext() + { + var bytes = new byte[1]; + try + { + SerialPort.Read(bytes, 0, 1); + logger.Trace( + "Receiving byte: {0}", + BitConverter.ToString(bytes)); + return bytes[0]; + } + catch (TimeoutException) + { + return -1; + } + } + + protected byte[] ReceiveNext(int length) + { + var bytes = new byte[length]; + var retrieved = 0; + try + { + while (retrieved < length) + retrieved += SerialPort.Read(bytes, retrieved, length - retrieved); + + logger.Trace("Receiving bytes: {0}", BitConverter.ToString(bytes)); + return bytes; + } + catch (TimeoutException) + { + return null; + } + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/SerialPortConfig.cs b/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/SerialPortConfig.cs new file mode 100644 index 0000000..1c4e4ff --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/SerialPortConfig.cs @@ -0,0 +1,21 @@ +namespace ArduinoUploader.BootloaderProgrammers +{ + internal class SerialPortConfig + { + public string PortName { get; set; } + public int BaudRate { get; set; } + public int ReadTimeOut { get; set; } + public int WriteTimeOut { get; set; } + + private const int DefaultTimeout = 1000; + + public SerialPortConfig(string portName, int baudRate, + int readTimeout = DefaultTimeout, int writeTimeout = DefaultTimeout) + { + PortName = portName; + BaudRate = baudRate; + ReadTimeOut = readTimeout; + WriteTimeOut = writeTimeout; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/WiringBootloaderProgrammer.cs b/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/WiringBootloaderProgrammer.cs new file mode 100644 index 0000000..e1cc0c1 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/BootloaderProgrammers/WiringBootloaderProgrammer.cs @@ -0,0 +1,299 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using ArduinoUploader.Hardware; +using ArduinoUploader.Hardware.Memory; +using ArduinoUploader.Protocols; +using ArduinoUploader.Protocols.STK500v2; +using ArduinoUploader.Protocols.STK500v2.Messages; +using NLog; +using EnableProgrammingModeRequest = ArduinoUploader.Protocols.STK500v2.Messages.EnableProgrammingModeRequest; +using GetParameterRequest = ArduinoUploader.Protocols.STK500v2.Messages.GetParameterRequest; +using GetSyncRequest = ArduinoUploader.Protocols.STK500v2.Messages.GetSyncRequest; +using GetSyncResponse = ArduinoUploader.Protocols.STK500v2.Messages.GetSyncResponse; +using LoadAddressRequest = ArduinoUploader.Protocols.STK500v2.Messages.LoadAddressRequest; + +namespace ArduinoUploader.BootloaderProgrammers +{ + internal class WiringBootloaderProgrammer : ArduinoBootloaderProgrammer + { + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); + private const string EXPECTED_DEVICE_SIGNATURE = "AVRISP_2"; + private const string STK500v2_CORRUPT_WRAPPER = "STK500V2 wrapper corrupted ({0})!"; + + private readonly IDictionary readCommands = new Dictionary() + { + { MemoryType.FLASH, Constants.CMD_READ_FLASH_ISP }, + { MemoryType.EEPROM, Constants.CMD_READ_EEPROM_ISP } + }; + + private readonly IDictionary writeCommands = new Dictionary() + { + { MemoryType.FLASH, Constants.CMD_PROGRAM_FLASH_ISP }, + { MemoryType.EEPROM, Constants.CMD_PROGRAM_EEPROM_ISP } + }; + + private string deviceSignature; + private static byte sequenceNumber; + protected static byte LastCommandSequenceNumber; + protected static byte SequenceNumber + { + get + { + if (sequenceNumber == 255) sequenceNumber = 0; + return ++sequenceNumber; + } + } + + public WiringBootloaderProgrammer(SerialPortConfig serialPortConfig, IMCU mcu) + : base(serialPortConfig, mcu) + { + } + + public override void Open() + { + base.Open(); + // The Uno (and Nano R3) will have auto-reset because DTR is true when opening the serial connection, + // so we just wait a small amount of time for it to come back. + Thread.Sleep(50); + } + + protected override void Reset() + { + ToggleDtrRts(50, 50, true); + } + + protected override void Send(IRequest request) + { + var requestBodyLength = request.Bytes.Length; + var totalMessageLength = requestBodyLength + 6; + var wrappedBytes = new byte[totalMessageLength]; + wrappedBytes[0] = Constants.MESSAGE_START; + wrappedBytes[1] = LastCommandSequenceNumber = SequenceNumber; + wrappedBytes[2] = (byte)(requestBodyLength >> 8); + wrappedBytes[3] = (byte) (requestBodyLength & 0xFF); + wrappedBytes[4] = Constants.TOKEN; + Buffer.BlockCopy(request.Bytes, 0, wrappedBytes, 5, requestBodyLength); + + byte checksum = 0; + for (var i = 0; i < totalMessageLength - 1; i++) checksum ^= wrappedBytes[i]; + wrappedBytes[totalMessageLength -1] = checksum; + + request.Bytes = wrappedBytes; + base.Send(request); + } + + protected TResponse Receive() where TResponse: Response + { + var response = (TResponse) Activator.CreateInstance(typeof(TResponse)); + + var wrappedResponseBytes = new byte[300]; + var messageStart = ReceiveNext(); + if (messageStart != Constants.MESSAGE_START) + { + logger.Warn( + STK500v2_CORRUPT_WRAPPER, + "No Start Message detected!"); + return null; + } + wrappedResponseBytes[0] = (byte) messageStart; + logger.Trace("Received MESSAGE_START."); + + var seqNumber = ReceiveNext(); + if (seqNumber != LastCommandSequenceNumber) + { + logger.Warn( + STK500v2_CORRUPT_WRAPPER, + "Wrong sequence number!"); + return null; + } + wrappedResponseBytes[1] = sequenceNumber; + logger.Trace("Received sequence number."); + + var messageSizeHighByte = ReceiveNext(); + if (messageSizeHighByte == -1) + { + logger.Warn( + STK500v2_CORRUPT_WRAPPER, + "Timeout ocurred!"); + return null; + } + wrappedResponseBytes[2] = (byte) messageSizeHighByte; + + var messageSizeLowByte = ReceiveNext(); + if (messageSizeLowByte == -1) + { + logger.Warn( + STK500v2_CORRUPT_WRAPPER, + "Timeout ocurred!"); + return null; + } + wrappedResponseBytes[3] = (byte) messageSizeLowByte; + + var messageSize = (messageSizeHighByte << 8) + messageSizeLowByte; + logger.Trace("Received message size: {0}.", messageSize); + + var token = ReceiveNext(); + if (token != Constants.TOKEN) + { + logger.Warn( + STK500v2_CORRUPT_WRAPPER, + "Token not received!"); + return null; + } + wrappedResponseBytes[4] = (byte) token; + + logger.Trace("Received TOKEN."); + + var payload = ReceiveNext(messageSize); + if (payload == null) + { + logger.Warn( + STK500v2_CORRUPT_WRAPPER, + "Inner message not received!"); + return null; + } + + Buffer.BlockCopy(payload, 0, wrappedResponseBytes, 5, messageSize); + + var responseCheckSum = ReceiveNext(); + if (responseCheckSum == -1) + { + logger.Warn( + STK500v2_CORRUPT_WRAPPER, + "Checksum not received!"); + return null; + } + wrappedResponseBytes[5 + messageSize] = (byte) responseCheckSum; + + byte checksum = 0; + for (var i = 0; i < 5 + messageSize; i++) checksum ^= wrappedResponseBytes[i]; + + if (responseCheckSum != checksum) + { + logger.Warn( + STK500v2_CORRUPT_WRAPPER, + "Checksum incorrect!" + ); + return null; + } + + var message = new byte[messageSize]; + Buffer.BlockCopy(wrappedResponseBytes, 5, message, 0, messageSize); + response.Bytes = message; + return response; + } + + public override void EstablishSync() + { + int i; + for (i = 0; i < MaxSyncRetries; i++) + { + Send(new GetSyncRequest()); + var result = Receive(); + if (result == null) continue; + if (!result.IsInSync) continue; + deviceSignature = result.Signature; + break; + } + + if (i == MaxSyncRetries) + UploaderLogger.LogErrorAndQuit( + string.Format( + "Unable to establish sync after {0} retries.", MaxSyncRetries)); + } + + public override void CheckDeviceSignature() + { + logger.Debug("Expecting to find '{0}'...", EXPECTED_DEVICE_SIGNATURE); + + if (!deviceSignature.Equals(EXPECTED_DEVICE_SIGNATURE)) + UploaderLogger.LogErrorAndQuit( + string.Format("Unexpected device signature - found '{0}'- expected '{1}'.", + deviceSignature, EXPECTED_DEVICE_SIGNATURE)); + } + + public override void InitializeDevice() + { + var hardwareVersion = GetParameterValue(Constants.PARAM_HW_VER); + var softwareMajor = GetParameterValue(Constants.PARAM_SW_MAJOR); + var softwareMinor = GetParameterValue(Constants.PARAM_SW_MINOR); + logger.Info("Retrieved software version: {0}.", + string.Format("{0} (hardware) - {1}.{2} (software)", + hardwareVersion, softwareMajor, softwareMinor)); + } + + public override void EnableProgrammingMode() + { + Send(new EnableProgrammingModeRequest(MCU)); + var response = Receive(); + if (response == null) + UploaderLogger.LogErrorAndQuit( + "Unable to enable programming mode on the device!"); + } + + public override void LeaveProgrammingMode() + { + Send(new LeaveProgrammingModeRequest()); + var response = Receive(); + if (response == null) + UploaderLogger.LogErrorAndQuit( + "Unable to leave programming mode on the device!"); + } + + public override void ExecuteWritePage(IMemory memory, int offset, byte[] bytes) + { + logger.Trace( + "Sending execute write page request for offset {0} ({1} bytes)...", + offset, bytes.Length); + + var writeCmd = writeCommands[memory.Type]; + + Send(new ExecuteProgramPageRequest(writeCmd, memory, bytes)); + var response = Receive(); + if (response == null || response.AnswerID != writeCmd + || response.Status != Constants.STATUS_CMD_OK) + { + UploaderLogger.LogErrorAndQuit( + string.Format( + "Executing write page request at offset {0} failed!", offset)); + } + } + + public override byte[] ExecuteReadPage(IMemory memory) + { + var readCmd = readCommands[memory.Type]; + + Send(new ExecuteReadPageRequest(readCmd, memory)); + var response = Receive(); + if (response == null || response.AnswerID != readCmd || response.Status != Constants.STATUS_CMD_OK) + UploaderLogger.LogErrorAndQuit("Executing read page request failed!"); + + var responseBytes = new byte[memory.PageSize]; + Buffer.BlockCopy(response.Bytes, 2, responseBytes, 0, responseBytes.Length); + return responseBytes; + } + + public override void LoadAddress(IMemory memory, int offset) + { + logger.Trace("Sending load address request: {0}.", offset); + offset = offset >> 1; + Send(new LoadAddressRequest(memory, offset)); + var response = Receive(); + if (response == null || !response.Succeeded) + UploaderLogger.LogErrorAndQuit( + "Unable to execute load address!"); + } + + private uint GetParameterValue(byte param) + { + logger.Trace("Retrieving parameter '{0}'...", param); + Send(new GetParameterRequest(param)); + var response = Receive(); + if (response == null || !response.IsSuccess) + UploaderLogger.LogErrorAndQuit( + string.Format("Retrieving parameter '{0}' failed!", param)); + return response.ParameterValue; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Hardware/ATMega2560.cs b/AmiiBomb/Class/ArduinoUploader/Hardware/ATMega2560.cs new file mode 100644 index 0000000..c228df5 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Hardware/ATMega2560.cs @@ -0,0 +1,61 @@ +using System.Collections.Generic; +using ArduinoUploader.Hardware.Memory; + +namespace ArduinoUploader.Hardware +{ + internal class ATMega2560 : MCU + { + public override byte DeviceCode { get { return 0xb2; } } + public override byte DeviceRevision { get { return 0; } } + public override byte LockBytes { get { return 1; } } + public override byte FuseBytes { get { return 3; } } + + public override byte Timeout { get { return 200; } } + public override byte StabDelay { get { return 100; } } + public override byte CmdExeDelay { get { return 25; } } + public override byte SynchLoops { get { return 32; } } + public override byte ByteDelay { get { return 0; } } + public override byte PollIndex { get { return 3; } } + public override byte PollValue { get { return 0x53; } } + + public override IDictionary CommandBytes + { + get + { + return new Dictionary + { + { Command.PGM_ENABLE, new byte[] { 0xac, 0x53, 0x00, 0x00 } } + }; + } + } + + public override IList Memory + { + get + { + return new List() + { + new FlashMemory() + { + Size = 256 * 1024, + PageSize = 256, + PollVal1 = 0x00, + PollVal2 = 0x00, + Delay = 10, + CmdBytesRead = new byte[] { 0x20, 0x00, 0x00 }, + CmdBytesWrite = new byte[] { 0x40, 0x4c, 0x00 } + }, + new EEPROMMemory() + { + Size = 4 * 1024, + PollVal1 = 0x00, + PollVal2 = 0x00, + Delay = 10, + CmdBytesRead = new byte[] { 0xa0, 0x00, 0x00 }, + CmdBytesWrite = new byte[] { 0xc1, 0xc2, 0x00 } + } + }; + } + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Hardware/ATMega328P.cs b/AmiiBomb/Class/ArduinoUploader/Hardware/ATMega328P.cs new file mode 100644 index 0000000..7ceec7a --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Hardware/ATMega328P.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; +using ArduinoUploader.Hardware.Memory; + +namespace ArduinoUploader.Hardware +{ + internal class ATMega328P : MCU + { + public override byte DeviceCode { get { return 0x86; } } + public override byte DeviceRevision { get { return 0; } } + public override byte ProgType { get { return 0; } } + public override byte ParallelMode { get { return 1; } } + public override byte Polling { get { return 1; } } + public override byte SelfTimed { get { return 1; } } + public override byte LockBytes { get { return 1; } } + public override byte FuseBytes { get { return 3; } } + + public override byte Timeout { get { return 200; } } + public override byte StabDelay { get { return 100; } } + public override byte CmdExeDelay { get { return 25; } } + public override byte SynchLoops { get { return 32; } } + public override byte ByteDelay { get { return 0; } } + public override byte PollIndex { get { return 3; } } + public override byte PollValue { get { return 0x53; } } + + public override IDictionary CommandBytes + { + get { return new Dictionary(); } + } + + public override IList Memory + { + get + { + return new List() + { + new FlashMemory() + { + Size = 32 * 1024, + PageSize = 128, + PollVal1 = 0xff, + PollVal2 = 0xff + }, + new EEPROMMemory() + { + Size = 1024, + PollVal1 = 0xff, + PollVal2 = 0xff + } + }; + } + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Hardware/ATMega32U4.cs b/AmiiBomb/Class/ArduinoUploader/Hardware/ATMega32U4.cs new file mode 100644 index 0000000..6158a88 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Hardware/ATMega32U4.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; +using ArduinoUploader.Hardware.Memory; + +namespace ArduinoUploader.Hardware +{ + internal class ATMega32U4 : MCU + { + public override byte DeviceCode { get { return 0x44; } } + public override byte DeviceRevision { get { return 0; } } + public override byte ProgType { get { return 0; } } + public override byte ParallelMode { get { return 0; } } + public override byte Polling { get { return 0; } } + public override byte SelfTimed { get { return 0; } } + public override byte LockBytes { get { return 0; } } + public override byte FuseBytes { get { return 0; } } + + public override byte Timeout { get { return 200; } } + public override byte StabDelay { get { return 100; } } + public override byte CmdExeDelay { get { return 25; } } + public override byte SynchLoops { get { return 32; } } + public override byte ByteDelay { get { return 0; } } + public override byte PollIndex { get { return 3; } } + public override byte PollValue { get { return 0x53; } } + + public override IDictionary CommandBytes + { + get { return new Dictionary(); } + } + + public override IList Memory + { + get + { + return new List() + { + new FlashMemory() + { + Size = 32 * 1024, + PageSize = 128, + PollVal1 = 0xff, + PollVal2 = 0xff + }, + new EEPROMMemory() + { + Size = 1024, + PollVal1 = 0xff, + PollVal2 = 0xff + } + }; + } + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Hardware/ArduinoModel.cs b/AmiiBomb/Class/ArduinoUploader/Hardware/ArduinoModel.cs new file mode 100644 index 0000000..3f391d2 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Hardware/ArduinoModel.cs @@ -0,0 +1,10 @@ +namespace ArduinoUploader.Hardware +{ + public enum ArduinoModel + { + Mega2560, + Micro, + NanoR3, + UnoR3 + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Hardware/Command.cs b/AmiiBomb/Class/ArduinoUploader/Hardware/Command.cs new file mode 100644 index 0000000..1d19ab6 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Hardware/Command.cs @@ -0,0 +1,9 @@ +namespace ArduinoUploader.Hardware +{ + internal enum Command + { + PGM_ENABLE, + READ_FLASH, + READ_EEPROM + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Hardware/IMCU.cs b/AmiiBomb/Class/ArduinoUploader/Hardware/IMCU.cs new file mode 100644 index 0000000..0827463 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Hardware/IMCU.cs @@ -0,0 +1,33 @@ +using System.Collections.Generic; +using ArduinoUploader.Hardware.Memory; + +namespace ArduinoUploader.Hardware +{ + internal interface IMCU + { + byte DeviceCode { get; } + byte DeviceRevision { get; } + byte ProgType { get; } + byte ParallelMode { get; } + byte Polling { get; } + byte SelfTimed { get; } + byte LockBytes { get; } + byte FuseBytes { get; } + + byte Timeout { get; } + byte StabDelay { get; } + byte CmdExeDelay { get; } + byte SynchLoops { get; } + byte ByteDelay { get; } + byte PollValue { get; } + byte PollIndex { get; } + + IDictionary CommandBytes { get; } + + IMemory Flash { get; } + IMemory EEPROM { get; } + + IList Memory { get; } + + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Hardware/MCU.cs b/AmiiBomb/Class/ArduinoUploader/Hardware/MCU.cs new file mode 100644 index 0000000..0f35fa9 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Hardware/MCU.cs @@ -0,0 +1,43 @@ +using System.Collections.Generic; +using System.Linq; +using ArduinoUploader.Hardware.Memory; + +namespace ArduinoUploader.Hardware +{ + internal abstract class MCU : IMCU + { + // TODO: move properties (both on interface and implementation to correct corresponding places) + // At the moment this is just one giant mixin class. + public abstract byte DeviceCode { get; } + public abstract byte DeviceRevision { get; } + public abstract byte LockBytes { get; } + public abstract byte FuseBytes { get; } + + public abstract byte Timeout { get; } + public abstract byte StabDelay { get; } + public abstract byte CmdExeDelay { get; } + public abstract byte SynchLoops { get; } + public abstract byte ByteDelay { get; } + public abstract byte PollValue { get; } + public abstract byte PollIndex { get; } + + public virtual byte ProgType { get { return 0; } } + public virtual byte ParallelMode { get { return 0; } } + public virtual byte Polling { get { return 1; } } + public virtual byte SelfTimed { get { return 1; } } + + public abstract IDictionary CommandBytes { get; } + + public IMemory Flash + { + get { return Memory.SingleOrDefault(x => x.Type == MemoryType.FLASH); } + } + + public IMemory EEPROM + { + get { return Memory.SingleOrDefault(x => x.Type == MemoryType.EEPROM); } + } + + public abstract IList Memory { get; } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Hardware/Memory/EEPROMMemory.cs b/AmiiBomb/Class/ArduinoUploader/Hardware/Memory/EEPROMMemory.cs new file mode 100644 index 0000000..b0aefb4 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Hardware/Memory/EEPROMMemory.cs @@ -0,0 +1,10 @@ +namespace ArduinoUploader.Hardware.Memory +{ + internal class EEPROMMemory : Memory + { + public override MemoryType Type + { + get { return MemoryType.EEPROM; } + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Hardware/Memory/FlashMemory.cs b/AmiiBomb/Class/ArduinoUploader/Hardware/Memory/FlashMemory.cs new file mode 100644 index 0000000..7119813 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Hardware/Memory/FlashMemory.cs @@ -0,0 +1,10 @@ +namespace ArduinoUploader.Hardware.Memory +{ + internal class FlashMemory : Memory + { + public override MemoryType Type + { + get { return MemoryType.FLASH; } + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Hardware/Memory/IMemory.cs b/AmiiBomb/Class/ArduinoUploader/Hardware/Memory/IMemory.cs new file mode 100644 index 0000000..cf9e547 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Hardware/Memory/IMemory.cs @@ -0,0 +1,14 @@ +namespace ArduinoUploader.Hardware.Memory +{ + internal interface IMemory + { + MemoryType Type { get; } + int Size { get; } + int PageSize { get; } + byte PollVal1 { get; } + byte PollVal2 { get; } + byte Delay { get; } + byte[] CmdBytesRead { get; } + byte[] CmdBytesWrite { get; } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Hardware/Memory/Memory.cs b/AmiiBomb/Class/ArduinoUploader/Hardware/Memory/Memory.cs new file mode 100644 index 0000000..2282373 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Hardware/Memory/Memory.cs @@ -0,0 +1,15 @@ +namespace ArduinoUploader.Hardware.Memory +{ + internal abstract class Memory : IMemory + { + public abstract MemoryType Type { get; } + + public int Size { get; set; } + public int PageSize { get; set; } + public byte PollVal1 { get; set; } + public byte PollVal2 { get; set; } + public byte Delay { get; set; } + public byte[] CmdBytesRead { get; set; } + public byte[] CmdBytesWrite { get; set; } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Hardware/Memory/MemoryType.cs b/AmiiBomb/Class/ArduinoUploader/Hardware/Memory/MemoryType.cs new file mode 100644 index 0000000..79b30d8 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Hardware/Memory/MemoryType.cs @@ -0,0 +1,8 @@ +namespace ArduinoUploader.Hardware.Memory +{ + internal enum MemoryType + { + FLASH, + EEPROM + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Constants.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Constants.cs new file mode 100644 index 0000000..35c56ca --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Constants.cs @@ -0,0 +1,22 @@ +namespace ArduinoUploader.Protocols.AVR109 +{ + internal static class Constants + { + internal const byte NULL = 0x00; + internal const byte CARRIAGE_RETURN = 0x0d; + + internal const byte CMD_SET_ADDRESS = 0x41; + internal const byte CMD_START_BLOCK_LOAD = 0x42; + internal const byte CMD_EXIT_BOOTLOADER = 0x45; + internal const byte CMD_LEAVE_PROGRAMMING_MODE = 0x4c; + internal const byte CMD_ENTER_PROGRAMMING_MODE = 0x50; + internal const byte CMD_RETURN_SOFTWARE_IDENTIFIER = 0x53; + internal const byte CMD_SELECT_DEVICE_TYPE = 0x54; + internal const byte CMD_RETURN_SOFTWARE_VERSION = 0x56; + internal const byte CMD_CHECK_BLOCK_SUPPORT = 0x62; + internal const byte CMD_START_BLOCK_READ = 0x67; + internal const byte CMD_RETURN_PROGRAMMER_TYPE = 0x70; + internal const byte CMD_READ_SIGNATURE_BYTES = 0x73; + internal const byte CMD_RETURN_SUPPORTED_DEVICE_CODES = 0x74; + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/CheckBlockSupportRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/CheckBlockSupportRequest.cs new file mode 100644 index 0000000..8c9fd6b --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/CheckBlockSupportRequest.cs @@ -0,0 +1,13 @@ +namespace ArduinoUploader.Protocols.AVR109.Messages +{ + internal class CheckBlockSupportRequest : Request + { + internal CheckBlockSupportRequest() + { + Bytes = new[] + { + Constants.CMD_CHECK_BLOCK_SUPPORT + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/CheckBlockSupportResponse.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/CheckBlockSupportResponse.cs new file mode 100644 index 0000000..65bd019 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/CheckBlockSupportResponse.cs @@ -0,0 +1,8 @@ +namespace ArduinoUploader.Protocols.AVR109.Messages +{ + internal class CheckBlockSupportResponse : Response + { + internal bool HasBlockSupport { get { return Bytes[0] == (byte) 'Y'; } } + internal int BufferSize { get { return (Bytes[1] << 8) + Bytes[2]; } } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/EnterProgrammingModeRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/EnterProgrammingModeRequest.cs new file mode 100644 index 0000000..d9ce1b6 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/EnterProgrammingModeRequest.cs @@ -0,0 +1,13 @@ +namespace ArduinoUploader.Protocols.AVR109.Messages +{ + internal class EnterProgrammingModeRequest : Request + { + internal EnterProgrammingModeRequest() + { + Bytes = new[] + { + Constants.CMD_ENTER_PROGRAMMING_MODE + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ExitBootLoaderRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ExitBootLoaderRequest.cs new file mode 100644 index 0000000..7b89648 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ExitBootLoaderRequest.cs @@ -0,0 +1,13 @@ +namespace ArduinoUploader.Protocols.AVR109.Messages +{ + internal class ExitBootLoaderRequest : Request + { + internal ExitBootLoaderRequest() + { + Bytes = new[] + { + Constants.CMD_EXIT_BOOTLOADER + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/LeaveProgrammingModeRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/LeaveProgrammingModeRequest.cs new file mode 100644 index 0000000..82f5603 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/LeaveProgrammingModeRequest.cs @@ -0,0 +1,13 @@ +namespace ArduinoUploader.Protocols.AVR109.Messages +{ + internal class LeaveProgrammingModeRequest : Request + { + internal LeaveProgrammingModeRequest() + { + Bytes = new[] + { + Constants.CMD_LEAVE_PROGRAMMING_MODE + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReadSignatureBytesRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReadSignatureBytesRequest.cs new file mode 100644 index 0000000..e4157fb --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReadSignatureBytesRequest.cs @@ -0,0 +1,13 @@ +namespace ArduinoUploader.Protocols.AVR109.Messages +{ + internal class ReadSignatureBytesRequest : Request + { + internal ReadSignatureBytesRequest() + { + Bytes = new[] + { + Constants.CMD_READ_SIGNATURE_BYTES + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReadSignatureBytesResponse.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReadSignatureBytesResponse.cs new file mode 100644 index 0000000..ffb6dd0 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReadSignatureBytesResponse.cs @@ -0,0 +1,10 @@ +namespace ArduinoUploader.Protocols.AVR109.Messages +{ + internal class ReadSignatureBytesResponse : Response + { + internal byte[] Signature + { + get { return new[] { Bytes[2], Bytes[1], Bytes[0] }; } + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnProgrammerTypeRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnProgrammerTypeRequest.cs new file mode 100644 index 0000000..e73b612 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnProgrammerTypeRequest.cs @@ -0,0 +1,13 @@ +namespace ArduinoUploader.Protocols.AVR109.Messages +{ + internal class ReturnProgrammerTypeRequest : Request + { + internal ReturnProgrammerTypeRequest() + { + Bytes = new[] + { + Constants.CMD_RETURN_PROGRAMMER_TYPE + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnProgrammerTypeResponse.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnProgrammerTypeResponse.cs new file mode 100644 index 0000000..5ca3b6e --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnProgrammerTypeResponse.cs @@ -0,0 +1,7 @@ +namespace ArduinoUploader.Protocols.AVR109.Messages +{ + internal class ReturnProgrammerTypeResponse : Response + { + internal char ProgrammerType { get { return (char) Bytes[0]; } } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnSoftwareIdentifierRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnSoftwareIdentifierRequest.cs new file mode 100644 index 0000000..39f5fa7 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnSoftwareIdentifierRequest.cs @@ -0,0 +1,13 @@ +namespace ArduinoUploader.Protocols.AVR109.Messages +{ + internal class ReturnSoftwareIdentifierRequest : Request + { + internal ReturnSoftwareIdentifierRequest() + { + Bytes = new[] + { + Constants.CMD_RETURN_SOFTWARE_IDENTIFIER + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnSoftwareIdentifierResponse.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnSoftwareIdentifierResponse.cs new file mode 100644 index 0000000..bda55e1 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnSoftwareIdentifierResponse.cs @@ -0,0 +1,6 @@ +namespace ArduinoUploader.Protocols.AVR109.Messages +{ + internal class ReturnSoftwareIdentifierResponse : Response + { + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnSoftwareVersionRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnSoftwareVersionRequest.cs new file mode 100644 index 0000000..adb444c --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnSoftwareVersionRequest.cs @@ -0,0 +1,13 @@ +namespace ArduinoUploader.Protocols.AVR109.Messages +{ + internal class ReturnSoftwareVersionRequest : Request + { + internal ReturnSoftwareVersionRequest() + { + Bytes = new[] + { + Constants.CMD_RETURN_SOFTWARE_VERSION + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnSoftwareVersionResponse.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnSoftwareVersionResponse.cs new file mode 100644 index 0000000..efaff59 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnSoftwareVersionResponse.cs @@ -0,0 +1,8 @@ +namespace ArduinoUploader.Protocols.AVR109.Messages +{ + internal class ReturnSoftwareVersionResponse : Response + { + internal char MajorVersion { get { return (char) Bytes[0]; } } + internal char MinorVersion { get { return (char) Bytes[1]; } } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnSupportedDeviceCodesRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnSupportedDeviceCodesRequest.cs new file mode 100644 index 0000000..5e717b3 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/ReturnSupportedDeviceCodesRequest.cs @@ -0,0 +1,13 @@ +namespace ArduinoUploader.Protocols.AVR109.Messages +{ + internal class ReturnSupportedDeviceCodesRequest : Request + { + internal ReturnSupportedDeviceCodesRequest() + { + Bytes = new[] + { + Constants.CMD_RETURN_SUPPORTED_DEVICE_CODES + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/SelectDeviceTypeRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/SelectDeviceTypeRequest.cs new file mode 100644 index 0000000..2d36df3 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/SelectDeviceTypeRequest.cs @@ -0,0 +1,14 @@ +namespace ArduinoUploader.Protocols.AVR109.Messages +{ + internal class SelectDeviceTypeRequest : Request + { + internal SelectDeviceTypeRequest(byte deviceCode) + { + Bytes = new[] + { + Constants.CMD_SELECT_DEVICE_TYPE, + deviceCode + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/SetAddressRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/SetAddressRequest.cs new file mode 100644 index 0000000..a134386 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/SetAddressRequest.cs @@ -0,0 +1,15 @@ +namespace ArduinoUploader.Protocols.AVR109.Messages +{ + internal class SetAddressRequest : Request + { + internal SetAddressRequest(int offset) + { + Bytes = new[] + { + Constants.CMD_SET_ADDRESS, + (byte) ((offset >> 8) & 0xff), + (byte) (offset & 0xff) + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/StartBlockLoadRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/StartBlockLoadRequest.cs new file mode 100644 index 0000000..0f8f942 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/StartBlockLoadRequest.cs @@ -0,0 +1,18 @@ +using System; +using ArduinoUploader.Hardware.Memory; + +namespace ArduinoUploader.Protocols.AVR109.Messages +{ + internal class StartBlockLoadRequest : Request + { + internal StartBlockLoadRequest(MemoryType memType, int blockSize, byte[] bytes) + { + Bytes = new byte[blockSize + 4]; + Bytes[0] = Constants.CMD_START_BLOCK_LOAD; + Bytes[1] = (byte) (blockSize >> 8); + Bytes[2] = (byte) (blockSize & 0xff); + Bytes[3] = (byte) (memType == MemoryType.FLASH ? 'F' : 'E'); + Buffer.BlockCopy(bytes, 0, Bytes, 4, blockSize); + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/StartBlockReadRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/StartBlockReadRequest.cs new file mode 100644 index 0000000..210f368 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/StartBlockReadRequest.cs @@ -0,0 +1,18 @@ +using ArduinoUploader.Hardware.Memory; + +namespace ArduinoUploader.Protocols.AVR109.Messages +{ + internal class StartBlockReadRequest : Request + { + internal StartBlockReadRequest(MemoryType memType, int blockSize) + { + Bytes = new[] + { + Constants.CMD_START_BLOCK_READ, + (byte)(blockSize >> 8), + (byte)(blockSize & 0xff), + (byte)(memType == MemoryType.FLASH ? 'F' : 'E') + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/StartBlockReadResponse.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/StartBlockReadResponse.cs new file mode 100644 index 0000000..32ccd7e --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/AVR109/Messages/StartBlockReadResponse.cs @@ -0,0 +1,6 @@ +namespace ArduinoUploader.Protocols.AVR109.Messages +{ + internal class StartBlockReadResponse : Response + { + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/IMessage.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/IMessage.cs new file mode 100644 index 0000000..9f66719 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/IMessage.cs @@ -0,0 +1,7 @@ +namespace ArduinoUploader.Protocols +{ + internal interface IMessage + { + byte[] Bytes { get; set; } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/IRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/IRequest.cs new file mode 100644 index 0000000..583a3ba --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/IRequest.cs @@ -0,0 +1,6 @@ +namespace ArduinoUploader.Protocols +{ + internal interface IRequest : IMessage + { + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/Request.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/Request.cs new file mode 100644 index 0000000..de84f52 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/Request.cs @@ -0,0 +1,7 @@ +namespace ArduinoUploader.Protocols +{ + public abstract class Request : IRequest + { + public byte[] Bytes { get; set; } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/Response.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/Response.cs new file mode 100644 index 0000000..e8de209 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/Response.cs @@ -0,0 +1,7 @@ +namespace ArduinoUploader.Protocols +{ + internal abstract class Response : IRequest + { + public byte[] Bytes { get; set; } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Constants.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Constants.cs new file mode 100644 index 0000000..973015c --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Constants.cs @@ -0,0 +1,26 @@ +namespace ArduinoUploader.Protocols.STK500v1 +{ + internal static class Constants + { + internal const byte CMD_STK_GET_SYNC = 0x30; + internal const byte CMD_STK_GET_PARAMETER = 0x41; + internal const byte CMD_STK_SET_DEVICE = 0x42; + internal const byte CMD_STK_ENTER_PROGMODE = 0x50; + internal const byte CMD_STK_LEAVE_PROGMODE = 0x51; + internal const byte CMD_STK_LOAD_ADDRESS = 0x55; + internal const byte CMD_STK_PROG_PAGE = 0x64; + internal const byte CMD_STK_READ_PAGE = 0x74; + internal const byte CMD_STK_READ_SIGNATURE = 0x75; + + internal const byte SYNC_CRC_EOP = 0x20; + + internal const byte RESP_STK_OK = 0x10; + internal const byte RESP_STK_Failed = 0x11; + internal const byte RESP_STK_NODEVICE = 0x13; + internal const byte RESP_STK_INSYNC = 0x14; + internal const byte RESP_STK_NOSYNC = 0x15; + + internal const byte PARM_STK_SW_MAJOR = 0x81; + internal const byte PARM_STK_SW_MINOR = 0x82; + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/EnableProgrammingModeRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/EnableProgrammingModeRequest.cs new file mode 100644 index 0000000..5e3adb9 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/EnableProgrammingModeRequest.cs @@ -0,0 +1,14 @@ +namespace ArduinoUploader.Protocols.STK500v1.Messages +{ + internal class EnableProgrammingModeRequest : Request + { + internal EnableProgrammingModeRequest() + { + Bytes = new[] + { + Constants.CMD_STK_ENTER_PROGMODE, + Constants.SYNC_CRC_EOP + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/ExecuteProgramPageRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/ExecuteProgramPageRequest.cs new file mode 100644 index 0000000..4d01354 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/ExecuteProgramPageRequest.cs @@ -0,0 +1,22 @@ +using System; +using ArduinoUploader.Hardware.Memory; + +namespace ArduinoUploader.Protocols.STK500v1.Messages +{ + internal class ExecuteProgramPageRequest : Request + { + internal ExecuteProgramPageRequest(IMemory memory, byte[] bytesToCopy) + { + var size = bytesToCopy.Length; + Bytes = new byte[size + 5]; + var i = 0; + Bytes[i++] = Constants.CMD_STK_PROG_PAGE; + Bytes[i++] = (byte)((size >> 8) & 0xff); + Bytes[i++] = (byte)(size & 0xff); + Bytes[i++] = (byte) (memory.Type == MemoryType.EEPROM ? 'E' : 'F'); + Buffer.BlockCopy(bytesToCopy, 0, Bytes, i, size); + i += size; + Bytes[i] = Constants.SYNC_CRC_EOP; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/ExecuteReadPageRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/ExecuteReadPageRequest.cs new file mode 100644 index 0000000..7a6ca59 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/ExecuteReadPageRequest.cs @@ -0,0 +1,17 @@ +using ArduinoUploader.Hardware.Memory; + +namespace ArduinoUploader.Protocols.STK500v1.Messages +{ + internal class ExecuteReadPageRequest : Request + { + internal ExecuteReadPageRequest(MemoryType memType, int pageSize) + { + Bytes = new byte[5]; + Bytes[0] = Constants.CMD_STK_READ_PAGE; + Bytes[1] = (byte)((pageSize >> 8) & 0xff); + Bytes[2] = (byte)(pageSize & 0xff); + Bytes[3] = (byte)(memType == MemoryType.EEPROM ? 'E' : 'F'); + Bytes[4] = Constants.SYNC_CRC_EOP; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/GetParameterRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/GetParameterRequest.cs new file mode 100644 index 0000000..28a047a --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/GetParameterRequest.cs @@ -0,0 +1,15 @@ +namespace ArduinoUploader.Protocols.STK500v1.Messages +{ + internal class GetParameterRequest : Request + { + internal GetParameterRequest(byte param) + { + Bytes = new[] + { + Constants.CMD_STK_GET_PARAMETER, + param, + Constants.SYNC_CRC_EOP + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/GetSyncRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/GetSyncRequest.cs new file mode 100644 index 0000000..57c9c78 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/GetSyncRequest.cs @@ -0,0 +1,14 @@ +namespace ArduinoUploader.Protocols.STK500v1.Messages +{ + internal class GetSyncRequest : Request + { + internal GetSyncRequest() + { + Bytes = new[] + { + Constants.CMD_STK_GET_SYNC, + Constants.SYNC_CRC_EOP + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/GetSyncResponse.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/GetSyncResponse.cs new file mode 100644 index 0000000..13d7c10 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/GetSyncResponse.cs @@ -0,0 +1,10 @@ +namespace ArduinoUploader.Protocols.STK500v1.Messages +{ + internal class GetSyncResponse : Response + { + internal bool IsInSync + { + get { return Bytes.Length > 0 && Bytes[0] == Constants.RESP_STK_INSYNC; } + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/LeaveProgrammingModeRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/LeaveProgrammingModeRequest.cs new file mode 100644 index 0000000..a11689b --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/LeaveProgrammingModeRequest.cs @@ -0,0 +1,14 @@ +namespace ArduinoUploader.Protocols.STK500v1.Messages +{ + internal class LeaveProgrammingModeRequest : Request + { + internal LeaveProgrammingModeRequest() + { + Bytes = new[] + { + Constants.CMD_STK_LEAVE_PROGMODE, + Constants.SYNC_CRC_EOP + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/LoadAddressRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/LoadAddressRequest.cs new file mode 100644 index 0000000..6717d80 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/LoadAddressRequest.cs @@ -0,0 +1,16 @@ +namespace ArduinoUploader.Protocols.STK500v1.Messages +{ + internal class LoadAddressRequest : Request + { + internal LoadAddressRequest(int address) + { + Bytes = new[] + { + Constants.CMD_STK_LOAD_ADDRESS, + (byte)(address & 0xff), + (byte)((address >> 8) & 0xff), + Constants.SYNC_CRC_EOP + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/ReadSignatureRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/ReadSignatureRequest.cs new file mode 100644 index 0000000..f4926a9 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/ReadSignatureRequest.cs @@ -0,0 +1,14 @@ +namespace ArduinoUploader.Protocols.STK500v1.Messages +{ + internal class ReadSignatureRequest : Request + { + internal ReadSignatureRequest() + { + Bytes = new[] + { + Constants.CMD_STK_READ_SIGNATURE, + Constants.SYNC_CRC_EOP + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/ReadSignatureResponse.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/ReadSignatureResponse.cs new file mode 100644 index 0000000..125c60e --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/ReadSignatureResponse.cs @@ -0,0 +1,15 @@ +namespace ArduinoUploader.Protocols.STK500v1.Messages +{ + internal class ReadSignatureResponse : Response + { + internal bool IsCorrectResponse + { + get { return Bytes.Length == 4 && Bytes[3] == Constants.RESP_STK_OK; } + } + + internal byte[] Signature + { + get { return new[] { Bytes[0], Bytes[1], Bytes[2] }; } + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/SetDeviceProgrammingParametersRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/SetDeviceProgrammingParametersRequest.cs new file mode 100644 index 0000000..ce593f4 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v1/Messages/SetDeviceProgrammingParametersRequest.cs @@ -0,0 +1,40 @@ +using ArduinoUploader.Hardware; + +namespace ArduinoUploader.Protocols.STK500v1.Messages +{ + internal class SetDeviceProgrammingParametersRequest : Request + { + internal SetDeviceProgrammingParametersRequest(IMCU mcu) + { + var flashMem = mcu.Flash; + var eepromMem = mcu.EEPROM; + var flashPageSize = flashMem.PageSize; + var flashSize = flashMem.Size; + var epromSize = eepromMem.Size; + + Bytes = new byte[22]; + Bytes[0] = Constants.CMD_STK_SET_DEVICE; + Bytes[1] = mcu.DeviceCode; + Bytes[2] = mcu.DeviceRevision; + Bytes[3] = mcu.ProgType; + Bytes[4] = mcu.ParallelMode; + Bytes[5] = mcu.Polling; + Bytes[6] = mcu.SelfTimed; + Bytes[7] = mcu.LockBytes; + Bytes[8] = mcu.FuseBytes; + Bytes[9] = flashMem.PollVal1; + Bytes[10] = flashMem.PollVal2; + Bytes[11] = eepromMem.PollVal1; + Bytes[12] = eepromMem.PollVal2; + Bytes[13] = (byte) ((flashPageSize >> 8) & 0x00ff); + Bytes[14] = (byte) (flashPageSize & 0x00ff); + Bytes[15] = (byte) ((epromSize >> 8) & 0x00ff); + Bytes[16] = (byte) (epromSize & 0x00ff); + Bytes[17] = (byte) ((flashSize >> 24) & 0xff); + Bytes[18] = (byte) ((flashSize >> 16) & 0xff); + Bytes[19] = (byte) ((flashSize >> 8) & 0xff); + Bytes[20] = (byte) (flashSize & 0xff); + Bytes[21] = Constants.SYNC_CRC_EOP; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Constants.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Constants.cs new file mode 100644 index 0000000..0e65c58 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Constants.cs @@ -0,0 +1,24 @@ +namespace ArduinoUploader.Protocols.STK500v2 +{ + internal static class Constants + { + internal const byte CMD_SIGN_ON = 0x01; + internal const byte CMD_GET_PARAMETER = 0x03; + internal const byte CMD_LOAD_ADDRESS = 0x06; + internal const byte CMD_ENTER_PROGRMODE_ISP = 0x10; + internal const byte CMD_LEAVE_PROGMODE_ISP = 0x11; + internal const byte CMD_PROGRAM_FLASH_ISP = 0x13; + internal const byte CMD_READ_FLASH_ISP = 0x14; + internal const byte CMD_PROGRAM_EEPROM_ISP = 0x15; + internal const byte CMD_READ_EEPROM_ISP = 0x16; + + internal const byte STATUS_CMD_OK = 0x00; + + internal const byte MESSAGE_START = 0x1b; + internal const byte TOKEN = 0x0e; + + internal const byte PARAM_HW_VER = 0x90; + internal const byte PARAM_SW_MAJOR = 0x91; + internal const byte PARAM_SW_MINOR = 0x92; + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/EnableProgrammingModeRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/EnableProgrammingModeRequest.cs new file mode 100644 index 0000000..5ff7bd0 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/EnableProgrammingModeRequest.cs @@ -0,0 +1,27 @@ +using ArduinoUploader.Hardware; + +namespace ArduinoUploader.Protocols.STK500v2.Messages +{ + internal class EnableProgrammingModeRequest : Request + { + internal EnableProgrammingModeRequest(IMCU mcu) + { + var cmdBytes = mcu.CommandBytes[Command.PGM_ENABLE]; + Bytes = new[] + { + Constants.CMD_ENTER_PROGRMODE_ISP, + mcu.Timeout, + mcu.StabDelay, + mcu.CmdExeDelay, + mcu.SynchLoops, + mcu.ByteDelay, + mcu.PollValue, + mcu.PollIndex, + cmdBytes[0], + cmdBytes[1], + cmdBytes[2], + cmdBytes[3] + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/EnableProgrammingModeResponse.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/EnableProgrammingModeResponse.cs new file mode 100644 index 0000000..c8e168c --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/EnableProgrammingModeResponse.cs @@ -0,0 +1,6 @@ +namespace ArduinoUploader.Protocols.STK500v2.Messages +{ + internal class EnableProgrammingModeResponse : Response + { + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/ExecuteProgramPageRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/ExecuteProgramPageRequest.cs new file mode 100644 index 0000000..92a108c --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/ExecuteProgramPageRequest.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using System.Linq; +using ArduinoUploader.Hardware.Memory; + +namespace ArduinoUploader.Protocols.STK500v2.Messages +{ + internal class ExecuteProgramPageRequest : Request + { + internal ExecuteProgramPageRequest(byte writeCmd, IMemory memory, IReadOnlyCollection data) + { + var len = data.Count; + const byte mode = 0xc1; + var headerBytes = new[] + { + writeCmd, + (byte) (len >> 8), + (byte) (len & 0xff), + mode, + memory.Delay, + memory.CmdBytesWrite[0], + memory.CmdBytesWrite[1], + memory.CmdBytesWrite[2], + memory.PollVal1, + memory.PollVal2 + }; + Bytes = headerBytes.Concat(data).ToArray(); + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/ExecuteProgramPageResponse.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/ExecuteProgramPageResponse.cs new file mode 100644 index 0000000..cb57ea3 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/ExecuteProgramPageResponse.cs @@ -0,0 +1,8 @@ +namespace ArduinoUploader.Protocols.STK500v2.Messages +{ + internal class ExecuteProgramPageResponse : Response + { + internal byte AnswerID { get { return Bytes[0]; } } + internal byte Status { get { return Bytes[1]; } } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/ExecuteReadPageRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/ExecuteReadPageRequest.cs new file mode 100644 index 0000000..53ca871 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/ExecuteReadPageRequest.cs @@ -0,0 +1,20 @@ +using ArduinoUploader.Hardware.Memory; + +namespace ArduinoUploader.Protocols.STK500v2.Messages +{ + internal class ExecuteReadPageRequest : Request + { + internal ExecuteReadPageRequest(byte readCmd, IMemory memory) + { + var pageSize = memory.PageSize; + var cmdByte = memory.CmdBytesRead[0]; + Bytes = new[] + { + readCmd, + (byte)(pageSize >> 8), + (byte)(pageSize & 0xff), + cmdByte + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/ExecuteReadPageResponse.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/ExecuteReadPageResponse.cs new file mode 100644 index 0000000..c4b660b --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/ExecuteReadPageResponse.cs @@ -0,0 +1,8 @@ +namespace ArduinoUploader.Protocols.STK500v2.Messages +{ + internal class ExecuteReadPageResponse : Response + { + internal byte AnswerID { get { return Bytes[0]; } } + internal byte Status { get { return Bytes[1]; } } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/GetParameterRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/GetParameterRequest.cs new file mode 100644 index 0000000..2b9bfc3 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/GetParameterRequest.cs @@ -0,0 +1,14 @@ +namespace ArduinoUploader.Protocols.STK500v2.Messages +{ + internal class GetParameterRequest : Request + { + internal GetParameterRequest(byte param) + { + Bytes = new[] + { + Constants.CMD_GET_PARAMETER, + param + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/GetParameterResponse.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/GetParameterResponse.cs new file mode 100644 index 0000000..69153c9 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/GetParameterResponse.cs @@ -0,0 +1,19 @@ +namespace ArduinoUploader.Protocols.STK500v2.Messages +{ + internal class GetParameterResponse : Response + { + internal bool IsSuccess + { + get + { + return Bytes.Length > 2 && Bytes[0] == Constants.CMD_GET_PARAMETER + && Bytes[1] == Constants.STATUS_CMD_OK; + } + } + + internal byte ParameterValue + { + get { return Bytes[2]; } + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/GetSyncRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/GetSyncRequest.cs new file mode 100644 index 0000000..cb8be08 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/GetSyncRequest.cs @@ -0,0 +1,13 @@ +namespace ArduinoUploader.Protocols.STK500v2.Messages +{ + internal class GetSyncRequest : Request + { + internal GetSyncRequest() + { + Bytes = new[] + { + Constants.CMD_SIGN_ON + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/GetSyncResponse.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/GetSyncResponse.cs new file mode 100644 index 0000000..1e5a667 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/GetSyncResponse.cs @@ -0,0 +1,29 @@ +using System; +using System.Text; + +namespace ArduinoUploader.Protocols.STK500v2.Messages +{ + internal class GetSyncResponse : Response + { + internal bool IsInSync + { + get + { + return Bytes.Length > 1 + && Bytes[0] == Constants.CMD_SIGN_ON + && Bytes[1] == Constants.STATUS_CMD_OK; + } + } + + internal string Signature + { + get + { + var signatureLength = Bytes[2]; + var signature = new byte[signatureLength]; + Buffer.BlockCopy(Bytes, 3, signature, 0, signatureLength); + return Encoding.ASCII.GetString(signature); + } + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/LeaveProgrammingModeRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/LeaveProgrammingModeRequest.cs new file mode 100644 index 0000000..a9f3440 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/LeaveProgrammingModeRequest.cs @@ -0,0 +1,15 @@ +namespace ArduinoUploader.Protocols.STK500v2.Messages +{ + internal class LeaveProgrammingModeRequest : Request + { + internal LeaveProgrammingModeRequest() + { + Bytes = new[] + { + Constants.CMD_LEAVE_PROGMODE_ISP, + (byte) 0x01, + (byte) 0x01 + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/LeaveProgrammingModeResponse.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/LeaveProgrammingModeResponse.cs new file mode 100644 index 0000000..bcb8f6e --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/LeaveProgrammingModeResponse.cs @@ -0,0 +1,16 @@ +namespace ArduinoUploader.Protocols.STK500v2.Messages +{ + internal class LeaveProgrammingModeResponse : Response + { + internal bool Success + { + get + { + + return Bytes.Length == 2 + && Bytes[0] == Constants.CMD_LEAVE_PROGMODE_ISP + && Bytes[1] == Constants.STATUS_CMD_OK; + } + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/LoadAddressRequest.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/LoadAddressRequest.cs new file mode 100644 index 0000000..4d249aa --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/LoadAddressRequest.cs @@ -0,0 +1,20 @@ +using ArduinoUploader.Hardware.Memory; + +namespace ArduinoUploader.Protocols.STK500v2.Messages +{ + internal class LoadAddressRequest : Request + { + internal LoadAddressRequest(IMemory memory, int addr) + { + var modifier = memory.Type == MemoryType.FLASH ? 0x80 : 0x00; + Bytes = new[] + { + Constants.CMD_LOAD_ADDRESS, + (byte)(((addr >> 24) & 0xff) | modifier), + (byte)((addr >> 16) & 0xff), + (byte)((addr >> 8) & 0xff), + (byte)(addr & 0xff) + }; + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/LoadAddressResponse.cs b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/LoadAddressResponse.cs new file mode 100644 index 0000000..ff96c59 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/Protocols/STK500v2/Messages/LoadAddressResponse.cs @@ -0,0 +1,15 @@ +namespace ArduinoUploader.Protocols.STK500v2.Messages +{ + internal class LoadAddressResponse : Response + { + internal bool Succeeded + { + get + { + return Bytes.Length == 2 + && Bytes[0] == Constants.CMD_LOAD_ADDRESS + && Bytes[1] == Constants.STATUS_CMD_OK; + } + } + } +} diff --git a/AmiiBomb/Class/ArduinoUploader/UploaderLogger.cs b/AmiiBomb/Class/ArduinoUploader/UploaderLogger.cs new file mode 100644 index 0000000..7831844 --- /dev/null +++ b/AmiiBomb/Class/ArduinoUploader/UploaderLogger.cs @@ -0,0 +1,16 @@ +using System; +using NLog; + +namespace ArduinoUploader +{ + internal class UploaderLogger + { + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); + + internal static void LogErrorAndQuit(string errorMessage) + { + logger.Error(errorMessage); + throw new Exception(errorMessage); + } + } +} diff --git a/AmiiBomb/Class/Arduino_Class.cs b/AmiiBomb/Class/Arduino_Class.cs new file mode 100644 index 0000000..ae86a08 --- /dev/null +++ b/AmiiBomb/Class/Arduino_Class.cs @@ -0,0 +1,62 @@ +using System; +using System.Diagnostics; +using System.IO.Ports; + +namespace AmiiBomb +{ + public class Arduino_Class + { + public SerialPort Serial; + bool Reading_Ended = false; + string Result = ""; + private I18n i18n = I18n.Instance; + + public Arduino_Class(string COM_Port, string BaudRate) + { + Serial = new SerialPort(COM_Port, int.Parse(BaudRate), Parity.None, 8, StopBits.One); + + if (Serial.IsOpen != true) + { + Serial.DataReceived += new SerialDataReceivedEventHandler(Arduino_DataReceived); + Serial.Open(); + } + else throw new Exception(i18n.__("NFC_No_Com_Port")); + } + + public string SendCommand(object Message) + { + Reading_Ended = false; + + if (Message is string) Serial.Write((string)Message + "\n"); + else if (Message is byte[]) Serial.Write((byte[])Message, 0, ((byte[])Message).Length); + + + var sw = Stopwatch.StartNew(); + while (!Reading_Ended) + { + if (sw.ElapsedMilliseconds > 3000) + { + sw.Stop(); + Result = "TIMEOUT"; + Reading_Ended = true; + } + } + + return Result; + } + + void Arduino_DataReceived(object sender, SerialDataReceivedEventArgs e) + { + Result = Serial.ReadTo("\x03").Substring(1); + + Console.WriteLine(i18n.__("NFC_Serial_Response") + Result); + + Reading_Ended = true; + } + + public void Close() + { + Serial.Close(); + } + } +} diff --git a/AmiiBomb/Class/COM_Class.cs b/AmiiBomb/Class/COM_Class.cs new file mode 100644 index 0000000..778898b --- /dev/null +++ b/AmiiBomb/Class/COM_Class.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.Management; + +namespace AmiiBomb +{ + internal class ProcessConnection + { + + public static ConnectionOptions ProcessConnectionOptions() + { + ConnectionOptions options = new ConnectionOptions(); + options.Impersonation = ImpersonationLevel.Impersonate; + options.Authentication = AuthenticationLevel.Default; + options.EnablePrivileges = true; + return options; + } + + public static ManagementScope ConnectionScope(string machineName, ConnectionOptions options, string path) + { + ManagementScope connectScope = new ManagementScope(); + connectScope.Path = new ManagementPath(@"\\" + machineName + path); + connectScope.Options = options; + connectScope.Connect(); + return connectScope; + } + } + + public class COMPortInfo + { + public string Name { get; set; } + public string Description { get; set; } + + public COMPortInfo() { } + + public static List GetCOMPortsInfo() + { + List comPortInfoList = new List(); + + ConnectionOptions options = ProcessConnection.ProcessConnectionOptions(); + ManagementScope connectionScope = ProcessConnection.ConnectionScope(Environment.MachineName, options, @"\root\CIMV2"); + + ObjectQuery objectQuery = new ObjectQuery("SELECT * FROM Win32_PnPEntity WHERE ConfigManagerErrorCode = 0"); + ManagementObjectSearcher comPortSearcher = new ManagementObjectSearcher(connectionScope, objectQuery); + + using (comPortSearcher) + { + string caption = null; + foreach (ManagementObject obj in comPortSearcher.Get()) + { + if (obj != null) + { + object captionObj = obj["Caption"]; + if (captionObj != null) + { + caption = captionObj.ToString(); + if (caption.Contains("(COM")) + { + COMPortInfo comPortInfo = new COMPortInfo(); + comPortInfo.Name = caption.Substring(caption.LastIndexOf("(COM")).Replace("(", string.Empty).Replace(")", string.Empty); + comPortInfo.Description = caption; + comPortInfoList.Add(comPortInfo); + } + } + } + } + } + return comPortInfoList; + } + } +} diff --git a/AmiiBomb/Class/Config_Class.cs b/AmiiBomb/Class/Config_Class.cs new file mode 100644 index 0000000..eaefca1 --- /dev/null +++ b/AmiiBomb/Class/Config_Class.cs @@ -0,0 +1,10 @@ +namespace AmiiBomb +{ + class Config_Class + { + public string Bin_Folder_Path { get; set; } + public string KeyFile_Path { get; set; } + public string Locale { get; set; } + public bool Cache { get; set; } + } +} diff --git a/AmiiBomb/Class/CountryCode_Class.cs b/AmiiBomb/Class/CountryCode_Class.cs new file mode 100644 index 0000000..822b845 --- /dev/null +++ b/AmiiBomb/Class/CountryCode_Class.cs @@ -0,0 +1,153 @@ +using System.Collections.Generic; + +namespace AmiiBomb +{ + //http://wiibrew.org/wiki/Country_Codes + class CountryCode_Class + { + private static Dictionary Country_Dictionary = new Dictionary + { + //Japan: + { 1, "Japan" }, + + //Americas: + { 8, "Anguilla" }, + { 9, "Antigua and Barbuda" }, + { 10, "Argentina" }, + { 11, "Aruba" }, + { 12, "Bahamas" }, + { 13, "Barbados" }, + { 14, "Belize" }, + { 15, "Bolivia" }, + { 16, "Brazil" }, + { 17, "British Virgin Islands" }, + { 18, "Canada" }, + { 19, "Cayman Islands" }, + { 20, "Chile" }, + { 21, "Colombia" }, + { 22, "Costa Rica" }, + { 23, "Dominica" }, + { 24, "Dominican Republic" }, + { 25, "Ecuador" }, + { 26, "El Salvador" }, + { 27, "French Guiana" }, + { 28, "Grenada" }, + { 29, "Guadeloupe" }, + { 30, "Guatemala" }, + { 31, "Guyana" }, + { 32, "Haiti" }, + { 33, "Honduras" }, + { 34, "Jamaica" }, + { 35, "Martinique" }, + { 36, "Mexico" }, + { 37, "Monsterrat" }, + { 38, "Netherlands Antilles" }, + { 39, "Nicaragua" }, + { 40, "Panama" }, + { 41, "Paraguay" }, + { 42, "Peru" }, + { 43, "St. Kitts and Nevis" }, + { 44, "St. Lucia" }, + { 45, "St. Vincent and the Grenadines" }, + { 46, "Suriname" }, + { 47, "Trinidad and Tobago" }, + { 48, "Turks and Caicos Islands" }, + { 49, "United States" }, + { 50, "Uruguay" }, + { 51, "US Virgin Islands" }, + { 52, "Venezuela" }, + + //Europe: + { 64, "Albania" }, + { 65, "Australia" }, + { 66, "Austria" }, + { 67, "Belgium" }, + { 68, "Bosnia and Herzegovina" }, + { 69, "Botswana" }, + { 70, "Bulgaria" }, + { 71, "Croatia" }, + { 72, "Cyprus" }, + { 73, "Czech Republic" }, + { 74, "Denmark" }, + { 75, "Estonia" }, + { 76, "Finland" }, + { 77, "France" }, + { 78, "Germany" }, + { 79, "Greece" }, + { 80, "Hungary" }, + { 81, "Iceland" }, + { 82, "Ireland" }, + { 83, "Italy" }, + { 84, "Latvia" }, + { 85, "Lesotho" }, + { 86, "Lichtenstein" }, + { 87, "Lithuania" }, + { 88, "Luxembourg" }, + { 89, "F.Y.R of Macedonia" }, + { 90, "Malta" }, + { 91, "Montenegro" }, + { 92, "Mozambique" }, + { 93, "Namibia" }, + { 94, "Netherlands" }, + { 95, "New Zealand" }, + { 96, "Norway" }, + { 97, "Poland" }, + { 98, "Portugal" }, + { 99, "Romania" }, + { 100, "Russia" }, + { 101, "Serbia" }, + { 102, "Slovakia" }, + { 103, "Slovenia" }, + { 104, "South Africa" }, + { 105, "Spain" }, + { 106, "Swaziland" }, + { 107, "Sweden" }, + { 108, "Switzerland" }, + { 109, "Turkey" }, + { 110, "United Kingdom" }, + { 111, "Zambia" }, + { 112, "Zimbabwe" }, + { 113, "Azerbaijan" }, + { 114, "Mauritania (Islamic Republic of Mauritania)" }, + { 115, "Mali (Republic of Mali)" }, + { 116, "Niger (Republic of Niger)" }, + { 117, "Chad (Republic of Chad)" }, + { 118, "Sudan (Republic of the Sudan)" }, + { 119, "Eritrea (State of Eritrea)" }, + { 120, "Dijibouti (Republic of Djibouti)" }, + { 121, "Somalia (Somali Republic)" }, + { 128, "Taiwan" }, + + //Southeast Asia: + { 136, "South Korea" }, + { 144, "Hong Kong" }, + { 145, "Macao" }, + { 152, "Indonesia" }, + { 153, "Singapore" }, + { 154, "Thailand" }, + { 155, "Philippines" }, + { 156, "Malaysia" }, + { 160, "China" }, + + //Middle East: + { 168, "U.A.E." }, + { 169, "India" }, + { 170, "Egypt" }, + { 171, "Oman" }, + { 172, "Qatar" }, + { 173, "Kuwait" }, + { 174, "Saudi Arabia" }, + { 175, "Syria" }, + { 176, "Bahrain" }, + { 177, "Jordan" } + }; + + public static string Get_Country_Name(int ID) + { + string Name; + if (Country_Dictionary.TryGetValue(ID, out Name)) return Name; + + return "Unknown ID: " + ID.ToString(); + } + } +} diff --git a/AmiiBomb/Class/Helper_Class.cs b/AmiiBomb/Class/Helper_Class.cs new file mode 100644 index 0000000..8e2700b --- /dev/null +++ b/AmiiBomb/Class/Helper_Class.cs @@ -0,0 +1,146 @@ +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using System.Net; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; +using System.Windows.Forms; + +namespace AmiiBomb +{ + class Helper_Class + { + [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool FlashWindowEx(ref FLASHWINFO pwfi); + + [StructLayout(LayoutKind.Sequential)] + public struct FLASHWINFO + { + public UInt32 cbSize; + public IntPtr hwnd; + public UInt32 dwFlags; + public UInt32 uCount; + public UInt32 dwTimeout; + } + + public static bool FlashWindowEx(Form form) + { + IntPtr hWnd = form.Handle; + FLASHWINFO fInfo = new FLASHWINFO(); + + fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo)); + fInfo.hwnd = hWnd; + fInfo.dwFlags = 3 | 12; + fInfo.uCount = UInt32.MaxValue; + fInfo.dwTimeout = 0; + + return FlashWindowEx(ref fInfo); + } + public static byte[] String_To_Byte_Array(string Hex) + { + return Enumerable.Range(0, Hex.Length) + .Where(x => x % 2 == 0) + .Select(x => Convert.ToByte(Hex.Substring(x, 2), 16)) + .ToArray(); + } + + public static string Clean_NewLine_Spaces(string String) + { + return new Regex("[ ]{2,}").Replace(String.Trim().Replace("\r\n", "").Replace("\n", "").Replace("\r", ""), " "); + } + + public static string Get_Source_From_Url(string Url) + { + try + { + WebClient Client = new WebClient(); + StreamReader PageReader = new StreamReader(Client.OpenRead(Url), Encoding.UTF8, true); + + return PageReader.ReadToEnd(); + } + catch (WebException) + { + return ""; + } + } + + public static UInt16 swapOctetsUInt16(UInt16 toSwap) + { + Int32 tmp = 0; + tmp = toSwap >> 8; + tmp = tmp | ((toSwap & 0xff) << 8); + return (UInt16)tmp; + } + + public static string SHA1_File(byte[] Data) + { + return BitConverter.ToString(new SHA1CryptoServiceProvider().ComputeHash(Data)).Replace("-", ""); + } + + public static bool ValidSHA1(byte[] Data, string Hash) + { + if (SHA1_File(Data) == Hash) + return true; + else + return false; + } + + public static Image DropShadow(Image Picture) + { + Bitmap shadow = (Bitmap)Picture.Clone(); + + for (int y = 0; y < shadow.Height; y++) + { + + for (int x = 0; x < shadow.Width; x++) + { + var color = shadow.GetPixel(x, y); + + color = Color.FromArgb((int)((double)color.A * 0.1), 0, 0, 0); + + shadow.SetPixel(x, y, color); + + } + } + + var finalComposite = new Bitmap(Picture.Width + 50, Picture.Height, PixelFormat.Format32bppArgb); + + using (Graphics g = Graphics.FromImage(finalComposite)) + { + g.Transform = new Matrix(new Rectangle(0, 0, shadow.Width, shadow.Height), new Point[]{ + new Point(50,20), + new Point(shadow.Width+50, 20), + new Point(0, shadow.Height) + }); + + g.DrawImageUnscaled(shadow, new Point(0, 0)); + + g.ResetTransform(); + g.DrawImageUnscaled(Picture, new Point(0, 0)); + + return finalComposite; + } + } + + public static void DoubleBuffered(Control control, bool enable) + { + var doubleBufferPropertyInfo = control.GetType().GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic); + doubleBufferPropertyInfo.SetValue(control, enable, null); + } + + public static string FirstLetterToUpperCase(string s) + { + if (string.IsNullOrEmpty(s)) + throw new ArgumentException("There is no first letter"); + + char[] a = s.ToCharArray(); + a[0] = char.ToUpper(a[0]); + return new string(a); + } + } +} diff --git a/AmiiBomb/Class/I18n_Class.cs b/AmiiBomb/Class/I18n_Class.cs new file mode 100644 index 0000000..e59a65e --- /dev/null +++ b/AmiiBomb/Class/I18n_Class.cs @@ -0,0 +1,194 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Linq; + +namespace AmiiBomb +{ + //https://github.com/MoonGateLabs/i18n-unity-csharp + + public sealed class I18n + { + private static JSONNode config = null; + private static JSONNode config_base = null; + + private static readonly I18n instance = new I18n(); + + //private static string[] locales = new string[] { "en-US", "fr-FR" }; + + private static string _currentLocale = "en-US"; + + private static string _localePath = "lang/"; + + private static bool _isLoggingMissing = true; + + static I18n() + { + + } + + private I18n() + { + } + + public static I18n Instance + { + get + { + return instance; + } + } + + static void InitConfig() + { + //if (locales.Contains(_currentLocale)) + //{ + string localConfigPath = _localePath + _currentLocale; + config = JSON.Parse(File.ReadAllText(localConfigPath + ".lang")); + config_base = JSON.Parse(File.ReadAllText(_localePath + "en-US.lang")); + //} + //else if (_isLoggingMissing) + //{ + //Console.WriteLine("Missing: locale [" + _currentLocale + "] not found in supported list"); + //} + } + + public static string GetLocale() + { + return _currentLocale; + } + + public static void SetLocale(string newLocale = null) + { + if (newLocale != null) + { + _currentLocale = newLocale; + InitConfig(); + } + } + + public static void SetPath(string localePath = null) + { + if (localePath != null) + { + _localePath = localePath; + InitConfig(); + } + } + + public static void Configure(string localePath = null, string newLocale = null, bool logMissing = true) + { + _isLoggingMissing = logMissing; + SetPath(localePath); + SetLocale(newLocale); + InitConfig(); + } + + public string __(string key, params object[] args) + { + if (config == null) + { + InitConfig(); + } + string translation = key; + if (config[key] != null) + { + // if this key is a direct string + if (config[key].Count == 0) + { + translation = config[key]; + } + else + { + translation = FindSingularOrPlural(key, args); + } + // check if we have embeddable data + if (args.Length > 0) + { + translation = string.Format(translation, args); + } + } + else if (_isLoggingMissing) + { + Console.WriteLine("Missing translation for:" + key); + if (config_base[key].Count == 0) + { + translation = config_base[key]; + } + else + { + translation = FindSingularOrPlural(key, args); + } + // check if we have embeddable data + if (args.Length > 0) + { + translation = string.Format(translation, args); + } + } + return translation; + } + + string FindSingularOrPlural(string key, object[] args) + { + JSONClass translationOptions = config[key].AsObject; + string translation = key; + string singPlurKey; + // find format to try to use + switch (GetCountAmount(args)) + { + case 0: + singPlurKey = "zero"; + break; + case 1: + singPlurKey = "one"; + break; + default: + singPlurKey = "other"; + break; + } + // try to use this plural/singular key + if (translationOptions[singPlurKey] != null) + { + translation = translationOptions[singPlurKey]; + } + else if (_isLoggingMissing) + { + Console.WriteLine("Missing singPlurKey:" + singPlurKey + " for:" + key); + } + return translation; + } + + int GetCountAmount(object[] args) + { + int argOne = 0; + // if arguments passed, try to parse first one to use as count + if (args.Length > 0 && IsNumeric(args[0])) + { + argOne = Math.Abs(Convert.ToInt32(args[0])); + if (argOne == 1 && Math.Abs(Convert.ToDouble(args[0])) != 1) + { + // check if arg actually equals one + argOne = 2; + } + else if (argOne == 0 && Math.Abs(Convert.ToDouble(args[0])) != 0) + { + // check if arg actually equals one + argOne = 2; + } + } + return argOne; + } + + bool IsNumeric(System.Object Expression) + { + if (Expression == null || Expression is DateTime) + return false; + + if (Expression is Int16 || Expression is Int32 || Expression is Int64 || Expression is Decimal || Expression is Single || Expression is Double || Expression is Boolean) + return true; + + return false; + } + + } +} diff --git a/AmiiBomb/Class/NLog_Class.cs b/AmiiBomb/Class/NLog_Class.cs new file mode 100644 index 0000000..79f16a2 --- /dev/null +++ b/AmiiBomb/Class/NLog_Class.cs @@ -0,0 +1,35 @@ +using NLog; +using NLog.Config; +using NLog.Targets; +using System; +using System.Windows.Forms; + +namespace AmiiBomb +{ + [Target("TextBox")] + public sealed class TextBoxTarget : TargetWithLayout + { + public TextBoxTarget() + { + this.Host = "localhost"; + } + + [RequiredParameter] + public string Host { get; set; } + + public TextBox TextBox_Console { get; set; } + + protected override void Write(LogEventInfo logEvent) + { + string logMessage = this.Layout.Render(logEvent); + + SendTheMessageToRemoteHost(this.Host, logMessage); + } + + private void SendTheMessageToRemoteHost(string host, string message) + { + TextBox_Console.Invoke(new Action(() => TextBox_Console.AppendText("> " + message + Environment.NewLine))); + } + } + +} diff --git a/AmiiBomb/Class/SimpleJSON_Class.cs b/AmiiBomb/Class/SimpleJSON_Class.cs new file mode 100644 index 0000000..f940a0c --- /dev/null +++ b/AmiiBomb/Class/SimpleJSON_Class.cs @@ -0,0 +1,1320 @@ +//#define USE_SharpZipLib +#if !UNITY_WEBPLAYER +#define USE_FileIO +#endif +/* * * * * + * A simple JSON Parser / builder + * ------------------------------ + * + * It mainly has been written as a simple JSON parser. It can build a JSON string + * from the node-tree, or generate a node tree from any valid JSON string. + * + * If you want to use compression when saving to file / stream / B64 you have to include + * SharpZipLib ( http://www.icsharpcode.net/opensource/sharpziplib/ ) in your project and + * define "USE_SharpZipLib" at the top of the file + * + * Written by Bunny83 + * 2012-06-09 + * + * Modified by oPless, 2014-09-21 to round-trip properly + * + * Features / attributes: + * - provides strongly typed node classes and lists / dictionaries + * - provides easy access to class members / array items / data values + * - the parser ignores data types. Each value is a string. + * - only double quotes (") are used for quoting strings. + * - values and names are not restricted to quoted strings. They simply add up and are trimmed. + * - There are only 3 types: arrays(JSONArray), objects(JSONClass) and values(JSONData) + * - provides "casting" properties to easily convert to / from those types: + * int / float / double / bool + * - provides a common interface for each node so no explicit casting is required. + * - the parser try to avoid errors, but if malformed JSON is parsed the result is undefined + * + * + * 2012-12-17 Update: + * - Added internal JSONLazyCreator class which simplifies the construction of a JSON tree + * Now you can simple reference any item that doesn't exist yet and it will return a JSONLazyCreator + * The class determines the required type by it's further use, creates the type and removes itself. + * - Added binary serialization / deserialization. + * - Added support for BZip2 zipped binary format. Requires the SharpZipLib ( http://www.icsharpcode.net/opensource/sharpziplib/ ) + * The usage of the SharpZipLib library can be disabled by removing or commenting out the USE_SharpZipLib define at the top + * - The serializer uses different types when it comes to store the values. Since my data values + * are all of type string, the serializer will "try" which format fits best. The order is: int, float, double, bool, string. + * It's not the most efficient way but for a moderate amount of data it should work on all platforms. + * + * * * * */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; + + +namespace AmiiBomb +{ + public enum JSONBinaryTag + { + Array = 1, + Class = 2, + Value = 3, + IntValue = 4, + DoubleValue = 5, + BoolValue = 6, + FloatValue = 7, + } + + public abstract class JSONNode + { + #region common interface + + public virtual void Add(string aKey, JSONNode aItem) + { + } + + public virtual JSONNode this[int aIndex] { get { return null; } set { } } + + public virtual JSONNode this[string aKey] { get { return null; } set { } } + + public virtual string Value { get { return ""; } set { } } + + public virtual int Count { get { return 0; } } + + public virtual void Add(JSONNode aItem) + { + Add("", aItem); + } + + public virtual JSONNode Remove(string aKey) + { + return null; + } + + public virtual JSONNode Remove(int aIndex) + { + return null; + } + + public virtual JSONNode Remove(JSONNode aNode) + { + return aNode; + } + + public virtual IEnumerable Children + { + get + { + yield break; + } + } + + public IEnumerable DeepChildren + { + get + { + foreach (var C in Children) + foreach (var D in C.DeepChildren) + yield return D; + } + } + + public override string ToString() + { + return "JSONNode"; + } + + public virtual string ToString(string aPrefix) + { + return "JSONNode"; + } + + public abstract string ToJSON(int prefix); + + #endregion common interface + + #region typecasting properties + + public virtual JSONBinaryTag Tag { get; set; } + + public virtual int AsInt + { + get + { + int v = 0; + if (int.TryParse(Value, out v)) + return v; + return 0; + } + set + { + Value = value.ToString(); + Tag = JSONBinaryTag.IntValue; + } + } + + public virtual float AsFloat + { + get + { + float v = 0.0f; + if (float.TryParse(Value, out v)) + return v; + return 0.0f; + } + set + { + Value = value.ToString(); + Tag = JSONBinaryTag.FloatValue; + } + } + + public virtual double AsDouble + { + get + { + double v = 0.0; + if (double.TryParse(Value, out v)) + return v; + return 0.0; + } + set + { + Value = value.ToString(); + Tag = JSONBinaryTag.DoubleValue; + + } + } + + public virtual bool AsBool + { + get + { + bool v = false; + if (bool.TryParse(Value, out v)) + return v; + return !string.IsNullOrEmpty(Value); + } + set + { + Value = (value) ? "true" : "false"; + Tag = JSONBinaryTag.BoolValue; + + } + } + + public virtual JSONArray AsArray + { + get + { + return this as JSONArray; + } + } + + public virtual JSONClass AsObject + { + get + { + return this as JSONClass; + } + } + + + #endregion typecasting properties + + #region operators + + public static implicit operator JSONNode(string s) + { + return new JSONData(s); + } + + public static implicit operator string(JSONNode d) + { + return (d == null) ? null : d.Value; + } + + public static bool operator ==(JSONNode a, object b) + { + if (b == null && a is JSONLazyCreator) + return true; + return System.Object.ReferenceEquals(a, b); + } + + public static bool operator !=(JSONNode a, object b) + { + return !(a == b); + } + + public override bool Equals(object obj) + { + return System.Object.ReferenceEquals(this, obj); + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + + #endregion operators + + internal static string Escape(string aText) + { + string result = ""; + foreach (char c in aText) + { + switch (c) + { + case '\\': + result += "\\\\"; + break; + case '\"': + result += "\\\""; + break; + case '\n': + result += "\\n"; + break; + case '\r': + result += "\\r"; + break; + case '\t': + result += "\\t"; + break; + case '\b': + result += "\\b"; + break; + case '\f': + result += "\\f"; + break; + default: + result += c; + break; + } + } + return result; + } + + static JSONData Numberize(string token) + { + bool flag = false; + int integer = 0; + double real = 0; + + if (int.TryParse(token, out integer)) + { + return new JSONData(integer); + } + + if (double.TryParse(token, out real)) + { + return new JSONData(real); + } + + if (bool.TryParse(token, out flag)) + { + return new JSONData(flag); + } + + throw new NotImplementedException(token); + } + + static void AddElement(JSONNode ctx, string token, string tokenName, bool tokenIsString) + { + if (tokenIsString) + { + if (ctx is JSONArray) + ctx.Add(token); + else + ctx.Add(tokenName, token); // assume dictionary/object + } + else + { + JSONData number = Numberize(token); + if (ctx is JSONArray) + ctx.Add(number); + else + ctx.Add(tokenName, number); + + } + } + + public static JSONNode Parse(string aJSON) + { + Stack stack = new Stack(); + JSONNode ctx = null; + int i = 0; + string Token = ""; + string TokenName = ""; + bool QuoteMode = false; + bool TokenIsString = false; + while (i < aJSON.Length) + { + switch (aJSON[i]) + { + case '{': + if (QuoteMode) + { + Token += aJSON[i]; + break; + } + stack.Push(new JSONClass()); + if (ctx != null) + { + TokenName = TokenName.Trim(); + if (ctx is JSONArray) + ctx.Add(stack.Peek()); + else if (TokenName != "") + ctx.Add(TokenName, stack.Peek()); + } + TokenName = ""; + Token = ""; + ctx = stack.Peek(); + break; + + case '[': + if (QuoteMode) + { + Token += aJSON[i]; + break; + } + + stack.Push(new JSONArray()); + if (ctx != null) + { + TokenName = TokenName.Trim(); + + if (ctx is JSONArray) + ctx.Add(stack.Peek()); + else if (TokenName != "") + ctx.Add(TokenName, stack.Peek()); + } + TokenName = ""; + Token = ""; + ctx = stack.Peek(); + break; + + case '}': + case ']': + if (QuoteMode) + { + Token += aJSON[i]; + break; + } + if (stack.Count == 0) + throw new Exception("JSON Parse: Too many closing brackets"); + + stack.Pop(); + if (Token != "") + { + TokenName = TokenName.Trim(); + /* + if (ctx is JSONArray) + ctx.Add (Token); + else if (TokenName != "") + ctx.Add (TokenName, Token); + */ + AddElement(ctx, Token, TokenName, TokenIsString); + TokenIsString = false; + } + TokenName = ""; + Token = ""; + if (stack.Count > 0) + ctx = stack.Peek(); + break; + + case ':': + if (QuoteMode) + { + Token += aJSON[i]; + break; + } + TokenName = Token; + Token = ""; + TokenIsString = false; + break; + + case '"': + QuoteMode ^= true; + TokenIsString = QuoteMode == true ? true : TokenIsString; + break; + + case ',': + if (QuoteMode) + { + Token += aJSON[i]; + break; + } + if (Token != "") + { + /* + if (ctx is JSONArray) { + ctx.Add (Token); + } else if (TokenName != "") { + ctx.Add (TokenName, Token); + } + */ + AddElement(ctx, Token, TokenName, TokenIsString); + TokenIsString = false; + + } + TokenName = ""; + Token = ""; + TokenIsString = false; + break; + + case '\r': + case '\n': + break; + + case ' ': + case '\t': + if (QuoteMode) + Token += aJSON[i]; + break; + + case '\\': + ++i; + if (QuoteMode) + { + char C = aJSON[i]; + switch (C) + { + case 't': + Token += '\t'; + break; + case 'r': + Token += '\r'; + break; + case 'n': + Token += '\n'; + break; + case 'b': + Token += '\b'; + break; + case 'f': + Token += '\f'; + break; + case 'u': + { + string s = aJSON.Substring(i + 1, 4); + Token += (char)int.Parse( + s, + System.Globalization.NumberStyles.AllowHexSpecifier); + i += 4; + break; + } + default: + Token += C; + break; + } + } + break; + + default: + Token += aJSON[i]; + break; + } + ++i; + } + if (QuoteMode) + { + throw new Exception("JSON Parse: Quotation marks seems to be messed up."); + } + return ctx; + } + + public virtual void Serialize(System.IO.BinaryWriter aWriter) + { + } + + public void SaveToStream(System.IO.Stream aData) + { + var W = new System.IO.BinaryWriter(aData); + Serialize(W); + } + +#if USE_SharpZipLib + public void SaveToCompressedStream(System.IO.Stream aData) + { + using (var gzipOut = new ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream(aData)) + { + gzipOut.IsStreamOwner = false; + SaveToStream(gzipOut); + gzipOut.Close(); + } + } + + public void SaveToCompressedFile(string aFileName) + { + +#if USE_FileIO + System.IO.Directory.CreateDirectory((new System.IO.FileInfo(aFileName)).Directory.FullName); + using(var F = System.IO.File.OpenWrite(aFileName)) + { + SaveToCompressedStream(F); + } + +#else + throw new Exception("Can't use File IO stuff in webplayer"); +#endif + } + public string SaveToCompressedBase64() + { + using (var stream = new System.IO.MemoryStream()) + { + SaveToCompressedStream(stream); + stream.Position = 0; + return System.Convert.ToBase64String(stream.ToArray()); + } + } + +#else + public void SaveToCompressedStream(System.IO.Stream aData) + { + throw new Exception("Can't use compressed functions. You need include the SharpZipLib and uncomment the define at the top of SimpleJSON"); + } + + public void SaveToCompressedFile(string aFileName) + { + throw new Exception("Can't use compressed functions. You need include the SharpZipLib and uncomment the define at the top of SimpleJSON"); + } + + public string SaveToCompressedBase64() + { + throw new Exception("Can't use compressed functions. You need include the SharpZipLib and uncomment the define at the top of SimpleJSON"); + } +#endif + + public void SaveToFile(string aFileName) + { +#if USE_FileIO + System.IO.Directory.CreateDirectory((new System.IO.FileInfo(aFileName)).Directory.FullName); + using (var F = System.IO.File.OpenWrite(aFileName)) + { + SaveToStream(F); + } +#else + throw new Exception ("Can't use File IO stuff in webplayer"); +#endif + } + + public string SaveToBase64() + { + using (var stream = new System.IO.MemoryStream()) + { + SaveToStream(stream); + stream.Position = 0; + return System.Convert.ToBase64String(stream.ToArray()); + } + } + + public static JSONNode Deserialize(System.IO.BinaryReader aReader) + { + JSONBinaryTag type = (JSONBinaryTag)aReader.ReadByte(); + switch (type) + { + case JSONBinaryTag.Array: + { + int count = aReader.ReadInt32(); + JSONArray tmp = new JSONArray(); + for (int i = 0; i < count; i++) + tmp.Add(Deserialize(aReader)); + return tmp; + } + case JSONBinaryTag.Class: + { + int count = aReader.ReadInt32(); + JSONClass tmp = new JSONClass(); + for (int i = 0; i < count; i++) + { + string key = aReader.ReadString(); + var val = Deserialize(aReader); + tmp.Add(key, val); + } + return tmp; + } + case JSONBinaryTag.Value: + { + return new JSONData(aReader.ReadString()); + } + case JSONBinaryTag.IntValue: + { + return new JSONData(aReader.ReadInt32()); + } + case JSONBinaryTag.DoubleValue: + { + return new JSONData(aReader.ReadDouble()); + } + case JSONBinaryTag.BoolValue: + { + return new JSONData(aReader.ReadBoolean()); + } + case JSONBinaryTag.FloatValue: + { + return new JSONData(aReader.ReadSingle()); + } + + default: + { + throw new Exception("Error deserializing JSON. Unknown tag: " + type); + } + } + } + +#if USE_SharpZipLib + public static JSONNode LoadFromCompressedStream(System.IO.Stream aData) + { + var zin = new ICSharpCode.SharpZipLib.BZip2.BZip2InputStream(aData); + return LoadFromStream(zin); + } + public static JSONNode LoadFromCompressedFile(string aFileName) + { +#if USE_FileIO + using(var F = System.IO.File.OpenRead(aFileName)) + { + return LoadFromCompressedStream(F); + } +#else + throw new Exception("Can't use File IO stuff in webplayer"); +#endif + } + public static JSONNode LoadFromCompressedBase64(string aBase64) + { + var tmp = System.Convert.FromBase64String(aBase64); + var stream = new System.IO.MemoryStream(tmp); + stream.Position = 0; + return LoadFromCompressedStream(stream); + } +#else + public static JSONNode LoadFromCompressedFile(string aFileName) + { + throw new Exception("Can't use compressed functions. You need include the SharpZipLib and uncomment the define at the top of SimpleJSON"); + } + + public static JSONNode LoadFromCompressedStream(System.IO.Stream aData) + { + throw new Exception("Can't use compressed functions. You need include the SharpZipLib and uncomment the define at the top of SimpleJSON"); + } + + public static JSONNode LoadFromCompressedBase64(string aBase64) + { + throw new Exception("Can't use compressed functions. You need include the SharpZipLib and uncomment the define at the top of SimpleJSON"); + } +#endif + + public static JSONNode LoadFromStream(System.IO.Stream aData) + { + using (var R = new System.IO.BinaryReader(aData)) + { + return Deserialize(R); + } + } + + public static JSONNode LoadFromFile(string aFileName) + { +#if USE_FileIO + using (var F = System.IO.File.OpenRead(aFileName)) + { + return LoadFromStream(F); + } +#else + throw new Exception ("Can't use File IO stuff in webplayer"); +#endif + } + + public static JSONNode LoadFromBase64(string aBase64) + { + var tmp = System.Convert.FromBase64String(aBase64); + var stream = new System.IO.MemoryStream(tmp); + stream.Position = 0; + return LoadFromStream(stream); + } + } + // End of JSONNode + + public class JSONArray : JSONNode, IEnumerable + { + private List m_List = new List(); + + public override JSONNode this[int aIndex] + { + get + { + if (aIndex < 0 || aIndex >= m_List.Count) + return new JSONLazyCreator(this); + return m_List[aIndex]; + } + set + { + if (aIndex < 0 || aIndex >= m_List.Count) + m_List.Add(value); + else + m_List[aIndex] = value; + } + } + + public override JSONNode this[string aKey] + { + get { return new JSONLazyCreator(this); } + set { m_List.Add(value); } + } + + public override int Count + { + get { return m_List.Count; } + } + + public override void Add(string aKey, JSONNode aItem) + { + m_List.Add(aItem); + } + + public override JSONNode Remove(int aIndex) + { + if (aIndex < 0 || aIndex >= m_List.Count) + return null; + JSONNode tmp = m_List[aIndex]; + m_List.RemoveAt(aIndex); + return tmp; + } + + public override JSONNode Remove(JSONNode aNode) + { + m_List.Remove(aNode); + return aNode; + } + + public override IEnumerable Children + { + get + { + foreach (JSONNode N in m_List) + yield return N; + } + } + + public IEnumerator GetEnumerator() + { + foreach (JSONNode N in m_List) + yield return N; + } + + public override string ToString() + { + string result = "[ "; + foreach (JSONNode N in m_List) + { + if (result.Length > 2) + result += ", "; + result += N.ToString(); + } + result += " ]"; + return result; + } + + public override string ToString(string aPrefix) + { + string result = "[ "; + foreach (JSONNode N in m_List) + { + if (result.Length > 3) + result += ", "; + result += "\n" + aPrefix + " "; + result += N.ToString(aPrefix + " "); + } + result += "\n" + aPrefix + "]"; + return result; + } + + public override string ToJSON(int prefix) + { + string s = new string(' ', (prefix + 1) * 2); + string ret = "[ "; + foreach (JSONNode n in m_List) + { + if (ret.Length > 3) + ret += ", "; + ret += "\n" + s; + ret += n.ToJSON(prefix + 1); + + } + ret += "\n" + s + "]"; + return ret; + } + + public override void Serialize(System.IO.BinaryWriter aWriter) + { + aWriter.Write((byte)JSONBinaryTag.Array); + aWriter.Write(m_List.Count); + for (int i = 0; i < m_List.Count; i++) + { + m_List[i].Serialize(aWriter); + } + } + } + // End of JSONArray + + public class JSONClass : JSONNode, IEnumerable + { + private Dictionary m_Dict = new Dictionary(); + + public override JSONNode this[string aKey] + { + get + { + if (m_Dict.ContainsKey(aKey)) + return m_Dict[aKey]; + else + return new JSONLazyCreator(this, aKey); + } + set + { + if (m_Dict.ContainsKey(aKey)) + m_Dict[aKey] = value; + else + m_Dict.Add(aKey, value); + } + } + + public override JSONNode this[int aIndex] + { + get + { + if (aIndex < 0 || aIndex >= m_Dict.Count) + return null; + return m_Dict.ElementAt(aIndex).Value; + } + set + { + if (aIndex < 0 || aIndex >= m_Dict.Count) + return; + string key = m_Dict.ElementAt(aIndex).Key; + m_Dict[key] = value; + } + } + + public override int Count + { + get { return m_Dict.Count; } + } + + + public override void Add(string aKey, JSONNode aItem) + { + if (!string.IsNullOrEmpty(aKey)) + { + if (m_Dict.ContainsKey(aKey)) + m_Dict[aKey] = aItem; + else + m_Dict.Add(aKey, aItem); + } + else + m_Dict.Add(Guid.NewGuid().ToString(), aItem); + } + + public override JSONNode Remove(string aKey) + { + if (!m_Dict.ContainsKey(aKey)) + return null; + JSONNode tmp = m_Dict[aKey]; + m_Dict.Remove(aKey); + return tmp; + } + + public override JSONNode Remove(int aIndex) + { + if (aIndex < 0 || aIndex >= m_Dict.Count) + return null; + var item = m_Dict.ElementAt(aIndex); + m_Dict.Remove(item.Key); + return item.Value; + } + + public override JSONNode Remove(JSONNode aNode) + { + try + { + var item = m_Dict.Where(k => k.Value == aNode).First(); + m_Dict.Remove(item.Key); + return aNode; + } + catch + { + return null; + } + } + + public override IEnumerable Children + { + get + { + foreach (KeyValuePair N in m_Dict) + yield return N.Value; + } + } + + public IEnumerator GetEnumerator() + { + foreach (KeyValuePair N in m_Dict) + yield return N; + } + + public override string ToString() + { + string result = "{"; + foreach (KeyValuePair N in m_Dict) + { + if (result.Length > 2) + result += ", "; + result += "\"" + Escape(N.Key) + "\":" + N.Value.ToString(); + } + result += "}"; + return result; + } + + public override string ToString(string aPrefix) + { + string result = "{ "; + foreach (KeyValuePair N in m_Dict) + { + if (result.Length > 3) + result += ", "; + result += "\n" + aPrefix + " "; + result += "\"" + Escape(N.Key) + "\" : " + N.Value.ToString(aPrefix + " "); + } + result += "\n" + aPrefix + "}"; + return result; + } + + public override string ToJSON(int prefix) + { + string s = new string(' ', (prefix + 1) * 2); + string ret = "{ "; + foreach (KeyValuePair n in m_Dict) + { + if (ret.Length > 3) + ret += ", "; + ret += "\n" + s; + ret += string.Format("\"{0}\": {1}", n.Key, n.Value.ToJSON(prefix + 1)); + } + ret += "\n" + s + "}"; + return ret; + } + + public override void Serialize(System.IO.BinaryWriter aWriter) + { + aWriter.Write((byte)JSONBinaryTag.Class); + aWriter.Write(m_Dict.Count); + foreach (string K in m_Dict.Keys) + { + aWriter.Write(K); + m_Dict[K].Serialize(aWriter); + } + } + } + // End of JSONClass + + public class JSONData : JSONNode + { + private string m_Data; + + + public override string Value + { + get { return m_Data; } + set + { + m_Data = value; + Tag = JSONBinaryTag.Value; + } + } + + public JSONData(string aData) + { + m_Data = aData; + Tag = JSONBinaryTag.Value; + } + + public JSONData(float aData) + { + AsFloat = aData; + } + + public JSONData(double aData) + { + AsDouble = aData; + } + + public JSONData(bool aData) + { + AsBool = aData; + } + + public JSONData(int aData) + { + AsInt = aData; + } + + public override string ToString() + { + return "\"" + Escape(m_Data) + "\""; + } + + public override string ToString(string aPrefix) + { + return "\"" + Escape(m_Data) + "\""; + } + + public override string ToJSON(int prefix) + { + switch (Tag) + { + case JSONBinaryTag.DoubleValue: + case JSONBinaryTag.FloatValue: + case JSONBinaryTag.IntValue: + return m_Data; + case JSONBinaryTag.Value: + return string.Format("\"{0}\"", Escape(m_Data)); + default: + throw new NotSupportedException("This shouldn't be here: " + Tag.ToString()); + } + } + + public override void Serialize(System.IO.BinaryWriter aWriter) + { + var tmp = new JSONData(""); + + tmp.AsInt = AsInt; + if (tmp.m_Data == this.m_Data) + { + aWriter.Write((byte)JSONBinaryTag.IntValue); + aWriter.Write(AsInt); + return; + } + tmp.AsFloat = AsFloat; + if (tmp.m_Data == this.m_Data) + { + aWriter.Write((byte)JSONBinaryTag.FloatValue); + aWriter.Write(AsFloat); + return; + } + tmp.AsDouble = AsDouble; + if (tmp.m_Data == this.m_Data) + { + aWriter.Write((byte)JSONBinaryTag.DoubleValue); + aWriter.Write(AsDouble); + return; + } + + tmp.AsBool = AsBool; + if (tmp.m_Data == this.m_Data) + { + aWriter.Write((byte)JSONBinaryTag.BoolValue); + aWriter.Write(AsBool); + return; + } + aWriter.Write((byte)JSONBinaryTag.Value); + aWriter.Write(m_Data); + } + } + // End of JSONData + + internal class JSONLazyCreator : JSONNode + { + private JSONNode m_Node = null; + private string m_Key = null; + + public JSONLazyCreator(JSONNode aNode) + { + m_Node = aNode; + m_Key = null; + } + + public JSONLazyCreator(JSONNode aNode, string aKey) + { + m_Node = aNode; + m_Key = aKey; + } + + private void Set(JSONNode aVal) + { + if (m_Key == null) + { + m_Node.Add(aVal); + } + else + { + m_Node.Add(m_Key, aVal); + } + m_Node = null; // Be GC friendly. + } + + public override JSONNode this[int aIndex] + { + get + { + return new JSONLazyCreator(this); + } + set + { + var tmp = new JSONArray(); + tmp.Add(value); + Set(tmp); + } + } + + public override JSONNode this[string aKey] + { + get + { + return new JSONLazyCreator(this, aKey); + } + set + { + var tmp = new JSONClass(); + tmp.Add(aKey, value); + Set(tmp); + } + } + + public override void Add(JSONNode aItem) + { + var tmp = new JSONArray(); + tmp.Add(aItem); + Set(tmp); + } + + public override void Add(string aKey, JSONNode aItem) + { + var tmp = new JSONClass(); + tmp.Add(aKey, aItem); + Set(tmp); + } + + public static bool operator ==(JSONLazyCreator a, object b) + { + if (b == null) + return true; + return System.Object.ReferenceEquals(a, b); + } + + public static bool operator !=(JSONLazyCreator a, object b) + { + return !(a == b); + } + + public override bool Equals(object obj) + { + if (obj == null) + return true; + return System.Object.ReferenceEquals(this, obj); + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + public override string ToString() + { + return ""; + } + + public override string ToString(string aPrefix) + { + return ""; + } + + public override string ToJSON(int prefix) + { + return ""; + } + + public override int AsInt + { + get + { + JSONData tmp = new JSONData(0); + Set(tmp); + return 0; + } + set + { + JSONData tmp = new JSONData(value); + Set(tmp); + } + } + + public override float AsFloat + { + get + { + JSONData tmp = new JSONData(0.0f); + Set(tmp); + return 0.0f; + } + set + { + JSONData tmp = new JSONData(value); + Set(tmp); + } + } + + public override double AsDouble + { + get + { + JSONData tmp = new JSONData(0.0); + Set(tmp); + return 0.0; + } + set + { + JSONData tmp = new JSONData(value); + Set(tmp); + } + } + + public override bool AsBool + { + get + { + JSONData tmp = new JSONData(false); + Set(tmp); + return false; + } + set + { + JSONData tmp = new JSONData(value); + Set(tmp); + } + } + + public override JSONArray AsArray + { + get + { + JSONArray tmp = new JSONArray(); + Set(tmp); + return tmp; + } + } + + public override JSONClass AsObject + { + get + { + JSONClass tmp = new JSONClass(); + Set(tmp); + return tmp; + } + } + } + // End of JSONLazyCreator + + public static class JSON + { + public static JSONNode Parse(string aJSON) + { + return JSONNode.Parse(aJSON); + } + } +} \ No newline at end of file diff --git a/AmiiBomb/Class/Translate_Class.cs b/AmiiBomb/Class/Translate_Class.cs new file mode 100644 index 0000000..4885f7c --- /dev/null +++ b/AmiiBomb/Class/Translate_Class.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace AmiiBomb +{ + class Translate_Class + { + private static I18n i18n = I18n.Instance; + + public static string GetLocale(string Locale) + { + foreach (CultureInfo info in CultureInfo.GetCultures(CultureTypes.AllCultures)) + { + if (CultureInfo.CreateSpecificCulture(info.Name).Name == Locale) + return Helper_Class.FirstLetterToUpperCase(info.NativeName); + } + + return null; + } + + public static void Translate(Main_Form Form) + { + //Main Menu + //--------- + + //File Menu + Form.fileToolStripMenuItem.Text = i18n.__("Menu_File"); + Form.selectbinFolderToolStripMenuItem.Text = i18n.__("Menu_Select_Amiibo_Folder"); + Form.dumpAmiiboToolStripMenuItem.Text = i18n.__("Menu_Dump_Amiibo"); + Form.flashAmiiBombuinoToolStripMenuItem.Text = i18n.__("Menu_Flash_AmiiBombuino"); + Form.internalFlasherToolStripMenuItem.Text = i18n.__("Menu_Internal_Flasher"); + Form.withXLoaderToolStripMenuItem.Text = i18n.__("Menu_XLoader"); + Form.quitToolStripMenuItem.Text = i18n.__("Menu_Quit"); + + //Options Menu + Form.optionsToolStripMenuItem.Text = i18n.__("Menu_Options"); + Form.keyToolStripMenuItem.Text = i18n.__("Menu_Keys"); + Form.selectKeybinFileToolStripMenuItem.Text = i18n.__("Menu_Select_Amiibo_Keys"); + Form.whereFindAmiiboKeyToolStripMenuItem.Text = i18n.__("Menu_Where_Find_Keys"); + Form.registerAmiiboKeyToolStripMenuItem.Text = i18n.__("Menu_Check_Keys_Clipboard"); + Form.filesCacheToolStripMenuItem.Text = i18n.__("Menu_Files_Cache"); + Form.activeFilesCachingToolStripMenuItem.Text = i18n.__("Menu_Active_Cache"); + Form.deleteCacheToolStripMenuItem.Text = i18n.__("Menu_Delete_Cache"); + Form.languagesToolStripMenuItem.Text = i18n.__("Menu_Languages"); + + //Help Menu + Form.helpToolStripMenuItem.Text = i18n.__("Menu_Help"); + Form.howConnectToolStripMenuItem.Text = i18n.__("Menu_How_Connect"); + Form.aboutToolStripMenuItem.Text = i18n.__("Menu_About"); + + Form.donateToolStripMenuItem.Text = i18n.__("Menu_Donate"); + + //Amiibo Menu + Form.amiiboToolStripMenuItem.Text = i18n.__("Menu_Amiibo_Menu"); + Form.moreInformationsToolStripMenuItem.Text = "..." + i18n.__("Menu_Amiibo_More_Informations"); + Form.actionsToolStripMenuItem.Text = "..." + i18n.__("Menu_Amiibo_Action"); + Form.decryptToolStripMenuItem.Text = i18n.__("Menu_Amiibo_Decrypt"); + Form.createTagToolStripMenuItem.Text = i18n.__("Menu_Amiibo_CreateTag"); + Form.dumpAppDataToolStripMenuItem.Text = i18n.__("Menu_Amiibo_Dump_AppData"); + Form.writeAppDataToolStripMenuItem.Text = i18n.__("Menu_Amiibo_Write_AppData"); + + Form.deleteFileToolStripMenuItem.Text = i18n.__("Menu_Delete_File"); + + //ListView + //-------- + ((ColumnHeader)Form.listView1.Columns[0]).Text = i18n.__("Table_Column_File"); + } + + public static void Translate(Flash_Form Form) + { + Form.groupBox1.Text = i18n.__("NFC_Arduino"); + Form.label1.Text = i18n.__("NFC_Port"); + Form.label2.Text = i18n.__("NFC_Baudrate"); + Form.checkBox1.Text = i18n.__("NFC_Write_Lockbytes"); + Form.toolStripStatusLabel1.Text = i18n.__("NFC_No_Connected"); + Form.toolStripStatusLabel4.Text = "| " + i18n.__("NFC_AmiiBombuino_Install") + ":"; + Form.button2.Text = i18n.__("NFC_Dump_Amiibo_Tag"); + } + + public static void Translate(About_Form Form) + { + Form.Text = i18n.__("About_Windows_Title") + " AmiiBomb"; + Form.label3.Text = i18n.__("About_Library"); + Form.label1.Text = i18n.__("About_Thanks"); + Form.label10.Text = i18n.__("About_Translation_By"); + Form.label9.Text = "● " + i18n.__("About_Donate"); + } + + public static void Translate(Arduino_Form Form) + { + Form.groupBox1.Text = i18n.__("AmiiBombuino_Arduino"); + Form.label1.Text = i18n.__("AmiiBombuino_Port"); + Form.label2.Text = i18n.__("AmiiBombuino_Model"); + Form.button1.Text = i18n.__("AmiiBombuino_Flash"); + } + } +} diff --git a/AmiiBomb/Class/libamiibo/AmiiboKeys.cs b/AmiiBomb/Class/libamiibo/AmiiboKeys.cs new file mode 100644 index 0000000..e8f7e5c --- /dev/null +++ b/AmiiBomb/Class/libamiibo/AmiiboKeys.cs @@ -0,0 +1,159 @@ +/* + * Copyright (C) 2015 Marcos Vives Del Sol + * Copyright (C) 2016 Benjamin Krämer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +using System; +using System.IO; +using Org.BouncyCastle.Crypto.Digests; +using Org.BouncyCastle.Crypto.Macs; +using Org.BouncyCastle.Crypto.Parameters; + +namespace AmiiBomb +{ + public class AmiiboKeys + { + public const int HMAC_POS_DATA = 0x008; + public const int HMAC_POS_TAG = 0x1B4; + + private AmiiboKeys() { } + + private KeygenMasterkeys data; + private KeygenMasterkeys tag; + + internal static AmiiboKeys Unserialize(BinaryReader reader) + { + return new AmiiboKeys + { + data = KeygenMasterkeys.Unserialize(reader), + tag = KeygenMasterkeys.Unserialize(reader) + }; + } + + internal void Serialize(BinaryWriter writer) + { + this.data.Serialize(writer); + this.tag.Serialize(writer); + } + + public bool Unpack(byte[] tag, byte[] plain) + { + byte[] internalBytes = NtagHelpers.GetInternalTag(tag); + + // Generate keys + KeygenDerivedkeys dataKeys = GenerateKey(this.data, internalBytes); + KeygenDerivedkeys tagKeys = GenerateKey(this.tag, internalBytes); + + // Decrypt + dataKeys.Cipher(internalBytes, plain, false); + + // Init OpenSSL HMAC context + HMac hmacCtx = new HMac(new Sha256Digest()); + + // Regenerate tag HMAC. Note: order matters, data HMAC depends on tag HMAC! + hmacCtx.Init(new KeyParameter(tagKeys.hmacKey)); + hmacCtx.BlockUpdate(plain, 0x1D4, 0x34); + hmacCtx.DoFinal(plain, HMAC_POS_TAG); + + // Regenerate data HMAC + hmacCtx.Init(new KeyParameter(dataKeys.hmacKey)); + hmacCtx.BlockUpdate(plain, 0x029, 0x1DF); + hmacCtx.DoFinal(plain, HMAC_POS_DATA); + + Array.Copy(tag, 0x208, plain, 0x208, 0x014); + + return + NativeHelpers.MemCmp(plain, internalBytes, HMAC_POS_DATA, 32) && + NativeHelpers.MemCmp(plain, internalBytes, HMAC_POS_TAG, 32); + } + + public void Pack(byte[] plain, byte[] tag) + { + byte[] cipher = new byte[NtagHelpers.NFC3D_AMIIBO_SIZE]; + + // Generate keys + var tagKeys = GenerateKey(this.tag, plain); + var dataKeys = GenerateKey(this.data, plain); + + // Init OpenSSL HMAC context + HMac hmacCtx = new HMac(new Sha256Digest()); + + // Generate tag HMAC + hmacCtx.Init(new KeyParameter(tagKeys.hmacKey)); + hmacCtx.BlockUpdate(plain, 0x1D4, 0x34); + hmacCtx.DoFinal(cipher, HMAC_POS_TAG); + + // Generate data HMAC + hmacCtx.Init(new KeyParameter(dataKeys.hmacKey)); + hmacCtx.BlockUpdate(plain, 0x029, 0x18B); // Data + hmacCtx.BlockUpdate(cipher, HMAC_POS_TAG, 0x20); // Tag HMAC + hmacCtx.BlockUpdate(plain, 0x1D4, 0x34); // Tag + hmacCtx.DoFinal(cipher, HMAC_POS_DATA); + + // Encrypt + dataKeys.Cipher(plain, cipher, true); + + // Convert back to hardware + NtagHelpers.InternalToTag(cipher, tag); + + Array.Copy(plain, 0x208, tag, 0x208, 0x014); + } + + public static AmiiboKeys LoadKeys(string path) + { + if (!File.Exists(path)) + return null; + + try + { + using (var reader = new BinaryReader(File.OpenRead(path))) + { + var result = AmiiboKeys.Unserialize(reader); + + if ((result.data.magicBytesSize > 16) || (result.tag.magicBytesSize > 16)) + return null; + + return result; + } + } + catch + { + return null; + } + } + + private static byte[] CalcSeed(byte[] dump) + { + byte[] key = new byte[KeygenMasterkeys.NFC3D_KEYGEN_SEED_SIZE]; + Array.Copy(dump, 0x029, key, 0x00, 0x02); + Array.Copy(dump, 0x1D4, key, 0x10, 0x08); + Array.Copy(dump, 0x1D4, key, 0x18, 0x08); + Array.Copy(dump, 0x1E8, key, 0x20, 0x20); + return key; + } + + private KeygenDerivedkeys GenerateKey(KeygenMasterkeys masterKeys, byte[] dump) + { + byte[] seed = CalcSeed(dump); + return masterKeys.GenerateKey(seed); + } + } +} \ No newline at end of file diff --git a/AmiiBomb/Class/libamiibo/ArraySegmentExtensions.cs b/AmiiBomb/Class/libamiibo/ArraySegmentExtensions.cs new file mode 100644 index 0000000..5021710 --- /dev/null +++ b/AmiiBomb/Class/libamiibo/ArraySegmentExtensions.cs @@ -0,0 +1,51 @@ +//https://github.com/Falco20019/libamiibo + +using System; + +namespace AmiiBomb +{ + static class ArraySegment + { + public static void Copy(byte[] source, ArraySegment destination, int length) + { + Array.Copy(source, 0, destination.Array, destination.Offset, length); + } + public static void Copy(byte[] source, int sourceIndex, ArraySegment destination, int destinationIndex, int length) + { + Array.Copy(source, sourceIndex, destination.Array, destination.Offset + destinationIndex, length); + } + public static void Copy(ArraySegment source, ArraySegment destination, int length) + { + Array.Copy(source.Array, source.Offset, destination.Array, destination.Offset, length); + } + public static void Copy(ArraySegment source, int sourceIndex, ArraySegment destination, int destinationIndex, int length) + { + Array.Copy(source.Array, source.Offset + sourceIndex, destination.Array, destination.Offset + destinationIndex, length); + } + + public static void CopyFrom(this ArraySegment destination, byte[] source) + { + Copy(source, destination, source.Length); + } + public static void CopyFrom(this ArraySegment destination, byte[] source, int length) + { + Copy(source, destination, length); + } + public static void CopyFrom(this ArraySegment destination, byte[] source, int sourceIndex, int destinationIndex, int length) + { + Copy(source, sourceIndex, destination, destinationIndex, length); + } + public static void CopyFrom(this ArraySegment destination, ArraySegment source) + { + Copy(source, destination, source.Count); + } + public static void CopyFrom(this ArraySegment destination, ArraySegment source, int length) + { + Copy(source, destination, length); + } + public static void CopyFrom(this ArraySegment destination, ArraySegment source, int sourceIndex, int destinationIndex, int length) + { + Copy(source, sourceIndex, destination, destinationIndex, length); + } + } +} diff --git a/AmiiBomb/Class/libamiibo/DrbgCtx.cs b/AmiiBomb/Class/libamiibo/DrbgCtx.cs new file mode 100644 index 0000000..e901da9 --- /dev/null +++ b/AmiiBomb/Class/libamiibo/DrbgCtx.cs @@ -0,0 +1,119 @@ +/* + * Copyright (C) 2015 Marcos Vives Del Sol + * Copyright (C) 2016 Benjamin Krämer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +using System; +using System.Diagnostics; +using Org.BouncyCastle.Crypto.Digests; +using Org.BouncyCastle.Crypto.Macs; +using Org.BouncyCastle.Crypto.Parameters; + +namespace AmiiBomb +{ + public class DrbgCtx + { + public const int NFC3D_DRBG_MAX_SEED_SIZE = 480; /* Hardcoded max size in 3DS NFC module */ + public const int NFC3D_DRBG_OUTPUT_SIZE = 32; /* Every iteration generates 32 bytes */ + + private readonly HMac hmacCtx; + private bool used; + private ushort iteration; + private readonly byte[] buffer; + + private DrbgCtx(byte[] hmacKey, byte[] seed, int seedSize) + { + Debug.Assert(hmacKey != null); + Debug.Assert(seed != null); + Debug.Assert(seedSize <= NFC3D_DRBG_MAX_SEED_SIZE); + + // Initialize primitives + this.used = false; + this.iteration = 0; + this.buffer = new byte[sizeof (ushort) + seedSize]; + + // The 16-bit counter is prepended to the seed when hashing, so we'll leave 2 bytes at the start + Array.Copy(seed, 0, this.buffer, sizeof(ushort), seedSize); + + // Initialize underlying HMAC context + this.hmacCtx = new HMac(new Sha256Digest()); + this.hmacCtx.Init(new KeyParameter(hmacKey)); + } + + private void Step(byte[] output, int offset) + { + Debug.Assert(output != null); + + if (this.used) + { + // If used at least once, reinitialize the HMAC + this.hmacCtx.Reset(); + } + else { + this.used = true; + } + + // Store counter in big endian, and increment it + this.buffer[0] = (byte) (this.iteration >> 8); + this.buffer[1] = (byte) (this.iteration >> 0); + this.iteration++; + + // Do HMAC magic + this.hmacCtx.BlockUpdate(buffer, 0, buffer.Length); + this.hmacCtx.DoFinal(output, offset); + } + + public static KeygenDerivedkeys GenerateBytes(byte[] hmacKey, byte[] seed, int seedSize) + { + int offset = 0; + int outputSize = 16 * 3; + byte[] temp = new byte[NFC3D_DRBG_OUTPUT_SIZE]; + byte[] output = new byte[outputSize]; + + DrbgCtx rngCtx = new DrbgCtx(hmacKey, seed, seedSize); + while (outputSize > 0) + { + if (outputSize < NFC3D_DRBG_OUTPUT_SIZE) + { + rngCtx.Step(temp, 0); + Array.Copy(temp, 0, output, offset, outputSize); + break; + } + + rngCtx.Step(output, offset); + offset += NFC3D_DRBG_OUTPUT_SIZE; + outputSize -= NFC3D_DRBG_OUTPUT_SIZE; + } + + var outkeys = new KeygenDerivedkeys + { + aesKey = new byte[16], + aesIV = new byte[16], + hmacKey = new byte[16] + }; + Array.Copy(output, 0, outkeys.aesKey, 0, outkeys.aesKey.Length); + Array.Copy(output, 16, outkeys.aesIV, 0, outkeys.aesIV.Length); + Array.Copy(output, 32, outkeys.hmacKey, 0, outkeys.hmacKey.Length); + + return outkeys; + } + } +} \ No newline at end of file diff --git a/AmiiBomb/Class/libamiibo/KeygenDerivedkeys.cs b/AmiiBomb/Class/libamiibo/KeygenDerivedkeys.cs new file mode 100644 index 0000000..e11d768 --- /dev/null +++ b/AmiiBomb/Class/libamiibo/KeygenDerivedkeys.cs @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2015 Marcos Vives Del Sol + * Copyright (C) 2016 Benjamin Krmer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +using System; +using System.IO; +using Org.BouncyCastle.Crypto.Parameters; +using Org.BouncyCastle.Security; + +namespace AmiiBomb +{ + public class KeygenDerivedkeys + { + public byte[] aesKey; // 16 bytes + public byte[] aesIV; // 16 bytes + public byte[] hmacKey; // 16 bytes + + internal static KeygenDerivedkeys Unserialize(BinaryReader reader) + { + return new KeygenDerivedkeys + { + aesKey = reader.ReadBytes(16), + aesIV = reader.ReadBytes(16), + hmacKey = reader.ReadBytes(16) + }; + } + + internal void Serialize(BinaryWriter writer) + { + writer.Write(aesKey); + writer.Write(aesIV); + writer.Write(hmacKey); + } + + protected bool Equals(KeygenDerivedkeys other) + { + return + NativeHelpers.MemCmp(aesKey, other.aesKey, 0, aesKey.Length) && + NativeHelpers.MemCmp(aesIV, other.aesIV, 0, aesIV.Length) && + NativeHelpers.MemCmp(hmacKey, other.hmacKey, 0, hmacKey.Length); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != this.GetType()) return false; + return Equals((KeygenDerivedkeys)obj); + } + + public override int GetHashCode() + { + unchecked + { + var hashCode = (aesKey != null ? aesKey.GetHashCode() : 0); + hashCode = (hashCode * 397) ^ (aesIV != null ? aesIV.GetHashCode() : 0); + hashCode = (hashCode * 397) ^ (hmacKey != null ? hmacKey.GetHashCode() : 0); + return hashCode; + } + } + + public void Cipher(byte[] input, byte[] output, bool forEncryption) + { + var cipher = CipherUtilities.GetCipher("AES/CTR/NoPadding"); + ParametersWithIV ivAndKey = new ParametersWithIV(new KeyParameter(this.aesKey), this.aesIV); + cipher.Init(forEncryption, ivAndKey); + var pos = cipher.ProcessBytes(input, 0x02C, 0x188, output, 0x02C); + cipher.DoFinal(output, 0x02C + pos); + + Array.Copy(input, 0x000, output, 0x000, 0x008); + // Data signature NOT copied + Array.Copy(input, 0x028, output, 0x028, 0x004); + // Tag signature NOT copied + Array.Copy(input, 0x1D4, output, 0x1D4, 0x034); + } + } +} \ No newline at end of file diff --git a/AmiiBomb/Class/libamiibo/KeygenMasterkeys.cs b/AmiiBomb/Class/libamiibo/KeygenMasterkeys.cs new file mode 100644 index 0000000..77348b8 --- /dev/null +++ b/AmiiBomb/Class/libamiibo/KeygenMasterkeys.cs @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2015 Marcos Vives Del Sol + * Copyright (C) 2016 Benjamin Krmer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +using System; +using System.Diagnostics; +using System.IO; +using System.Text; + +namespace AmiiBomb +{ + public class KeygenMasterkeys + { + public const int NFC3D_KEYGEN_SEED_SIZE = 64; + + public byte[] hmacKey; // 16 bytes + public string typeString; // 14 bytes + public byte rfu; + public byte magicBytesSize; + public byte[] magicBytes; // 16 bytes + public byte[] xorPad; // 32 bytes + + internal static KeygenMasterkeys Unserialize(BinaryReader reader) + { + return new KeygenMasterkeys + { + hmacKey = reader.ReadBytes(16), + typeString = new string(reader.ReadChars(14)), + rfu = reader.ReadByte(), + magicBytesSize = reader.ReadByte(), + magicBytes = reader.ReadBytes(16), + xorPad = reader.ReadBytes(32) + }; + } + + internal void Serialize(BinaryWriter writer) + { + char[] typeStringChars = new char[14]; + typeString.CopyTo(0, typeStringChars, 0, typeString.Length); + + writer.Write(hmacKey); + writer.Write(typeStringChars); + writer.Write(rfu); + writer.Write(magicBytesSize); + writer.Write(magicBytes); + writer.Write(xorPad); + } + + public KeygenDerivedkeys GenerateKey(byte[] baseSeed) + { + byte[] preparedSeed = new byte[DrbgCtx.NFC3D_DRBG_MAX_SEED_SIZE]; + var preparedSeedSize = PrepareSeed(baseSeed, preparedSeed); + return DrbgCtx.GenerateBytes(this.hmacKey, preparedSeed, preparedSeedSize); + } + + private int PrepareSeed(byte[] baseSeed, byte[] output) + { + Debug.Assert(baseSeed != null); + Debug.Assert(output != null); + + int start = 0; + + // 1: Copy whole type string + Encoding.ASCII.GetBytes(this.typeString, 0, this.typeString.Length, output, 0); + start += this.typeString.Length; + + // 2: Append (16 - magicBytesSize) from the input seed + int leadingSeedBytes = 16 - this.magicBytesSize; + Array.Copy(baseSeed, 0, output, start, leadingSeedBytes); + start += leadingSeedBytes; + + // 3: Append all bytes from magicBytes + Array.Copy(this.magicBytes, 0, output, start, this.magicBytesSize); + start += this.magicBytesSize; + + // 4: Append bytes 0x10-0x1F from input seed + Array.Copy(baseSeed, 0x10, output, start, 16); + start += 16; + + // 5: Xor last bytes 0x20-0x3F of input seed with AES XOR pad and append them + for (int i = 0; i < 32; i++) + { + output[start + i] = (byte) (baseSeed[i + 32] ^ this.xorPad[i]); + } + start += 32; + + return start; + } + } +} \ No newline at end of file diff --git a/AmiiBomb/Class/libamiibo/NativeHelpers.cs b/AmiiBomb/Class/libamiibo/NativeHelpers.cs new file mode 100644 index 0000000..5f1f2ed --- /dev/null +++ b/AmiiBomb/Class/libamiibo/NativeHelpers.cs @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2015 Marcos Vives Del Sol + * Copyright (C) 2016 Benjamin Krämer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +namespace AmiiBomb +{ + internal static class NativeHelpers + { + public static bool MemCmp(byte[] a, byte[] b, int start, int length) + { + if (a == b) + return true; + if (a == null ^ b == null) + return false; + + for (int i = 0; i < length; i++) + { + var offset = start + i; + if (a[offset] != b[offset]) + return false; + } + return true; + } + } +} diff --git a/AmiiBomb/Class/libamiibo/NtagHelpers.cs b/AmiiBomb/Class/libamiibo/NtagHelpers.cs new file mode 100644 index 0000000..f6f3c09 --- /dev/null +++ b/AmiiBomb/Class/libamiibo/NtagHelpers.cs @@ -0,0 +1,166 @@ +//https://github.com/Falco20019/libamiibo + +using System; + +namespace AmiiBomb +{ + public static class NtagHelpers + { + public const int NFC3D_AMIIBO_SIZE = 540; + public const int NFC3D_NTAG_SIZE = 540; + + public static readonly byte[] CONFIG_BYTES = + { + 0x01, 0x00, 0x0F, 0xBD, // Dynamic lock bytes + 0x00, 0x00, 0x00, 0x04, // CFG0 + 0x5F, 0x00, 0x00, 0x00 // CFG1 + }; + public static readonly byte[] NTAG_PUB_KEY = + { + 0x04, 0x49, 0x4E, 0x1A, + 0x38, 0x6D, 0x3D, 0x3C, + 0xFE, 0x3D, 0xC1, 0x0E, + 0x5D, 0xE6, 0x8A, 0x49, + 0x9B, 0x1C, 0x20, 0x2D, + 0xB5, 0xB1, 0x32, 0x39, + 0x3E, 0x89, 0xED, 0x19, + 0xFE, 0x5B, 0xE8, 0xBC, + 0x61 + }; + + public static byte[] GetInternalTag(byte[] tag) + { + byte[] internalBytes = new byte[NFC3D_AMIIBO_SIZE]; + + // Convert format + TagToInternal(tag, internalBytes); + + return internalBytes; + } + + public static void TagToInternal(byte[] tag, byte[] intl) + { + // 0x02C - 0x1B3 Crypto buffer + Array.Copy(tag, 0x008, intl, 0x000, 0x008); // LockBytes + CC + Array.Copy(tag, 0x080, intl, 0x008, 0x020); // Data Signature (signs 0x029 - 0x208) + Array.Copy(tag, 0x010, intl, 0x028, 0x024); // 0x010 - 0x013 unencrypted, 0x014 begin of encrypted section + Array.Copy(tag, 0x0A0, intl, 0x04C, 0x168); // Encrypted data buffer + Array.Copy(tag, 0x034, intl, 0x1B4, 0x020); // Tag Signature (signs 0x1D4 - 0x208) + Array.Copy(tag, 0x000, intl, 0x1D4, 0x008); // NTAG Serial + Array.Copy(tag, 0x054, intl, 0x1DC, 0x02C); // Plaintext data + + /* ECDSA of tag: + if (tag.Length == NFC3D_NTAG_SIZE) + { + Array.Copy(tag, 0x21C, intl, 0x208, 0x020); + } + else + { + for (int i = 0x208; i < 0x208 + 0x20; i++) + intl[i] = 0xFF; + }*/ + } + + public static void InternalToTag(byte[] intl, byte[] tag) + { + Array.Copy(intl, 0x000, tag, 0x008, 0x008); + Array.Copy(intl, 0x008, tag, 0x080, 0x020); + Array.Copy(intl, 0x028, tag, 0x010, 0x024); + Array.Copy(intl, 0x04C, tag, 0x0A0, 0x168); + Array.Copy(intl, 0x1B4, tag, 0x034, 0x020); + Array.Copy(intl, 0x1D4, tag, 0x000, 0x008); + Array.Copy(intl, 0x1DC, tag, 0x054, 0x02C); + } + + public static ushort UInt16FromTag(ArraySegment buffer, int offset) + { + var data = new byte[0x02]; + Array.Copy(buffer.Array, buffer.Offset + offset, data, 0, data.Length); + if (BitConverter.IsLittleEndian) + Array.Reverse(data); + return BitConverter.ToUInt16(data, 0); + } + + public static void UInt16ToTag(ArraySegment buffer, int offset, ushort value) + { + var data = BitConverter.GetBytes(value); + if (BitConverter.IsLittleEndian) + Array.Reverse(data); + buffer.CopyFrom(data, 0, offset, data.Length); + } + + public static uint UInt32FromTag(ArraySegment buffer, int offset) + { + var data = new byte[0x04]; + Array.Copy(buffer.Array, buffer.Offset + offset, data, 0, data.Length); + if (BitConverter.IsLittleEndian) + Array.Reverse(data); + return BitConverter.ToUInt32(data, 0); + } + + public static void UInt32ToTag(ArraySegment buffer, int offset, uint value) + { + var data = BitConverter.GetBytes(value); + if (BitConverter.IsLittleEndian) + Array.Reverse(data); + buffer.CopyFrom(data, 0, offset, data.Length); + } + + public static ulong UInt64FromTag(ArraySegment buffer, int offset) + { + var data = new byte[0x08]; + Array.Copy(buffer.Array, buffer.Offset + offset, data, 0, data.Length); + if (BitConverter.IsLittleEndian) + Array.Reverse(data); + return BitConverter.ToUInt64(data, 0); + } + + public static void UInt64ToTag(ArraySegment buffer, int offset, ulong value) + { + var data = BitConverter.GetBytes(value); + if (BitConverter.IsLittleEndian) + Array.Reverse(data); + buffer.CopyFrom(data, 0, offset, data.Length); + } + + public static DateTime DateTimeFromTag(ushort value) + { + var day = value & 0x1F; + var month = (value >> 5) & 0x0F; + var year = (value >> 9) & 0x7F; + return new DateTime(2000 + year, month, day); + } + + public static ushort DateTimeToTag(DateTime value) + { + int result = 0; + result |= value.Year - 2000; + result <<= 4; + result |= value.Month; + result <<= 5; + result |= value.Day; + return (ushort) result; + } + + public static byte[] StringToByteArrayFastest(string hex) + { + if (hex.Length % 2 != 0) + throw new Exception("The binary key cannot have an odd number of digits"); + + byte[] arr = new byte[hex.Length >> 1]; + + for (int i = 0; i < hex.Length >> 1; ++i) + { + arr[i] = (byte)((GetHexVal(hex[i << 1]) << 4) + (GetHexVal(hex[(i << 1) + 1]))); + } + + return arr; + } + + private static int GetHexVal(char hex) + { + int val = (int)hex; + return val - (val < 58 ? 48 : 55); + } + } +} diff --git a/AmiiBomb/Flash_Form.Designer.cs b/AmiiBomb/Flash_Form.Designer.cs new file mode 100644 index 0000000..4e90495 --- /dev/null +++ b/AmiiBomb/Flash_Form.Designer.cs @@ -0,0 +1,238 @@ +namespace AmiiBomb +{ + partial class Flash_Form + { + /// + /// 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(Flash_Form)); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.comboBox2 = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.toolStripStatusLabel3 = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel2 = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel4 = new System.Windows.Forms.ToolStripStatusLabel(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog(); + this.button2 = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.statusStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.comboBox2); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Controls.Add(this.comboBox1); + this.groupBox1.Location = new System.Drawing.Point(8, 7); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(317, 75); + this.groupBox1.TabIndex = 6; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Arduino"; + // + // comboBox2 + // + this.comboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBox2.Enabled = false; + this.comboBox2.FormattingEnabled = true; + this.comboBox2.Items.AddRange(new object[] { + "250000", + "115200", + "57600", + "38400", + "28800", + "19200", + "14400", + "9600", + "4800", + "2400", + "1200", + "600", + "300"}); + this.comboBox2.Location = new System.Drawing.Point(84, 43); + this.comboBox2.Name = "comboBox2"; + this.comboBox2.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.comboBox2.Size = new System.Drawing.Size(227, 21); + this.comboBox2.TabIndex = 3; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(6, 46); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(53, 13); + this.label2.TabIndex = 2; + this.label2.Text = "Baudrate:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(6, 19); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(29, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Port:"; + // + // comboBox1 + // + this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Location = new System.Drawing.Point(84, 16); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(227, 21); + this.comboBox1.TabIndex = 1; + this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged); + // + // statusStrip1 + // + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabel3, + this.toolStripStatusLabel2, + this.toolStripStatusLabel1, + this.toolStripStatusLabel4}); + this.statusStrip1.Location = new System.Drawing.Point(0, 278); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(333, 22); + this.statusStrip1.SizingGrip = false; + this.statusStrip1.TabIndex = 7; + this.statusStrip1.Text = "statusStrip1"; + // + // toolStripStatusLabel3 + // + this.toolStripStatusLabel3.Name = "toolStripStatusLabel3"; + this.toolStripStatusLabel3.Size = new System.Drawing.Size(0, 17); + // + // toolStripStatusLabel2 + // + this.toolStripStatusLabel2.Name = "toolStripStatusLabel2"; + this.toolStripStatusLabel2.Size = new System.Drawing.Size(69, 17); + this.toolStripStatusLabel2.Spring = true; + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(84, 17); + this.toolStripStatusLabel1.Text = "No Connected"; + this.toolStripStatusLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // toolStripStatusLabel4 + // + this.toolStripStatusLabel4.Name = "toolStripStatusLabel4"; + this.toolStripStatusLabel4.Size = new System.Drawing.Size(134, 17); + this.toolStripStatusLabel4.Text = "| AmiiBombuino Install:"; + this.toolStripStatusLabel4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.toolStripStatusLabel4.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage; + // + // textBox1 + // + this.textBox1.BackColor = System.Drawing.Color.Black; + this.textBox1.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox1.ForeColor = System.Drawing.Color.White; + this.textBox1.Location = new System.Drawing.Point(8, 109); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBox1.Size = new System.Drawing.Size(317, 124); + this.textBox1.TabIndex = 8; + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.Checked = true; + this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox1.Location = new System.Drawing.Point(8, 88); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(107, 17); + this.checkBox1.TabIndex = 9; + this.checkBox1.Text = "Write Lock Bytes"; + this.checkBox1.UseVisualStyleBackColor = true; + // + // button2 + // + this.button2.Image = global::AmiiBomb.Properties.Resources.database_go; + this.button2.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + this.button2.Location = new System.Drawing.Point(8, 239); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(317, 33); + this.button2.TabIndex = 5; + this.button2.Text = "Dump Amiibo Tag!"; + this.button2.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // Flash_Form + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(333, 300); + this.Controls.Add(this.checkBox1); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.statusStrip1); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.button2); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.Name = "Flash_Form"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "NFC NTAG - AmiiBombuino"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Flash_Form_FormClosed); + this.Load += new System.EventHandler(this.Flash_Form_Load); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.statusStrip1.ResumeLayout(false); + this.statusStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private System.Windows.Forms.ComboBox comboBox2; + private System.Windows.Forms.ComboBox comboBox1; + private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel2; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel3; + private System.Windows.Forms.TextBox textBox1; + public System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + public System.Windows.Forms.Button button2; + private System.Windows.Forms.SaveFileDialog saveFileDialog1; + public System.Windows.Forms.GroupBox groupBox1; + public System.Windows.Forms.Label label2; + public System.Windows.Forms.Label label1; + public System.Windows.Forms.CheckBox checkBox1; + public System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel4; + } +} \ No newline at end of file diff --git a/AmiiBomb/Flash_Form.cs b/AmiiBomb/Flash_Form.cs new file mode 100644 index 0000000..987a3bd --- /dev/null +++ b/AmiiBomb/Flash_Form.cs @@ -0,0 +1,197 @@ +using System; +using System.IO; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace AmiiBomb +{ + public partial class Flash_Form : Form + { + Arduino_Class Arduino; + public string Current_File_Bin = ""; + public string Bin_Folder = ""; + public bool Action_Write, Com_Loaded = false; + private I18n i18n = I18n.Instance; + public Flash_Form() + { + InitializeComponent(); + this.Opacity = 0; + } + + private void Flash_Form_Load(object sender, EventArgs e) + { + Translate_Class.Translate(this); + + comboBox2.SelectedIndex = 1; + + comboBox1.DataSource = COMPortInfo.GetCOMPortsInfo(); + comboBox1.DisplayMember = "Description"; + comboBox1.ValueMember = "Name"; + + if (comboBox1.Items.Count > 0) + { + Com_Loaded = true; + comboBox1.SelectedIndex = 0; + comboBox1_SelectedIndexChanged(this, EventArgs.Empty); + this.Opacity = 100; + } + else + { + MessageBox.Show(i18n.__("NFC_No_Com_Port"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); + this.Close(); + } + + if (Action_Write) button2.Text = i18n.__("NFC_Create_Amiibo_Tag"); + if (!Action_Write) checkBox1.Visible = false; + } + + private bool NTAG_isHere() + { + string NTAG_Here = Arduino.SendCommand("/NTAG_HERE"); + if (NTAG_Here == "NO") + { + statusStrip1.Invoke(new Action(() => toolStripStatusLabel3.Text = i18n.__("NFC_No_NTAG_Present"))); + return false; + } + else + { + statusStrip1.Invoke(new Action(() => toolStripStatusLabel3.Text = i18n.__("NFC_NTAG_Present"))); + return true; + } + } + + private async void button2_Click(object sender, EventArgs e) + { + comboBox1.Enabled = false; + comboBox2.Enabled = false; + checkBox1.Enabled = false; + button2.Enabled = false; + textBox1.Text = ""; + + Arduino = new Arduino_Class(comboBox1.SelectedValue.ToString(), comboBox2.SelectedItem.ToString()); + if (Arduino.Serial.IsOpen) + { + toolStripStatusLabel1.Text = i18n.__("NFC_Connected"); + string DeviceNFC = i18n.__("NFC_NTAG215"); + if (!Action_Write) DeviceNFC = i18n.__("NFC_Amiibo_NTAG215"); + + MessageBox.Show("Please, put your "+ DeviceNFC + " on the reader!" + Environment.NewLine + "(Or remove and put it again)", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); + + textBox1.Text = i18n.__("NFC_Wait_NTAG"); + await Task.Run(() => { while (!NTAG_isHere()){} }); + textBox1.AppendText(i18n.__("NFC_Found_NTAG") + Environment.NewLine + Environment.NewLine); + + if (Action_Write) + { + string NTAG_Short_UID = Arduino.SendCommand("/GET_NTAG_UID"); + textBox1.AppendText(i18n.__("NFC_Short_UID") + " " + NTAG_Short_UID + Environment.NewLine); + + string NTAG_Long_UID = BitConverter.ToString(Amiibo_Class.Calculate_Long_UID(NTAG_Short_UID)).Replace("-", ""); + textBox1.AppendText(i18n.__("NFC_Long_UID") + " " + NTAG_Long_UID + Environment.NewLine + Environment.NewLine); + + byte[] Amiibo_Data = Amiibo_Class.Patch(File.ReadAllBytes(Current_File_Bin), NTAG_Long_UID); + textBox1.AppendText("\"" + Current_File_Bin + "\" " + i18n.__("NFC_Patched") + Environment.NewLine); + + if(checkBox1.Checked) Arduino.SendCommand("/WRITE_AMIIBO 1"); + else Arduino.SendCommand("/WRITE_AMIIBO 0"); + + string Result = Arduino.SendCommand(Amiibo_Data); + textBox1.AppendText("\"" + Current_File_Bin + "\" " + i18n.__("NFC_Send") + Environment.NewLine + Environment.NewLine); + + if (Result.Split('/', ' ')[1] == "ERROR") + textBox1.AppendText(i18n.__("NFC_Error") + " " + Result.Substring(1) + Environment.NewLine); + else if (Result.Split('/', ' ')[1] == "END_WRITE") + textBox1.AppendText(i18n.__("NFC_Amiibo_Ready") + Environment.NewLine); + else + textBox1.AppendText(i18n.__("NFC_Unknown_Response") + " " + Result + Environment.NewLine); + } + else + { + byte[] Amiibo_Dump = new byte[540]; + int i; + for(i = 0; i < 135; i++) + { + string Result = Arduino.SendCommand("/READ_AMIIBO " + i); + + string[] SplitResult = Result.Split('/', ' '); + + if (SplitResult.Length > 1) + { + if (Result.Split('/', ' ')[1] == "ERROR") + textBox1.AppendText(i18n.__("NFC_Error") + " " + Result.Substring(1) + Environment.NewLine); + else + textBox1.AppendText(i18n.__("NFC_Unknown_Response") + " " + Result + Environment.NewLine); + + i = 135; + } + else + { + textBox1.AppendText(i18n.__("NFC_Page_Readed", (i + 1)) + Environment.NewLine); + byte[] Buffer = Helper_Class.String_To_Byte_Array(Result); + Array.Copy(Buffer, 0, Amiibo_Dump, i * 4, Buffer.Length); + } + } + + if (i == 135) + { + textBox1.AppendText(i18n.__("NFC_Reading_Finished") + Environment.NewLine); + + SaveFileDialog saveFileDialog1 = new SaveFileDialog(); + saveFileDialog1.Filter = i18n.__("NFC_Save_Dump_Amiibo_Filter", "|*.bin"); + saveFileDialog1.Title = i18n.__("NFC_Save_Dump_Amiibo_Title"); + saveFileDialog1.InitialDirectory = Bin_Folder; + + byte[] Decrypted_Amiibo = Amiibo_Class.Decrypt(Amiibo_Dump, Main_Form.AmiiKeys); + string[] AmiiboLife_Info = AmiiboLife_Class.Get_Amiibo_Info(Amiibo_Class.Get_NFC_ID(Decrypted_Amiibo)); + byte[] UID = new byte[0x07]; + Array.Copy(Amiibo_Dump, 0, UID, 0, UID.Length); + + saveFileDialog1.FileName = ((AmiiboLife_Info[0].Trim() != "") ? AmiiboLife_Info[0].Trim().Replace(" ", "_") : BitConverter.ToString(UID).Replace("-", "")) + ".bin"; + + if (saveFileDialog1.ShowDialog(this.Parent) == DialogResult.OK && saveFileDialog1.FileName != "") + { + File.WriteAllBytes(saveFileDialog1.FileName, Amiibo_Dump); + MessageBox.Show(this, i18n.__("NFC_Save_Dump_Amiibo_Message"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + } + + Arduino.SendCommand("/NTAG_HALT"); + Arduino.Close(); + } + else + { + toolStripStatusLabel1.Text = i18n.__("NFC_No_Connected"); + MessageBox.Show(i18n.__("NFC_No_Connection"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); + } + + comboBox1.Enabled = true; + //comboBox2.Enabled = true; + checkBox1.Enabled = true; + button2.Enabled = true; + } + + private void Flash_Form_FormClosed(object sender, FormClosedEventArgs e) + { + if (Arduino != null) Arduino.Close(); + } + + private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) + { + if (Com_Loaded) + { + Arduino = new Arduino_Class(comboBox1.SelectedValue.ToString(), comboBox2.SelectedItem.ToString()); + if (Arduino.SendCommand("/AMII") == "BOMB") + { + toolStripStatusLabel4.Image = Properties.Resources.accept_button; + } + else + { + toolStripStatusLabel4.Image = Properties.Resources.cancel; + } + + Arduino.Close(); + } + } + } +} diff --git a/AmiiBomb/Flash_Form.resx b/AmiiBomb/Flash_Form.resx new file mode 100644 index 0000000..d171c75 --- /dev/null +++ b/AmiiBomb/Flash_Form.resx @@ -0,0 +1,1793 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + + 133, 17 + + + + + AAABAAUAEBAAAAAAIABoBAAAVgAAACAgAAAAACAAqBAAAL4EAAAwMAAAAAAgAKglAABmFQAAQEAAAAAA + IAAoQgAADjsAAICAAAAAACAAKAgBADZ9AAAoAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wH///8B////AQAAAAcAAAAHBAEA5wQBAP0EAQD9BAEA+wAAAAkAAAAH////Af// + /wH///8B////Af///wH///8B////AQAAAAsHAgD1CAIA/6s9AP+4QgD/uEIA/7hCAP8JAwD/CAIA/wIA + ABf///8B////Af///wH///8B////Af///wEAAADvtUEA/7pDAP+3QgD/t0IA/7dCAP+3QgD/uUMA/71E + AP8IAgD/AAAAB////wH///8B////Af///wEAAAADAQAA77JAAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+6QwD/CQMA/wAAAAn///8B////Af///wH///8BAAAA+60+AP+3QgL//Jll//6aZv/+mmb//ppm//6c + aP+9SQv/t0IA/7hCAP8EAQD7////Af///wH///8B////AQAAAP2sPQD/+5ll//+ZZP//m2f//5tn//+b + Z///mmb//51p/7pGBv+4QgD/BAEA/f///wH///8B////Af///wEAAAD9rD0A//uXYv/o7t///ppm//+b + Z///m2f//5tn//+caP+6Rgb/uEIA/wQBAP3///8B////Af///wH///8BAAAA+6w7AP/m6tz/6PHk/+jv + 4f//mmb//5tn//+bZ///nGj/ukYG/7hCAP8EAQD7////Af///wH///8B////AQAAAAMBAADvsT8B/+fu + 4P/+m2f//5tn//+bZ///m2f//Ztn/71HBv8JAwD/AAAACf///wH///8B////Af///wH///8BAAAA77RA + AP/9m2b//51o//+daP//nWj//59q/75JCf+9RAD/CAIA/wAAAAf///8B////Af///wH///8B////AQAA + AAsHAgD1CwYE/wsGBP8LBgT/CwYE/wsGBP8IAwD/CAIA/wIAABf///8B////Af///wH///8B////Af// + /wH///8BAAAABwAAAPkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAABf///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAD5AAAA/wAAAP8AAQL/AAAA/wAAAP8AAAAT////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAEQAAABcAAAD/Bjt2/wABAv8AAAAxAAAAA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAFwAAAP8GO3b/AAAA/wAAABP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAAHAAEC9wAAAP0AAAAR////Af// + /wH///8B////AQAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8oAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAA////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAzwAAAPsAAAD7AAAA+wAA + APsAAAD7AAAA+wAAAPkAAAAF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAsAAAANAAAADQAAAA0IAwDTCAMA/wgD + AP8IAwD/CAMA/wgDAP8IAwD/CAMA+wAAAA8AAAANAAAADQAAAA3///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA6QAAAP8AAAD/AAAA/545 + AP+6QwD/ukMA/7pDAP+6QwD/ukMA/7pDAP+5QgD/AgEA/wAAAP8AAAD/AAAA/wAAABf///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAEwAAABcPBQDrEAUA/xAF + AP8QBQD/nTgA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7ZBAP8RBgD/EAUA/xAFAP8QBQD/BAEAKQAA + ABf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADdAAAA/7NA + AP+9RAD/vUQA/71EAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7xEAP+9RAD/vUQA/8NG + AP8QBQD/AAAA/wAAAA3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AN0AAAD/rT4A/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/vUQA/xAFAP8AAAD/AAAADf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAA3QAAAP+tPgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+9RAD/EAUA/wAAAP8AAAAN////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAABQAAAAUCAADdAgEA/60+AP+3QgD/t0IB/7dCAf+3QgH/t0IB/7dCAf+3QgH/t0IB/7dC + Af+3QgH/t0IB/7dCAP+3QgD/t0IA/71EAP8SBgD/AgEA/wAAAA8AAAAF////Af///wH///8B////Af// + /wH///8B////Af///wEAAAD5AAAA+6Q7AP+2QQD/tkIA/7ZAAP/6mGT//ppm//6aZv/+mmb//ppm//6a + Zv/+mmb//ppm//6aZv/+nWn/wU8S/7dCAP+3QgD/t0IA/7ZBAP+5QgD/CAMA+wAAAPn///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPsAAAD/pTsA/7ZBAP+4QwT/t0IF//uZZP//m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+dav/DUBb/uEQF/7dCAP+3QgD/t0IA/7pDAP8IAwD/AAAA+/// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA+wAAAP+lOwD/tD4A//iXYv//nGj//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5pm//+caP//n2z/vkoN/7dCAP+3QgD/ukMA/wgD + AP8AAAD7////Af///wH///8B////Af///wH///8B////Af///wEAAAD7AAAA/6U7AP+0PwD/+JZh//+b + Z///mGL//5hi//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+eav++Sg3/t0IA/7dC + AP+6QwD/CAMA/wAAAPv///8B////Af///wH///8B////Af///wH///8B////AQAAAPsAAAD/pTsA/7Q/ + AP/4lmH//5ll/+nq2//p7N3//ptn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//55q/75K + Df+3QgD/t0IA/7pDAP8IAwD/AAAA+////wH///8B////Af///wH///8B////Af///wH///8BAAAA+wAA + AP+lOwD/tD8A//iVX///mGP/6O/i/+jx5P/+mmX//5ll//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///nmr/vkoN/7dCAP+3QgD/ukMA/wgDAP8AAAD7////Af///wH///8B////Af///wH///8B////Af// + /wEAAAD7AAAA/6U7AP+1PAD/5ePT/+jv4f/o8uT/6PLl/+jv4v/p7d///5ll//+bZ///m2f//5tn//+b + Z///m2f//5tn//+eav++Sg3/t0IA/7dCAP+6QwD/CAMA/wAAAPv///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPkAAAD7pDsA/7Q8AP/l5Nb/5/Hk/+fx5P/o8uX/6PHk/+jv4f//mWX//5tn//+b + Z///m2f//5tn//+bZ///m2f//55q/75KDf+3QgD/tkEA/7lCAP8IAwD7AAAA+f///wH///8B////Af// + /wH///8B////Af///wH///8BAAAABQAAAAUCAADdAgAA/60/A/+2PwP/5+zf/+jx5P/+m2j//ptn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///nmr/vkoN/71EAP8SBgD/AgEA/wAAAA8AAAAF////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAN0AAAD/rT4A/7Y/AP/n6tv/6O/h//6b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//Jlk//ucaP++Sg3/vUQA/xAFAP8AAAD/AAAADf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA3QAAAP+tPgD/tkAA//uX + Yv//mWX//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+dav/AThL/tkAA/7ZBAP+9RAD/EAUA/wAA + AP8AAAAN////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADdAAAA/7NA + AP+8QgD//J5n//+gav//oGr//6Bq//+gav//oGr//6Bq//+gav//oGr//6Nt/8dREv+9RAD/vUQA/8NG + AP8QBQD/AAAA/wAAAA3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + ABMAAAAXDwUA6w8FAP8VDQj/Fg0J/xYNCf8WDQn/Fg0J/xYNCf8WDQn/Fg0J/xYNCf8WDQn/EAYB/xAF + AP8QBQD/EAUA/wQBACkAAAAX////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADpAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAF////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAAsAAAANAAAA8wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAALQAAAA3///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADzAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAj////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPMAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAACP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA9QAA + AP8AAAD/AAAA/wAAAP8AAAD/AAIF/wADBv8AAAD/AAAA/wAAAP8AAAD/AAAAJf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAAhAAAAIwAAACMAAAArAAAA/wAAAP8GO3b/B0B+/wADBv8AAAD/AAAASQAAACMAAAAF////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAA0AAAD/AAAA/wY3bv8GO3b/AAIE/wAAAP8AAAA/AAAAFwAA + AAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABcAAAApAAAA/wAAAP8GOXH/Bjp0/wAB + Af8AAAD/AAAAJf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAABcAAAD/AAAA/wc9 + ef8HPnz/AAEB/wAAAP8AAAAj////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AA0AAAANAAIF8wADBf8AAAD/AAAA/wAAACP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADxAAAA+wAAAPsAAAD7AAAAI////wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAKAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAALcAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA9QAA + AAX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAALsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA+QAAAAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAABEAAAATAAAAEwAAABMAAAATAAAAEwwEAL0NBAD/DQQA/w0EAP8NBAD/DQQA/w0E + AP8NBAD/DQQA/w0EAP8NBAD/DQQA+wAAABUAAAATAAAAEwAAABMAAAATAAAAEwAAAAP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAN8AAAD/AAAA/wAAAP8AAAD/AAAA/5E0AP+7QwD/u0MA/7tD + AP+7QwD/u0MA/7tDAP+7QwD/u0MA/7tDAP+7QwD/ukMA/wMBAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ACP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAN0AAAD/AAAA/wAAAP8AAAD/AAAA/44z + AP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7dCAP+2QgD/t0IA/7dCAP+2QgD/tkEA/wMBAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAACH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABsAAAAhAAAAIRcIAOEXCAD/FwgA/xcI + AP8XCAD/FwgA/5E0AP+3QgD/tkIA/7ZBAP+3QgD/tkIA/7dCAP+2QgD/tkEA/7dCAP+2QgD/tkEA/xkJ + AP8XCAD/FwgA/xcIAP8XCAD/GQkA/wcCADsAAAAhAAAAIQAAAAP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/7A/ + AP/ARQD/wEUA/8BFAP/ARQD/wEUA/7hCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7ZBAP+3QgD/tkEA/7ZB + AP+3QgD/tkIA/79FAP/ARQD/v0UA/79FAP/ARQD/yUgA/xkJAP8AAAD/AAAA/wAAABX///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AM0AAAD/AAAA/6g8AP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7dC + AP+2QgD/t0IA/7dCAP+2QgD/t0IA/7dCAP+2QgD/t0IA/7dCAP+2QgD/wEUA/xcIAP8AAAD/AAAA/wAA + ABP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAM0AAAD/AAAA/6g8AP+3QgD/tkIA/7ZBAP+3QgD/tkIA/7ZBAP+3QgD/tkIA/7ZB + AP+3QgD/tkIA/7dCAP+2QgD/tkEA/7dCAP+2QgD/tkEA/7dCAP+2QgD/tkEA/7dCAP+2QgD/v0UA/xcI + AP8AAAD/AAAA/wAAABP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAM0AAAD/AAAA/6g8AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7ZBAP+3QgD/tkEA/7ZBAP+3QgD/tkEA/7ZBAP+3QgD/tkEA/7ZB + AP+3QgD/v0UA/xcIAP8AAAD/AAAA/wAAABP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM0AAAD/AAAA/6g8AP+3QgD/t0IA/7ZC + AP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7dCAP+2QgD/t0IA/7dCAP+2QgD/t0IA/7dC + AP+2QgD/t0IA/7dCAP+2QgD/wEUA/xcIAP8AAAD/AAAA/wAAABP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAcAAAAHAAAABwMBAM0DAQD/AwEA/6g8 + AP+3QgD/tkIA/7dCAv+3QgL/t0IC/7dCAv+3QgL/t0IC/7dCAv+3QgL/t0IC/7dCAv+3QgL/t0IC/7dC + Av+3QgL/t0IC/7dCAP+2QgD/tkEA/7dCAP+2QgD/v0UA/xoJAP8DAQD/AwEA/wAAABcAAAAHAAAAB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPUAAAD5AAAA+Zs3 + AP22QQD/tkEA/7ZCAP+3QgD/tUAA//iXYv/9mmb//Zpm//2aZv/9mmb//Zpm//2aZv/9mmb//Zpm//2a + Zv/9mmb//Zpm//2aZv/9mmb//Z5r/8ZVG/+3QgD/tkEA/7ZBAP+3QgD/tkIA/7ZBAP+2QQD/ukMA/w0E + APsAAAD5AAAA9f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APkAAAD/AAAA/5w4AP+3QgD/t0IA/7ZCAP+3QgD/tUAA//mYY///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZv//m2f//5tn//+bZv//m2f//59r/8dVG/+2QgD/t0IA/7dCAP+2QgD/t0IA/7dC + AP+2QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/tkEA/7lEBv+5RAf/uEMH//qXY//+mmf//ppm//6a + Zv/+mmf//ppm//6aZv/+mmf//ppm//6bZv//mmb//ppm//6bZv//mmb//p5r/8lYIP+5RAf/uUUH/7dC + Af+2QgD/tkEA/7dCAP+2QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/sz0A//aVYP//nGn//p1p//6a + Z///m2f//ptm//6aZ///m2f//ptm//6aZ///m2f//ptm//6aZv//m2f//ppm//6aZv//m2f//ppm//6c + aP//nGn//qFv/8JPFf+3QgD/tkEA/7ZBAP+3QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/sz0A//WT + Xv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZv//m2f//5tn//+b + Zv//m2f//5tn//+bZv//m2f//59s/8FPFP+2QgD/t0IA/7dCAP+2QgD/u0MA/w0EAP8AAAD/AAAA+f// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4 + AP+3QgD/sz0A//WTXv/+mmf//ptn//6WYP/+lmD//pZg//6aZv/+mmf//ppm//6aZv/+mmf//ppm//6b + Zv//mmb//ppm//6bZv//mmb//ppm//6bZv//mmb//p9s/8FPFP+2QgD/tkEA/7dCAP+2QgD/u0MA/w0E + AP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APkAAAD/AAAA/5w4AP+3QgD/sz0A//WTXv//m2f//plk/+rn1v/p69r/6era//6bZ///m2f//ptm//6a + Z///m2f//ptm//6aZv//m2f//ppm//6aZv//m2f//ppm//6aZv//m2f//p9s/8FPFP+3QgD/tkEA/7ZB + AP+3QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/sz0A//WTXv//m2f//5lk/+ju4P/o8uX/6PHk//6b + Z///m2f//5tn//+bZ///m2f//5tn//+bZv//m2f//5tn//+bZv//m2f//5tn//+bZv//m2f//59s/8FP + FP+2QgD/t0IA/7dCAP+2QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/sz0A//WSXP/+mWT//pdg/+ju + 4P/n8uT/5/Hk//6ZZP/+mWT//plk//6aZv/+mmf//ppm//6bZv//mmb//ppm//6bZv//mmb//ppm//6b + Zv//mmb//p9s/8FPFP+2QgD/tkEA/7dCAP+2QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/tDkA/+Tb + yv/o7uD/6O7g/+jx5P/o8uX/6PHl/+ju4P/o7uD/6erc//6ZZP//m2f//ptm//6aZv//m2f//ppm//6a + Zv//m2f//ppm//6aZv//m2f//p9s/8FPFP+3QgD/tkEA/7ZBAP+3QgD/u0MA/w0EAP8AAAD/AAAA+f// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4 + AP+3QgD/tDkA/+Tg0P/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6O7g//+ZZP//m2f//5tn//+b + Zv//m2f//5tn//+bZv//m2f//5tn//+bZv//m2f//59s/8FPFP+2QgD/t0IA/7dCAP+2QgD/u0MA/w0E + AP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APUAAAD5AAAA+Zs3AP22QQD/szkA/+Pezv/n8OP/5/Dj/+fx5P/n8uT/5/Lk/+fx5P/n8eT/6O7f//6Z + Y//+mmf//ppm//6bZv//mmb//ppm//6bZv//mmb//ppm//6bZv//mmb//p9s/8FPFP+2QgD/tkIA/7ZB + AP+2QQD/ukMA/w0EAPsAAAD5AAAA9f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAcAAAAHAAAABwMBAM0DAQD/AwEA/6g9BP+3QwT/tj4E/+bq3P/o8uX/5/Hk//6b + aP/+m2f//ptn//6bZv//m2f//5pm//6bZ///m2f//ptm//6bZ///m2f//ptm//6bZ///m2f//p9s/8FP + FP+3QgD/wEUA/xoJAP8DAQD/AwEA/wAAABcAAAAHAAAAB////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM0AAAD/AAAA/6g8AP+3QgD/tT0A/+bq + 3P/n8uX/6PHk//6bZ///m2b//5tn//+bZ///m2b//5tn//+bZ///m2f//5tm//+bZ///m2f//5tm//+b + Z///m2f//59s/8FPFP+3QgD/wEUA/xcIAP8AAAD/AAAA/wAAABP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM0AAAD/AAAA/6g8 + AP+3QgD/tT0A/+bl1v/o7uD/6O7f//6bZ///m2f//ptn//6aZ///m2f//ptn//6bZ///m2f//ptn//6b + Z///m2f//ptn//uYZP/5mGP/+Zxo/8FOE/+2QgD/v0UA/xcIAP8AAAD/AAAA/wAAABP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AM0AAAD/AAAA/6g8AP+3QgD/tUAA//mWYP//mWT//5lk//6bZv//m2f//5pm//6bZv//m2f//5pm//6b + Z///m2f//ptm//6bZ///m2f//p9s/8VUG/+1QAD/tT8A/7ZBAP+3QgD/wEUA/xcIAP8AAAD/AAAA/wAA + ABP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAM0AAAD/AAAA/6g8AP+3QgD/tUAA//mYY///m2b//5tn//+bZ///m2b//5tn//+b + Z///m2b//5tn//+bZ///m2f//5tm//+bZ///m2f//59r/8dVG/+3QgD/t0IA/7dCAP+3QgD/wEUA/xcI + AP8AAAD/AAAA/wAAABP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/7A/AP/ARQD/vkMA//ufaP//omz//qJs//6i + bP//omz//qJs//6ibP//omz//qJs//6ibP//omz//qJs//6ibP//omz//qdx/89aHP/ARQD/wEUA/8BF + AP/ARQD/yUgA/xkJAP8AAAD/AAAA/wAAABX///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABsAAAAjAAAAIxcIAOEYCAD/FwgA/yAT + DP8hFA3/IRQN/yEUDf8hFA3/IRQN/yEUDf8hFA3/IRQN/yEUDf8hFA3/IRQN/yEUDf8hFA3/IRQO/xoL + A/8YCAD/GAgA/xgIAP8YCAD/GQkA/wcCADsAAAAjAAAAIwAAAAP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AN0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAACH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAN8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAACP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAABEAAAATAAAAEwAAAO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEEAAAATAAAAEwAA + AAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAO0AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ADP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAADP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAECP8ABAj/AAQJ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADf///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAADEAAAAzAAAAMwAA + ADMAAAAzAAAAPwAAAP8AAAD/AAAA/wY6c/8HP33/BkGA/wAECf8AAAD/AAAA/wAAAGkAAAAzAAAAMwAA + AAv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAEwAAAP8AAAD/AAAA/wY5cf8HPnv/Bz99/wAECP8AAAD/AAAA/wAA + AEX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAFQAAAP8AAAD/AAAA/wY0aP8GOXH/Bjpz/wAD + Bv8AAAD/AAAA/wAAAFsAAAAhAAAAIQAAAAf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAACEAAAAjAAAAOwAA + AP8AAAD/AAAA/wY2bP8GOXH/Bjhw/wABAv8AAAD/AAAA/wAAADf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAIQAAAP8AAAD/AAAA/wc7dv8HPnv/Bz16/wABAv8AAAD/AAAA/wAAADP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAIwAAAP8AAAD/AAAA/wc9ef8HP33/Bj59/wABAv8AAAD/AAAA/wAA + ADP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAABMAAAATAAAAEwAECO0ABAn/AAQI/wAA + AP8AAAD/AAAA/wAAADP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAOkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAADP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//ygA + AABAAAAAgAAAAAEAIAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAChAAAA9wAAAPcAAAD3AAAA9wAAAPcAAAD3AAAA9wAAAPcAAAD3AAAA9wAA + APcAAAD3AAAA9wAAAPcAAADzAAAAB////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAowAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA9wAAAAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAKMAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPcAAAAH////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAFQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAA + ABkQBQCpEQYA/xEGAP8RBgD/EQYA/xEGAP8RBgD/EQYA/xEGAP8RBgD/EQYA/xEGAP8RBgD/EQYA/xEG + AP8RBgD5AQAAGwAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAF////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAANUAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/hC8A/71EAP+9RAD/vUQA/71EAP+9RAD/vUQA/71EAP+9RAD/vUQA/71E + AP+9RAD/vUQA/71EAP+9RAD/vEMA/wUCAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAL/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADTAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4AuAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7ZBAP8FAgD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAC3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA0wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+ALgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+2QQD/BQIA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAt////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAIQAAAC0AAAAtAAAALR4LANcgCwD/IAsA/yALAP8gCwD/IAsA/yAL + AP8gCwD/hjAA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/tkEA/yEMAP8gCwD/IAsA/yALAP8gCwD/IAsA/yALAP8iDAD/CgMASwAAAC0AAAAtAAAALQAA + AAX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAL8AAAD/AAAA/wAAAP+uPwD/w0YA/8NG + AP/DRgD/w0YA/8NGAP/DRgD/w0YA/7pDAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/CRgD/w0YA/8NGAP/DRgD/w0YA/8NGAP/DRgD/z0sA/yIM + AP8AAAD/AAAA/wAAAP8AAAAb////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAC7AAAA/wAA + AP8AAAD/ozsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/8NGAP8gCwD/AAAA/wAAAP8AAAD/AAAAGf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAuwAAAP8AAAD/AAAA/6M7AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/DRgD/IAsA/wAAAP8AAAD/AAAA/wAAABn///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAALsAAAD/AAAA/wAAAP+jOwD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/w0YA/yALAP8AAAD/AAAA/wAA + AP8AAAAZ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAC7AAAA/wAAAP8AAAD/ozsA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/8NG + AP8gCwD/AAAA/wAAAP8AAAD/AAAAGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAuwAA + AP8AAAD/AAAA/6M7AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP/DRgD/IAsA/wAAAP8AAAD/AAAA/wAAABn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAALsAAAD/AAAA/wAAAP+jOwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/w0YA/yALAP8AAAD/AAAA/wAAAP8AAAAZ////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAcAAAAHAAAABwAAAAcEAQC7BQIA/wUCAP8FAgD/ozoA/7dCAP+3QgD/t0IA/7dC + Av+3QgP/t0ID/7dCA/+3QgP/t0ID/7dCA/+3QgP/t0ID/7dCA/+3QgP/t0ID/7dCA/+3QgP/t0ID/7dC + A/+3QgP/t0ID/7dCA/+3QgP/t0IB/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/8NGAP8jDAD/BQIA/wUC + AP8FAgD/AQAAHQAAAAcAAAAHAAAAB////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADzAAAA9wAAAPcAAAD3kjQA/bZBAP+2QQD/tkEA/7ZC + AP+3QgD/t0IA/7U/AP/2lmH//Zpm//2aZv/9mmb//Zpm//2aZv/9mmb//Zpm//2aZv/9mmb//Zpm//2a + Zv/9mmb//Zpm//2aZv/9mmb//Zpm//2aZv/9mmb//Z9s/8xcJP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/tkEA/7ZBAP+2QQD/u0MA/xEGAPkAAAD3AAAA9wAAAPP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA9wAAAP8AAAD/AAAA/5M1 + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+1PwD/+Jdi//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+gbf/MXCT/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/71EAP8RBgD/AAAA/wAAAP8AAAD3////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APcAAAD/AAAA/wAAAP+TNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/tT8A//iXYv//m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///oG3/zFwk/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+9RAD/EQYA/wAA + AP8AAAD/AAAA9////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAD3AAAA/wAAAP8AAAD/kzUA/7dCAP+3QgD/tkEA/7lFCf+6Rgr/ukYK/7hD + Cv/4l2L//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//6Bt/85fKv+6Rgr/ukYK/7pGCv+3QgL/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/vUQA/xEGAP8AAAD/AAAA/wAAAPf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA9wAAAP8AAAD/AAAA/5M1AP+3QgD/t0IA/7E7 + AP/zk17//51q//+dav//nWr//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+aZv//nWn//51q//+dav//pHH/xVQc/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/71EAP8RBgD/AAAA/wAAAP8AAAD3////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPcAAAD/AAAA/wAA + AP+TNQD/t0IA/7dCAP+yPAD/8pFc//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//6Fu/8VTG/+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+9RAD/EQYA/wAAAP8AAAD/AAAA9/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAD3AAAA/wAAAP8AAAD/kzUA/7dCAP+3QgD/sjwA//KRXP//m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+hbv/FUxv/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/vUQA/xEG + AP8AAAD/AAAA/wAAAPf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA9wAAAP8AAAD/AAAA/5M1AP+3QgD/t0IA/7I8AP/ykVz//5tn//+b + Z///m2f//5Vf//+VXv//lV7//5Ve//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///oW7/xVMb/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/71EAP8RBgD/AAAA/wAAAP8AAAD3////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPcAAAD/AAAA/wAAAP+TNQD/t0IA/7dC + AP+yPAD/8pFc//+bZ///m2f//5hj/+vj0f/q6df/6unX/+rn1v/+m2j//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6Fu/8VT + G/+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+9RAD/EQYA/wAAAP8AAAD/AAAA9////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAD3AAAA/wAA + AP8AAAD/kzUA/7dCAP+3QgD/sjwA//KRXP//m2f//5tn//+YY//p7d//6PLl/+jy5f/o8eT//pto//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+hbv/FUxv/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/vUQA/xEGAP8AAAD/AAAA/wAA + APf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAA9wAAAP8AAAD/AAAA/5M1AP+3QgD/t0IA/7I8AP/ykVz//5tn//+bZ///mGP/6e3f/+jy + 5f/o8uX/6PHk//6baP//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///oW7/xVMb/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/71E + AP8RBgD/AAAA/wAAAP8AAAD3////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPcAAAD/AAAA/wAAAP+TNQD/t0IA/7dCAP+yPAD/8o9Y//+Y + Y///mGP//5Vf/+nt3//o8uX/6PLl/+jx5P/+mWT//5hj//+YY///mGP//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6Fu/8VTG/+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+9RAD/EQYA/wAAAP8AAAD/AAAA9////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAD3AAAA/wAAAP8AAAD/kzUA/7dC + AP+3QgD/szYA/+PUwf/p7d//6e3f/+nt3v/o8uT/6PLl/+jy5f/o8uX/6e3f/+nt3//p7d//6ujZ//+Y + Y///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+h + bv/FUxv/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/vUQA/xEGAP8AAAD/AAAA/wAAAPf///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA9wAA + AP8AAAD/AAAA/5M1AP+3QgD/t0IA/7M2AP/j2sr/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+nt3///mGP//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///oW7/xVMb/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/71EAP8RBgD/AAAA/wAA + AP8AAAD3////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPcAAAD/AAAA/wAAAP+TNQD/t0IA/7dCAP+zNgD/49rK/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/p7d///5hj//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6Fu/8VTG/+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+9RAD/EQYA/wAAAP8AAAD/AAAA9////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADzAAAA9wAAAPcAAAD3kjQA/bZBAP+2QQD/sjYA/+LX + xv/n8OP/5/Dj/+fw4//n8eT/6PLl/+jy5f/o8uX/6PHk/+jx5P/o8eT/6e3e//+YY///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+hbv/FUxv/t0IA/7dC + AP+3QgD/tkEA/7ZBAP+2QQD/u0MA/xEGAPkAAAD3AAAA9wAAAPP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAABwAAAAcAAAAHAAAABwQB + ALsFAgD/BQIA/wUBAP+kPAX/t0MG/7dDBv+2PQb/5ufa/+jy5f/o8uX/6PHk//6caf/+m2j//pto//6b + aP//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///oW7/xVMb/7dCAP+3QgD/w0YA/yMMAP8FAgD/BQIA/wUCAP8BAAAdAAAABwAAAAcAAAAH////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAC7AAAA/wAAAP8AAAD/ozsA/7dCAP+3QgD/tTwA/+bn2v/o8uX/6PLl/+jx + 5P/+m2j//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//6Fu/8VTG/+3QgD/t0IA/8NGAP8gCwD/AAAA/wAAAP8AAAD/AAAAGf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAuwAAAP8AAAD/AAAA/6M7AP+3QgD/t0IA/7U8 + AP/m59r/6PLl/+jy5f/o8eT//pto//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+hbv/FUxv/t0IA/7dCAP/DRgD/IAsA/wAA + AP8AAAD/AAAA/wAAABn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAALsAAAD/AAAA/wAA + AP+jOwD/t0IA/7dCAP+1PAD/5uHR/+nt3//p7d//6e3e//6baP//m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ//6mGP/+Jdi//iXYv/4nWn/xFMa/7dC + AP+3QgD/w0YA/yALAP8AAAD/AAAA/wAAAP8AAAAZ////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAC7AAAA/wAAAP8AAAD/ozsA/7dCAP+3QgD/tT8A//iUXv//mGP//5hj//+YY///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///oG3/y1ok/7U/ + AP+1PwD/tT8A/7ZBAP+3QgD/t0IA/8NGAP8gCwD/AAAA/wAAAP8AAAD/AAAAGf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAuwAAAP8AAAD/AAAA/6M7AP+3QgD/t0IA/7U/AP/4l2L//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//6Bt/8xcJP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/DRgD/IAsA/wAAAP8AAAD/AAAA/wAA + ABn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAALsAAAD/AAAA/wAAAP+jOwD/t0IA/7dC + AP+1PwD/+Jdi//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+gbf/MXCT/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/w0YA/yAL + AP8AAAD/AAAA/wAAAP8AAAAZ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAC/AAAA/wAA + AP8AAAD/rj8A/8NGAP/DRgD/wUMA//uhaP//pW7//6Vu//+lbv//pW7//6Vu//+lbv//pW7//6Vu//+l + bv//pW7//6Vu//+lbv//pW7//6Vu//+lbv//pW7//6Vu//+lbv//q3T/12In/8NGAP/DRgD/w0YA/8NG + AP/DRgD/w0YA/89LAP8iDAD/AAAA/wAAAP8AAAD/AAAAG////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAIQAAAC0AAAAtAAAALR4LANcgCwD/IAsA/x8LAP8rGhH/LBsS/ywbEv8sGxL/LBsS/ywb + Ev8sGxL/LBsS/ywbEv8sGxL/LBsS/ywbEv8sGxL/LBsS/ywbEv8sGxL/LBsS/ywbEv8sGxL/LBwT/yMQ + Bv8gCwD/IAsA/yALAP8gCwD/IAsA/yALAP8iDAD/CgMASwAAAC0AAAAtAAAALQAAAAX///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADTAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAC3///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA0wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAAt////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAANUAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAL////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAVAAAAGQAAABkAAAAZAAAA5wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAVQAAABkAAAAZAAAAGQAAAAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AOcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADnAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABF////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA5wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAARf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAOcAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEX///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADnAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABF////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA5wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAARf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAO8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAFCv8ABgz/AAYM/wAGDP8AAAH/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAEn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAA/AAAARQAA + AEUAAABFAAAARQAAAEUAAABFAAAATwAAAP8AAAD/AAAA/wAAAP8GOXH/B0B+/wdAfv8HQoL/AAYM/wAA + AP8AAAD/AAAA/wAAAIUAAABFAAAARQAAAEUAAAAT////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABkAAAD/AAAA/wAAAP8AAAD/Bjdu/wc+ + e/8HPnv/B0B+/wAGDP8AAAD/AAAA/wAAAP8AAABb////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAAZAAAA/wAA + AP8AAAD/AAAA/wY3bv8HPnv/Bz57/wdAfv8ABgz/AAAA/wAAAP8AAAD/AAAAW////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAGwAAAP8AAAD/AAAA/wAAAP8FMWL/Bjdu/wY3bv8GOXH/AAMH/wAAAP8AAAD/AAAA/wAA + AHUAAAAtAAAALQAAAC0AAAAN////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAAUAAAAtAAAALQAAAC0AAABLAAAA/wAAAP8AAAD/AAAA/wY0 + aP8GN27/Bjdu/wY3bf8AAgP/AAAA/wAAAP8AAAD/AAAASf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAALQAA + AP8AAAD/AAAA/wAAAP8HO3X/Bz57/wc+e/8HPXr/AAID/wAAAP8AAAD/AAAA/wAAAEX///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAC0AAAD/AAAA/wAAAP8AAAD/Bzt1/wc+e/8HPnv/Bz16/wACA/8AAAD/AAAA/wAA + AP8AAABF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAvAAAA/wAAAP8AAAD/AAAA/wc8eP8HQH7/B0B+/wc/ + ff8AAgP/AAAA/wAAAP8AAAD/AAAARf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAABQAAABkAAAAZAAAAGQAA + ABkABQvnAAYM/wAGDP8ABgv/AAAA/wAAAP8AAAD/AAAA/wAAAEX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA5wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABF////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAOcAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAARf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADjAAAA9wAA + APcAAAD3AAAA9wAAAPcAAAD3AAAA9wAAAEX///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAoAAAAgAAAAAABAAABACAAAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAA////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAARQAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAA + APEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAA + APEAAADxAAAA8QAAAOMAAAAN////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAABNAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+wAAAA////8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAEkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADxAAAAD////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAASQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPEAAAAP////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAABJAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA8QAAAA////8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAEkAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADxAAAAD/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAANwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAACEAAAAxAAAAMQAA + ADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEKBABtJw4A/yMN + AP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMN + AP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8lDQD/IQwA9QIB + AD0AAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAA + ADEAAAAR////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAsQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/zgUAP/YTgD/wkYA/8JGAP/CRgD/wkYA/8JGAP/CRgD/wkYA/8JG + AP/CRgD/wkYA/8JGAP/CRgD/wkYA/8JGAP/CRgD/wkYA/8JGAP/CRgD/wkYA/8JGAP/CRgD/wkYA/8JG + AP/CRgD/wkYA/8JGAP/CRgD/wkYA/8tJAP+3QgD/CwQA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAF////8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAACnAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/NRMA/81K + AP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hC + AP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/wEUA/64+ + AP8KBAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAWf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAKcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP81EwD/zEoA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+/RQD/rT4A/woEAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABZ////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAApwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zUT + AP/MSgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/79F + AP+tPgD/CgQA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAFn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAACnAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/NRMA/8xKAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/v0UA/60+AP8KBAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAWf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AKcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP81EwD/zEoA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+/RQD/rT4A/woEAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAABZ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAmwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMNAP/PSwD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/8BFAP+sPQD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAKQAAAFkAAABZAAAAWQAAAFkAAABZAAAAWQAA + AFkpDwDFSRoA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AX + AP9AFwD/YiMA/8VHAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/vEQA/7A/AP9GGgD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AX + AP9AFwD/QBcA/0AXAP9IGgD/FggAkwAAAFkAAABZAAAAWQAAAFkAAABZAAAAWQAAAFkAAAAR////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAACHAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4cxAP/sVQD/z0sA/89LAP/PSwD/z0sA/89L + AP/PSwD/z0sA/89LAP/PSwD/z0sA/89LAP/PSwD/z0sA/89LAP/ISAD/tEEA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+2QgD/uEMA/85KAP/PSwD/z0sA/89L + AP/PSwD/z0sA/89LAP/PSwD/z0sA/89LAP/PSwD/z0sA/89LAP/PSwD/z0sA/+pVAP9IGgD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADn///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAMf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/3crAP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/89LAP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ADH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dysA/9BLAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AX + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAMf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAdwAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAAx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3crAP/QSwD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/89L + AP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAB3AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/3crAP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/89LAP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAADH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dysA/9BL + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAMf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAdwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3cr + AP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/89LAP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAcQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP90KgD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7U/AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+ + AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+ + AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+ + AP+0PgD/tD4A/7Q+AP+1PwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP/QSwD/OxUA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAp////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAA + AA8FAgB/DAQA/woEAP8KBAD/CgQA/woEAP8KBAD/CgQA/3ssAP/PSgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/ukYF/7tIBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tH + Bv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tH + Bv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0gH/7pGBP+3QQD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/85KAP9HGQD/CgQA/woE + AP8KBAD/CgQA/woEAP8KBAD/CwQA/wIBAD0AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAP////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADjAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8VAdAPfFRwD/rT4A/60+AP+tPgD/rT4A/60+ + AP+tPgD/s0EA/7hDAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7M9AP/uhk7/+55r//uWYf/7lmH/+5Zh//uW + Yf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uW + Yf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uW + Yf/7lmH/+5Zh//uWYf/7oG3/531F/685AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/uEMA/7BAAP+tPgD/rT4A/60+AP+tPgD/rT4A/64+AP+3QgD/IQwA8wAA + APEAAADxAAAA8QAAAPEAAADxAAAA8QAAAOP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPsAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/WSAA/9pOAP+/RQD/v0UA/79FAP+/RQD/v0UA/79FAP+6QwD/tkIA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/sz0A//ONVv//qHb//59r//+fa///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+f + a///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+f + a///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+qef/shEz/rzgA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+2QgD/vEQA/79F + AP+/RQD/v0UA/79FAP+/RQD/wEUA/8pJAP8kDgD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+zPQD/8YpT//+kcf//m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//6Z0/+qBSf+vOAD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMN + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7M9AP/xilP//6Rx//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///pnT/6oFJ/684 + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + APH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/sz0A//GKU///pHH//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+mdP/qgUn/rzgA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JG + AP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+zPQD/8YpT//+kcf//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6Z0/+qB + Sf+vOAD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAADx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+4QwD/sjwA/7A4AP+wOQD/sDkA/7A5AP+wOQD/sDkA/6w0AP/wiFH//6Vy//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///p3X/6H5G/6cuAP+wOQD/sDkA/7A5AP+wOQD/sDkA/7A4 + AP+zPQD/uEMA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hC + AP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7VAAP/ATQ3/xVUX/8VT + FP/FUxT/xVMU/8VTFP/FUxT/wk8U//SNV///om///5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+k + cf/uhk//vksU/8VTFP/FUxT/xVMU/8VTFP/FUxT/xVYX/79LC/+1PwD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/rDUA/+l/R///rXz//6Bt//+gbf//oG3//6Bt//+gbf//oW3//5xo//+a + Zv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5pm//+daf//oW3//6Bt//+gbf//oG3//6Bt//+g + bf//rn3/4HU6/6w0AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+tNgD/5nxD//+n + df//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FL + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/602AP/mfEP//6d1//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/rTYA/+Z8 + Q///p3X//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1Uf + AP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+tNgD/5nxD//+ndf//m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/602 + AP/mfEP//6d1//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/rTYA/+Z8Q///p3X//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+tNgD/5nxD//+ndf//m2f//5tn//+bZ///m2f//5tn//+caP//kln//45V//+PVv//j1b//49W//+P + Vv//j1b//5BX//+aZv//nGj//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/602AP/mfEP//6d1//+bZ///m2f//5tn//+b + Z///m2f//5hi//PJqf/v2cH/8NS5//DUuf/w1Ln/8NS5/+/WvP/x0LX//p5s//+YZP//m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8f// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/rTYA/+Z8Q///p3X//5tn//+bZ///m2f//5tn//+bZ///lV7/6evb/+P////l/vb/5f72/+X+ + 9v/l/vb/5P/8/+b47v/+oW///5Zh//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601 + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMN + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+tNgD/5nxD//+ndf//m2f//5tn//+b + Z///m2f//5tn//+WX//s4c3/5vrx/+jy5f/o8uX/6PLl/+jy5f/n9ur/6e3e//6gbv//l2L//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + APH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/602AP/mfEP//6d1//+bZ///m2f//5tn//+bZ///m2f//5Zf/+zhzf/m+vH/6PLl/+jy + 5f/o8uX/6PLl/+f26v/p7d7//qBu//+XYv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95y + N/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JG + AP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/rTYA/+Z8Q///p3X//5tn//+b + Z///m2f//5tn//+bZ///ll//7OHN/+b68f/o8uX/6PLl/+jy5f/o8uX/5/bq/+nt3v/+oG7//5di//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAADx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+tNgD/5nxD//+ndf//m2f//5tn//+bZ///m2f//5tn//+WX//s4c3/5vrx/+jy + 5f/o8uX/6PLl/+jy5f/n9ur/6e3e//6gbv//l2L//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+o + dv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hC + AP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/602AP/mfEP//6d1//+b + Z///m2f//5tn//+bZ///m2f//5Zf/+zhzf/m+vH/6PLl/+jy5f/o8uX/6PLl/+f26v/p7d7//qBu//+X + Yv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/rTcA/+d5Pv//om3//5Zf//+WX///ll///5Zf//+WX///kFf/7ODM/+b6 + 8v/o8uX/6PLl/+jy5f/o8uX/5/bq/+nt3v//m2f//5Ja//+WX///ll///5Zf//+WX///lV///5dh//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///qHb/3nI3/601AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+vLQD/2qqF//Lu + 5P/s4c3/7OHN/+zhzf/s4c3/7OHN/+zgy//p7+D/6PTn/+jy5f/o8uX/6PLl/+jy5f/o8+b/6PHk/+zi + zv/s4Mz/7OHN/+zhzf/s4c3/7OHN/+vo1v/w07n//5dh//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FL + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7AqAP/Wup3/7f///+b68f/m+vH/5vrx/+b68f/m+vH/5vvy/+j0 + 5//o8eT/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8ub/5vrw/+b78v/m+vH/5vrx/+b68f/m+vH/5P/+/+ro + 1///ll7//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/sCsA/9e1 + lf/v////6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/m+vH/7OHN//+WX///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1Uf + AP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+wKwD/17WV/+/////o8uX/6PLl/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+b6 + 8f/s4c3//5Zf//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7Ar + AP/XtZX/7////+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/5vrx/+zhzf//ll///5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/sCsA/9e1lf/v////6PLl/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy + 5f/m+vH/7OHN//+WX///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAD7AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1kgAP/aTgD/v0UA/79FAP+/RQD/v0UA/79F + AP+3LQD/27ub//D////q+e//6vnv/+r57//q+e//6vnv/+r67//o8+f/6PHk/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+f16v/n9ur/5/bq/+f26v/n9ur/5/bq/+X+9//r5NH//5Zf//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/tkIA/7xEAP+/RQD/v0UA/79FAP+/RQD/v0UA/8BFAP/KSQD/JA4A/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAOMAAADxAAAA8QAAAPEAAADxAAAA8QAA + APEAAADxUB0A98VHAP+tPgD/rT4A/60+AP+tPgD/rT4A/6YpAP/SrY3/7fXx/+Xo2P/l6Nj/5ejY/+Xo + 2P/l6Nj/5efY/+fw4v/o8+b/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6e3e/+nt3v/p7d7/6e3e/+nt + 3v/p7d7/5/Xp/+3dx///ll///5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QwD/sEAA/60+ + AP+tPgD/rT4A/60+AP+tPgD/rj4A/7dCAP8hDADzAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA4/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8FAgB/DAQA/woEAP8KBAD/CgQA/woE + AP8KBAD/CgIA/3wzCP/SVQ7/ukwN/7pMDf+6TA3/ukwN/7pLDf+3Qg3/4NK8/+3++v/o8uX/6PLl/+jy + 5f/o8uX/5/bq/+nt3v/9pXX//pxp//6gbv/+oG7//qBu//6gbv/+oG///p9t//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601 + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/85KAP9HGQD/CgQA/woEAP8KBAD/CgQA/woEAP8KBAD/CwQA/wIB + AD0AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAHEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/cyUA/89EAP+1OwD/tTsA/7U7 + AP+1OwD/tToA/7IvAP/fz7f/7f/8/+jy5f/o8uX/6PLl/+jy5f/n9ur/6e3e//+daf//k13//5di//+X + Yv//l2L//5di//+XYf//mGP//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/0EsA/zsV + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAKf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAdwAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dCAP+3QQD/tDcA/9/Quf/t//v/6PLl/+jy + 5f/o8uX/6PLl/+f26v/p7d7//qBu//+XYv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95y + N/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAAx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3crAP/QSwD/t0IA/7dC + AP+3QgD/t0IA/7dBAP+0NwD/39C5/+3/+//o8uX/6PLl/+jy5f/o8uX/5/bq/+nt3v/+oG7//5di//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dCAP+3QgD/t0IA/89L + AP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0EA/7Q3AP/f0Ln/7f/7/+jy + 5f/o8uX/6PLl/+jy5f/n9ur/6e3e//6gbv//l2L//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+o + dv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dC + AP+3QgD/t0IA/7dCAP+3QQD/tDcA/9/Quf/t//v/6PLl/+jy5f/o8uX/6PLl/+f26v/p7d7//qBu//+X + Yv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dC + AP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAB3AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/3crAP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dBAP+0NgD/3dfD/+v/ + ///m+vH/5vrx/+b68f/m+vH/5f/3/+f16f/+oG///5di//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5pm//+eav//pXH//6Rx//+kcf//pHH//6Rx//+k + cf//soH/4nc8/6w0AP+3QgD/t0IA/7dCAP+3QgD/t0IA/89LAP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAADH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dysA/9BL + AP+3QgD/t0IA/7dCAP+3QgD/t0EA/7Q4AP/iwqX/8O3g/+zhzf/s4c3/7OHN/+zhzf/s5NH/7d3H//6f + bf//mGP//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///nWn/+5Zh//CIU//xilP/8YpT//GKU//xilP/8YpT//GUX//WaSz/rzgA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAMf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAdwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/sz0A//KG + Tf//n2n//5Zf//+WX///ll///5Zf//+WX///lmD//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+ndf/pf0f/qjIA/7M9AP+zPQD/sz0A/7M9 + AP+zPQD/szwA/7U/AP+4QwD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3cr + AP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+zPQD/8YpT//+kcf//m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//6Z0/+qBSf+vOAD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/89LAP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7M9 + AP/xilP//6Rx//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///pnT/6oFJ/684AP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP93KwD/0EsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/sz0A//GKU///pHH//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+mdP/qgUn/rzgA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3crAP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+zPQD/8YpT//+kcf//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6Z0/+qBSf+vOAD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/89LAP9AFwD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7M9AP/xilP//6Rx//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///pnT/6oFJ/684AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAMf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/sz0A//GKU///pHH//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+mdP/qgUn/rzgA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAACHAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/4cxAP/sVQD/z0sA/89LAP/PSwD/z0sA/89LAP/LRQD//5xe//+6gP//sHX//7B1//+w + df//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+w + df//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+w + df//sHX//7B1//+wdf//sHX//7yD//+SU//GPwD/z0sA/89LAP/PSwD/z0sA/89LAP/PSwD/z0sA/89L + AP/PSwD/z0sA/89LAP/PSwD/z0sA/+pVAP9IGgD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ADn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAACkAAABZAAAAWQAAAFkAAABZAAAAWQAAAFkAAABZKQ8AxUkaAP9AFwD/QBcA/0AX + AP9AFwD/QBcA/z4VAP9UMB3/WTkn/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2 + JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2 + JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZOij/Ui0Z/z0U + AP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/SBoA/xYI + AJMAAABZAAAAWQAAAFkAAABZAAAAWQAAAFkAAABZAAAAEf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAACbAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAQ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAKcAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAABZ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAApwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAFn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAACnAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAWf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAKcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABZ////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAApwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAFn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAACxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAX////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + ACEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAA1wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAoQAAADEAAAAxAAAAMQAA + ADEAAAAxAAAAMQAAADEAAAAR////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADJAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAB/////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAzwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAif///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADPAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAzwAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAif// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AIn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAzwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAif///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADPAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAACJ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAzwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAif///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA7QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AQgP/wIOG/8BDBj/AQwY/wEMGP8BDBj/AQwY/wENGf8AAgX/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAnf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAABvAAAAiQAAAIkAAACJAAAAiQAAAIkAAACJAAAAiQAAAIkAAACJAAAAiQAAAIkAAACJAAAAiQAA + AIkAAAChAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8FKlX/CEuU/wdCgv8HQoL/B0KC/wdC + gv8HQoL/B0aK/wENGf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3QAAAIkAAACJAAAAiQAA + AIkAAACJAAAAiQAAAIkAAABL////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABMAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wUoUP8IR43/Bz57/wc+e/8HPnv/Bz57/wc+e/8HQoL/AQwY/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAACt////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAMQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BShQ/whHjP8HPnv/Bz57/wc+ + e/8HPnv/Bz57/wdCgv8BDBj/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAALf///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAAxAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8FKFD/CEeM/wc+e/8HPnv/Bz57/wc+e/8HPnv/B0KC/wEMGP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAt////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAADEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wUoUP8IR4z/Bz57/wc+ + e/8HPnv/Bz57/wc+e/8HQoL/AQwY/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAC3////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAMQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/BShQ/whHjP8HPnv/Bz57/wc+e/8HPnv/Bz57/wdCgv8BDBj/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAALf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAAxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8GLVv/CVGf/whH + jP8IR4z/CEeM/whHjP8IR4z/CEuU/wEOG/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAArf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAADkAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wMaNP8FLlv/BShQ/wUoUP8FKFD/BShQ/wUoUP8FK1X/AAEC/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADPAAAAWQAAAFkAAABZAAAAWQAAAFkAAABZAAAAWQAA + ADH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAEQAAAFkAAABZAAAAWQAAAFkAAABZAAAAWQAAAFkAAACTAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8EHz3/BSxY/wUoUP8FKFD/BShQ/wUoUP8FKlP/BSZM/wAD + Bf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAm////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAEMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wc5 + cf8JTZr/CEeM/whHjP8IR4z/CEeM/whKkv8IQoT/AAUI/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAACJ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAWQAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BjJj/whEh/8HPnv/Bz57/wc+e/8HPnv/B0GA/wc6 + dP8ABAf/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAABZAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8GMmP/CESH/wc+e/8HPnv/Bz57/wc+e/8HQYD/Bzp0/wAEB/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAif///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AFkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wYyY/8IRIf/Bz57/wc+e/8HPnv/Bz57/wdB + gP8HOnT/AAQH/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAWQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/BjJj/whEh/8HPnv/Bz57/wc+e/8HPnv/B0GA/wc6dP8ABAf/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAABZAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8GMmP/CESI/wc+e/8HPnv/Bz57/wc+ + e/8HQYD/Bzp0/wAEB/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAif///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAF8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wY1af8ISI//B0KC/wdCgv8HQoL/B0KC/wdFiP8HPXv/AAQH/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAACJ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAEQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAQoT1wINGv8BDBj/AQwY/wEM + GP8BDBj/AQ0Z/wELFv8AAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADJAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAif///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAzwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADPAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAif// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA1wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AI////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADDAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAA + APEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAAgf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA + + + \ No newline at end of file diff --git a/AmiiBomb/Main_Form.Designer.cs b/AmiiBomb/Main_Form.Designer.cs new file mode 100644 index 0000000..52ef83b --- /dev/null +++ b/AmiiBomb/Main_Form.Designer.cs @@ -0,0 +1,623 @@ +namespace AmiiBomb +{ + partial class Main_Form + { + /// + /// Variable nécessaire au concepteur. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Nettoyage des ressources utilisées. + /// + /// true si les ressources managées doivent être supprimées ; sinon, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Code généré par le Concepteur Windows Form + + /// + /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas + /// le contenu de cette méthode avec l'éditeur de code. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main_Form)); + this.listView1 = new System.Windows.Forms.ListView(); + this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.imageList1 = new System.Windows.Forms.ImageList(this.components); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog(); + this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); + this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.deleteFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.selectbinFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.dumpAmiiboToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); + this.flashAmiiBombuinoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.internalFlasherToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.withXLoaderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.quitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.keyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.selectKeybinFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.whereFindAmiiboKeyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.registerAmiiboKeyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.filesCacheToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.activeFilesCachingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.deleteCacheToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); + this.languagesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.amiiboToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.nameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.seriesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.moreInformationsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.currentAmiiboToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.encryptedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.actionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.decryptToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.createTagToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.dumpAppDataToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.writeAppDataToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.howConnectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); + this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.donateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.contextMenuStrip1.SuspendLayout(); + this.menuStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // listView1 + // + this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader1}); + this.listView1.ContextMenuStrip = this.contextMenuStrip1; + this.listView1.Dock = System.Windows.Forms.DockStyle.Fill; + this.listView1.FullRowSelect = true; + this.listView1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.listView1.Location = new System.Drawing.Point(0, 0); + this.listView1.Name = "listView1"; + this.listView1.Size = new System.Drawing.Size(343, 399); + this.listView1.SmallImageList = this.imageList1; + this.listView1.TabIndex = 8; + this.listView1.UseCompatibleStateImageBehavior = false; + this.listView1.View = System.Windows.Forms.View.Details; + this.listView1.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.listView1_ItemSelectionChanged); + // + // columnHeader1 + // + this.columnHeader1.Text = "Amiibo Filenames"; + this.columnHeader1.Width = 250; + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.deleteFileToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(138, 26); + this.contextMenuStrip1.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip1_Opening); + // + // imageList1 + // + this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); + this.imageList1.TransparentColor = System.Drawing.Color.Transparent; + this.imageList1.Images.SetKeyName(0, "amiibo-logo.png"); + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.optionsToolStripMenuItem, + this.amiiboToolStripMenuItem, + this.helpToolStripMenuItem, + this.donateToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(854, 24); + this.menuStrip1.TabIndex = 12; + this.menuStrip1.Text = "menuStrip1"; + // + // folderBrowserDialog1 + // + this.folderBrowserDialog1.RootFolder = System.Environment.SpecialFolder.MyComputer; + this.folderBrowserDialog1.ShowNewFolderButton = false; + // + // openFileDialog1 + // + this.openFileDialog1.FileName = "openFileDialog1"; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 24); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.listView1); + this.splitContainer1.Panel1MinSize = 0; + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.label3); + this.splitContainer1.Panel2.Controls.Add(this.label4); + this.splitContainer1.Panel2.Controls.Add(this.pictureBox1); + this.splitContainer1.Panel2MinSize = 0; + this.splitContainer1.Size = new System.Drawing.Size(854, 399); + this.splitContainer1.SplitterDistance = 343; + this.splitContainer1.TabIndex = 13; + this.splitContainer1.Visible = false; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.BackColor = System.Drawing.Color.Transparent; + this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label3.Location = new System.Drawing.Point(3, 0); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(29, 20); + this.label3.TabIndex = 12; + this.label3.Text = " "; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.BackColor = System.Drawing.Color.Transparent; + this.label4.Location = new System.Drawing.Point(3, 20); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(25, 13); + this.label4.TabIndex = 13; + this.label4.Text = " "; + // + // deleteFileToolStripMenuItem + // + this.deleteFileToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.delete; + this.deleteFileToolStripMenuItem.Name = "deleteFileToolStripMenuItem"; + this.deleteFileToolStripMenuItem.Size = new System.Drawing.Size(137, 22); + this.deleteFileToolStripMenuItem.Text = "Delete File..."; + this.deleteFileToolStripMenuItem.Click += new System.EventHandler(this.deleteFileToolStripMenuItem_Click); + // + // pictureBox1 + // + this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.pictureBox1.Location = new System.Drawing.Point(0, 0); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(507, 399); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pictureBox1.TabIndex = 11; + this.pictureBox1.TabStop = false; + this.pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint); + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.selectbinFolderToolStripMenuItem, + this.dumpAmiiboToolStripMenuItem, + this.toolStripSeparator8, + this.flashAmiiBombuinoToolStripMenuItem, + this.toolStripSeparator1, + this.quitToolStripMenuItem}); + this.fileToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.page; + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(53, 20); + this.fileToolStripMenuItem.Text = "File"; + // + // selectbinFolderToolStripMenuItem + // + this.selectbinFolderToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.folder_vertical_open; + this.selectbinFolderToolStripMenuItem.Name = "selectbinFolderToolStripMenuItem"; + this.selectbinFolderToolStripMenuItem.Size = new System.Drawing.Size(219, 22); + this.selectbinFolderToolStripMenuItem.Text = "Select Amiibo Dump Folder"; + this.selectbinFolderToolStripMenuItem.Click += new System.EventHandler(this.selectbinFolderToolStripMenuItem_Click); + // + // dumpAmiiboToolStripMenuItem + // + this.dumpAmiiboToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.database_go; + this.dumpAmiiboToolStripMenuItem.Name = "dumpAmiiboToolStripMenuItem"; + this.dumpAmiiboToolStripMenuItem.Size = new System.Drawing.Size(219, 22); + this.dumpAmiiboToolStripMenuItem.Text = "Dump Amiibo..."; + this.dumpAmiiboToolStripMenuItem.Click += new System.EventHandler(this.dumpAmiiboToolStripMenuItem_Click); + // + // toolStripSeparator8 + // + this.toolStripSeparator8.Name = "toolStripSeparator8"; + this.toolStripSeparator8.Size = new System.Drawing.Size(216, 6); + // + // flashAmiiBombuinoToolStripMenuItem + // + this.flashAmiiBombuinoToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.internalFlasherToolStripMenuItem, + this.withXLoaderToolStripMenuItem}); + this.flashAmiiBombuinoToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.package_go; + this.flashAmiiBombuinoToolStripMenuItem.Name = "flashAmiiBombuinoToolStripMenuItem"; + this.flashAmiiBombuinoToolStripMenuItem.Size = new System.Drawing.Size(219, 22); + this.flashAmiiBombuinoToolStripMenuItem.Text = "Flash AmiiBombuino..."; + // + // internalFlasherToolStripMenuItem + // + this.internalFlasherToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.plugin; + this.internalFlasherToolStripMenuItem.Name = "internalFlasherToolStripMenuItem"; + this.internalFlasherToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.internalFlasherToolStripMenuItem.Text = "with Internal Flasher"; + this.internalFlasherToolStripMenuItem.Click += new System.EventHandler(this.internalFlasherToolStripMenuItem_Click); + // + // withXLoaderToolStripMenuItem + // + this.withXLoaderToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.application_get; + this.withXLoaderToolStripMenuItem.Name = "withXLoaderToolStripMenuItem"; + this.withXLoaderToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.withXLoaderToolStripMenuItem.Text = "with XLoader"; + this.withXLoaderToolStripMenuItem.Click += new System.EventHandler(this.withXLoaderToolStripMenuItem_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(216, 6); + // + // quitToolStripMenuItem + // + this.quitToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.cancel; + this.quitToolStripMenuItem.Name = "quitToolStripMenuItem"; + this.quitToolStripMenuItem.Size = new System.Drawing.Size(219, 22); + this.quitToolStripMenuItem.Text = "Quit"; + this.quitToolStripMenuItem.Click += new System.EventHandler(this.quitToolStripMenuItem_Click); + // + // optionsToolStripMenuItem + // + this.optionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.keyToolStripMenuItem, + this.filesCacheToolStripMenuItem, + this.toolStripSeparator7, + this.languagesToolStripMenuItem}); + this.optionsToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.cog; + this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem"; + this.optionsToolStripMenuItem.Size = new System.Drawing.Size(77, 20); + this.optionsToolStripMenuItem.Text = "Options"; + // + // keyToolStripMenuItem + // + this.keyToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.selectKeybinFileToolStripMenuItem, + this.toolStripSeparator2, + this.whereFindAmiiboKeyToolStripMenuItem, + this.registerAmiiboKeyToolStripMenuItem}); + this.keyToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.key; + this.keyToolStripMenuItem.Name = "keyToolStripMenuItem"; + this.keyToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.keyToolStripMenuItem.Text = "Keys"; + // + // selectKeybinFileToolStripMenuItem + // + this.selectKeybinFileToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.key_add; + this.selectKeybinFileToolStripMenuItem.Name = "selectKeybinFileToolStripMenuItem"; + this.selectKeybinFileToolStripMenuItem.Size = new System.Drawing.Size(300, 22); + this.selectKeybinFileToolStripMenuItem.Text = "Select Amiibo Keys file"; + this.selectKeybinFileToolStripMenuItem.Click += new System.EventHandler(this.selectKeybinFileToolStripMenuItem_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(297, 6); + // + // whereFindAmiiboKeyToolStripMenuItem + // + this.whereFindAmiiboKeyToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.service_status; + this.whereFindAmiiboKeyToolStripMenuItem.Name = "whereFindAmiiboKeyToolStripMenuItem"; + this.whereFindAmiiboKeyToolStripMenuItem.Size = new System.Drawing.Size(300, 22); + this.whereFindAmiiboKeyToolStripMenuItem.Text = "Where find Amiibo Keys?"; + this.whereFindAmiiboKeyToolStripMenuItem.Click += new System.EventHandler(this.whereFindAmiiboKeyToolStripMenuItem_Click); + // + // registerAmiiboKeyToolStripMenuItem + // + this.registerAmiiboKeyToolStripMenuItem.Checked = true; + this.registerAmiiboKeyToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; + this.registerAmiiboKeyToolStripMenuItem.Name = "registerAmiiboKeyToolStripMenuItem"; + this.registerAmiiboKeyToolStripMenuItem.Size = new System.Drawing.Size(300, 22); + this.registerAmiiboKeyToolStripMenuItem.Text = "Check Amiibo Keys Hex Chars in Clipboard"; + this.registerAmiiboKeyToolStripMenuItem.Click += new System.EventHandler(this.registerAmiiboKeyToolStripMenuItem_Click); + // + // filesCacheToolStripMenuItem + // + this.filesCacheToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.activeFilesCachingToolStripMenuItem, + this.deleteCacheToolStripMenuItem}); + this.filesCacheToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.script; + this.filesCacheToolStripMenuItem.Name = "filesCacheToolStripMenuItem"; + this.filesCacheToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.filesCacheToolStripMenuItem.Text = "Files Cache"; + // + // activeFilesCachingToolStripMenuItem + // + this.activeFilesCachingToolStripMenuItem.Checked = true; + this.activeFilesCachingToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; + this.activeFilesCachingToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.script_lightning; + this.activeFilesCachingToolStripMenuItem.Name = "activeFilesCachingToolStripMenuItem"; + this.activeFilesCachingToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.activeFilesCachingToolStripMenuItem.Text = "Active Files Caching"; + this.activeFilesCachingToolStripMenuItem.Click += new System.EventHandler(this.activeFilesCachingToolStripMenuItem_Click); + // + // deleteCacheToolStripMenuItem + // + this.deleteCacheToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.script_delete; + this.deleteCacheToolStripMenuItem.Name = "deleteCacheToolStripMenuItem"; + this.deleteCacheToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.deleteCacheToolStripMenuItem.Text = "Delete Cache"; + this.deleteCacheToolStripMenuItem.Click += new System.EventHandler(this.deleteCacheToolStripMenuItem_Click); + // + // toolStripSeparator7 + // + this.toolStripSeparator7.Name = "toolStripSeparator7"; + this.toolStripSeparator7.Size = new System.Drawing.Size(149, 6); + // + // languagesToolStripMenuItem + // + this.languagesToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.world; + this.languagesToolStripMenuItem.Name = "languagesToolStripMenuItem"; + this.languagesToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.languagesToolStripMenuItem.Text = "Languages"; + // + // amiiboToolStripMenuItem + // + this.amiiboToolStripMenuItem.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.amiiboToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.nameToolStripMenuItem, + this.seriesToolStripMenuItem, + this.moreInformationsToolStripMenuItem, + this.toolStripSeparator3, + this.currentAmiiboToolStripMenuItem, + this.encryptedToolStripMenuItem, + this.toolStripSeparator5, + this.actionsToolStripMenuItem}); + this.amiiboToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("amiiboToolStripMenuItem.Image"))); + this.amiiboToolStripMenuItem.Name = "amiiboToolStripMenuItem"; + this.amiiboToolStripMenuItem.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.amiiboToolStripMenuItem.Size = new System.Drawing.Size(74, 20); + this.amiiboToolStripMenuItem.Text = "Amiibo"; + this.amiiboToolStripMenuItem.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage; + this.amiiboToolStripMenuItem.Visible = false; + // + // nameToolStripMenuItem + // + this.nameToolStripMenuItem.Enabled = false; + this.nameToolStripMenuItem.Name = "nameToolStripMenuItem"; + this.nameToolStripMenuItem.Size = new System.Drawing.Size(182, 22); + this.nameToolStripMenuItem.Text = "Name"; + // + // seriesToolStripMenuItem + // + this.seriesToolStripMenuItem.Enabled = false; + this.seriesToolStripMenuItem.Name = "seriesToolStripMenuItem"; + this.seriesToolStripMenuItem.Size = new System.Drawing.Size(182, 22); + this.seriesToolStripMenuItem.Text = "Series"; + // + // moreInformationsToolStripMenuItem + // + this.moreInformationsToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.information; + this.moreInformationsToolStripMenuItem.Name = "moreInformationsToolStripMenuItem"; + this.moreInformationsToolStripMenuItem.Size = new System.Drawing.Size(182, 22); + this.moreInformationsToolStripMenuItem.Text = "...More informations"; + this.moreInformationsToolStripMenuItem.TextDirection = System.Windows.Forms.ToolStripTextDirection.Horizontal; + this.moreInformationsToolStripMenuItem.Click += new System.EventHandler(this.moreInformationsToolStripMenuItem_Click); + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(179, 6); + // + // currentAmiiboToolStripMenuItem + // + this.currentAmiiboToolStripMenuItem.Name = "currentAmiiboToolStripMenuItem"; + this.currentAmiiboToolStripMenuItem.Size = new System.Drawing.Size(182, 22); + this.currentAmiiboToolStripMenuItem.Text = "Current Amiibo"; + // + // encryptedToolStripMenuItem + // + this.encryptedToolStripMenuItem.Name = "encryptedToolStripMenuItem"; + this.encryptedToolStripMenuItem.Size = new System.Drawing.Size(182, 22); + this.encryptedToolStripMenuItem.Text = "?Encrypted"; + // + // toolStripSeparator5 + // + this.toolStripSeparator5.Name = "toolStripSeparator5"; + this.toolStripSeparator5.Size = new System.Drawing.Size(179, 6); + // + // actionsToolStripMenuItem + // + this.actionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.decryptToolStripMenuItem, + this.createTagToolStripMenuItem, + this.toolStripSeparator4, + this.dumpAppDataToolStripMenuItem, + this.writeAppDataToolStripMenuItem}); + this.actionsToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.database_go; + this.actionsToolStripMenuItem.Name = "actionsToolStripMenuItem"; + this.actionsToolStripMenuItem.Size = new System.Drawing.Size(182, 22); + this.actionsToolStripMenuItem.Text = "...Actions"; + // + // decryptToolStripMenuItem + // + this.decryptToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.lock_edit; + this.decryptToolStripMenuItem.Name = "decryptToolStripMenuItem"; + this.decryptToolStripMenuItem.Size = new System.Drawing.Size(156, 22); + this.decryptToolStripMenuItem.Text = "Decrypt"; + this.decryptToolStripMenuItem.Click += new System.EventHandler(this.decryptToolStripMenuItem_Click); + // + // createTagToolStripMenuItem + // + this.createTagToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.tag_blue_add; + this.createTagToolStripMenuItem.Name = "createTagToolStripMenuItem"; + this.createTagToolStripMenuItem.Size = new System.Drawing.Size(156, 22); + this.createTagToolStripMenuItem.Text = "Create NTAG"; + this.createTagToolStripMenuItem.Click += new System.EventHandler(this.createTagToolStripMenuItem_Click); + // + // toolStripSeparator4 + // + this.toolStripSeparator4.Name = "toolStripSeparator4"; + this.toolStripSeparator4.Size = new System.Drawing.Size(153, 6); + // + // dumpAppDataToolStripMenuItem + // + this.dumpAppDataToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.application_side_contract; + this.dumpAppDataToolStripMenuItem.Name = "dumpAppDataToolStripMenuItem"; + this.dumpAppDataToolStripMenuItem.Size = new System.Drawing.Size(156, 22); + this.dumpAppDataToolStripMenuItem.Text = "Dump AppData"; + this.dumpAppDataToolStripMenuItem.Click += new System.EventHandler(this.dumpAppDataToolStripMenuItem_Click); + // + // writeAppDataToolStripMenuItem + // + this.writeAppDataToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.application_side_expand; + this.writeAppDataToolStripMenuItem.Name = "writeAppDataToolStripMenuItem"; + this.writeAppDataToolStripMenuItem.Size = new System.Drawing.Size(156, 22); + this.writeAppDataToolStripMenuItem.Text = "Write AppData"; + this.writeAppDataToolStripMenuItem.Click += new System.EventHandler(this.writeAppDataToolStripMenuItem_Click); + // + // helpToolStripMenuItem + // + this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.howConnectToolStripMenuItem, + this.toolStripSeparator6, + this.aboutToolStripMenuItem}); + this.helpToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.help; + this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + this.helpToolStripMenuItem.Size = new System.Drawing.Size(60, 20); + this.helpToolStripMenuItem.Text = "Help"; + // + // howConnectToolStripMenuItem + // + this.howConnectToolStripMenuItem.Name = "howConnectToolStripMenuItem"; + this.howConnectToolStripMenuItem.Size = new System.Drawing.Size(241, 22); + this.howConnectToolStripMenuItem.Text = "How connect RC522 to Arduino"; + this.howConnectToolStripMenuItem.Click += new System.EventHandler(this.howConnectToolStripMenuItem_Click); + // + // toolStripSeparator6 + // + this.toolStripSeparator6.Name = "toolStripSeparator6"; + this.toolStripSeparator6.Size = new System.Drawing.Size(238, 6); + // + // aboutToolStripMenuItem + // + this.aboutToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.information; + this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; + this.aboutToolStripMenuItem.Size = new System.Drawing.Size(241, 22); + this.aboutToolStripMenuItem.Text = "About"; + this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); + // + // donateToolStripMenuItem + // + this.donateToolStripMenuItem.Image = global::AmiiBomb.Properties.Resources.controller; + this.donateToolStripMenuItem.Name = "donateToolStripMenuItem"; + this.donateToolStripMenuItem.Size = new System.Drawing.Size(73, 20); + this.donateToolStripMenuItem.Text = "Donate"; + this.donateToolStripMenuItem.Click += new System.EventHandler(this.donateToolStripMenuItem_Click); + // + // Main_Form + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(854, 423); + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.menuStrip1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MainMenuStrip = this.menuStrip1; + this.Name = "Main_Form"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "AmiiBomb - 0.2 Alpha"; + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Main_Form_FormClosed); + this.Shown += new System.EventHandler(this.Main_Form_Shown); + this.Resize += new System.EventHandler(this.Main_Form_Resize); + this.contextMenuStrip1.ResumeLayout(false); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private System.Windows.Forms.ColumnHeader columnHeader1; + private System.Windows.Forms.ImageList imageList1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1; + private System.Windows.Forms.OpenFileDialog openFileDialog1; + private System.Windows.Forms.SaveFileDialog saveFileDialog1; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.ToolStripMenuItem currentAmiiboToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; + private System.Windows.Forms.ToolStripMenuItem nameToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem seriesToolStripMenuItem; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.ToolStripMenuItem encryptedToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + public System.Windows.Forms.MenuStrip menuStrip1; + public System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem quitToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem selectbinFolderToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem dumpAmiiboToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem keyToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem languagesToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem selectKeybinFileToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem whereFindAmiiboKeyToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem registerAmiiboKeyToolStripMenuItem; + public System.Windows.Forms.ListView listView1; + public System.Windows.Forms.ToolStripMenuItem amiiboToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem filesCacheToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem activeFilesCachingToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem deleteCacheToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator7; + public System.Windows.Forms.ToolStripMenuItem moreInformationsToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem actionsToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem decryptToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem createTagToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem dumpAppDataToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem writeAppDataToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; + public System.Windows.Forms.ToolStripMenuItem howConnectToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem flashAmiiBombuinoToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator8; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + public System.Windows.Forms.ToolStripMenuItem deleteFileToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem donateToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem internalFlasherToolStripMenuItem; + public System.Windows.Forms.ToolStripMenuItem withXLoaderToolStripMenuItem; + } +} + diff --git a/AmiiBomb/Main_Form.cs b/AmiiBomb/Main_Form.cs new file mode 100644 index 0000000..41be4a5 --- /dev/null +++ b/AmiiBomb/Main_Form.cs @@ -0,0 +1,621 @@ +using System; +using System.Windows.Forms; +using System.IO; +using System.Reflection; +using System.Diagnostics; +using Newtonsoft.Json; +using System.Threading; +using System.Text.RegularExpressions; +using AmiiBomb.Properties; +using System.Drawing; + +namespace AmiiBomb +{ + public partial class Main_Form : Form + { + Config_Class Config = new Config_Class(); + FileSystemWatcher Watcher = new FileSystemWatcher(); + public static AmiiboKeys AmiiKeys; + Thread thCheck_Clipboard; + string Last_File_Watched = "", + Last_Action_Watched = "", + AmiiBomb_Config_File = "lib\\AmiiBomb.conf", + Amiibo_Keys_Hash = "BBDBB49A917D14F7A997D327BA40D40C39E606CE"; + string Current_NFC_ID = ""; + private I18n i18n = I18n.Instance; + + public Main_Form() + { + AppDomain.CurrentDomain.AssemblyResolve += LoadAssembly; + InitializeComponent(); + Helper_Class.DoubleBuffered(listView1, true); + splitContainer1.Panel1MinSize = 0; + splitContainer1.Panel2MinSize = 0; + } + + private Assembly LoadAssembly(object sender, ResolveEventArgs args) + { + Assembly result = null; + if (args != null && !string.IsNullOrEmpty(args.Name)) + { + FileInfo info = new FileInfo(Assembly.GetExecutingAssembly().Location); + var assemblyName = args.Name.Split(new string[] { "," }, StringSplitOptions.None)[0]; + var assemblyPath = Path.Combine(Path.Combine(info.Directory.FullName, "lib"), string.Format("{0}.{1}", assemblyName, "dll")); + + if (File.Exists(assemblyPath)) result = Assembly.Load(File.ReadAllBytes(assemblyPath)); + else return args.RequestingAssembly; + } + + return result; + } + + public void FileWatcher() + { + Watcher.Path = Config.Bin_Folder_Path; + Watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName; + Watcher.Filter = "*.bin"; + + Watcher.Renamed += new RenamedEventHandler(OnChanged); + Watcher.Changed += new FileSystemEventHandler(OnChanged); + Watcher.Created += new FileSystemEventHandler(OnChanged); + Watcher.Deleted += new FileSystemEventHandler(OnChanged); + + Watcher.EnableRaisingEvents = true; + } + + private void OnChanged(object source, FileSystemEventArgs e) + { + if(Last_File_Watched != e.FullPath || Last_Action_Watched != e.ChangeType.ToString()) + LoadAmiiboBinFolder(); + + Last_File_Watched = e.FullPath; + Last_Action_Watched = e.ChangeType.ToString(); + } + + private void LoadAmiiboKey() + { + if (Helper_Class.ValidSHA1(File.ReadAllBytes(Config.KeyFile_Path), Amiibo_Keys_Hash)) + { + AmiiKeys = AmiiboKeys.LoadKeys(Config.KeyFile_Path); + splitContainer1.Visible = true; + } + else + { + Config.KeyFile_Path = null; + File.WriteAllText(AmiiBomb_Config_File, JsonConvert.SerializeObject(Config)); + + AskAmiiboKey(); + } + } + + private void LoadAmiiboBinFolder() + { + listView1.Invoke(new Action(() => listView1.Items.Clear())); + + string[] Files = Directory.GetFiles(Config.Bin_Folder_Path, "*.bin"); + + listView1.Invoke(new Action(() => listView1.BeginUpdate())); + + foreach (string BinFile in Files) + { + if (new FileInfo(BinFile).Length == 572) + { + DialogResult DgResult = MessageBox.Show(i18n.__("Message_Amiibo_Hash_Detected", Environment.NewLine), this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question); + if (DgResult == DialogResult.Yes) + { + byte[] Hashed_File = File.ReadAllBytes(Path.Combine(Config.Bin_Folder_Path, BinFile)); + Array.Resize(ref Hashed_File, 540); + File.Move(Path.Combine(Config.Bin_Folder_Path, BinFile), Path.Combine(Config.Bin_Folder_Path, Path.GetFileNameWithoutExtension(BinFile) + ".bin.bak")); + File.WriteAllBytes(Path.Combine(Config.Bin_Folder_Path, BinFile), Hashed_File); + } + } + + if (new FileInfo(BinFile).Length == 540) + { + ListViewItem lvItem = new ListViewItem(" " + Path.GetFileName(BinFile), 0); + listView1.Invoke(new Action(() => listView1.Items.Add(lvItem))); + } + } + + listView1.Invoke(new Action(() => listView1.EndUpdate())); + + listView1.Invoke(new Action(() => listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent))); + listView1.Invoke(new Action(() => listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize))); + } + + private void Get_FileInfo(string BinFile) + { + byte[] Decrypted_Amiibo; + + if (File_IsEncrypted(BinFile)) + Decrypted_Amiibo = Amiibo_Class.Decrypt(File.ReadAllBytes(Path.Combine(Config.Bin_Folder_Path, BinFile)), AmiiKeys); + else + Decrypted_Amiibo = File.ReadAllBytes(Path.Combine(Config.Bin_Folder_Path, BinFile)); + + string Char_ID = Amiibo_Class.Get_Character_ID(Decrypted_Amiibo); + string GameSeries_ID = Amiibo_Class.Get_GameSeries_ID(Decrypted_Amiibo); + string NFC_ID = Amiibo_Class.Get_NFC_ID(Decrypted_Amiibo); + + currentAmiiboToolStripMenuItem.DropDownItems.Clear(); + int Init = Amiibo_Class.Get_Amiibo_Initialize_UserData(Decrypted_Amiibo); + + if (Init != 0) + { + if (Init == 16 || Init == 48) + { + currentAmiiboToolStripMenuItem.DropDownItems.Add(i18n.__("Menu_Amiibo_Owner") + ": " + Amiibo_Class.Get_Amiibo_Mii_Nickname(Decrypted_Amiibo)); + currentAmiiboToolStripMenuItem.DropDownItems.Add(i18n.__("Menu_Amiibo_Nickname") + ": " + Amiibo_Class.Get_Amiibo_Nickname(Decrypted_Amiibo)); + } + + if (Init == 48) + { + currentAmiiboToolStripMenuItem.DropDownItems.Add(i18n.__("Menu_Amiibo_LastModDate") + ": " + Amiibo_Class.Get_Amiibo_LastModifiedDate(Decrypted_Amiibo)); + currentAmiiboToolStripMenuItem.DropDownItems.Add(i18n.__("Menu_Amiibo_WriteCounter") + ": " + Amiibo_Class.Get_Amiibo_Write_Counter(Decrypted_Amiibo)); + currentAmiiboToolStripMenuItem.DropDownItems.Add(i18n.__("Menu_Amiibo_AppID") + ": " + Amiibo_Class.Get_Amiibo_AppID(Decrypted_Amiibo)); + currentAmiiboToolStripMenuItem.DropDownItems.Add(i18n.__("Menu_Amiibo_InitAppID") + ": " + Amiibo_Class.Get_Amiibo_Initialized_AppID(Decrypted_Amiibo)); + currentAmiiboToolStripMenuItem.DropDownItems.Add(i18n.__("Menu_Amiibo_Country") + ": " + Amiibo_Class.Get_Amiibo_Country(Decrypted_Amiibo)); + } + } + else currentAmiiboToolStripMenuItem.DropDownItems.Add(i18n.__("Menu_Amiibo_Sorry")); + + + foreach (ToolStripMenuItem Item in currentAmiiboToolStripMenuItem.DropDownItems) + { + Item.RightToLeft = RightToLeft.No; + Item.Enabled = false; + } + + string Cache_File_Path = Path.Combine("cache", Path.GetFileNameWithoutExtension(BinFile) + ".amiibomb"); + + if (File.Exists(Cache_File_Path) && Config.Cache) + { + Stream stream = File.Open(Cache_File_Path, FileMode.Open); + var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); + AmiiboLife_Cache_Class Cache_File = (AmiiboLife_Cache_Class)binaryFormatter.Deserialize(stream); + stream.Close(); + + if (Helper_Class.ValidSHA1(Decrypted_Amiibo, Cache_File.SHA1)) + { + Current_NFC_ID = Cache_File.NFC_ID; + pictureBox1.Image = Cache_File.Picture; + nameToolStripMenuItem.Text = label3.Text = Cache_File.Name; + seriesToolStripMenuItem.Text = label4.Text = Cache_File.Serie; + } + else + { + File.Delete(Cache_File_Path); + Get_FileInfo(BinFile); + } + } + else + { + Current_NFC_ID = NFC_ID; + string[] AmiiboLife_Info = AmiiboLife_Class.Get_Amiibo_Info(NFC_ID); + if (AmiiboLife_Info[2] != "") + { + pictureBox1.Load(AmiiboLife_Info[2]); + pictureBox1.Image = Helper_Class.DropShadow(pictureBox1.Image); + } + else pictureBox1.Image = null; + nameToolStripMenuItem.Text = AmiiboLife_Info[0].Trim(); + label3.Text = AmiiboLife_Info[0].Trim(); + seriesToolStripMenuItem.Text = AmiiboLife_Info[1].Trim(); + label4.Text = AmiiboLife_Info[1].Trim(); + + AmiiboLife_Cache_Class Cache_File = new AmiiboLife_Cache_Class(); + Cache_File.SHA1 = Helper_Class.SHA1_File(Decrypted_Amiibo); + Cache_File.Name = AmiiboLife_Info[0].Trim(); + Cache_File.Serie = AmiiboLife_Info[1].Trim(); + Cache_File.NFC_ID = Current_NFC_ID; + Cache_File.Picture = pictureBox1.Image; + + if (Config.Cache && AmiiboLife_Info[0] != "" && AmiiboLife_Info[1] != "" && AmiiboLife_Info[2] != "") + { + Stream stream = File.Open(Cache_File_Path, FileMode.Create); + var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); + binaryFormatter.Serialize(stream, Cache_File); + stream.Close(); + } + + if (AmiiboLife_Info[0] == "" || AmiiboLife_Info[1] == "" || AmiiboLife_Info[2] == "") + moreInformationsToolStripMenuItem.Visible = false; + else moreInformationsToolStripMenuItem.Visible = true; + } + } + + private bool File_IsEncrypted(string BinFile) + { + if (Amiibo_Class.IsEncrypted(File.ReadAllBytes(Path.Combine(Config.Bin_Folder_Path, BinFile)))) + return true; + else return false; + } + + private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) + { + if (listView1.SelectedItems.Count > 0 && listView1.SelectedItems.Count <= 1) + { + splitContainer1.Panel2.Visible = false; + amiiboToolStripMenuItem.Visible = false; + + if (File_IsEncrypted(listView1.SelectedItems[0].Text.Trim())) + { + encryptedToolStripMenuItem.Text = i18n.__("Menu_Encrypted"); + encryptedToolStripMenuItem.Image = Resources.locked; + decryptToolStripMenuItem.Text = i18n.__("Menu_Amiibo_Decrypt"); + } + else + { + encryptedToolStripMenuItem.Text = i18n.__("Menu_Decrypted"); + encryptedToolStripMenuItem.Image = Resources.lock_open; + decryptToolStripMenuItem.Text = i18n.__("Menu_Amiibo_Encrypt"); + } + + Get_FileInfo(listView1.SelectedItems[0].Text.Trim()); + + currentAmiiboToolStripMenuItem.Text = listView1.SelectedItems[0].Text.Trim(); + + splitContainer1.Panel2.Visible = true; + amiiboToolStripMenuItem.Visible = true; + + amiiboToolStripMenuItem.ShowDropDown(); + } + } + + private void whereFindAmiiboKeyToolStripMenuItem_Click(object sender, EventArgs e) + { + MessageBox.Show(i18n.__("Message_Where_Find_Keys1") + Environment.NewLine + + i18n.__("Message_Where_Find_Keys2") + Environment.NewLine + + i18n.__("Message_Where_Find_Keys3") + Environment.NewLine + + i18n.__("Message_Where_Find_Keys4") + Environment.NewLine + + i18n.__("Message_Where_Find_Keys5") + Environment.NewLine + + i18n.__("Message_Where_Find_Keys6"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); + Process.Start("http://www.google.com/search?q=amiibo+retail+encryption+key+pastebin"); + } + + private void dumpAmiiboToolStripMenuItem_Click(object sender, EventArgs e) + { + Flash_Form Form = new Flash_Form(); + Form.Bin_Folder = Config.Bin_Folder_Path; + Form.Action_Write = false; + Form.ShowDialog(); + } + + private void selectbinFolderToolStripMenuItem_Click(object sender, EventArgs e) + { + folderBrowserDialog1.Description = i18n.__("Folder_Bin_Selection"); + if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) + { + Config.Bin_Folder_Path = folderBrowserDialog1.SelectedPath; + File.WriteAllText(AmiiBomb_Config_File, JsonConvert.SerializeObject(Config)); + + LoadAmiiboBinFolder(); + FileWatcher(); + } + } + + private void quitToolStripMenuItem_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + private void selectKeybinFileToolStripMenuItem_Click(object sender, EventArgs e) + { + openFileDialog1.FileName = ""; + openFileDialog1.Title = i18n.__("Select_Key_Title"); + openFileDialog1.Filter = i18n.__("Select_Key_Filter", "|*.bin|", "|*.*"); + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + if (Helper_Class.ValidSHA1(File.ReadAllBytes(openFileDialog1.FileName), Amiibo_Keys_Hash)) + { + Config.KeyFile_Path = openFileDialog1.FileName; + File.WriteAllText(AmiiBomb_Config_File, JsonConvert.SerializeObject(Config)); + } + else + { + DialogResult DgResult = MessageBox.Show(i18n.__("Select_Key_Message", Environment.NewLine), this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question); + if (DgResult == DialogResult.Yes) selectKeybinFileToolStripMenuItem.PerformClick(); + } + } + } + + private void Check_Clipboard() + { + while (true) + { + if (registerAmiiboKeyToolStripMenuItem.Checked) + { + IDataObject ClipData = Clipboard.GetDataObject(); + if (ClipData.GetData(DataFormats.Text) != null && ClipData.GetDataPresent(DataFormats.Text)) + { + string Clipboard_Text = ClipData.GetData(DataFormats.Text).ToString(); + Clipboard_Text = Regex.Replace(Clipboard_Text, "[^a-zA-Z0-9-]", string.Empty); + + if (Clipboard_Text.Length == 320) + { + if (Helper_Class.ValidSHA1(Helper_Class.String_To_Byte_Array(Clipboard_Text), Amiibo_Keys_Hash)) + { + this.Invoke(new Action(() => { + Helper_Class.FlashWindowEx(this); + DialogResult DgResult = MessageBox.Show(this, i18n.__("Clipboard_Key_Message1"), this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question); + + if (DgResult == DialogResult.Yes) + { + SaveFileDialog saveFileDialog1 = new SaveFileDialog(); + saveFileDialog1.Filter = i18n.__("Clipboard_Key_Filter", "|*.bin"); + saveFileDialog1.Title = i18n.__("Clipboard_Key_Title"); + + if (saveFileDialog1.ShowDialog(this) == DialogResult.OK && saveFileDialog1.FileName != "") + { + MessageBox.Show(this, i18n.__("Clipboard_Key_Message2"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else Clipboard.SetDataObject(""); + } + else Clipboard.SetDataObject(""); + })); + } + } + } + } + + Application.DoEvents(); + } + } + + private void AskBinFolder() + { + MessageBox.Show(i18n.__("Message_Ask_Bin_Folder"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); + selectbinFolderToolStripMenuItem.PerformClick(); + } + + private void AskAmiiboKey() + { + DialogResult DgResult = MessageBox.Show(i18n.__("Message_Ask_Amiibo_Keys1"), this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question); + + if (DgResult == DialogResult.Yes) + { + selectKeybinFileToolStripMenuItem.PerformClick(); + } + else + { + DgResult = MessageBox.Show(i18n.__("Message_Ask_Amiibo_Keys2"), this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question); + if (DgResult == DialogResult.Yes) + { + thCheck_Clipboard.Start(); + whereFindAmiiboKeyToolStripMenuItem.PerformClick(); + } + } + } + + private void Load_Languages() + { + string[] Lang_Files = Directory.GetFiles("lang", "*.lang"); + + foreach (string LangFile in Lang_Files) + { + string FileLocale = Path.GetFileNameWithoutExtension(LangFile); + ToolStripMenuItem items = new ToolStripMenuItem(); + items.Tag = FileLocale; + items.Text = Translate_Class.GetLocale(FileLocale); + items.Image = Image.FromFile(@"lang\" + FileLocale + ".png"); + items.ImageScaling = ToolStripItemImageScaling.None; + items.Click += new EventHandler(LanguagesToolStripMenuItem_Click); + languagesToolStripMenuItem.DropDownItems.Add(items); + } + } + + private void LanguagesToolStripMenuItem_Click(object sender, EventArgs e) + { + ChangeLanguage(((ToolStripMenuItem)sender).Tag.ToString()); + } + + private void Main_Form_Shown(object sender, EventArgs e) + { + thCheck_Clipboard = new Thread(Check_Clipboard); + thCheck_Clipboard.SetApartmentState(ApartmentState.STA); + + Load_Languages(); + + if (File.Exists(AmiiBomb_Config_File)) + { + Config = JsonConvert.DeserializeObject(File.ReadAllText(AmiiBomb_Config_File)); + if (Config.Bin_Folder_Path == null) AskBinFolder(); + if (Config.KeyFile_Path == null) AskAmiiboKey(); + if (Config.Locale == null) Config.Locale = I18n.GetLocale(); + } + else + { + AskBinFolder(); + AskAmiiboKey(); + } + + if (Config.Locale != null) + { + I18n.SetLocale(Config.Locale); + Translate_Class.Translate(this); + } + + if (!thCheck_Clipboard.IsAlive) thCheck_Clipboard.Start(); + + if (Config.Bin_Folder_Path != null) + { + LoadAmiiboBinFolder(); + FileWatcher(); + } + + if (Config.KeyFile_Path != null) LoadAmiiboKey(); + + Controls_Size(); + } + + + private void Main_Form_FormClosed(object sender, FormClosedEventArgs e) + { + if (thCheck_Clipboard.IsAlive) thCheck_Clipboard.Abort(); + } + + private void registerAmiiboKeyToolStripMenuItem_Click(object sender, EventArgs e) + { + registerAmiiboKeyToolStripMenuItem.Checked = !registerAmiiboKeyToolStripMenuItem.Checked; + } + + private void Main_Form_Resize(object sender, EventArgs e) + { + Controls_Size(); + } + + private void Controls_Size() + { + int ListView_Width = 30; + foreach (ColumnHeader column in listView1.Columns) + { + ListView_Width += column.Width; + } + + if ((this.Width / 2) > ListView_Width) splitContainer1.SplitterDistance = ListView_Width; + else if (this.Width > 160) splitContainer1.SplitterDistance = this.Width / 2; + } + + private void moreInformationsToolStripMenuItem_Click(object sender, EventArgs e) + { + Process.Start("http://amiibo.life/nfc/" + Current_NFC_ID); + } + + private void decryptToolStripMenuItem_Click(object sender, EventArgs e) + { + string FileName = listView1.SelectedItems[0].Text.Trim(); + + if (File_IsEncrypted(FileName)) + { + File.WriteAllBytes(Path.Combine(Config.Bin_Folder_Path, Path.GetFileNameWithoutExtension(FileName) + ".dec.bin"), Amiibo_Class.Decrypt(File.ReadAllBytes(Path.Combine(Config.Bin_Folder_Path, FileName)), AmiiKeys)); + } + else + { + File.WriteAllBytes(Path.Combine(Config.Bin_Folder_Path, Path.GetFileNameWithoutExtension(FileName) + ".enc.bin"), Amiibo_Class.Encrypt(File.ReadAllBytes(Path.Combine(Config.Bin_Folder_Path, FileName)), AmiiKeys)); + } + } + + private void createTagToolStripMenuItem_Click(object sender, EventArgs e) + { + Flash_Form Form = new Flash_Form(); + Form.Current_File_Bin = Path.Combine(Config.Bin_Folder_Path, listView1.SelectedItems[0].Text.Trim()); + Form.Action_Write = true; + Form.ShowDialog(); + } + + private void writeAppDataToolStripMenuItem_Click(object sender, EventArgs e) + { + openFileDialog1.FileName = ""; + openFileDialog1.Title = i18n.__("Write_AppData_Title"); + openFileDialog1.Filter = i18n.__("Write_AppData_Filter", "|*.AppData|", "|*.*"); + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + byte[] AppData_Patched_File = Amiibo_Class.WriteAppData(File.ReadAllBytes(Path.Combine(Config.Bin_Folder_Path, listView1.SelectedItems[0].Text.Trim())), File.ReadAllBytes(openFileDialog1.FileName)); + File.WriteAllBytes(Path.Combine(Config.Bin_Folder_Path, Path.GetFileNameWithoutExtension(listView1.SelectedItems[0].Text.Trim()) + ".AppData_Patched.bin"), AppData_Patched_File); + MessageBox.Show(this, i18n.__("Write_AppData_Message1", Path.GetFileName(openFileDialog1.FileName)), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + + private void dumpAppDataToolStripMenuItem_Click(object sender, EventArgs e) + { + SaveFileDialog saveFileDialog1 = new SaveFileDialog(); + saveFileDialog1.Filter = i18n.__("Dump_AppData_Filter", "|*.AppData"); + saveFileDialog1.Title = i18n.__("Dump_AppData_Title"); + saveFileDialog1.FileName = Path.GetFileNameWithoutExtension(listView1.SelectedItems[0].Text.Trim()) + ".AppData"; + + if (saveFileDialog1.ShowDialog(this) == DialogResult.OK && saveFileDialog1.FileName != "") + { + byte[] AppData = Amiibo_Class.Dump_AppData(File.ReadAllBytes(Path.Combine(Config.Bin_Folder_Path, listView1.SelectedItems[0].Text.Trim()))); + File.WriteAllBytes(saveFileDialog1.FileName, AppData); + MessageBox.Show(this, i18n.__("Dump_AppData_Message1"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + + private void ChangeLanguage(string Locale) + { + DialogResult DgResult = MessageBox.Show(i18n.__("Message_Restart_AmiiBomb"), this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question); + if (DgResult == DialogResult.Yes) + { + Config.Locale = Locale; + File.WriteAllText(AmiiBomb_Config_File, JsonConvert.SerializeObject(Config)); + + Process.Start(Application.ExecutablePath); + Application.Exit(); + } + } + + private void deleteCacheToolStripMenuItem_Click(object sender, EventArgs e) + { + string[] Files = Directory.GetFiles("cache", "*.amiibomb"); + + foreach (string CacheFile in Files) + { + File.Delete(CacheFile); + } + } + + private void activeFilesCachingToolStripMenuItem_Click(object sender, EventArgs e) + { + activeFilesCachingToolStripMenuItem.Checked = !activeFilesCachingToolStripMenuItem.Checked; + Config.Cache = activeFilesCachingToolStripMenuItem.Checked; + File.WriteAllText(AmiiBomb_Config_File, JsonConvert.SerializeObject(Config)); + } + + private void howConnectToolStripMenuItem_Click(object sender, EventArgs e) + { + Process.Start("lib\\Arduino-RC522.png"); + } + + private void contextMenuStrip1_Opening(object sender, System.ComponentModel.CancelEventArgs e) + { + e.Cancel = (listView1.SelectedItems.Count <= 0); + } + + private void deleteFileToolStripMenuItem_Click(object sender, EventArgs e) + { + string FilePath = Path.Combine(Config.Bin_Folder_Path, listView1.SelectedItems[0].Text.Trim()); + DialogResult DgResult = MessageBox.Show(i18n.__("Message_Confirm_Delete"), this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question); + if (DgResult == DialogResult.Yes) + { + if (File.Exists(FilePath)) + { + File.Delete(FilePath); + } + } + } + + private void internalFlasherToolStripMenuItem_Click(object sender, EventArgs e) + { + new Arduino_Form().ShowDialog(); + } + + private void withXLoaderToolStripMenuItem_Click(object sender, EventArgs e) + { + var executablePath = Application.StartupPath + "\\lib\\XLoader\\XLoader.exe"; + var p = new Process(); + p.StartInfo = new ProcessStartInfo(executablePath); + p.StartInfo.WorkingDirectory = Path.GetDirectoryName(executablePath); + p.Start(); + } + + private void donateToolStripMenuItem_Click(object sender, EventArgs e) + { + MessageBox.Show(i18n.__("Message_Support_Me"), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); + } + + private void pictureBox1_Paint(object sender, PaintEventArgs e) + { + if (pictureBox1.Image != null) + { + if (pictureBox1.Image.Width < pictureBox1.Width && pictureBox1.Image.Height < pictureBox1.Height) + pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage; + else + pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; + } + } + + private void aboutToolStripMenuItem_Click(object sender, EventArgs e) + { + new About_Form().ShowDialog(); + } + } +} diff --git a/AmiiBomb/Main_Form.resx b/AmiiBomb/Main_Form.resx new file mode 100644 index 0000000..86714d7 --- /dev/null +++ b/AmiiBomb/Main_Form.resx @@ -0,0 +1,1861 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 682, 18 + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD+ + BwAAAk1TRnQBSQFMAwEBAAG4AQEBuAEBARABAAEJAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA + AUADAAEJAwABAQEAAQgFAAFAAQIYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAAf8B2gHcCgABtwGI + Af8wAAH/AtMBGQEAAfQB7AEPAQcB8QESAfQB/wEYAYQB9DIAAfQC/wEOAgAB7AHtAQABBwEAAfQyAAEa + ARsB/wEAAZIBAAFtAf8BAAHsAQABBwEAAf8BGwEaMAACNgEbAQAB7AEAAQcCAAHrAQABBwEAAcMBOAEy + MAABGwH0AgAB7wEAARQB9AHxAgAB8QIAAf8BGzEAAf8BvQH/AQABEwQAAe0BAAH/AbwB/zEAAf8BQQFA + Ab0BAAH/AQcC7AHyAgAB8wFwAQYB9DEAARYBvQoAAfABkQH/MAABQgFNAT4HAAE+AwABKAMAAUADAAEJ + AwABAQEAAQEFAAFIFwAD/wEAAR8B+AYAAQgHAAHAAQsGAAEQAYgGAAERAYgGAAEwAQwGAAGIAREGAAEI + ATAGAAGfAfgGAAs= + + + + 127, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 + MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAANdQAADXUAV5l5QgAAAHHSURBVDhPpdJPSBRhHMbxL660 + iCGxthZbWOmuEOGhoEMQRZ4iKoIM0lq6aBSWGrlsQqZh1MHqkB46FBaltGtkCBFK0P9wo8VI0YhIooho + K4Iw8BC/nqm5BHNo6AcfeN+HZ2ZeZgYz+y+eoR+eoR98oNQxLG1GGU+I4DmBAHTsgZ5GOFW3Vx5LkG+U + V3yhzN5TqvvF4mkWOPU50iBD0icbBZq2w5UjVXTWG51NxvHEWrLVIaZDkXwjmnjNkkXzyXOqL0Tn+0sv + 4bk6xcEwXcmW4q7aefGedXDpI7XXJlg5NVDAzmhQPU64F7ySZbLF3Ts2r960mLE7S7HrLLdBakhl+H5j + HJswmrftVwVuuuXk792fuS1OlujYp0WOuA1hsylmyGRpH37GgctvK4tWbI065W63/EgWOoFmQJystX5V + COuNFM7eou5nhnZqRpqJDKo7Yhs4PRnQKwirOONe4EjJRXd9+Ci7eceFqrGSBt5Ur1fUZzH69QH6fxjP + bReN5xRSLmn5Kodkh2SD5Mfukqx4yRl7IPfoXqPa5zzSuWlSn65yXw85/1Rd7ymigIe0MsnJs6O05UY5 + Vuz5d/nhGfrhGfrhGf474xeJO+kSa//fZQAAAABJRU5ErkJggg== + + + + 242, 17 + + + 411, 17 + + + 546, 18 + + + + AAABAAUAEBAAAAAAIABoBAAAVgAAACAgAAAAACAAqBAAAL4EAAAwMAAAAAAgAKglAABmFQAAQEAAAAAA + IAAoQgAADjsAAICAAAAAACAAKAgBADZ9AAAoAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wH///8B////AQAAAAcAAAAHBAEA5wQBAP0EAQD9BAEA+wAAAAkAAAAH////Af// + /wH///8B////Af///wH///8B////AQAAAAsHAgD1CAIA/6s9AP+4QgD/uEIA/7hCAP8JAwD/CAIA/wIA + ABf///8B////Af///wH///8B////Af///wEAAADvtUEA/7pDAP+3QgD/t0IA/7dCAP+3QgD/uUMA/71E + AP8IAgD/AAAAB////wH///8B////Af///wEAAAADAQAA77JAAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+6QwD/CQMA/wAAAAn///8B////Af///wH///8BAAAA+60+AP+3QgL//Jll//6aZv/+mmb//ppm//6c + aP+9SQv/t0IA/7hCAP8EAQD7////Af///wH///8B////AQAAAP2sPQD/+5ll//+ZZP//m2f//5tn//+b + Z///mmb//51p/7pGBv+4QgD/BAEA/f///wH///8B////Af///wEAAAD9rD0A//uXYv/o7t///ppm//+b + Z///m2f//5tn//+caP+6Rgb/uEIA/wQBAP3///8B////Af///wH///8BAAAA+6w7AP/m6tz/6PHk/+jv + 4f//mmb//5tn//+bZ///nGj/ukYG/7hCAP8EAQD7////Af///wH///8B////AQAAAAMBAADvsT8B/+fu + 4P/+m2f//5tn//+bZ///m2f//Ztn/71HBv8JAwD/AAAACf///wH///8B////Af///wH///8BAAAA77RA + AP/9m2b//51o//+daP//nWj//59q/75JCf+9RAD/CAIA/wAAAAf///8B////Af///wH///8B////AQAA + AAsHAgD1CwYE/wsGBP8LBgT/CwYE/wsGBP8IAwD/CAIA/wIAABf///8B////Af///wH///8B////Af// + /wH///8BAAAABwAAAPkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAABf///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAD5AAAA/wAAAP8AAQL/AAAA/wAAAP8AAAAT////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAEQAAABcAAAD/Bjt2/wABAv8AAAAxAAAAA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAFwAAAP8GO3b/AAAA/wAAABP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAAHAAEC9wAAAP0AAAAR////Af// + /wH///8B////AQAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8oAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAA////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAzwAAAPsAAAD7AAAA+wAA + APsAAAD7AAAA+wAAAPkAAAAF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAsAAAANAAAADQAAAA0IAwDTCAMA/wgD + AP8IAwD/CAMA/wgDAP8IAwD/CAMA+wAAAA8AAAANAAAADQAAAA3///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA6QAAAP8AAAD/AAAA/545 + AP+6QwD/ukMA/7pDAP+6QwD/ukMA/7pDAP+5QgD/AgEA/wAAAP8AAAD/AAAA/wAAABf///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAEwAAABcPBQDrEAUA/xAF + AP8QBQD/nTgA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7ZBAP8RBgD/EAUA/xAFAP8QBQD/BAEAKQAA + ABf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADdAAAA/7NA + AP+9RAD/vUQA/71EAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7xEAP+9RAD/vUQA/8NG + AP8QBQD/AAAA/wAAAA3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AN0AAAD/rT4A/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/vUQA/xAFAP8AAAD/AAAADf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAA3QAAAP+tPgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+9RAD/EAUA/wAAAP8AAAAN////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAABQAAAAUCAADdAgEA/60+AP+3QgD/t0IB/7dCAf+3QgH/t0IB/7dCAf+3QgH/t0IB/7dC + Af+3QgH/t0IB/7dCAP+3QgD/t0IA/71EAP8SBgD/AgEA/wAAAA8AAAAF////Af///wH///8B////Af// + /wH///8B////Af///wEAAAD5AAAA+6Q7AP+2QQD/tkIA/7ZAAP/6mGT//ppm//6aZv/+mmb//ppm//6a + Zv/+mmb//ppm//6aZv/+nWn/wU8S/7dCAP+3QgD/t0IA/7ZBAP+5QgD/CAMA+wAAAPn///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPsAAAD/pTsA/7ZBAP+4QwT/t0IF//uZZP//m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+dav/DUBb/uEQF/7dCAP+3QgD/t0IA/7pDAP8IAwD/AAAA+/// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA+wAAAP+lOwD/tD4A//iXYv//nGj//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5pm//+caP//n2z/vkoN/7dCAP+3QgD/ukMA/wgD + AP8AAAD7////Af///wH///8B////Af///wH///8B////Af///wEAAAD7AAAA/6U7AP+0PwD/+JZh//+b + Z///mGL//5hi//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+eav++Sg3/t0IA/7dC + AP+6QwD/CAMA/wAAAPv///8B////Af///wH///8B////Af///wH///8B////AQAAAPsAAAD/pTsA/7Q/ + AP/4lmH//5ll/+nq2//p7N3//ptn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//55q/75K + Df+3QgD/t0IA/7pDAP8IAwD/AAAA+////wH///8B////Af///wH///8B////Af///wH///8BAAAA+wAA + AP+lOwD/tD8A//iVX///mGP/6O/i/+jx5P/+mmX//5ll//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///nmr/vkoN/7dCAP+3QgD/ukMA/wgDAP8AAAD7////Af///wH///8B////Af///wH///8B////Af// + /wEAAAD7AAAA/6U7AP+1PAD/5ePT/+jv4f/o8uT/6PLl/+jv4v/p7d///5ll//+bZ///m2f//5tn//+b + Z///m2f//5tn//+eav++Sg3/t0IA/7dCAP+6QwD/CAMA/wAAAPv///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPkAAAD7pDsA/7Q8AP/l5Nb/5/Hk/+fx5P/o8uX/6PHk/+jv4f//mWX//5tn//+b + Z///m2f//5tn//+bZ///m2f//55q/75KDf+3QgD/tkEA/7lCAP8IAwD7AAAA+f///wH///8B////Af// + /wH///8B////Af///wH///8BAAAABQAAAAUCAADdAgAA/60/A/+2PwP/5+zf/+jx5P/+m2j//ptn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///nmr/vkoN/71EAP8SBgD/AgEA/wAAAA8AAAAF////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAN0AAAD/rT4A/7Y/AP/n6tv/6O/h//6b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//Jlk//ucaP++Sg3/vUQA/xAFAP8AAAD/AAAADf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA3QAAAP+tPgD/tkAA//uX + Yv//mWX//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+dav/AThL/tkAA/7ZBAP+9RAD/EAUA/wAA + AP8AAAAN////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADdAAAA/7NA + AP+8QgD//J5n//+gav//oGr//6Bq//+gav//oGr//6Bq//+gav//oGr//6Nt/8dREv+9RAD/vUQA/8NG + AP8QBQD/AAAA/wAAAA3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + ABMAAAAXDwUA6w8FAP8VDQj/Fg0J/xYNCf8WDQn/Fg0J/xYNCf8WDQn/Fg0J/xYNCf8WDQn/EAYB/xAF + AP8QBQD/EAUA/wQBACkAAAAX////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADpAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAF////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAAsAAAANAAAA8wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAALQAAAA3///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADzAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAj////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPMAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAACP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA9QAA + AP8AAAD/AAAA/wAAAP8AAAD/AAIF/wADBv8AAAD/AAAA/wAAAP8AAAD/AAAAJf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAAhAAAAIwAAACMAAAArAAAA/wAAAP8GO3b/B0B+/wADBv8AAAD/AAAASQAAACMAAAAF////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAA0AAAD/AAAA/wY3bv8GO3b/AAIE/wAAAP8AAAA/AAAAFwAA + AAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABcAAAApAAAA/wAAAP8GOXH/Bjp0/wAB + Af8AAAD/AAAAJf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAABcAAAD/AAAA/wc9 + ef8HPnz/AAEB/wAAAP8AAAAj////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AA0AAAANAAIF8wADBf8AAAD/AAAA/wAAACP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADxAAAA+wAAAPsAAAD7AAAAI////wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAKAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAALcAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA9QAA + AAX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAALsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA+QAAAAf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAABEAAAATAAAAEwAAABMAAAATAAAAEwwEAL0NBAD/DQQA/w0EAP8NBAD/DQQA/w0E + AP8NBAD/DQQA/w0EAP8NBAD/DQQA+wAAABUAAAATAAAAEwAAABMAAAATAAAAEwAAAAP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAN8AAAD/AAAA/wAAAP8AAAD/AAAA/5E0AP+7QwD/u0MA/7tD + AP+7QwD/u0MA/7tDAP+7QwD/u0MA/7tDAP+7QwD/ukMA/wMBAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ACP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAN0AAAD/AAAA/wAAAP8AAAD/AAAA/44z + AP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7dCAP+2QgD/t0IA/7dCAP+2QgD/tkEA/wMBAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAACH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABsAAAAhAAAAIRcIAOEXCAD/FwgA/xcI + AP8XCAD/FwgA/5E0AP+3QgD/tkIA/7ZBAP+3QgD/tkIA/7dCAP+2QgD/tkEA/7dCAP+2QgD/tkEA/xkJ + AP8XCAD/FwgA/xcIAP8XCAD/GQkA/wcCADsAAAAhAAAAIQAAAAP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/7A/ + AP/ARQD/wEUA/8BFAP/ARQD/wEUA/7hCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7ZBAP+3QgD/tkEA/7ZB + AP+3QgD/tkIA/79FAP/ARQD/v0UA/79FAP/ARQD/yUgA/xkJAP8AAAD/AAAA/wAAABX///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AM0AAAD/AAAA/6g8AP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7dC + AP+2QgD/t0IA/7dCAP+2QgD/t0IA/7dCAP+2QgD/t0IA/7dCAP+2QgD/wEUA/xcIAP8AAAD/AAAA/wAA + ABP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAM0AAAD/AAAA/6g8AP+3QgD/tkIA/7ZBAP+3QgD/tkIA/7ZBAP+3QgD/tkIA/7ZB + AP+3QgD/tkIA/7dCAP+2QgD/tkEA/7dCAP+2QgD/tkEA/7dCAP+2QgD/tkEA/7dCAP+2QgD/v0UA/xcI + AP8AAAD/AAAA/wAAABP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAM0AAAD/AAAA/6g8AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7ZBAP+3QgD/tkEA/7ZBAP+3QgD/tkEA/7ZBAP+3QgD/tkEA/7ZB + AP+3QgD/v0UA/xcIAP8AAAD/AAAA/wAAABP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM0AAAD/AAAA/6g8AP+3QgD/t0IA/7ZC + AP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7ZCAP+3QgD/t0IA/7dCAP+2QgD/t0IA/7dCAP+2QgD/t0IA/7dC + AP+2QgD/t0IA/7dCAP+2QgD/wEUA/xcIAP8AAAD/AAAA/wAAABP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAcAAAAHAAAABwMBAM0DAQD/AwEA/6g8 + AP+3QgD/tkIA/7dCAv+3QgL/t0IC/7dCAv+3QgL/t0IC/7dCAv+3QgL/t0IC/7dCAv+3QgL/t0IC/7dC + Av+3QgL/t0IC/7dCAP+2QgD/tkEA/7dCAP+2QgD/v0UA/xoJAP8DAQD/AwEA/wAAABcAAAAHAAAAB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPUAAAD5AAAA+Zs3 + AP22QQD/tkEA/7ZCAP+3QgD/tUAA//iXYv/9mmb//Zpm//2aZv/9mmb//Zpm//2aZv/9mmb//Zpm//2a + Zv/9mmb//Zpm//2aZv/9mmb//Z5r/8ZVG/+3QgD/tkEA/7ZBAP+3QgD/tkIA/7ZBAP+2QQD/ukMA/w0E + APsAAAD5AAAA9f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APkAAAD/AAAA/5w4AP+3QgD/t0IA/7ZCAP+3QgD/tUAA//mYY///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZv//m2f//5tn//+bZv//m2f//59r/8dVG/+2QgD/t0IA/7dCAP+2QgD/t0IA/7dC + AP+2QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/tkEA/7lEBv+5RAf/uEMH//qXY//+mmf//ppm//6a + Zv/+mmf//ppm//6aZv/+mmf//ppm//6bZv//mmb//ppm//6bZv//mmb//p5r/8lYIP+5RAf/uUUH/7dC + Af+2QgD/tkEA/7dCAP+2QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/sz0A//aVYP//nGn//p1p//6a + Z///m2f//ptm//6aZ///m2f//ptm//6aZ///m2f//ptm//6aZv//m2f//ppm//6aZv//m2f//ppm//6c + aP//nGn//qFv/8JPFf+3QgD/tkEA/7ZBAP+3QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/sz0A//WT + Xv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZv//m2f//5tn//+b + Zv//m2f//5tn//+bZv//m2f//59s/8FPFP+2QgD/t0IA/7dCAP+2QgD/u0MA/w0EAP8AAAD/AAAA+f// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4 + AP+3QgD/sz0A//WTXv/+mmf//ptn//6WYP/+lmD//pZg//6aZv/+mmf//ppm//6aZv/+mmf//ppm//6b + Zv//mmb//ppm//6bZv//mmb//ppm//6bZv//mmb//p9s/8FPFP+2QgD/tkEA/7dCAP+2QgD/u0MA/w0E + AP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APkAAAD/AAAA/5w4AP+3QgD/sz0A//WTXv//m2f//plk/+rn1v/p69r/6era//6bZ///m2f//ptm//6a + Z///m2f//ptm//6aZv//m2f//ppm//6aZv//m2f//ppm//6aZv//m2f//p9s/8FPFP+3QgD/tkEA/7ZB + AP+3QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/sz0A//WTXv//m2f//5lk/+ju4P/o8uX/6PHk//6b + Z///m2f//5tn//+bZ///m2f//5tn//+bZv//m2f//5tn//+bZv//m2f//5tn//+bZv//m2f//59s/8FP + FP+2QgD/t0IA/7dCAP+2QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/sz0A//WSXP/+mWT//pdg/+ju + 4P/n8uT/5/Hk//6ZZP/+mWT//plk//6aZv/+mmf//ppm//6bZv//mmb//ppm//6bZv//mmb//ppm//6b + Zv//mmb//p9s/8FPFP+2QgD/tkEA/7dCAP+2QgD/u0MA/w0EAP8AAAD/AAAA+f///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4AP+3QgD/tDkA/+Tb + yv/o7uD/6O7g/+jx5P/o8uX/6PHl/+ju4P/o7uD/6erc//6ZZP//m2f//ptm//6aZv//m2f//ppm//6a + Zv//m2f//ppm//6aZv//m2f//p9s/8FPFP+3QgD/tkEA/7ZBAP+3QgD/u0MA/w0EAP8AAAD/AAAA+f// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPkAAAD/AAAA/5w4 + AP+3QgD/tDkA/+Tg0P/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6O7g//+ZZP//m2f//5tn//+b + Zv//m2f//5tn//+bZv//m2f//5tn//+bZv//m2f//59s/8FPFP+2QgD/t0IA/7dCAP+2QgD/u0MA/w0E + AP8AAAD/AAAA+f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APUAAAD5AAAA+Zs3AP22QQD/szkA/+Pezv/n8OP/5/Dj/+fx5P/n8uT/5/Lk/+fx5P/n8eT/6O7f//6Z + Y//+mmf//ppm//6bZv//mmb//ppm//6bZv//mmb//ppm//6bZv//mmb//p9s/8FPFP+2QgD/tkIA/7ZB + AP+2QQD/ukMA/w0EAPsAAAD5AAAA9f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAcAAAAHAAAABwMBAM0DAQD/AwEA/6g9BP+3QwT/tj4E/+bq3P/o8uX/5/Hk//6b + aP/+m2f//ptn//6bZv//m2f//5pm//6bZ///m2f//ptm//6bZ///m2f//ptm//6bZ///m2f//p9s/8FP + FP+3QgD/wEUA/xoJAP8DAQD/AwEA/wAAABcAAAAHAAAAB////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM0AAAD/AAAA/6g8AP+3QgD/tT0A/+bq + 3P/n8uX/6PHk//6bZ///m2b//5tn//+bZ///m2b//5tn//+bZ///m2f//5tm//+bZ///m2f//5tm//+b + Z///m2f//59s/8FPFP+3QgD/wEUA/xcIAP8AAAD/AAAA/wAAABP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM0AAAD/AAAA/6g8 + AP+3QgD/tT0A/+bl1v/o7uD/6O7f//6bZ///m2f//ptn//6aZ///m2f//ptn//6bZ///m2f//ptn//6b + Z///m2f//ptn//uYZP/5mGP/+Zxo/8FOE/+2QgD/v0UA/xcIAP8AAAD/AAAA/wAAABP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AM0AAAD/AAAA/6g8AP+3QgD/tUAA//mWYP//mWT//5lk//6bZv//m2f//5pm//6bZv//m2f//5pm//6b + Z///m2f//ptm//6bZ///m2f//p9s/8VUG/+1QAD/tT8A/7ZBAP+3QgD/wEUA/xcIAP8AAAD/AAAA/wAA + ABP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAM0AAAD/AAAA/6g8AP+3QgD/tUAA//mYY///m2b//5tn//+bZ///m2b//5tn//+b + Z///m2b//5tn//+bZ///m2f//5tm//+bZ///m2f//59r/8dVG/+3QgD/t0IA/7dCAP+3QgD/wEUA/xcI + AP8AAAD/AAAA/wAAABP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/7A/AP/ARQD/vkMA//ufaP//omz//qJs//6i + bP//omz//qJs//6ibP//omz//qJs//6ibP//omz//qJs//6ibP//omz//qdx/89aHP/ARQD/wEUA/8BF + AP/ARQD/yUgA/xkJAP8AAAD/AAAA/wAAABX///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABsAAAAjAAAAIxcIAOEYCAD/FwgA/yAT + DP8hFA3/IRQN/yEUDf8hFA3/IRQN/yEUDf8hFA3/IRQN/yEUDf8hFA3/IRQN/yEUDf8hFA3/IRQO/xoL + A/8YCAD/GAgA/xgIAP8YCAD/GQkA/wcCADsAAAAjAAAAIwAAAAP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AN0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAACH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAN8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAACP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAABEAAAATAAAAEwAAAO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEEAAAATAAAAEwAA + AAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAO0AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ADP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAADP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAECP8ABAj/AAQJ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADf///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAADEAAAAzAAAAMwAA + ADMAAAAzAAAAPwAAAP8AAAD/AAAA/wY6c/8HP33/BkGA/wAECf8AAAD/AAAA/wAAAGkAAAAzAAAAMwAA + AAv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAEwAAAP8AAAD/AAAA/wY5cf8HPnv/Bz99/wAECP8AAAD/AAAA/wAA + AEX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAFQAAAP8AAAD/AAAA/wY0aP8GOXH/Bjpz/wAD + Bv8AAAD/AAAA/wAAAFsAAAAhAAAAIQAAAAf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAACEAAAAjAAAAOwAA + AP8AAAD/AAAA/wY2bP8GOXH/Bjhw/wABAv8AAAD/AAAA/wAAADf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAIQAAAP8AAAD/AAAA/wc7dv8HPnv/Bz16/wABAv8AAAD/AAAA/wAAADP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAIwAAAP8AAAD/AAAA/wc9ef8HP33/Bj59/wABAv8AAAD/AAAA/wAA + ADP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAABMAAAATAAAAEwAECO0ABAn/AAQI/wAA + AP8AAAD/AAAA/wAAADP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAOkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAADP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//ygA + AABAAAAAgAAAAAEAIAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAChAAAA9wAAAPcAAAD3AAAA9wAAAPcAAAD3AAAA9wAAAPcAAAD3AAAA9wAA + APcAAAD3AAAA9wAAAPcAAADzAAAAB////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAowAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA9wAAAAf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAKMAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPcAAAAH////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAFQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAA + ABkQBQCpEQYA/xEGAP8RBgD/EQYA/xEGAP8RBgD/EQYA/xEGAP8RBgD/EQYA/xEGAP8RBgD/EQYA/xEG + AP8RBgD5AQAAGwAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAABkAAAAF////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAANUAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/hC8A/71EAP+9RAD/vUQA/71EAP+9RAD/vUQA/71EAP+9RAD/vUQA/71E + AP+9RAD/vUQA/71EAP+9RAD/vEMA/wUCAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAL/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADTAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4AuAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7ZBAP8FAgD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAC3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA0wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+ALgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+2QQD/BQIA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAt////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAIQAAAC0AAAAtAAAALR4LANcgCwD/IAsA/yALAP8gCwD/IAsA/yAL + AP8gCwD/hjAA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/tkEA/yEMAP8gCwD/IAsA/yALAP8gCwD/IAsA/yALAP8iDAD/CgMASwAAAC0AAAAtAAAALQAA + AAX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAL8AAAD/AAAA/wAAAP+uPwD/w0YA/8NG + AP/DRgD/w0YA/8NGAP/DRgD/w0YA/7pDAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/CRgD/w0YA/8NGAP/DRgD/w0YA/8NGAP/DRgD/z0sA/yIM + AP8AAAD/AAAA/wAAAP8AAAAb////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAC7AAAA/wAA + AP8AAAD/ozsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/8NGAP8gCwD/AAAA/wAAAP8AAAD/AAAAGf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAuwAAAP8AAAD/AAAA/6M7AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/DRgD/IAsA/wAAAP8AAAD/AAAA/wAAABn///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAALsAAAD/AAAA/wAAAP+jOwD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/w0YA/yALAP8AAAD/AAAA/wAA + AP8AAAAZ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAC7AAAA/wAAAP8AAAD/ozsA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/8NG + AP8gCwD/AAAA/wAAAP8AAAD/AAAAGf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAuwAA + AP8AAAD/AAAA/6M7AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP/DRgD/IAsA/wAAAP8AAAD/AAAA/wAAABn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAALsAAAD/AAAA/wAAAP+jOwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/w0YA/yALAP8AAAD/AAAA/wAAAP8AAAAZ////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAcAAAAHAAAABwAAAAcEAQC7BQIA/wUCAP8FAgD/ozoA/7dCAP+3QgD/t0IA/7dC + Av+3QgP/t0ID/7dCA/+3QgP/t0ID/7dCA/+3QgP/t0ID/7dCA/+3QgP/t0ID/7dCA/+3QgP/t0ID/7dC + A/+3QgP/t0ID/7dCA/+3QgP/t0IB/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/8NGAP8jDAD/BQIA/wUC + AP8FAgD/AQAAHQAAAAcAAAAHAAAAB////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADzAAAA9wAAAPcAAAD3kjQA/bZBAP+2QQD/tkEA/7ZC + AP+3QgD/t0IA/7U/AP/2lmH//Zpm//2aZv/9mmb//Zpm//2aZv/9mmb//Zpm//2aZv/9mmb//Zpm//2a + Zv/9mmb//Zpm//2aZv/9mmb//Zpm//2aZv/9mmb//Z9s/8xcJP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/tkEA/7ZBAP+2QQD/u0MA/xEGAPkAAAD3AAAA9wAAAPP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA9wAAAP8AAAD/AAAA/5M1 + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+1PwD/+Jdi//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+gbf/MXCT/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/71EAP8RBgD/AAAA/wAAAP8AAAD3////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APcAAAD/AAAA/wAAAP+TNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/tT8A//iXYv//m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///oG3/zFwk/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+9RAD/EQYA/wAA + AP8AAAD/AAAA9////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAD3AAAA/wAAAP8AAAD/kzUA/7dCAP+3QgD/tkEA/7lFCf+6Rgr/ukYK/7hD + Cv/4l2L//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//6Bt/85fKv+6Rgr/ukYK/7pGCv+3QgL/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/vUQA/xEGAP8AAAD/AAAA/wAAAPf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA9wAAAP8AAAD/AAAA/5M1AP+3QgD/t0IA/7E7 + AP/zk17//51q//+dav//nWr//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+aZv//nWn//51q//+dav//pHH/xVQc/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/71EAP8RBgD/AAAA/wAAAP8AAAD3////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPcAAAD/AAAA/wAA + AP+TNQD/t0IA/7dCAP+yPAD/8pFc//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//6Fu/8VTG/+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+9RAD/EQYA/wAAAP8AAAD/AAAA9/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAD3AAAA/wAAAP8AAAD/kzUA/7dCAP+3QgD/sjwA//KRXP//m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+hbv/FUxv/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/vUQA/xEG + AP8AAAD/AAAA/wAAAPf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA9wAAAP8AAAD/AAAA/5M1AP+3QgD/t0IA/7I8AP/ykVz//5tn//+b + Z///m2f//5Vf//+VXv//lV7//5Ve//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///oW7/xVMb/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/71EAP8RBgD/AAAA/wAAAP8AAAD3////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPcAAAD/AAAA/wAAAP+TNQD/t0IA/7dC + AP+yPAD/8pFc//+bZ///m2f//5hj/+vj0f/q6df/6unX/+rn1v/+m2j//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6Fu/8VT + G/+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+9RAD/EQYA/wAAAP8AAAD/AAAA9////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAD3AAAA/wAA + AP8AAAD/kzUA/7dCAP+3QgD/sjwA//KRXP//m2f//5tn//+YY//p7d//6PLl/+jy5f/o8eT//pto//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+hbv/FUxv/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/vUQA/xEGAP8AAAD/AAAA/wAA + APf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAA9wAAAP8AAAD/AAAA/5M1AP+3QgD/t0IA/7I8AP/ykVz//5tn//+bZ///mGP/6e3f/+jy + 5f/o8uX/6PHk//6baP//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///oW7/xVMb/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/71E + AP8RBgD/AAAA/wAAAP8AAAD3////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPcAAAD/AAAA/wAAAP+TNQD/t0IA/7dCAP+yPAD/8o9Y//+Y + Y///mGP//5Vf/+nt3//o8uX/6PLl/+jx5P/+mWT//5hj//+YY///mGP//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6Fu/8VTG/+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+9RAD/EQYA/wAAAP8AAAD/AAAA9////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAD3AAAA/wAAAP8AAAD/kzUA/7dC + AP+3QgD/szYA/+PUwf/p7d//6e3f/+nt3v/o8uT/6PLl/+jy5f/o8uX/6e3f/+nt3//p7d//6ujZ//+Y + Y///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+h + bv/FUxv/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/vUQA/xEGAP8AAAD/AAAA/wAAAPf///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA9wAA + AP8AAAD/AAAA/5M1AP+3QgD/t0IA/7M2AP/j2sr/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+nt3///mGP//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///oW7/xVMb/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/71EAP8RBgD/AAAA/wAA + AP8AAAD3////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPcAAAD/AAAA/wAAAP+TNQD/t0IA/7dCAP+zNgD/49rK/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/p7d///5hj//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6Fu/8VTG/+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+9RAD/EQYA/wAAAP8AAAD/AAAA9////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADzAAAA9wAAAPcAAAD3kjQA/bZBAP+2QQD/sjYA/+LX + xv/n8OP/5/Dj/+fw4//n8eT/6PLl/+jy5f/o8uX/6PHk/+jx5P/o8eT/6e3e//+YY///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+hbv/FUxv/t0IA/7dC + AP+3QgD/tkEA/7ZBAP+2QQD/u0MA/xEGAPkAAAD3AAAA9wAAAPP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAABwAAAAcAAAAHAAAABwQB + ALsFAgD/BQIA/wUBAP+kPAX/t0MG/7dDBv+2PQb/5ufa/+jy5f/o8uX/6PHk//6caf/+m2j//pto//6b + aP//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///oW7/xVMb/7dCAP+3QgD/w0YA/yMMAP8FAgD/BQIA/wUCAP8BAAAdAAAABwAAAAcAAAAH////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAC7AAAA/wAAAP8AAAD/ozsA/7dCAP+3QgD/tTwA/+bn2v/o8uX/6PLl/+jx + 5P/+m2j//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//6Fu/8VTG/+3QgD/t0IA/8NGAP8gCwD/AAAA/wAAAP8AAAD/AAAAGf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAuwAAAP8AAAD/AAAA/6M7AP+3QgD/t0IA/7U8 + AP/m59r/6PLl/+jy5f/o8eT//pto//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+hbv/FUxv/t0IA/7dCAP/DRgD/IAsA/wAA + AP8AAAD/AAAA/wAAABn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAALsAAAD/AAAA/wAA + AP+jOwD/t0IA/7dCAP+1PAD/5uHR/+nt3//p7d//6e3e//6baP//m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ//6mGP/+Jdi//iXYv/4nWn/xFMa/7dC + AP+3QgD/w0YA/yALAP8AAAD/AAAA/wAAAP8AAAAZ////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAC7AAAA/wAAAP8AAAD/ozsA/7dCAP+3QgD/tT8A//iUXv//mGP//5hj//+YY///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///oG3/y1ok/7U/ + AP+1PwD/tT8A/7ZBAP+3QgD/t0IA/8NGAP8gCwD/AAAA/wAAAP8AAAD/AAAAGf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAuwAAAP8AAAD/AAAA/6M7AP+3QgD/t0IA/7U/AP/4l2L//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//6Bt/8xcJP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/DRgD/IAsA/wAAAP8AAAD/AAAA/wAA + ABn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAALsAAAD/AAAA/wAAAP+jOwD/t0IA/7dC + AP+1PwD/+Jdi//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+gbf/MXCT/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/w0YA/yAL + AP8AAAD/AAAA/wAAAP8AAAAZ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAC/AAAA/wAA + AP8AAAD/rj8A/8NGAP/DRgD/wUMA//uhaP//pW7//6Vu//+lbv//pW7//6Vu//+lbv//pW7//6Vu//+l + bv//pW7//6Vu//+lbv//pW7//6Vu//+lbv//pW7//6Vu//+lbv//q3T/12In/8NGAP/DRgD/w0YA/8NG + AP/DRgD/w0YA/89LAP8iDAD/AAAA/wAAAP8AAAD/AAAAG////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAIQAAAC0AAAAtAAAALR4LANcgCwD/IAsA/x8LAP8rGhH/LBsS/ywbEv8sGxL/LBsS/ywb + Ev8sGxL/LBsS/ywbEv8sGxL/LBsS/ywbEv8sGxL/LBsS/ywbEv8sGxL/LBsS/ywbEv8sGxL/LBwT/yMQ + Bv8gCwD/IAsA/yALAP8gCwD/IAsA/yALAP8iDAD/CgMASwAAAC0AAAAtAAAALQAAAAX///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADTAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAC3///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA0wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAAt////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAANUAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAL////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAVAAAAGQAAABkAAAAZAAAA5wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAVQAAABkAAAAZAAAAGQAAAAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AOcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADnAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABF////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA5wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAARf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAOcAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEX///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADnAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABF////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA5wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAARf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAO8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAFCv8ABgz/AAYM/wAGDP8AAAH/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAEn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAA/AAAARQAA + AEUAAABFAAAARQAAAEUAAABFAAAATwAAAP8AAAD/AAAA/wAAAP8GOXH/B0B+/wdAfv8HQoL/AAYM/wAA + AP8AAAD/AAAA/wAAAIUAAABFAAAARQAAAEUAAAAT////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABkAAAD/AAAA/wAAAP8AAAD/Bjdu/wc+ + e/8HPnv/B0B+/wAGDP8AAAD/AAAA/wAAAP8AAABb////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAAZAAAA/wAA + AP8AAAD/AAAA/wY3bv8HPnv/Bz57/wdAfv8ABgz/AAAA/wAAAP8AAAD/AAAAW////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAGwAAAP8AAAD/AAAA/wAAAP8FMWL/Bjdu/wY3bv8GOXH/AAMH/wAAAP8AAAD/AAAA/wAA + AHUAAAAtAAAALQAAAC0AAAAN////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAAUAAAAtAAAALQAAAC0AAABLAAAA/wAAAP8AAAD/AAAA/wY0 + aP8GN27/Bjdu/wY3bf8AAgP/AAAA/wAAAP8AAAD/AAAASf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAALQAA + AP8AAAD/AAAA/wAAAP8HO3X/Bz57/wc+e/8HPXr/AAID/wAAAP8AAAD/AAAA/wAAAEX///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAC0AAAD/AAAA/wAAAP8AAAD/Bzt1/wc+e/8HPnv/Bz16/wACA/8AAAD/AAAA/wAA + AP8AAABF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAvAAAA/wAAAP8AAAD/AAAA/wc8eP8HQH7/B0B+/wc/ + ff8AAgP/AAAA/wAAAP8AAAD/AAAARf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAABQAAABkAAAAZAAAAGQAA + ABkABQvnAAYM/wAGDP8ABgv/AAAA/wAAAP8AAAD/AAAA/wAAAEX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA5wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABF////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAOcAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAARf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADjAAAA9wAA + APcAAAD3AAAA9wAAAPcAAAD3AAAA9wAAAEX///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAoAAAAgAAAAAABAAABACAAAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAA////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAARQAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAA + APEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAA + APEAAADxAAAA8QAAAOMAAAAN////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAABNAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+wAAAA////8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAEkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADxAAAAD////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAASQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPEAAAAP////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAABJAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA8QAAAA////8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAEkAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADxAAAAD/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAANwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAACEAAAAxAAAAMQAA + ADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEKBABtJw4A/yMN + AP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMN + AP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8jDQD/Iw0A/yMNAP8lDQD/IQwA9QIB + AD0AAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAA + ADEAAAAR////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAsQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/zgUAP/YTgD/wkYA/8JGAP/CRgD/wkYA/8JGAP/CRgD/wkYA/8JG + AP/CRgD/wkYA/8JGAP/CRgD/wkYA/8JGAP/CRgD/wkYA/8JGAP/CRgD/wkYA/8JGAP/CRgD/wkYA/8JG + AP/CRgD/wkYA/8JGAP/CRgD/wkYA/8tJAP+3QgD/CwQA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAF////8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAACnAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/NRMA/81K + AP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hC + AP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/uEIA/7hCAP+4QgD/wEUA/64+ + AP8KBAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAWf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAKcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP81EwD/zEoA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+/RQD/rT4A/woEAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABZ////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAApwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zUT + AP/MSgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/79F + AP+tPgD/CgQA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAFn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAACnAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/NRMA/8xKAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/v0UA/60+AP8KBAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAWf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AKcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP81EwD/zEoA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+/RQD/rT4A/woEAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAABZ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAmwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMNAP/PSwD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/8BFAP+sPQD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAKQAAAFkAAABZAAAAWQAAAFkAAABZAAAAWQAA + AFkpDwDFSRoA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AX + AP9AFwD/YiMA/8VHAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/vEQA/7A/AP9GGgD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AX + AP9AFwD/QBcA/0AXAP9IGgD/FggAkwAAAFkAAABZAAAAWQAAAFkAAABZAAAAWQAAAFkAAAAR////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAACHAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4cxAP/sVQD/z0sA/89LAP/PSwD/z0sA/89L + AP/PSwD/z0sA/89LAP/PSwD/z0sA/89LAP/PSwD/z0sA/89LAP/ISAD/tEEA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+2QgD/uEMA/85KAP/PSwD/z0sA/89L + AP/PSwD/z0sA/89LAP/PSwD/z0sA/89LAP/PSwD/z0sA/89LAP/PSwD/z0sA/+pVAP9IGgD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADn///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAMf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/3crAP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/89LAP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ADH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dysA/9BLAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AX + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAMf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAdwAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAAx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3crAP/QSwD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/89L + AP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAB3AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/3crAP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/89LAP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAADH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dysA/9BL + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAMf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAdwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3cr + AP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/89LAP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAcQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP90KgD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7U/AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+ + AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+ + AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+AP+0PgD/tD4A/7Q+ + AP+0PgD/tD4A/7Q+AP+1PwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP/QSwD/OxUA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAp////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAA + AA8FAgB/DAQA/woEAP8KBAD/CgQA/woEAP8KBAD/CgQA/3ssAP/PSgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/ukYF/7tIBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tH + Bv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tH + Bv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0cG/7tHBv+7Rwb/u0gH/7pGBP+3QQD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/85KAP9HGQD/CgQA/woE + AP8KBAD/CgQA/woEAP8KBAD/CwQA/wIBAD0AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAP////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADjAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8VAdAPfFRwD/rT4A/60+AP+tPgD/rT4A/60+ + AP+tPgD/s0EA/7hDAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7M9AP/uhk7/+55r//uWYf/7lmH/+5Zh//uW + Yf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uW + Yf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uWYf/7lmH/+5Zh//uW + Yf/7lmH/+5Zh//uWYf/7oG3/531F/685AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/uEMA/7BAAP+tPgD/rT4A/60+AP+tPgD/rT4A/64+AP+3QgD/IQwA8wAA + APEAAADxAAAA8QAAAPEAAADxAAAA8QAAAOP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPsAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/WSAA/9pOAP+/RQD/v0UA/79FAP+/RQD/v0UA/79FAP+6QwD/tkIA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/sz0A//ONVv//qHb//59r//+fa///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+f + a///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+f + a///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+fa///n2v//59r//+qef/shEz/rzgA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+2QgD/vEQA/79F + AP+/RQD/v0UA/79FAP+/RQD/wEUA/8pJAP8kDgD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+zPQD/8YpT//+kcf//m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//6Z0/+qBSf+vOAD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMN + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7M9AP/xilP//6Rx//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///pnT/6oFJ/684 + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + APH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/sz0A//GKU///pHH//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+mdP/qgUn/rzgA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JG + AP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+zPQD/8YpT//+kcf//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6Z0/+qB + Sf+vOAD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAADx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+4QwD/sjwA/7A4AP+wOQD/sDkA/7A5AP+wOQD/sDkA/6w0AP/wiFH//6Vy//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///p3X/6H5G/6cuAP+wOQD/sDkA/7A5AP+wOQD/sDkA/7A4 + AP+zPQD/uEMA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hC + AP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7VAAP/ATQ3/xVUX/8VT + FP/FUxT/xVMU/8VTFP/FUxT/wk8U//SNV///om///5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+k + cf/uhk//vksU/8VTFP/FUxT/xVMU/8VTFP/FUxT/xVYX/79LC/+1PwD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/rDUA/+l/R///rXz//6Bt//+gbf//oG3//6Bt//+gbf//oW3//5xo//+a + Zv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5pm//+daf//oW3//6Bt//+gbf//oG3//6Bt//+g + bf//rn3/4HU6/6w0AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+tNgD/5nxD//+n + df//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FL + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/602AP/mfEP//6d1//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/rTYA/+Z8 + Q///p3X//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1Uf + AP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+tNgD/5nxD//+ndf//m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/602 + AP/mfEP//6d1//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/rTYA/+Z8Q///p3X//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+tNgD/5nxD//+ndf//m2f//5tn//+bZ///m2f//5tn//+caP//kln//45V//+PVv//j1b//49W//+P + Vv//j1b//5BX//+aZv//nGj//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/602AP/mfEP//6d1//+bZ///m2f//5tn//+b + Z///m2f//5hi//PJqf/v2cH/8NS5//DUuf/w1Ln/8NS5/+/WvP/x0LX//p5s//+YZP//m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8f// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/rTYA/+Z8Q///p3X//5tn//+bZ///m2f//5tn//+bZ///lV7/6evb/+P////l/vb/5f72/+X+ + 9v/l/vb/5P/8/+b47v/+oW///5Zh//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601 + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMN + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+tNgD/5nxD//+ndf//m2f//5tn//+b + Z///m2f//5tn//+WX//s4c3/5vrx/+jy5f/o8uX/6PLl/+jy5f/n9ur/6e3e//6gbv//l2L//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + APH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/602AP/mfEP//6d1//+bZ///m2f//5tn//+bZ///m2f//5Zf/+zhzf/m+vH/6PLl/+jy + 5f/o8uX/6PLl/+f26v/p7d7//qBu//+XYv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95y + N/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JG + AP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/rTYA/+Z8Q///p3X//5tn//+b + Z///m2f//5tn//+bZ///ll//7OHN/+b68f/o8uX/6PLl/+jy5f/o8uX/5/bq/+nt3v/+oG7//5di//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAADx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+tNgD/5nxD//+ndf//m2f//5tn//+bZ///m2f//5tn//+WX//s4c3/5vrx/+jy + 5f/o8uX/6PLl/+jy5f/n9ur/6e3e//6gbv//l2L//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+o + dv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hC + AP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/602AP/mfEP//6d1//+b + Z///m2f//5tn//+bZ///m2f//5Zf/+zhzf/m+vH/6PLl/+jy5f/o8uX/6PLl/+f26v/p7d7//qBu//+X + Yv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/rTcA/+d5Pv//om3//5Zf//+WX///ll///5Zf//+WX///kFf/7ODM/+b6 + 8v/o8uX/6PLl/+jy5f/o8uX/5/bq/+nt3v//m2f//5Ja//+WX///ll///5Zf//+WX///lV///5dh//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///qHb/3nI3/601AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/1UfAP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+vLQD/2qqF//Lu + 5P/s4c3/7OHN/+zhzf/s4c3/7OHN/+zgy//p7+D/6PTn/+jy5f/o8uX/6PLl/+jy5f/o8+b/6PHk/+zi + zv/s4Mz/7OHN/+zhzf/s4c3/7OHN/+vo1v/w07n//5dh//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAPH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FL + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7AqAP/Wup3/7f///+b68f/m+vH/5vrx/+b68f/m+vH/5vvy/+j0 + 5//o8eT/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8ub/5vrw/+b78v/m+vH/5vrx/+b68f/m+vH/5P/+/+ro + 1///ll7//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/sCsA/9e1 + lf/v////6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/m+vH/7OHN//+WX///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1Uf + AP/RSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+wKwD/17WV/+/////o8uX/6PLl/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+b6 + 8f/s4c3//5Zf//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7hCAP/CRgD/Iw0A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + APEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VR8A/9FLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7Ar + AP/XtZX/7////+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/5vrx/+zhzf//ll///5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/uEIA/8JGAP8jDQD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA8f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP9VHwD/0UsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/sCsA/9e1lf/v////6PLl/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6PLl/+jy + 5f/m+vH/7OHN//+WX///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+4QgD/wkYA/yMNAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADx////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAD7AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/1kgAP/aTgD/v0UA/79FAP+/RQD/v0UA/79F + AP+3LQD/27ub//D////q+e//6vnv/+r57//q+e//6vnv/+r67//o8+f/6PHk/+jy5f/o8uX/6PLl/+jy + 5f/o8uX/6PLl/+f16v/n9ur/5/bq/+f26v/n9ur/5/bq/+X+9//r5NH//5Zf//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/tkIA/7xEAP+/RQD/v0UA/79FAP+/RQD/v0UA/8BFAP/KSQD/JA4A/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAOMAAADxAAAA8QAAAPEAAADxAAAA8QAA + APEAAADxUB0A98VHAP+tPgD/rT4A/60+AP+tPgD/rT4A/6YpAP/SrY3/7fXx/+Xo2P/l6Nj/5ejY/+Xo + 2P/l6Nj/5efY/+fw4v/o8+b/6PLl/+jy5f/o8uX/6PLl/+jy5f/o8uX/6e3e/+nt3v/p7d7/6e3e/+nt + 3v/p7d7/5/Xp/+3dx///ll///5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP+4QwD/sEAA/60+ + AP+tPgD/rT4A/60+AP+tPgD/rj4A/7dCAP8hDADzAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA4/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8FAgB/DAQA/woEAP8KBAD/CgQA/woE + AP8KBAD/CgIA/3wzCP/SVQ7/ukwN/7pMDf+6TA3/ukwN/7pLDf+3Qg3/4NK8/+3++v/o8uX/6PLl/+jy + 5f/o8uX/5/bq/+nt3v/9pXX//pxp//6gbv/+oG7//qBu//6gbv/+oG///p9t//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601 + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/85KAP9HGQD/CgQA/woEAP8KBAD/CgQA/woEAP8KBAD/CwQA/wIB + AD0AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAHEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/cyUA/89EAP+1OwD/tTsA/7U7 + AP+1OwD/tToA/7IvAP/fz7f/7f/8/+jy5f/o8uX/6PLl/+jy5f/n9ur/6e3e//+daf//k13//5di//+X + Yv//l2L//5di//+XYf//mGP//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+odv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/0EsA/zsV + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAKf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAdwAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dCAP+3QQD/tDcA/9/Quf/t//v/6PLl/+jy + 5f/o8uX/6PLl/+f26v/p7d7//qBu//+XYv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95y + N/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAAx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3crAP/QSwD/t0IA/7dC + AP+3QgD/t0IA/7dBAP+0NwD/39C5/+3/+//o8uX/6PLl/+jy5f/o8uX/5/bq/+nt3v/+oG7//5di//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///qHb/3nI3/601AP+3QgD/t0IA/7dCAP+3QgD/t0IA/89L + AP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0EA/7Q3AP/f0Ln/7f/7/+jy + 5f/o8uX/6PLl/+jy5f/n9ur/6e3e//6gbv//l2L//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+o + dv/ecjf/rTUA/7dCAP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dC + AP+3QgD/t0IA/7dCAP+3QQD/tDcA/9/Quf/t//v/6PLl/+jy5f/o8uX/6PLl/+f26v/p7d7//qBu//+X + Yv//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6h2/95yN/+tNQD/t0IA/7dCAP+3QgD/t0IA/7dC + AP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAB3AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/3crAP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dBAP+0NgD/3dfD/+v/ + ///m+vH/5vrx/+b68f/m+vH/5f/3/+f16f/+oG///5di//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5pm//+eav//pXH//6Rx//+kcf//pHH//6Rx//+k + cf//soH/4nc8/6w0AP+3QgD/t0IA/7dCAP+3QgD/t0IA/89LAP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAADH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dysA/9BL + AP+3QgD/t0IA/7dCAP+3QgD/t0EA/7Q4AP/iwqX/8O3g/+zhzf/s4c3/7OHN/+zhzf/s5NH/7d3H//6f + bf//mGP//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///nWn/+5Zh//CIU//xilP/8YpT//GKU//xilP/8YpT//GUX//WaSz/rzgA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAMf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAdwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/sz0A//KG + Tf//n2n//5Zf//+WX///ll///5Zf//+WX///lmD//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+ndf/pf0f/qjIA/7M9AP+zPQD/sz0A/7M9 + AP+zPQD/szwA/7U/AP+4QwD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3cr + AP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dCAP+zPQD/8YpT//+kcf//m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//6Z0/+qBSf+vOAD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/89LAP9AFwD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7M9 + AP/xilP//6Rx//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///pnT/6oFJ/684AP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP93KwD/0EsA/7dCAP+3QgD/t0IA/7dCAP+3QgD/sz0A//GKU///pHH//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+mdP/qgUn/rzgA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3crAP/QSwD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+zPQD/8YpT//+kcf//m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//6Z0/+qBSf+vOAD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/89LAP9AFwD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAHcAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/dysA/9BLAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7M9AP/xilP//6Rx//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///pnT/6oFJ/684AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/z0sA/0AXAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAMf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAdwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP93KwD/0EsA/7dCAP+3QgD/t0IA/7dC + AP+3QgD/sz0A//GKU///pHH//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+b + Z///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+bZ///m2f//5tn//+mdP/qgUn/rzgA/7dC + AP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP+3QgD/t0IA/7dCAP/PSwD/QBcA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAACHAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/4cxAP/sVQD/z0sA/89LAP/PSwD/z0sA/89LAP/LRQD//5xe//+6gP//sHX//7B1//+w + df//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+w + df//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+wdf//sHX//7B1//+w + df//sHX//7B1//+wdf//sHX//7yD//+SU//GPwD/z0sA/89LAP/PSwD/z0sA/89LAP/PSwD/z0sA/89L + AP/PSwD/z0sA/89LAP/PSwD/z0sA/+pVAP9IGgD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ADn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAACkAAABZAAAAWQAAAFkAAABZAAAAWQAAAFkAAABZKQ8AxUkaAP9AFwD/QBcA/0AX + AP9AFwD/QBcA/z4VAP9UMB3/WTkn/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2 + JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2 + JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZNiT/WTYk/1k2JP9ZOij/Ui0Z/z0U + AP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/QBcA/0AXAP9AFwD/SBoA/xYI + AJMAAABZAAAAWQAAAFkAAABZAAAAWQAAAFkAAABZAAAAEf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAACbAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAQ////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAKcAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAABZ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAApwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAFn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAACnAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAWf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAKcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABZ////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAApwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAFn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAACxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAX////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + ACEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAAAA1wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAoQAAADEAAAAxAAAAMQAA + ADEAAAAxAAAAMQAAADEAAAAR////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADJAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAB/////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAzwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAif///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADPAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAzwAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAif// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AIn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAzwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAif///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADPAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAACJ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAzwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAif///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA7QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AQgP/wIOG/8BDBj/AQwY/wEMGP8BDBj/AQwY/wENGf8AAgX/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAnf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAABvAAAAiQAAAIkAAACJAAAAiQAAAIkAAACJAAAAiQAAAIkAAACJAAAAiQAAAIkAAACJAAAAiQAA + AIkAAAChAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8FKlX/CEuU/wdCgv8HQoL/B0KC/wdC + gv8HQoL/B0aK/wENGf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3QAAAIkAAACJAAAAiQAA + AIkAAACJAAAAiQAAAIkAAABL////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABMAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wUoUP8IR43/Bz57/wc+e/8HPnv/Bz57/wc+e/8HQoL/AQwY/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAACt////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAMQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BShQ/whHjP8HPnv/Bz57/wc+ + e/8HPnv/Bz57/wdCgv8BDBj/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAALf///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAAxAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8FKFD/CEeM/wc+e/8HPnv/Bz57/wc+e/8HPnv/B0KC/wEMGP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAt////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAADEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wUoUP8IR4z/Bz57/wc+ + e/8HPnv/Bz57/wc+e/8HQoL/AQwY/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAC3////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAMQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/BShQ/whHjP8HPnv/Bz57/wc+e/8HPnv/Bz57/wdCgv8BDBj/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAALf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAAxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8GLVv/CVGf/whH + jP8IR4z/CEeM/whHjP8IR4z/CEuU/wEOG/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAArf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAADkAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wMaNP8FLlv/BShQ/wUoUP8FKFD/BShQ/wUoUP8FK1X/AAEC/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADPAAAAWQAAAFkAAABZAAAAWQAAAFkAAABZAAAAWQAA + ADH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAEQAAAFkAAABZAAAAWQAAAFkAAABZAAAAWQAAAFkAAACTAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8EHz3/BSxY/wUoUP8FKFD/BShQ/wUoUP8FKlP/BSZM/wAD + Bf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAm////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAEMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wc5 + cf8JTZr/CEeM/whHjP8IR4z/CEeM/whKkv8IQoT/AAUI/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAACJ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAWQAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BjJj/whEh/8HPnv/Bz57/wc+e/8HPnv/B0GA/wc6 + dP8ABAf/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAABZAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8GMmP/CESH/wc+e/8HPnv/Bz57/wc+e/8HQYD/Bzp0/wAEB/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAif///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AFkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wYyY/8IRIf/Bz57/wc+e/8HPnv/Bz57/wdB + gP8HOnT/AAQH/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAWQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/BjJj/whEh/8HPnv/Bz57/wc+e/8HPnv/B0GA/wc6dP8ABAf/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAABZAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8GMmP/CESI/wc+e/8HPnv/Bz57/wc+ + e/8HQYD/Bzp0/wAEB/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAif///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAF8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wY1af8ISI//B0KC/wdCgv8HQoL/B0KC/wdFiP8HPXv/AAQH/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAACJ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAEQAAADEAAAAxAAAAMQAAADEAAAAxAAAAMQAAADEAAAAxAQoT1wINGv8BDBj/AQwY/wEM + GP8BDBj/AQ0Z/wELFv8AAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADJAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAif///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAzwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIn///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADPAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAif// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJ////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA1wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AI////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADDAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAA8QAA + APEAAADxAAAA8QAAAPEAAADxAAAA8QAAAPEAAADxAAAAgf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA + + + \ No newline at end of file diff --git a/AmiiBomb/Program.cs b/AmiiBomb/Program.cs new file mode 100644 index 0000000..56318ca --- /dev/null +++ b/AmiiBomb/Program.cs @@ -0,0 +1,49 @@ +using System; +using System.IO; +using System.Windows.Forms; + +namespace AmiiBomb +{ + static class Program + { + [STAThread] + static void Main() + { + try + { + Check_AmiiBomb_Files(); + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Main_Form()); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + Application.Exit(); + } + } + + private static void Check_AmiiBomb_Files() + { + if (!Directory.Exists("cache")) throw new Exception("\"cache\" folder is missing!"); + if (!Directory.Exists("lang")) throw new Exception("\"lang\" folder is missing!"); + if (!Directory.Exists("lib")) throw new Exception("\"lib\" folder is missing!"); + + if (!Directory.Exists("lib\\ArduinoHex")) throw new Exception("\"lib\\ArduinoHex\" folder is missing!"); + + if (!File.Exists(@"lib\ArduinoHex\AmiiBombuino.Mega.hex")) throw new Exception("\"lib\\ArduinoHex\\AmiiBombuino.Mega.hex\" file is missing!"); + if (!File.Exists(@"lib\ArduinoHex\AmiiBombuino.Micro.hex")) throw new Exception("\"lib\\ArduinoHex\\AmiiBombuino.Micro.hex\" file is missing!"); + if (!File.Exists(@"lib\ArduinoHex\AmiiBombuino.Nano.hex")) throw new Exception("\"lib\\ArduinoHex\\AmiiBombuino.Nano.hex\" file is missing!"); + if (!File.Exists(@"lib\ArduinoHex\AmiiBombuino.Uno.hex")) throw new Exception("\"lib\\ArduinoHex\\AmiiBombuino.Uno.hex\" file is missing!"); + + if (!File.Exists(@"lib\AmiiBomb.conf")) throw new Exception("\"lib\\AmiiBomb.conf\" file is missing!"); + if (!File.Exists(@"lib\AngleSharp.dll")) throw new Exception("\"lib\\AngleSharp.dll\" file is missing!"); + if (!File.Exists(@"lib\Arduino-RC522.png")) throw new Exception("\"lib\\Arduino-RC522.png\" file is missing!"); + if (!File.Exists(@"lib\BouncyCastle.Crypto.dll")) throw new Exception("\"lib\\BouncyCastle.Crypto.dll\" file is missing!"); + if (!File.Exists(@"lib\IntelHexFormatReader.dll")) throw new Exception("\"lib\\IntelHexFormatReader.dll\" file is missing!"); + if (!File.Exists(@"lib\Newtonsoft.Json.dll")) throw new Exception("\"lib\\Newtonsoft.Json.dll\" file is missing!"); + if (!File.Exists(@"lib\NLog.dll")) throw new Exception("\"lib\\NLog.dll\" file missing!"); + if (!File.Exists(@"lib\RJCP.SerialPortStream.dll")) throw new Exception("\"lib\\RJCP.SerialPortStream.dll\" file is missing!"); + } + } +} diff --git a/AmiiBomb/Properties/AssemblyInfo.cs b/AmiiBomb/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..b8c7a09 --- /dev/null +++ b/AmiiBomb/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Les informations générales relatives à un assembly dépendent de +// l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations +// associées à un assembly. +[assembly: AssemblyTitle("AmiiBomb")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("AmiiBomb")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly +// aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de +// COM, affectez la valeur true à l'attribut ComVisible sur ce type. +[assembly: ComVisible(false)] + +// Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM +[assembly: Guid("bd0fe5ad-b8c1-4246-adfb-2d0f5f26602c")] + +// Les informations de version pour un assembly se composent des quatre valeurs suivantes : +// +// Version principale +// Version secondaire +// Numéro de build +// Révision +// +// Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut +// en utilisant '*', comme indiqué ci-dessous : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/AmiiBomb/Properties/Resources.Designer.cs b/AmiiBomb/Properties/Resources.Designer.cs new file mode 100644 index 0000000..2c5e3ef --- /dev/null +++ b/AmiiBomb/Properties/Resources.Designer.cs @@ -0,0 +1,383 @@ +//------------------------------------------------------------------------------ +// +// Ce code a été généré par un outil. +// Version du runtime :4.0.30319.42000 +// +// Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si +// le code est régénéré. +// +//------------------------------------------------------------------------------ + +namespace AmiiBomb.Properties { + using System; + + + /// + /// Une classe de ressource fortement typée destinée, entre autres, à la consultation des chaînes localisées. + /// + // Cette classe a été générée automatiquement par la classe StronglyTypedResourceBuilder + // à l'aide d'un outil, tel que ResGen ou Visual Studio. + // Pour ajouter ou supprimer un membre, modifiez votre fichier .ResX, puis réexécutez ResGen + // avec l'option /str ou régénérez votre projet VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Retourne l'instance ResourceManager mise en cache utilisée par cette classe. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AmiiBomb.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Remplace la propriété CurrentUICulture du thread actuel pour toutes + /// les recherches de ressources à l'aide de cette classe de ressource fortement typée. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap accept_button { + get { + object obj = ResourceManager.GetObject("accept_button", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap amiibo_icon { + get { + object obj = ResourceManager.GetObject("amiibo_icon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap amiibo_logo { + get { + object obj = ResourceManager.GetObject("amiibo_logo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap AmiiBomb_Iconx32 { + get { + object obj = ResourceManager.GetObject("AmiiBomb_Iconx32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap application_get { + get { + object obj = ResourceManager.GetObject("application_get", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap application_side_contract { + get { + object obj = ResourceManager.GetObject("application_side_contract", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap application_side_expand { + get { + object obj = ResourceManager.GetObject("application_side_expand", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cancel { + get { + object obj = ResourceManager.GetObject("cancel", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cog { + get { + object obj = ResourceManager.GetObject("cog", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap controller { + get { + object obj = ResourceManager.GetObject("controller", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap database_go { + get { + object obj = ResourceManager.GetObject("database_go", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap delete { + get { + object obj = ResourceManager.GetObject("delete", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap folder_vertical_open { + get { + object obj = ResourceManager.GetObject("folder_vertical_open", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap help { + get { + object obj = ResourceManager.GetObject("help", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap information { + get { + object obj = ResourceManager.GetObject("information", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap key { + get { + object obj = ResourceManager.GetObject("key", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap key_add { + get { + object obj = ResourceManager.GetObject("key_add", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap key_delete { + get { + object obj = ResourceManager.GetObject("key_delete", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap key_go { + get { + object obj = ResourceManager.GetObject("key_go", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap lock_edit { + get { + object obj = ResourceManager.GetObject("lock_edit", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap lock_go { + get { + object obj = ResourceManager.GetObject("lock_go", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap lock_open { + get { + object obj = ResourceManager.GetObject("lock_open", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap locked { + get { + object obj = ResourceManager.GetObject("locked", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap package_go { + get { + object obj = ResourceManager.GetObject("package_go", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap page { + get { + object obj = ResourceManager.GetObject("page", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap plugin { + get { + object obj = ResourceManager.GetObject("plugin", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap script { + get { + object obj = ResourceManager.GetObject("script", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap script_delete { + get { + object obj = ResourceManager.GetObject("script_delete", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap script_lightning { + get { + object obj = ResourceManager.GetObject("script_lightning", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap service_status { + get { + object obj = ResourceManager.GetObject("service_status", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap tag_blue_add { + get { + object obj = ResourceManager.GetObject("tag_blue_add", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Recherche une ressource localisée de type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap world { + get { + object obj = ResourceManager.GetObject("world", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/AmiiBomb/Properties/Resources.resx b/AmiiBomb/Properties/Resources.resx new file mode 100644 index 0000000..1fb6289 --- /dev/null +++ b/AmiiBomb/Properties/Resources.resx @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + ..\ico\script_delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\package_go.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\lock_go.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\folder_vertical_open.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\key_go.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\application_side_expand.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\cancel.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\script.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\key.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\controller.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\key_add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\lock.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\lock_edit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\page.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\amiibo-icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\tag_blue_add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\database_go.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\lock_open.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\help.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\amiibo-logo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\service_status.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\key_delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\script_lightning.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\application_get.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\accept_button.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\world.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\AmiiBomb_Iconx32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\application_side_contract.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\cog.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\information.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\ico\plugin.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/AmiiBomb/Properties/Settings.Designer.cs b/AmiiBomb/Properties/Settings.Designer.cs new file mode 100644 index 0000000..795f7b1 --- /dev/null +++ b/AmiiBomb/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace AmiiBomb.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/AmiiBomb/Properties/Settings.settings b/AmiiBomb/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/AmiiBomb/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/AmiiBomb/ico/AmiiBomb_Icon.ico b/AmiiBomb/ico/AmiiBomb_Icon.ico new file mode 100644 index 0000000..52aa0d2 Binary files /dev/null and b/AmiiBomb/ico/AmiiBomb_Icon.ico differ diff --git a/AmiiBomb/ico/AmiiBomb_Icon.png b/AmiiBomb/ico/AmiiBomb_Icon.png new file mode 100644 index 0000000..2028298 Binary files /dev/null and b/AmiiBomb/ico/AmiiBomb_Icon.png differ diff --git a/AmiiBomb/ico/AmiiBomb_Iconx32.png b/AmiiBomb/ico/AmiiBomb_Iconx32.png new file mode 100644 index 0000000..bc95b11 Binary files /dev/null and b/AmiiBomb/ico/AmiiBomb_Iconx32.png differ diff --git a/AmiiBomb/ico/accept_button.png b/AmiiBomb/ico/accept_button.png new file mode 100644 index 0000000..719e391 Binary files /dev/null and b/AmiiBomb/ico/accept_button.png differ diff --git a/AmiiBomb/ico/amiibo-icon.png b/AmiiBomb/ico/amiibo-icon.png new file mode 100644 index 0000000..48ef204 Binary files /dev/null and b/AmiiBomb/ico/amiibo-icon.png differ diff --git a/AmiiBomb/ico/amiibo-logo.png b/AmiiBomb/ico/amiibo-logo.png new file mode 100644 index 0000000..2a9b7c6 Binary files /dev/null and b/AmiiBomb/ico/amiibo-logo.png differ diff --git a/AmiiBomb/ico/application_get.png b/AmiiBomb/ico/application_get.png new file mode 100644 index 0000000..28e41ea Binary files /dev/null and b/AmiiBomb/ico/application_get.png differ diff --git a/AmiiBomb/ico/application_side_contract.png b/AmiiBomb/ico/application_side_contract.png new file mode 100644 index 0000000..3585f94 Binary files /dev/null and b/AmiiBomb/ico/application_side_contract.png differ diff --git a/AmiiBomb/ico/application_side_expand.png b/AmiiBomb/ico/application_side_expand.png new file mode 100644 index 0000000..030cf7c Binary files /dev/null and b/AmiiBomb/ico/application_side_expand.png differ diff --git a/AmiiBomb/ico/cancel.png b/AmiiBomb/ico/cancel.png new file mode 100644 index 0000000..33c876b Binary files /dev/null and b/AmiiBomb/ico/cancel.png differ diff --git a/AmiiBomb/ico/cog.png b/AmiiBomb/ico/cog.png new file mode 100644 index 0000000..67de2c6 Binary files /dev/null and b/AmiiBomb/ico/cog.png differ diff --git a/AmiiBomb/ico/controller.png b/AmiiBomb/ico/controller.png new file mode 100644 index 0000000..5cf76ed Binary files /dev/null and b/AmiiBomb/ico/controller.png differ diff --git a/AmiiBomb/ico/database_go.png b/AmiiBomb/ico/database_go.png new file mode 100644 index 0000000..9025c86 Binary files /dev/null and b/AmiiBomb/ico/database_go.png differ diff --git a/AmiiBomb/ico/de.png b/AmiiBomb/ico/de.png new file mode 100644 index 0000000..ac4a977 Binary files /dev/null and b/AmiiBomb/ico/de.png differ diff --git a/AmiiBomb/ico/delete.png b/AmiiBomb/ico/delete.png new file mode 100644 index 0000000..08f2493 Binary files /dev/null and b/AmiiBomb/ico/delete.png differ diff --git a/AmiiBomb/ico/door_open.png b/AmiiBomb/ico/door_open.png new file mode 100644 index 0000000..64bab57 Binary files /dev/null and b/AmiiBomb/ico/door_open.png differ diff --git a/AmiiBomb/ico/folder_vertical_open.png b/AmiiBomb/ico/folder_vertical_open.png new file mode 100644 index 0000000..7b97b9b Binary files /dev/null and b/AmiiBomb/ico/folder_vertical_open.png differ diff --git a/AmiiBomb/ico/fr.png b/AmiiBomb/ico/fr.png new file mode 100644 index 0000000..8332c4e Binary files /dev/null and b/AmiiBomb/ico/fr.png differ diff --git a/AmiiBomb/ico/help.png b/AmiiBomb/ico/help.png new file mode 100644 index 0000000..5c87017 Binary files /dev/null and b/AmiiBomb/ico/help.png differ diff --git a/AmiiBomb/ico/information.png b/AmiiBomb/ico/information.png new file mode 100644 index 0000000..12cd1ae Binary files /dev/null and b/AmiiBomb/ico/information.png differ diff --git a/AmiiBomb/ico/key.png b/AmiiBomb/ico/key.png new file mode 100644 index 0000000..4ec1a92 Binary files /dev/null and b/AmiiBomb/ico/key.png differ diff --git a/AmiiBomb/ico/key_add.png b/AmiiBomb/ico/key_add.png new file mode 100644 index 0000000..d407403 Binary files /dev/null and b/AmiiBomb/ico/key_add.png differ diff --git a/AmiiBomb/ico/key_delete.png b/AmiiBomb/ico/key_delete.png new file mode 100644 index 0000000..00dec80 Binary files /dev/null and b/AmiiBomb/ico/key_delete.png differ diff --git a/AmiiBomb/ico/key_go.png b/AmiiBomb/ico/key_go.png new file mode 100644 index 0000000..30b0dc3 Binary files /dev/null and b/AmiiBomb/ico/key_go.png differ diff --git a/AmiiBomb/ico/lock.png b/AmiiBomb/ico/lock.png new file mode 100644 index 0000000..2ebc4f6 Binary files /dev/null and b/AmiiBomb/ico/lock.png differ diff --git a/AmiiBomb/ico/lock_edit.png b/AmiiBomb/ico/lock_edit.png new file mode 100644 index 0000000..116aa5b Binary files /dev/null and b/AmiiBomb/ico/lock_edit.png differ diff --git a/AmiiBomb/ico/lock_go.png b/AmiiBomb/ico/lock_go.png new file mode 100644 index 0000000..8c7c89b Binary files /dev/null and b/AmiiBomb/ico/lock_go.png differ diff --git a/AmiiBomb/ico/lock_open.png b/AmiiBomb/ico/lock_open.png new file mode 100644 index 0000000..a471765 Binary files /dev/null and b/AmiiBomb/ico/lock_open.png differ diff --git a/AmiiBomb/ico/package_go.png b/AmiiBomb/ico/package_go.png new file mode 100644 index 0000000..aace63a Binary files /dev/null and b/AmiiBomb/ico/package_go.png differ diff --git a/AmiiBomb/ico/page.png b/AmiiBomb/ico/page.png new file mode 100644 index 0000000..018816b Binary files /dev/null and b/AmiiBomb/ico/page.png differ diff --git a/AmiiBomb/ico/plugin.png b/AmiiBomb/ico/plugin.png new file mode 100644 index 0000000..6187b15 Binary files /dev/null and b/AmiiBomb/ico/plugin.png differ diff --git a/AmiiBomb/ico/script.png b/AmiiBomb/ico/script.png new file mode 100644 index 0000000..0f9ed4d Binary files /dev/null and b/AmiiBomb/ico/script.png differ diff --git a/AmiiBomb/ico/script_delete.png b/AmiiBomb/ico/script_delete.png new file mode 100644 index 0000000..e6500ce Binary files /dev/null and b/AmiiBomb/ico/script_delete.png differ diff --git a/AmiiBomb/ico/script_lightning.png b/AmiiBomb/ico/script_lightning.png new file mode 100644 index 0000000..b3fa18c Binary files /dev/null and b/AmiiBomb/ico/script_lightning.png differ diff --git a/AmiiBomb/ico/service_status.png b/AmiiBomb/ico/service_status.png new file mode 100644 index 0000000..2f60605 Binary files /dev/null and b/AmiiBomb/ico/service_status.png differ diff --git a/AmiiBomb/ico/tag_blue_add.png b/AmiiBomb/ico/tag_blue_add.png new file mode 100644 index 0000000..f135248 Binary files /dev/null and b/AmiiBomb/ico/tag_blue_add.png differ diff --git a/AmiiBomb/ico/us.png b/AmiiBomb/ico/us.png new file mode 100644 index 0000000..10f451f Binary files /dev/null and b/AmiiBomb/ico/us.png differ diff --git a/AmiiBomb/ico/world.png b/AmiiBomb/ico/world.png new file mode 100644 index 0000000..68f21d3 Binary files /dev/null and b/AmiiBomb/ico/world.png differ diff --git a/AmiiBomb/packages.config b/AmiiBomb/packages.config new file mode 100644 index 0000000..4d16231 --- /dev/null +++ b/AmiiBomb/packages.config @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/AmiiBombuino/AmiiBombuino.ino b/AmiiBombuino/AmiiBombuino.ino new file mode 100644 index 0000000..1bc82b8 --- /dev/null +++ b/AmiiBombuino/AmiiBombuino.ino @@ -0,0 +1,167 @@ +#include +#include "MFRC522.h" +#include "SerialCommand.h" + +#define RST_PIN 9 +#define SS_PIN 10 +#define Begin_of_Message "\x02" +#define End_of_Message "\x03" + +MFRC522 mfrc522(SS_PIN, RST_PIN); +SerialCommand SCmd; + +void setup() +{ + Serial.begin(115200); + SPI.begin(); + mfrc522.PCD_Init(); + SCmd.addCommand("/AMII", PingPong); + SCmd.addCommand("/NTAG_HERE", NTAG_Here); + SCmd.addCommand("/GET_NTAG_UID", NTAG_UID); + SCmd.addCommand("/NTAG_HALT", NTAG_Halt); + SCmd.addCommand("/READ_AMIIBO", Read_Amiibo); + SCmd.addCommand("/WRITE_AMIIBO", Write_Amiibo); +} + +void loop() +{ + SCmd.readSerial(); +} + +void PingPong() +{ + Serial.print(Begin_of_Message); + Serial.print("BOMB"); + Serial.print(End_of_Message); +} + +void NTAG_Halt() +{ + mfrc522.PICC_HaltA(); + mfrc522.PCD_StopCrypto1(); + + Serial.print(Begin_of_Message); + Serial.print("HALT"); + Serial.print(End_of_Message); +} + +void NTAG_Here() +{ + Serial.print(Begin_of_Message); + + if(!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()) + Serial.print("NO"); + else + Serial.print("YES"); + + Serial.print(End_of_Message); +} + +void NTAG_UID() +{ + Serial.print(Begin_of_Message); + for (byte i = 0; i < mfrc522.uid.size; i++) + { + Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? "0" : ""); + Serial.print(mfrc522.uid.uidByte[i], HEX); + } + Serial.print(End_of_Message); +} + +void Read_Amiibo() +{ + char *arg; + arg = SCmd.next(); + + MFRC522::StatusCode status; + byte buffer[18]; + byte size = sizeof(buffer); + + status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(atoi(arg), buffer, &size); + if (status != MFRC522::STATUS_OK) + { + Serial.print(Begin_of_Message); + Serial.print("/ERROR Data: "); + Serial.print(mfrc522.GetStatusCodeName(status)); + Serial.print(End_of_Message); + } + + Serial.print(Begin_of_Message); + for (byte i = 0; i < 4; i++) + { + Serial.print(buffer[i] < 0x10 ? "0" : ""); + Serial.print(buffer[i], HEX); + } + Serial.print(End_of_Message); +} + +void Write_Amiibo() +{ + char *arg; + arg = SCmd.next(); + + byte buffer[0x21C]; + + Serial.print(Begin_of_Message); + Serial.print("/WAIT"); + Serial.print(End_of_Message); + + while(Serial.available() == 0){} + + Serial.readBytes(buffer, 0x21C); + + MFRC522::StatusCode status; + + // Write Data + for (byte page = 3; page < 135; page++) + { + status = (MFRC522::StatusCode) mfrc522.MIFARE_Ultralight_Write(page, buffer + (page * 4), 4); + if (status != MFRC522::STATUS_OK) + { + Serial.print(Begin_of_Message); + Serial.print("/ERROR Data: "); + Serial.print(mfrc522.GetStatusCodeName(status)); + Serial.print(End_of_Message); + break; + } + } + + if (atoi(arg) == 1) + { + if(status == MFRC522::STATUS_OK) + { + // Write Dynamic Lock Bytes + byte Dynamic_Lock_Bytes[] = { 0x01, 0x00, 0x0F, 0xBD }; + status = (MFRC522::StatusCode) mfrc522.MIFARE_Ultralight_Write(130, Dynamic_Lock_Bytes, 4); + if (status != MFRC522::STATUS_OK) + { + Serial.print(Begin_of_Message); + Serial.print("/ERROR DynLock: "); + Serial.print(mfrc522.GetStatusCodeName(status)); + Serial.print(End_of_Message); + } + } + + if(status == MFRC522::STATUS_OK) + { + // Write Static Lock Bytes + byte Static_Lock_Bytes[] = { 0x0F, 0xE0, 0x0F, 0xE0 }; + status = (MFRC522::StatusCode) mfrc522.MIFARE_Ultralight_Write(2, Static_Lock_Bytes, 4); + if (status != MFRC522::STATUS_OK) + { + Serial.print(Begin_of_Message); + Serial.print("/ERROR StaticLock: "); + Serial.print(mfrc522.GetStatusCodeName(status)); + Serial.print(End_of_Message); + } + } + } + + if(status == MFRC522::STATUS_OK) + { + Serial.print(Begin_of_Message); + Serial.print("/END_WRITE"); + Serial.print(End_of_Message); + } +} + diff --git a/AmiiBombuino/MFRC522.cpp b/AmiiBombuino/MFRC522.cpp new file mode 100644 index 0000000..7800e24 --- /dev/null +++ b/AmiiBombuino/MFRC522.cpp @@ -0,0 +1,1898 @@ +/* +* MFRC522.cpp - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT. +* NOTE: Please also check the comments in MFRC522.h - they provide useful hints and background information. +* Released into the public domain. +*/ + +#include +#include "MFRC522.h" + +///////////////////////////////////////////////////////////////////////////////////// +// Functions for setting up the Arduino +///////////////////////////////////////////////////////////////////////////////////// +/** + * Constructor. + */ +MFRC522::MFRC522(): MFRC522(SS, UINT8_MAX) { // SS is defined in pins_arduino.h, UINT8_MAX means there is no connection from Arduino to MFRC522's reset and power down input +} // End constructor + +/** + * Constructor. + * Prepares the output pins. + */ +MFRC522::MFRC522( byte resetPowerDownPin ///< Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low). If there is no connection from the CPU to NRSTPD, set this to UINT8_MAX. In this case, only soft reset will be used in PCD_Init(). + ): MFRC522(SS, resetPowerDownPin) { // SS is defined in pins_arduino.h +} // End constructor + +/** + * Constructor. + * Prepares the output pins. + */ +MFRC522::MFRC522( byte chipSelectPin, ///< Arduino pin connected to MFRC522's SPI slave select input (Pin 24, NSS, active low) + byte resetPowerDownPin ///< Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low). If there is no connection from the CPU to NRSTPD, set this to UINT8_MAX. In this case, only soft reset will be used in PCD_Init(). + ) { + _chipSelectPin = chipSelectPin; + _resetPowerDownPin = resetPowerDownPin; +} // End constructor + +///////////////////////////////////////////////////////////////////////////////////// +// Basic interface functions for communicating with the MFRC522 +///////////////////////////////////////////////////////////////////////////////////// + +/** + * Writes a byte to the specified register in the MFRC522 chip. + * The interface is described in the datasheet section 8.1.2. + */ +void MFRC522::PCD_WriteRegister( PCD_Register reg, ///< The register to write to. One of the PCD_Register enums. + byte value ///< The value to write. + ) { + SPI.beginTransaction(SPISettings(MFRC522_SPICLOCK, MSBFIRST, SPI_MODE0)); // Set the settings to work with SPI bus + digitalWrite(_chipSelectPin, LOW); // Select slave + SPI.transfer(reg); // MSB == 0 is for writing. LSB is not used in address. Datasheet section 8.1.2.3. + SPI.transfer(value); + digitalWrite(_chipSelectPin, HIGH); // Release slave again + SPI.endTransaction(); // Stop using the SPI bus +} // End PCD_WriteRegister() + +/** + * Writes a number of bytes to the specified register in the MFRC522 chip. + * The interface is described in the datasheet section 8.1.2. + */ +void MFRC522::PCD_WriteRegister( PCD_Register reg, ///< The register to write to. One of the PCD_Register enums. + byte count, ///< The number of bytes to write to the register + byte *values ///< The values to write. Byte array. + ) { + SPI.beginTransaction(SPISettings(MFRC522_SPICLOCK, MSBFIRST, SPI_MODE0)); // Set the settings to work with SPI bus + digitalWrite(_chipSelectPin, LOW); // Select slave + SPI.transfer(reg); // MSB == 0 is for writing. LSB is not used in address. Datasheet section 8.1.2.3. + for (byte index = 0; index < count; index++) { + SPI.transfer(values[index]); + } + digitalWrite(_chipSelectPin, HIGH); // Release slave again + SPI.endTransaction(); // Stop using the SPI bus +} // End PCD_WriteRegister() + +/** + * Reads a byte from the specified register in the MFRC522 chip. + * The interface is described in the datasheet section 8.1.2. + */ +byte MFRC522::PCD_ReadRegister( PCD_Register reg ///< The register to read from. One of the PCD_Register enums. + ) { + byte value; + SPI.beginTransaction(SPISettings(MFRC522_SPICLOCK, MSBFIRST, SPI_MODE0)); // Set the settings to work with SPI bus + digitalWrite(_chipSelectPin, LOW); // Select slave + SPI.transfer(0x80 | reg); // MSB == 1 is for reading. LSB is not used in address. Datasheet section 8.1.2.3. + value = SPI.transfer(0); // Read the value back. Send 0 to stop reading. + digitalWrite(_chipSelectPin, HIGH); // Release slave again + SPI.endTransaction(); // Stop using the SPI bus + return value; +} // End PCD_ReadRegister() + +/** + * Reads a number of bytes from the specified register in the MFRC522 chip. + * The interface is described in the datasheet section 8.1.2. + */ +void MFRC522::PCD_ReadRegister( PCD_Register reg, ///< The register to read from. One of the PCD_Register enums. + byte count, ///< The number of bytes to read + byte *values, ///< Byte array to store the values in. + byte rxAlign ///< Only bit positions rxAlign..7 in values[0] are updated. + ) { + if (count == 0) { + return; + } + //Serial.print(F("Reading ")); Serial.print(count); Serial.println(F(" bytes from register.")); + byte address = 0x80 | reg; // MSB == 1 is for reading. LSB is not used in address. Datasheet section 8.1.2.3. + byte index = 0; // Index in values array. + SPI.beginTransaction(SPISettings(MFRC522_SPICLOCK, MSBFIRST, SPI_MODE0)); // Set the settings to work with SPI bus + digitalWrite(_chipSelectPin, LOW); // Select slave + count--; // One read is performed outside of the loop + SPI.transfer(address); // Tell MFRC522 which address we want to read + if (rxAlign) { // Only update bit positions rxAlign..7 in values[0] + // Create bit mask for bit positions rxAlign..7 + byte mask = (0xFF << rxAlign) & 0xFF; + // Read value and tell that we want to read the same address again. + byte value = SPI.transfer(address); + // Apply mask to both current value of values[0] and the new data in value. + values[0] = (values[0] & ~mask) | (value & mask); + index++; + } + while (index < count) { + values[index] = SPI.transfer(address); // Read value and tell that we want to read the same address again. + index++; + } + values[index] = SPI.transfer(0); // Read the final byte. Send 0 to stop reading. + digitalWrite(_chipSelectPin, HIGH); // Release slave again + SPI.endTransaction(); // Stop using the SPI bus +} // End PCD_ReadRegister() + +/** + * Sets the bits given in mask in register reg. + */ +void MFRC522::PCD_SetRegisterBitMask( PCD_Register reg, ///< The register to update. One of the PCD_Register enums. + byte mask ///< The bits to set. + ) { + byte tmp; + tmp = PCD_ReadRegister(reg); + PCD_WriteRegister(reg, tmp | mask); // set bit mask +} // End PCD_SetRegisterBitMask() + +/** + * Clears the bits given in mask from register reg. + */ +void MFRC522::PCD_ClearRegisterBitMask( PCD_Register reg, ///< The register to update. One of the PCD_Register enums. + byte mask ///< The bits to clear. + ) { + byte tmp; + tmp = PCD_ReadRegister(reg); + PCD_WriteRegister(reg, tmp & (~mask)); // clear bit mask +} // End PCD_ClearRegisterBitMask() + + +/** + * Use the CRC coprocessor in the MFRC522 to calculate a CRC_A. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::PCD_CalculateCRC( byte *data, ///< In: Pointer to the data to transfer to the FIFO for CRC calculation. + byte length, ///< In: The number of bytes to transfer. + byte *result ///< Out: Pointer to result buffer. Result is written to result[0..1], low byte first. + ) { + PCD_WriteRegister(CommandReg, PCD_Idle); // Stop any active command. + PCD_WriteRegister(DivIrqReg, 0x04); // Clear the CRCIRq interrupt request bit + PCD_WriteRegister(FIFOLevelReg, 0x80); // FlushBuffer = 1, FIFO initialization + PCD_WriteRegister(FIFODataReg, length, data); // Write data to the FIFO + PCD_WriteRegister(CommandReg, PCD_CalcCRC); // Start the calculation + + // Wait for the CRC calculation to complete. Each iteration of the while-loop takes 17.73μs. + // TODO check/modify for other architectures than Arduino Uno 16bit + + // Wait for the CRC calculation to complete. Each iteration of the while-loop takes 17.73us. + for (uint16_t i = 5000; i > 0; i--) { + // DivIrqReg[7..0] bits are: Set2 reserved reserved MfinActIRq reserved CRCIRq reserved reserved + byte n = PCD_ReadRegister(DivIrqReg); + if (n & 0x04) { // CRCIRq bit set - calculation done + PCD_WriteRegister(CommandReg, PCD_Idle); // Stop calculating CRC for new content in the FIFO. + // Transfer the result from the registers to the result buffer + result[0] = PCD_ReadRegister(CRCResultRegL); + result[1] = PCD_ReadRegister(CRCResultRegH); + return STATUS_OK; + } + } + // 89ms passed and nothing happend. Communication with the MFRC522 might be down. + return STATUS_TIMEOUT; +} // End PCD_CalculateCRC() + + +///////////////////////////////////////////////////////////////////////////////////// +// Functions for manipulating the MFRC522 +///////////////////////////////////////////////////////////////////////////////////// + +/** + * Initializes the MFRC522 chip. + */ +void MFRC522::PCD_Init() { + bool hardReset = false; + + // Set the chipSelectPin as digital output, do not select the slave yet + pinMode(_chipSelectPin, OUTPUT); + digitalWrite(_chipSelectPin, HIGH); + + // If a valid pin number has been set, pull device out of power down / reset state. + if (_resetPowerDownPin != UINT8_MAX) { + // Set the resetPowerDownPin as digital output, do not reset or power down. + pinMode(_resetPowerDownPin, OUTPUT); + + if (digitalRead(_resetPowerDownPin) == LOW) { // The MFRC522 chip is in power down mode. + digitalWrite(_resetPowerDownPin, HIGH); // Exit power down mode. This triggers a hard reset. + // Section 8.8.2 in the datasheet says the oscillator start-up time is the start up time of the crystal + 37,74μs. Let us be generous: 50ms. + delay(50); + hardReset = true; + } + } + + if (!hardReset) { // Perform a soft reset if we haven't triggered a hard reset above. + PCD_Reset(); + } + + // Reset baud rates + PCD_WriteRegister(TxModeReg, 0x00); + PCD_WriteRegister(RxModeReg, 0x00); + // Reset ModWidthReg + PCD_WriteRegister(ModWidthReg, 0x26); + + // When communicating with a PICC we need a timeout if something goes wrong. + // f_timer = 13.56 MHz / (2*TPreScaler+1) where TPreScaler = [TPrescaler_Hi:TPrescaler_Lo]. + // TPrescaler_Hi are the four low bits in TModeReg. TPrescaler_Lo is TPrescalerReg. + PCD_WriteRegister(TModeReg, 0x80); // TAuto=1; timer starts automatically at the end of the transmission in all communication modes at all speeds + PCD_WriteRegister(TPrescalerReg, 0xA9); // TPreScaler = TModeReg[3..0]:TPrescalerReg, ie 0x0A9 = 169 => f_timer=40kHz, ie a timer period of 25μs. + PCD_WriteRegister(TReloadRegH, 0x03); // Reload timer with 0x3E8 = 1000, ie 25ms before timeout. + PCD_WriteRegister(TReloadRegL, 0xE8); + + PCD_WriteRegister(TxASKReg, 0x40); // Default 0x00. Force a 100 % ASK modulation independent of the ModGsPReg register setting + PCD_WriteRegister(ModeReg, 0x3D); // Default 0x3F. Set the preset value for the CRC coprocessor for the CalcCRC command to 0x6363 (ISO 14443-3 part 6.2.4) + PCD_AntennaOn(); // Enable the antenna driver pins TX1 and TX2 (they were disabled by the reset) +} // End PCD_Init() + +/** + * Initializes the MFRC522 chip. + */ +void MFRC522::PCD_Init( byte resetPowerDownPin ///< Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low) + ) { + PCD_Init(SS, resetPowerDownPin); // SS is defined in pins_arduino.h +} // End PCD_Init() + +/** + * Initializes the MFRC522 chip. + */ +void MFRC522::PCD_Init( byte chipSelectPin, ///< Arduino pin connected to MFRC522's SPI slave select input (Pin 24, NSS, active low) + byte resetPowerDownPin ///< Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low) + ) { + _chipSelectPin = chipSelectPin; + _resetPowerDownPin = resetPowerDownPin; + // Set the chipSelectPin as digital output, do not select the slave yet + PCD_Init(); +} // End PCD_Init() + +/** + * Performs a soft reset on the MFRC522 chip and waits for it to be ready again. + */ +void MFRC522::PCD_Reset() { + PCD_WriteRegister(CommandReg, PCD_SoftReset); // Issue the SoftReset command. + // The datasheet does not mention how long the SoftRest command takes to complete. + // But the MFRC522 might have been in soft power-down mode (triggered by bit 4 of CommandReg) + // Section 8.8.2 in the datasheet says the oscillator start-up time is the start up time of the crystal + 37,74μs. Let us be generous: 50ms. + delay(50); + // Wait for the PowerDown bit in CommandReg to be cleared + while (PCD_ReadRegister(CommandReg) & (1<<4)) { + // PCD still restarting - unlikely after waiting 50ms, but better safe than sorry. + } +} // End PCD_Reset() + +/** + * Turns the antenna on by enabling pins TX1 and TX2. + * After a reset these pins are disabled. + */ +void MFRC522::PCD_AntennaOn() { + byte value = PCD_ReadRegister(TxControlReg); + if ((value & 0x03) != 0x03) { + PCD_WriteRegister(TxControlReg, value | 0x03); + } +} // End PCD_AntennaOn() + +/** + * Turns the antenna off by disabling pins TX1 and TX2. + */ +void MFRC522::PCD_AntennaOff() { + PCD_ClearRegisterBitMask(TxControlReg, 0x03); +} // End PCD_AntennaOff() + +/** + * Get the current MFRC522 Receiver Gain (RxGain[2:0]) value. + * See 9.3.3.6 / table 98 in http://www.nxp.com/documents/data_sheet/MFRC522.pdf + * NOTE: Return value scrubbed with (0x07<<4)=01110000b as RCFfgReg may use reserved bits. + * + * @return Value of the RxGain, scrubbed to the 3 bits used. + */ +byte MFRC522::PCD_GetAntennaGain() { + return PCD_ReadRegister(RFCfgReg) & (0x07<<4); +} // End PCD_GetAntennaGain() + +/** + * Set the MFRC522 Receiver Gain (RxGain) to value specified by given mask. + * See 9.3.3.6 / table 98 in http://www.nxp.com/documents/data_sheet/MFRC522.pdf + * NOTE: Given mask is scrubbed with (0x07<<4)=01110000b as RCFfgReg may use reserved bits. + */ +void MFRC522::PCD_SetAntennaGain(byte mask) { + if (PCD_GetAntennaGain() != mask) { // only bother if there is a change + PCD_ClearRegisterBitMask(RFCfgReg, (0x07<<4)); // clear needed to allow 000 pattern + PCD_SetRegisterBitMask(RFCfgReg, mask & (0x07<<4)); // only set RxGain[2:0] bits + } +} // End PCD_SetAntennaGain() + +/** + * Performs a self-test of the MFRC522 + * See 16.1.1 in http://www.nxp.com/documents/data_sheet/MFRC522.pdf + * + * @return Whether or not the test passed. Or false if no firmware reference is available. + */ +bool MFRC522::PCD_PerformSelfTest() { + // This follows directly the steps outlined in 16.1.1 + // 1. Perform a soft reset. + PCD_Reset(); + + // 2. Clear the internal buffer by writing 25 bytes of 00h + byte ZEROES[25] = {0x00}; + PCD_WriteRegister(FIFOLevelReg, 0x80); // flush the FIFO buffer + PCD_WriteRegister(FIFODataReg, 25, ZEROES); // write 25 bytes of 00h to FIFO + PCD_WriteRegister(CommandReg, PCD_Mem); // transfer to internal buffer + + // 3. Enable self-test + PCD_WriteRegister(AutoTestReg, 0x09); + + // 4. Write 00h to FIFO buffer + PCD_WriteRegister(FIFODataReg, 0x00); + + // 5. Start self-test by issuing the CalcCRC command + PCD_WriteRegister(CommandReg, PCD_CalcCRC); + + // 6. Wait for self-test to complete + byte n; + for (uint8_t i = 0; i < 0xFF; i++) { + // The datasheet does not specify exact completion condition except + // that FIFO buffer should contain 64 bytes. + // While selftest is initiated by CalcCRC command + // it behaves differently from normal CRC computation, + // so one can't reliably use DivIrqReg to check for completion. + // It is reported that some devices does not trigger CRCIRq flag + // during selftest. + n = PCD_ReadRegister(FIFOLevelReg); + if (n >= 64) { + break; + } + } + PCD_WriteRegister(CommandReg, PCD_Idle); // Stop calculating CRC for new content in the FIFO. + + // 7. Read out resulting 64 bytes from the FIFO buffer. + byte result[64]; + PCD_ReadRegister(FIFODataReg, 64, result, 0); + + // Auto self-test done + // Reset AutoTestReg register to be 0 again. Required for normal operation. + PCD_WriteRegister(AutoTestReg, 0x00); + + // Determine firmware version (see section 9.3.4.8 in spec) + byte version = PCD_ReadRegister(VersionReg); + + // Pick the appropriate reference values + const byte *reference; + switch (version) { + case 0x88: // Fudan Semiconductor FM17522 clone + reference = FM17522_firmware_reference; + break; + case 0x90: // Version 0.0 + reference = MFRC522_firmware_referenceV0_0; + break; + case 0x91: // Version 1.0 + reference = MFRC522_firmware_referenceV1_0; + break; + case 0x92: // Version 2.0 + reference = MFRC522_firmware_referenceV2_0; + break; + default: // Unknown version + return false; // abort test + } + + // Verify that the results match up to our expectations + for (uint8_t i = 0; i < 64; i++) { + if (result[i] != pgm_read_byte(&(reference[i]))) { + return false; + } + } + + // Test passed; all is good. + return true; +} // End PCD_PerformSelfTest() + +///////////////////////////////////////////////////////////////////////////////////// +// Functions for communicating with PICCs +///////////////////////////////////////////////////////////////////////////////////// + +/** + * Executes the Transceive command. + * CRC validation can only be done if backData and backLen are specified. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::PCD_TransceiveData( byte *sendData, ///< Pointer to the data to transfer to the FIFO. + byte sendLen, ///< Number of bytes to transfer to the FIFO. + byte *backData, ///< NULL or pointer to buffer if data should be read back after executing the command. + byte *backLen, ///< In: Max number of bytes to write to *backData. Out: The number of bytes returned. + byte *validBits, ///< In/Out: The number of valid bits in the last byte. 0 for 8 valid bits. Default NULL. + byte rxAlign, ///< In: Defines the bit position in backData[0] for the first bit received. Default 0. + bool checkCRC ///< In: True => The last two bytes of the response is assumed to be a CRC_A that must be validated. + ) { + byte waitIRq = 0x30; // RxIRq and IdleIRq + return PCD_CommunicateWithPICC(PCD_Transceive, waitIRq, sendData, sendLen, backData, backLen, validBits, rxAlign, checkCRC); +} // End PCD_TransceiveData() + +/** + * Transfers data to the MFRC522 FIFO, executes a command, waits for completion and transfers data back from the FIFO. + * CRC validation can only be done if backData and backLen are specified. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::PCD_CommunicateWithPICC( byte command, ///< The command to execute. One of the PCD_Command enums. + byte waitIRq, ///< The bits in the ComIrqReg register that signals successful completion of the command. + byte *sendData, ///< Pointer to the data to transfer to the FIFO. + byte sendLen, ///< Number of bytes to transfer to the FIFO. + byte *backData, ///< NULL or pointer to buffer if data should be read back after executing the command. + byte *backLen, ///< In: Max number of bytes to write to *backData. Out: The number of bytes returned. + byte *validBits, ///< In/Out: The number of valid bits in the last byte. 0 for 8 valid bits. + byte rxAlign, ///< In: Defines the bit position in backData[0] for the first bit received. Default 0. + bool checkCRC ///< In: True => The last two bytes of the response is assumed to be a CRC_A that must be validated. + ) { + // Prepare values for BitFramingReg + byte txLastBits = validBits ? *validBits : 0; + byte bitFraming = (rxAlign << 4) + txLastBits; // RxAlign = BitFramingReg[6..4]. TxLastBits = BitFramingReg[2..0] + + PCD_WriteRegister(CommandReg, PCD_Idle); // Stop any active command. + PCD_WriteRegister(ComIrqReg, 0x7F); // Clear all seven interrupt request bits + PCD_WriteRegister(FIFOLevelReg, 0x80); // FlushBuffer = 1, FIFO initialization + PCD_WriteRegister(FIFODataReg, sendLen, sendData); // Write sendData to the FIFO + PCD_WriteRegister(BitFramingReg, bitFraming); // Bit adjustments + PCD_WriteRegister(CommandReg, command); // Execute the command + if (command == PCD_Transceive) { + PCD_SetRegisterBitMask(BitFramingReg, 0x80); // StartSend=1, transmission of data starts + } + + // Wait for the command to complete. + // In PCD_Init() we set the TAuto flag in TModeReg. This means the timer automatically starts when the PCD stops transmitting. + // Each iteration of the do-while-loop takes 17.86μs. + // TODO check/modify for other architectures than Arduino Uno 16bit + uint16_t i; + for (i = 2000; i > 0; i--) { + byte n = PCD_ReadRegister(ComIrqReg); // ComIrqReg[7..0] bits are: Set1 TxIRq RxIRq IdleIRq HiAlertIRq LoAlertIRq ErrIRq TimerIRq + if (n & waitIRq) { // One of the interrupts that signal success has been set. + break; + } + if (n & 0x01) { // Timer interrupt - nothing received in 25ms + return STATUS_TIMEOUT; + } + } + // 35.7ms and nothing happend. Communication with the MFRC522 might be down. + if (i == 0) { + return STATUS_TIMEOUT; + } + + // Stop now if any errors except collisions were detected. + byte errorRegValue = PCD_ReadRegister(ErrorReg); // ErrorReg[7..0] bits are: WrErr TempErr reserved BufferOvfl CollErr CRCErr ParityErr ProtocolErr + if (errorRegValue & 0x13) { // BufferOvfl ParityErr ProtocolErr + return STATUS_ERROR; + } + + byte _validBits = 0; + + // If the caller wants data back, get it from the MFRC522. + if (backData && backLen) { + byte n = PCD_ReadRegister(FIFOLevelReg); // Number of bytes in the FIFO + if (n > *backLen) { + return STATUS_NO_ROOM; + } + *backLen = n; // Number of bytes returned + PCD_ReadRegister(FIFODataReg, n, backData, rxAlign); // Get received data from FIFO + _validBits = PCD_ReadRegister(ControlReg) & 0x07; // RxLastBits[2:0] indicates the number of valid bits in the last received byte. If this value is 000b, the whole byte is valid. + if (validBits) { + *validBits = _validBits; + } + } + + // Tell about collisions + if (errorRegValue & 0x08) { // CollErr + return STATUS_COLLISION; + } + + // Perform CRC_A validation if requested. + if (backData && backLen && checkCRC) { + // In this case a MIFARE Classic NAK is not OK. + if (*backLen == 1 && _validBits == 4) { + return STATUS_MIFARE_NACK; + } + // We need at least the CRC_A value and all 8 bits of the last byte must be received. + if (*backLen < 2 || _validBits != 0) { + return STATUS_CRC_WRONG; + } + // Verify CRC_A - do our own calculation and store the control in controlBuffer. + byte controlBuffer[2]; + MFRC522::StatusCode status = PCD_CalculateCRC(&backData[0], *backLen - 2, &controlBuffer[0]); + if (status != STATUS_OK) { + return status; + } + if ((backData[*backLen - 2] != controlBuffer[0]) || (backData[*backLen - 1] != controlBuffer[1])) { + return STATUS_CRC_WRONG; + } + } + + return STATUS_OK; +} // End PCD_CommunicateWithPICC() + +/** + * Transmits a REQuest command, Type A. Invites PICCs in state IDLE to go to READY and prepare for anticollision or selection. 7 bit frame. + * Beware: When two PICCs are in the field at the same time I often get STATUS_TIMEOUT - probably due do bad antenna design. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::PICC_RequestA( byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in + byte *bufferSize ///< Buffer size, at least two bytes. Also number of bytes returned if STATUS_OK. + ) { + return PICC_REQA_or_WUPA(PICC_CMD_REQA, bufferATQA, bufferSize); +} // End PICC_RequestA() + +/** + * Transmits a Wake-UP command, Type A. Invites PICCs in state IDLE and HALT to go to READY(*) and prepare for anticollision or selection. 7 bit frame. + * Beware: When two PICCs are in the field at the same time I often get STATUS_TIMEOUT - probably due do bad antenna design. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::PICC_WakeupA( byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in + byte *bufferSize ///< Buffer size, at least two bytes. Also number of bytes returned if STATUS_OK. + ) { + return PICC_REQA_or_WUPA(PICC_CMD_WUPA, bufferATQA, bufferSize); +} // End PICC_WakeupA() + +/** + * Transmits REQA or WUPA commands. + * Beware: When two PICCs are in the field at the same time I often get STATUS_TIMEOUT - probably due do bad antenna design. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::PICC_REQA_or_WUPA( byte command, ///< The command to send - PICC_CMD_REQA or PICC_CMD_WUPA + byte *bufferATQA, ///< The buffer to store the ATQA (Answer to request) in + byte *bufferSize ///< Buffer size, at least two bytes. Also number of bytes returned if STATUS_OK. + ) { + byte validBits; + MFRC522::StatusCode status; + + if (bufferATQA == NULL || *bufferSize < 2) { // The ATQA response is 2 bytes long. + return STATUS_NO_ROOM; + } + PCD_ClearRegisterBitMask(CollReg, 0x80); // ValuesAfterColl=1 => Bits received after collision are cleared. + validBits = 7; // For REQA and WUPA we need the short frame format - transmit only 7 bits of the last (and only) byte. TxLastBits = BitFramingReg[2..0] + status = PCD_TransceiveData(&command, 1, bufferATQA, bufferSize, &validBits); + if (status != STATUS_OK) { + return status; + } + if (*bufferSize != 2 || validBits != 0) { // ATQA must be exactly 16 bits. + return STATUS_ERROR; + } + return STATUS_OK; +} // End PICC_REQA_or_WUPA() + +/** + * Transmits SELECT/ANTICOLLISION commands to select a single PICC. + * Before calling this function the PICCs must be placed in the READY(*) state by calling PICC_RequestA() or PICC_WakeupA(). + * On success: + * - The chosen PICC is in state ACTIVE(*) and all other PICCs have returned to state IDLE/HALT. (Figure 7 of the ISO/IEC 14443-3 draft.) + * - The UID size and value of the chosen PICC is returned in *uid along with the SAK. + * + * A PICC UID consists of 4, 7 or 10 bytes. + * Only 4 bytes can be specified in a SELECT command, so for the longer UIDs two or three iterations are used: + * UID size Number of UID bytes Cascade levels Example of PICC + * ======== =================== ============== =============== + * single 4 1 MIFARE Classic + * double 7 2 MIFARE Ultralight + * triple 10 3 Not currently in use? + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::PICC_Select( Uid *uid, ///< Pointer to Uid struct. Normally output, but can also be used to supply a known UID. + byte validBits ///< The number of known UID bits supplied in *uid. Normally 0. If set you must also supply uid->size. + ) { + bool uidComplete; + bool selectDone; + bool useCascadeTag; + byte cascadeLevel = 1; + MFRC522::StatusCode result; + byte count; + byte index; + byte uidIndex; // The first index in uid->uidByte[] that is used in the current Cascade Level. + int8_t currentLevelKnownBits; // The number of known UID bits in the current Cascade Level. + byte buffer[9]; // The SELECT/ANTICOLLISION commands uses a 7 byte standard frame + 2 bytes CRC_A + byte bufferUsed; // The number of bytes used in the buffer, ie the number of bytes to transfer to the FIFO. + byte rxAlign; // Used in BitFramingReg. Defines the bit position for the first bit received. + byte txLastBits; // Used in BitFramingReg. The number of valid bits in the last transmitted byte. + byte *responseBuffer; + byte responseLength; + + // Description of buffer structure: + // Byte 0: SEL Indicates the Cascade Level: PICC_CMD_SEL_CL1, PICC_CMD_SEL_CL2 or PICC_CMD_SEL_CL3 + // Byte 1: NVB Number of Valid Bits (in complete command, not just the UID): High nibble: complete bytes, Low nibble: Extra bits. + // Byte 2: UID-data or CT See explanation below. CT means Cascade Tag. + // Byte 3: UID-data + // Byte 4: UID-data + // Byte 5: UID-data + // Byte 6: BCC Block Check Character - XOR of bytes 2-5 + // Byte 7: CRC_A + // Byte 8: CRC_A + // The BCC and CRC_A are only transmitted if we know all the UID bits of the current Cascade Level. + // + // Description of bytes 2-5: (Section 6.5.4 of the ISO/IEC 14443-3 draft: UID contents and cascade levels) + // UID size Cascade level Byte2 Byte3 Byte4 Byte5 + // ======== ============= ===== ===== ===== ===== + // 4 bytes 1 uid0 uid1 uid2 uid3 + // 7 bytes 1 CT uid0 uid1 uid2 + // 2 uid3 uid4 uid5 uid6 + // 10 bytes 1 CT uid0 uid1 uid2 + // 2 CT uid3 uid4 uid5 + // 3 uid6 uid7 uid8 uid9 + + // Sanity checks + if (validBits > 80) { + return STATUS_INVALID; + } + + // Prepare MFRC522 + PCD_ClearRegisterBitMask(CollReg, 0x80); // ValuesAfterColl=1 => Bits received after collision are cleared. + + // Repeat Cascade Level loop until we have a complete UID. + uidComplete = false; + while (!uidComplete) { + // Set the Cascade Level in the SEL byte, find out if we need to use the Cascade Tag in byte 2. + switch (cascadeLevel) { + case 1: + buffer[0] = PICC_CMD_SEL_CL1; + uidIndex = 0; + useCascadeTag = validBits && uid->size > 4; // When we know that the UID has more than 4 bytes + break; + + case 2: + buffer[0] = PICC_CMD_SEL_CL2; + uidIndex = 3; + useCascadeTag = validBits && uid->size > 7; // When we know that the UID has more than 7 bytes + break; + + case 3: + buffer[0] = PICC_CMD_SEL_CL3; + uidIndex = 6; + useCascadeTag = false; // Never used in CL3. + break; + + default: + return STATUS_INTERNAL_ERROR; + break; + } + + // How many UID bits are known in this Cascade Level? + currentLevelKnownBits = validBits - (8 * uidIndex); + if (currentLevelKnownBits < 0) { + currentLevelKnownBits = 0; + } + // Copy the known bits from uid->uidByte[] to buffer[] + index = 2; // destination index in buffer[] + if (useCascadeTag) { + buffer[index++] = PICC_CMD_CT; + } + byte bytesToCopy = currentLevelKnownBits / 8 + (currentLevelKnownBits % 8 ? 1 : 0); // The number of bytes needed to represent the known bits for this level. + if (bytesToCopy) { + byte maxBytes = useCascadeTag ? 3 : 4; // Max 4 bytes in each Cascade Level. Only 3 left if we use the Cascade Tag + if (bytesToCopy > maxBytes) { + bytesToCopy = maxBytes; + } + for (count = 0; count < bytesToCopy; count++) { + buffer[index++] = uid->uidByte[uidIndex + count]; + } + } + // Now that the data has been copied we need to include the 8 bits in CT in currentLevelKnownBits + if (useCascadeTag) { + currentLevelKnownBits += 8; + } + + // Repeat anti collision loop until we can transmit all UID bits + BCC and receive a SAK - max 32 iterations. + selectDone = false; + while (!selectDone) { + // Find out how many bits and bytes to send and receive. + if (currentLevelKnownBits >= 32) { // All UID bits in this Cascade Level are known. This is a SELECT. + //Serial.print(F("SELECT: currentLevelKnownBits=")); Serial.println(currentLevelKnownBits, DEC); + buffer[1] = 0x70; // NVB - Number of Valid Bits: Seven whole bytes + // Calculate BCC - Block Check Character + buffer[6] = buffer[2] ^ buffer[3] ^ buffer[4] ^ buffer[5]; + // Calculate CRC_A + result = PCD_CalculateCRC(buffer, 7, &buffer[7]); + if (result != STATUS_OK) { + return result; + } + txLastBits = 0; // 0 => All 8 bits are valid. + bufferUsed = 9; + // Store response in the last 3 bytes of buffer (BCC and CRC_A - not needed after tx) + responseBuffer = &buffer[6]; + responseLength = 3; + } + else { // This is an ANTICOLLISION. + //Serial.print(F("ANTICOLLISION: currentLevelKnownBits=")); Serial.println(currentLevelKnownBits, DEC); + txLastBits = currentLevelKnownBits % 8; + count = currentLevelKnownBits / 8; // Number of whole bytes in the UID part. + index = 2 + count; // Number of whole bytes: SEL + NVB + UIDs + buffer[1] = (index << 4) + txLastBits; // NVB - Number of Valid Bits + bufferUsed = index + (txLastBits ? 1 : 0); + // Store response in the unused part of buffer + responseBuffer = &buffer[index]; + responseLength = sizeof(buffer) - index; + } + + // Set bit adjustments + rxAlign = txLastBits; // Having a separate variable is overkill. But it makes the next line easier to read. + PCD_WriteRegister(BitFramingReg, (rxAlign << 4) + txLastBits); // RxAlign = BitFramingReg[6..4]. TxLastBits = BitFramingReg[2..0] + + // Transmit the buffer and receive the response. + result = PCD_TransceiveData(buffer, bufferUsed, responseBuffer, &responseLength, &txLastBits, rxAlign); + if (result == STATUS_COLLISION) { // More than one PICC in the field => collision. + byte valueOfCollReg = PCD_ReadRegister(CollReg); // CollReg[7..0] bits are: ValuesAfterColl reserved CollPosNotValid CollPos[4:0] + if (valueOfCollReg & 0x20) { // CollPosNotValid + return STATUS_COLLISION; // Without a valid collision position we cannot continue + } + byte collisionPos = valueOfCollReg & 0x1F; // Values 0-31, 0 means bit 32. + if (collisionPos == 0) { + collisionPos = 32; + } + if (collisionPos <= currentLevelKnownBits) { // No progress - should not happen + return STATUS_INTERNAL_ERROR; + } + // Choose the PICC with the bit set. + currentLevelKnownBits = collisionPos; + count = (currentLevelKnownBits - 1) % 8; // The bit to modify + index = 1 + (currentLevelKnownBits / 8) + (count ? 1 : 0); // First byte is index 0. + buffer[index] |= (1 << count); + } + else if (result != STATUS_OK) { + return result; + } + else { // STATUS_OK + if (currentLevelKnownBits >= 32) { // This was a SELECT. + selectDone = true; // No more anticollision + // We continue below outside the while. + } + else { // This was an ANTICOLLISION. + // We now have all 32 bits of the UID in this Cascade Level + currentLevelKnownBits = 32; + // Run loop again to do the SELECT. + } + } + } // End of while (!selectDone) + + // We do not check the CBB - it was constructed by us above. + + // Copy the found UID bytes from buffer[] to uid->uidByte[] + index = (buffer[2] == PICC_CMD_CT) ? 3 : 2; // source index in buffer[] + bytesToCopy = (buffer[2] == PICC_CMD_CT) ? 3 : 4; + for (count = 0; count < bytesToCopy; count++) { + uid->uidByte[uidIndex + count] = buffer[index++]; + } + + // Check response SAK (Select Acknowledge) + if (responseLength != 3 || txLastBits != 0) { // SAK must be exactly 24 bits (1 byte + CRC_A). + return STATUS_ERROR; + } + // Verify CRC_A - do our own calculation and store the control in buffer[2..3] - those bytes are not needed anymore. + result = PCD_CalculateCRC(responseBuffer, 1, &buffer[2]); + if (result != STATUS_OK) { + return result; + } + if ((buffer[2] != responseBuffer[1]) || (buffer[3] != responseBuffer[2])) { + return STATUS_CRC_WRONG; + } + if (responseBuffer[0] & 0x04) { // Cascade bit set - UID not complete yes + cascadeLevel++; + } + else { + uidComplete = true; + uid->sak = responseBuffer[0]; + } + } // End of while (!uidComplete) + + // Set correct uid->size + uid->size = 3 * cascadeLevel + 1; + + return STATUS_OK; +} // End PICC_Select() + +/** + * Instructs a PICC in state ACTIVE(*) to go to state HALT. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::PICC_HaltA() { + MFRC522::StatusCode result; + byte buffer[4]; + + // Build command buffer + buffer[0] = PICC_CMD_HLTA; + buffer[1] = 0; + // Calculate CRC_A + result = PCD_CalculateCRC(buffer, 2, &buffer[2]); + if (result != STATUS_OK) { + return result; + } + + // Send the command. + // The standard says: + // If the PICC responds with any modulation during a period of 1 ms after the end of the frame containing the + // HLTA command, this response shall be interpreted as 'not acknowledge'. + // We interpret that this way: Only STATUS_TIMEOUT is a success. + result = PCD_TransceiveData(buffer, sizeof(buffer), NULL, 0); + if (result == STATUS_TIMEOUT) { + return STATUS_OK; + } + if (result == STATUS_OK) { // That is ironically NOT ok in this case ;-) + return STATUS_ERROR; + } + return result; +} // End PICC_HaltA() + +///////////////////////////////////////////////////////////////////////////////////// +// Functions for communicating with MIFARE PICCs +///////////////////////////////////////////////////////////////////////////////////// + +/** + * Executes the MFRC522 MFAuthent command. + * This command manages MIFARE authentication to enable a secure communication to any MIFARE Mini, MIFARE 1K and MIFARE 4K card. + * The authentication is described in the MFRC522 datasheet section 10.3.1.9 and http://www.nxp.com/documents/data_sheet/MF1S503x.pdf section 10.1. + * For use with MIFARE Classic PICCs. + * The PICC must be selected - ie in state ACTIVE(*) - before calling this function. + * Remember to call PCD_StopCrypto1() after communicating with the authenticated PICC - otherwise no new communications can start. + * + * All keys are set to FFFFFFFFFFFFh at chip delivery. + * + * @return STATUS_OK on success, STATUS_??? otherwise. Probably STATUS_TIMEOUT if you supply the wrong key. + */ +MFRC522::StatusCode MFRC522::PCD_Authenticate(byte command, ///< PICC_CMD_MF_AUTH_KEY_A or PICC_CMD_MF_AUTH_KEY_B + byte blockAddr, ///< The block number. See numbering in the comments in the .h file. + MIFARE_Key *key, ///< Pointer to the Crypteo1 key to use (6 bytes) + Uid *uid ///< Pointer to Uid struct. The first 4 bytes of the UID is used. + ) { + byte waitIRq = 0x10; // IdleIRq + + // Build command buffer + byte sendData[12]; + sendData[0] = command; + sendData[1] = blockAddr; + for (byte i = 0; i < MF_KEY_SIZE; i++) { // 6 key bytes + sendData[2+i] = key->keyByte[i]; + } + // Use the last uid bytes as specified in http://cache.nxp.com/documents/application_note/AN10927.pdf + // section 3.2.5 "MIFARE Classic Authentication". + // The only missed case is the MF1Sxxxx shortcut activation, + // but it requires cascade tag (CT) byte, that is not part of uid. + for (byte i = 0; i < 4; i++) { // The last 4 bytes of the UID + sendData[8+i] = uid->uidByte[i+uid->size-4]; + } + + // Start the authentication. + return PCD_CommunicateWithPICC(PCD_MFAuthent, waitIRq, &sendData[0], sizeof(sendData)); +} // End PCD_Authenticate() + +/** + * Used to exit the PCD from its authenticated state. + * Remember to call this function after communicating with an authenticated PICC - otherwise no new communications can start. + */ +void MFRC522::PCD_StopCrypto1() { + // Clear MFCrypto1On bit + PCD_ClearRegisterBitMask(Status2Reg, 0x08); // Status2Reg[7..0] bits are: TempSensClear I2CForceHS reserved reserved MFCrypto1On ModemState[2:0] +} // End PCD_StopCrypto1() + +/** + * Reads 16 bytes (+ 2 bytes CRC_A) from the active PICC. + * + * For MIFARE Classic the sector containing the block must be authenticated before calling this function. + * + * For MIFARE Ultralight only addresses 00h to 0Fh are decoded. + * The MF0ICU1 returns a NAK for higher addresses. + * The MF0ICU1 responds to the READ command by sending 16 bytes starting from the page address defined by the command argument. + * For example; if blockAddr is 03h then pages 03h, 04h, 05h, 06h are returned. + * A roll-back is implemented: If blockAddr is 0Eh, then the contents of pages 0Eh, 0Fh, 00h and 01h are returned. + * + * The buffer must be at least 18 bytes because a CRC_A is also returned. + * Checks the CRC_A before returning STATUS_OK. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::MIFARE_Read( byte blockAddr, ///< MIFARE Classic: The block (0-0xff) number. MIFARE Ultralight: The first page to return data from. + byte *buffer, ///< The buffer to store the data in + byte *bufferSize ///< Buffer size, at least 18 bytes. Also number of bytes returned if STATUS_OK. + ) { + MFRC522::StatusCode result; + + // Sanity check + if (buffer == NULL || *bufferSize < 18) { + return STATUS_NO_ROOM; + } + + // Build command buffer + buffer[0] = PICC_CMD_MF_READ; + buffer[1] = blockAddr; + // Calculate CRC_A + result = PCD_CalculateCRC(buffer, 2, &buffer[2]); + if (result != STATUS_OK) { + return result; + } + + // Transmit the buffer and receive the response, validate CRC_A. + return PCD_TransceiveData(buffer, 4, buffer, bufferSize, NULL, 0, true); +} // End MIFARE_Read() + +/** + * Writes 16 bytes to the active PICC. + * + * For MIFARE Classic the sector containing the block must be authenticated before calling this function. + * + * For MIFARE Ultralight the operation is called "COMPATIBILITY WRITE". + * Even though 16 bytes are transferred to the Ultralight PICC, only the least significant 4 bytes (bytes 0 to 3) + * are written to the specified address. It is recommended to set the remaining bytes 04h to 0Fh to all logic 0. + * * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::MIFARE_Write( byte blockAddr, ///< MIFARE Classic: The block (0-0xff) number. MIFARE Ultralight: The page (2-15) to write to. + byte *buffer, ///< The 16 bytes to write to the PICC + byte bufferSize ///< Buffer size, must be at least 16 bytes. Exactly 16 bytes are written. + ) { + MFRC522::StatusCode result; + + // Sanity check + if (buffer == NULL || bufferSize < 16) { + return STATUS_INVALID; + } + + // Mifare Classic protocol requires two communications to perform a write. + // Step 1: Tell the PICC we want to write to block blockAddr. + byte cmdBuffer[2]; + cmdBuffer[0] = PICC_CMD_MF_WRITE; + cmdBuffer[1] = blockAddr; + result = PCD_MIFARE_Transceive(cmdBuffer, 2); // Adds CRC_A and checks that the response is MF_ACK. + if (result != STATUS_OK) { + return result; + } + + // Step 2: Transfer the data + result = PCD_MIFARE_Transceive(buffer, bufferSize); // Adds CRC_A and checks that the response is MF_ACK. + if (result != STATUS_OK) { + return result; + } + + return STATUS_OK; +} // End MIFARE_Write() + +/** + * Writes a 4 byte page to the active MIFARE Ultralight PICC. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::MIFARE_Ultralight_Write( byte page, ///< The page (2-15) to write to. + byte *buffer, ///< The 4 bytes to write to the PICC + byte bufferSize ///< Buffer size, must be at least 4 bytes. Exactly 4 bytes are written. + ) { + MFRC522::StatusCode result; + + // Sanity check + if (buffer == NULL || bufferSize < 4) { + return STATUS_INVALID; + } + + // Build commmand buffer + byte cmdBuffer[6]; + cmdBuffer[0] = PICC_CMD_UL_WRITE; + cmdBuffer[1] = page; + memcpy(&cmdBuffer[2], buffer, 4); + + // Perform the write + result = PCD_MIFARE_Transceive(cmdBuffer, 6); // Adds CRC_A and checks that the response is MF_ACK. + if (result != STATUS_OK) { + return result; + } + return STATUS_OK; +} // End MIFARE_Ultralight_Write() + +/** + * MIFARE Decrement subtracts the delta from the value of the addressed block, and stores the result in a volatile memory. + * For MIFARE Classic only. The sector containing the block must be authenticated before calling this function. + * Only for blocks in "value block" mode, ie with access bits [C1 C2 C3] = [110] or [001]. + * Use MIFARE_Transfer() to store the result in a block. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::MIFARE_Decrement( byte blockAddr, ///< The block (0-0xff) number. + int32_t delta ///< This number is subtracted from the value of block blockAddr. + ) { + return MIFARE_TwoStepHelper(PICC_CMD_MF_DECREMENT, blockAddr, delta); +} // End MIFARE_Decrement() + +/** + * MIFARE Increment adds the delta to the value of the addressed block, and stores the result in a volatile memory. + * For MIFARE Classic only. The sector containing the block must be authenticated before calling this function. + * Only for blocks in "value block" mode, ie with access bits [C1 C2 C3] = [110] or [001]. + * Use MIFARE_Transfer() to store the result in a block. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::MIFARE_Increment( byte blockAddr, ///< The block (0-0xff) number. + int32_t delta ///< This number is added to the value of block blockAddr. + ) { + return MIFARE_TwoStepHelper(PICC_CMD_MF_INCREMENT, blockAddr, delta); +} // End MIFARE_Increment() + +/** + * MIFARE Restore copies the value of the addressed block into a volatile memory. + * For MIFARE Classic only. The sector containing the block must be authenticated before calling this function. + * Only for blocks in "value block" mode, ie with access bits [C1 C2 C3] = [110] or [001]. + * Use MIFARE_Transfer() to store the result in a block. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::MIFARE_Restore( byte blockAddr ///< The block (0-0xff) number. + ) { + // The datasheet describes Restore as a two step operation, but does not explain what data to transfer in step 2. + // Doing only a single step does not work, so I chose to transfer 0L in step two. + return MIFARE_TwoStepHelper(PICC_CMD_MF_RESTORE, blockAddr, 0L); +} // End MIFARE_Restore() + +/** + * Helper function for the two-step MIFARE Classic protocol operations Decrement, Increment and Restore. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::MIFARE_TwoStepHelper( byte command, ///< The command to use + byte blockAddr, ///< The block (0-0xff) number. + int32_t data ///< The data to transfer in step 2 + ) { + MFRC522::StatusCode result; + byte cmdBuffer[2]; // We only need room for 2 bytes. + + // Step 1: Tell the PICC the command and block address + cmdBuffer[0] = command; + cmdBuffer[1] = blockAddr; + result = PCD_MIFARE_Transceive( cmdBuffer, 2); // Adds CRC_A and checks that the response is MF_ACK. + if (result != STATUS_OK) { + return result; + } + + // Step 2: Transfer the data + result = PCD_MIFARE_Transceive( (byte *)&data, 4, true); // Adds CRC_A and accept timeout as success. + if (result != STATUS_OK) { + return result; + } + + return STATUS_OK; +} // End MIFARE_TwoStepHelper() + +/** + * MIFARE Transfer writes the value stored in the volatile memory into one MIFARE Classic block. + * For MIFARE Classic only. The sector containing the block must be authenticated before calling this function. + * Only for blocks in "value block" mode, ie with access bits [C1 C2 C3] = [110] or [001]. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::MIFARE_Transfer( byte blockAddr ///< The block (0-0xff) number. + ) { + MFRC522::StatusCode result; + byte cmdBuffer[2]; // We only need room for 2 bytes. + + // Tell the PICC we want to transfer the result into block blockAddr. + cmdBuffer[0] = PICC_CMD_MF_TRANSFER; + cmdBuffer[1] = blockAddr; + result = PCD_MIFARE_Transceive( cmdBuffer, 2); // Adds CRC_A and checks that the response is MF_ACK. + if (result != STATUS_OK) { + return result; + } + return STATUS_OK; +} // End MIFARE_Transfer() + +/** + * Helper routine to read the current value from a Value Block. + * + * Only for MIFARE Classic and only for blocks in "value block" mode, that + * is: with access bits [C1 C2 C3] = [110] or [001]. The sector containing + * the block must be authenticated before calling this function. + * + * @param[in] blockAddr The block (0x00-0xff) number. + * @param[out] value Current value of the Value Block. + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::MIFARE_GetValue(byte blockAddr, int32_t *value) { + MFRC522::StatusCode status; + byte buffer[18]; + byte size = sizeof(buffer); + + // Read the block + status = MIFARE_Read(blockAddr, buffer, &size); + if (status == STATUS_OK) { + // Extract the value + *value = (int32_t(buffer[3])<<24) | (int32_t(buffer[2])<<16) | (int32_t(buffer[1])<<8) | int32_t(buffer[0]); + } + return status; +} // End MIFARE_GetValue() + +/** + * Helper routine to write a specific value into a Value Block. + * + * Only for MIFARE Classic and only for blocks in "value block" mode, that + * is: with access bits [C1 C2 C3] = [110] or [001]. The sector containing + * the block must be authenticated before calling this function. + * + * @param[in] blockAddr The block (0x00-0xff) number. + * @param[in] value New value of the Value Block. + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::MIFARE_SetValue(byte blockAddr, int32_t value) { + byte buffer[18]; + + // Translate the int32_t into 4 bytes; repeated 2x in value block + buffer[0] = buffer[ 8] = (value & 0xFF); + buffer[1] = buffer[ 9] = (value & 0xFF00) >> 8; + buffer[2] = buffer[10] = (value & 0xFF0000) >> 16; + buffer[3] = buffer[11] = (value & 0xFF000000) >> 24; + // Inverse 4 bytes also found in value block + buffer[4] = ~buffer[0]; + buffer[5] = ~buffer[1]; + buffer[6] = ~buffer[2]; + buffer[7] = ~buffer[3]; + // Address 2x with inverse address 2x + buffer[12] = buffer[14] = blockAddr; + buffer[13] = buffer[15] = ~blockAddr; + + // Write the whole data block + return MIFARE_Write(blockAddr, buffer, 16); +} // End MIFARE_SetValue() + +/** + * Authenticate with a NTAG216. + * + * Only for NTAG216. First implemented by Gargantuanman. + * + * @param[in] passWord password. + * @param[in] pACK result success???. + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::PCD_NTAG216_AUTH(byte* passWord, byte pACK[]) //Authenticate with 32bit password +{ + // TODO: Fix cmdBuffer length and rxlength. They really should match. + // (Better still, rxlength should not even be necessary.) + + MFRC522::StatusCode result; + byte cmdBuffer[18]; // We need room for 16 bytes data and 2 bytes CRC_A. + + cmdBuffer[0] = 0x1B; //Comando de autentificacion + + for (byte i = 0; i<4; i++) + cmdBuffer[i+1] = passWord[i]; + + result = PCD_CalculateCRC(cmdBuffer, 5, &cmdBuffer[5]); + + if (result!=STATUS_OK) { + return result; + } + + // Transceive the data, store the reply in cmdBuffer[] + byte waitIRq = 0x30; // RxIRq and IdleIRq +// byte cmdBufferSize = sizeof(cmdBuffer); + byte validBits = 0; + byte rxlength = 5; + result = PCD_CommunicateWithPICC(PCD_Transceive, waitIRq, cmdBuffer, 7, cmdBuffer, &rxlength, &validBits); + + pACK[0] = cmdBuffer[0]; + pACK[1] = cmdBuffer[1]; + + if (result!=STATUS_OK) { + return result; + } + + return STATUS_OK; +} // End PCD_NTAG216_AUTH() + + +///////////////////////////////////////////////////////////////////////////////////// +// Support functions +///////////////////////////////////////////////////////////////////////////////////// + +/** + * Wrapper for MIFARE protocol communication. + * Adds CRC_A, executes the Transceive command and checks that the response is MF_ACK or a timeout. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +MFRC522::StatusCode MFRC522::PCD_MIFARE_Transceive( byte *sendData, ///< Pointer to the data to transfer to the FIFO. Do NOT include the CRC_A. + byte sendLen, ///< Number of bytes in sendData. + bool acceptTimeout ///< True => A timeout is also success + ) { + MFRC522::StatusCode result; + byte cmdBuffer[18]; // We need room for 16 bytes data and 2 bytes CRC_A. + + // Sanity check + if (sendData == NULL || sendLen > 16) { + return STATUS_INVALID; + } + + // Copy sendData[] to cmdBuffer[] and add CRC_A + memcpy(cmdBuffer, sendData, sendLen); + result = PCD_CalculateCRC(cmdBuffer, sendLen, &cmdBuffer[sendLen]); + if (result != STATUS_OK) { + return result; + } + sendLen += 2; + + // Transceive the data, store the reply in cmdBuffer[] + byte waitIRq = 0x30; // RxIRq and IdleIRq + byte cmdBufferSize = sizeof(cmdBuffer); + byte validBits = 0; + result = PCD_CommunicateWithPICC(PCD_Transceive, waitIRq, cmdBuffer, sendLen, cmdBuffer, &cmdBufferSize, &validBits); + if (acceptTimeout && result == STATUS_TIMEOUT) { + return STATUS_OK; + } + if (result != STATUS_OK) { + return result; + } + // The PICC must reply with a 4 bit ACK + if (cmdBufferSize != 1 || validBits != 4) { + return STATUS_ERROR; + } + if (cmdBuffer[0] != MF_ACK) { + return STATUS_MIFARE_NACK; + } + return STATUS_OK; +} // End PCD_MIFARE_Transceive() + +/** + * Returns a __FlashStringHelper pointer to a status code name. + * + * @return const __FlashStringHelper * + */ +const __FlashStringHelper *MFRC522::GetStatusCodeName(MFRC522::StatusCode code ///< One of the StatusCode enums. + ) { + switch (code) { + case STATUS_OK: return F("Success."); + case STATUS_ERROR: return F("Error in communication."); + case STATUS_COLLISION: return F("Collission detected."); + case STATUS_TIMEOUT: return F("Timeout in communication."); + case STATUS_NO_ROOM: return F("A buffer is not big enough."); + case STATUS_INTERNAL_ERROR: return F("Internal error in the code. Should not happen."); + case STATUS_INVALID: return F("Invalid argument."); + case STATUS_CRC_WRONG: return F("The CRC_A does not match."); + case STATUS_MIFARE_NACK: return F("A MIFARE PICC responded with NAK."); + default: return F("Unknown error"); + } +} // End GetStatusCodeName() + +/** + * Translates the SAK (Select Acknowledge) to a PICC type. + * + * @return PICC_Type + */ +MFRC522::PICC_Type MFRC522::PICC_GetType(byte sak ///< The SAK byte returned from PICC_Select(). + ) { + // http://www.nxp.com/documents/application_note/AN10833.pdf + // 3.2 Coding of Select Acknowledge (SAK) + // ignore 8-bit (iso14443 starts with LSBit = bit 1) + // fixes wrong type for manufacturer Infineon (http://nfc-tools.org/index.php?title=ISO14443A) + sak &= 0x7F; + switch (sak) { + case 0x04: return PICC_TYPE_NOT_COMPLETE; // UID not complete + case 0x09: return PICC_TYPE_MIFARE_MINI; + case 0x08: return PICC_TYPE_MIFARE_1K; + case 0x18: return PICC_TYPE_MIFARE_4K; + case 0x00: return PICC_TYPE_MIFARE_UL; + case 0x10: + case 0x11: return PICC_TYPE_MIFARE_PLUS; + case 0x01: return PICC_TYPE_TNP3XXX; + case 0x20: return PICC_TYPE_ISO_14443_4; + case 0x40: return PICC_TYPE_ISO_18092; + default: return PICC_TYPE_UNKNOWN; + } +} // End PICC_GetType() + +/** + * Returns a __FlashStringHelper pointer to the PICC type name. + * + * @return const __FlashStringHelper * + */ +const __FlashStringHelper *MFRC522::PICC_GetTypeName(PICC_Type piccType ///< One of the PICC_Type enums. + ) { + switch (piccType) { + case PICC_TYPE_ISO_14443_4: return F("PICC compliant with ISO/IEC 14443-4"); + case PICC_TYPE_ISO_18092: return F("PICC compliant with ISO/IEC 18092 (NFC)"); + case PICC_TYPE_MIFARE_MINI: return F("MIFARE Mini, 320 bytes"); + case PICC_TYPE_MIFARE_1K: return F("MIFARE 1KB"); + case PICC_TYPE_MIFARE_4K: return F("MIFARE 4KB"); + case PICC_TYPE_MIFARE_UL: return F("MIFARE Ultralight or Ultralight C"); + case PICC_TYPE_MIFARE_PLUS: return F("MIFARE Plus"); + case PICC_TYPE_MIFARE_DESFIRE: return F("MIFARE DESFire"); + case PICC_TYPE_TNP3XXX: return F("MIFARE TNP3XXX"); + case PICC_TYPE_NOT_COMPLETE: return F("SAK indicates UID is not complete."); + case PICC_TYPE_UNKNOWN: + default: return F("Unknown type"); + } +} // End PICC_GetTypeName() + +/** + * Dumps debug info about the connected PCD to Serial. + * Shows all known firmware versions + */ +void MFRC522::PCD_DumpVersionToSerial() { + // Get the MFRC522 firmware version + byte v = PCD_ReadRegister(VersionReg); + Serial.print(F("Firmware Version: 0x")); + Serial.print(v, HEX); + // Lookup which version + switch(v) { + case 0x88: Serial.println(F(" = (clone)")); break; + case 0x90: Serial.println(F(" = v0.0")); break; + case 0x91: Serial.println(F(" = v1.0")); break; + case 0x92: Serial.println(F(" = v2.0")); break; + default: Serial.println(F(" = (unknown)")); + } + // When 0x00 or 0xFF is returned, communication probably failed + if ((v == 0x00) || (v == 0xFF)) + Serial.println(F("WARNING: Communication failure, is the MFRC522 properly connected?")); +} // End PCD_DumpVersionToSerial() + +/** + * Dumps debug info about the selected PICC to Serial. + * On success the PICC is halted after dumping the data. + * For MIFARE Classic the factory default key of 0xFFFFFFFFFFFF is tried. + * + * @DEPRECATED Kept for bakward compatibility + */ +void MFRC522::PICC_DumpToSerial(Uid *uid ///< Pointer to Uid struct returned from a successful PICC_Select(). + ) { + MIFARE_Key key; + + // Dump UID, SAK and Type + PICC_DumpDetailsToSerial(uid); + + // Dump contents + PICC_Type piccType = PICC_GetType(uid->sak); + switch (piccType) { + case PICC_TYPE_MIFARE_MINI: + case PICC_TYPE_MIFARE_1K: + case PICC_TYPE_MIFARE_4K: + // All keys are set to FFFFFFFFFFFFh at chip delivery from the factory. + for (byte i = 0; i < 6; i++) { + key.keyByte[i] = 0xFF; + } + PICC_DumpMifareClassicToSerial(uid, piccType, &key); + break; + + case PICC_TYPE_MIFARE_UL: + PICC_DumpMifareUltralightToSerial(); + break; + + case PICC_TYPE_ISO_14443_4: + case PICC_TYPE_MIFARE_DESFIRE: + case PICC_TYPE_ISO_18092: + case PICC_TYPE_MIFARE_PLUS: + case PICC_TYPE_TNP3XXX: + Serial.println(F("Dumping memory contents not implemented for that PICC type.")); + break; + + case PICC_TYPE_UNKNOWN: + case PICC_TYPE_NOT_COMPLETE: + default: + break; // No memory dump here + } + + Serial.println(); + PICC_HaltA(); // Already done if it was a MIFARE Classic PICC. +} // End PICC_DumpToSerial() + +/** + * Dumps card info (UID,SAK,Type) about the selected PICC to Serial. + * + * @DEPRECATED kept for backward compatibility + */ +void MFRC522::PICC_DumpDetailsToSerial(Uid *uid ///< Pointer to Uid struct returned from a successful PICC_Select(). + ) { + // UID + Serial.print(F("Card UID:")); + for (byte i = 0; i < uid->size; i++) { + if(uid->uidByte[i] < 0x10) + Serial.print(F(" 0")); + else + Serial.print(F(" ")); + Serial.print(uid->uidByte[i], HEX); + } + Serial.println(); + + // SAK + Serial.print(F("Card SAK: ")); + if(uid->sak < 0x10) + Serial.print(F("0")); + Serial.println(uid->sak, HEX); + + // (suggested) PICC type + PICC_Type piccType = PICC_GetType(uid->sak); + Serial.print(F("PICC type: ")); + Serial.println(PICC_GetTypeName(piccType)); +} // End PICC_DumpDetailsToSerial() + +/** + * Dumps memory contents of a MIFARE Classic PICC. + * On success the PICC is halted after dumping the data. + */ +void MFRC522::PICC_DumpMifareClassicToSerial( Uid *uid, ///< Pointer to Uid struct returned from a successful PICC_Select(). + PICC_Type piccType, ///< One of the PICC_Type enums. + MIFARE_Key *key ///< Key A used for all sectors. + ) { + byte no_of_sectors = 0; + switch (piccType) { + case PICC_TYPE_MIFARE_MINI: + // Has 5 sectors * 4 blocks/sector * 16 bytes/block = 320 bytes. + no_of_sectors = 5; + break; + + case PICC_TYPE_MIFARE_1K: + // Has 16 sectors * 4 blocks/sector * 16 bytes/block = 1024 bytes. + no_of_sectors = 16; + break; + + case PICC_TYPE_MIFARE_4K: + // Has (32 sectors * 4 blocks/sector + 8 sectors * 16 blocks/sector) * 16 bytes/block = 4096 bytes. + no_of_sectors = 40; + break; + + default: // Should not happen. Ignore. + break; + } + + // Dump sectors, highest address first. + if (no_of_sectors) { + Serial.println(F("Sector Block 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 AccessBits")); + for (int8_t i = no_of_sectors - 1; i >= 0; i--) { + PICC_DumpMifareClassicSectorToSerial(uid, key, i); + } + } + PICC_HaltA(); // Halt the PICC before stopping the encrypted session. + PCD_StopCrypto1(); +} // End PICC_DumpMifareClassicToSerial() + +/** + * Dumps memory contents of a sector of a MIFARE Classic PICC. + * Uses PCD_Authenticate(), MIFARE_Read() and PCD_StopCrypto1. + * Always uses PICC_CMD_MF_AUTH_KEY_A because only Key A can always read the sector trailer access bits. + */ +void MFRC522::PICC_DumpMifareClassicSectorToSerial(Uid *uid, ///< Pointer to Uid struct returned from a successful PICC_Select(). + MIFARE_Key *key, ///< Key A for the sector. + byte sector ///< The sector to dump, 0..39. + ) { + MFRC522::StatusCode status; + byte firstBlock; // Address of lowest address to dump actually last block dumped) + byte no_of_blocks; // Number of blocks in sector + bool isSectorTrailer; // Set to true while handling the "last" (ie highest address) in the sector. + + // The access bits are stored in a peculiar fashion. + // There are four groups: + // g[3] Access bits for the sector trailer, block 3 (for sectors 0-31) or block 15 (for sectors 32-39) + // g[2] Access bits for block 2 (for sectors 0-31) or blocks 10-14 (for sectors 32-39) + // g[1] Access bits for block 1 (for sectors 0-31) or blocks 5-9 (for sectors 32-39) + // g[0] Access bits for block 0 (for sectors 0-31) or blocks 0-4 (for sectors 32-39) + // Each group has access bits [C1 C2 C3]. In this code C1 is MSB and C3 is LSB. + // The four CX bits are stored together in a nible cx and an inverted nible cx_. + byte c1, c2, c3; // Nibbles + byte c1_, c2_, c3_; // Inverted nibbles + bool invertedError; // True if one of the inverted nibbles did not match + byte g[4]; // Access bits for each of the four groups. + byte group; // 0-3 - active group for access bits + bool firstInGroup; // True for the first block dumped in the group + + // Determine position and size of sector. + if (sector < 32) { // Sectors 0..31 has 4 blocks each + no_of_blocks = 4; + firstBlock = sector * no_of_blocks; + } + else if (sector < 40) { // Sectors 32-39 has 16 blocks each + no_of_blocks = 16; + firstBlock = 128 + (sector - 32) * no_of_blocks; + } + else { // Illegal input, no MIFARE Classic PICC has more than 40 sectors. + return; + } + + // Dump blocks, highest address first. + byte byteCount; + byte buffer[18]; + byte blockAddr; + isSectorTrailer = true; + invertedError = false; // Avoid "unused variable" warning. + for (int8_t blockOffset = no_of_blocks - 1; blockOffset >= 0; blockOffset--) { + blockAddr = firstBlock + blockOffset; + // Sector number - only on first line + if (isSectorTrailer) { + if(sector < 10) + Serial.print(F(" ")); // Pad with spaces + else + Serial.print(F(" ")); // Pad with spaces + Serial.print(sector); + Serial.print(F(" ")); + } + else { + Serial.print(F(" ")); + } + // Block number + if(blockAddr < 10) + Serial.print(F(" ")); // Pad with spaces + else { + if(blockAddr < 100) + Serial.print(F(" ")); // Pad with spaces + else + Serial.print(F(" ")); // Pad with spaces + } + Serial.print(blockAddr); + Serial.print(F(" ")); + // Establish encrypted communications before reading the first block + if (isSectorTrailer) { + status = PCD_Authenticate(PICC_CMD_MF_AUTH_KEY_A, firstBlock, key, uid); + if (status != STATUS_OK) { + Serial.print(F("PCD_Authenticate() failed: ")); + Serial.println(GetStatusCodeName(status)); + return; + } + } + // Read block + byteCount = sizeof(buffer); + status = MIFARE_Read(blockAddr, buffer, &byteCount); + if (status != STATUS_OK) { + Serial.print(F("MIFARE_Read() failed: ")); + Serial.println(GetStatusCodeName(status)); + continue; + } + // Dump data + for (byte index = 0; index < 16; index++) { + if(buffer[index] < 0x10) + Serial.print(F(" 0")); + else + Serial.print(F(" ")); + Serial.print(buffer[index], HEX); + if ((index % 4) == 3) { + Serial.print(F(" ")); + } + } + // Parse sector trailer data + if (isSectorTrailer) { + c1 = buffer[7] >> 4; + c2 = buffer[8] & 0xF; + c3 = buffer[8] >> 4; + c1_ = buffer[6] & 0xF; + c2_ = buffer[6] >> 4; + c3_ = buffer[7] & 0xF; + invertedError = (c1 != (~c1_ & 0xF)) || (c2 != (~c2_ & 0xF)) || (c3 != (~c3_ & 0xF)); + g[0] = ((c1 & 1) << 2) | ((c2 & 1) << 1) | ((c3 & 1) << 0); + g[1] = ((c1 & 2) << 1) | ((c2 & 2) << 0) | ((c3 & 2) >> 1); + g[2] = ((c1 & 4) << 0) | ((c2 & 4) >> 1) | ((c3 & 4) >> 2); + g[3] = ((c1 & 8) >> 1) | ((c2 & 8) >> 2) | ((c3 & 8) >> 3); + isSectorTrailer = false; + } + + // Which access group is this block in? + if (no_of_blocks == 4) { + group = blockOffset; + firstInGroup = true; + } + else { + group = blockOffset / 5; + firstInGroup = (group == 3) || (group != (blockOffset + 1) / 5); + } + + if (firstInGroup) { + // Print access bits + Serial.print(F(" [ ")); + Serial.print((g[group] >> 2) & 1, DEC); Serial.print(F(" ")); + Serial.print((g[group] >> 1) & 1, DEC); Serial.print(F(" ")); + Serial.print((g[group] >> 0) & 1, DEC); + Serial.print(F(" ] ")); + if (invertedError) { + Serial.print(F(" Inverted access bits did not match! ")); + } + } + + if (group != 3 && (g[group] == 1 || g[group] == 6)) { // Not a sector trailer, a value block + int32_t value = (int32_t(buffer[3])<<24) | (int32_t(buffer[2])<<16) | (int32_t(buffer[1])<<8) | int32_t(buffer[0]); + Serial.print(F(" Value=0x")); Serial.print(value, HEX); + Serial.print(F(" Adr=0x")); Serial.print(buffer[12], HEX); + } + Serial.println(); + } + + return; +} // End PICC_DumpMifareClassicSectorToSerial() + +/** + * Dumps memory contents of a MIFARE Ultralight PICC. + */ +void MFRC522::PICC_DumpMifareUltralightToSerial() { + MFRC522::StatusCode status; + byte byteCount; + byte buffer[18]; + byte i; + + Serial.println(F("Page 0 1 2 3")); + // Try the mpages of the original Ultralight. Ultralight C has more pages. + for (byte page = 0; page < 16; page +=4) { // Read returns data for 4 pages at a time. + // Read pages + byteCount = sizeof(buffer); + status = MIFARE_Read(page, buffer, &byteCount); + if (status != STATUS_OK) { + Serial.print(F("MIFARE_Read() failed: ")); + Serial.println(GetStatusCodeName(status)); + break; + } + // Dump data + for (byte offset = 0; offset < 4; offset++) { + i = page + offset; + if(i < 10) + Serial.print(F(" ")); // Pad with spaces + else + Serial.print(F(" ")); // Pad with spaces + Serial.print(i); + Serial.print(F(" ")); + for (byte index = 0; index < 4; index++) { + i = 4 * offset + index; + if(buffer[i] < 0x10) + Serial.print(F(" 0")); + else + Serial.print(F(" ")); + Serial.print(buffer[i], HEX); + } + Serial.println(); + } + } +} // End PICC_DumpMifareUltralightToSerial() + +/** + * Calculates the bit pattern needed for the specified access bits. In the [C1 C2 C3] tuples C1 is MSB (=4) and C3 is LSB (=1). + */ +void MFRC522::MIFARE_SetAccessBits( byte *accessBitBuffer, ///< Pointer to byte 6, 7 and 8 in the sector trailer. Bytes [0..2] will be set. + byte g0, ///< Access bits [C1 C2 C3] for block 0 (for sectors 0-31) or blocks 0-4 (for sectors 32-39) + byte g1, ///< Access bits C1 C2 C3] for block 1 (for sectors 0-31) or blocks 5-9 (for sectors 32-39) + byte g2, ///< Access bits C1 C2 C3] for block 2 (for sectors 0-31) or blocks 10-14 (for sectors 32-39) + byte g3 ///< Access bits C1 C2 C3] for the sector trailer, block 3 (for sectors 0-31) or block 15 (for sectors 32-39) + ) { + byte c1 = ((g3 & 4) << 1) | ((g2 & 4) << 0) | ((g1 & 4) >> 1) | ((g0 & 4) >> 2); + byte c2 = ((g3 & 2) << 2) | ((g2 & 2) << 1) | ((g1 & 2) << 0) | ((g0 & 2) >> 1); + byte c3 = ((g3 & 1) << 3) | ((g2 & 1) << 2) | ((g1 & 1) << 1) | ((g0 & 1) << 0); + + accessBitBuffer[0] = (~c2 & 0xF) << 4 | (~c1 & 0xF); + accessBitBuffer[1] = c1 << 4 | (~c3 & 0xF); + accessBitBuffer[2] = c3 << 4 | c2; +} // End MIFARE_SetAccessBits() + + +/** + * Performs the "magic sequence" needed to get Chinese UID changeable + * Mifare cards to allow writing to sector 0, where the card UID is stored. + * + * Note that you do not need to have selected the card through REQA or WUPA, + * this sequence works immediately when the card is in the reader vicinity. + * This means you can use this method even on "bricked" cards that your reader does + * not recognise anymore (see MFRC522::MIFARE_UnbrickUidSector). + * + * Of course with non-bricked devices, you're free to select them before calling this function. + */ +bool MFRC522::MIFARE_OpenUidBackdoor(bool logErrors) { + // Magic sequence: + // > 50 00 57 CD (HALT + CRC) + // > 40 (7 bits only) + // < A (4 bits only) + // > 43 + // < A (4 bits only) + // Then you can write to sector 0 without authenticating + + PICC_HaltA(); // 50 00 57 CD + + byte cmd = 0x40; + byte validBits = 7; /* Our command is only 7 bits. After receiving card response, + this will contain amount of valid response bits. */ + byte response[32]; // Card's response is written here + byte received; + MFRC522::StatusCode status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 40 + if(status != STATUS_OK) { + if(logErrors) { + Serial.println(F("Card did not respond to 0x40 after HALT command. Are you sure it is a UID changeable one?")); + Serial.print(F("Error name: ")); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + if (received != 1 || response[0] != 0x0A) { + if (logErrors) { + Serial.print(F("Got bad response on backdoor 0x40 command: ")); + Serial.print(response[0], HEX); + Serial.print(F(" (")); + Serial.print(validBits); + Serial.print(F(" valid bits)\r\n")); + } + return false; + } + + cmd = 0x43; + validBits = 8; + status = PCD_TransceiveData(&cmd, (byte)1, response, &received, &validBits, (byte)0, false); // 43 + if(status != STATUS_OK) { + if(logErrors) { + Serial.println(F("Error in communication at command 0x43, after successfully executing 0x40")); + Serial.print(F("Error name: ")); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + if (received != 1 || response[0] != 0x0A) { + if (logErrors) { + Serial.print(F("Got bad response on backdoor 0x43 command: ")); + Serial.print(response[0], HEX); + Serial.print(F(" (")); + Serial.print(validBits); + Serial.print(F(" valid bits)\r\n")); + } + return false; + } + + // You can now write to sector 0 without authenticating! + return true; +} // End MIFARE_OpenUidBackdoor() + +/** + * Reads entire block 0, including all manufacturer data, and overwrites + * that block with the new UID, a freshly calculated BCC, and the original + * manufacturer data. + * + * It assumes a default KEY A of 0xFFFFFFFFFFFF. + * Make sure to have selected the card before this function is called. + */ +bool MFRC522::MIFARE_SetUid(byte *newUid, byte uidSize, bool logErrors) { + + // UID + BCC byte can not be larger than 16 together + if (!newUid || !uidSize || uidSize > 15) { + if (logErrors) { + Serial.println(F("New UID buffer empty, size 0, or size > 15 given")); + } + return false; + } + + // Authenticate for reading + MIFARE_Key key = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; + MFRC522::StatusCode status = PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, (byte)1, &key, &uid); + if (status != STATUS_OK) { + + if (status == STATUS_TIMEOUT) { + // We get a read timeout if no card is selected yet, so let's select one + + // Wake the card up again if sleeping +// byte atqa_answer[2]; +// byte atqa_size = 2; +// PICC_WakeupA(atqa_answer, &atqa_size); + + if (!PICC_IsNewCardPresent() || !PICC_ReadCardSerial()) { + Serial.println(F("No card was previously selected, and none are available. Failed to set UID.")); + return false; + } + + status = PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, (byte)1, &key, &uid); + if (status != STATUS_OK) { + // We tried, time to give up + if (logErrors) { + Serial.println(F("Failed to authenticate to card for reading, could not set UID: ")); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + } + else { + if (logErrors) { + Serial.print(F("PCD_Authenticate() failed: ")); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + } + + // Read block 0 + byte block0_buffer[18]; + byte byteCount = sizeof(block0_buffer); + status = MIFARE_Read((byte)0, block0_buffer, &byteCount); + if (status != STATUS_OK) { + if (logErrors) { + Serial.print(F("MIFARE_Read() failed: ")); + Serial.println(GetStatusCodeName(status)); + Serial.println(F("Are you sure your KEY A for sector 0 is 0xFFFFFFFFFFFF?")); + } + return false; + } + + // Write new UID to the data we just read, and calculate BCC byte + byte bcc = 0; + for (uint8_t i = 0; i < uidSize; i++) { + block0_buffer[i] = newUid[i]; + bcc ^= newUid[i]; + } + + // Write BCC byte to buffer + block0_buffer[uidSize] = bcc; + + // Stop encrypted traffic so we can send raw bytes + PCD_StopCrypto1(); + + // Activate UID backdoor + if (!MIFARE_OpenUidBackdoor(logErrors)) { + if (logErrors) { + Serial.println(F("Activating the UID backdoor failed.")); + } + return false; + } + + // Write modified block 0 back to card + status = MIFARE_Write((byte)0, block0_buffer, (byte)16); + if (status != STATUS_OK) { + if (logErrors) { + Serial.print(F("MIFARE_Write() failed: ")); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + + // Wake the card up again + byte atqa_answer[2]; + byte atqa_size = 2; + PICC_WakeupA(atqa_answer, &atqa_size); + + return true; +} + +/** + * Resets entire sector 0 to zeroes, so the card can be read again by readers. + */ +bool MFRC522::MIFARE_UnbrickUidSector(bool logErrors) { + MIFARE_OpenUidBackdoor(logErrors); + + byte block0_buffer[] = {0x01, 0x02, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + + // Write modified block 0 back to card + MFRC522::StatusCode status = MIFARE_Write((byte)0, block0_buffer, (byte)16); + if (status != STATUS_OK) { + if (logErrors) { + Serial.print(F("MIFARE_Write() failed: ")); + Serial.println(GetStatusCodeName(status)); + } + return false; + } + return true; +} + +///////////////////////////////////////////////////////////////////////////////////// +// Convenience functions - does not add extra functionality +///////////////////////////////////////////////////////////////////////////////////// + +/** + * Returns true if a PICC responds to PICC_CMD_REQA. + * Only "new" cards in state IDLE are invited. Sleeping cards in state HALT are ignored. + * + * @return bool + */ +bool MFRC522::PICC_IsNewCardPresent() { + byte bufferATQA[2]; + byte bufferSize = sizeof(bufferATQA); + + // Reset baud rates + PCD_WriteRegister(TxModeReg, 0x00); + PCD_WriteRegister(RxModeReg, 0x00); + // Reset ModWidthReg + PCD_WriteRegister(ModWidthReg, 0x26); + + MFRC522::StatusCode result = PICC_RequestA(bufferATQA, &bufferSize); + return (result == STATUS_OK || result == STATUS_COLLISION); +} // End PICC_IsNewCardPresent() + +/** + * Simple wrapper around PICC_Select. + * Returns true if a UID could be read. + * Remember to call PICC_IsNewCardPresent(), PICC_RequestA() or PICC_WakeupA() first. + * The read UID is available in the class variable uid. + * + * @return bool + */ +bool MFRC522::PICC_ReadCardSerial() { + MFRC522::StatusCode result = PICC_Select(&uid); + return (result == STATUS_OK); +} // End diff --git a/AmiiBombuino/MFRC522.h b/AmiiBombuino/MFRC522.h new file mode 100644 index 0000000..402ce59 --- /dev/null +++ b/AmiiBombuino/MFRC522.h @@ -0,0 +1,422 @@ +/** + * MFRC522.h - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT. + * Based on code Dr.Leong ( WWW.B2CQSHOP.COM ) + * Created by Miguel Balboa (circuitito.com), Jan, 2012. + * Rewritten by Søren Thing Andersen (access.thing.dk), fall of 2013 (Translation to English, refactored, comments, anti collision, cascade levels.) + * Extended by Tom Clement with functionality to write to sector 0 of UID changeable Mifare cards. + * Released into the public domain. + * + * Please read this file for an overview and then MFRC522.cpp for comments on the specific functions. + * Search for "mf-rc522" on ebay.com to purchase the MF-RC522 board. + * + * There are three hardware components involved: + * 1) The micro controller: An Arduino + * 2) The PCD (short for Proximity Coupling Device): NXP MFRC522 Contactless Reader IC + * 3) The PICC (short for Proximity Integrated Circuit Card): A card or tag using the ISO 14443A interface, eg Mifare or NTAG203. + * + * The microcontroller and card reader uses SPI for communication. + * The protocol is described in the MFRC522 datasheet: http://www.nxp.com/documents/data_sheet/MFRC522.pdf + * + * The card reader and the tags communicate using a 13.56MHz electromagnetic field. + * The protocol is defined in ISO/IEC 14443-3 Identification cards -- Contactless integrated circuit cards -- Proximity cards -- Part 3: Initialization and anticollision". + * A free version of the final draft can be found at http://wg8.de/wg8n1496_17n3613_Ballot_FCD14443-3.pdf + * Details are found in chapter 6, Type A – Initialization and anticollision. + * + * If only the PICC UID is wanted, the above documents has all the needed information. + * To read and write from MIFARE PICCs, the MIFARE protocol is used after the PICC has been selected. + * The MIFARE Classic chips and protocol is described in the datasheets: + * 1K: http://www.mouser.com/ds/2/302/MF1S503x-89574.pdf + * 4K: http://datasheet.octopart.com/MF1S7035DA4,118-NXP-Semiconductors-datasheet-11046188.pdf + * Mini: http://www.idcardmarket.com/download/mifare_S20_datasheet.pdf + * The MIFARE Ultralight chip and protocol is described in the datasheets: + * Ultralight: http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf + * Ultralight C: http://www.nxp.com/documents/short_data_sheet/MF0ICU2_SDS.pdf + * + * MIFARE Classic 1K (MF1S503x): + * Has 16 sectors * 4 blocks/sector * 16 bytes/block = 1024 bytes. + * The blocks are numbered 0-63. + * Block 3 in each sector is the Sector Trailer. See http://www.mouser.com/ds/2/302/MF1S503x-89574.pdf sections 8.6 and 8.7: + * Bytes 0-5: Key A + * Bytes 6-8: Access Bits + * Bytes 9: User data + * Bytes 10-15: Key B (or user data) + * Block 0 is read-only manufacturer data. + * To access a block, an authentication using a key from the block's sector must be performed first. + * Example: To read from block 10, first authenticate using a key from sector 3 (blocks 8-11). + * All keys are set to FFFFFFFFFFFFh at chip delivery. + * Warning: Please read section 8.7 "Memory Access". It includes this text: if the PICC detects a format violation the whole sector is irreversibly blocked. + * To use a block in "value block" mode (for Increment/Decrement operations) you need to change the sector trailer. Use PICC_SetAccessBits() to calculate the bit patterns. + * MIFARE Classic 4K (MF1S703x): + * Has (32 sectors * 4 blocks/sector + 8 sectors * 16 blocks/sector) * 16 bytes/block = 4096 bytes. + * The blocks are numbered 0-255. + * The last block in each sector is the Sector Trailer like above. + * MIFARE Classic Mini (MF1 IC S20): + * Has 5 sectors * 4 blocks/sector * 16 bytes/block = 320 bytes. + * The blocks are numbered 0-19. + * The last block in each sector is the Sector Trailer like above. + * + * MIFARE Ultralight (MF0ICU1): + * Has 16 pages of 4 bytes = 64 bytes. + * Pages 0 + 1 is used for the 7-byte UID. + * Page 2 contains the last check digit for the UID, one byte manufacturer internal data, and the lock bytes (see http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf section 8.5.2) + * Page 3 is OTP, One Time Programmable bits. Once set to 1 they cannot revert to 0. + * Pages 4-15 are read/write unless blocked by the lock bytes in page 2. + * MIFARE Ultralight C (MF0ICU2): + * Has 48 pages of 4 bytes = 192 bytes. + * Pages 0 + 1 is used for the 7-byte UID. + * Page 2 contains the last check digit for the UID, one byte manufacturer internal data, and the lock bytes (see http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf section 8.5.2) + * Page 3 is OTP, One Time Programmable bits. Once set to 1 they cannot revert to 0. + * Pages 4-39 are read/write unless blocked by the lock bytes in page 2. + * Page 40 Lock bytes + * Page 41 16 bit one way counter + * Pages 42-43 Authentication configuration + * Pages 44-47 Authentication key + */ +#ifndef MFRC522_h +#define MFRC522_h + +#include +#include +#include + +#define MFRC522_SPICLOCK SPI_CLOCK_DIV4 // MFRC522 accept upto 10MHz + +// Firmware data for self-test +// Reference values based on firmware version +// Hint: if needed, you can remove unused self-test data to save flash memory +// +// Version 0.0 (0x90) +// Philips Semiconductors; Preliminary Specification Revision 2.0 - 01 August 2005; 16.1 self-test +const byte MFRC522_firmware_referenceV0_0[] PROGMEM = { + 0x00, 0x87, 0x98, 0x0f, 0x49, 0xFF, 0x07, 0x19, + 0xBF, 0x22, 0x30, 0x49, 0x59, 0x63, 0xAD, 0xCA, + 0x7F, 0xE3, 0x4E, 0x03, 0x5C, 0x4E, 0x49, 0x50, + 0x47, 0x9A, 0x37, 0x61, 0xE7, 0xE2, 0xC6, 0x2E, + 0x75, 0x5A, 0xED, 0x04, 0x3D, 0x02, 0x4B, 0x78, + 0x32, 0xFF, 0x58, 0x3B, 0x7C, 0xE9, 0x00, 0x94, + 0xB4, 0x4A, 0x59, 0x5B, 0xFD, 0xC9, 0x29, 0xDF, + 0x35, 0x96, 0x98, 0x9E, 0x4F, 0x30, 0x32, 0x8D +}; +// Version 1.0 (0x91) +// NXP Semiconductors; Rev. 3.8 - 17 September 2014; 16.1.1 self-test +const byte MFRC522_firmware_referenceV1_0[] PROGMEM = { + 0x00, 0xC6, 0x37, 0xD5, 0x32, 0xB7, 0x57, 0x5C, + 0xC2, 0xD8, 0x7C, 0x4D, 0xD9, 0x70, 0xC7, 0x73, + 0x10, 0xE6, 0xD2, 0xAA, 0x5E, 0xA1, 0x3E, 0x5A, + 0x14, 0xAF, 0x30, 0x61, 0xC9, 0x70, 0xDB, 0x2E, + 0x64, 0x22, 0x72, 0xB5, 0xBD, 0x65, 0xF4, 0xEC, + 0x22, 0xBC, 0xD3, 0x72, 0x35, 0xCD, 0xAA, 0x41, + 0x1F, 0xA7, 0xF3, 0x53, 0x14, 0xDE, 0x7E, 0x02, + 0xD9, 0x0F, 0xB5, 0x5E, 0x25, 0x1D, 0x29, 0x79 +}; +// Version 2.0 (0x92) +// NXP Semiconductors; Rev. 3.8 - 17 September 2014; 16.1.1 self-test +const byte MFRC522_firmware_referenceV2_0[] PROGMEM = { + 0x00, 0xEB, 0x66, 0xBA, 0x57, 0xBF, 0x23, 0x95, + 0xD0, 0xE3, 0x0D, 0x3D, 0x27, 0x89, 0x5C, 0xDE, + 0x9D, 0x3B, 0xA7, 0x00, 0x21, 0x5B, 0x89, 0x82, + 0x51, 0x3A, 0xEB, 0x02, 0x0C, 0xA5, 0x00, 0x49, + 0x7C, 0x84, 0x4D, 0xB3, 0xCC, 0xD2, 0x1B, 0x81, + 0x5D, 0x48, 0x76, 0xD5, 0x71, 0x61, 0x21, 0xA9, + 0x86, 0x96, 0x83, 0x38, 0xCF, 0x9D, 0x5B, 0x6D, + 0xDC, 0x15, 0xBA, 0x3E, 0x7D, 0x95, 0x3B, 0x2F +}; +// Clone +// Fudan Semiconductor FM17522 (0x88) +const byte FM17522_firmware_reference[] PROGMEM = { + 0x00, 0xD6, 0x78, 0x8C, 0xE2, 0xAA, 0x0C, 0x18, + 0x2A, 0xB8, 0x7A, 0x7F, 0xD3, 0x6A, 0xCF, 0x0B, + 0xB1, 0x37, 0x63, 0x4B, 0x69, 0xAE, 0x91, 0xC7, + 0xC3, 0x97, 0xAE, 0x77, 0xF4, 0x37, 0xD7, 0x9B, + 0x7C, 0xF5, 0x3C, 0x11, 0x8F, 0x15, 0xC3, 0xD7, + 0xC1, 0x5B, 0x00, 0x2A, 0xD0, 0x75, 0xDE, 0x9E, + 0x51, 0x64, 0xAB, 0x3E, 0xE9, 0x15, 0xB5, 0xAB, + 0x56, 0x9A, 0x98, 0x82, 0x26, 0xEA, 0x2A, 0x62 +}; + +class MFRC522 { +public: + // Size of the MFRC522 FIFO + static const byte FIFO_SIZE = 64; // The FIFO is 64 bytes. + + // MFRC522 registers. Described in chapter 9 of the datasheet. + // When using SPI all addresses are shifted one bit left in the "SPI address byte" (section 8.1.2.3) + enum PCD_Register : byte { + // Page 0: Command and status + // 0x00 // reserved for future use + CommandReg = 0x01 << 1, // starts and stops command execution + ComIEnReg = 0x02 << 1, // enable and disable interrupt request control bits + DivIEnReg = 0x03 << 1, // enable and disable interrupt request control bits + ComIrqReg = 0x04 << 1, // interrupt request bits + DivIrqReg = 0x05 << 1, // interrupt request bits + ErrorReg = 0x06 << 1, // error bits showing the error status of the last command executed + Status1Reg = 0x07 << 1, // communication status bits + Status2Reg = 0x08 << 1, // receiver and transmitter status bits + FIFODataReg = 0x09 << 1, // input and output of 64 byte FIFO buffer + FIFOLevelReg = 0x0A << 1, // number of bytes stored in the FIFO buffer + WaterLevelReg = 0x0B << 1, // level for FIFO underflow and overflow warning + ControlReg = 0x0C << 1, // miscellaneous control registers + BitFramingReg = 0x0D << 1, // adjustments for bit-oriented frames + CollReg = 0x0E << 1, // bit position of the first bit-collision detected on the RF interface + // 0x0F // reserved for future use + + // Page 1: Command + // 0x10 // reserved for future use + ModeReg = 0x11 << 1, // defines general modes for transmitting and receiving + TxModeReg = 0x12 << 1, // defines transmission data rate and framing + RxModeReg = 0x13 << 1, // defines reception data rate and framing + TxControlReg = 0x14 << 1, // controls the logical behavior of the antenna driver pins TX1 and TX2 + TxASKReg = 0x15 << 1, // controls the setting of the transmission modulation + TxSelReg = 0x16 << 1, // selects the internal sources for the antenna driver + RxSelReg = 0x17 << 1, // selects internal receiver settings + RxThresholdReg = 0x18 << 1, // selects thresholds for the bit decoder + DemodReg = 0x19 << 1, // defines demodulator settings + // 0x1A // reserved for future use + // 0x1B // reserved for future use + MfTxReg = 0x1C << 1, // controls some MIFARE communication transmit parameters + MfRxReg = 0x1D << 1, // controls some MIFARE communication receive parameters + // 0x1E // reserved for future use + SerialSpeedReg = 0x1F << 1, // selects the speed of the serial UART interface + + // Page 2: Configuration + // 0x20 // reserved for future use + CRCResultRegH = 0x21 << 1, // shows the MSB and LSB values of the CRC calculation + CRCResultRegL = 0x22 << 1, + // 0x23 // reserved for future use + ModWidthReg = 0x24 << 1, // controls the ModWidth setting? + // 0x25 // reserved for future use + RFCfgReg = 0x26 << 1, // configures the receiver gain + GsNReg = 0x27 << 1, // selects the conductance of the antenna driver pins TX1 and TX2 for modulation + CWGsPReg = 0x28 << 1, // defines the conductance of the p-driver output during periods of no modulation + ModGsPReg = 0x29 << 1, // defines the conductance of the p-driver output during periods of modulation + TModeReg = 0x2A << 1, // defines settings for the internal timer + TPrescalerReg = 0x2B << 1, // the lower 8 bits of the TPrescaler value. The 4 high bits are in TModeReg. + TReloadRegH = 0x2C << 1, // defines the 16-bit timer reload value + TReloadRegL = 0x2D << 1, + TCounterValueRegH = 0x2E << 1, // shows the 16-bit timer value + TCounterValueRegL = 0x2F << 1, + + // Page 3: Test Registers + // 0x30 // reserved for future use + TestSel1Reg = 0x31 << 1, // general test signal configuration + TestSel2Reg = 0x32 << 1, // general test signal configuration + TestPinEnReg = 0x33 << 1, // enables pin output driver on pins D1 to D7 + TestPinValueReg = 0x34 << 1, // defines the values for D1 to D7 when it is used as an I/O bus + TestBusReg = 0x35 << 1, // shows the status of the internal test bus + AutoTestReg = 0x36 << 1, // controls the digital self-test + VersionReg = 0x37 << 1, // shows the software version + AnalogTestReg = 0x38 << 1, // controls the pins AUX1 and AUX2 + TestDAC1Reg = 0x39 << 1, // defines the test value for TestDAC1 + TestDAC2Reg = 0x3A << 1, // defines the test value for TestDAC2 + TestADCReg = 0x3B << 1 // shows the value of ADC I and Q channels + // 0x3C // reserved for production tests + // 0x3D // reserved for production tests + // 0x3E // reserved for production tests + // 0x3F // reserved for production tests + }; + + // MFRC522 commands. Described in chapter 10 of the datasheet. + enum PCD_Command : byte { + PCD_Idle = 0x00, // no action, cancels current command execution + PCD_Mem = 0x01, // stores 25 bytes into the internal buffer + PCD_GenerateRandomID = 0x02, // generates a 10-byte random ID number + PCD_CalcCRC = 0x03, // activates the CRC coprocessor or performs a self-test + PCD_Transmit = 0x04, // transmits data from the FIFO buffer + PCD_NoCmdChange = 0x07, // no command change, can be used to modify the CommandReg register bits without affecting the command, for example, the PowerDown bit + PCD_Receive = 0x08, // activates the receiver circuits + PCD_Transceive = 0x0C, // transmits data from FIFO buffer to antenna and automatically activates the receiver after transmission + PCD_MFAuthent = 0x0E, // performs the MIFARE standard authentication as a reader + PCD_SoftReset = 0x0F // resets the MFRC522 + }; + + // MFRC522 RxGain[2:0] masks, defines the receiver's signal voltage gain factor (on the PCD). + // Described in 9.3.3.6 / table 98 of the datasheet at http://www.nxp.com/documents/data_sheet/MFRC522.pdf + enum PCD_RxGain : byte { + RxGain_18dB = 0x00 << 4, // 000b - 18 dB, minimum + RxGain_23dB = 0x01 << 4, // 001b - 23 dB + RxGain_18dB_2 = 0x02 << 4, // 010b - 18 dB, it seems 010b is a duplicate for 000b + RxGain_23dB_2 = 0x03 << 4, // 011b - 23 dB, it seems 011b is a duplicate for 001b + RxGain_33dB = 0x04 << 4, // 100b - 33 dB, average, and typical default + RxGain_38dB = 0x05 << 4, // 101b - 38 dB + RxGain_43dB = 0x06 << 4, // 110b - 43 dB + RxGain_48dB = 0x07 << 4, // 111b - 48 dB, maximum + RxGain_min = 0x00 << 4, // 000b - 18 dB, minimum, convenience for RxGain_18dB + RxGain_avg = 0x04 << 4, // 100b - 33 dB, average, convenience for RxGain_33dB + RxGain_max = 0x07 << 4 // 111b - 48 dB, maximum, convenience for RxGain_48dB + }; + + // Commands sent to the PICC. + enum PICC_Command : byte { + // The commands used by the PCD to manage communication with several PICCs (ISO 14443-3, Type A, section 6.4) + PICC_CMD_REQA = 0x26, // REQuest command, Type A. Invites PICCs in state IDLE to go to READY and prepare for anticollision or selection. 7 bit frame. + PICC_CMD_WUPA = 0x52, // Wake-UP command, Type A. Invites PICCs in state IDLE and HALT to go to READY(*) and prepare for anticollision or selection. 7 bit frame. + PICC_CMD_CT = 0x88, // Cascade Tag. Not really a command, but used during anti collision. + PICC_CMD_SEL_CL1 = 0x93, // Anti collision/Select, Cascade Level 1 + PICC_CMD_SEL_CL2 = 0x95, // Anti collision/Select, Cascade Level 2 + PICC_CMD_SEL_CL3 = 0x97, // Anti collision/Select, Cascade Level 3 + PICC_CMD_HLTA = 0x50, // HaLT command, Type A. Instructs an ACTIVE PICC to go to state HALT. + PICC_CMD_RATS = 0xE0, // Request command for Answer To Reset. + // The commands used for MIFARE Classic (from http://www.mouser.com/ds/2/302/MF1S503x-89574.pdf, Section 9) + // Use PCD_MFAuthent to authenticate access to a sector, then use these commands to read/write/modify the blocks on the sector. + // The read/write commands can also be used for MIFARE Ultralight. + PICC_CMD_MF_AUTH_KEY_A = 0x60, // Perform authentication with Key A + PICC_CMD_MF_AUTH_KEY_B = 0x61, // Perform authentication with Key B + PICC_CMD_MF_READ = 0x30, // Reads one 16 byte block from the authenticated sector of the PICC. Also used for MIFARE Ultralight. + PICC_CMD_MF_WRITE = 0xA0, // Writes one 16 byte block to the authenticated sector of the PICC. Called "COMPATIBILITY WRITE" for MIFARE Ultralight. + PICC_CMD_MF_DECREMENT = 0xC0, // Decrements the contents of a block and stores the result in the internal data register. + PICC_CMD_MF_INCREMENT = 0xC1, // Increments the contents of a block and stores the result in the internal data register. + PICC_CMD_MF_RESTORE = 0xC2, // Reads the contents of a block into the internal data register. + PICC_CMD_MF_TRANSFER = 0xB0, // Writes the contents of the internal data register to a block. + // The commands used for MIFARE Ultralight (from http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf, Section 8.6) + // The PICC_CMD_MF_READ and PICC_CMD_MF_WRITE can also be used for MIFARE Ultralight. + PICC_CMD_UL_WRITE = 0xA2 // Writes one 4 byte page to the PICC. + }; + + // MIFARE constants that does not fit anywhere else + enum MIFARE_Misc { + MF_ACK = 0xA, // The MIFARE Classic uses a 4 bit ACK/NAK. Any other value than 0xA is NAK. + MF_KEY_SIZE = 6 // A Mifare Crypto1 key is 6 bytes. + }; + + // PICC types we can detect. Remember to update PICC_GetTypeName() if you add more. + // last value set to 0xff, then compiler uses less ram, it seems some optimisations are triggered + enum PICC_Type : byte { + PICC_TYPE_UNKNOWN , + PICC_TYPE_ISO_14443_4 , // PICC compliant with ISO/IEC 14443-4 + PICC_TYPE_ISO_18092 , // PICC compliant with ISO/IEC 18092 (NFC) + PICC_TYPE_MIFARE_MINI , // MIFARE Classic protocol, 320 bytes + PICC_TYPE_MIFARE_1K , // MIFARE Classic protocol, 1KB + PICC_TYPE_MIFARE_4K , // MIFARE Classic protocol, 4KB + PICC_TYPE_MIFARE_UL , // MIFARE Ultralight or Ultralight C + PICC_TYPE_MIFARE_PLUS , // MIFARE Plus + PICC_TYPE_MIFARE_DESFIRE, // MIFARE DESFire + PICC_TYPE_TNP3XXX , // Only mentioned in NXP AN 10833 MIFARE Type Identification Procedure + PICC_TYPE_NOT_COMPLETE = 0xff // SAK indicates UID is not complete. + }; + + // Return codes from the functions in this class. Remember to update GetStatusCodeName() if you add more. + // last value set to 0xff, then compiler uses less ram, it seems some optimisations are triggered + enum StatusCode : byte { + STATUS_OK , // Success + STATUS_ERROR , // Error in communication + STATUS_COLLISION , // Collission detected + STATUS_TIMEOUT , // Timeout in communication. + STATUS_NO_ROOM , // A buffer is not big enough. + STATUS_INTERNAL_ERROR , // Internal error in the code. Should not happen ;-) + STATUS_INVALID , // Invalid argument. + STATUS_CRC_WRONG , // The CRC_A does not match + STATUS_MIFARE_NACK = 0xff // A MIFARE PICC responded with NAK. + }; + + // A struct used for passing the UID of a PICC. + typedef struct { + byte size; // Number of bytes in the UID. 4, 7 or 10. + byte uidByte[10]; + byte sak; // The SAK (Select acknowledge) byte returned from the PICC after successful selection. + } Uid; + + // A struct used for passing a MIFARE Crypto1 key + typedef struct { + byte keyByte[MF_KEY_SIZE]; + } MIFARE_Key; + + // Member variables + Uid uid; // Used by PICC_ReadCardSerial(). + + ///////////////////////////////////////////////////////////////////////////////////// + // Functions for setting up the Arduino + ///////////////////////////////////////////////////////////////////////////////////// + MFRC522(); + MFRC522(byte resetPowerDownPin); + MFRC522(byte chipSelectPin, byte resetPowerDownPin); + + ///////////////////////////////////////////////////////////////////////////////////// + // Basic interface functions for communicating with the MFRC522 + ///////////////////////////////////////////////////////////////////////////////////// + void PCD_WriteRegister(PCD_Register reg, byte value); + void PCD_WriteRegister(PCD_Register reg, byte count, byte *values); + byte PCD_ReadRegister(PCD_Register reg); + void PCD_ReadRegister(PCD_Register reg, byte count, byte *values, byte rxAlign = 0); + void PCD_SetRegisterBitMask(PCD_Register reg, byte mask); + void PCD_ClearRegisterBitMask(PCD_Register reg, byte mask); + StatusCode PCD_CalculateCRC(byte *data, byte length, byte *result); + + ///////////////////////////////////////////////////////////////////////////////////// + // Functions for manipulating the MFRC522 + ///////////////////////////////////////////////////////////////////////////////////// + void PCD_Init(); + void PCD_Init(byte resetPowerDownPin); + void PCD_Init(byte chipSelectPin, byte resetPowerDownPin); + void PCD_Reset(); + void PCD_AntennaOn(); + void PCD_AntennaOff(); + byte PCD_GetAntennaGain(); + void PCD_SetAntennaGain(byte mask); + bool PCD_PerformSelfTest(); + + ///////////////////////////////////////////////////////////////////////////////////// + // Functions for communicating with PICCs + ///////////////////////////////////////////////////////////////////////////////////// + StatusCode PCD_TransceiveData(byte *sendData, byte sendLen, byte *backData, byte *backLen, byte *validBits = NULL, byte rxAlign = 0, bool checkCRC = false); + StatusCode PCD_CommunicateWithPICC(byte command, byte waitIRq, byte *sendData, byte sendLen, byte *backData = NULL, byte *backLen = NULL, byte *validBits = NULL, byte rxAlign = 0, bool checkCRC = false); + StatusCode PICC_RequestA(byte *bufferATQA, byte *bufferSize); + StatusCode PICC_WakeupA(byte *bufferATQA, byte *bufferSize); + StatusCode PICC_REQA_or_WUPA(byte command, byte *bufferATQA, byte *bufferSize); + virtual StatusCode PICC_Select(Uid *uid, byte validBits = 0); + StatusCode PICC_HaltA(); + + ///////////////////////////////////////////////////////////////////////////////////// + // Functions for communicating with MIFARE PICCs + ///////////////////////////////////////////////////////////////////////////////////// + StatusCode PCD_Authenticate(byte command, byte blockAddr, MIFARE_Key *key, Uid *uid); + void PCD_StopCrypto1(); + StatusCode MIFARE_Read(byte blockAddr, byte *buffer, byte *bufferSize); + StatusCode MIFARE_Write(byte blockAddr, byte *buffer, byte bufferSize); + StatusCode MIFARE_Ultralight_Write(byte page, byte *buffer, byte bufferSize); + StatusCode MIFARE_Decrement(byte blockAddr, int32_t delta); + StatusCode MIFARE_Increment(byte blockAddr, int32_t delta); + StatusCode MIFARE_Restore(byte blockAddr); + StatusCode MIFARE_Transfer(byte blockAddr); + StatusCode MIFARE_GetValue(byte blockAddr, int32_t *value); + StatusCode MIFARE_SetValue(byte blockAddr, int32_t value); + StatusCode PCD_NTAG216_AUTH(byte *passWord, byte pACK[]); + + ///////////////////////////////////////////////////////////////////////////////////// + // Support functions + ///////////////////////////////////////////////////////////////////////////////////// + StatusCode PCD_MIFARE_Transceive(byte *sendData, byte sendLen, bool acceptTimeout = false); + // old function used too much memory, now name moved to flash; if you need char, copy from flash to memory + //const char *GetStatusCodeName(byte code); + static const __FlashStringHelper *GetStatusCodeName(StatusCode code); + static PICC_Type PICC_GetType(byte sak); + // old function used too much memory, now name moved to flash; if you need char, copy from flash to memory + //const char *PICC_GetTypeName(byte type); + static const __FlashStringHelper *PICC_GetTypeName(PICC_Type type); + + // Support functions for debuging + void PCD_DumpVersionToSerial(); + void PICC_DumpToSerial(Uid *uid); + void PICC_DumpDetailsToSerial(Uid *uid); + void PICC_DumpMifareClassicToSerial(Uid *uid, PICC_Type piccType, MIFARE_Key *key); + void PICC_DumpMifareClassicSectorToSerial(Uid *uid, MIFARE_Key *key, byte sector); + void PICC_DumpMifareUltralightToSerial(); + + // Advanced functions for MIFARE + void MIFARE_SetAccessBits(byte *accessBitBuffer, byte g0, byte g1, byte g2, byte g3); + bool MIFARE_OpenUidBackdoor(bool logErrors); + bool MIFARE_SetUid(byte *newUid, byte uidSize, bool logErrors); + bool MIFARE_UnbrickUidSector(bool logErrors); + + ///////////////////////////////////////////////////////////////////////////////////// + // Convenience functions - does not add extra functionality + ///////////////////////////////////////////////////////////////////////////////////// + virtual bool PICC_IsNewCardPresent(); + virtual bool PICC_ReadCardSerial(); + +protected: + byte _chipSelectPin; // Arduino pin connected to MFRC522's SPI slave select input (Pin 24, NSS, active low) + byte _resetPowerDownPin; // Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low) + StatusCode MIFARE_TwoStepHelper(byte command, byte blockAddr, int32_t data); +}; + +#endif diff --git a/AmiiBombuino/SerialCommand.cpp b/AmiiBombuino/SerialCommand.cpp new file mode 100644 index 0000000..bbea5ba --- /dev/null +++ b/AmiiBombuino/SerialCommand.cpp @@ -0,0 +1,144 @@ +/** + * SerialCommand - A Wiring/Arduino library to tokenize and parse commands + * received over a serial port. + * + * Copyright (C) 2012 Stefan Rado + * Copyright (C) 2011 Steven Cogswell + * http://husks.wordpress.com + * + * Version 20120522 + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this library. If not, see . + */ +#include "SerialCommand.h" + +/** + * Constructor makes sure some things are set. + */ +SerialCommand::SerialCommand() + : commandList(NULL), + commandCount(0), + defaultHandler(NULL), + term('\n'), // default terminator for commands, newline character + last(NULL) +{ + strcpy(delim, " "); // strtok_r needs a null-terminated string + clearBuffer(); +} + +/** + * Adds a "command" and a handler function to the list of available commands. + * This is used for matching a found token in the buffer, and gives the pointer + * to the handler function to deal with it. + */ +void SerialCommand::addCommand(const char *command, void (*function)()) { + #ifdef SERIALCOMMAND_DEBUG + Serial.print("Adding command ("); + Serial.print(commandCount); + Serial.print("): "); + Serial.println(command); + #endif + + commandList = (SerialCommandCallback *) realloc(commandList, (commandCount + 1) * sizeof(SerialCommandCallback)); + strncpy(commandList[commandCount].command, command, SERIALCOMMAND_MAXCOMMANDLENGTH); + commandList[commandCount].function = function; + commandCount++; +} + +/** + * This sets up a handler to be called in the event that the receveived command string + * isn't in the list of commands. + */ +void SerialCommand::setDefaultHandler(void (*function)(const char *)) { + defaultHandler = function; +} + + +/** + * This checks the Serial stream for characters, and assembles them into a buffer. + * When the terminator character (default '\n') is seen, it starts parsing the + * buffer for a prefix command, and calls handlers setup by addCommand() member + */ +void SerialCommand::readSerial() { + while (Serial.available() > 0) { + char inChar = Serial.read(); // Read single available character, there may be more waiting + #ifdef SERIALCOMMAND_DEBUG + Serial.print(inChar); // Echo back to serial stream + #endif + + if (inChar == term) { // Check for the terminator (default '\r') meaning end of command + #ifdef SERIALCOMMAND_DEBUG + Serial.print("Received: "); + Serial.println(buffer); + #endif + + char *command = strtok_r(buffer, delim, &last); // Search for command at start of buffer + if (command != NULL) { + boolean matched = false; + for (int i = 0; i < commandCount; i++) { + #ifdef SERIALCOMMAND_DEBUG + Serial.print("Comparing ["); + Serial.print(command); + Serial.print("] to ["); + Serial.print(commandList[i].command); + Serial.println("]"); + #endif + + // Compare the found command against the list of known commands for a match + if (strncmp(command, commandList[i].command, SERIALCOMMAND_MAXCOMMANDLENGTH) == 0) { + #ifdef SERIALCOMMAND_DEBUG + Serial.print("Matched Command: "); + Serial.println(command); + #endif + + // Execute the stored handler function for the command + (*commandList[i].function)(); + matched = true; + break; + } + } + if (!matched && (defaultHandler != NULL)) { + (*defaultHandler)(command); + } + } + clearBuffer(); + } + else if (isprint(inChar)) { // Only printable characters into the buffer + if (bufPos < SERIALCOMMAND_BUFFER) { + buffer[bufPos++] = inChar; // Put character into buffer + buffer[bufPos] = '\0'; // Null terminate + } else { + #ifdef SERIALCOMMAND_DEBUG + Serial.println("Line buffer is full - increase SERIALCOMMAND_BUFFER"); + #endif + } + } + } +} + +/* + * Clear the input buffer. + */ +void SerialCommand::clearBuffer() { + buffer[0] = '\0'; + bufPos = 0; +} + +/** + * Retrieve the next token ("word" or "argument") from the command buffer. + * Returns NULL if no more tokens exist. + */ +char *SerialCommand::next() { + return strtok_r(NULL, delim, &last); +} diff --git a/AmiiBombuino/SerialCommand.h b/AmiiBombuino/SerialCommand.h new file mode 100644 index 0000000..e00dd29 --- /dev/null +++ b/AmiiBombuino/SerialCommand.h @@ -0,0 +1,75 @@ +/** + * SerialCommand - A Wiring/Arduino library to tokenize and parse commands + * received over a serial port. + * + * Copyright (C) 2012 Stefan Rado + * Copyright (C) 2011 Steven Cogswell + * http://husks.wordpress.com + * + * Version 20120522 + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this library. If not, see . + */ +#ifndef SerialCommand_h +#define SerialCommand_h + +#if defined(WIRING) && WIRING >= 100 + #include +#elif defined(ARDUINO) && ARDUINO >= 100 + #include +#else + #include +#endif +#include + +// Size of the input buffer in bytes (maximum length of one command plus arguments) +#define SERIALCOMMAND_BUFFER 32 +// Maximum length of a command excluding the terminating null +#define SERIALCOMMAND_MAXCOMMANDLENGTH 8 + +// Uncomment the next line to run the library in debug mode (verbose messages) +//#define SERIALCOMMAND_DEBUG + + +class SerialCommand { + public: + SerialCommand(); // Constructor + void addCommand(const char *command, void(*function)()); // Add a command to the processing dictionary. + void setDefaultHandler(void (*function)(const char *)); // A handler to call when no valid command received. + + void readSerial(); // Main entry point. + void clearBuffer(); // Clears the input buffer. + char *next(); // Returns pointer to next token found in command buffer (for getting arguments to commands). + + private: + // Command/handler dictionary + struct SerialCommandCallback { + char command[SERIALCOMMAND_MAXCOMMANDLENGTH + 1]; + void (*function)(); + }; // Data structure to hold Command/Handler function key-value pairs + SerialCommandCallback *commandList; // Actual definition for command/handler array + byte commandCount; + + // Pointer to the default handler function + void (*defaultHandler)(const char *); + + char delim[2]; // null-terminated list of character to be used as delimeters for tokenizing (default " ") + char term; // Character that signals end of command (default '\n') + + char buffer[SERIALCOMMAND_BUFFER + 1]; // Buffer of stored characters while waiting for terminator character + byte bufPos; // Current position in the buffer + char *last; // State variable used by strtok_r during processing +}; + +#endif //SerialCommand_h diff --git a/README.md b/README.md new file mode 100644 index 0000000..3aeeca9 --- /dev/null +++ b/README.md @@ -0,0 +1,81 @@ +# **![](http://i64.tinypic.com/qpqm45.png) AmiiBomb - Amiibo Cloning** + +AmiiBomb is Windows tools, with cheap component used, for create Amiibo Tag (NTAG215) and much more... + +## What's you need? + +- *1x* Windows PC +- *1x* Arduino Uno R3 *(around $4)* +- *1x* USB Cable Type AB *(pretty sure you already have it)* +- *1x* RFID Module RC522 *(around $2)* +- *7x* Pin Wire Male-Female *(around $1 for x20)* +- *1x* Soldering Iron Kit *(and a little soldering skills)* +- Many NTAG215 as you want Amiibo Tag *(around $34 for x100)* + +## What you have to do? + +You have to solder the pins on the RC522 Module and connect them following this schematics. Connect the Arduino Uno (or Nano) to the PC by USB and That's all! (Guys with soldering skills already know that but I prefer explain for anyone!) + +![Arduino / RC255 PinOut](http://i66.tinypic.com/2ng8zv9.jpg) + +Signal | RC522 Pin | Arduino Pin +--------- | --------- | ----------- +RST/Reset | RST | 9 +SPI SS | SDA(SS) | 10 +SPI MOSI | MOSI | 11 / ICSP-4 +SPI MISO | MISO | 12 / ICSP-1 +SPI SCK | SCK | 13 / ICSP-3 +VCC | 3.3V | 3.3V +GND | GND | GND + +## And when the hardware is ready? + +You have to run AmiiBomb, Set an Amiibo folder (*.bin files), select the Amiibo Keys, flash the AmiiBombuino Firmware to the Arduino, and you are ready to Read and Write Amiibo Tag. + + - ***.bin folder** + +It's the folder where you can put your Amiibo dumps (previously dumped with AmiiBomb or found on internet, Google is your friend for that). +You can save the readed Amiibo here too, to write it back to another NTAG. You don't have to re-execute AmiiBomb, it's looking for folder changes automatically. + + - **Amiibo Keys** + +You probably already have them if you know a little how Amiibo cloning works. If not, a little helper is here in AmiiBomb. Due to Copyright reason, we can't distribute them, but there is many place to found them. AmiiBomb send you to the right website, you just have to highlight the keys chars and copy them to your Clipboard, AmiiBomb check if the valid keys was inside, and ask you if you want to save them. If you have already them, you just have to select the keys file. + + - **AmiiBombuino Firmware** + +Just an Arduino program who communicate with AmiiBomb, You can flash it through avrdude by yourself or using the Internal Flasher in AmiiBomb or using XLoader. + +## Overview + +![](http://i68.tinypic.com/dwe7g6.png) +![](http://i67.tinypic.com/4sjvd3.png) +![](http://i66.tinypic.com/21mtao8.jpg) +![](http://i66.tinypic.com/1z6z0o1.png) + +## What is done? +- Grab info of an Amiibo Dump via http://Amiibo.life website. +- Cache system for Amiibo Dump informations in a file. +- Enable/Disable and Reset Informations Caching files. +- Reconize encrypted/decrypted Amiibo Dump. +- Decrypt/Encrypt Amiibo Dump. +- Able to fix the incorrect size of one type of Amiibo Dump (Power Saves or N2? I don't know:/) +- Dump and Write AppData of an Amiibo Dump. +- Help to found Amiibo Keys and Autodetect them in Clipboard for save them in file. +- Multilanguages. +- Read a NTAG215 and save it to an Amiibo Dump file. +- Write an Amiibo Dump file to an NTAG215. +- Flash AmiiBombuino Firmware inside AmiiBomb. +- Get Amiibo Tag Basic Informations. +- and more... + +## What's Next? +- Many little things to do AmiiBomb more User Friendly. +- Clean the code. +- It's work really fine with an NTAG215 but I don't know if it's work with an Amiibo ^^'! +- AppData editor (for SSB Amiibo or any others who have interesting things inside). +- Support PN532 NFC Module in AmiiBombuino. +- Improve the docs. + +In a future, I would own an N2 and a PowerSaves to add many functionality as possible in AmiiBomb. If you have any kind of ideas or suggestions, just let me know :)! You feel free to donate me at paypal adress: ackeedy@gmail.com + +Thanks & Enjoy! \ No newline at end of file