Explorar el Código

增加参数生成界面和功能,上传src,ttcfg,png文件。

Dail hace 1 año
padre
commit
00c3655a13
Se han modificado 24 ficheros con 1752 adiciones y 199 borrados
  1. BIN
      .vs/Welling_Motor_Debug_Tool/FileContentIndex/099ad9b3-e1b3-4969-afef-a66acad95fda.vsidx
  2. BIN
      .vs/Welling_Motor_Debug_Tool/FileContentIndex/c116061c-dca6-493c-9f10-fadcf5f6b373.vsidx
  3. BIN
      .vs/Welling_Motor_Debug_Tool/v17/.suo
  4. 205 73
      Welling_Motor_Debug_Tool/GenerateParams.Designer.cs
  5. 429 14
      Welling_Motor_Debug_Tool/GenerateParams.cs
  6. 941 0
      Welling_Motor_Debug_Tool/GenerateParams.resx
  7. 2 0
      Welling_Motor_Debug_Tool/LocalInfo.cs
  8. 16 13
      Welling_Motor_Debug_Tool/Login.Designer.cs
  9. 8 6
      Welling_Motor_Debug_Tool/Login.cs
  10. 27 22
      Welling_Motor_Debug_Tool/Scan.Designer.cs
  11. 5 0
      Welling_Motor_Debug_Tool/Scan.cs
  12. 0 3
      Welling_Motor_Debug_Tool/Scan.resx
  13. 16 1
      Welling_Motor_Debug_Tool/TorqueParams.Designer.cs
  14. BIN
      Welling_Motor_Debug_Tool/bin/Debug/Format/ConsoleApp2.exe
  15. 0 41
      Welling_Motor_Debug_Tool/bin/Debug/Format/Test/HUB_NM010-6G-36V-250W_Test_V1.0.0.0.0_20240304_Test_20240319.ttcfg
  16. BIN
      Welling_Motor_Debug_Tool/bin/Debug/Welling_Motor_Debug_Tool.exe
  17. BIN
      Welling_Motor_Debug_Tool/bin/Debug/Welling_Motor_Debug_Tool.pdb
  18. 57 17
      Welling_Motor_Debug_Tool/mainForm.Designer.cs
  19. 43 6
      Welling_Motor_Debug_Tool/mainForm.cs
  20. BIN
      Welling_Motor_Debug_Tool/obj/Debug/Welling_Motor_Debug_Tool.GenerateParams.resources
  21. 3 3
      Welling_Motor_Debug_Tool/obj/Debug/Welling_Motor_Debug_Tool.csproj.FileListAbsolute.txt
  22. BIN
      Welling_Motor_Debug_Tool/obj/Debug/Welling_Motor_Debug_Tool.csproj.GenerateResource.cache
  23. BIN
      Welling_Motor_Debug_Tool/obj/Debug/Welling_Motor_Debug_Tool.exe
  24. BIN
      Welling_Motor_Debug_Tool/obj/Debug/Welling_Motor_Debug_Tool.pdb

BIN
.vs/Welling_Motor_Debug_Tool/FileContentIndex/099ad9b3-e1b3-4969-afef-a66acad95fda.vsidx


BIN
.vs/Welling_Motor_Debug_Tool/FileContentIndex/c116061c-dca6-493c-9f10-fadcf5f6b373.vsidx


BIN
.vs/Welling_Motor_Debug_Tool/v17/.suo


+ 205 - 73
Welling_Motor_Debug_Tool/GenerateParams.Designer.cs

@@ -28,6 +28,7 @@
         /// </summary>
         private void InitializeComponent()
         {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GenerateParams));
             this.button_ExportParams = new System.Windows.Forms.Button();
             this.label1 = new System.Windows.Forms.Label();
             this.tabControl1 = new System.Windows.Forms.TabControl();
@@ -104,10 +105,17 @@
             this.label_ServerStatus = new System.Windows.Forms.Label();
             this.label_Server_ComStatus = new System.Windows.Forms.Label();
             this.pictureBox2 = new System.Windows.Forms.PictureBox();
-            this.radioButton_Simple = new System.Windows.Forms.RadioButton();
-            this.radioButton_Advance = new System.Windows.Forms.RadioButton();
             this.comboBox_ModelFile = new System.Windows.Forms.ComboBox();
             this.button_GenerateModelFile = new System.Windows.Forms.Button();
+            this.button_ModeRefresh = new System.Windows.Forms.Button();
+            this.label30 = new System.Windows.Forms.Label();
+            this.label31 = new System.Windows.Forms.Label();
+            this.label32 = new System.Windows.Forms.Label();
+            this.label33 = new System.Windows.Forms.Label();
+            this.label37 = new System.Windows.Forms.Label();
+            this.label38 = new System.Windows.Forms.Label();
+            this.radioButton_MIGIC = new System.Windows.Forms.RadioButton();
+            this.radioButton_HUB = new System.Windows.Forms.RadioButton();
             this.tabControl1.SuspendLayout();
             this.tabPage_Simple.SuspendLayout();
             this.groupBox5.SuspendLayout();
@@ -125,9 +133,9 @@
             this.button_ExportParams.Enabled = false;
             this.button_ExportParams.Font = new System.Drawing.Font("微软雅黑", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
             this.button_ExportParams.ForeColor = System.Drawing.Color.White;
-            this.button_ExportParams.Location = new System.Drawing.Point(855, 223);
+            this.button_ExportParams.Location = new System.Drawing.Point(855, 175);
             this.button_ExportParams.Name = "button_ExportParams";
-            this.button_ExportParams.Size = new System.Drawing.Size(167, 45);
+            this.button_ExportParams.Size = new System.Drawing.Size(165, 75);
             this.button_ExportParams.TabIndex = 0;
             this.button_ExportParams.Text = "导出配置";
             this.button_ExportParams.UseVisualStyleBackColor = false;
@@ -136,6 +144,7 @@
             // label1
             // 
             this.label1.AutoSize = true;
+            this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.label1.Location = new System.Drawing.Point(22, 25);
             this.label1.Name = "label1";
             this.label1.Size = new System.Drawing.Size(74, 21);
@@ -160,6 +169,7 @@
             this.tabPage_Simple.Controls.Add(this.groupBox4);
             this.tabPage_Simple.Controls.Add(this.groupBox3);
             this.tabPage_Simple.Controls.Add(this.groupBox2);
+            this.tabPage_Simple.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.tabPage_Simple.Location = new System.Drawing.Point(4, 30);
             this.tabPage_Simple.Name = "tabPage_Simple";
             this.tabPage_Simple.Padding = new System.Windows.Forms.Padding(3);
@@ -187,6 +197,7 @@
             this.comboBox_SysDir.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(192)))));
             this.comboBox_SysDir.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
             this.comboBox_SysDir.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+            this.comboBox_SysDir.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.comboBox_SysDir.FormattingEnabled = true;
             this.comboBox_SysDir.Items.AddRange(new object[] {
             "0",
@@ -201,6 +212,7 @@
             this.comboBox_SysRunMode.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(192)))));
             this.comboBox_SysRunMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
             this.comboBox_SysRunMode.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+            this.comboBox_SysRunMode.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.comboBox_SysRunMode.FormattingEnabled = true;
             this.comboBox_SysRunMode.Items.AddRange(new object[] {
             "踏频",
@@ -222,6 +234,7 @@
             // textBox_SysPowerLimit
             // 
             this.textBox_SysPowerLimit.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
+            this.textBox_SysPowerLimit.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.textBox_SysPowerLimit.Location = new System.Drawing.Point(394, 30);
             this.textBox_SysPowerLimit.Name = "textBox_SysPowerLimit";
             this.textBox_SysPowerLimit.Size = new System.Drawing.Size(65, 29);
@@ -270,6 +283,7 @@
             // textBox_AssistSpeedEnd
             // 
             this.textBox_AssistSpeedEnd.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
+            this.textBox_AssistSpeedEnd.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.textBox_AssistSpeedEnd.Location = new System.Drawing.Point(240, 30);
             this.textBox_AssistSpeedEnd.Name = "textBox_AssistSpeedEnd";
             this.textBox_AssistSpeedEnd.Size = new System.Drawing.Size(65, 29);
@@ -287,6 +301,7 @@
             // textBox_AssistSpeedBegin
             // 
             this.textBox_AssistSpeedBegin.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
+            this.textBox_AssistSpeedBegin.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.textBox_AssistSpeedBegin.Location = new System.Drawing.Point(86, 30);
             this.textBox_AssistSpeedBegin.Name = "textBox_AssistSpeedBegin";
             this.textBox_AssistSpeedBegin.Size = new System.Drawing.Size(65, 29);
@@ -319,6 +334,7 @@
             // textBox_MotorUV
             // 
             this.textBox_MotorUV.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
+            this.textBox_MotorUV.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.textBox_MotorUV.Location = new System.Drawing.Point(394, 30);
             this.textBox_MotorUV.Name = "textBox_MotorUV";
             this.textBox_MotorUV.Size = new System.Drawing.Size(65, 29);
@@ -336,6 +352,7 @@
             // textBox_MotorOV
             // 
             this.textBox_MotorOV.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
+            this.textBox_MotorOV.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.textBox_MotorOV.Location = new System.Drawing.Point(240, 30);
             this.textBox_MotorOV.Name = "textBox_MotorOV";
             this.textBox_MotorOV.Size = new System.Drawing.Size(65, 29);
@@ -353,6 +370,7 @@
             // textBox_MotorMaxCurr
             // 
             this.textBox_MotorMaxCurr.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
+            this.textBox_MotorMaxCurr.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.textBox_MotorMaxCurr.Location = new System.Drawing.Point(86, 30);
             this.textBox_MotorMaxCurr.Name = "textBox_MotorMaxCurr";
             this.textBox_MotorMaxCurr.Size = new System.Drawing.Size(65, 29);
@@ -396,6 +414,7 @@
             this.comboBox_BikeStartMode.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(192)))));
             this.comboBox_BikeStartMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
             this.comboBox_BikeStartMode.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+            this.comboBox_BikeStartMode.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.comboBox_BikeStartMode.FormattingEnabled = true;
             this.comboBox_BikeStartMode.Items.AddRange(new object[] {
             "柔和",
@@ -411,6 +430,7 @@
             this.comboBox_BikeModeB.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(192)))));
             this.comboBox_BikeModeB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
             this.comboBox_BikeModeB.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+            this.comboBox_BikeModeB.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.comboBox_BikeModeB.FormattingEnabled = true;
             this.comboBox_BikeModeB.Items.AddRange(new object[] {
             "1",
@@ -429,6 +449,7 @@
             this.comboBox_BikeVolB.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(192)))));
             this.comboBox_BikeVolB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
             this.comboBox_BikeVolB.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+            this.comboBox_BikeVolB.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.comboBox_BikeVolB.FormattingEnabled = true;
             this.comboBox_BikeVolB.Items.AddRange(new object[] {
             "6V",
@@ -443,6 +464,7 @@
             this.comboBox_BikeVolF.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(192)))));
             this.comboBox_BikeVolF.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
             this.comboBox_BikeVolF.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+            this.comboBox_BikeVolF.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.comboBox_BikeVolF.FormattingEnabled = true;
             this.comboBox_BikeVolF.Items.AddRange(new object[] {
             "6V",
@@ -464,6 +486,7 @@
             // textBox_BikeAutoOffTime
             // 
             this.textBox_BikeAutoOffTime.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
+            this.textBox_BikeAutoOffTime.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.textBox_BikeAutoOffTime.Location = new System.Drawing.Point(394, 129);
             this.textBox_BikeAutoOffTime.Name = "textBox_BikeAutoOffTime";
             this.textBox_BikeAutoOffTime.Size = new System.Drawing.Size(65, 29);
@@ -481,6 +504,7 @@
             // textBox_BikePowerOffTime
             // 
             this.textBox_BikePowerOffTime.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
+            this.textBox_BikePowerOffTime.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.textBox_BikePowerOffTime.Location = new System.Drawing.Point(240, 129);
             this.textBox_BikePowerOffTime.Name = "textBox_BikePowerOffTime";
             this.textBox_BikePowerOffTime.Size = new System.Drawing.Size(65, 29);
@@ -498,6 +522,7 @@
             // textBox_BikePowerOnTime
             // 
             this.textBox_BikePowerOnTime.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
+            this.textBox_BikePowerOnTime.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.textBox_BikePowerOnTime.Location = new System.Drawing.Point(86, 129);
             this.textBox_BikePowerOnTime.Name = "textBox_BikePowerOnTime";
             this.textBox_BikePowerOnTime.Size = new System.Drawing.Size(65, 29);
@@ -551,6 +576,7 @@
             // textBox_BikeRealB
             // 
             this.textBox_BikeRealB.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
+            this.textBox_BikeRealB.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.textBox_BikeRealB.Location = new System.Drawing.Point(240, 63);
             this.textBox_BikeRealB.Name = "textBox_BikeRealB";
             this.textBox_BikeRealB.Size = new System.Drawing.Size(65, 29);
@@ -568,6 +594,7 @@
             // textBox_BikeFrontT
             // 
             this.textBox_BikeFrontT.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
+            this.textBox_BikeFrontT.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.textBox_BikeFrontT.Location = new System.Drawing.Point(86, 63);
             this.textBox_BikeFrontT.Name = "textBox_BikeFrontT";
             this.textBox_BikeFrontT.Size = new System.Drawing.Size(65, 29);
@@ -585,6 +612,7 @@
             // textBox_BikeWalkSpeed
             // 
             this.textBox_BikeWalkSpeed.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
+            this.textBox_BikeWalkSpeed.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.textBox_BikeWalkSpeed.Location = new System.Drawing.Point(394, 30);
             this.textBox_BikeWalkSpeed.Name = "textBox_BikeWalkSpeed";
             this.textBox_BikeWalkSpeed.Size = new System.Drawing.Size(65, 29);
@@ -602,6 +630,7 @@
             // textBox_BikeThroSpeed
             // 
             this.textBox_BikeThroSpeed.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
+            this.textBox_BikeThroSpeed.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.textBox_BikeThroSpeed.Location = new System.Drawing.Point(240, 30);
             this.textBox_BikeThroSpeed.Name = "textBox_BikeThroSpeed";
             this.textBox_BikeThroSpeed.Size = new System.Drawing.Size(65, 29);
@@ -619,6 +648,7 @@
             // textBox_BikeWheel
             // 
             this.textBox_BikeWheel.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
+            this.textBox_BikeWheel.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.textBox_BikeWheel.Location = new System.Drawing.Point(86, 30);
             this.textBox_BikeWheel.Name = "textBox_BikeWheel";
             this.textBox_BikeWheel.Size = new System.Drawing.Size(65, 29);
@@ -628,6 +658,7 @@
             // 
             this.tabPage_Advance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
             this.tabPage_Advance.Controls.Add(this.richTextBox_AdvanceParams);
+            this.tabPage_Advance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.tabPage_Advance.Location = new System.Drawing.Point(4, 30);
             this.tabPage_Advance.Name = "tabPage_Advance";
             this.tabPage_Advance.Padding = new System.Windows.Forms.Padding(3);
@@ -667,10 +698,17 @@
             this.groupBox1.Controls.Add(this.label5);
             this.groupBox1.Controls.Add(this.label4);
             this.groupBox1.Controls.Add(this.label3);
+            this.groupBox1.Controls.Add(this.label38);
+            this.groupBox1.Controls.Add(this.label37);
+            this.groupBox1.Controls.Add(this.label33);
+            this.groupBox1.Controls.Add(this.label32);
+            this.groupBox1.Controls.Add(this.label31);
+            this.groupBox1.Controls.Add(this.label30);
             this.groupBox1.Controls.Add(this.label2);
+            this.groupBox1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.groupBox1.Location = new System.Drawing.Point(524, 73);
             this.groupBox1.Name = "groupBox1";
-            this.groupBox1.Size = new System.Drawing.Size(300, 676);
+            this.groupBox1.Size = new System.Drawing.Size(316, 676);
             this.groupBox1.TabIndex = 4;
             this.groupBox1.TabStop = false;
             this.groupBox1.Text = "订单信息";
@@ -678,95 +716,106 @@
             // textBox_OtherInfo
             // 
             this.textBox_OtherInfo.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
-            this.textBox_OtherInfo.Location = new System.Drawing.Point(138, 487);
+            this.textBox_OtherInfo.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
+            this.textBox_OtherInfo.Location = new System.Drawing.Point(123, 567);
             this.textBox_OtherInfo.Name = "textBox_OtherInfo";
-            this.textBox_OtherInfo.Size = new System.Drawing.Size(140, 29);
+            this.textBox_OtherInfo.Size = new System.Drawing.Size(184, 29);
             this.textBox_OtherInfo.TabIndex = 1;
             // 
             // textBox_SoftwareVer
             // 
             this.textBox_SoftwareVer.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
-            this.textBox_SoftwareVer.Location = new System.Drawing.Point(138, 443);
+            this.textBox_SoftwareVer.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
+            this.textBox_SoftwareVer.Location = new System.Drawing.Point(123, 515);
             this.textBox_SoftwareVer.Name = "textBox_SoftwareVer";
-            this.textBox_SoftwareVer.Size = new System.Drawing.Size(140, 29);
+            this.textBox_SoftwareVer.Size = new System.Drawing.Size(184, 29);
             this.textBox_SoftwareVer.TabIndex = 1;
             // 
             // textBox_PCBA
             // 
             this.textBox_PCBA.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
-            this.textBox_PCBA.Location = new System.Drawing.Point(138, 399);
+            this.textBox_PCBA.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
+            this.textBox_PCBA.Location = new System.Drawing.Point(123, 463);
             this.textBox_PCBA.Name = "textBox_PCBA";
-            this.textBox_PCBA.Size = new System.Drawing.Size(140, 29);
+            this.textBox_PCBA.Size = new System.Drawing.Size(184, 29);
             this.textBox_PCBA.TabIndex = 1;
             // 
             // textBox_ProductTag
             // 
             this.textBox_ProductTag.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
-            this.textBox_ProductTag.Location = new System.Drawing.Point(138, 355);
+            this.textBox_ProductTag.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
+            this.textBox_ProductTag.Location = new System.Drawing.Point(123, 411);
             this.textBox_ProductTag.Name = "textBox_ProductTag";
-            this.textBox_ProductTag.Size = new System.Drawing.Size(140, 29);
+            this.textBox_ProductTag.Size = new System.Drawing.Size(184, 29);
             this.textBox_ProductTag.TabIndex = 1;
             // 
             // textBox_ProductDate
             // 
             this.textBox_ProductDate.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
-            this.textBox_ProductDate.Location = new System.Drawing.Point(138, 311);
+            this.textBox_ProductDate.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
+            this.textBox_ProductDate.Location = new System.Drawing.Point(123, 359);
             this.textBox_ProductDate.Name = "textBox_ProductDate";
-            this.textBox_ProductDate.Size = new System.Drawing.Size(140, 29);
+            this.textBox_ProductDate.Size = new System.Drawing.Size(184, 29);
             this.textBox_ProductDate.TabIndex = 1;
             // 
             // textBox_ProductAddr
             // 
             this.textBox_ProductAddr.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
-            this.textBox_ProductAddr.Location = new System.Drawing.Point(138, 267);
+            this.textBox_ProductAddr.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
+            this.textBox_ProductAddr.Location = new System.Drawing.Point(123, 307);
             this.textBox_ProductAddr.Name = "textBox_ProductAddr";
-            this.textBox_ProductAddr.Size = new System.Drawing.Size(140, 29);
+            this.textBox_ProductAddr.Size = new System.Drawing.Size(184, 29);
             this.textBox_ProductAddr.TabIndex = 1;
             // 
             // textBox_ProductMac
             // 
             this.textBox_ProductMac.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
-            this.textBox_ProductMac.Location = new System.Drawing.Point(138, 223);
+            this.textBox_ProductMac.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
+            this.textBox_ProductMac.Location = new System.Drawing.Point(123, 255);
             this.textBox_ProductMac.Name = "textBox_ProductMac";
-            this.textBox_ProductMac.Size = new System.Drawing.Size(140, 29);
+            this.textBox_ProductMac.Size = new System.Drawing.Size(184, 29);
             this.textBox_ProductMac.TabIndex = 1;
             // 
             // textBox_MarkNum
             // 
             this.textBox_MarkNum.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
-            this.textBox_MarkNum.Location = new System.Drawing.Point(138, 179);
+            this.textBox_MarkNum.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
+            this.textBox_MarkNum.Location = new System.Drawing.Point(123, 203);
             this.textBox_MarkNum.Name = "textBox_MarkNum";
-            this.textBox_MarkNum.Size = new System.Drawing.Size(140, 29);
+            this.textBox_MarkNum.Size = new System.Drawing.Size(184, 29);
             this.textBox_MarkNum.TabIndex = 1;
             // 
             // textBox_ProductName
             // 
             this.textBox_ProductName.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
-            this.textBox_ProductName.Location = new System.Drawing.Point(138, 135);
+            this.textBox_ProductName.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
+            this.textBox_ProductName.Location = new System.Drawing.Point(123, 151);
             this.textBox_ProductName.Name = "textBox_ProductName";
-            this.textBox_ProductName.Size = new System.Drawing.Size(140, 29);
+            this.textBox_ProductName.Size = new System.Drawing.Size(184, 29);
             this.textBox_ProductName.TabIndex = 1;
             // 
             // textBox_CustomerName
             // 
             this.textBox_CustomerName.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
-            this.textBox_CustomerName.Location = new System.Drawing.Point(138, 91);
+            this.textBox_CustomerName.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
+            this.textBox_CustomerName.Location = new System.Drawing.Point(123, 99);
             this.textBox_CustomerName.Name = "textBox_CustomerName";
-            this.textBox_CustomerName.Size = new System.Drawing.Size(140, 29);
+            this.textBox_CustomerName.Size = new System.Drawing.Size(184, 29);
             this.textBox_CustomerName.TabIndex = 1;
             // 
             // textBox_MarkCode
             // 
             this.textBox_MarkCode.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
-            this.textBox_MarkCode.Location = new System.Drawing.Point(138, 47);
+            this.textBox_MarkCode.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
+            this.textBox_MarkCode.Location = new System.Drawing.Point(123, 47);
             this.textBox_MarkCode.Name = "textBox_MarkCode";
-            this.textBox_MarkCode.Size = new System.Drawing.Size(140, 29);
+            this.textBox_MarkCode.Size = new System.Drawing.Size(184, 29);
             this.textBox_MarkCode.TabIndex = 1;
             // 
             // label12
             // 
             this.label12.AutoSize = true;
-            this.label12.Location = new System.Drawing.Point(6, 491);
+            this.label12.Location = new System.Drawing.Point(6, 571);
             this.label12.Name = "label12";
             this.label12.Size = new System.Drawing.Size(74, 21);
             this.label12.TabIndex = 0;
@@ -775,7 +824,7 @@
             // label11
             // 
             this.label11.AutoSize = true;
-            this.label11.Location = new System.Drawing.Point(6, 447);
+            this.label11.Location = new System.Drawing.Point(6, 519);
             this.label11.Name = "label11";
             this.label11.Size = new System.Drawing.Size(74, 21);
             this.label11.TabIndex = 0;
@@ -784,7 +833,7 @@
             // label10
             // 
             this.label10.AutoSize = true;
-            this.label10.Location = new System.Drawing.Point(6, 403);
+            this.label10.Location = new System.Drawing.Point(6, 467);
             this.label10.Name = "label10";
             this.label10.Size = new System.Drawing.Size(84, 21);
             this.label10.TabIndex = 0;
@@ -793,7 +842,7 @@
             // label9
             // 
             this.label9.AutoSize = true;
-            this.label9.Location = new System.Drawing.Point(6, 359);
+            this.label9.Location = new System.Drawing.Point(6, 415);
             this.label9.Name = "label9";
             this.label9.Size = new System.Drawing.Size(74, 21);
             this.label9.TabIndex = 0;
@@ -802,7 +851,7 @@
             // label8
             // 
             this.label8.AutoSize = true;
-            this.label8.Location = new System.Drawing.Point(6, 315);
+            this.label8.Location = new System.Drawing.Point(6, 363);
             this.label8.Name = "label8";
             this.label8.Size = new System.Drawing.Size(74, 21);
             this.label8.TabIndex = 0;
@@ -811,7 +860,7 @@
             // label7
             // 
             this.label7.AutoSize = true;
-            this.label7.Location = new System.Drawing.Point(6, 271);
+            this.label7.Location = new System.Drawing.Point(6, 311);
             this.label7.Name = "label7";
             this.label7.Size = new System.Drawing.Size(58, 21);
             this.label7.TabIndex = 0;
@@ -820,7 +869,7 @@
             // label6
             // 
             this.label6.AutoSize = true;
-            this.label6.Location = new System.Drawing.Point(6, 227);
+            this.label6.Location = new System.Drawing.Point(6, 259);
             this.label6.Name = "label6";
             this.label6.Size = new System.Drawing.Size(58, 21);
             this.label6.TabIndex = 0;
@@ -829,7 +878,7 @@
             // label5
             // 
             this.label5.AutoSize = true;
-            this.label5.Location = new System.Drawing.Point(6, 183);
+            this.label5.Location = new System.Drawing.Point(6, 207);
             this.label5.Name = "label5";
             this.label5.Size = new System.Drawing.Size(74, 21);
             this.label5.TabIndex = 0;
@@ -838,7 +887,7 @@
             // label4
             // 
             this.label4.AutoSize = true;
-            this.label4.Location = new System.Drawing.Point(6, 139);
+            this.label4.Location = new System.Drawing.Point(6, 155);
             this.label4.Name = "label4";
             this.label4.Size = new System.Drawing.Size(74, 21);
             this.label4.TabIndex = 0;
@@ -847,7 +896,7 @@
             // label3
             // 
             this.label3.AutoSize = true;
-            this.label3.Location = new System.Drawing.Point(6, 95);
+            this.label3.Location = new System.Drawing.Point(6, 103);
             this.label3.Name = "label3";
             this.label3.Size = new System.Drawing.Size(113, 21);
             this.label3.TabIndex = 0;
@@ -876,7 +925,7 @@
             this.label_Server_ComStatus.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
             this.label_Server_ComStatus.Font = new System.Drawing.Font("Microsoft YaHei UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
             this.label_Server_ComStatus.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
-            this.label_Server_ComStatus.Location = new System.Drawing.Point(851, 693);
+            this.label_Server_ComStatus.Location = new System.Drawing.Point(842, 693);
             this.label_Server_ComStatus.Name = "label_Server_ComStatus";
             this.label_Server_ComStatus.Size = new System.Drawing.Size(106, 21);
             this.label_Server_ComStatus.TabIndex = 20;
@@ -886,50 +935,23 @@
             // 
             this.pictureBox2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
             this.pictureBox2.Image = global::Welling_Motor_Debug_Tool.Properties.Resources.about;
-            this.pictureBox2.Location = new System.Drawing.Point(855, 726);
+            this.pictureBox2.Location = new System.Drawing.Point(846, 726);
             this.pictureBox2.Name = "pictureBox2";
             this.pictureBox2.Size = new System.Drawing.Size(167, 23);
             this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
             this.pictureBox2.TabIndex = 17;
             this.pictureBox2.TabStop = false;
             // 
-            // radioButton_Simple
-            // 
-            this.radioButton_Simple.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
-            this.radioButton_Simple.Checked = true;
-            this.radioButton_Simple.Enabled = false;
-            this.radioButton_Simple.Font = new System.Drawing.Font("微软雅黑", 14.25F);
-            this.radioButton_Simple.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
-            this.radioButton_Simple.Location = new System.Drawing.Point(855, 83);
-            this.radioButton_Simple.Name = "radioButton_Simple";
-            this.radioButton_Simple.Size = new System.Drawing.Size(167, 45);
-            this.radioButton_Simple.TabIndex = 22;
-            this.radioButton_Simple.TabStop = true;
-            this.radioButton_Simple.Text = "基础参数";
-            this.radioButton_Simple.UseVisualStyleBackColor = false;
-            // 
-            // radioButton_Advance
-            // 
-            this.radioButton_Advance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
-            this.radioButton_Advance.Enabled = false;
-            this.radioButton_Advance.Font = new System.Drawing.Font("微软雅黑", 14.25F);
-            this.radioButton_Advance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
-            this.radioButton_Advance.Location = new System.Drawing.Point(855, 153);
-            this.radioButton_Advance.Name = "radioButton_Advance";
-            this.radioButton_Advance.Size = new System.Drawing.Size(167, 45);
-            this.radioButton_Advance.TabIndex = 22;
-            this.radioButton_Advance.Text = "高级参数";
-            this.radioButton_Advance.UseVisualStyleBackColor = false;
-            // 
             // comboBox_ModelFile
             // 
             this.comboBox_ModelFile.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(192)))));
             this.comboBox_ModelFile.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
             this.comboBox_ModelFile.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+            this.comboBox_ModelFile.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.comboBox_ModelFile.FormattingEnabled = true;
             this.comboBox_ModelFile.Location = new System.Drawing.Point(106, 21);
             this.comboBox_ModelFile.Name = "comboBox_ModelFile";
-            this.comboBox_ModelFile.Size = new System.Drawing.Size(718, 29);
+            this.comboBox_ModelFile.Size = new System.Drawing.Size(628, 29);
             this.comboBox_ModelFile.TabIndex = 23;
             this.comboBox_ModelFile.SelectedIndexChanged += new System.EventHandler(this.comboBox_ModelFile_SelectedIndexChanged);
             // 
@@ -940,31 +962,134 @@
             this.button_GenerateModelFile.ForeColor = System.Drawing.Color.White;
             this.button_GenerateModelFile.Location = new System.Drawing.Point(855, 13);
             this.button_GenerateModelFile.Name = "button_GenerateModelFile";
-            this.button_GenerateModelFile.Size = new System.Drawing.Size(167, 45);
+            this.button_GenerateModelFile.Size = new System.Drawing.Size(165, 75);
             this.button_GenerateModelFile.TabIndex = 0;
             this.button_GenerateModelFile.Text = "生成模板";
             this.button_GenerateModelFile.UseVisualStyleBackColor = false;
             this.button_GenerateModelFile.Click += new System.EventHandler(this.button_GenerateModelFile_Click);
             // 
+            // button_ModeRefresh
+            // 
+            this.button_ModeRefresh.BackColor = System.Drawing.Color.Teal;
+            this.button_ModeRefresh.Font = new System.Drawing.Font("微软雅黑", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.button_ModeRefresh.ForeColor = System.Drawing.Color.White;
+            this.button_ModeRefresh.Location = new System.Drawing.Point(750, 13);
+            this.button_ModeRefresh.Name = "button_ModeRefresh";
+            this.button_ModeRefresh.Size = new System.Drawing.Size(90, 45);
+            this.button_ModeRefresh.TabIndex = 0;
+            this.button_ModeRefresh.Text = "刷新";
+            this.button_ModeRefresh.UseVisualStyleBackColor = false;
+            this.button_ModeRefresh.Click += new System.EventHandler(this.button_ModeRefresh_Click);
+            // 
+            // label30
+            // 
+            this.label30.AutoSize = true;
+            this.label30.Font = new System.Drawing.Font("微软雅黑", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.label30.ForeColor = System.Drawing.Color.Silver;
+            this.label30.Location = new System.Drawing.Point(123, 548);
+            this.label30.Name = "label30";
+            this.label30.Size = new System.Drawing.Size(154, 16);
+            this.label30.TabIndex = 0;
+            this.label30.Text = "参考格式:V1.0.0.0.0_20240101";
+            // 
+            // label31
+            // 
+            this.label31.AutoSize = true;
+            this.label31.Font = new System.Drawing.Font("微软雅黑", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.label31.ForeColor = System.Drawing.Color.Silver;
+            this.label31.Location = new System.Drawing.Point(123, 288);
+            this.label31.Name = "label31";
+            this.label31.Size = new System.Drawing.Size(73, 16);
+            this.label31.TabIndex = 0;
+            this.label31.Text = "不超过8个字符";
+            // 
+            // label32
+            // 
+            this.label32.AutoSize = true;
+            this.label32.Font = new System.Drawing.Font("微软雅黑", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.label32.ForeColor = System.Drawing.Color.Silver;
+            this.label32.Location = new System.Drawing.Point(123, 339);
+            this.label32.Name = "label32";
+            this.label32.Size = new System.Drawing.Size(73, 16);
+            this.label32.TabIndex = 0;
+            this.label32.Text = "不超过8个字符";
+            // 
+            // label33
+            // 
+            this.label33.AutoSize = true;
+            this.label33.Font = new System.Drawing.Font("微软雅黑", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.label33.ForeColor = System.Drawing.Color.Silver;
+            this.label33.Location = new System.Drawing.Point(123, 392);
+            this.label33.Name = "label33";
+            this.label33.Size = new System.Drawing.Size(73, 16);
+            this.label33.TabIndex = 0;
+            this.label33.Text = "不超过8个字符";
+            // 
+            // label37
+            // 
+            this.label37.AutoSize = true;
+            this.label37.Font = new System.Drawing.Font("微软雅黑", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.label37.ForeColor = System.Drawing.Color.Silver;
+            this.label37.Location = new System.Drawing.Point(123, 444);
+            this.label37.Name = "label37";
+            this.label37.Size = new System.Drawing.Size(184, 16);
+            this.label37.TabIndex = 0;
+            this.label37.Text = "参考:大牙盘:MM_MC1;轮毂:GF_250_1";
+            // 
+            // label38
+            // 
+            this.label38.AutoSize = true;
+            this.label38.Font = new System.Drawing.Font("微软雅黑", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.label38.ForeColor = System.Drawing.Color.Silver;
+            this.label38.Location = new System.Drawing.Point(123, 495);
+            this.label38.Name = "label38";
+            this.label38.Size = new System.Drawing.Size(73, 16);
+            this.label38.TabIndex = 0;
+            this.label38.Text = "填写PCBA板号";
+            // 
+            // radioButton_MIGIC
+            // 
+            this.radioButton_MIGIC.AutoSize = true;
+            this.radioButton_MIGIC.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
+            this.radioButton_MIGIC.Location = new System.Drawing.Point(855, 119);
+            this.radioButton_MIGIC.Name = "radioButton_MIGIC";
+            this.radioButton_MIGIC.Size = new System.Drawing.Size(77, 25);
+            this.radioButton_MIGIC.TabIndex = 24;
+            this.radioButton_MIGIC.Text = "MIGIC";
+            this.radioButton_MIGIC.UseVisualStyleBackColor = true;
+            // 
+            // radioButton_HUB
+            // 
+            this.radioButton_HUB.AutoSize = true;
+            this.radioButton_HUB.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
+            this.radioButton_HUB.Location = new System.Drawing.Point(955, 119);
+            this.radioButton_HUB.Name = "radioButton_HUB";
+            this.radioButton_HUB.Size = new System.Drawing.Size(62, 25);
+            this.radioButton_HUB.TabIndex = 24;
+            this.radioButton_HUB.Text = "HUB";
+            this.radioButton_HUB.UseVisualStyleBackColor = true;
+            // 
             // GenerateParams
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
             this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
             this.ClientSize = new System.Drawing.Size(1034, 761);
+            this.Controls.Add(this.radioButton_HUB);
+            this.Controls.Add(this.radioButton_MIGIC);
             this.Controls.Add(this.comboBox_ModelFile);
-            this.Controls.Add(this.radioButton_Advance);
-            this.Controls.Add(this.radioButton_Simple);
             this.Controls.Add(this.label_ServerStatus);
             this.Controls.Add(this.label_Server_ComStatus);
             this.Controls.Add(this.pictureBox2);
             this.Controls.Add(this.groupBox1);
             this.Controls.Add(this.tabControl1);
             this.Controls.Add(this.label1);
+            this.Controls.Add(this.button_ModeRefresh);
             this.Controls.Add(this.button_GenerateModelFile);
             this.Controls.Add(this.button_ExportParams);
             this.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
             this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
             this.Margin = new System.Windows.Forms.Padding(5);
             this.MaximizeBox = false;
             this.MinimizeBox = false;
@@ -1022,8 +1147,6 @@
         private System.Windows.Forms.Label label12;
         private System.Windows.Forms.RichTextBox richTextBox_AdvanceParams;
         private System.Windows.Forms.PictureBox pictureBox2;
-        private System.Windows.Forms.RadioButton radioButton_Simple;
-        private System.Windows.Forms.RadioButton radioButton_Advance;
         private System.Windows.Forms.GroupBox groupBox2;
         private System.Windows.Forms.Label label19;
         private System.Windows.Forms.Label label18;
@@ -1072,5 +1195,14 @@
         private System.Windows.Forms.Button button_GenerateModelFile;
         private System.Windows.Forms.Label label_ServerStatus;
         private System.Windows.Forms.Label label_Server_ComStatus;
+        private System.Windows.Forms.Button button_ModeRefresh;
+        private System.Windows.Forms.Label label38;
+        private System.Windows.Forms.Label label37;
+        private System.Windows.Forms.Label label33;
+        private System.Windows.Forms.Label label32;
+        private System.Windows.Forms.Label label31;
+        private System.Windows.Forms.Label label30;
+        private System.Windows.Forms.RadioButton radioButton_MIGIC;
+        private System.Windows.Forms.RadioButton radioButton_HUB;
     }
 }

+ 429 - 14
Welling_Motor_Debug_Tool/GenerateParams.cs

@@ -3,9 +3,12 @@ using System.Collections;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
+using System.Diagnostics;
 using System.Drawing;
 using System.IO;
 using System.Linq;
+using System.Reflection;
+using System.Runtime.Remoting.Messaging;
 using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
@@ -19,7 +22,7 @@ namespace Welling_Motor_Debug_Tool
         //存储路径文件
         LocalInfo localInfo = new LocalInfo();
         //服务器配置
-        string IP, Port, User, PassWD, ModelPath;
+        string IP, Port, User, PassWD, ModelPath, CfgPath;
         //FTP
         ftp myFtp = new ftp();
 
@@ -71,7 +74,8 @@ namespace Welling_Motor_Debug_Tool
             {
                 label_Server_ComStatus.Text = "网络已断开";
                 label_ServerStatus.BackColor = Color.Red;
-                MessageBox.Show("网络断开!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);                
+                MessageBox.Show("网络断开!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+                this.Close();
             }
             else
             {
@@ -80,7 +84,8 @@ namespace Welling_Motor_Debug_Tool
             }
 
             //加载模板文件
-            string[] FileList = { "" };
+            comboBox_ModelFile.Items.Clear();
+            string[] FileList = { "" };            
             FileList = myFtp.GetFileNameList(ModelPath);
             comboBox_ModelFile.Items.Clear();            
             foreach (var file in FileList)
@@ -94,37 +99,180 @@ namespace Welling_Motor_Debug_Tool
 
         }
 
-        private void radioButton_Simple_Click(object sender, EventArgs e)
-        {
-            tabPage_Simple.Select();
-        }
-
-        private void radioButton_Advance_Click(object sender, EventArgs e)
+        private void button_ModeRefresh_Click(object sender, EventArgs e)
         {
-            tabPage_Advance.Select();
+            //加载模板文件
+            comboBox_ModelFile.Items.Clear();
+            string[] FileList = { "" };
+            FileList = myFtp.GetFileNameList(ModelPath);
+            comboBox_ModelFile.Items.Clear();
+            foreach (var file in FileList)
+            {
+                if (file.Contains(".src"))
+                {
+                    comboBox_ModelFile.Items.Add(file.Substring(file.LastIndexOf("\\") + 1));
+                }
+            }
         }
 
         private void comboBox_ModelFile_SelectedIndexChanged(object sender, EventArgs e)
         {
             tabControl1.Enabled = true;
-            radioButton_Simple.Enabled = true;
-            radioButton_Advance.Enabled = true;
             button_ExportParams.Enabled = true;
 
+            //下载文件
+            if (System.IO.File.Exists(localInfo.LocalPath + "\\" + comboBox_ModelFile.Text))//本地存在选定文件,先删除本地
+            {
+                System.IO.File.Delete(localInfo.LocalPath + "\\" + comboBox_ModelFile.Text);
+            }
+            myFtp.DownloadFile("ParamsMode/" + comboBox_ModelFile.Text, localInfo.LocalPath);
+
+            //打开文件
+            StreamReader objReader = new StreamReader(localInfo.LocalPath + "\\" + comboBox_ModelFile.Text);
+            string sLine = "";
+            ArrayList arrText = new ArrayList();//创建一个动态数组
+            while (sLine != null)
+            {
+                sLine = objReader.ReadLine();
+                arrText.Add(sLine);
+            }
+            objReader.Close();
+
             //加载文件
             do //基础参数界面
             {
+                //建立字典,存放并获取每个命令的行号
+                Dictionary<string, int> DicRowNum = new Dictionary<string, int>();
+                DicRowNum.Add("[整车参数]", 0);
+                DicRowNum.Add("[控制参数]", 0);
+                DicRowNum.Add("[助力参数]", 0);
+                DicRowNum.Add("[调试参数]", 0);
+                DicRowNum.Add("[生产信息]", 0);
+                Dictionary<string, int> __dict = new Dictionary<string, int>(DicRowNum);
+                foreach (KeyValuePair<string, int> item in __dict)
+                {
+                    foreach (string cmd in arrText)
+                    {
+                        if (cmd.Contains(item.Key))
+                        {
+                            DicRowNum[item.Key] = arrText.IndexOf(cmd);
+                            break;
+                        }
+                    }
+                }
+                //遍历加载
+                foreach (string index in DicRowNum.Keys)
+                { 
+                    int rowNum = DicRowNum[index]; //行号
+                    switch (index)
+                    {
+                        case "[整车参数]":
+                            {
+                                //轮胎周长
+                                textBox_BikeWheel.Text = arrText[rowNum + 2].ToString().Split(',')[1];
+                                //转把限速
+                                textBox_BikeThroSpeed.Text = arrText[rowNum + 4].ToString().Split(',')[1];
+                                //推行限速
+                                textBox_BikeWalkSpeed.Text = arrText[rowNum + 5].ToString().Split(',')[1];
+                                //前牙盘
+                                textBox_BikeFrontT.Text = arrText[rowNum + 6].ToString().Split(',')[1];
+                                //后牙盘
+                                textBox_BikeRealB.Text = arrText[rowNum + 7].ToString().Split(',')[1];
+                                //前灯电压
+                                ushort LightParams = Convert.ToUInt16(arrText[rowNum + 10].ToString().Split(',')[1]);
+                                if ((LightParams & 0x00FF) == 6)
+                                    comboBox_BikeVolF.SelectedIndex = 0;
+                                else if ((LightParams & 0x00FF) == 12)
+                                    comboBox_BikeVolF.SelectedIndex = 1;
+                                else
+                                    comboBox_BikeVolF.SelectedIndex = -1;
+                                //后灯电压
+                                if (((LightParams >> 8) & 0x0F) == 6)
+                                    comboBox_BikeVolB.SelectedIndex = 0;
+                                else if (((LightParams >> 8) & 0x0F) == 12)
+                                    comboBox_BikeVolB.SelectedIndex = 1;
+                                else
+                                    comboBox_BikeVolB.SelectedIndex = -1;
+                                //后灯模式c
+                                comboBox_BikeModeB.SelectedIndex = (LightParams >> 12) - 1;
+                                //启动模式
+                                comboBox_BikeStartMode.SelectedIndex = Convert.ToUInt16(arrText[rowNum + 12].ToString().Split(',')[1]) - 1;
+                                //开机延迟
+                                ushort PowerOnOffParams = Convert.ToUInt16(arrText[rowNum + 13].ToString().Split(',')[1]);
+                                textBox_BikePowerOnTime.Text = (PowerOnOffParams >> 12).ToString();
+                                //关机延迟
+                                textBox_BikePowerOffTime.Text = ((PowerOnOffParams >> 8) & 0x0F).ToString();
+                                //自动关机
+                                textBox_BikeAutoOffTime.Text = (PowerOnOffParams & 0x00FF).ToString();
+                                break;
+                            }
+                        case "[控制参数]":
+                            {
+                                //峰值电流
+                                textBox_MotorMaxCurr.Text = arrText[rowNum + 4].ToString().Split(',')[1];
+                                //过压保护
+                                textBox_MotorOV.Text = arrText[rowNum + 6].ToString().Split(',')[1];
+                                //欠压保护
+                                textBox_MotorUV.Text = arrText[rowNum + 7].ToString().Split(',')[1];
+                                break;
+                            }
+                        case "[助力参数]":
+                            {
+                                //限速起始
+                                textBox_AssistSpeedBegin.Text = arrText[rowNum + 92].ToString().Split(',')[1];
+                                //限速结束
+                                textBox_AssistSpeedEnd.Text = arrText[rowNum + 93].ToString().Split(',')[1];
+                                break;
+                            }
+                        case "[调试参数]":
+                            {
+                                //运行模式
+                                if ((Convert.ToUInt16(arrText[rowNum + 2].ToString().Split(',')[1]) >= 4) && (Convert.ToUInt16(arrText[rowNum + 2].ToString().Split(',')[1]) <= 6))
+                                {
+                                    comboBox_SysRunMode.SelectedIndex = Convert.ToUInt16(arrText[rowNum + 2].ToString().Split(',')[1]) - 4;
+                                }
+                                else
+                                    comboBox_SysRunMode.SelectedIndex = -1;
+                                //旋转方向
+                                comboBox_SysDir.SelectedIndex = Convert.ToUInt16(arrText[rowNum + 5].ToString().Split(',')[1]);
+                                //功率限幅
+                                textBox_SysPowerLimit.Text = arrText[rowNum + 23].ToString().Split(',')[1];
+                                break;
+                            }
+                        case "[生产信息]":
+                            {
+                                //生产商
+                                textBox_ProductMac.Text= arrText[rowNum + 1].ToString().Split(',')[1];
+                                //生产地
+                                textBox_ProductAddr.Text = arrText[rowNum + 2].ToString().Split(',')[1];
+                                //生产日期
+                                textBox_ProductDate.Text = DateTime.Now.ToString("yyyy-MM-dd").Replace("-", "");
+                                //生产标识
+                                textBox_ProductTag.Text = arrText[rowNum + 4].ToString().Split(',')[1];
+                                break;
+                            }
+                        default:break;
 
+                    }
+                }
             } while (false);
             do //高级参数界面
             {
-
+                richTextBox_AdvanceParams.Clear();
+                foreach (string sOutput in arrText)
+                {
+                    richTextBox_AdvanceParams.AppendText(sOutput + "\r\n");
+                }
+                richTextBox_AdvanceParams.Text = richTextBox_AdvanceParams.Text.Remove(richTextBox_AdvanceParams.Text.Length - 2);
             } while (false);
 
         }
 
         private void button_GenerateModelFile_Click(object sender, EventArgs e)
         {
+            string DataFileName = "";
+            string FileInfo = "";
+
             //填写文件名
             Scan ModeFileName = new Scan();
             ModeFileName.ShowDialog();
@@ -133,16 +281,283 @@ namespace Welling_Motor_Debug_Tool
                 MessageBox.Show("文件名为空", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                 return;
             }
-            string fileName = ModeFileName.textBox_Scan.Text;
+            DataFileName = ModeFileName.textBox_Scan.Text + ".src";
+
             //核对文件名格式
+            //...
 
+            //获取模板文本信息写入文件
+            FileInfo = richTextBox_AdvanceParams.Text;
+            if (FileInfo == string.Empty)
+            {
+                MessageBox.Show("无效参数", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+                return;
+            }
+            System.IO.File.WriteAllText(DataFileName, FileInfo);
 
+            //模板文件上传服务器
+            if (myFtp.CheckFtp() == true)
+            {
+                //上传文件
+                bool result1 = myFtp.UploadFile(Directory.GetCurrentDirectory() + "\\" + DataFileName,  "ParamsMode");
+                if (result1 == true)
+                {
+                    MessageBox.Show("数据已上传!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                }
+                else
+                {
+                    MessageBox.Show("数据上传失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+                }
 
+            }
+            else
+            {
+                MessageBox.Show("服务器断开!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+            }
+            System.IO.File.Delete(Directory.GetCurrentDirectory() + "\\" + DataFileName);
         }
 
         private void button_ExportParams_Click(object sender, EventArgs e)
         {
+            //检查
+            if ((radioButton_MIGIC.Checked | radioButton_HUB.Checked) == false)
+            {
+                MessageBox.Show("请选择产品类型", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                return;
+            }
+            foreach (Control c in groupBox1.Controls)
+            {
+                if (c is TextBox)
+                {
+                    if (c.Text == "")
+                    {
+                        MessageBox.Show("信息填写不完整", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                        return;
+                    }
+                }
+            }
+
+            //分割参数
+            string[] lines = richTextBox_AdvanceParams.Text.Split(new string[] { "\n" }, StringSplitOptions.None);
+            try
+            {
+                //更新信息
+                do
+                {
+                    //建立字典,存放并获取每个命令的行号
+                    Dictionary<string, int> DicRowNum = new Dictionary<string, int>();
+                    DicRowNum.Add("[整车参数]", 0);
+                    DicRowNum.Add("[控制参数]", 0);
+                    DicRowNum.Add("[助力参数]", 0);
+                    DicRowNum.Add("[调试参数]", 0);
+                    DicRowNum.Add("[生产信息]", 0);
+                    Dictionary<string, int> __dict = new Dictionary<string, int>(DicRowNum);
+                    foreach (KeyValuePair<string, int> item in __dict)
+                    {
+                        for (int i = 0; i < lines.Length; i++)
+                        {
+                            if (lines[i].Contains(item.Key))
+                            {
+                                DicRowNum[item.Key] = i;
+                                break;
+                            }
+                        }
+                    }
+                    //遍历更新
+                    foreach (string index in DicRowNum.Keys)
+                    {
+                        int rowNum = DicRowNum[index]; //行号
+                        switch (index)
+                        {
+                            case "[整车参数]":
+                                {
+                                    //轮胎周长
+                                    lines[rowNum + 2] = "轮胎周长," + textBox_BikeWheel.Text;
+                                    //转把限速
+                                    lines[rowNum + 4] = "转把限速," + textBox_BikeThroSpeed.Text;
+                                    //推行限速
+                                    lines[rowNum + 5] = "推行限速," + textBox_BikeWalkSpeed.Text;
+                                    //前牙盘
+                                    lines[rowNum + 6] = "前牙盘," + textBox_BikeFrontT.Text;
+                                    //后牙盘
+                                    lines[rowNum + 7] = "后牙盘," + textBox_BikeRealB.Text;
+                                    //前后灯参数
+                                    int LightParams = 0x0000;
+                                    if (comboBox_BikeVolF.SelectedIndex == 0)
+                                        LightParams |= 0x0006;
+                                    else if (comboBox_BikeVolF.SelectedIndex == 1)
+                                        LightParams |= 0x000C;
+                                    else
+                                    {
+                                        MessageBox.Show("请选择前灯电压!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                                        return;
+                                    }
+                                    if (comboBox_BikeVolB.SelectedIndex == 0)
+                                        LightParams |= 0x0600;
+                                    else if (comboBox_BikeVolB.SelectedIndex == 1)
+                                        LightParams |= 0x0C00;
+                                    else
+                                    {
+                                        MessageBox.Show("请选择后灯电压!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                                        return;
+                                    }
+                                    if (comboBox_BikeModeB.SelectedIndex >= 0)
+                                        LightParams |= ((comboBox_BikeModeB.SelectedIndex + 1) << 12);
+                                    else
+                                    {
+                                        MessageBox.Show("请选择后灯模式!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                                        return;
+                                    }
+                                    lines[rowNum + 10] = "前后灯参数," + ((ushort)LightParams).ToString();
+                                    //启动模式
+                                    lines[rowNum + 12] = "启动模式," + (comboBox_BikeStartMode.SelectedIndex + 1).ToString();
+                                    //开机延迟
+                                    int PowerTime = 0;
+                                    PowerTime |= Convert.ToUInt16(textBox_BikeAutoOffTime.Text);
+                                    PowerTime |= (Convert.ToUInt16(textBox_BikePowerOffTime.Text) << 8);
+                                    PowerTime |= (Convert.ToUInt16(textBox_BikePowerOnTime.Text) << 12);
+                                    lines[rowNum + 13] = "开关机参数," + ((ushort)PowerTime).ToString();
+                                    break;
+                                }
+                            case "[控制参数]":
+                                {
+                                    //峰值电流
+                                    lines[rowNum + 4] = "峰值电流," + textBox_MotorMaxCurr.Text;
+                                    //过压保护
+                                    lines[rowNum + 6] = "最高档位过压保护阈值," + textBox_MotorOV.Text;
+                                    //欠压保护
+                                    lines[rowNum + 7] = "最高档位欠压保护阈值," + textBox_MotorUV.Text;
+                                    break;
+                                }
+                            case "[助力参数]":
+                                {
+                                    //限速起始
+                                    lines[rowNum + 92] = "车速限幅启动阈值," + textBox_AssistSpeedBegin.Text;
+                                    //限速结束
+                                    lines[rowNum + 93] = "车速限幅停止阈值," + textBox_AssistSpeedEnd.Text;
+                                    break;
+                                }
+                            case "[调试参数]":
+                                {
+                                    //运行模式
+                                    lines[rowNum + 2] = "整体运行模式," + (comboBox_SysRunMode.SelectedIndex + 4).ToString();
+                                    //旋转方向
+                                    lines[rowNum + 5] = "旋转方向," + comboBox_SysDir.SelectedIndex.ToString();
+                                    //功率限幅
+                                    lines[rowNum + 23] = "功率限幅值," + textBox_SysPowerLimit.Text;
+                                    break;
+                                }
+                            case "[生产信息]":
+                                {
+                                    //生产商
+                                    lines[rowNum + 1] = "生产商," + textBox_ProductMac.Text;
+                                    //生产地
+                                    lines[rowNum + 2] = "生产地," + textBox_ProductAddr.Text;
+                                    //生产日期
+                                    lines[rowNum + 3] = "生产日期," + textBox_ProductDate.Text;
+                                    //产品标识
+                                    lines[rowNum + 4] = "产品标识," + textBox_ProductTag.Text;
+                                    break;
+                                }
+                            default: break;
+
+                        }
+                    }
+
+                } while (false);
+                //参数更新
+                richTextBox_AdvanceParams.Clear();
+                for (int i = 0; i < lines.Length; i++)
+                {
+                    richTextBox_AdvanceParams.AppendText(lines[i] + "\r\n");
+                }
+                richTextBox_AdvanceParams.Text = richTextBox_AdvanceParams.Text.Remove(richTextBox_AdvanceParams.Text.Length - 1);
+            }
+            catch (System.Exception)
+            {
+                MessageBox.Show("参数更新失败", "提示", MessageBoxButtons.OK);
+                return;
+            }
+
+            //确定本地保存路径
+            string Date = DateTime.Now.ToString("yyyy-MM-dd");
+            string LocalPath = localInfo.ConfigFilePath + "\\" + Date;            
+            if (!Directory.Exists(LocalPath))
+            {
+                Directory.CreateDirectory(LocalPath);
+            }
+
+            //确定远程保存路径
+            string ServerPath = "";
+            if (radioButton_HUB.Checked)
+            {
+                if (!myFtp.DirectoryExist("HUB_Control_TEST/cfg", Date))
+                    myFtp.MakeDir("HUB_Control_TEST/cfg" + "/" + Date);
+                ServerPath = "HUB_Control_TEST/cfg" + "/" + Date;
+            }
+            else if (radioButton_MIGIC.Checked)
+            {
+                if (!myFtp.DirectoryExist("MIGIC_TEST/cfg", Date))
+                    myFtp.MakeDir("MIGIC_TEST/cfg" + "/" + Date);
+                ServerPath = "MIGIC_TEST/cfg" + "/" + Date;
+            }      
+            
+            //确定文件名
+            string fileName = "";
+            fileName = textBox_ProductName.Text + "_" + textBox_MarkCode.Text + "-" + textBox_CustomerName.Text + "-" +
+                       textBox_MarkNum.Text + "_" + textBox_OtherInfo.Text + "_" + textBox_SoftwareVer.Text + "_" +
+                       DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss").Replace("/", "-").Replace(":", string.Empty).Replace(" ", "-");
+
+            //保存.src文件
+            System.IO.File.WriteAllText(LocalPath + "\\" + fileName + ".src", richTextBox_AdvanceParams.Text);
+
+            //检查是否存在转换工具
+            if (!Directory.Exists(localInfo.ToolsPath + "\\" + "GenerateParamsFile"))
+            {
+                Directory.CreateDirectory(localInfo.ToolsPath + "\\" + "GenerateParamsFile");
+                myFtp.DownloadFile("Tools/GenerateParamsFile/ConsoleApp2.exe", localInfo.ToolsPath + "\\" + "GenerateParamsFile");
+                myFtp.DownloadFile("Tools/GenerateParamsFile/Newtonsoft.Json.xml", localInfo.ToolsPath + "\\" + "GenerateParamsFile");
+                myFtp.DownloadFile("Tools/GenerateParamsFile/Newtonsoft.Json.dll", localInfo.ToolsPath + "\\" + "GenerateParamsFile");
+            }
+            else
+            {
+                if (!System.IO.File.Exists(localInfo.ToolsPath + "\\" + "GenerateParamsFile" + "\\" + "ConsoleApp2.exe"))
+                    myFtp.DownloadFile("Tools/GenerateParamsFile/ConsoleApp2.exe", localInfo.ToolsPath + "\\" + "GenerateParamsFile");
+                if (!System.IO.File.Exists(localInfo.ToolsPath + "\\" + "GenerateParamsFile" + "\\" + "Newtonsoft.Json.xml"))
+                    myFtp.DownloadFile("Tools/GenerateParamsFile/Newtonsoft.Json.xml", localInfo.ToolsPath + "\\" + "GenerateParamsFile");
+                if (!System.IO.File.Exists(localInfo.ToolsPath + "\\" + "GenerateParamsFile" + "\\" + "Newtonsoft.Json.dll"))
+                    myFtp.DownloadFile("Tools/GenerateParamsFile/Newtonsoft.Json.dll", localInfo.ToolsPath + "\\" + "GenerateParamsFile");
+            }
+
+            //转换.ttcfg文件
+            ProcessStartInfo startInfo = new ProcessStartInfo();
+            startInfo.FileName = localInfo.ToolsPath + "\\" + "GenerateParamsFile" + "\\" + "ConsoleApp2.exe";
+            startInfo.Arguments = LocalPath + "\\" + fileName + ".src";
+            System.Diagnostics.Process.Start(startInfo);
+            Thread.Sleep(1000);
+
+            //保存页面
+            Bitmap bit = new Bitmap(this.Width, this.Height);//实例化一个和窗体一样大的bitmap
+            Graphics g = Graphics.FromImage(bit);
+            g.CopyFromScreen(this.Left, this.Top, 0, 0, new Size(this.Width, this.Height));//保存整个窗体为图片  
+            bit.Save(LocalPath + "\\" + fileName + ".png");
+
+            //生成pdf文件,上传服务器
+
+            //上传            
+            bool result1 = myFtp.UploadFile(LocalPath + "\\" + fileName + ".src", ServerPath);
+            bool result2 = myFtp.UploadFile(LocalPath + "\\" + fileName + ".ttcfg", ServerPath);
+            bool result3 = myFtp.UploadFile(LocalPath + "\\" + fileName + ".png", ServerPath);
+            if (result1 & result2 & result3)
+            {
+                MessageBox.Show("上传成功", "提示", MessageBoxButtons.OK);
+            }
+            else
+            {
+                MessageBox.Show("上传失败", "提示", MessageBoxButtons.OK);
+            }
 
+           
         }
 
     }

+ 941 - 0
Welling_Motor_Debug_Tool/GenerateParams.resx

@@ -117,4 +117,945 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        2My8u7z/zMnN/97b3//e3N7/3t3h/9nX2P+rsJn/5/Hl//r//f/U5c3/i717/3WzYv9Hmy//NJQc/yaM
+        Ev8qjhb/OpIh/0iTLv9RjjT/T3wt/2d/RP9hZU6RKygkA9/b4ceptKX/Z55N/2WTRv91k1T/gJRf/4uW
+        cf+UnID/3evZ//j/+v///////////5e7h/9roFP/dalh/3epYf95qWP/e6dj/3ihYf93mF//iZxv/7fB
+        pNmJi38oAAAAAOTe576ltqH/O50d/y6HB/80dAf/MmAA/ytMAP8kNwL/j5t8//n/+v/2//X//////9jj
+        0/+bs4f/nreM/6C4j/+etoz/n7WN/6S3k/+0wKD/vMS18m91a1sAAAAAAAAAAObh57Kttqv/S7Q3/zim
+        HP9Blh//QoQa/0N0E/8uUQD/anpM//P79f/i8+D/7PTo//j79//Z39H/zdTB/8jQvP/R2cf/197L/8TH
+        sP+NkXn7Njs1sAAAACwAAAAAAAAAAOfk56Gxs7L/U79H/ze4I/9Bqij/Qpsj/0SLH/85cAn/Z4RB//Pz
+        8//j5+T/4ezg/+v36P/m7+H/3+TX/+vz5//CyLf/f39s/05MP/8cGhj3AAAApAAAADYAAAAAAAAAAOnn
+        6Ym1rbb/YMVa/zXLJ/8/vC3/Qa8q/0OhJv8+ihj/WIgx/+jp5f/i3+T/vr6//8vOy//L0Mr/u8C3/6es
+        p/9qZGj/MSMv/xAGE/8IDQj+BAYBlgAAABsAAAAAAAAAAO3u7W+2qrb/c8Fy/zfbMP8/zTP/PsEs/zu1
+        JP82ohj/PpEa/8zYxP/o4+n/vLy8/7SztP+8u73/sa2z/3B5Yv88ZSf/L28m/yeAGP8pYQjqCQoDSAAA
+        AAAAAAAAAAAAAPX19VGvrK/9lqOV/4+3jv+TvJH/k8CQ/5DCiP+Ev3j/bbFa/7XLrf/q5ev/7Ozr/9XV
+        1f+ysrL/tKy5/3KFXf8rsgT/MvIh/zzMFv8ePAV8AQAAAwAAAAAAAAAAAAAAAPn5+Ti1trX6oJug/7Om
+        s/+3rLj/vLK+/8C3wf/EvcX/xcPG/8PExP/Jycn/0dHR/8zMzP+3t7f/tau3/32Tdf803R//ONIX/iNL
+        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
+        ALkMCwAH4uLiz7u7u//EwsT/zszQ/97c3//d3N7/trW3/7i3uf/Av8T/bnBW/6KvkP/4//z/8v/z/9rs
+        1f9pp1T/NY8b/36+bv9Zq0X/LpcW/yuYFf8PiAD/DIYA/xWJAP8ljA7/NZEd/0GPJP9DhyX/R34m/0Vr
+        IP9MXSX/KioVYgAAAADj4+PJurm7/7y/uv+/xLz/ys7H/9rb1v/t8Or/8/Tx//v8+v/k4tz/rrqd//L/
+        9f/v/+///P/9//n8+P/Y59L/hrd1/06YNf9Qmzn/S5k0/02aNf9UnDz/XqFG/2KgSv9inEn/YpZJ/2SQ
+        Sf9ggUL/bX5N/7K5ocpNS0sMAAAAAOXl5cPDvcf/g6p0/0GNHf9LhSb/T3wm/1J0KP9YcDD/ZnZD/3R7
+        V/+hro7/8//1//P/8//y//L/9f/2//////+jw5X/daNe/3+sav9+rGr/fq1q/32raP98qWf/fKZl/3yk
+        Zv99n2b/e5Zi/4WVav+7xa32p66RSgAAAAAAAAAA6OjoucS8x/+CsXb/LpcN/zmLFf85fhD/OG4J/zVf
+        Av8uTgD/JDsA/yo4CP+tvaD/+v/7//T/9P/3//b//P/+/+Tt4f+XsoP/mbWG/5q2iP+atoj/mraI/5u0
+        iP+bs4j/m7GH/5qrhf+tuJn/5ezf/WtxbH8AAAAAAAAAAAAAAADr7OytwrrD/4+2hv83qxz/P6Eh/0GU
+        H/9Chxv/Q3oX/0FtEf8/YQz/J0AA/32GYv/2//n/7P/s/+3z5//z+fH/+/78/8zYwv+xv6H/tsSn/7bE
+        qP+1w6b/tsOo/7rFq//CzLb/wcWv/7zDq/xgaGG6AAAANAAAAAIAAAAAAAAAAO/w757AuMH/l7eS/zq4
+        Jf89riX/QKQk/0GXIP9Bix3/Qn0X/0NxFP8xVwH/c4ZV///////m9Ob/zN7I/+r15//4+/f/8PPt/+vu
+        5//g5Nn/1NjJ/97h1f/k6d3/3ODQ/7y+p/91dVb/Jikc4wAAAI8AAABFAAAABAAAAAAAAAAA8fLxib+3
+        wP+gtJ//P8Qx/zu7Kv9Asiv/Qacn/0KbI/9Djx//RIMc/zlsCf9nhUL/+fj6//Dt8f/a3tr/4/Dj/9zr
+        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
+        AJMAAACWAAAAlwAAAJcAAACWAAAAlAAAAJAAAACNAAAAiwAAAIgAAACIAAAAkgAAAKkAAADEAAAA1QAA
+        ANwAAADbAAAA2AAAANMAAADPAAAAzQAAAMsAAADLAAAAygAAAMgAAAC/AAAAqAAAAH0AAABCAAAAEgAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO/v7wKLi4skDAwMYQYGBpoLCwvFDw8P1BUV
+        FdcdHR3cJCQk3iUlJd8kJCTeISEh3R4eHtwdHR3ZGRkZ0w8PD8sJCQnDBgYGuwMDA7gAAADFAAAA2wAA
+        AOkAAADuAAAA7AQAAOkIBADoDQkA6BIQAOgTFADmExQA5RENAOEMBwDaBgEA0wIAAM4AAADNAAAAzwAA
+        AMkAAACtAAAAbwAAACIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///x/W1tbFhISE+XBw
+        cP2AgID/ioqK/5SUlP+goKD/qKio/6ysrP+vr6//r6+v/66urv+urq7/qqqq/6Kiov+RkZH9Z2dn+TM0
+        M/cWFhb4DAwQ+wsGCvkQDwL2GCcA9h5DAPogYAD9HnsA/hyPAP8bmgD/GpoA/xuQAP4deQD9HlwA+Bo8
+        APAWHwDoDAoA3gAAANcAAADXAAAAywAAAJgAAABRAAAAJAAAABQAAAAKAAAAAgAAAAAAAAAAAAAAAP//
+        /0Hn5+fww8PD/7y8vP/ExMT/yMjI/83Nzf/R0dH/1dXV/9ra2v/f39//5ubm/+vr6//v7+//9fX1//z8
+        /P/T1NP/gIB//0ZGSf83Mzn/MC4i/yo5Cv8mXgH/H5EA/xS9AP8L3gD/BfEA/wP6AP8C/AD/Av0A/wP7
+        AP8E9AD/CuMA/xPCAP8ekwD/GV0A/RUrAPQNCADmAAAA4wAAAOIAAADHAAAAjAAAAEsAAAAfAAAABAAA
+        AAAAAAAAAAAAAP39/V3d3d34urq6/7m5uf+/v7//w8PD/8bGxv/Ly8v/z8/P/9TU1P/b29v/4eHh/+Xl
+        5f/t7e3/9fX1/9jY2P+AgID/QD9D/zYzMv81PBn/LFgD/yKAAP8TtgD/BugA/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A8QD/Oc8x/1+eRv8lTwP9FRoA9AIAAOwAAADuAAAA2gAA
+        AI4AAAA0AAAAAwAAAAAAAAAAAAAAAPv7+3vX19f/tra2/7i4uP/AwMD/xcXF/8jIyP/Nzc3/09PT/9nZ
+        2f/g4OD/5eXl/+rq6v/29vb/7e3s/5SUlf9DQEf/MzAp/zBAC/8mYwD/GpEA/wzLAP8C9wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8a/xv/0f/T/5HwkP8JowH/JWIA/x4l
+        AfoFAQH0AAAA7gAAAMEAAABSAAAAAQAAAAAAAAAA////Avj4+J7Pz8//tbW1/7u7u//ExMT/ysrK/8/P
+        z//V1dX/3d3d/+Tk5P/q6ur/8fHx//n5+f/9/f3/vr69/1RSV/8yLyT/LUUG/yNsAP8ZmAD/CtQA/wD9
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP9r/2v/9//3/0b/
+        R/8A7QD/FKoA/ypnAP8hLAD8BwQA7QAAANkAAACIAAAAGQAAAAAAAAAA////DvPz87rJycn/tra2/7+/
+        v//Hx8f/ysrK/8zMzP/Q0ND/1tbW/9vb2//i4uL/7e3t//b29v/d3t3/eXd7/zQyJv8rQwP/I24A/xmZ
+        AP8LzwD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wf/
+        B/+y/7L/+v/6/2L/Yv8A/wD/BOkA/xieAP8qagD/JDEA+AYDAOIAAAC6AAAAUgAAAAUAAAAA////Hu3t
+        7czExMT/vLy8/7CwsP+AgID/eXl5/3x8fP99fX3/f39//4KCgv+Hh4f/kZGR/5aWlv9ubXH/NjIy/yw6
+        Bv8nZQD/HI0A/xG5AP8D7wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/x//H//N/83//f/9/+j/6P9O/0//AP0A/wvHAP8diwD/LWAA/x8kAPACAADOAAAAiQAA
+        ACEAAAAA/f39Lujo6N/AwMD/vr6+/7Kysv+MjIz/kpKS/56env+np6f/r6+v/7i4uP+/v7//xsbF/6mp
+        qv9VUlj/JygP/yhSAP8gfAD/FqIA/wvPAP8C9gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/zH/Mf/Y/9j/8f/x///////S/9P/Hv4f/wHcAP8VpQD/InkA/y5N
+        AP4TEgDgAAAArAAAAEkAAAAC/v7+P+Xl5fHAwMD/urq6/8jIyP/W1tb/3Nzc/+Li4v/q6ur/9PT0////
+        /////////////9TU2P9gXVj/KzsD/yVnAP8cjQD/FLIA/wnYAP8D8QD/Af0A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/0//T//l/+X/6f/p/+z/7P/7//v/Wfla/wDh
+        AP8RuAD/G4wA/ypnAP8nMwD3BgMAxgAAAG4AAAAP/Pz8Ut/f3/2/v7//v7+//6+vr/+fn5//oqKi/6Wl
+        pf+rq6v/srKy/7y8vP/IyMj/yMjJ/42Ljv8+QCH/J0wA/yF3AP8ZmQD/EbsA/wnXAP8E6AD/A/IA/wH5
+        AP8A/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/4T/hP/p/+n/4P/g/+T/
+        5P/4//n/nPic/wfdBv8LwAD/GZoA/yN1AP8vUAD/FxgA4wAAAI4AAAAk/Pz8Z9vb2/+/v7//xMTE/5OT
+        k/9ra2v/dHR0/3p6ev+CgoL/hYWF/4uLi/+Tk5P/hYWI/01MRv8sOQP/KF0A/yCAAP8XoAD/D7wA/wrS
+        AP8H3wD/BegA/wTvAP8C9QD/AvkA/wH8AP8B/QD/AP0A/wD+AP8A/gD/AP4A/wD9AP8A/AD/M/4y/8L/
+        wv/g/+D/2//b/+D/4P/v//H/2PzX/yXaJP8CvgD/GKEA/x9/AP8sXwD/JzAA+AQCAKgAAAA2+vr6fNnZ
+        2f++vr7/wcHB/8HBwf/Dw8P/ysrK/9LS0v/b29v/5OTk/+zs7P/x8fH/2trd/2hoU/8mPAD/JWMA/x6E
+        AP8WoQD/ELkA/wzLAP8J1wD/B+AA/wTmAP8E6gD/BO4A/wPyAP8D8wD/AvQA/wL2AP8A9QD/APQA/zH4
+        MP+D/IL/uf64/9b/1v/T/9P/2P/Y/93/3f/l/+X/7v/t/2PgYf8BugD/FaMA/x6FAP8oZwD/L0IA/w4N
+        AL4AAABB+Pj4i9bW1v++vr7/wsLC/87Ozv/W1tb/29vb/+Hh4f/q6ur/9PT0////////////7Ovt/19i
+        Qf8iQQD/JGkA/x2GAP8WoAD/E7QA/w7DAP8MzwD/CtgA/wjdAP8H4gD/BeUA/wXnAP8F6gD/AuoA/wDp
+        AP8H7Ab/YPVg/8n9yf/m/+b/2v/a/83/zf/O/87/1f/V/9r/2v/d/93/7P/t/8/4z/81wyr/DZ8A/x2I
+        AP8lagD/MEwA/xkZAM0AAABG+Pj4l9TU1P/AwMD/wsLC/5aWlv+EhIT/jIyM/4+Pj/+UlJT/nJyc/6am
+        pv+xsbP/mJaV/z9GHf8lSgD/JGsA/x2FAP8YnAD/Fa0A/xG7AP8OxQD/DM0A/wrTAP8J1wD/CNoA/wjd
+        AP8E3wD/AeAA/zzpOf+b95r/4//k/+L/4v/T/9P/0f/R/8//z//M/8z/0P/Q/9b/1v/a/9r/4//k/+n/
+        6v9Txkf/CpkA/x2GAP8kbAD/L1EA/yEkANoBAABL9vb2o9LS0v/BwcH/w8PD/5ycnP+QkJD/mZmZ/6Gh
+        of+oqKj/rq6u/7Ozs/+3t7n/kpGL/zZAEf8mTAD/JWoA/x6DAP8ZlgD/FaYA/xKyAP8QvAD/DsQA/wzJ
+        AP8LzQD/CtIA/wnUAP8B1AD/Y+dh/+H93//v/+//4//j/9n/2f/V/9X/1P/U/9L/0v/O/87/zP/M/9L/
+        0v/Y/9j/5f/m/9D2z/82tSf/DpMA/x6CAP8kawD/LlIA/yUqAOADAgBM9fX1rdHR0f+/v7//xcXF/9HR
+        0f/Z2dn/39/f/+jo6P/y8vL//Pz8////////////2dfP/zxHF/8jSQD/JWgA/x9+AP8akQD/F6AA/xSq
+        AP8TswD/ErsA/xDAAP8OxAD/DcgA/wTIAP8Tzgv/vfW8//f/9//h/+H/3//f/93/3f/Z/9n/1v/W/9T/
+        1P/P/8//zf/N/8//z//V/9X/4P/h/9z72/9GtDX/D4sA/yB+AP8maQD/LlIA/yYsAOAEAwBF9PT0tc7O
+        zv+/v7//xcXF/8bGxv/Jycn/z8/P/9fX1//h4eH/6+vr//b29v/7+/v/2tjQ/z5IGf8jRwD/JmQA/yF5
+        AP8diwD/GZcA/w6dAP8GowD/AqsA/wWyAP8DtQD/ALkA/wW8A/8ixxz/2frX//L/8v/j/+P/4v/i/+D/
+        4P/c/9z/1//X/9X/1f/S/9L/zv/O/83/zf/T/9P/2//b/+b/5/9fulP/C4EA/yF5AP8lZQD/LlAA/yct
+        ANoFAwA38/Pzu8vLy//BwcH/wMDA/4eHh/95eXn/goKC/4eHh/+MjIz/kpKS/5mZmf+mpqn/l5aQ/z1E
+        F/8nRgD/KF8A/yBxAP8ZfgD/D4cA/xuZDv9CtDX/TsBD/zG4Jv8yvCn/UstJ/1zRU/9Z0lD/xvLC//H+
+        8f/m/+b/4//j/+D/4P/d/93/2f/Z/9f/1//U/9T/z//P/8z/zP/S/9L/2v/a/+v/7f+t3qj/KIkT/x5u
+        AP8oXwD/ME0A/yUpAM0CAQAg8fHxwMrKyv+/v7//wcHB/6ioqP+mpqb/r6+v/7a2tv+8vLz/wMDA/8LC
+        wv/Jycr/urm2/1BTL/8kPQD/JlYA/yVsB/8kfA7/Yq9T/7/kuf/U8M//xOi7/9v02P/c9dr/6vnn/3jS
+        bv8styb/Pr82/8/yzf/9//7/7v/v/+b/5v/e/97/3P/c/9n/2f/V/9X/1P/U/9f/2P/a/9r/2P/Y/+H+
+        4//b89j/T5U7/xpjAP8qWQD/MkgA/yEiALAFBAAI8PDwwcnJyf+7u7v/xMTE/9DQ0P/X19f/3d3d/+Xl
+        5f/x8fH//////////////////////36AYv8aLgD/MlkQ/3WnYf+Vxof/7Pnr//7//v9qt1//IpYe/8Di
+        uv+x36z/WrpP/zyyLv8AnQD/BKEA/3jPbv/O8Mr/yfHF/9/83v/v/+//6P/q/+P/5f/h/+L/1f7U/6fn
+        of9sw1//Ua8//1GnPv9GlTD/KXQJ/yRgAP8rUwD/MkIA/xkZAIEAAAAA8PDww8jIyP+7u7v/w8PD/8nJ
+        yf/Nzc3/1dXV/93d3f/d3d3/2dnZ/+Xl5f/t7e3/9/f4/6WlkP8cKQD/W3pB/7vcsv/g9t7/+v/8/+j4
+        5v9EnC7/AHgA/0amNP9UsUT/BI8A/wqTAP8TmQH/E5sA/xGcAP8hpA7/IqQQ/1e8S/+i4Jv/j9eF/3/P
+        dP98zXL/UbRD/yKWDP8QhQD/EX4A/xR1AP8ZbQD/JGYA/ypcAv8uTgH/MTkA8w8OAEoAAAAA7u7uwcfH
+        x/+7u7v/wcHB/8bGxv/MzMz/1NTU/+Li4v/ExMT/g4OD/4iIiP+QkJD/oKCj/4iHgP8pLwb/iZ9z//T/
+        9//r/+v/7f/t//T/9f98tWr/H4AF/xmEAP8jjwr/TKg4/120UP9Xskf/I5oL/y2hGP8cmQf/D5EA/w+R
+        AP8TkwD/Do8A/wyLAP8RigD/GYsD/yiNDf8uixL/MIUT/zR+E/81dRP/OGwU/ztfE/8tQgD/JikAyRAP
+        ARcAAAAA7e3tvsfHx/+5ubn/wsHC/8fHx//MzM3/1NTV/9/f3//e3t7/zs7O/87Ozv/Ozs7/zMzN/8fH
+        yP9naEj/f41k//P/9//r/+v/7v/u//P/9P/m8+P/pMmW/06XNP9Fli3/j8WC/3e4Z/9KoDP/KJAP/0Oi
+        L/8qkxL/FYcA/xmJAP8aiQH/I44L/zKSGP8/liX/RZcs/0eULf9Ijyz/SYos/0qDLP9MfCz/T3Qt/0df
+        H/9caDj/OzwocAAAAAAAAAAA7u7uuMbGxv+4uLj/w8LE/8/K0P/Uz9b/29je/+Tg5v/x7vT///7/////
+        ///////////////////My8D/eYNd/+P04//x//P/7v/u//H/8f/8//3//////9Tmzf/D3Lr/p8ya/1Kc
+        O/9Fliz/Rpgu/zyUJv88kyT/P5Um/0SWK/9MmjT/Vp8+/1ygRP9cnkT/W5tD/1yXQv9dlEP/Xo9D/1+J
+        Q/9hg0P/W3I4/3+MYv+7wqvNTExIHQAAAAAAAAAA8fHxssbGxv+9ur//rLio/4Sqcf+Fp3L/i6l3/5Gp
+        e/+ZrIT/orGO/6y3mv+5wKr/yM27/9bZzP/g39b/wcuy/+Hz3//y//P/7//v//L/8v/y//L/9f/2////
+        ///6/fr/ibV2/2GbSP9xp1z/cahb/3GoWv9vqFr/b6lb/3CoW/9wp1v/b6Za/26lV/9volf/b6BX/26d
+        V/9wmVf/cZVX/3KQV/9sgk3/cX5R/83WwfiwtZxiAAAAAAAAAAAAAAAA8vLyq8fHx//Cusb/mLOQ/zaQ
+        Ev8yhQr/N34O/zZ1Cv84awf/N2IE/zVaA/83VAf/PFIP/0NTHP9NVin/b3lR/9Djyv/3//v/8P/w//L/
+        8v/z//P/8//z//X/9v/+//7/zd/G/4Cpa/99qGf/gKxs/4CsbP+ArGz/gK1s/4Csa/+ArGv/gKtr/4Cp
+        a/+BqGv/gaZr/4Kka/+DoGz/g51r/3+TZf+Pm3b/w861/7W+raSFi2QKAAAAAAAAAAAAAAAA9PT0ocrJ
+        yv/AucP/oLia/z6fI/82lBT/Powa/z2FF/89exL/PXEP/zxpC/84Xgb/MlIA/y5HAP8mOgD/ICwA/2t7
+        UP/c8Nr/9v/3//T/8//z//P/9f/1//X/9f/6//z/9Pn0/6a/lv+OrXr/lbSC/5W0gv+VtIL/lbSC/5W0
+        gv+Vs4L/lrKC/5Wwgv+WsIL/lq+C/5etgv+XqoH/lKN9/7G7oP/y+u3/qrOryEtRRSgAAAAAAAAAAAAA
+        AAAAAAAA9/f3k8rKyv++t7//p7qj/0erL/84oRv/QJsh/0CTHv9BiRz/QYEY/0J4Fv9BbxL/P2YO/zxd
+        C/87VQf/MEUA/yo2Av+ptZj/9P/3//D/8P/2//b/9//2//f/9v/2//b/+v77/87bxf+kt5L/qLyY/6m9
+        mf+pvZn/qb2Z/6m9mf+pvZn/qb2Z/6q7mf+qu5n/qrqZ/6q3mP+stZv/ub6m//L57P+vt6/bGRwYWQAA
+        AAgAAAAAAAAAAAAAAAAAAAAA+fn5iMzMzP+7tLz/rrmr/0yyOP83qx3/QKYk/z+fIf9BlB//Qowd/0GE
+        Gf9Cehb/QnIT/z9qEP8+YA3/N1MF/ytCAP+lqpD/+v/7/+P74//u/+7/6e/j/+Ln2//1/fX/+v/7//P6
+        8//K1b//tsKn/7nGq/+8x67/vMiu/7vHrv+7x63/usat/7vGrP+7xa3/v8iy/8nPvv/Bw6//srib/ouY
+        huAUGBSQAAAASQAAABYAAAAAAAAAAAAAAAAAAAAA+/v7es3Ozf+4srn/sbix/1S5RP82tB//P60n/0Co
+        Jf9AniL/QZYg/0KOHv9Bhhv/QnwX/0J0FP9CbBL/PWAM/yxLAP+Won3///////H38f/i+eL/2ezV/+Hr
+        2//5/fj//v////z//v/p7+X/2d/R/93j1v/Q18b/y9LA/8zUwf/N08H/0tjI/9jez//c4dT/297Q/7q7
+        o/90dFD/QkYt9QoNC7AAAACFAAAAVgAAABoAAAAAAAAAAAAAAAAAAAAA+/v7ZdHS0f+1sLb/tbW1/16+
+        U/81vCL/P7Uq/z+vKP9BqSf/QaEk/0KYIf9CkB7/Qokc/0N/Gf9Ddhb/Qm4S/y9WAP+Hmmv//Pv+//v4
+        /P/n6Of/t8W4/8rhyv/g89//5vHi/+Dm2v/v8+z////////////n6eL/5+ff/+/w6v/29/P/8PTr/8/Q
+        wP+wsZr/fX1g/0pKK/86Oiv/FxcY9AAAALIAAACNAAAAWQAAABsAAAAAAAAAAAAAAAAAAAAA+/v7T9bW
+        1vyyr7P/uLC5/23CZf80xib/Pr4u/0C5Lv9Asiz/Qawp/0KlJv9CnCP/Q5Qh/0ONHv9Dgxv/RHsZ/zVl
+        Av96lFn/9PP1//b19//v7u//5+Xn/+Lk4v/i6+H/2enV/83ixv/Z8df/ydi+/6iskv/W48//8v7y/+X5
+        4/+9zLL/en5f/0RDJv8qKhb/HR0U/ycnJ/8yMjX/FhYW9wAAALcAAACKAAAAVQAAABkAAAAAAAAAAAAA
+        AAAAAAAA/v7+PtnZ2e+ura//uK24/3zCeP83zSv/PcYw/0G/Mf9Bui7/QbQt/0KtKv9Cpyf/Q58l/0SW
+        I/9EjyD/RYce/zdxB/9njEH/6ern//b0+P/u7u7/7Ozt//Dv7//39ff/+fj5//X59f/v+PD/3OfY/7O5
+        pv/D0b7/wdPC/52ql/9vcmP/UlFK/0FBPv8xMTL/Jygq/xoaG/8REBL/CAYJ+QAAALUAAAB7AAAARAAA
+        ABAAAAAAAAAAAAAAAAAAAAAA////Lt7e3t6tra3/tKm1/429i/890zT/PM0y/0DHM/9CwTL/Qrwx/0G2
+        Lv9Dryv/Q6kp/0OhJ/9EmCT/RpEj/zl+EP9WiTH/2+DW//j1+v/u7u7/rKys/4iIiP+hoaH/tbW1/8bF
+        x//T0dP/4N7h/97d4P/EwcT/q6ms/5eSm/+BfIb/a2dv/1VRV/87NT3/JBwm/w4FEf8AAAL/Bw0C+wcK
+        AqwAAABcAAAAKAAAAAUAAAAAAAAAAAAAAAAAAAAA////HuPj48ytrq3/r6Sv/5u2m/9E1T//N9Yv/z/Q
+        Nf8/yjP/QMIy/0O9Mf9DuC7/Q7It/0SrKv9EpCj/RZom/z+MGv9KiiX/x9S+//bx+P/r7Ov/zc3N/6Wl
+        pf+VlZX/h4eH/39/f/+BgYH/hISE/4ODgv96env/bm5r/1tlU/9NVEj/QkI+/zMzLv8mKSH/HSwY/xk4
+        Ef8fWQj/M2IL9xEWBogAAAAyAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAA////Denp6biwsLD/p6Gn/6es
+        qP9S1FH/Md8s/zrYM/870zH/Os0v/zrHK/86wij/Orsm/zu0JP89riT/P6Uj/0CbIf8+jxn/rMae//Lt
+        9f/n5+f/7e3t//Hx8f/q6ur/4ODg/9ra2v/T09P/ycnJ/7+/v/+rqq7/iIeC/0hoG/8qdQD/Kn8I/yuO
+        Ev8sqh7/ML8i/zK7Fv8/sAv/NFkNyAYEA0IAAAAQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA////AvDw
+        8J+1tbX/np2e/6imqP+NuY7/fMR6/3/Eff9/xnv/fMd4/3bIcP9xxmj/asNd/2C/UP9VukL/S7I0/0Cn
+        Jv8vlw3/hbZx/+rl7P/k4+T/4eLh/+Pj4//m5ub/6enp/+Li4v/k5OT/7Ozs//Dx8P/h4OT/v7m+/2SH
+        Of8unwD/MsAM/zXcHv818yv/NeEi/zfBDf87fgvtEhEHZQAAABAAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAPb29oC9vb3/m5ub/6Ojo/+tpq3/tKi0/7ett/+7srv/vra//8G8w//FwcX/w8TD/8HH
+        wP+9ybv/s8mu/6PFnP+Ju3r/nMCR/9rZ2v/c2tv/2dnZ/9vb2//f39//4uLi/56env94eHj/h4eH/5CQ
+        kP+Lioz/fnaB/1Z6OP8ysAj/MtAa/zTlKf8z3SX/NMQS/zyYCfodKweHAAAAGgAAAAMAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPn5+WPCwsL6l5eX/5ycnP+hoKH/o6Gj/6akpv+pp6n/raut/7Kv
+        sv+3tLj/u7i8/8G9wv/HwMj/zMXO/9HL0//Uz9b/0tDT/9DQ0P/S0tL/09PT/9XV1f/X19f/29vb/8DA
+        wP+lpaX/nZ2d/5aWlv+Kiov/dWx3/1Z4P/81xxj/Mukm/zThJ/80yxX/PaUK/yZBCJ8CAAEiAAAAAgAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/kTNzc3wmpqa/52dnf+kpKT/pqam/6mp
+        qf+srKz/rKys/6ysrP+tra3/ra2t/7CwsP+wsbD/s7Oz/7i3uP+9vL3/wL/A/8PDw//Hx8f/ysrK/83N
+        zf/Pz8//0tLS/9nZ2f/e3t7/3t7e/+Dg4P/Z2dr/v7XB/3ibZv8z1R//MOMi/zXLFv87ogr6JkIImwUC
+        AiQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/ifs7Ozc0tLS+tTU
+        1Ofb29vc3t7e1ePj49Hk5OTQ4uLi0t/f39bc3Nze2NjY59XV1fPPz8/8ysrK/8TExP/Cw8L/v7+//7y8
+        vP+8vLz/vr6+/8DAwP/ExMT/yMjI/8zMzP/Ozs7/0dHR/9bW1v/U1dX/wLbC/3ihav8wyhj/M8sP/zud
+        CvYiOwaHAgABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
+        /wn///9K/f39T/v7+zn9/f0v/v7+KP///yX///8i////Jf///yn///8x/Pz8Ovv7+0b7+/tY+Pj4bPT0
+        9Ijv7++j6urqwOXl5dve3t7p2NjY9tHR0f/Ly8v/yMjI/8jIyP/IyMj/ycnJ/83Nzf/Ozs7/v7XC/3Of
+        Xv8xtQb/No4I6R4xBm8BAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD9/f0G////Ef///yL+/v46/Pz8WPn5+Xv19fWh7+/vwejo6Nzh4eH33Nzc/9jY
+        2P/Z19r/zcjO/2qfSP8ubwDBHigIQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Ff7+
+        /ir9/f1F/Pz8aPn6+Y37+vuyztPCwFWBIX8lQQEXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAA/////gAAAAAf///+AAAAAA////gAAAAAA/
+        //+AAAAAAAP//4AAAAAAA///gAAAAAAD//+AAAAAAAP//wAAAAAAA///AAAAAAAB//8AAAAAAAH//wAA
+        AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA
+        //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAf//AAAAAAAB//8AAAAAAAH//wAA
+        AAAAA///AAAAAAAD//8AAAAAAAf//wAAAAAAB///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP
+        //8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAH///AAAAAAAf//8AAAAAAD///4AA
+        AAAAf///gAAAAAD///+AAAAAAf///4AAAAAH////gAAAAA///////4AAP////////gB/////KAAAAEAA
+        AACAAAAAAQAgAAAAAAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
+        AAQAAAAIAAAADAAAAA4AAAARAAAAFAAAABcAAAAZAAAAGwAAAB4AAAAeAAAAHgAAAB4AAAAeAAAAHQAA
+        ABoAAAAXAAAAFgAAABQAAAARAAAADAAAAAoAAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAQAAAAPAAAAHAAA
+        ACgAAAAzAAAAOwAAADsAAAA7AAAAPAAAADgAAAAuAAAAIgAAABYAAAAKAAAAAQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAABgAAABIAAAAhAAAALgAAADYAAAA5AAAAPgAAAEEAAABEAAAASAAAAEsAAABOAAAATwAA
+        AE8AAABPAAAATwAAAE0AAABJAAAARwAAAEMAAABBAAAAPQAAADgAAAAyAAAAKwAAACQAAAAhAAAAJgAA
+        ADYAAABMAAAAYQAAAHMAAACCAAAAjgAAAJYAAACYAAAAmAAAAJgAAACTAAAAiQAAAHoAAABnAAAAUAAA
+        ADYAAAAbAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABAAAAApAAAAQwAAAFoAAABjAAAAZgAAAGsAAABuAAAAcQAA
+        AHUAAAB3AAAAegAAAHwAAAB8AAAAfAAAAHwAAAB6AAAAdwAAAHUAAAByAAAAbwAAAGsAAABlAAAAXwAA
+        AFsAAABfAAAAbgAAAIUAAACdAAAArgAAALoAAADCAAAAxwAAAMkAAADJAAAAyQAAAMkAAADHAAAAxwAA
+        AMMAAAC9AAAAswAAAKQAAACNAAAAbQAAAEkAAAAkAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAANAAAAF0AAAB/AAAAigAA
+        AIwAAACQAAAAkgAAAJUAAACWAAAAlwAAAJkAAACaAAAAmgAAAJoAAACZAAAAmAAAAJYAAACVAAAAkwAA
+        AJMAAACSAAAAkAAAAJIAAACbAAAArAAAAMAAAADQAAAA2wAAAN8AAADfAAAA2wAAANgAAADUAAAA0AAA
+        AM0AAADLAAAAyQAAAMkAAADJAAAAyQAAAMsAAADKAAAAxAAAALYAAACeAAAAdwAAAEgAAAAfAAAABAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABubm4HAAAANgAA
+        AGsAAACaAQEBuwICAsYEBATJCQkJzw0NDdMQEBDVEhIS1hISEtcRERHWDw8P1AwMDNMMDAzSDAwMzQoK
+        CsgFBQXBAQEBugAAALQAAACtAAAAqAAAAK0AAAC+AAAA0QAAAN8AAADoAAAA6wAAAOkAAADmAAAA4wEA
+        AOIGAADiCQMA4gwHAOINCADhDQgA3wwGAN0JAQDXAwAA0QAAAMwAAADJAAAAyAAAAMoAAADMAAAAygAA
+        ALsAAACcAAAAbAAAADAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAD5+fkvrq6utlhYWNc5OTnmQEBA8ktLS/lTU1P8XFxc/mZmZv9wcHD/eXl5/319ff99fX3/fn5+/3t7
+        e/93d3f/dXV1/3R0dP9wcHD9ZGRk+lZWVvZJSUnyNzc37SQkJOkRERHoBgYG6wECAvAAAQHyAAAB8AEA
+        Ae4IBQDuEBIA8hghAPUeMgD5IUIA+iJPAPsjWQD8I14A/CJdAPwjWQD7IUwA+B88APUbKwDvExoA5QwL
+        ANwFAQDVAAAA0AAAANAAAADRAAAAzQAAALkAAACHAAAASAAAAB0AAAALAAAABwAAAAUAAAADAAAAAQAA
+        AAAAAAAAAAAAAAAAAAAAAAAA/Pz8bN7e3v+1tbX/o6Oj/6qqqv+ysrL/t7e3/7y8vP/CwsL/x8fH/8vL
+        y//Ozs7/0tLS/9XV1f/Y2Nj/29vb/9zc3P/d3d3/3t7e/97e3v/b29v/x8fH/5mZmf9gYGD/Njc2/yUl
+        Jf8dHB//GBUY/hkXCv0gLQH8JEwA/CRnAP4hggD/HJoA/xevAP8TvwD/EMwA/w/RAP8O0wD/D88A/xLE
+        AP8WsQD/G5oA/yB+AP4iYQD8I0MA+RwlAO8KCQDhAAAA2AAAANgAAADaAAAA0AAAAK8AAAB+AAAATwAA
+        ADIAAAAgAAAAEgAAAAQAAAAAAAAAAAAAAAAAAAAA////Bfv7+43f39//wcHB/7i4uP+9vb3/wMDA/8TE
+        xP/Hx8f/ysrK/83Nzf/Q0ND/09PT/9fX1//b29v/4ODg/+Tk5P/n5+f/6+vr/+/v7//29vb/7u7u/8HB
+        wf99fXz/TU5N/zw7P/86Nzz/NTMo/y47Df8rUgL/JXIA/x2WAP8TtwD/CtUA/wTsAP8C+AD/AP4A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AfwA/wPyAP8K3QD/Er4A/xyZAP8hcwD/H00A/hslAPQKBgDmAAAA4QAA
+        AOMAAADfAAAAywAAAKEAAABsAAAAPQAAAB8AAAAGAAAAAAAAAAAAAAAAAAAAAP///xD39/er19fX/7u7
+        u/+1tbX/u7u7/76+vv/BwcH/w8PD/8fHx//Ly8v/zs7O/9HR0f/V1dX/29vb/9/f3//j4+P/5ubm/+vr
+        6//x8fH/7e3t/8HBwf97e3v/RkZH/zc2Ov84NTP/NToY/yxNAv8maQD/HogA/xSuAP8I2gD/AvcA/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wH9AP8B5wD/EcIL/0ml
+        NP8/dhr/JEEA/RYXAPMDAQDpAAAA6AAAAOgAAADZAAAAqQAAAGIAAAArAAAABwAAAAAAAAAAAAAAAAAA
+        AAD///8a9fX1yNPT0/+4uLj/tra2/7y8vP/AwMD/w8PD/8bGxv/Jycn/zc3N/9DQ0P/V1dX/2tra/+Dg
+        4P/j4+P/5ubm/+rq6v/w8PD/9PT0/9PT0/+Hh4b/TEtM/zg3O/82NSr/MT4L/yhYAP8geAD/GZcA/w/B
+        AP8E7QD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/A/8D/4T/hf/g+t7/RbY8/w93AP8tVgD/HCMA+AQBAO8AAADuAAAA7AAAANEAAACLAAAAOQAA
+        AAQAAAAAAAAAAAAAAAAAAAAA////J/Hx8ebOzs7/tra2/7e3t/+9vb3/wcHB/8XFxf/IyMj/y8vL/87O
+        zv/U1NT/2dnZ/93d3f/j4+P/5+fn/+rq6v/v7+//9/f3/+vr6v+kpKT/VFNW/zk2PP81NCP/L0IE/ydf
+        AP8ffgD/F58A/wvOAP8B9wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/zf/N///////y//K/x7sH/8EtAD/IIEA/yxbAP8hJwH+BwQB9QAA
+        AOoAAADgAAAArgAAAFQAAAAJAAAAAAAAAAAAAAAAAAAAAP///0Lr6+v+yMjI/7a2tv+5ubn/vr6+/8HB
+        wf/Hx8f/ysrK/83Nzf/S0tL/2NjY/93d3f/j4+P/5+fn/+zs7P/y8vL/+fn5//b29v/CwsH/bGxu/zo3
+        O/80NR//LUYD/yVjAP8egwD/FqMA/wrUAP8B+gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wT/BP+F/4X//////43/jf8A/wD/AfIA/xC6
+        AP8egwD/LV0A/yQwAPsJCADtAAAA4gAAAMsAAACDAAAAJgAAAAAAAAAAAAAAAAAAAAD9/f1l5ubm/8PD
+        w/+3t7f/vLy8/8TExP/MzMz/0NDQ/9PT0//X19f/3Nzc/+Hh4f/m5ub/6+vr//Hx8f/5+fn/////////
+        ///i4uL/j4+Q/0dFSf8yMhr/LEUB/yVmAP8ehQD/FqQA/wvPAP8B/AD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8b/xv/zf/N////
+        //+a/5r/B/8H/wD/AP8D7wD/ErAA/x+AAP8sYQD/JzQA+goIAOUAAADWAAAArwAAAFgAAAARAAAAAAAA
+        AAD///8E/Pz8f+Hh4f/BwcH/uLi4/7+/v/+0tLT/paWl/6Ojo/+hoaH/oKCg/6CgoP+ioqL/o6Oj/6Wl
+        pf+srKz/tLS0/7+/v/+/v7//lJSV/1VTV/80MiT/LkEC/yhfAP8gfgD/GJwA/w/AAP8D7gD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/QP9A/+3/7f/4//j/+P/4/4D/gP8G/wb/AP8A/wrWAP8XnQD/IXoA/y9aAP8kLAD1BQMA2QAA
+        AMMAAACFAAAAMgAAAAIAAAAA/f39Cfn5+Zjb29v/vr6+/7m5uf/Dw8P/iYmJ/1xcXP9gYGD/ZWVl/2dn
+        Z/9qamr/bW1t/3BwcP90dHT/eHh4/3p6ev99fX3/a2tr/0JCRf8kIiL/KjMH/ytXAP8jcwD/GpEA/xOv
+        AP8K1QD/AfgA/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/1z/XP/v/+//6//r//n/+f/6//r/bf9t/wD/AP8C6QD/ErYA/xuP
+        AP8lbwD/L08A/xwdAOoAAADKAAAApQAAAFgAAAAPAAAAAPv7+w/39/ex19fX/729vf+6urr/wsLC/6en
+        p/+ampr/paWl/62trf+2trb/vr6+/8TExP/Nzc3/1NTU/9nZ2f/e3t7/1tbW/5ycnf9UUlb/LSwW/ytG
+        AP8lZwD/HoIA/xefAP8PvgD/B+EA/wH4AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wH/Af90/3T/8f/x/+f/5//q/+r//v/+/9z/
+        3f8p/yr/AO8A/wzIAP8WoQD/HoAA/ypjAP8tPgD7Dw4A2gAAALcAAAB7AAAAJgAAAAD///8V9PT0ytXV
+        1f+9vb3/u7u7/8HBwf/Kysr/0tLS/9bW1v/Z2dn/39/f/+Xl5f/s7Oz/8vLy//r6+v////////////X1
+        9f+pqa3/WFZR/zA5Bv8pVQD/InUA/xyPAP8VqwD/DckA/wbjAP8D8wD/Af0A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8F/wX/l/+X/+//
+        7//k/+T/6P/o/+3/7f/+//7/Yvti/wDtAP8I0gD/E7AA/xuPAP8jcQD/L1UA/yMpAPAEAgDHAAAAkwAA
+        AEAAAAAF/v7+IPHx8eDS0tL/vLy8/729vf/CwsL/xsbG/8nJyf/MzMz/z8/P/9TU1P/Z2dn/4ODg/+jo
+        6P/x8fH/9/f3//n5+f/a2tv/h4aI/z9AJP8qQwD/J2MA/x+AAP8ZmQD/E7QA/wzNAP8G4AD/A+0A/wL1
+        AP8B+wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/GP8Y/8L/wv/l/+X/4P/g/+T/5P/o/+j/+//7/5j5l/8M6Az/BNMA/xK5AP8ZmgD/H30A/ylh
+        AP8vQwD+EhIA3QAAAKgAAABbAAAAEf39/S3s7Ozyz8/P/7u7u//Dw8P/tra2/4GBgf93d3f/e3t7/3x8
+        fP9/f3//g4OD/4aGhv+Li4v/k5OT/5qamv+cnJ3/f3+B/05NRv8wOQT/KlIA/yRtAP8diAD/GKAA/xK4
+        AP8MzAD/CNwA/wbmAP8E7QD/A/MA/wL3AP8A/AD/AP4A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/1L/Uv/c/9z/3f/d/93/3f/h/+H/4//j/+//7//c/t3/OOc0/wDR
+        AP8QvQD/F6IA/x2HAP8kawD/L1QA/yQqAPIFAwC9AAAAcQAAACD///9A6+vr+czMzP+8vLz/xsbG/7Gx
+        sf90dHT/bW1t/3V1df95eXn/f39//4WFhf+Ghob/iYmJ/46Ojv+RkZH/iIiI/2BgY/81Nh//LD8A/ylb
+        AP8jcwD/HI0A/xakAP8QuAD/DMkA/wnXAP8H3wD/BeYA/wXrAP8D8AD/AvMA/wL2AP8B+gD/AfsA/wH8
+        AP8A/AD/AP0A/wD9AP8A/QD/Af4A/wH+AP8A/AD/APwA/xz9G/+k/6T/3v/e/9j/2P/b/9v/3v/e/+L/
+        4v/l/+X/9//3/2vpaP8AzAD/DrwA/xalAP8bjQD/InMA/ypbAP8vPQD/Dg0A0AAAAIAAAAAr/Pz8Venp
+        6f/Kysr/vLy8/8LCwv/Dw8P/wMDA/8bGxv/Kysr/z8/P/9fX1//d3d3/4+Pj/+vr6//w8PD/8/Pz/+bm
+        5/+gn5//PkIZ/ylEAP8nXwD/IXcA/xqPAP8WpAD/EbYA/w3FAP8L0QD/CdkA/wfgAP8F5QD/BOgA/wTs
+        AP8E7wD/A/EA/wPyAP8D9AD/AvUA/wH2AP8B9wD/AvcA/wD2AP8A9gD/Nvk1/3X8dP+n/ab/0//T/9P/
+        0//U/9T/2P/Y/9v/2//f/9//4f/h//P/8/+j8aH/C8gK/wu5AP8WpwD/G5AA/yF4AP8nYAD/MkkA/xsb
+        AOIBAACMAAAANPz8/Gfm5ub/ycnJ/729vf/BwcH/x8fH/9HR0f/W1tb/2dnZ/97e3v/k5OT/6+vr//Ly
+        8v/7+/v////////////39vn/oJ+Y/zU8CP8oSgD/JmMA/yB7AP8bkQD/FaMA/xO0AP8PwAD/DMoA/wvT
+        AP8K2gD/B94A/wbiAP8G5QD/BegA/wTrAP8E7AD/BO0A/wTuAP8E7gD/Au8A/wDuAP8O7w3/afhn/8j+
+        yP/i/+L/3f/d/87/zv/O/87/0f/R/9X/1f/Z/9n/3f/d/9//3//m/+f/6P3o/2LaW/8KtQD/FaUA/xqS
+        AP8gewD/JmQA/zBPAP8mKwDvBAMAlgAAADj8/Pxz5OTk/8jIyP++vr7/w8PD/8bGxv/IyMj/y8vL/8/P
+        z//S0tL/19fX/97e3v/l5eX/7u7u//j4+P//////8fH0/4eGdv8qOAL/KVAA/yZmAP8gewD/G5AA/xeg
+        AP8TrwD/EbwA/w7FAP8MzAD/CtMA/wrYAP8J2wD/CN4A/wbhAP8G4gD/BuQA/wXmAP8E5wD/AOYA/wDm
+        AP8n7ST/nPqc/+D/4f/g/+D/1P/U/9D/0P/O/87/zP/M/87/zv/S/9L/1v/W/9r/2v/d/93/4P/g//D/
+        8v/R99D/LLse/xCgAP8bkgD/IH0A/yVnAP8tUQD/LjYA+gkHAJ4AAAA4/Pz8geTk5P/Gxsb/v7+//8nJ
+        yf+ioqL/dXV1/3d3d/97e3v/fX19/39/f/+Dg4P/iIiI/4+Pj/+Wlpb/nJyc/5OTlv9VVTz/KjsA/ylT
+        AP8lZwD/IHsA/xuOAP8YnQD/FaoA/xO1AP8QvgD/DcQA/wzLAP8L0AD/CtMA/wrWAP8I2QD/CNsA/wjd
+        AP8H3gD/AN0A/xvjF/908XH/x/zH/+f/6P/e/97/1P/U/9T/1P/T/9P/0f/R/87/zv/M/8z/z//P/9T/
+        1P/Y/9j/2//b/97/3v/p/+r/zfXL/y+3Hv8RnAD/G44A/yB8AP8laAD/K1MA/zI9AP8PDgCpAAAAOfr6
+        +o/h4eH/xcXF/7+/v//Jycn/pqam/4KCgv+Hh4f/jY2N/5KSkv+YmJj/nJyc/6CgoP+jo6P/pKSk/6Wl
+        pf+SkpP/Skws/yo+AP8pVAD/JWcA/yB5AP8cjAD/GZkA/xalAP8TrwD/ErcA/xC+AP8OxAD/DMgA/wzL
+        AP8KzgD/CtIA/wrVAP8J1gD/AdUA/zziOP/E+cP/7P/r/+f/5//e/97/2//b/9n/2f/W/9b/0//T/9L/
+        0v/R/9H/zf/N/8z/zP/Q/9D/1f/V/9n/2f/c/9z/7P/t/6Dkm/8Wpwb/FpkA/xyLAP8hegD/JWgA/ypT
+        AP8yQAD/FRQAsgAAADj6+vqa4ODg/8TExP/AwMD/xcXF/8jIyP/Ozs7/0tLS/9bW1v/c3Nz/5OTk/+vr
+        6//y8vL/+Pj4//7+/v//////7+7u/2NlQv8lOgD/KVMA/yZlAP8heAD/HYgA/xqVAP8XoAD/FKkA/xOx
+        AP8StwD/EL0A/w/BAP8OxAD/DcgA/wvLAP8LzQD/Cc0A/wbPAf+a75j/9f/2/+T/5P/g/+D/3v/e/93/
+        3f/a/9r/1//X/9X/1f/U/9T/0f/R/87/zv/N/83/zv/O/9P/0//Y/9j/2//b/+j/6f+16q//H6QJ/xaT
+        AP8dhgD/IncA/yVnAP8qUwD/MUEA/xYWALEAAAAy+fn5pd7e3v/ExMT/wMDA/8XFxf/Ly8v/0dHR/9XV
+        1f/a2tr/39/f/+fn5//u7u7/9fX1//v7+/////////////b19P9iZD7/JToA/ylSAP8lYwD/InQA/x2E
+        AP8bkAD/GZsA/xajAP8VqgD/FLEA/xO3AP8SuwD/EL4A/w/BAP8PxAD/DcYA/wbGAP8bzRD/x/fF/+//
+        7//l/+X/4v/i/+D/4P/e/97/3f/d/9r/2v/X/9f/1f/V/9P/0//Q/9D/zf/N/83/zf/R/9H/1f/V/9n/
+        2f/k/+T/zfXL/y+lGv8VjQD/HoMA/yN0AP8nZAD/KlIA/zFBAP8ZGQCuAQAAKPn5+azc3Nz/wsLC/8DA
+        wP/FxcX/yMjI/8rKyv/Nzc3/0tLS/9fX1//f39//5ubm/+3t7f/29vb//v7+///////+/f3/a21J/yU4
+        AP8qUAD/J2AA/yNxAP8ffwD/HIoA/xuVAP8ZnQD/E6IA/w2mAP8JqwD/DLEA/w+2AP8MuAD/BLgA/wC6
+        AP8AugD/GMMQ/9X40//w//H/5v/m/+T/5P/i/+L/4f/h/97/3v/b/9v/2P/Y/9X/1f/V/9X/0v/S/8//
+        z//M/8z/z//P/9T/1P/Y/9j/4f/h/9n62P9DqTP/D4QA/yB/AP8jcQD/JmEA/ypQAP8yQAD/GRgAowEA
+        ABv4+Piy2tra/8DAwP/AwMD/ycnJ/5ycnP94eHj/fX19/4CAgP+Dg4P/iIiI/4yMjP+RkZH/mJiY/6Cg
+        oP+oqKn/rKyt/1pbO/8pOgD/Kk4A/yhdAP8lbQD/IXoA/x6FAP8XjAD/C40A/w2XAP8cpQv/Iq4V/xas
+        CP8IqwD/DrAC/ya8Gv9Uz0v/XNRV/0nOQv/Y+df/+f/5/+j/6P/m/+b/5P/k/+H/4f/f/9//3P/c/9r/
+        2v/X/9f/1v/W/9P/0//Q/9D/zf/N/87/zv/T/9P/1//W/9z/3P/k/+X/iMt+/xiCAP8feAD/JWwA/yhd
+        AP8tTgD/Mj8A/xYVAJEAAAAM9/f3udnZ2f/AwMD/wMDA/8jIyP+dnZ3/fHx8/4WFhf+Kior/jo6O/5GR
+        kf+UlJT/l5eX/5eXl/+YmJj/mZmZ/5qanP9gYEb/KzcA/ytKAP8pWQD/I2UA/xxvAP8WdwD/HocJ/1Gt
+        Qv+W1oz/xOu//87xyv+86bb/pOKd/7jps//a9Nf/ld6M/1/NUv9hz1X/Ys9W/7vttv/x//L/5//n/+X/
+        5f/i/+L/4P/g/93/3f/b/9v/2P/Y/9b/1v/T/9P/0f/R/83/zf/N/83/0//S/9r/2//g/+H/7f/w/+r5
+        6v9aokb/F2sA/yZmAP8pWAD/LkkA/zM6AP8REABuAAAAAPb29rvY2Nj/vr6+/76+vv/ExMT/x8fH/8zM
+        zP/Q0ND/1dXV/9vb2//h4eH/6Ojo/+zs7P/x8fH/9fX1//X19f/39/f/oqGO/yozBP8rRQD/JlIA/yxl
+        DP9Ehyn/Po0m/5rOj//q++r//v///8Dlu/+Iynv/1e3Q///////T79D/5fTj/7jnsv8erhP/DqgD/wOn
+        AP9rzWL//f/+//L/8//u//D/6f/p/+L/4v/e/97/3P/c/9r/2v/X/9f/1P/U/9P/0//U/9X/1v/Y/9H+
+        0f/G98T/w/HB/8jxxP+z3Kv/TJI0/xxoAP8oYQD/KlQA/y9GAP8xNgD3CwoARAAAAAD19fW92NjY/76+
+        vv+9vb3/w8PD/8nJyf/Pz8//09PT/9fX1//d3d3/4+Pj/+zs7P/09PT/+/v7/////////////////8/O
+        w/83PQr/JTsA/ydNA/93oGL/m8qO/6XPmv/y/vP//v///8/sy/8wmR//AIUA/1OxRv/w+e7/dsZu/yel
+        F/9Ntzv/G6UK/w6hAP8LogD/LbEc/6zlpv/J8MX/xPDA/9X41P/p/+r/6P/o/+T/5v/j/+T/3//h/97/
+        4P/b/9v/vvS7/4DSdf9Krzf/M5wa/zCVGP8yjhf/J34M/yFvAP8mZwD/KFsA/ytPAP8xQwD/Ky0A0wYF
+        ACEAAAAA9fX1v9fX1/+9vb3/vb29/8PDw//Hx8f/ysrK/87Ozv/U1NT/2dnZ/97e3v/l5eX/6+vr//T0
+        9P/6+vr//f39///////09PH/VFYs/x4uAP9FYiT/ncGO/63So//k9uL/8f/y//T/9f/C5Lz/KI0O/w2C
+        AP8ckA//gcVy/163T/8AjAD/CZQA/w+YAP8RmgD/Fp4A/xKdAP8XoAb/I6UN/x6jCv80rSL/l9uP/8v1
+        yP+v6an/mt6S/53glf+W3I3/aMJa/zGiGv8TjAD/EoYA/xaDAP8YfAD/G3YA/x9wAP8laQD/J2AA/ylW
+        AP8sSwD/NEAA/yIiAKADAwAMAAAAAPX19b3W1tb/vLy8/729vf/CwsL/xcXF/8nJyf/Nzc3/09PT/9nZ
+        2f/j4+P/w8PD/5GRkf+dnZ3/pqam/6+vr/+8vL3/y8vM/2loTf8cJgD/Z4FI/9/73//n/ef/6//r/+n/
+        6f/y//L/4vXf/0GTKP8YgAD/I4wI/xmLAP8mlQ3/N6Ei/yaaFv8uoCH/K6Ab/xqZAf8WmAD/E5cA/xOY
+        AP8UmAD/DpYA/xubCv8qohT/HZoE/xaUAP8XkgD/FJAA/xCKAP8bjAL/JI0J/yeKC/8ohgv/KoAL/y15
+        C/8ucwv/L2oL/zJiDP8zWAr/LkUC/zE4AP8VFQBhAAAAAAAAAAD09PS71dXV/7y8vP+8vLz/wcHB/8TE
+        xP/IyMj/zc3N/9PT0//Z2dn/5OTk/8HBwf+Dg4P/hYWF/4aGhv+Ghob/hoaG/4mJi/9tbGH/KCsA/3yR
+        YP/x//P/6v/q/+n/6f/s/+z/8f/y/+r66f+FuXP/P48k/y6IEv8qjBD/NJMb/2myV/97v2v/kcyE/3e+
+        Zv8klQv/PaUn/0+vO/8jmAr/GJEA/xuSAP8XkAD/E40A/xSNAP8WjQD/G40C/ySOCv8wkhX/NpQd/ziQ
+        Hv84jB3/Oogd/zyDHf89fR3/Pncd/z9vHP9Gah//P1gW/y08AP8qLQPPGBgFJwAAAAAAAAAA8/PzuNXV
+        1f+8vLz/u7u7/8HBwf/ExMT/x8jH/8vMy//R0tH/2NjX/9/f3//k5OT/5OTk/+bm5v/n5+f/6Ojo/+bm
+        5v/j4+T/1NPR/2BgPf9hcED/6//s/+z/7f/s/+z/7//u/+//8P/1//b/+P/4/8rgwv95sGX/PIwg/0aW
+        Lv+RxYT/hL92/0qeNP85lh//IYsG/zqaJf9HojT/HosG/xaHAP8YiAD/GogA/x6JA/8ljQv/MZIX/z+W
+        Jf9HmS//SZgx/0mVMP9Kki//TI8v/0yML/9Nhy//ToEv/098L/9RdjD/UWwt/0RWHP9veU3/SEk6eQAA
+        AAAAAAAAAAAAAPT09LDV1dX/urq6/7q6uv/CwcL/ysfL/8/L0f/T0NT/2Nba/97c4P/l4+f/7ezv//X0
+        9v/5+Pr//fz9//////////////////////+9u63/T1Yp/9HmzP/z//b/7P/s/+7/7v/x//H/8f/x//f/
+        +P//////7vfs/63Pof/A27f/zOPF/22rWf9BlCn/QpYq/0GWKP8zjxz/K4wU/zSQGv83khz/OZIf/z+V
+        Jv9ImTD/UZ46/1igQf9an0L/WZ1B/1ibQP9ZmED/WpVA/1qTQP9bj0D/XItA/1yFQP9egUD/YHo//1dp
+        M/+NmXP/zNK700RFPysAAAAAAAAAAAAAAAD29vap1NTU/7q6uv+7u7z/vb69/7e+s/+4wLP/vMO3/8DI
+        vP/HzML/z9LJ/9fa1P/h4t//6uvq//Py9P/5+Pv///7/////////////7+7r/5qggv+/07X/9v/5/+3/
+        7f/v/+//8f/x//L/8v/z//L/9P/0//v//P//////8/nx/4a1c/9Vlzv/aKRS/2qlVP9pplP/aKZS/2el
+        Uf9mpVD/ZaZQ/2elUf9oplL/aaVT/2ikU/9no1D/Z6JP/2egT/9nn0//Z5xP/2iZT/9plk//apNP/2qP
+        T/9sik//bYdP/2d4Rf+AjGP/5O3g/7S5oXQAAAAAAAAAAAAAAAAAAAAA+Pj4otfX1/+6urr/wbzE/665
+        q/9fnUb/S5Ep/1OPMf9TijD/VoYx/1iCMf9cgDX/X344/2J8PP9pf0X/dodU/4WSaP+XoH7/q7CW/8LD
+        sv/K0Lz/1OvP/+7/8P/u/+7/7//v//H/8f/z//P/8//z//T/9P/0//T/+//8//j++P+oyZv/bqBX/3Ol
+        XP90p1//dahf/3apYP91qWD/dalh/3WqYf91qWD/dahf/3SnX/90p1//daZe/3WlX/92pF//dqJf/3ag
+        X/92nV//eJtf/3iZX/95lV//epBe/3aHWf9yf1T/uMKp/9ni0Ll+g1wXAAAAAAAAAAAAAAAAAAAAAPj4
+        +JvX19f/ubq5/8G7xP+tuqv/TJwx/y6LB/84iBL/N4IP/zd7Df84cwv/OWwH/zZlBP80XQH/MVUA/zBO
+        AP8vSAD/LkID/y4+B/8zPgv/QkkZ/5qshf/x//X/8P/x//D/8P/x//H/8//z//P/8//0//T/9f/1//T/
+        9P/9//7/6fLn/5e5hv98pmX/g6xu/4Ktbv+CrW7/gq1u/4Ktbv+CrW7/gq1u/4Ktbv+DrW7/g6xu/4Kr
+        bv+DqW7/g6lu/4Onbv+Dpm7/haNu/4Whbv+Gn27/hZtt/4KSaP+Qmnf/yNO5/83YyuV+hW1CAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD5+fmQ29vb/7u7u//AusH/s7yw/1inQf8zmBP/PpQc/z+NG/8/iBr/P4IY/0B6
+        FP9BcxP/QG4R/z5nDf87Xgr/OFYH/zVPA/8ySAD/LkAA/yQwAP9DThr/s8um/+7/7//y//L/8//y//L/
+        8v/0//T/9P/0//X/9f/1//X/9v/3//z//v+/07T/jax4/5Gwff+Ssn//krN//5Kzf/+Ss3//krN//5Kz
+        f/+Ss3//krJ//5Oxf/+TsH//k69//5Ovf/+TrX//lKx//5Srf/+VqH//lKV+/5Ohff+3wqn/8Pns/+Pq
+        4vJUXFNxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/v7gd3d3f+6u7r/vLe9/7a8tf9erUz/NKEX/z6d
+        IP8/lx//QJEd/0CLHP9AhBn/QH0W/0J2Ff9CcBP/QGoQ/z1iDf87Wwr/OlUH/zhPBf81SAH/JDAA/09a
+        Lf/K38H/8P/z//L/8v/0//T/8//z//b/9v/3//f/9v/2//X/9f/8//3/2eXT/6K4kP+fto3/orqR/6K6
+        kf+iupH/orqR/6K6kf+iupH/orqR/6K5kf+iuZH/oriR/6K3kf+jt5H/o7aR/6S0kf+kspH/pbGR/6Os
+        jf+9xK7//v/9/+Lp4fVKUkiLAAAAHQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAP39/XPe3t7/urq6/7u3
+        u/+7vLr/ZrNV/zWpGv8+pSP/PqAi/0CbIP9Akh7/QY0d/0GGGv9AgBj/QngV/0JyEv9BbBH/PmUO/zte
+        C/87Vwn/OVEF/ytAAP8+SRf/wsm1//P/9f/k/+T/8v/z//b/9v/1/fT/9Pzz//T99P/1//X/+P/5//X9
+        9f/F0rn/q7yb/6/AoP+wwaH/r8Gh/7DBof+wwaH/sMGh/7DBof+wwaH/sMGh/7HAof+xwKH/sb6h/7G+
+        of+xvaD/sbqg/7e+p/+2uaT/5e3c/9Xh1PZLU0iqAAAATQAAACcAAAAFAAAAAAAAAAAAAAAAAAAAAAAA
+        AAD+/v5m4ODg/7y8vP+3tLf/vrq//262Yf80sBz/Pqwl/z+nJP8/oyP/P5wh/0GUHv9Cjh3/Qogb/0GB
+        Gf9Cehb/QnQU/0FuEf8/aA//PV8N/ztZCf8vSQD/O08O/8DDsP//////4vfh/+H94P/v/+//5uzh/9Ta
+        yv/m7uH/+P/4//b/9v/6//v/7vXt/8nUvf+7xa3/u8at/7zIrv++ybD/vsmx/77Jsf++ybH/vsmx/77I
+        sf++yLD/vsiw/77HsP+9xa//wMay/8zQwf/CxLP/pamK/6W0mvE8Rju7AAAAfQAAAFgAAAAsAAAABgAA
+        AAAAAAAAAAAAAAAAAAAAAAAA/v7+WOHh4f+7u7v/tLK0/7+4wf92um3/N7Yh/zyyJv8+rSf/QKkm/0Ck
+        JP9AnCL/QZUg/0KQHv9CiRz/QYQa/0J7Fv9CdRX/QnAS/0FpEf8/YQ7/NVQC/zVPA/+wuZ3///////T0
+        9P/n9+b/4P7g/+b54//d4tT/6u3l//z//f/5//n/+f/6//f++P/i6tz/ztbE/9bezf/V3cz/zNPA/8vS
+        v//L08D/y9K+/8rRvf/J0L7/y9G//8vRwP/O08P/19vO/9vd0f+3uKL/cHBJ/1JYNP8kKSHHAAABmQAA
+        AIUAAABdAAAALwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAP///0bl5eX7vLy8/7Kwsv+/tsD/gLx5/zq7
+        KP88uCf/P7Mp/z+uKP9Aqib/QaQl/0GeIv9BlyH/QpAf/0KLHf9ChRr/Qn4Y/0J3Fv9DcRP/QWsR/ztg
+        Cv8xUQD/o7CO///////39vj/9/b3/+Pq4/+4zbj/1fHV/+b64//0/PL/+/37//n7+P/w9O3/8PTt//X4
+        8//7/fv/7vPs/9ndz//Y3M7/2d7R/9zg1P/f49f/6O3j/+zv5//m6eD/4ePZ/8TEsf+Hh2T/T08m/zo6
+        IP8jIx//BAQFxAAAAJ8AAACJAAAAXwAAADIAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAD8/Pwu6enp8sDA
+        wP+vr6//vrO//428iP8+wzD/Or4p/z+6Lf8/tiv/P7Ap/0CrKf9Bpib/QaAk/0KZIv9CkyD/Qo4e/0OI
+        HP9CgRr/Q3oX/0J0FP9AahD/MVoA/5Wnff/7+f3/9fT2//T09P/t6u3/t7i3/7fCt//F2cT/1OzT/9br
+        0P/I1b7/2N/Q//H17v/6/Pn///////b39f/q6uX/8fDt//n59v/8/fz////+/+7z6v+5uqb/kZFy/2xt
+        S/9ERCX/Li4X/zs7Mf9BQUL/Hh4g/wICAcoAAACgAAAAigAAAF8AAAAyAAAACgAAAAAAAAAAAAAAAAAA
+        AAAAAAAA/Pz8Iezs7OLCwsL/rK2s/7ywvf+bupj/RMk4/zfGKv8/vzH/QL0v/0C3Lv9Asyz/Qa4q/0Kp
+        KP9CpCb/Qp0k/0OWIv9DkCD/Q4we/0ODHP9DfRn/Q3UV/zZjAv+Gn2n/8/L0//b1+P/v8O//8PDw//Py
+        8//v7e//6Ojo/+Xp5P/f7d3/0ObL/8zpx//S8M//w9q6/5CVdf+do4X/3/La/+//7//o/+j/0ezM/6S4
+        lP9jaUL/NTQQ/yYmDf8cHBD/Hh4c/yUlJ/8uLjD/LCwt/xgYGP8DAwPPAAAAnwAAAIYAAABbAAAALgAA
+        AAgAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/hft7e3PwsLC/6qrqv+4rrj/pbik/07KRv82yyr/P8Uy/0DB
+        Mf9BvDD/Qbgt/0G0LP9Cryv/Qqkp/0KlJ/9DnyT/Q5gi/0SSIf9EjB//Q4Yc/0R+Gf81agP/c5NR/+rr
+        6f/49fr/7u7u/+/v7//z8/P/9vb2//f39v/29ff/9vT2//P09P/u8u7/5u/m/9/t3v+xu6T/oquS/8Xc
+        xP+/2L//rMKp/4KLdv9jY1X/VVRO/0tLSf89PT//MjI0/ysrLf8gICD/FhYW/xYWFv8ODg//AgIC0QAA
+        AJkAAAB6AAAATgAAACMAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4Q8vLyucXFxf+pqqn/sq2y/6+z
+        r/9bylX/ONEt/z/LNP8/xzP/QMIx/0K+MP9Cui//QbUt/0KvK/9Dqyn/Q6cn/0OgJf9DmST/RJQi/0SN
+        IP9Fhh7/NXQI/2GMPP/f49v/9/T6/+7u7f/v7+//xcXF/6+vr//Jycn/2dnZ/+Xl5f/u7u7/8vHy//Xz
+        9f/49vj/9vb5/+Tj5v/Kxsn/tbK1/6ShpP+TkJT/goGD/3Bwcv9gYGH/T09O/zw8PP8sLCz/HR0e/wwK
+        Df8CAAT/AAAC/wECANMAAACLAAAAZgAAADsAAAAVAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAA/Pz8C/b2
+        9qDIyMj/qaqp/6yqrP+2r7b/achl/zjVMf8+0Db/P8w1/0DIM/9BwzP/Qr8y/0K7MP9Cti7/Q7Es/0Ot
+        Kv9DqCn/Q6In/0SbJf9ElSP/RY4h/zp/EP9Uii//0NjI//fy+f/t7e3/8PDw/7CwsP9sbGz/cHBw/3Z2
+        dv+Ghob/lJSU/6Ghof+vr6//vLy8/8HBwf+7u7v/sbGx/6Wlpf+Xlpr/hYGK/3RweP9lYWf/VVBW/0M+
+        RP8xKzP/Ihkj/xQLFf8HAQn/BAgC/xMiBf8WIQfPAgMBdAAAAEsAAAAjAAAACAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP///wX5+fmIzMzM/6mpqf+op6j/tqq2/3zCev882Df/PdU2/0HROP9Bzjf/Qco1/0HE
+        NP9DwDP/RLwx/0O4L/9DtC3/Q64r/0SqKf9DpCf/Q5wl/0WVI/8/ixr/Rokg/73Osv/08Pf/6urq/+rq
+        6v/g4OD/xsbG/7Kysv+goKD/jIyM/35+fv93d3f/dXV1/3R0dP90dHT/b29v/2loaf9hYGD/VVtM/0hX
+        P/9CSD3/Oz03/zI0Lv8oKSP/IScb/x0uF/8dOBT/Hk4P/yRqCP8+fg3/JDQLsgEAAVMAAAAsAAAADwAA
+        AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vr6a9LS0v+qqqr/pKSk/7Oms/+PupD/Pdw7/zLd
+        Lf852DL/OdUx/zvRMf88zDD/Pccw/z/DL/9Bvy//Qrsu/0K1Lv9EsSz/Ra0s/0SmKf9Enyf/Q5Yh/zyL
+        Fv+jwZP/7+zx/+no6v/n5+f/6+vr//Hx8f/x8fH/7Ozs/+Tk5P/c3Nz/1NTU/87Ozv/Gxsb/v7+//7Gx
+        sf+fn6H/ioiJ/1poOP80agH/K3QE/ytyCP8qfg//KokU/yuhHf8vuCL/Mrkd/zO3Ef87rgj/QXMP6RAS
+        BnIAAAAtAAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/UzY2Nj/rKys/6Ch
+        oP+qpKr/oK6h/2PNYv9S1U//VdJR/1TRT/9T0Ev/UM5I/0vMQf9GyTn/QcUz/0DALv8+vCr/O7Yl/zqx
+        Iv88rCL/P6Yk/0GhJP83kxP/hrRx/+bk5//p5+r/5OTk/+Tk5P/k5OT/5ubm/+jo6P/q6ur/7+/v//b2
+        9v/19fX/9PT0//Pz8//r6+v/19fY/8G/xP+DimX/QYAF/zGiAP8yswj/NMYU/zXdIP818Sr/Nusn/zTP
+        Gf8ztQn/Q5AM/yQtDJwBAAE1AAAAEwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAD///8y4uLi8q+vr/+dnZ3/pKSk/6inqP+mrab/pbGl/6e0pv+ouKj/qbuo/6m+qP+nwab/pcWj/6LE
+        nv+bxZT/kMWI/4TDev92wGn/aLpX/1ayQf9IqS7/NJsU/2SpTP/W2tT/5uLn/9/f3//f39//39/f/+Dg
+        4P/h4eH/5eXl/9LS0v++vr7/xsbG/9LS0v/c3Nz/3d3d/83Nzf++usP/jZN7/0GJDv8uqwT/M78U/zTQ
+        HP805Sf/NOcp/zTPHf8yuA7/PaII/zJTDcYHBANIAAAAGAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA////H+np6de0tLT/nJyc/6Kiov+lpaX/q6ar/6+or/+yq7L/ta61/7my
+        uf+8tbz/v7jA/8O8xP/Gv8f/yMPJ/8rFy//MyM3/zcrN/8jLx//AzL7/tcmw/57Ck/+bwJD/zdPL/9vZ
+        3P/Y2Nj/2NjY/9ra2v/b29v/29vb/+fn5/+9vb3/bm5u/2pqav91dXX/e3t7/39/f/96enr/dHB5/2Zo
+        Wv9Cjhf/MrsN/zPMGv803iX/NOcq/zTWIf8yvxL/Oa8I/zduCtwPEQVfAAAAHAAAAAoAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv7+xXu7u67uLi4/5qamv+dnZ3/oaGh/6Oj
+        o/+lpaX/p6en/6mpqf+srKz/r6+v/7Gxsf+1tbX/uLi4/7u6u/++vb7/wsDC/8XCxf/Ixcn/zMnN/9DN
+        0v/V0Nf/1dHX/9LR0v/R0dH/09PT/9TU1P/V1dX/1tbW/9fX1//d3d3/0dHR/6qqqv+cnJz/lJSU/4uL
+        i/+EhIT/d3d3/2Ziaf9ZWFD/RJIg/zTOGP8z4SX/NOgq/zTaI/8yxRX/ObMK/zx/CusXHgdwAAAAHwAA
+        AAwAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8L9PT0n729
+        vf+Xl5f/mZmZ/52dnf+enp7/n5+f/6CgoP+ioqL/pKSk/6ampv+oqKj/qqqq/6ysrP+vr6//sbGx/7S0
+        tP+2trb/ubm5/729vf/BwMH/xcTF/8jHyP/Jycn/zMzM/83Nzf/Ozs7/0NDQ/9HR0f/S0tL/09PT/9jY
+        2P/e3t7/39/f/9zc3P/b29v/29vb/8/Pzv+5tbz/lpGO/0+iMf8w3h7/M+op/zTaI/8zxhb/OLQK/zyB
+        C+sdKAh7AAAAHwAAAA8AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAPn5+XzOzs7/p6en/6ampv+tra3/sbGx/7S0tP+2trb/ubm5/7u7u/+5ubn/t7e3/7a2
+        tv+1tbX/s7Oz/7S0tP+zs7P/srKy/7Ozs/+0tLT/tra2/7i4uP+6urr/u7u7/7+/v//CwsL/xcXF/8jI
+        yP/Ly8v/zc3N/9DQ0P/R0dH/09PT/9TU1P/W1tb/2NjY/9vb2//T09P/wr/F/6KdnP9Tqzr/MN4e/zPX
+        H/8ywxT/ObQL/zl6CeAYHgdmAAABGgAAAAoAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f1a7e3t/9zc3Pvc3Nzt4+Pj4+Xl5dnn5+fS6+vrz+7u
+        7szu7u7L7e3tzurq6tDo6OjW5ubm3+Pj4+ff39/w2tra/NXV1f/Q0ND/ysrK/8fHx//ExMT/wcHB/76+
+        vv+8vLz/vb29/729vf+/v7//wsLC/8XFxf/IyMj/y8vL/87Ozv/Pz8//0dHR/9PT0//W1tb/0dLR/8C9
+        w/+fnZn/UKw4/y3NFP8xwRH/Oq8K/zZ2CdUVHQVaAAAAEAAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Hv///2n9/f1Z+fn5Rvr6
+        +jz7+/sy+/v7K////yn///8l////JP///yf///8q/v7+L/39/Tj8/PxA+fn5Sfz8/Fn7+/ts+Pj4gfX1
+        9Zvw8PC07Ozsyejo6OHi4uL63d3d/9fX1//S0tL/zc3N/8jIyP/FxcX/xMTE/8XFxf/Hx8f/yMjI/8rK
+        yv/Nzc3/0NDQ/87Ozf/BvcT/nZ2V/0qjK/8suQX/PKcL/zZnC8QQFwRGAAAACgAAAAYAAAABAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD///8F/v7+Ffr6+iL9/f0y/v7+SPv7+2X6+vqF9/f3pPLy8sTs7Ozm5+fn/d/f
+        3//a2tr/1NTU/9HR0f/Pz8//zs7O/83Nzv/MzMv/ycPM/5ymkv9EnBj/OJYC/C5QC58MDQQsAAAAAgAA
+        AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af7+
+        /g39/f0a////Kf///0f9/f1x+vr6l/b29rvx8fHf7Ozs+ufn5//j4+P/4eHh/+Da5P+RrHr/PoQI2iU/
+        BmQaHQkKAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af7+/gf8/PwP/v7+HP///zb+/v5d+/z7g///
+        /6nh4Nu8cI5DlDxpBS4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAADgAD///AAAAAAAD//4AAAAAAA
+        D//wAAAAAAAD/+AAAAAAAAH/wAAAAAAAAAfAAAAAAAAAB4AAAAAAAAAHgAAAAAAAAAeAAAAAAAAAB4AA
+        AAAAAAAHgAAAAAAAAAeAAAAAAAAAAwAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAA
+        AAEAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAPAAAAAAAAAA8AAAAAAAAAHwAA
+        AAAAAAA/AAAAAAAAAB8AAAAAAAAAHwAAAAAAAAAfAAAAAAAAAB8AAAAAAAAAHwAAAAAAAAAfAAAAAAAA
+        AB8AAAAAAAAAHwAAAAAAAAAfAAAAAAAAAD8AAAAAAAAAP4AAAAAAAAB/gAAAAAAAAP+AAAAAAAAB/4AA
+        AAAAAAP/gAAAAAAAA/+AAAAAAAAH/8AAAAAAAA//wAAAAAAAH//AAAAAAAA/////+AAAAP//////4AAF
+        ////////AB///ygAAABIAAAAkAAAAAEAIAAAAAAAYFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAQAAAAHAAAACgAAAAwAAAAPAAAAEgAAABQAAAAWAAAAGAAA
+        ABoAAAAcAAAAHAAAABwAAAAcAAAAHAAAABsAAAAZAAAAFgAAABUAAAATAAAAEQAAAA4AAAAKAAAACAAA
+        AAUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAOAAAAGQAAACQAAAAuAAAANQAAADYAAAA2AAAANgAA
+        ADYAAAAxAAAAJwAAABwAAAASAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAEAAAAKAAAAFAAAAB8AAAAqAAAAMAAAADMAAAA3AAAAOgAAAD0AAABBAAAAQgAAAEUAAABIAAAASAAA
+        AEgAAABIAAAASAAAAEcAAABEAAAAQgAAAD8AAAA8AAAAOgAAADYAAAAxAAAALAAAACcAAAAgAAAAGgAA
+        ABgAAAAfAAAALwAAAEIAAABVAAAAZQAAAHMAAAB/AAAAhwAAAIoAAACKAAAAigAAAIkAAACCAAAAdwAA
+        AGkAAABYAAAARAAAAC4AAAAYAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAWAAAAKgAA
+        AD4AAABRAAAAVwAAAFoAAABfAAAAYgAAAGQAAABoAAAAagAAAGwAAABuAAAAbwAAAG8AAABvAAAAbwAA
+        AG4AAABrAAAAaQAAAGYAAABjAAAAYQAAAF0AAABYAAAAVAAAAE4AAABLAAAAUwAAAGIAAAB4AAAAiwAA
+        AJwAAACpAAAAtAAAALsAAADAAAAAwgAAAMMAAADDAAAAwgAAAMIAAAC/AAAAuQAAALAAAACiAAAAkAAA
+        AHkAAABeAAAAPwAAACMAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAlAAAAQgAAAGAAAAB4AAAAfgAA
+        AIEAAACGAAAAiQAAAIsAAACOAAAAjwAAAJIAAACUAAAAlQAAAJUAAACVAAAAlQAAAJQAAACSAAAAkAAA
+        AI4AAACLAAAAiQAAAIUAAACAAAAAfQAAAIAAAACLAAAAnAAAAK8AAADCAAAAzgAAANUAAADXAAAA1wAA
+        ANUAAADSAAAA0AAAAM0AAADMAAAAywAAAMkAAADJAAAAyQAAAMgAAADIAAAAxAAAALkAAACmAAAAiwAA
+        AGoAAABDAAAAIAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAArAAAAUAAAAHkAAACYAAAAngAAAKAAAACkAAAApwAA
+        AKgAAACpAAAAqQAAAKoAAACpAAAAqQAAAKkAAACoAAAApgAAAKUAAACiAAAAnwAAAJ4AAACeAAAAnwAA
+        AJ8AAACiAAAAqwAAALkAAADJAAAA1gAAAOAAAADkAAAA5AAAAOIAAADfAAAA3AAAANoAAADYAAAA1QAA
+        ANMAAADRAAAAzgAAAM0AAADLAAAAygAAAMkAAADIAAAAyAAAAMgAAADHAAAAwAAAAK0AAACNAAAAZAAA
+        ADgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAp6enGSUlJUsODg5/BQUFpwoKCsgPDw/bExMT4hcXF+cfHx/sJSUl8SsrK/QvLy/2MTEx9zAw
+        MPguLi72LCws9CcnJ/MmJibxJycn6yQkJOYdHR3gFBQU1w8PD88GBgbGAQEBvAAAALYAAAC7AAAAywAA
+        ANoAAADlAAAA6gAAAOsAAADqAAAA6QAAAOgCAADoBgMA6Q4LAOoSEwDsFxoA7hgdAO4YHQDtGBsA7BUW
+        AOgPDQDhCAQA2gMAANMAAADPAAAAzAAAAMsAAADLAAAAywAAAMoAAADBAAAAqQAAAIEAAABEAAAAFQAA
+        AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8N4uLi2Zyc
+        nP9mZmb/WVlZ/2ZmZv9tbW3/dXV1/39/f/+Hh4f/kZGR/5mZmf+enp7/n5+f/6CgoP+ioqL/n5+f/52d
+        nf+bm5v/mpqa/5iYmP+QkJD/g4OD/3d3d/9mZmb/Tk5O/zIyMv0aGhr6DAwM9wYGBvYDAwT1AQED8wEA
+        AvAIBgDvEhYA8xsoAPgjPQD8J1IA/yZiAP8lbwD/JHgA/yN/AP8igQD/I34A/yN4AP8laQD/JlkA/iRF
+        APocLgDwFBoA5wsKAN4CAADWAAAA0QAAANEAAADRAAAAzgAAAMEAAACYAAAAYgAAADQAAAAYAAAAEAAA
+        AAwAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8z5+fn+sjIyP+ysrL/srKy/7i4
+        uP+9vb3/wMDA/8PDw//Hx8f/y8vL/83Nzf/Q0ND/09PT/9fX1//Z2dn/3d3d/+Hh4f/j4+P/5eXl/+fn
+        5//o6Oj/6+vr/+Li4v/FxcX/kZGR/1tbW/86Ojr/Kysr/yQkJv8fHR//HhwQ/yQuBP8pTQD/J2kA/yKB
+        AP8clgD/FaoA/xC9AP8MzAD/CdgA/wjeAP8H4QD/B98A/wnaAP8MzgD/EL0A/xaoAP8ekAD/JHcA/yhb
+        AP8mPAD6FhoA7AUCAN4AAADZAAAA2QAAANoAAADUAAAAuwAAAJMAAABmAAAARAAAACwAAAAdAAAADgAA
+        AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///9Z6enp/8zMzP+3t7f/t7e3/7q6uv+9vb3/wMDA/8PD
+        w//Gxsb/ycnJ/8zMzP/Pz8//0tLS/9XV1f/a2tr/3t7e/+Dg4P/j4+P/5+fn/+rq6v/v7+//7+/v/9XV
+        1f+fn5//ZWVl/0RERP86Ojz/Ojk9/zc1LP8wOg7/LE8B/yZqAP8eiAD/FqQA/w7BAP8H3AD/A/AA/wH7
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP0A/wPzAP8H3wD/DsEA/xegAP8hgQD/JmMA/yM+
+        AP0XGADvAgEA4wAAAOAAAADhAAAA3QAAAM0AAACrAAAAfAAAAEwAAAAtAAAAFAAAAAEAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD9/f194uLi/8bGxv+1tbX/uLi4/7y8vP++vr7/wcHB/8PDw//Gxsb/ysrK/83N
+        zf/Q0ND/09PT/9fX1//c3Nz/4ODg/+Pj4//m5ub/6urq/+7u7v/w8PD/2dnZ/6Kiov9lZWX/QEBA/zg4
+        O/85Nzf/NTgZ/y1IAf8nYgD/IH4A/xmZAP8PvwD/BeUA/wH7AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP4A/wXrAP8FxQD/IaIP/0SMJv8sXAD/JTMA+w0L
+        AO4AAADnAAAA6AAAAOYAAADaAAAAtQAAAHgAAABBAAAAGgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAD8/Pyg4ODg/8LCwv+1tbX/ubm5/729vf/AwMD/w8PD/8bGxv/IyMj/zMzM/8/Pz//S0tL/1tbW/9vb
+        2//g4OD/4+Pj/+bm5v/q6ur/7e3t//Ly8v/m5ub/sLCw/25ubv9ERET/OTk8/zg3Lv8yPAv/KVIA/yNv
+        AP8ciwD/FagA/wvRAP8B+QD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8q/Cn/3f3c/5zZk/8RhgD/J2oA/y1HAP8REgDzAAAA6wAA
+        AOwAAADrAAAA1wAAAKAAAABaAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wL4+PjE29vb/76+
+        vv+1tbX/urq6/76+vv/BwcH/xMTE/8fHx//Kysr/zc3N/9HR0f/W1tb/2tra/9/f3//j4+P/5ubm/+np
+        6f/t7e3/8vLy//Ly8v/Ly8v/fX19/0lJSf85ODz/NzYo/y8/BP8oWQD/IXYA/xqSAP8SsgD/BuIA/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wH/Af+9/73//////3D2bv8AwQD/GpEA/yRxAP8tSgD/FxcB/AAAAfQAAADrAAAA4wAA
+        AL0AAAB3AAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///w709PTm1tbW/7u7u/+2trb/u7u7/7+/
+        v//CwsL/xsbG/8nJyf/MzMz/z8/P/9TU1P/Z2dn/3d3d/+Hh4f/m5ub/6urq/+/v7//z8/P/+Pj4/+Li
+        4v+enp7/UlJT/zs5Pf82NiP/LkEB/ydcAP8heQD/GZQA/xG1AP8F6AD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/zz/
+        PP/9//3/9v/2/z3/Pf8A+wD/DcgA/xmUAP8kbgD/L0wA/xsdAPkAAADqAAAA5AAAANEAAACbAAAAQwAA
+        AAkAAAAAAAAAAAAAAAAAAAAAAAAAAP///y3w8PD40dHR/7m5uf+5ubn/vb29/8HBwf/ExMT/yMjI/8vL
+        y//Ozs7/09PT/9nZ2f/d3d3/4uLi/+bm5v/r6+v/8fHx//b29v/7+/v/8PDw/7i4uP9qamv/PDs9/zU2
+        Hf8tRAH/J2AA/yB7AP8ZlwD/EbgA/wXqAP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/43/jf//////yv/K/wn/
+        Cf8A/wD/AfwA/wzKAP8akQD/JG8A/y5QAP8fJAD4AgEA4wAAANkAAAC8AAAAcgAAACYAAAACAAAAAAAA
+        AAAAAAAAAAAAAP7+/k3s7Oz/zMzM/7i4uP+6urr/vr6+/8bGxv/Ly8v/zc3N/87Ozv/R0dH/1dXV/9nZ
+        2f/c3Nz/4ODg/+Tk5P/r6+v/8vLy//n5+f/9/f3/2NjY/4+Pj/9NTE//NDQg/y5CAP8nXAD/IngA/xqU
+        AP8TsQD/B90A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/Df8N/9P/0//4//j/9//3/23/bf8A/wD/AP8A/wL0
+        AP8StAD/HIsA/yVsAP8wTwD/HiAA8gAAANgAAADMAAAAmgAAAE4AAAAQAAAAAAAAAAAAAAAAAAAAAP7+
+        /mjp6en/ycnJ/7i4uP+7u7v/v7+//56env+NjY3/jIyM/4mJif+Ghob/hYWF/4aGhv+Ghob/hoaG/4mJ
+        if+Pj4//lpaW/6CgoP+fn5//fX19/01NTv8yMSr/MDwD/ypWAP8kcAD/HIsA/xWnAP8NyAD/AvMA/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/Mf8x/+r/6v/v/+//9P/0//T/9P9c/1z/AP8A/wD/AP8K0wD/FqEA/x+C
+        AP8nYwD/L0YA/xQUAOYAAADNAAAAtAAAAHMAAAAqAAAAAgAAAAAAAAAAAAAAAPv7+4Xj4+P/xcXF/7i4
+        uP++vr7/vb29/2tra/9XV1f/X19f/2NjY/9nZ2f/bGxs/29vb/9zc3P/d3d3/3t7e/98fHz/fX19/35+
+        fv9oaGj/QkJD/yIhJP8nKwn/LU4A/yVnAP8fgAD/GJsA/xG3AP8I2gD/AfkA/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/Sv9K/+v/6//s/+z/7P/s//b/9v/w//D/Pf89/wD/AP8F5QD/ErYA/xqUAP8hdgD/KloA/y45
+        APwJBwDUAAAAwQAAAJQAAABJAAAADAAAAAAAAAAAAAAAAPr6+qDg4OD/xMTE/7m5uf++vr7/v7+//6Wl
+        pf+oqKj/sbGx/7i4uP/BwcH/ycnJ/87Ozv/W1tb/3t7e/+Pj4//n5+f/7Ozs/+Hh4f+oqKj/YWFk/zMx
+        Jf8tPgD/KFwA/yJ1AP8bjQD/FagA/w7FAP8G4wD/AfgA/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/ZP9k//D/
+        8P/n/+f/6v/q/+z/7P/8//z/uv+7/wH+Af8C6wD/DccA/xakAP8dhgD/JWkA/y5PAP8iJgDuAAAAxwAA
+        AKwAAABnAAAAHgAAAAAAAAAAAAAAAPf397zd3d3/w8PD/7q6uv+/v7//wsLC/8rKyv/Ozs7/0dHR/9TU
+        1P/Y2Nj/3d3d/+Tk5P/o6Oj/7u7u//b29v/9/f3//////+/v7/+qqqv/YF9g/zQ4Dv8rSwD/JWgA/x+A
+        AP8ZmAD/E7IA/wzNAP8G5AD/A/MA/wH8AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/iv+K/+7/7v/k/+T/5//n/+r/
+        6v/v/+//7f/t/y36Lf8A6gD/C9AA/xOwAP8akwD/IncA/yhcAP8wQgD/EQ8A2QAAALkAAACAAAAANAAA
+        AAMAAAAA////CPX19dTa2tr/wMDA/7u7u//AwMD/xcXF/83Nzf/Q0ND/1NTU/9jY2P/c3Nz/4uLi/+jo
+        6P/v7+//9vb2//7+/v///////////97e3v+RkZT/R0c0/y08AP8pWAD/InMA/xyKAP8XoQD/EboA/wvR
+        AP8G4gD/A+4A/wL1AP8B+wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8J/wn/uv+6/+X/5f/h/+H/4//j/+f/5//r/+v/9f/1/1/2
+        Xv8A5gD/CtMA/xG5AP8YnQD/HoIA/yVoAP8uUAD/JiwA8gIBAMYAAACXAAAASwAAAAsAAAAA/Pz8EPDw
+        8OvY2Nj/v7+//7y8vP/Dw8P/srKy/5aWlv+YmJj/mJiY/5mZmf+cnJz/n5+f/6Ojo/+oqKj/sLCw/7e3
+        t/+/v7//wMDA/5ubm/9hYWD/NDkL/ytJAP8nYgD/IHwA/xqSAP8WqAD/EL0A/wvQAP8I3gD/BegA/wTu
+        AP8C9AD/AfgA/wH8AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP8A/wD/AP8A/wD/AP88/zz/2v/a/93/3f/e/97/4P/g/+T/5P/m/+b/8//z/7b6tv8L4gb/CNIA/xC+
+        AP8WpQD/HIsA/yJzAP8oWgD/MUMA/xMTAN0AAACnAAAAYgAAABgAAAAA////IO/v7/TU1NT/v7+//729
+        vf/IyMj/kpKS/1RUVP9cXFz/XV1d/19fX/9jY2P/Z2dn/2lpaf9qamr/bm5u/3Jycv90dHT/bm5u/1FR
+        VP81NCb/LjsA/ytTAP8laQD/H4EA/xmWAP8VqwD/D74A/wvNAP8J2gD/B+IA/wToAP8E7QD/A/IA/wL1
+        AP8B9wD/AfoA/wH9AP8B/gD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
+        AP+I/4j/4P/g/9j/2P/b/9v/3v/e/+H/4f/k/+T/6f/p/+v/7P884zj/A84A/xC+AP8VqAD/GpEA/yF6
+        AP8nYgD/L00A/yQoAPEAAAC0AAAAcAAAACIAAAAA/v7+Ne7u7vvT09P/vr6+/76+vv/FxcX/r6+v/52d
+        nf+lpaX/qamp/66urv+1tbX/vLy8/8DAwP/Dw8P/yMjI/8zMzP/Pz8//u7u7/4B/gf89Px7/LEEA/ylY
+        AP8kbgD/HoUA/xiZAP8UrAD/ELwA/wzKAP8K1QD/CNwA/wbiAP8F5wD/BOsA/wPuAP8D8QD/A/QA/wL1
+        AP8C9gD/AvcA/wH4AP8B+QD/AfoA/wH6AP8B+wD/AfsA/wD6AP8D+QL/F/oV/2H8YP/P/8//1P/U/9b/
+        1v/Z/9n/2//b/97/3v/h/+H/5f/l//L/8v9k5mD/AMgA/xG9AP8VqgD/GpQA/x9/AP8laAD/K1IA/y85
+        AP8JBwDFAAAAfAAAACwAAAAA/Pz8Sezs7P/R0dH/vb29/8DAwP/Dw8P/ysrK/9HR0f/U1NT/1tbW/9vb
+        2//h4eH/5+fn/+zs7P/z8/P//Pz8////////////8PDx/6Khn/85Pg3/K0YA/yhcAP8jcQD/HYcA/xiZ
+        AP8UqwD/EbkA/w3GAP8LzwD/CtcA/wjdAP8G4QD/BeUA/wXoAP8E6wD/BO0A/wPvAP8D8AD/A/IA/wPz
+        AP8C9AD/AvQA/wL0AP8B9AD/APMA/yf2Jf+a/Jn/yf7J/9T/1P/P/8//0P/Q/9P/0//W/9b/2f/Z/9z/
+        3P/f/9//4v/i/+//8P+087H/DscF/w65AP8VqgD/GZYA/x+BAP8kbQD/KlcA/zJCAP8WFQDYAAAAgQAA
+        ADMAAAAA/v7+Wunp6f/Q0ND/vr6+/8DAwP/ExMT/yMjI/83Nzf/Q0ND/1NTU/9jY2P/d3d3/5OTk/+vr
+        6//w8PD/+Pj4////////////6urs/4uKf/8uNwD/K0wA/ydfAP8idAD/HYkA/xiZAP8UqQD/E7YA/w/B
+        AP8MygD/C9EA/wrXAP8I2wD/B98A/wbiAP8F5AD/BecA/wXpAP8E6gD/BOsA/wTsAP8E7AD/BO0A/wDs
+        AP8C7QD/WfVX/8r/yv/d/93/0//T/9D/0P/M/8z/zf/N/9D/0P/T/9P/1//X/9r/2v/d/93/4P/g/+T/
+        5P/y//P/g+J9/wu0AP8VpwD/GZcA/x6DAP8kbwD/KFoA/zBIAP8hIwDmAAAAhwAAADYAAAAA/f39Z+jo
+        6P/Ozs7/vr6+/8HBwf/FxcX/xcXF/8fHx//Kysr/zc3N/9DQ0P/U1NT/2tra/+Dg4P/n5+f/8fHx//n5
+        +f/+/v7/6ens/3d2Yv8oNgD/K1AA/ydhAP8idQD/HYgA/xmYAP8VpQD/E7IA/xG9AP8OxAD/DMsA/wrR
+        AP8K1gD/CdkA/wjcAP8H3wD/BuAA/wbiAP8G4wD/BeUA/wXmAP8C5gD/AOUA/xfqE/+P+Y3/4P/h/9v/
+        2//T/9P/0v/S/9D/0P/P/8//zP/M/83/zf/R/9H/1P/U/9f/1//b/9v/3v/e/+H/4f/q/+r/5Pzk/zC9
+        IP8QogD/GpUA/x6EAP8jcQD/KF0A/y9KAP8rLwDzAgEAiwAAADYAAAAA/f39d+jo6P/MzMz/vr6+/8PD
+        w//ExMT/gYGB/2xsbP9xcXH/cnJy/3Nzc/91dXX/eHh4/3x8fP+BgYH/h4eH/42Njf+RkZH/hoaI/0lK
+        LP8qPAD/KlIA/yZjAP8idQD/HYcA/xmVAP8XogD/FK0A/xO3AP8QvgD/DcQA/wzJAP8LzgD/CtEA/wrU
+        AP8J2AD/CNoA/wjbAP8I3AD/CN0A/wHdAP8R4Qz/ae9l/8f8xf/m/+f/2//b/9f/1//V/9X/1P/U/9P/
+        0//R/9H/zv/O/8z/zP/O/87/0v/S/9b/1v/Z/9n/3P/c/9//3//o/+j/0ffP/yq1GP8SnwD/GpIA/x6C
+        AP8jcgD/J14A/y1MAP8wNgD+BwYAlAAAADUAAAAA+/v7hebm5v/Kysr/vr6+/8TExP/ExMT/ioqK/319
+        ff+Dg4P/h4eH/4yMjP+RkZH/lZWV/5iYmP+bm5v/nJyc/5ycnP+ampr/g4OD/0BCHf8sPwD/KlMA/yZj
+        AP8icwD/HYUA/xuSAP8YngD/FagA/xOwAP8SuAD/EL4A/w7DAP8MxwD/DMsA/wvOAP8K0AD/CtMA/wrV
+        AP8J1wD/AtYA/zDgKv/C+sH/7f/t/+X/5f/d/93/3P/c/9r/2v/Y/9j/1f/V/9P/0//S/9L/0f/R/87/
+        zv/M/8z/z//P/9P/0//X/9f/2v/a/93/3f/s/+3/nuSZ/w+lAP8XmwD/G48A/x+AAP8jcQD/J14A/yxN
+        AP8xOgD/Dg0AnwAAADIAAAAA+/v7kuTk5P/Jycn/v7+//8PDw//Gxsb/ycnJ/87Ozv/R0dH/1dXV/9vb
+        2//i4uL/6enp/+/v7//09PT/+vr6//7+/v//////5eTk/1FTK/8oPAD/KlMA/ydhAP8jcgD/HoIA/xyP
+        AP8ZmgD/FqMA/xSsAP8TsgD/ErgA/xC9AP8OwgD/DcQA/w3HAP8MywD/C80A/wvOAP8KzwD/A88A/5Tu
+        kP/1//b/4v/i/+D/4P/f/9//3f/d/9z/3P/Z/9n/1//X/9X/1f/U/9T/0f/R/8//z//N/83/zf/N/9H/
+        0f/V/9X/2f/Z/9z/3P/o/+n/teuw/xijA/8XlwD/HIsA/yB9AP8kbwD/J14A/yxNAP8wOwD/Dw4AngAA
+        ACwAAAAA+/v7nuPj4//Jycn/v7+//8PDw//Gxsb/ysrK/87Ozv/R0dH/1dXV/9ra2v/h4eH/6Ojo/+7u
+        7v/z8/P/+vr6////////////7Ovq/0xOI/8pPQD/KlIA/yZgAP8jcAD/H38A/xyLAP8alQD/GJ4A/xam
+        AP8UrAD/E7IA/xK4AP8RvAD/EL8A/w7BAP8NxAD/DcYA/wzHAP8JyQD/FM0J/8j4x//s/+z/5P/k/+L/
+        4v/g/+D/3//f/93/3f/b/9v/2P/Y/9f/1//V/9X/0v/S/9D/0P/O/87/zP/M/9D/0P/T/9P/1//X/9r/
+        2v/j/+P/0ffP/ySiDv8XkgD/HYcA/yF6AP8lbAD/KF0A/yxMAP8xPAD/EhIAnAAAACMAAAAA+/v7puHh
+        4f/Gxsb/v7+//8PDw//Hx8f/zs7O/9HR0f/U1NT/2dnZ/9/f3//m5ub/7Ozs//Ly8v/4+Pj//v7+////
+        ////////8/Lx/09RJv8pPAD/K1EA/ydeAP8kbQD/IHsA/x2GAP8bkAD/GZkA/xagAP8WpgD/FKwA/xOx
+        AP8TtQD/EbkA/xG8AP8QvgD/D8EA/w3CAP8HwgD/Jssa/+D84P/r/+v/5v/m/+T/5P/i/+L/4P/g/9//
+        3//d/93/2v/a/9j/2P/V/9X/1P/U/9H/0f/P/8//zf/N/83/zf/S/9L/1f/V/9n/2f/h/+H/3f3d/zyo
+        Kf8ViwD/HoMA/yJ4AP8laQD/KFsA/yxLAP8yOwD/ExIAkwAAABgAAAAA+vr6rODg4P/ExMT/vr6+/8PD
+        w//FxcX/srKy/7Kysv+0tLT/tra2/7q6uv/AwMD/x8fH/83Nzf/U1NT/3t7e/+fn5//v7+//6urp/1ha
+        Mv8oOgD/K08A/yhcAP8lagD/IngA/x6BAP8ciwD/G5QA/xiaAP8TnwD/DqMA/wunAP8MrQD/D7EA/w6z
+        AP8KtQD/BbYA/w67AP8FugD/GMER/+D73//u/+7/5//n/+b/5v/k/+T/4v/i/+D/4P/d/93/2//b/9n/
+        2f/W/9b/1f/V/9P/0//R/9H/zv/O/8z/zP/R/9H/1f/V/9n/2f/d/93/5P/l/1y0Tv8PggD/H38A/yNz
+        AP8mZgD/KVcA/y1KAP8xOQD/EA8AggAAAA0AAAAA+vr6tN7e3v/ExMT/vr6+/8TExP/AwMD/Z2dn/2Bg
+        YP9jY2P/ZWVl/2hoaP9ra2v/bW1t/3BwcP90dHT/d3d3/3t7e/9+fn//gYGC/0hJJf8sOwD/LEwA/yhZ
+        AP8mZgD/I3MA/yB8AP8dhgD/FIkA/xCPAP8koA3/QrMx/1C/Qf9AuTD/JLIR/yW1FP9BwjL/btNj/5fk
+        kP+M4YT/Z9Zd/872zP/v/+//6v/q/+j/6P/l/+X/4//j/+D/4P/f/9//3P/c/9r/2v/X/9f/1v/W/9P/
+        0//R/9H/zv/O/8z/zP/P/8//0//T/9f/1//b/9v/5v/n/8HrvP8wjxb/HXcA/yRuAP8mYgD/KlUA/y5H
+        AP8xOAD/Dg0AawAAAAIAAAAA+Pj4ut7e3v/CwsL/vr6+/8PDw//Dw8P/oKCg/6CgoP+lpaX/qqqq/6+v
+        r/+ysrL/tra2/7q6uv+6urr/urq6/7u7u/+5ubn/uLi6/2dnSv8oMwD/LUkA/ypVAP8nYQD/HmkA/x50
+        Af8XegD/QJsp/4/Og//T89D/9P/1//L/8//0/vT/5frk/+j75//8//3/9f31/1LFQ/87vyz/U8hG/ya5
+        Ff+S34r/9P/1/+n/6f/n/+f/5P/k/+L/4v/f/9//3v/e/9v/2//Y/9j/1v/W/9P/0//S/9L/z//P/8z/
+        zP/P/8//1f/V/9v/3P/g/+H/5f/m//v///+FvHX/F2wA/yVoAP8nXQD/K1EA/y9DAP8wNAD4BwcAPQAA
+        AAAAAAAA+Pj4vN3d3f/BwcH/vb29/8LCwv/Gxsb/zs7O/9PT0//W1tb/2tra/+Dg4P/m5ub/7e3t//Ly
+        8v/39/f//f39/////////////////6Sjjv8lLgD/LUUA/ytSAP8jWAD/TIcv/0+UN/9eo0j/4vrh//n/
+        +//4//n/otiZ/1GwPv+k2Zv//////+X34/+T1Yn/9P70/47Yhf8IowD/DKcA/wSmAP9NwkL/9v/2//L/
+        8//u/+//6//r/+T/5P/g/+D/3v/e/9v/2//Z/9n/1//X/9X/1f/S/9L/0f/S/9b/1v/T/9T/yPvH/7vw
+        t/+467T/uum0/6LVl/9IkS3/H2sA/yZkAP8pWQD/LE0A/zBBAP8tLwDgAwIAHAAAAAAAAAAA9/f3vt3d
+        3f/BwcH/vLy8/8HBwf/FxcX/yMjI/8zMzP/Q0ND/1NTU/9nZ2f/e3t7/5ubm/+zs7P/x8fH/9vb2//v7
+        +////////////8zLwP8xNgH/LEAA/yVHAP9RfDT/w+e9/4G0b//c9Nr/8P/x//L/8//G6cH/HY0J/wmI
+        AP8blgn/1u3R/8Xnwf8NmQD/Oq0n/zGsHv8VowD/FqQA/xOlAP8bqQj/mN2R/8ryx//G8cP/zfXK/+b/
+        5v/n/+j/4f/h/+L/4//i/+P/3v/f/9z/3f/e/9//0f7R/57kl/9bvEr/L50X/yGQBv8higb/IoME/xx2
+        AP8ebgD/JmkA/ydfAP8qVAD/LUkA/zI+AP8kJACxAAAAAwAAAAAAAAAA9/f3wNzc3P/AwMD/vLy8/8HB
+        wf/FxcX/yMjI/8vLy//Pz8//1NTU/9nZ2f/d3d3/5ubm/+/v7//29vb//Pz8//////////////////Pz
+        8f9ISRz/KjgA/yZEAP+UtIL/jbh8/8Phvf/w//H/6v/q//X/9v+64LP/H4gD/xqJAP8PiQD/ZLZV/6HW
+        lv8XlwD/D5YA/xSaAP8XnAD/F50A/xefAP8UngD/E58C/x2jBv8cowf/HqMI/1a8Rv/G8sP/2f3X/7vv
+        t/+o5qP/q+el/6nmov+B0Hb/Ra4w/xeRAf8RiAD/F4gA/xuFAP8cfgD/H3kA/yJzAP8lawD/JmMA/yhZ
+        AP8rUAD/LUUA/zQ7AP8aGQB2AAAAAAAAAAAAAAAA9/f3vtvb2/+/v7//vLy8/8DAwP/ExMT/xsbG/8rK
+        yv/Ozs7/09PT/9jY2P/g4OD/2NjY/6ioqP+vr6//ubm5/8LCwv/MzMz/2dnZ/+np6/9zc1P/Iy0A/ztS
+        Ef/M6Mf/3fjb/+v/7P/o/+j/6//r//H/8f/l+OP/O5Ei/yCGA/8kjQn/HIwD/x6QBP8lmAz/GZMF/w6P
+        AP8QkgD/EZQA/xiZAP8WmQD/E5gA/xSZAP8VmgD/FJoA/w2WAP8rpBj/MaYb/x6bBf8alwH/HJYC/xuV
+        Av8QjAD/FIsA/yCOBf8kjQn/JYkJ/yaFCf8ofwn/K3kJ/yxzCf8tbAn/L2MJ/zFbCv8vTgT/L0AA/zI1
+        APgLCwAwAAAAAAAAAAAAAAAA9vb2vNvb2/+/v7//u7u7/7+/v//CwsL/xcXF/8nJyf/Ozs7/09PT/9jY
+        2P/i4uL/0dHR/3Jycv9ubm7/cXFx/3Jycv91dXX/d3d3/39/gv9kY1T/JikA/1NmLf/i/OL/6v/r/+j/
+        6P/q/+r/7f/t//L/8v/k9+L/U5o6/yeCCv8wixX/MZEY/yGLBv9grk7/gsN0/268Xv+d1JL/cb5h/x2U
+        A/8onBD/NaMf/yKZCf8ZlAD/GpQA/xqUAP8WkgD/FpEA/xiRAP8YkAD/F40A/xqMAP8kjwn/L5MV/zKR
+        Gf8zjhj/M4sY/zaHGP84gRj/OXwY/zl2GP87bxj/PWcY/0FhGv84Tw7/LDgA/ykpALwAAAAAAAAAAAAA
+        AAAAAAAA9vb2utnZ2f+/v7//urq6/7+/v//CwsL/xcXF/8nJyf/Nzc3/0tLS/9jY2P/f39//4eHh/87O
+        zv/MzMz/y8vL/8rKyv/Jycn/xcXF/76+vv+0s7L/Skok/0pYIv/h++D/6v/q/+r/6v/s/+z/7v/u/+//
+        8P/1//X/4vPf/5rFjP9OljT/O44g/z6UJf86lCH/cbRf/3S4ZP9lsFL/Uqc8/yGOB/9NqDn/fMFt/zWb
+        Hf8ZjAD/G40A/xuNAP8ajAD/GYoA/xqJAP8gjAX/LpET/zqWIv9Blyn/QpYp/0KTKf9EkCj/RY0o/0aJ
+        KP9HhCj/SH8o/0l6KP9Kcyj/TW4o/09nKf80RAv/S1Eg/yEhEFYAAAAAAAAAAAAAAAAAAAAA9fX1s9vb
+        2/++vr7/urq6/7+/v//Dw8P/xsbG/8nJyf/Nzc3/0tLS/9jY2P/e3t7/5eXl/+3t7f/y8vL/9/f3//v7
+        +///////////////////////sK+d/zA1A//L5MX/7f/v/+v/6//t/+3/7//v//D/8P/x//H/+P/5////
+        ///Z69P/c6te/1KXOP+v06T/1OrP/1aiQf8zjhj/K4wQ/yaKCv8bhQL/FYMA/xqFAP8dhwD/HocB/yCI
+        BP8migr/MJAW/z2WJP9KmzL/UZ05/1GcOf9Qmjj/UZc4/1KVOP9Tkzj/U5A4/1ONOP9ViDj/VYM4/1d+
+        OP9YeTj/WnM5/05eJ/97iF3/uL+tyRUVFAYAAAAAAAAAAAAAAAAAAAAA9/f3q9nZ2f+9vb3/ubm5/76+
+        vv/Fw8X/y8jM/8/M0P/T0NT/19XZ/93b3//j4eX/6ejr/+3s7//x8PL/9PP1//b19v/5+fr//f39////
+        ////////9/f0/1VVL/+mupX/8v/0/+z/7P/t/+3/7//v//H/8f/y//L/8//z//X/9f/8//3/8vrx/+f0
+        5P/m8uL/dKxf/1ecP/9eokj/XaJH/1qhRP9Vnz7/UJ05/06cN/9OnDb/UJ04/1OePP9ZoUP/XaJH/16i
+        SP9doUf/XZ9F/16dRf9enEX/XptF/16XRf9flUX/X5NF/2GPRf9hi0X/YodF/2ODRf9mfkX/YnNA/36L
+        Y//t9er/goVkWwAAAAAAAAAAAAAAAAAAAAAAAAAA+fn5pNra2v+9vb3/ubm5/8C+wP+xuq3/oraY/6e4
+        nP+ouZ7/rLyi/7O/qP+5w63/wcq4/8zRw//V2c//4OPc/+nq5//x8e//+fn5/////////////////8PD
+        tP+qwJr/7//x/+3/7f/u/+7/7//v//H/8f/y//L/8//z//T/9P/1//X/+f/5//////+717H/XppF/2qj
+        U/9qpFP/aqRU/2qlVP9rplX/a6ZW/2unVv9rp1b/a6dW/2umVf9qpVT/aqRU/2qkVP9qo1P/a6NT/2uh
+        U/9roFP/a55T/2ycU/9smVP/bZZT/22UU/9uj1P/cItT/3GIU/9wglL/cHxQ/9rl1P/V3c25b3NMAQAA
+        AAAAAAAAAAAAAAAAAAAAAAAA+vr6nN3d3f++vr7/uLi4/8W/x/+DqnT/NowS/z+KGv8+hRf/Pn8W/0B5
+        Ff9BcxT/Q24U/0NrFP9DZhT/RGIW/01mIP9ZbTD/aHhD/3yHW/+RmHX/qq6V/8PEs//O48f/5//o/+3/
+        7f/u/+7/8P/w//H/8f/z//P/8//z//T/9P/1//X/9v/2//j/+f/t+Oz/jbR7/3OjXP93p2H/dqhh/3ep
+        Yf93qWH/dqlh/3apYf92qmH/dqlh/3apYf93qWH/dqhh/3aoYf93p2H/d6Vh/3ilYf94o2H/eKJh/3ig
+        Yf95nWH/epth/3qZYf97lWH/fJJh/3uMX/90gFb/nKaH/+ry5vSNlG41AAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA+vr6lNzc3P++vr7/t7e3/8S+xv+IsHz/NpQV/zyPGf89ixj/PYYX/z2AFf89eRP/P3IQ/z5t
+        Dv88Zwv/OV8I/zZXBP8yUAD/L0gA/yo/AP8mNwD/KTYA/ysyAP9jbz7/4v3j/+z/7f/w//D/8P/w//H/
+        8f/z//P/8//z//T/9P/1//X/9f/1//X/9f/8//3/0uTL/4KpbP+Cq27/hKxv/4Otb/+DrW//g61v/4Ot
+        b/+DrW//g61v/4Otb/+DrW//hK1v/4Ssb/+Dq2//hKpv/4Spb/+Ep2//hKZv/4Wlb/+Go2//hqFv/4ee
+        b/+Hm2//g5Np/4yWc/+1wKT/7/3t/3yCcncAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vr6ieHh
+        4f/AwMD/t7e3/8O+xP+RtYf/OZ4b/zyXHf8+khz/P40b/z+IGv8/ghj/P3sV/0F1E/9BcBL/P2sQ/z5k
+        Df88XQv/OlcI/zhRBv82TAP/M0UA/zA9AP8uNQD/ip5y/+T/5f/u/+7/8v/y//L/8v/y//L/9P/0//T/
+        9P/1//X/9f/1//X/9f/2//f/8/zz/6G7kP+Prnv/krJ+/5Gyfv+Rs37/kbN+/5Gzfv+Rs37/kbN+/5Gz
+        fv+Rs37/kbJ+/5Kxfv+SsH7/kq9+/5Kvfv+SrX7/k6x+/5Oqfv+TqX7/lKZ+/5Slfv+Sn3v/sb2i/+Tw
+        4P/8//z/iZOFqwAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/Pz8eOPj4//AwMD/tbW1/8C7
+        wf+Yt5H/PKUi/zygIP8+mx//P5Ue/0CQHf9Aixz/QIUZ/0B+Fv9BeBX/QnIT/0BtEf8+Zw7/PGAM/ztZ
+        Cf85VAb/N04E/zVIAv8xPwD/KjIA/5ergP/n/+n/7v/u//T/9P/z//P/8//z//X/9f/1//X/9f/1//X/
+        9f/2//b/9//3/7zNr/+ctIn/oLiO/6C5jv+guY7/oLmO/6C5jv+guY7/oLmO/6C5jv+guY7/oLiO/6C4
+        jv+gt47/oLaO/6C2jv+htY7/orOO/6Kyjv+isY7/o6+O/6Cqiv+4wan/9//3//v/+/99iXm5AAAAMAAA
+        AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+aeTk5P+/v7//tbW1/7+7wP+gupr/Pqsn/z2n
+        Iv8+oiL/Pp4h/0CYH/9AkR3/QYwc/0GGGv9AgBf/QXoW/0J0FP9BbhH/P2gQ/z1iDf87Wwr/OlYI/zhP
+        Bf81SgL/KDcA/3R6Vv/u/+7/4P/g/+7/7//1//X/9P/0//b/9v/4//j/+P/4//b/9v/2//b/+f/6/+Xw
+        4f+tv53/q76c/6y/nf+sv53/rL+d/6y/nf+sv53/rL+d/6y/nf+sv53/rL+d/6y/nf+tvp3/rb6d/668
+        nf+uvJ3/rryd/665nf+uuJ3/r7ed/7C1nf/g5tr/+P/5/3+MeswAAABaAAAAMQAAAA4AAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA////W+Xl5f/BwcH/tLS0/725vf+puqb/QbEs/zytJP8/qSX/P6Qj/z+g
+        Iv8/mSD/QZIf/0KNHP9BiBv/QYIZ/0F8Fv9CdRT/QnAT/0BqEP89ZA7/PF0L/zpXCP83UAX/LEEA/255
+        Sv/7+fv/7Pvr/9z82//s/+z/9v/2/+/37f/l7eD/5/Dj//X+9P/2//b/9v/2//n/+v/V383/tsOn/7nG
+        q/+4xqv/uMaq/7nGq/+5xqv/ucar/7nGq/+5xqv/ucar/7nFq/+5xav/ucWr/7nEq/+5w6v/ucKr/7rB
+        q/+8waz/wcSz/7Gznf/b7dX/cH5s1QAAAIMAAABbAAAANwAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA////Tefn5//CwsL/s7Oz/7m2uf+xurD/RrYz/zuyJf8+rif/P6om/z+mJf8/oSP/QJkg/0GT
+        H/9Cjh7/Qokc/0GDGv9BfRf/QnYV/0JxE/9BbBH/P2UP/z1eDP86Vwj/MUoA/2BxOf/09PP/+vj6/+bx
+        5P/d/Nz/5v/m/+Ps3//Lzr//1tvN//j/+P/3//f/9//3//j/+f/5//n/1t/N/8LKtf/DzLb/xM23/8XO
+        uP/Fzrj/xc64/8XOuP/Fzrj/xc24/8XNuP/FzLj/xcy4/8XLuP/Fy7j/xsu5/8zQwP/MzsD/lJR3/3yF
+        W/9UX1DOAAAAngAAAIYAAABhAAAAOQAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Pejo
+        6P3CwsL/srKy/7e1t/+0ubT/ULtA/zu3J/8+syn/Pq8n/0CrJ/9ApyX/QKEj/0CaIv9ClSD/Qo8e/0KK
+        Hf9ChRr/Qn4X/0J4Fv9CchP/Qm0S/0BmEP89Xwz/NVMC/1NoJ//u7+z/+Pf4//f29//w9fD/3/nf/+T/
+        5P/s+ur/6O7k//r++v/6//r/+v/6//n/+f/u9ez/4+rd/9rh0v/m7eH/5u7i/9Payf/P1sX/0NfG/9DW
+        xv/Q1sX/z9XE/9DWxv/S2Mj/0dbH/9PXyf/Y28//2t3R/7i6pf9ra0P/OTkN/zY6LP0DAwW0AAAAnwAA
+        AIoAAABjAAAAPAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////KOzs7PfFxcX/sbGx/7W0
+        tv+3uLf/W75O/zm8J/8/uSv/P7Uq/z+wKP9ArCf/Qacm/0GjJP9BnCL/QpUh/0KQH/9CjB3/QoYb/0J/
+        Gf9CeRf/Q3QU/0FuEf9AZxD/Ol0J/0ZjGf/m6OP/9vb3//Pz8//29fb/7Ovs/5+snv/B38D/2vjZ/+X2
+        4v/3/fb/9fjz//P18P/u8er/9fnz//z//f//////9vr2/97i1v/c39P/3eDV/+Dk2f/k597/6Ovi//L4
+        8P/w8uz/5Obe/9ze0/+9van/eXlV/z8/Ef8+PiH/QUE9/xgXGf4AAAC6AAAAoAAAAI0AAABlAAAAPgAA
+        ABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/v7Eu7u7u3Ly8v/sLCw/7Kxsv+5tbn/asBi/zfD
+        KP8/vi//P7st/z+3LP8/sir/QK0p/0GpKP9BpSb/QZ8k/0KYIv9CkyD/Qo4f/0OJHf9Cgxr/Q3wY/0J2
+        Ff9CcBT/PmcO/0NnFf/W287/9/b5//Hx8f/y8vL/8fDx/8bExv+3uLf/v8q+/8fdxv/V8dL/xNq7/7/M
+        s//a4dL/8PXu//X38v/9/vz/+Pn3/+3s6P/x8O3/+vn4//7//v///////////+Tp3f+hooj/e3tX/1VV
+        Lf8zMxH/KSgU/zg4Mv9GRkn/NjY3/xYWFf8BAQG+AAAAoAAAAI0AAABlAAAAPgAAABYAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA+/v7CfHx8dnNzc3/r6+v/7CwsP+8srz/esF0/zbKKf8+xDH/P78w/0C9
+        L/9AuC7/QLQs/0GwK/9Cqyn/Qqcn/0KiJv9CmyP/Q5Ui/0OQIP9DjB7/Q4Uc/0N/Gf9DeBf/QnAS/0Jr
+        Ev/Dzbb/+Pb6//Dw8P/w8PD/8PDw//b29v/39vf/8e/x/+rp6v/n7Ob/3/He/9DqzP/M7cj/ze/J/7/Z
+        tf+Eimb/goRi/87jxv/t/+7/6P/o/+D+3//B3rj/jKJ2/0lOIf8oJwL/IiIJ/xwcE/8gICH/KCgs/yYm
+        J/8uLi3/JSUl/xMTE/8BAQHDAAAAngAAAIgAAABgAAAAOQAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA/v7+A/Ly8sTNzc3/ra2t/66urv+5sbn/ir6H/zrNMP89yTH/P8Uy/0DBMf9BvTD/Qbku/0C1
+        LP9CsSv/Qqwq/0KoKP9CpCb/Q50k/0OWIv9EkiH/RIwf/0OGHP9Dfxr/Q3cW/zxsDP+svZr/+fb8/+/v
+        7//v7+//7+/v//Pz8//19fX/8/Py//Hx8v/x8PH/8e/x/+/v7//s7uz/4+zi/+Ly4v+1wqn/k5t//8HZ
+        vv/B3cD/uNO3/5yvlP9vc1//XlxQ/1dWU/9PT0//QUFE/zU1Nv8tLS3/JiYm/xgYGP8YGBj/FxcX/w0N
+        Df8CAgLGAAAAlwAAAH0AAABWAAAALwAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPX1
+        9a3S0tL/ra2t/6ysrP+0r7T/m7mZ/0DQOP8+zjP/P8o0/z/GM/8/wjH/Qr4w/0K6Lv9Bti3/QbEs/0Kt
+        Kv9DqSn/Q6Un/0OeJP9DlyP/RJMh/0SOH/9Ehx3/Q4Aa/zhxCf+Wr3//+PX7/+3t7f/t7e3/8PDw/9TU
+        1P/Gxsb/3Nzc/+np6f/v7+//9PT0//X19f/08/T/8/Lz//Lw8v/x7/P/4+Ll/8rHyv+3s7b/p6Sn/5qX
+        mv+Mio3/fHx+/2xsbv9eXl7/Tk5O/z4+Pv8wMDD/JCQk/xYWFv8JCQn/BgYG/wIBA/8AAADHAAAAigAA
+        AG0AAABFAAAAIAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPn5+ZHT09P/rq6u/6qq
+        qv+xrrH/qrSp/0jRQv890jT/P842/z/LNf9AxzP/QcIy/0K/Mf9CvDD/Qrcu/0KyLP9Driv/Q6op/0Ol
+        KP9DoCb/RJkk/0SUIv9EjiD/RIcd/zp6D/+ApGX/8e/y/+3s7f/s7Oz/9PT0/7a2tv9nZ2f/dXV1/4OD
+        g/+YmJj/rKys/7u7u//Jycn/1tbW/+Hh4f/k5OT/2dnZ/8vLy/+9vb3/rq6u/5ycnf+JiYr/eXl5/2pq
+        av9aWlr/S0tL/zo6Ov8rKiv/Hh0e/xAPEf8DAgX/AAAA/woMBP8OEgTFAAAAdgAAAFYAAAAwAAAAEQAA
+        AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/XjX19f/sLCw/6enp/+tq63/r6+v/1rN
+        V/861jT/QNI4/0DPNv9AzDX/QMg0/0HDM/9CwDL/Q7wx/0K4L/9CtC3/Q7As/0OrKv9Dpyj/Q6Em/0Ob
+        JP9ElCL/RI4g/z2EFv9rm0z/6unp/+zr7P/q6ur/7e3t/9fX1/+jo6P/j4+P/3x8fP9xcXH/a2tr/2ho
+        aP9sbGz/cnJy/3h4eP9+fn7/gYGB/39/f/97e3v/dHR0/2pqa/9gXWL/VlJY/0xITf9AO0H/My40/ych
+        J/8dGB3/FxMV/xESDf8TJAj/HUYH/zZlDv8eKQqxAAAAXQAAADwAAAAbAAAABgAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/Vrc3Nz/sbGx/6Wlpf+qqar/sqqy/2/Hbf832zP/P9Y5/0DT
+        Of9A0Dj/Qc42/0HKNf9CxTP/Q8Ez/0O+Mf9Dui//Q7Yu/0OxLf9ErSv/RKkp/0OjJ/9EnCX/RJUj/0GN
+        HP9TkzH/3eHa/+vq7P/o6Oj/6Ojo/+vr6//u7u7/6Ojo/+Dg4P/R0dH/v7+//7CwsP+mpqb/nZ2d/5SU
+        lP+NjY3/gICA/3Jycv9mZWf/VFhJ/ztWG/8wWBb/LUsZ/ytFGf8nRhj/I0UV/yJOFf8kZRj/KXYZ/y2L
+        Fv8xnBD/NZwG/0Z6EPgPEQV/AAAAQQAAACIAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP7+/jvi4uL8tbW1/6Ojo/+mpqb/sKew/4W+hf814DP/ONw0/zrZNP861jP/PNMz/z3Q
+        Mv89zDL/Psgw/0DEMP9BwDD/Qrwv/0K4Lv9Dsyz/RK8s/0SrK/9EpSj/RJ4m/0OXIf9FkiP/wdK4/+zp
+        7v/m5ub/5ubm/+bm5v/n5+f/6Ojo/+np6f/q6ur/7e3t/+7u7v/t7e3/6+vr/+np6f/n5+f/39/f/83N
+        zf+7ur3/mZyP/1RtHP87iQX/MZUA/zGaBv8xrRD/Mr0Y/zPUJP815ir/NNoi/zTFFv8ysAj/Q5QL/zA+
+        ELgAAABFAAAAJAAAAA0AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
+        /xzn5+fzurq6/6Ghof+jo6P/qaWp/52wnf9syWv/actn/2nMZv9nzGP/Zcxg/2LMXP9dzFX/V8tN/0/I
+        Q/9JxDz/R8E2/0S9Mf8/uCr/O7Mk/zyuI/8/qiT/QaUl/0GfI/89lRr/pMOW/+zn7v/j4+P/4+Pj/+Pj
+        4//j4+P/5OTk/+Tk5P/l5eX/5OTk/+np6f/s7Oz/6+vr/+vr6//r6+v/5+fn/9bW1v/CwsP/q6qp/2F3
+        Mv85jgP/MqcG/zO2D/80xxf/NNkh/zTqKv804ib/NMoa/zK0Dv84oAb/QWgS5QoJBGAAAAAqAAAAEQAA
+        AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wnv7+/ZwMDA/5+f
+        n/+ioqL/paWl/6mnqf+vqK//saux/7Ovs/+2s7b/uLa4/7m5uf+6vbr/usC6/7rDuf+4xLb/r8ar/6TG
+        n/+YxpL/icOA/3q+bf9muFX/UK05/0emLP82mhb/gbZu/+Xg5//e3t7/3t7e/97e3v/e3t7/39/f/+Dg
+        4P/h4eH/5OTk/8DAwP+xsbH/v7+//8rKyv/U1NT/29vb/8/Pz/+9vb7/rquv/2mDRf80mAL/MrMN/zTA
+        Fv800B3/NOMn/zTmKf800h7/M70T/zOqB/9Chwz7GyIJgwAAADEAAAAWAAAABAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD09PS4xcXF/6CgoP+goKD/o6Oj/6Wl
+        pf+oqKj/qqqq/62srf+wr7D/s7Gz/7a1tv+5t7n/vLq8/7+9v//Cv8P/xsLH/8rFy//Ox8//0srT/9HM
+        0f/Nzs3/yM7G/7nLtP+hw5f/qcWg/9fX1//Y2Nj/2NjY/9jY2P/a2tr/29vb/9vb2//d3d3/5eXl/56e
+        nv9cXFz/Z2dn/2xsbP9xcXH/dXV1/3R0dP9vb2//a2du/1dtO/86ogz/M8EU/zTMG/803iX/NOgq/zTY
+        If8zwxf/M7AK/z6YCP8oPQujAAAANgAAABwAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD39/eWy8vL/6Ghof+cnJz/n5+f/6Kiov+kpKT/pqam/6io
+        qP+qqqr/ra2t/6+vr/+xsbH/tLS0/7e3t/+5ubn/urq6/729vf/AwMD/wsLC/8TExf/Ix8j/zMvN/9DN
+        0v/W0dj/1tLX/9HR0f/R0dH/09PT/9TU1P/V1dX/1tbW/9jY2P/Y2Nj/3d3d/8fHx/+goKD/mZmZ/4+P
+        j/+FhYX/fn5+/3Jycv9jY2P/V1NZ/09gOP89rBb/M9Ec/zTfJf806Cr/NNwk/zTIGf8ytA3/PJ0H/zJT
+        Db0DAQI+AAAAHwAAAAsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD7+/t10dHR/6Kiov+ampr/np6e/5+fn/+goKD/oaGh/6Kiov+jo6P/paWl/6en
+        p/+pqan/rKys/66urv+wsLD/s7Oz/7W1tf+4uLj/urq6/7y8vP+/v7//wsLC/8XFxf/Hx8f/ysrK/8vL
+        y//Nzc3/zs7O/8/Pz//R0dH/0tLS/9LS0v/U1NT/1dXV/9ra2v/g4OD/3t7e/9vb2//Z2dn/2dnZ/9HR
+        0f+8vLz/p6Op/3mHZf87tRv/M+Um/zTpKv803ST/NMka/zK2Df88oAj/OF0OyggHA0QAAAAfAAAADgAA
+        AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAD+/v5O3Nzc/6qqqv+cnJz/oaGh/6SkpP+np6f/qamp/6qqqv+srKz/r6+v/66urv+urq7/rq6u/66u
+        rv+urq7/rq6u/6+vr/+vr6//sLCw/7Kysv+0tLT/t7e3/7q6uv+9vb3/v7+//8HBwf/ExMT/xsbG/8nJ
+        yf/Ly8v/zMzM/87Ozv/Q0ND/0dHR/9PT0//U1NT/1tbW/9fX1//Y2Nj/29vb/9fX1//FxcX/trK4/4aT
+        df89vSL/M+gn/zTXIf8zxhj/M7YN/zydCP8yUgy1CAcEPgAAABkAAAAMAAAAAgAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8m7Ozs9s/P
+        z//ExMT/ycnJ/87Ozv/Q0ND/09PT/9fX1//b29v/3Nzc/9vb2//X19f/1dXV/9PT0//Q0ND/zMzM/8rK
+        yv/Hx8f/w8PD/8HBwf++vr7/vLy8/7u7u/+6urr/ubm5/7q6uv+6urr/vb29/7+/v//Dw8P/xsbG/8jI
+        yP/Ly8v/zc3N/8/Pz//Q0ND/0dHR/9PT0//U1NT/1dXV/9bW1v/FxcX/s7C1/4WWdv87vyL/MtYe/zPD
+        Fv8ytAz/O6AI/y9QC6sEAgIuAAAAFAAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8M+/v7z/T09Nry8vK89PT0q/f3
+        95n39/eI+Pj4fv39/Xn+/v5y/f39cP39/XT8/Px5/Pz8f/r6+or5+fmZ+Pj4p/T09Ljw8PDN7e3t5Ojo
+        6PTi4uL83d3d/9ra2v/W1tb/0dHR/83Nzf/Jycn/xsbG/8PDw//BwcH/wMDA/8LCwv/Dw8P/xsbG/8nJ
+        yf/MzMz/zc3N/87Ozv/R0dH/0tLS/9PT0//FxcX/tLC2/4GWcf84txn/McIT/zSvC/8/lgr/K0wJnQQC
+        AigAAAASAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Dv///wn8/PwBAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8G////Dv///xz///84/f39XPn5
+        +Xn39/eY9PT0u/Dw8N7s7Oz25+fn/uPj4//d3d3/1tbW/9DQ0P/MzMz/ycnJ/8fHx//Hx8f/yMjI/8nJ
+        yf/MzMz/zc3N/8/Pz//ExMT/tbG4/3yUZv80qgz/NKsI/0GMDPcnPAuDAQABHAAAAA0AAAAFAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af7+
+        /gv+/v4h/v7+Rv39/Wv6+vqT9/f3u/T09OLu7u776Ojo/+Li4v/c3Nz/2NjY/9XV1f/S0tL/0NDQ/8/P
+        z//Kysr/wr3E/3KaVP81mgH/QXoO4B4pCVgAAAAOAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA////Af///wz///8w////Xf39/YX6+vqt9/f31vLy8vTt7e3+6enp/+Xl5f/j4+X/zMzI/1eO
+        Kf88dgqmFRkIIAAAAAAAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA////B////x3///9G/f39b/z8/Jn9+/+4pK+LrUlzDl8/YhEEAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAPAAD///////4AAAAAAAAf//////4AAAAAAAAP///
+        ///4AAAAAAAAD//////4AAAAAAAAB//////wAAAAAAAAAf/////gAAAAAAAAAA/////gAAAAAAAAAAf/
+        ///gAAAAAAAAAAf////gAAAAAAAAAAf////gAAAAAAAAAA/////AAAAAAAAAAA/////AAAAAAAAAAAf/
+        ///AAAAAAAAAAAP////AAAAAAAAAAAP////AAAAAAAAAAAH////AAAAAAAAAAAH////AAAAAAAAAAAH/
+        ///AAAAAAAAAAAD///+AAAAAAAAAAAD///+AAAAAAAAAAAD///+AAAAAAAAAAAD///+AAAAAAAAAAAD/
+        //+AAAAAAAAAAAD///+AAAAAAAAAAAD///+AAAAAAAAAAAD///+AAAAAAAAAAAD///+AAAAAAAAAAAD/
+        //+AAAAAAAAAAAD///+AAAAAAAAAAAD///+AAAAAAAAAAAD///+AAAAAAAAAAAD///+AAAAAAAAAAAD/
+        //+AAAAAAAAAAAH///+AAAAAAAAAAAH///+AAAAAAAAAAAH///+AAAAAAAAAAAP///+AAAAAAAAAAAP/
+        //+AAAAAAAAAAAf///+AAAAAAAAAAAf///+AAAAAAAAAAAf///+AAAAAAAAAAA////+AAAAAAAAAAA//
+        //+AAAAAAAAAAB////+AAAAAAAAAAD////+AAAAAAAAAAD////+AAAAAAAAAAD////+AAAAAAAAAAD//
+        //+AAAAAAAAAAD////+AAAAAAAAAAD////+AAAAAAAAAAD////+AAAAAAAAAAD////+AAAAAAAAAAD//
+        //+AAAAAAAAAAD////+AAAAAAAAAAD/////AAAAAAAAAAD/////AAAAAAAAAAD/////AAAAAAAAAAH//
+        ///AAAAAAAAAAP/////AAAAAAAAAAP/////AAAAAAAAAAf/////AAAAAAAAAA//////gAAAAAAAAB///
+        ///gAAAAAAAAB//////gAAAAAAAAD//////gAAAAAAAAH//////gAAAAAAAAP//////gAAAAAAAAf///
+        ///h//gAAAAB///////////wAAAD////////////wAAn/////////////wB///////8=
+</value>
+  </data>
 </root>

+ 2 - 0
Welling_Motor_Debug_Tool/LocalInfo.cs

@@ -10,7 +10,9 @@ namespace Welling_Motor_Debug_Tool
     {
         public string LocalPath = "C:\\Temp\\MotorTestTool\\"; //本地配置文件路径
         public string LocalDataPath = "C:\\Temp\\MotorTestTool\\DataLog\\"; //本地数据文件路径
+        public string ConfigFilePath = "C:\\Temp\\MotorTestTool\\Cfg\\";
         public string ConfigFileName = "Config.ttcfg"; //配置文件
+        public string ToolsPath = "C:\\Temp\\MotorTestTool\\Tools";//工具路径
         public string TorqueSensorFileName = "TorqueSensor.ttcfg"; //配置文件
         public string UsrFileName = "UserAccount"; //登录配置文件
         public string CfgPathName = "cfg\\"; //配置目录

+ 16 - 13
Welling_Motor_Debug_Tool/Login.Designer.cs

@@ -42,12 +42,12 @@
             // comboBox_User
             // 
             this.comboBox_User.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-            this.comboBox_User.Font = new System.Drawing.Font("微软雅黑", 10.5F);
+            this.comboBox_User.Font = new System.Drawing.Font("微软雅黑", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
             this.comboBox_User.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.comboBox_User.FormattingEnabled = true;
             this.comboBox_User.Location = new System.Drawing.Point(89, 65);
             this.comboBox_User.Name = "comboBox_User";
-            this.comboBox_User.Size = new System.Drawing.Size(171, 28);
+            this.comboBox_User.Size = new System.Drawing.Size(171, 35);
             this.comboBox_User.TabIndex = 43;
             // 
             // button_keyboard
@@ -66,31 +66,33 @@
             // label2
             // 
             this.label2.AutoSize = true;
-            this.label2.Font = new System.Drawing.Font("微软雅黑", 10.5F);
-            this.label2.Location = new System.Drawing.Point(42, 104);
+            this.label2.Font = new System.Drawing.Font("微软雅黑", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.label2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
+            this.label2.Location = new System.Drawing.Point(21, 121);
             this.label2.Name = "label2";
-            this.label2.Size = new System.Drawing.Size(37, 20);
+            this.label2.Size = new System.Drawing.Size(52, 27);
             this.label2.TabIndex = 38;
             this.label2.Text = "密码";
             // 
             // label1
             // 
             this.label1.AutoSize = true;
-            this.label1.Font = new System.Drawing.Font("微软雅黑", 10.5F);
-            this.label1.Location = new System.Drawing.Point(42, 69);
+            this.label1.Font = new System.Drawing.Font("微软雅黑", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
+            this.label1.Location = new System.Drawing.Point(21, 68);
             this.label1.Name = "label1";
-            this.label1.Size = new System.Drawing.Size(37, 20);
+            this.label1.Size = new System.Drawing.Size(52, 27);
             this.label1.TabIndex = 39;
             this.label1.Text = "账户";
             // 
             // textBox_Passwd
             // 
-            this.textBox_Passwd.Font = new System.Drawing.Font("微软雅黑", 12F);
+            this.textBox_Passwd.Font = new System.Drawing.Font("微软雅黑", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
             this.textBox_Passwd.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.textBox_Passwd.ImeMode = System.Windows.Forms.ImeMode.Disable;
-            this.textBox_Passwd.Location = new System.Drawing.Point(89, 100);
+            this.textBox_Passwd.Location = new System.Drawing.Point(89, 118);
             this.textBox_Passwd.Name = "textBox_Passwd";
-            this.textBox_Passwd.Size = new System.Drawing.Size(171, 29);
+            this.textBox_Passwd.Size = new System.Drawing.Size(171, 34);
             this.textBox_Passwd.TabIndex = 37;
             this.textBox_Passwd.UseSystemPasswordChar = true;
             this.textBox_Passwd.KeyUp += new System.Windows.Forms.KeyEventHandler(this.textBox_Passwd_KeyUp);
@@ -98,10 +100,11 @@
             // button_Login
             // 
             this.button_Login.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(192)))), ((int)(((byte)(192)))));
-            this.button_Login.Font = new System.Drawing.Font("微软雅黑", 12F);
+            this.button_Login.Font = new System.Drawing.Font("微软雅黑", 15F);
+            this.button_Login.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
             this.button_Login.Location = new System.Drawing.Point(280, 65);
             this.button_Login.Name = "button_Login";
-            this.button_Login.Size = new System.Drawing.Size(61, 63);
+            this.button_Login.Size = new System.Drawing.Size(91, 87);
             this.button_Login.TabIndex = 36;
             this.button_Login.Text = "进入";
             this.button_Login.UseVisualStyleBackColor = false;

+ 8 - 6
Welling_Motor_Debug_Tool/Login.cs

@@ -35,12 +35,14 @@ namespace Welling_Motor_Debug_Tool
                     FileStream fs = File.Create(localInfo.LocalPath + localInfo.UsrFileName);
                     fs.Close();
                     StreamWriter file = new StreamWriter(localInfo.LocalPath + localInfo.UsrFileName);
-                    file.WriteLine("USER=中置量产,PASSWD=1");
-                    file.WriteLine("USER=轮毂量产,PASSWD=2");
-                    file.WriteLine("USER=中置样机,PASSWD=3");
-                    file.WriteLine("USER=轮毂样机,PASSWD=4");
-                    file.WriteLine("USER=工程配置,PASSWD=5");
-                    file.WriteLine("USER=研发测试,PASSWD=6");
+                    file.WriteLine("USER=中置量产写入,PASSWD=1");
+                    file.WriteLine("USER=中置量产检验,PASSWD=2");
+                    file.WriteLine("USER=轮毂量产写入,PASSWD=3");
+                    file.WriteLine("USER=轮毂量产检验,PASSWD=4");
+                    file.WriteLine("USER=中置样机,PASSWD=5");
+                    file.WriteLine("USER=轮毂样机,PASSWD=6");
+                    file.WriteLine("USER=工程配置,PASSWD=7");
+                    file.WriteLine("USER=研发测试,PASSWD=8");
                     file.Close();
                 }
                 //读取配置文件

+ 27 - 22
Welling_Motor_Debug_Tool/Scan.Designer.cs

@@ -32,9 +32,9 @@
             this.label1 = new System.Windows.Forms.Label();
             this.textBox_Scan = new System.Windows.Forms.TextBox();
             this.button_Enter = new System.Windows.Forms.Button();
-            this.statusStrip1 = new System.Windows.Forms.StatusStrip();
-            this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
-            this.statusStrip1.SuspendLayout();
+            this.button_keyboard = new System.Windows.Forms.Button();
+            this.pictureBox1 = new System.Windows.Forms.PictureBox();
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
             this.SuspendLayout();
             // 
             // label1
@@ -68,23 +68,28 @@
             this.button_Enter.UseVisualStyleBackColor = false;
             this.button_Enter.Click += new System.EventHandler(this.button_Enter_Click);
             // 
-            // statusStrip1
+            // button_keyboard
             // 
-            this.statusStrip1.BackColor = System.Drawing.Color.DodgerBlue;
-            this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.toolStripStatusLabel1});
-            this.statusStrip1.Location = new System.Drawing.Point(0, 139);
-            this.statusStrip1.Name = "statusStrip1";
-            this.statusStrip1.Size = new System.Drawing.Size(584, 22);
-            this.statusStrip1.TabIndex = 3;
-            this.statusStrip1.Text = "statusStrip1";
+            this.button_keyboard.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(113)))), ((int)(((byte)(185)))));
+            this.button_keyboard.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.button_keyboard.ForeColor = System.Drawing.Color.White;
+            this.button_keyboard.Location = new System.Drawing.Point(28, 106);
+            this.button_keyboard.Name = "button_keyboard";
+            this.button_keyboard.Size = new System.Drawing.Size(91, 43);
+            this.button_keyboard.TabIndex = 43;
+            this.button_keyboard.Text = "屏幕键盘";
+            this.button_keyboard.UseVisualStyleBackColor = false;
+            this.button_keyboard.Click += new System.EventHandler(this.button_keyboard_Click);
             // 
-            // toolStripStatusLabel1
+            // pictureBox1
             // 
-            this.toolStripStatusLabel1.ForeColor = System.Drawing.Color.White;
-            this.toolStripStatusLabel1.Name = "toolStripStatusLabel1";
-            this.toolStripStatusLabel1.Size = new System.Drawing.Size(212, 17);
-            this.toolStripStatusLabel1.Text = "版权所有:武汉天腾动力科技有限公司";
+            this.pictureBox1.Image = global::Welling_Motor_Debug_Tool.Properties.Resources.about;
+            this.pictureBox1.Location = new System.Drawing.Point(430, 116);
+            this.pictureBox1.Name = "pictureBox1";
+            this.pictureBox1.Size = new System.Drawing.Size(136, 33);
+            this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
+            this.pictureBox1.TabIndex = 44;
+            this.pictureBox1.TabStop = false;
             // 
             // Scan
             // 
@@ -92,7 +97,8 @@
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
             this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
             this.ClientSize = new System.Drawing.Size(584, 161);
-            this.Controls.Add(this.statusStrip1);
+            this.Controls.Add(this.pictureBox1);
+            this.Controls.Add(this.button_keyboard);
             this.Controls.Add(this.button_Enter);
             this.Controls.Add(this.textBox_Scan);
             this.Controls.Add(this.label1);
@@ -105,8 +111,7 @@
             this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
             this.Text = "录入";
             this.Load += new System.EventHandler(this.Scan_Load);
-            this.statusStrip1.ResumeLayout(false);
-            this.statusStrip1.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
             this.ResumeLayout(false);
             this.PerformLayout();
 
@@ -116,8 +121,8 @@
 
         private System.Windows.Forms.Label label1;
         private System.Windows.Forms.Button button_Enter;
-        private System.Windows.Forms.StatusStrip statusStrip1;
-        private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1;
         public System.Windows.Forms.TextBox textBox_Scan;
+        private System.Windows.Forms.Button button_keyboard;
+        private System.Windows.Forms.PictureBox pictureBox1;
     }
 }

+ 5 - 0
Welling_Motor_Debug_Tool/Scan.cs

@@ -26,5 +26,10 @@ namespace Welling_Motor_Debug_Tool
         {
 
         }
+
+        private void button_keyboard_Click(object sender, EventArgs e)
+        {
+            System.Diagnostics.Process.Start("osk.exe");
+        }
     }
 }

+ 0 - 3
Welling_Motor_Debug_Tool/Scan.resx

@@ -117,9 +117,6 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
   <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
   <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>

+ 16 - 1
Welling_Motor_Debug_Tool/TorqueParams.Designer.cs

@@ -52,6 +52,8 @@
             this.label6 = new System.Windows.Forms.Label();
             this.label7 = new System.Windows.Forms.Label();
             this.label8 = new System.Windows.Forms.Label();
+            this.pictureBox1 = new System.Windows.Forms.PictureBox();
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
             this.SuspendLayout();
             // 
             // label1
@@ -273,12 +275,23 @@
             this.label8.TabIndex = 0;
             this.label8.Text = "最大值";
             // 
+            // pictureBox1
+            // 
+            this.pictureBox1.Image = global::Welling_Motor_Debug_Tool.Properties.Resources.about;
+            this.pictureBox1.Location = new System.Drawing.Point(236, 240);
+            this.pictureBox1.Name = "pictureBox1";
+            this.pictureBox1.Size = new System.Drawing.Size(136, 33);
+            this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
+            this.pictureBox1.TabIndex = 41;
+            this.pictureBox1.TabStop = false;
+            // 
             // TorqueParams
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
             this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
-            this.ClientSize = new System.Drawing.Size(384, 261);
+            this.ClientSize = new System.Drawing.Size(384, 281);
+            this.Controls.Add(this.pictureBox1);
             this.Controls.Add(this.button_Change);
             this.Controls.Add(this.textBox_Torque_4_Max);
             this.Controls.Add(this.textBox_Torque_3_Max);
@@ -312,6 +325,7 @@
             this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
             this.Text = "TorqueParams";
             this.Load += new System.EventHandler(this.TorqueParams_Load);
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
             this.ResumeLayout(false);
             this.PerformLayout();
 
@@ -343,5 +357,6 @@
         private System.Windows.Forms.Label label6;
         private System.Windows.Forms.Label label7;
         private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.PictureBox pictureBox1;
     }
 }

BIN
Welling_Motor_Debug_Tool/bin/Debug/Format/ConsoleApp2.exe


+ 0 - 41
Welling_Motor_Debug_Tool/bin/Debug/Format/Test/HUB_NM010-6G-36V-250W_Test_V1.0.0.0.0_20240304_Test_20240319.ttcfg

@@ -1,41 +0,0 @@
-[生产信息]
-55 AA 07 51 16 22 24 20 54 54 49 55 4D 00 00 00 57 55 48 41 4E 00 00 00 32 30 32 32 30 31 30 31 47 46 5F 32 35 30 5F 31 CB 07 31 1A F0 
-[马达信息]
-55 AA 07 51 16 2A 3B 28 01 00 08 00 EC 04 7C C9 54 E7 C0 5D 00 00 63 FF 5C 03 FA 00 C4 09 68 01 E8 03 5F 00 00 00 00 00 00 00 00 00 00 00 00 00 57 7C 80 B6 F0 
-[整车参数]
-55 AA 07 51 16 1E 3D 1C 01 00 DB 00 43 11 19 00 05 00 26 00 0B 00 55 01 AA 02 06 26 00 00 02 00 0F 40 00 00 83 5C D7 47 F0 
-[控制参数]
-55 AA 07 51 16 24 3F 22 01 00 00 00 00 00 68 10 88 13 CC 01 2C 01 70 17 69 00 5A 00 5A 00 6E 00 5F 00 5F 00 00 00 00 00 00 00 44 D4 8E 3A F0 
-[其它传感器参数]
-55 AA 07 51 16 10 42 0E 01 00 26 00 01 00 00 00 00 00 00 00 00 00 D9 AC 08 2F F0 
-[助力参数]
-[曲线1]
-55 AA 07 51 16 52 44 50 01 00 00 00 FF 0F 00 10 01 00 01 00 00 00 00 00 00 00 00 00 00 08 00 00 89 00 00 00 00 00 00 00 00 00 00 00 10 27 00 00 00 00 00 00 32 00 32 00 14 00 BC 02 40 00 05 00 F4 01 19 00 1B 00 32 00 20 4E E0 B1 F4 01 E8 03 00 00 00 00 00 00 00 00 DA DF AB 71 F0 
-[曲线2]
-55 AA 07 51 16 52 44 50 01 00 00 00 FF 0F 00 10 02 00 02 00 00 00 00 00 00 00 00 00 9A 09 00 00 89 00 00 00 00 00 00 00 00 00 00 00 10 27 00 00 00 00 00 00 32 00 32 00 14 00 BC 02 40 00 05 00 F4 01 19 00 1B 00 32 00 20 4E E0 B1 F4 01 E8 03 00 00 00 00 00 00 00 00 40 65 13 DD F0 
-[曲线3]
-55 AA 07 51 16 52 44 50 01 00 00 00 FF 0F 00 10 03 00 03 00 00 00 00 00 00 00 00 00 33 0B 00 00 89 00 00 00 00 00 00 00 00 00 00 00 10 27 00 00 00 00 00 00 32 00 32 00 14 00 BC 02 40 00 05 00 F4 01 19 00 1B 00 32 00 20 4E E0 B1 F4 01 E8 03 00 00 00 00 00 00 00 00 50 AA BD 2C F0 
-[曲线4]
-55 AA 07 51 16 52 44 50 01 00 00 00 FF 0F 00 10 04 00 04 00 00 00 00 00 5C 1B 00 00 99 01 00 00 11 01 00 00 00 00 00 00 00 00 00 00 10 27 00 00 00 00 00 00 32 00 32 00 14 00 BC 02 40 00 05 00 F4 01 19 00 1B 00 32 00 20 4E E0 B1 F4 01 E8 03 00 00 00 00 00 00 00 00 CF 79 37 35 F0 
-[曲线5]
-55 AA 07 51 16 52 44 50 01 00 00 00 FF 0F 00 10 05 00 05 00 00 00 00 00 00 24 00 00 99 01 00 00 11 01 00 00 00 00 00 00 00 00 00 00 10 27 00 00 00 00 00 00 32 00 32 00 14 00 BC 02 40 00 05 00 F4 01 19 00 1B 00 32 00 20 4E E0 B1 F4 01 E8 03 00 00 00 00 00 00 00 00 32 D0 21 D2 F0 
-[曲线6]
-55 AA 07 51 16 52 44 50 01 00 00 00 FF 0F 00 10 06 00 05 00 00 00 00 00 85 2F 00 00 99 01 00 00 11 01 00 00 00 00 00 00 00 00 00 00 10 27 00 00 00 00 00 00 32 00 32 00 14 00 BC 02 40 00 05 00 F4 01 19 00 1B 00 32 00 20 4E E0 B1 F4 01 E8 03 00 00 00 00 00 00 00 00 0C 35 81 98 F0 
-[曲线7]
-55 AA 07 51 16 52 44 50 01 00 00 00 FF 0F 00 10 07 00 05 00 F6 0C 00 00 EC 3D 00 00 00 00 00 00 89 00 00 00 00 00 00 00 00 00 00 00 10 27 00 00 00 00 00 00 32 00 32 00 14 00 BC 02 40 00 05 00 F4 01 19 00 1B 00 32 00 20 4E E0 B1 F4 01 E8 03 00 00 00 00 00 00 00 00 BB CB D0 0A F0 
-[曲线8]
-55 AA 07 51 16 52 44 50 01 00 00 00 FF 0F 00 10 08 00 05 00 E1 26 00 00 14 52 00 00 00 00 00 00 89 00 00 00 00 00 00 00 00 00 00 00 10 27 00 00 00 00 00 00 32 00 32 00 14 00 BC 02 40 00 05 00 F4 01 19 00 1B 00 32 00 20 4E E0 B1 F4 01 E8 03 00 00 00 00 00 00 00 00 69 88 B4 83 F0 
-[曲线9]
-55 AA 07 51 16 52 44 50 01 00 00 00 FF 0F 00 10 09 00 05 00 8F 8E 00 00 47 59 00 00 00 00 00 00 89 00 00 00 00 00 00 00 00 00 00 00 10 27 00 00 00 00 00 00 32 00 32 00 14 00 BC 02 40 00 05 00 F4 01 19 00 1B 00 32 00 20 4E E0 B1 F4 01 E8 03 00 00 00 00 00 00 00 00 D5 BC DF 1C F0 
-[曲线10]
-55 AA 07 51 16 52 44 50 01 00 00 00 FF 0F 00 10 0A 00 05 00 33 03 01 00 33 73 00 00 00 00 00 00 89 00 00 00 00 00 00 00 00 00 00 00 10 27 00 00 00 00 00 00 32 00 32 00 14 00 BC 02 40 00 05 00 F4 01 19 00 1B 00 32 00 20 4E E0 B1 F4 01 E8 03 00 00 00 00 00 00 00 00 93 9E ED F4 F0 
-[曲线11]
-55 AA 07 51 16 52 44 50 01 00 00 00 FF 0F 00 10 0B 00 05 00 66 06 02 00 33 73 00 00 00 00 00 00 89 00 00 00 00 00 00 00 00 00 00 00 10 27 00 00 00 00 00 00 32 00 32 00 14 00 BC 02 40 00 05 00 F4 01 19 00 1B 00 32 00 20 4E E0 B1 F4 01 E8 03 00 00 00 00 00 00 00 00 8F AD 56 A2 F0 
-[曲线12]
-55 AA 07 51 16 52 44 50 01 00 00 00 FF 0F 00 10 0C 00 05 00 33 8B 03 00 33 73 00 00 00 00 00 00 89 00 00 00 00 00 00 00 00 00 00 00 10 27 00 00 00 00 00 00 32 00 32 00 14 00 BC 02 40 00 05 00 F4 01 19 00 1B 00 32 00 20 4E E0 B1 F4 01 E8 03 00 00 00 00 00 00 00 00 44 38 8D 16 F0 
-[曲线13]
-55 AA 07 51 16 52 44 50 01 00 00 00 FF 0F 00 10 0D 00 05 00 33 03 01 00 33 73 00 00 00 00 00 00 55 FD FF FF 00 00 00 00 00 00 00 00 10 27 00 00 00 00 00 00 32 00 32 00 14 00 BC 02 40 00 05 00 F4 01 19 00 1B 00 32 00 20 4E E0 B1 F4 01 E8 03 00 00 00 00 00 00 00 00 B1 A1 32 E8 F0 
-[曲线14]
-55 AA 07 51 16 52 44 50 01 00 00 00 FF 0F 00 10 0E 00 05 00 66 06 02 00 33 73 00 00 00 00 00 00 55 FD FF FF 00 00 00 00 00 00 00 00 10 27 00 00 00 00 00 00 32 00 32 00 14 00 BC 02 40 00 05 00 F4 01 19 00 1B 00 32 00 20 4E E0 B1 F4 01 E8 03 00 00 00 00 00 00 00 00 65 21 1C 29 F0 
-[曲线15]
-55 AA 07 51 16 52 44 50 01 00 00 00 FF 0F 00 10 0F 00 05 00 33 8B 03 00 33 73 00 00 00 00 00 00 55 FD FF FF 00 00 00 00 00 00 00 00 10 27 00 00 00 00 00 00 32 00 32 00 14 00 BC 02 40 00 05 00 F4 01 19 00 1B 00 32 00 20 4E E0 B1 F4 01 E8 03 00 00 00 00 00 00 00 00 F3 A1 64 93 F0 

BIN
Welling_Motor_Debug_Tool/bin/Debug/Welling_Motor_Debug_Tool.exe


BIN
Welling_Motor_Debug_Tool/bin/Debug/Welling_Motor_Debug_Tool.pdb


+ 57 - 17
Welling_Motor_Debug_Tool/mainForm.Designer.cs

@@ -550,6 +550,9 @@ namespace Welling_Motor_Debug_Tool
             this.label107 = new System.Windows.Forms.Label();
             this.label_StarInfo = new System.Windows.Forms.Label();
             this.pictureBox2 = new System.Windows.Forms.PictureBox();
+            this.屏幕键盘ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.checkBox_FacLocal = new System.Windows.Forms.CheckBox();
+            this.checkBox1 = new System.Windows.Forms.CheckBox();
             this.menuStrip_Set.SuspendLayout();
             this.statusStrip1.SuspendLayout();
             this.groupBox1.SuspendLayout();
@@ -749,14 +752,14 @@ namespace Welling_Motor_Debug_Tool
             // 开机ToolStripMenuItem
             // 
             this.开机ToolStripMenuItem.Name = "开机ToolStripMenuItem";
-            this.开机ToolStripMenuItem.Size = new System.Drawing.Size(112, 26);
+            this.开机ToolStripMenuItem.Size = new System.Drawing.Size(180, 26);
             this.开机ToolStripMenuItem.Text = "开机";
             this.开机ToolStripMenuItem.Click += new System.EventHandler(this.开机ToolStripMenuItem_Click);
             // 
             // 关机ToolStripMenuItem
             // 
             this.关机ToolStripMenuItem.Name = "关机ToolStripMenuItem";
-            this.关机ToolStripMenuItem.Size = new System.Drawing.Size(112, 26);
+            this.关机ToolStripMenuItem.Size = new System.Drawing.Size(180, 26);
             this.关机ToolStripMenuItem.Text = "关机";
             this.关机ToolStripMenuItem.Click += new System.EventHandler(this.关机ToolStripMenuItem_Click);
             // 
@@ -815,8 +818,8 @@ namespace Welling_Motor_Debug_Tool
             this.IP地址ToolStripMenuItem,
             this.端口ToolStripMenuItem,
             this.用户名ToolStripMenuItem,
-            this.存储路径ToolStripMenuItem,
-            this.密码ToolStripMenuItem});
+            this.密码ToolStripMenuItem,
+            this.存储路径ToolStripMenuItem});
             this.服务器配置ToolStripMenuItem.Name = "服务器配置ToolStripMenuItem";
             this.服务器配置ToolStripMenuItem.Size = new System.Drawing.Size(192, 26);
             this.服务器配置ToolStripMenuItem.Text = "FTP服务器配置";
@@ -826,7 +829,7 @@ namespace Welling_Motor_Debug_Tool
             this.IP地址ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.toolStripTextBox_ServerIP});
             this.IP地址ToolStripMenuItem.Name = "IP地址ToolStripMenuItem";
-            this.IP地址ToolStripMenuItem.Size = new System.Drawing.Size(144, 26);
+            this.IP地址ToolStripMenuItem.Size = new System.Drawing.Size(180, 26);
             this.IP地址ToolStripMenuItem.Text = "IP地址";
             // 
             // toolStripTextBox_ServerIP
@@ -842,7 +845,7 @@ namespace Welling_Motor_Debug_Tool
             this.端口ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.toolStripTextBox_ServerPort});
             this.端口ToolStripMenuItem.Name = "端口ToolStripMenuItem";
-            this.端口ToolStripMenuItem.Size = new System.Drawing.Size(144, 26);
+            this.端口ToolStripMenuItem.Size = new System.Drawing.Size(180, 26);
             this.端口ToolStripMenuItem.Text = "端口";
             // 
             // toolStripTextBox_ServerPort
@@ -858,7 +861,7 @@ namespace Welling_Motor_Debug_Tool
             this.用户名ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.toolStripTextBox_ServerUser});
             this.用户名ToolStripMenuItem.Name = "用户名ToolStripMenuItem";
-            this.用户名ToolStripMenuItem.Size = new System.Drawing.Size(144, 26);
+            this.用户名ToolStripMenuItem.Size = new System.Drawing.Size(180, 26);
             this.用户名ToolStripMenuItem.Text = "用户名";
             // 
             // toolStripTextBox_ServerUser
@@ -866,7 +869,7 @@ namespace Welling_Motor_Debug_Tool
             this.toolStripTextBox_ServerUser.Font = new System.Drawing.Font("Microsoft YaHei UI", 12F);
             this.toolStripTextBox_ServerUser.Name = "toolStripTextBox_ServerUser";
             this.toolStripTextBox_ServerUser.Size = new System.Drawing.Size(200, 28);
-            this.toolStripTextBox_ServerUser.Text = "factory_test";
+            this.toolStripTextBox_ServerUser.Text = "factory_test_admin";
             this.toolStripTextBox_ServerUser.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ConfigFileSave_KeyDown);
             // 
             // 存储路径ToolStripMenuItem
@@ -874,7 +877,7 @@ namespace Welling_Motor_Debug_Tool
             this.存储路径ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.toolStripTextBox_ServerPath});
             this.存储路径ToolStripMenuItem.Name = "存储路径ToolStripMenuItem";
-            this.存储路径ToolStripMenuItem.Size = new System.Drawing.Size(144, 26);
+            this.存储路径ToolStripMenuItem.Size = new System.Drawing.Size(180, 26);
             this.存储路径ToolStripMenuItem.Text = "存储路径";
             // 
             // toolStripTextBox_ServerPath
@@ -890,7 +893,7 @@ namespace Welling_Motor_Debug_Tool
             this.密码ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.toolStripTextBox_ServerPasswd});
             this.密码ToolStripMenuItem.Name = "密码ToolStripMenuItem";
-            this.密码ToolStripMenuItem.Size = new System.Drawing.Size(144, 26);
+            this.密码ToolStripMenuItem.Size = new System.Drawing.Size(180, 26);
             this.密码ToolStripMenuItem.Text = "密码";
             // 
             // toolStripTextBox_ServerPasswd
@@ -898,7 +901,7 @@ namespace Welling_Motor_Debug_Tool
             this.toolStripTextBox_ServerPasswd.Font = new System.Drawing.Font("Microsoft YaHei UI", 12F);
             this.toolStripTextBox_ServerPasswd.Name = "toolStripTextBox_ServerPasswd";
             this.toolStripTextBox_ServerPasswd.Size = new System.Drawing.Size(200, 28);
-            this.toolStripTextBox_ServerPasswd.Text = "ttium";
+            this.toolStripTextBox_ServerPasswd.Text = "ttium_admin";
             this.toolStripTextBox_ServerPasswd.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ConfigFileSave_KeyDown);
             // 
             // 生产信息ToolStripMenuItem
@@ -1174,6 +1177,7 @@ namespace Welling_Motor_Debug_Tool
             this.运行信息记录ToolStripMenuItem,
             this.计算器ToolStripMenuItem,
             this.页面保存ToolStripMenuItem,
+            this.屏幕键盘ToolStripMenuItem,
             this.指令调试ToolStripMenuItem});
             this.工具箱ToolStripMenuItem.ForeColor = System.Drawing.Color.White;
             this.工具箱ToolStripMenuItem.Name = "工具箱ToolStripMenuItem";
@@ -1183,21 +1187,21 @@ namespace Welling_Motor_Debug_Tool
             // 运行信息记录ToolStripMenuItem
             // 
             this.运行信息记录ToolStripMenuItem.Name = "运行信息记录ToolStripMenuItem";
-            this.运行信息记录ToolStripMenuItem.Size = new System.Drawing.Size(144, 26);
+            this.运行信息记录ToolStripMenuItem.Size = new System.Drawing.Size(180, 26);
             this.运行信息记录ToolStripMenuItem.Text = "自动记录";
             this.运行信息记录ToolStripMenuItem.Click += new System.EventHandler(this.记录数据ToolStripMenuItem_Click);
             // 
             // 计算器ToolStripMenuItem
             // 
             this.计算器ToolStripMenuItem.Name = "计算器ToolStripMenuItem";
-            this.计算器ToolStripMenuItem.Size = new System.Drawing.Size(144, 26);
+            this.计算器ToolStripMenuItem.Size = new System.Drawing.Size(180, 26);
             this.计算器ToolStripMenuItem.Text = "计算器";
             this.计算器ToolStripMenuItem.Click += new System.EventHandler(this.计算器ToolStripMenuItem_Click);
             // 
             // 页面保存ToolStripMenuItem
             // 
             this.页面保存ToolStripMenuItem.Name = "页面保存ToolStripMenuItem";
-            this.页面保存ToolStripMenuItem.Size = new System.Drawing.Size(144, 26);
+            this.页面保存ToolStripMenuItem.Size = new System.Drawing.Size(180, 26);
             this.页面保存ToolStripMenuItem.Text = "页面保存";
             this.页面保存ToolStripMenuItem.Click += new System.EventHandler(this.页面保存ToolStripMenuItem_Click);
             // 
@@ -1205,7 +1209,7 @@ namespace Welling_Motor_Debug_Tool
             // 
             this.指令调试ToolStripMenuItem.Enabled = false;
             this.指令调试ToolStripMenuItem.Name = "指令调试ToolStripMenuItem";
-            this.指令调试ToolStripMenuItem.Size = new System.Drawing.Size(144, 26);
+            this.指令调试ToolStripMenuItem.Size = new System.Drawing.Size(180, 26);
             this.指令调试ToolStripMenuItem.Text = "指令调试";
             // 
             // 查询ToolStripMenuItem
@@ -4300,6 +4304,7 @@ namespace Welling_Motor_Debug_Tool
             this.tabPage_ProductMode_Write.Controls.Add(this.textBox_FacModeScan);
             this.tabPage_ProductMode_Write.Controls.Add(this.label112);
             this.tabPage_ProductMode_Write.Controls.Add(this.label_FacModeStatus);
+            this.tabPage_ProductMode_Write.Controls.Add(this.checkBox_FacLocal);
             this.tabPage_ProductMode_Write.Controls.Add(this.label_FacModeResult);
             this.tabPage_ProductMode_Write.Controls.Add(this.label111);
             this.tabPage_ProductMode_Write.Location = new System.Drawing.Point(4, 30);
@@ -4760,7 +4765,7 @@ namespace Welling_Motor_Debug_Tool
             this.comboBox_FacModeCfgFile.FormattingEnabled = true;
             this.comboBox_FacModeCfgFile.Location = new System.Drawing.Point(235, 6);
             this.comboBox_FacModeCfgFile.Name = "comboBox_FacModeCfgFile";
-            this.comboBox_FacModeCfgFile.Size = new System.Drawing.Size(746, 29);
+            this.comboBox_FacModeCfgFile.Size = new System.Drawing.Size(680, 29);
             this.comboBox_FacModeCfgFile.TabIndex = 8;
             // 
             // comboBox_FacModeCfgDate
@@ -4990,6 +4995,7 @@ namespace Welling_Motor_Debug_Tool
             // tabPage_ProductMode_Read
             // 
             this.tabPage_ProductMode_Read.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
+            this.tabPage_ProductMode_Read.Controls.Add(this.checkBox1);
             this.tabPage_ProductMode_Read.Controls.Add(this.comboBox_CheckModeCfgFile);
             this.tabPage_ProductMode_Read.Controls.Add(this.groupBox31);
             this.tabPage_ProductMode_Read.Controls.Add(this.comboBox_CheckModeCfgDate);
@@ -5015,7 +5021,7 @@ namespace Welling_Motor_Debug_Tool
             this.comboBox_CheckModeCfgFile.FormattingEnabled = true;
             this.comboBox_CheckModeCfgFile.Location = new System.Drawing.Point(235, 6);
             this.comboBox_CheckModeCfgFile.Name = "comboBox_CheckModeCfgFile";
-            this.comboBox_CheckModeCfgFile.Size = new System.Drawing.Size(746, 29);
+            this.comboBox_CheckModeCfgFile.Size = new System.Drawing.Size(680, 29);
             this.comboBox_CheckModeCfgFile.TabIndex = 18;
             // 
             // groupBox31
@@ -6220,6 +6226,37 @@ namespace Welling_Motor_Debug_Tool
             this.pictureBox2.TabIndex = 16;
             this.pictureBox2.TabStop = false;
             // 
+            // 屏幕键盘ToolStripMenuItem
+            // 
+            this.屏幕键盘ToolStripMenuItem.Name = "屏幕键盘ToolStripMenuItem";
+            this.屏幕键盘ToolStripMenuItem.Size = new System.Drawing.Size(180, 26);
+            this.屏幕键盘ToolStripMenuItem.Text = "屏幕键盘";
+            this.屏幕键盘ToolStripMenuItem.Click += new System.EventHandler(this.屏幕键盘ToolStripMenuItem_Click);
+            // 
+            // checkBox_FacLocal
+            // 
+            this.checkBox_FacLocal.AutoSize = true;
+            this.checkBox_FacLocal.Enabled = false;
+            this.checkBox_FacLocal.Font = new System.Drawing.Font("Microsoft YaHei UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.checkBox_FacLocal.Location = new System.Drawing.Point(920, 8);
+            this.checkBox_FacLocal.Name = "checkBox_FacLocal";
+            this.checkBox_FacLocal.Size = new System.Drawing.Size(61, 25);
+            this.checkBox_FacLocal.TabIndex = 0;
+            this.checkBox_FacLocal.Text = "本地";
+            this.checkBox_FacLocal.UseVisualStyleBackColor = true;
+            // 
+            // checkBox1
+            // 
+            this.checkBox1.AutoSize = true;
+            this.checkBox1.Enabled = false;
+            this.checkBox1.Font = new System.Drawing.Font("Microsoft YaHei UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.checkBox1.Location = new System.Drawing.Point(920, 8);
+            this.checkBox1.Name = "checkBox1";
+            this.checkBox1.Size = new System.Drawing.Size(61, 25);
+            this.checkBox1.TabIndex = 21;
+            this.checkBox1.Text = "本地";
+            this.checkBox1.UseVisualStyleBackColor = true;
+            // 
             // mainForm
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
@@ -6874,5 +6911,8 @@ namespace Welling_Motor_Debug_Tool
         private ToolStripTextBox toolStripTextBox_ThT_Motor;
         private PictureBox pictureBox_WriteLock;
         private PictureBox pictureBox_ReadLock;
+        private ToolStripMenuItem 屏幕键盘ToolStripMenuItem;
+        private CheckBox checkBox_FacLocal;
+        private CheckBox checkBox1;
     }
 }

+ 43 - 6
Welling_Motor_Debug_Tool/mainForm.cs

@@ -141,6 +141,18 @@ namespace Welling_Motor_Debug_Tool
             {
                 Directory.CreateDirectory(localInfo.LocalPath);
             }
+            if (!Directory.Exists(localInfo.ConfigFilePath))
+            {
+                Directory.CreateDirectory(localInfo.ConfigFilePath);
+            }
+            if (!Directory.Exists(localInfo.LocalDataPath))
+            {
+                Directory.CreateDirectory(localInfo.LocalDataPath);
+            }
+            if (!Directory.Exists(localInfo.ToolsPath))
+            {
+                Directory.CreateDirectory(localInfo.ToolsPath);
+            }
             if (File.Exists(localInfo.LocalPath + localInfo.ConfigFileName)) //存在配置文件,导入配置信息
             {
                 //打开文件
@@ -5224,12 +5236,12 @@ namespace Welling_Motor_Debug_Tool
             if (OK_Flag)
             {
                 LocalSavePath = localInfo.LocalDataPath + localInfo.WalkLogPathName + "OK\\";
-                ServerSavePath = toolStripTextBox_ServerPath + "/funcTest/OK/";                
+                ServerSavePath = toolStripTextBox_ServerPath.Text + "/funcTest/OK/";                
             }
             else
             {
                 LocalSavePath = localInfo.LocalDataPath + localInfo.WalkLogPathName + "FAIL\\";
-                ServerSavePath = toolStripTextBox_ServerPath + "/funcTest/FAIL/";
+                ServerSavePath = toolStripTextBox_ServerPath.Text + "/funcTest/FAIL/";
             }
             if (Directory.Exists(LocalSavePath) == false)
             {
@@ -5267,6 +5279,10 @@ namespace Welling_Motor_Debug_Tool
                 if (result == true)
                     richTextBox_FacModeLog.Text += DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + "测试页面上传服务器成功" + "\r\n";
             }
+            else
+            {
+                richTextBox_FacModeLog.Text += DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + "服务器断开" + "\r\n";
+            }
             //测试记录
             LogSaveFileName = LogSavePath + "\\" + ProductInfo + "_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + "_测试记录" + ".log";
             string file_str = "";
@@ -5290,6 +5306,10 @@ namespace Welling_Motor_Debug_Tool
                 if (result == true)
                     richTextBox_FacModeLog.Text += DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + "测试记录上传服务器成功" + "\r\n";
             }
+            else
+            {
+                richTextBox_FacModeLog.Text += DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "->" + "服务器断开" + "\r\n";
+            }
 
         }
 
@@ -5300,7 +5320,7 @@ namespace Welling_Motor_Debug_Tool
         /// <param name="e"></param>
         private void button__FacMode_Start_Click(object sender, EventArgs e)
         {
-            //关闭测试项目编
+            //关闭测试项目编
             pictureBox_WriteLock.Image = global::Welling_Motor_Debug_Tool.Properties.Resources.Lock;
             foreach (Control c in groupBox2.Controls)
             {
@@ -5311,7 +5331,13 @@ namespace Welling_Motor_Debug_Tool
             //检查串口
             if (!mySerialProcess.mySerial.IsOpen)
             {
-                MessageBox.Show("请检查串口连接!!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+                MessageBox.Show("请检查串口连接!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+                return;
+            }
+            //检查配置文件
+            if (comboBox_FacModeCfgFile.Text == "")
+            {
+                MessageBox.Show("请选择配置文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                 return;
             }
             //开始测试
@@ -6502,12 +6528,12 @@ namespace Welling_Motor_Debug_Tool
             if (OK_Flag)
             {
                 LocalSavePath = localInfo.LocalDataPath + localInfo.CheckPathName + "OK\\";
-                ServerSavePath = toolStripTextBox_ServerPath + "/qcTest/OK/";
+                ServerSavePath = toolStripTextBox_ServerPath.Text + "/qcTest/OK/";
             }
             else
             {
                 LocalSavePath = localInfo.LocalDataPath + localInfo.CheckPathName + "FAIL\\";
-                ServerSavePath = toolStripTextBox_ServerPath + "/qcTest/FAIL/";
+                ServerSavePath = toolStripTextBox_ServerPath.Text + "/qcTest/FAIL/";
             }
             if (Directory.Exists(LocalSavePath) == false)
             {
@@ -6592,6 +6618,12 @@ namespace Welling_Motor_Debug_Tool
                 MessageBox.Show("请检查串口连接!!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                 return;
             }
+            //检查配置文件
+            if (comboBox_CheckModeCfgFile.Text == "")
+            {
+                MessageBox.Show("请选择配置文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+                return;
+            }
             //开始测试
             CheckTestStart();
         }
@@ -7286,5 +7318,10 @@ namespace Welling_Motor_Debug_Tool
             }
 
         }
+
+        private void 屏幕键盘ToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            System.Diagnostics.Process.Start("osk.exe");
+        }
     }
 }

BIN
Welling_Motor_Debug_Tool/obj/Debug/Welling_Motor_Debug_Tool.GenerateParams.resources


+ 3 - 3
Welling_Motor_Debug_Tool/obj/Debug/Welling_Motor_Debug_Tool.csproj.FileListAbsolute.txt

@@ -54,9 +54,6 @@ D:\Documents\Work\SoftDesign\Welling-MidMotor\Welling_Motor_Debug_Tool\obj\Debug
 D:\Documents\Work\SoftDesign\Welling-MidMotor\Welling_Motor_Debug_Tool\obj\Debug\Welling_Motor_Debug_Tool.csproj.CoreCompileInputs.cache
 D:\Documents\Work\SoftDesign\Welling-MidMotor\Welling_Motor_Debug_Tool\obj\Debug\Welling_Motor_Debug_Tool.exe
 D:\Documents\Work\SoftDesign\Welling-MidMotor\Welling_Motor_Debug_Tool\obj\Debug\Welling_Motor_Debug_Tool.pdb
-D:\笔记本20221223\zhouxiong9\Documents\Tools\motor-debug\Welling_Motor_Debug_Tool\bin\Debug\Welling_Motor_Debug_Tool.exe.config
-D:\笔记本20221223\zhouxiong9\Documents\Tools\motor-debug\Welling_Motor_Debug_Tool\bin\Debug\Welling_Motor_Debug_Tool.exe
-D:\笔记本20221223\zhouxiong9\Documents\Tools\motor-debug\Welling_Motor_Debug_Tool\bin\Debug\Welling_Motor_Debug_Tool.pdb
 D:\笔记本20221223\zhouxiong9\Documents\Tools\motor-debug\Welling_Motor_Debug_Tool\obj\Debug\Welling_Motor_Debug_Tool.csproj.AssemblyReference.cache
 D:\笔记本20221223\zhouxiong9\Documents\Tools\motor-debug\Welling_Motor_Debug_Tool\obj\Debug\Welling_Motor_Debug_Tool.csproj.SuggestedBindingRedirects.cache
 D:\笔记本20221223\zhouxiong9\Documents\Tools\motor-debug\Welling_Motor_Debug_Tool\obj\Debug\Welling_Motor_Debug_Tool.GenerateParams.resources
@@ -67,5 +64,8 @@ D:\笔记本20221223\zhouxiong9\Documents\Tools\motor-debug\Welling_Motor_Debug_
 D:\笔记本20221223\zhouxiong9\Documents\Tools\motor-debug\Welling_Motor_Debug_Tool\obj\Debug\Welling_Motor_Debug_Tool.TorqueParams.resources
 D:\笔记本20221223\zhouxiong9\Documents\Tools\motor-debug\Welling_Motor_Debug_Tool\obj\Debug\Welling_Motor_Debug_Tool.csproj.GenerateResource.cache
 D:\笔记本20221223\zhouxiong9\Documents\Tools\motor-debug\Welling_Motor_Debug_Tool\obj\Debug\Welling_Motor_Debug_Tool.csproj.CoreCompileInputs.cache
+D:\笔记本20221223\zhouxiong9\Documents\Tools\motor-debug\Welling_Motor_Debug_Tool\bin\Debug\Welling_Motor_Debug_Tool.exe.config
+D:\笔记本20221223\zhouxiong9\Documents\Tools\motor-debug\Welling_Motor_Debug_Tool\bin\Debug\Welling_Motor_Debug_Tool.exe
+D:\笔记本20221223\zhouxiong9\Documents\Tools\motor-debug\Welling_Motor_Debug_Tool\bin\Debug\Welling_Motor_Debug_Tool.pdb
 D:\笔记本20221223\zhouxiong9\Documents\Tools\motor-debug\Welling_Motor_Debug_Tool\obj\Debug\Welling_Motor_Debug_Tool.exe
 D:\笔记本20221223\zhouxiong9\Documents\Tools\motor-debug\Welling_Motor_Debug_Tool\obj\Debug\Welling_Motor_Debug_Tool.pdb

BIN
Welling_Motor_Debug_Tool/obj/Debug/Welling_Motor_Debug_Tool.csproj.GenerateResource.cache


BIN
Welling_Motor_Debug_Tool/obj/Debug/Welling_Motor_Debug_Tool.exe


BIN
Welling_Motor_Debug_Tool/obj/Debug/Welling_Motor_Debug_Tool.pdb