diff --git a/ComputerResourceConsole.csproj b/ComputerResourceConsole.csproj index e43dc36f1f1714390933b628be8b52e4071a1ae7..16fe398d1e2027c33ef1cadad626c19e2c25ff28 100644 --- a/ComputerResourceConsole.csproj +++ b/ComputerResourceConsole.csproj @@ -106,6 +106,7 @@ + @@ -114,6 +115,8 @@ + + @@ -126,6 +129,7 @@ + diff --git a/ComputerResourceConsole.suo b/ComputerResourceConsole.suo index f6402ae8443d459c8ce7722070edef10d5927e65..771fc59e247f40936513a7c9534ddb36fc08a2e2 100644 Binary files a/ComputerResourceConsole.suo and b/ComputerResourceConsole.suo differ diff --git a/control/ModelServiceDebuggerControl.cs b/control/ModelServiceDebuggerControl.cs index bcdca12673bbd97d7278744954a0fb4935618fe0..0bc378e5d82550360f404ef8c9e1433cd12dcb73 100644 --- a/control/ModelServiceDebuggerControl.cs +++ b/control/ModelServiceDebuggerControl.cs @@ -29,33 +29,33 @@ namespace ComputerResourceConsole.control public class ModelServiceDebuggerControl : ComponentControl, IModelServiceDebuggerControl { - private IModelServiceDebuggerOpera _msDebuggerOpera = null; + private IModelServiceDebuggerOpera _pDebuggerOpera = null; private ModelClass _mdl = null; private List _dataConfig = null; public ModelServiceDebuggerControl():base() { - this._msDebuggerOpera = ComponentOperaFactory.createModelServiceDebuggerOpera(); + this._pDebuggerOpera = ComponentOperaFactory.createModelServiceDebuggerOpera(); this._dataConfig = new List(); - this._msDebuggerOpera.FilePath = _pConfig.NodejsPath; + this._pDebuggerOpera.FilePath = _pConfig.NodejsPath; } public int start(CommonMethod.CommonEvent exit) { this._status = "Started"; - return this._msDebuggerOpera.start(exit); + return this._pDebuggerOpera.start(exit); } public int stop() { this._status = "Stopped"; - return this._msDebuggerOpera.stop(); + return this._pDebuggerOpera.stop(); } public int restart(CommonMethod.CommonEvent exit) { - this._msDebuggerOpera.stop(); - int flag = this._msDebuggerOpera.start(exit); + this._pDebuggerOpera.stop(); + int flag = this._pDebuggerOpera.start(exit); this._status = "Started"; return flag; } @@ -66,7 +66,7 @@ namespace ComputerResourceConsole.control { this._mdl = new ModelClass(); this._mdl.LoadFromXmlFile(mdlPath); - this._msDebuggerOpera.MDLPath = mdlPath; + this._pDebuggerOpera.MDLPath = mdlPath; } catch (Exception ex) { @@ -217,11 +217,11 @@ namespace ComputerResourceConsole.control public bool formatToFile() { - if (this._msDebuggerOpera.DataConfigPath == "") + if (this._pDebuggerOpera.DataConfigPath == "") { return false; } - return this.formatToFile(this._msDebuggerOpera.DataConfigPath); + return this.formatToFile(this._pDebuggerOpera.DataConfigPath); } public bool MDLLoading @@ -267,7 +267,7 @@ namespace ComputerResourceConsole.control { System.IO.Directory.CreateDirectory(path); } - this._msDebuggerOpera.DataConfigPath = path + "data.config"; + this._pDebuggerOpera.DataConfigPath = path + "data.config"; return true; } catch (Exception ex) @@ -282,11 +282,11 @@ namespace ComputerResourceConsole.control { get { - return this._msDebuggerOpera.Host; + return this._pDebuggerOpera.Host; } set { - this._msDebuggerOpera.Host = value; + this._pDebuggerOpera.Host = value; } } @@ -294,11 +294,11 @@ namespace ComputerResourceConsole.control { get { - return this._msDebuggerOpera.Port; + return this._pDebuggerOpera.Port; } set { - this._msDebuggerOpera.Port = value; + this._pDebuggerOpera.Port = value; } } @@ -307,11 +307,11 @@ namespace ComputerResourceConsole.control { get { - return this._msDebuggerOpera.InstanceID; + return this._pDebuggerOpera.InstanceID; } set { - this._msDebuggerOpera.InstanceID = value; + this._pDebuggerOpera.InstanceID = value; } } } diff --git a/control/PackingControl.cs b/control/PackingControl.cs new file mode 100644 index 0000000000000000000000000000000000000000..4b98b3c6965e0a90a170e64e7ff6be91a6e7dc81 --- /dev/null +++ b/control/PackingControl.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using ComputerResourceConsole.lib; +using ComputerResourceConsole.common; +using ComputerResourceConsole.factory; +using ComputerResourceConsole.control; +using System.IO; + +public class PackingControl : ComponentControl, IPackingControl +{ + private IPackingOpera _pPackingOpera = null; + + public PackingControl(): base() + { + this._pPackingOpera = ComponentOperaFactory.createPackingOpera(); + this._pPackingOpera.FilePath = this._pConfig.NodejsPath; + } + + public int start(CommonMethod.CommonEvent exit) + { + this._status = "Started"; + return this._pPackingOpera.start(exit); + } + + public int stop() + { + this._status = "Stopped"; + return this._pPackingOpera.stop(); + } + + public int restart(CommonMethod.CommonEvent exit) + { + this._pPackingOpera.stop(); + int flag = this._pPackingOpera.start(exit); + this._status = "Started"; + return flag; + } + + public string ConfigPath + { + get + { + return this._pPackingOpera.ConfigPath; + } + set + { + this._pPackingOpera.ConfigPath = value; + } + } +} \ No newline at end of file diff --git a/factory/ComponentControlFactory.cs b/factory/ComponentControlFactory.cs index 9135c011cdfa5b54551bc462c15eb8c982f3540e..2e00c5fe3ceb3e1d95126da5a550be5d44215f08 100644 --- a/factory/ComponentControlFactory.cs +++ b/factory/ComponentControlFactory.cs @@ -34,6 +34,10 @@ namespace ComputerResourceConsole.factory { return new ModelServiceDebuggerControl(); } + public static IPackingControl createPackingControl() + { + return new PackingControl(); + } public static IContainerAdvancedControl createContainerAdvancedControl() { diff --git a/factory/ComponentOperaFactory.cs b/factory/ComponentOperaFactory.cs index 6ac60918488dad80bfb0f6d5dbedad27b0949831..723ba9738366bc1bff7c6b44dd759108633cb1d5 100644 --- a/factory/ComponentOperaFactory.cs +++ b/factory/ComponentOperaFactory.cs @@ -39,5 +39,10 @@ namespace ComputerResourceConsole.factory { return new ModelServiceDebuggerOpera(); } + + public static IPackingOpera createPackingOpera() + { + return new PackingOpera(); + } } } diff --git a/lib/IPackingControl.cs b/lib/IPackingControl.cs new file mode 100644 index 0000000000000000000000000000000000000000..319ed145f4763bdfc21fb9e71345305332567b3a --- /dev/null +++ b/lib/IPackingControl.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ComputerResourceConsole.lib +{ + public interface IPackingControl : IComponentControl + { + string ConfigPath + { + get; + set; + } + } +} diff --git a/lib/IPackingOpera.cs b/lib/IPackingOpera.cs new file mode 100644 index 0000000000000000000000000000000000000000..6261b80c1e6e43599ab30cf15fbf62e0e3c70e37 --- /dev/null +++ b/lib/IPackingOpera.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ComputerResourceConsole.lib +{ + public interface IPackingOpera : IComponentOpera + { + string ConfigPath + { + get; + set; + } + } +} diff --git a/model/PackingOpera.cs b/model/PackingOpera.cs new file mode 100644 index 0000000000000000000000000000000000000000..4c855cd3d9e6b0976e6fdaed0f084e7d933fb1dd --- /dev/null +++ b/model/PackingOpera.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using ComputerResourceConsole.lib; +using ComputerResourceConsole.common; + +namespace ComputerResourceConsole.model +{ + public class PackingOpera : ComponentOperaBase, IPackingOpera + { + private string _configpath; + + public PackingOpera() + { + this._configpath = ""; + } + + public string ConfigPath + { + get + { + return this._configpath; + } + set + { + this._configpath = value; + } + } + + public override string Arguments + { + get + { + return "5 " + this._configpath; + } + } + } +} diff --git a/view/frm_console.cs b/view/frm_console.cs index 308191a22475237b550a166ffe177fb99a0cc475..46cb65bc71bb5ea87f134547e7e717850d2b3e92 100644 --- a/view/frm_console.cs +++ b/view/frm_console.cs @@ -234,10 +234,6 @@ namespace ComputerResourceConsole this._frm_debugger.Show(); } - private void containerVersionCheckToolStripMenuItem_Click(object sender, EventArgs e) - { - } - private void batchDeploymentToolStripMenuItem_Click(object sender, EventArgs e) { diff --git a/view/frm_packing.Designer.cs b/view/frm_packing.Designer.cs index 20616b01d2986e5fc6523113f2cf41e8e5a3f881..02bd3716ff774af30b24affb506435e1b0b1a6da 100644 --- a/view/frm_packing.Designer.cs +++ b/view/frm_packing.Designer.cs @@ -28,6 +28,8 @@ /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frm_packing)); this.gb_programming = new System.Windows.Forms.GroupBox(); this.rb_programming_python = new System.Windows.Forms.RadioButton(); this.rb_programming_cs = new System.Windows.Forms.RadioButton(); @@ -39,17 +41,27 @@ this.bt_pickWrappingFile = new System.Windows.Forms.Button(); this.bt_packing = new System.Windows.Forms.Button(); this.bt_close = new System.Windows.Forms.Button(); - this.tb_wappingfilepath = new System.Windows.Forms.TextBox(); + this.tb_wrappingfilepath = new System.Windows.Forms.TextBox(); this.gb_pick_wrappingfile = new System.Windows.Forms.GroupBox(); this.ss_packing = new System.Windows.Forms.StatusStrip(); this.gb_relatedfiles = new System.Windows.Forms.GroupBox(); - this.dgv_files = new System.Windows.Forms.DataGridView(); - this.bt_addFile = new System.Windows.Forms.Button(); this.bt_addFolder = new System.Windows.Forms.Button(); + this.bt_addFile = new System.Windows.Forms.Button(); + this.dgv_files = new System.Windows.Forms.DataGridView(); + this.dgv_co_files = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.gb_mdl = new System.Windows.Forms.GroupBox(); this.tb_mdlpath = new System.Windows.Forms.TextBox(); this.bt_pickMDLFile = new System.Windows.Forms.Button(); - this.dgv_co_files = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.cms_delete = new System.Windows.Forms.ContextMenuStrip(this.components); + this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.gb_information = new System.Windows.Forms.GroupBox(); + this.tb_author = new System.Windows.Forms.TextBox(); + this.tb_modelName = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.tb_savepath = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.bt_outputpath = new System.Windows.Forms.Button(); this.gb_programming.SuspendLayout(); this.gb_license.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.fileSystemWatcher1)).BeginInit(); @@ -57,13 +69,15 @@ this.gb_relatedfiles.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.dgv_files)).BeginInit(); this.gb_mdl.SuspendLayout(); + this.cms_delete.SuspendLayout(); + this.gb_information.SuspendLayout(); this.SuspendLayout(); // // gb_programming // this.gb_programming.Controls.Add(this.rb_programming_python); this.gb_programming.Controls.Add(this.rb_programming_cs); - this.gb_programming.Location = new System.Drawing.Point(10, 10); + this.gb_programming.Location = new System.Drawing.Point(10, 118); this.gb_programming.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); this.gb_programming.Name = "gb_programming"; this.gb_programming.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3); @@ -84,6 +98,7 @@ this.rb_programming_python.TabStop = true; this.rb_programming_python.Text = "Python"; this.rb_programming_python.UseVisualStyleBackColor = true; + this.rb_programming_python.CheckedChanged += new System.EventHandler(this.rb_programming_python_CheckedChanged); // // rb_programming_cs // @@ -96,13 +111,14 @@ this.rb_programming_cs.TabStop = true; this.rb_programming_cs.Text = "C#"; this.rb_programming_cs.UseVisualStyleBackColor = true; + this.rb_programming_cs.CheckedChanged += new System.EventHandler(this.rb_programming_python_CheckedChanged); // // gb_license // this.gb_license.Controls.Add(this.rb_license_gpl); this.gb_license.Controls.Add(this.rb_license_apache); this.gb_license.Controls.Add(this.rb_license_MIT); - this.gb_license.Location = new System.Drawing.Point(10, 99); + this.gb_license.Location = new System.Drawing.Point(10, 207); this.gb_license.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); this.gb_license.Name = "gb_license"; this.gb_license.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3); @@ -166,7 +182,7 @@ // // bt_packing // - this.bt_packing.Location = new System.Drawing.Point(192, 593); + this.bt_packing.Location = new System.Drawing.Point(197, 772); this.bt_packing.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); this.bt_packing.Name = "bt_packing"; this.bt_packing.Size = new System.Drawing.Size(133, 30); @@ -177,7 +193,7 @@ // // bt_close // - this.bt_close.Location = new System.Drawing.Point(348, 593); + this.bt_close.Location = new System.Drawing.Point(353, 772); this.bt_close.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); this.bt_close.Name = "bt_close"; this.bt_close.Size = new System.Drawing.Size(133, 30); @@ -186,20 +202,20 @@ this.bt_close.UseVisualStyleBackColor = true; this.bt_close.Click += new System.EventHandler(this.bt_close_Click); // - // tb_wappingfilepath + // tb_wrappingfilepath // - this.tb_wappingfilepath.Enabled = false; - this.tb_wappingfilepath.Location = new System.Drawing.Point(5, 31); - this.tb_wappingfilepath.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); - this.tb_wappingfilepath.Name = "tb_wappingfilepath"; - this.tb_wappingfilepath.Size = new System.Drawing.Size(539, 28); - this.tb_wappingfilepath.TabIndex = 7; + this.tb_wrappingfilepath.Enabled = false; + this.tb_wrappingfilepath.Location = new System.Drawing.Point(5, 31); + this.tb_wrappingfilepath.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); + this.tb_wrappingfilepath.Name = "tb_wrappingfilepath"; + this.tb_wrappingfilepath.Size = new System.Drawing.Size(539, 28); + this.tb_wrappingfilepath.TabIndex = 7; // // gb_pick_wrappingfile // - this.gb_pick_wrappingfile.Controls.Add(this.tb_wappingfilepath); + this.gb_pick_wrappingfile.Controls.Add(this.tb_wrappingfilepath); this.gb_pick_wrappingfile.Controls.Add(this.bt_pickWrappingFile); - this.gb_pick_wrappingfile.Location = new System.Drawing.Point(10, 176); + this.gb_pick_wrappingfile.Location = new System.Drawing.Point(10, 284); this.gb_pick_wrappingfile.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); this.gb_pick_wrappingfile.Name = "gb_pick_wrappingfile"; this.gb_pick_wrappingfile.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3); @@ -210,7 +226,7 @@ // // ss_packing // - this.ss_packing.Location = new System.Drawing.Point(0, 636); + this.ss_packing.Location = new System.Drawing.Point(0, 821); this.ss_packing.Name = "ss_packing"; this.ss_packing.Padding = new System.Windows.Forms.Padding(1, 0, 11, 0); this.ss_packing.Size = new System.Drawing.Size(673, 22); @@ -222,7 +238,7 @@ this.gb_relatedfiles.Controls.Add(this.bt_addFolder); this.gb_relatedfiles.Controls.Add(this.bt_addFile); this.gb_relatedfiles.Controls.Add(this.dgv_files); - this.gb_relatedfiles.Location = new System.Drawing.Point(11, 340); + this.gb_relatedfiles.Location = new System.Drawing.Point(11, 448); this.gb_relatedfiles.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); this.gb_relatedfiles.Name = "gb_relatedfiles"; this.gb_relatedfiles.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3); @@ -231,18 +247,16 @@ this.gb_relatedfiles.TabStop = false; this.gb_relatedfiles.Text = "Related Files"; // - // dgv_files + // bt_addFolder // - this.dgv_files.AllowUserToAddRows = false; - this.dgv_files.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.dgv_files.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dgv_co_files}); - this.dgv_files.Location = new System.Drawing.Point(5, 27); - this.dgv_files.Name = "dgv_files"; - this.dgv_files.ReadOnly = true; - this.dgv_files.RowTemplate.Height = 30; - this.dgv_files.Size = new System.Drawing.Size(642, 164); - this.dgv_files.TabIndex = 0; + this.bt_addFolder.Location = new System.Drawing.Point(487, 203); + this.bt_addFolder.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); + this.bt_addFolder.Name = "bt_addFolder"; + this.bt_addFolder.Size = new System.Drawing.Size(151, 33); + this.bt_addFolder.TabIndex = 9; + this.bt_addFolder.Text = "Add folder..."; + this.bt_addFolder.UseVisualStyleBackColor = true; + this.bt_addFolder.Click += new System.EventHandler(this.bt_addFolder_Click); // // bt_addFile // @@ -255,22 +269,32 @@ this.bt_addFile.UseVisualStyleBackColor = true; this.bt_addFile.Click += new System.EventHandler(this.bt_addFile_Click); // - // bt_addFolder + // dgv_files // - this.bt_addFolder.Location = new System.Drawing.Point(487, 203); - this.bt_addFolder.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); - this.bt_addFolder.Name = "bt_addFolder"; - this.bt_addFolder.Size = new System.Drawing.Size(151, 33); - this.bt_addFolder.TabIndex = 9; - this.bt_addFolder.Text = "Add folder..."; - this.bt_addFolder.UseVisualStyleBackColor = true; - this.bt_addFolder.Click += new System.EventHandler(this.bt_addFolder_Click); + this.dgv_files.AllowUserToAddRows = false; + this.dgv_files.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgv_files.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.dgv_co_files}); + this.dgv_files.Location = new System.Drawing.Point(5, 27); + this.dgv_files.Name = "dgv_files"; + this.dgv_files.ReadOnly = true; + this.dgv_files.RowTemplate.Height = 30; + this.dgv_files.Size = new System.Drawing.Size(642, 164); + this.dgv_files.TabIndex = 0; + this.dgv_files.CellMouseDown += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dgv_files_CellMouseDown); + // + // dgv_co_files + // + this.dgv_co_files.HeaderText = "Files"; + this.dgv_co_files.Name = "dgv_co_files"; + this.dgv_co_files.ReadOnly = true; + this.dgv_co_files.Width = 550; // // gb_mdl // this.gb_mdl.Controls.Add(this.tb_mdlpath); this.gb_mdl.Controls.Add(this.bt_pickMDLFile); - this.gb_mdl.Location = new System.Drawing.Point(10, 258); + this.gb_mdl.Location = new System.Drawing.Point(10, 366); this.gb_mdl.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); this.gb_mdl.Name = "gb_mdl"; this.gb_mdl.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3); @@ -299,18 +323,107 @@ this.bt_pickMDLFile.UseVisualStyleBackColor = true; this.bt_pickMDLFile.Click += new System.EventHandler(this.bt_pickMDLFile_Click); // - // dgv_co_files - // - this.dgv_co_files.HeaderText = "Files"; - this.dgv_co_files.Name = "dgv_co_files"; - this.dgv_co_files.ReadOnly = true; - this.dgv_co_files.Width = 550; + // cms_delete + // + this.cms_delete.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.deleteToolStripMenuItem}); + this.cms_delete.Name = "cms_delete"; + this.cms_delete.Size = new System.Drawing.Size(137, 32); + // + // deleteToolStripMenuItem + // + this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem"; + this.deleteToolStripMenuItem.Size = new System.Drawing.Size(136, 28); + this.deleteToolStripMenuItem.Text = "Delete"; + this.deleteToolStripMenuItem.Click += new System.EventHandler(this.deleteToolStripMenuItem_Click); + // + // gb_information + // + this.gb_information.Controls.Add(this.tb_author); + this.gb_information.Controls.Add(this.tb_modelName); + this.gb_information.Controls.Add(this.label2); + this.gb_information.Controls.Add(this.label1); + this.gb_information.Location = new System.Drawing.Point(11, 7); + this.gb_information.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); + this.gb_information.Name = "gb_information"; + this.gb_information.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3); + this.gb_information.Size = new System.Drawing.Size(653, 105); + this.gb_information.TabIndex = 2; + this.gb_information.TabStop = false; + this.gb_information.Text = "Information"; + // + // tb_author + // + this.tb_author.Location = new System.Drawing.Point(118, 63); + this.tb_author.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); + this.tb_author.Name = "tb_author"; + this.tb_author.Size = new System.Drawing.Size(520, 28); + this.tb_author.TabIndex = 9; + // + // tb_modelName + // + this.tb_modelName.Location = new System.Drawing.Point(118, 25); + this.tb_modelName.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); + this.tb_modelName.Name = "tb_modelName"; + this.tb_modelName.Size = new System.Drawing.Size(520, 28); + this.tb_modelName.TabIndex = 8; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(6, 66); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(71, 18); + this.label2.TabIndex = 1; + this.label2.Text = "Author:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(6, 28); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(107, 18); + this.label1.TabIndex = 0; + this.label1.Text = "Model Name:"; + // + // tb_savepath + // + this.tb_savepath.Enabled = false; + this.tb_savepath.Location = new System.Drawing.Point(88, 723); + this.tb_savepath.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); + this.tb_savepath.Name = "tb_savepath"; + this.tb_savepath.Size = new System.Drawing.Size(466, 28); + this.tb_savepath.TabIndex = 11; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(12, 726); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(71, 18); + this.label3.TabIndex = 10; + this.label3.Text = "Output:"; + // + // bt_outputpath + // + this.bt_outputpath.Location = new System.Drawing.Point(558, 721); + this.bt_outputpath.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); + this.bt_outputpath.Name = "bt_outputpath"; + this.bt_outputpath.Size = new System.Drawing.Size(100, 33); + this.bt_outputpath.TabIndex = 8; + this.bt_outputpath.Text = "Pick"; + this.bt_outputpath.UseVisualStyleBackColor = true; + this.bt_outputpath.Click += new System.EventHandler(this.bt_outputpath_Click); // // frm_packing // this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(673, 658); + this.ClientSize = new System.Drawing.Size(673, 843); + this.Controls.Add(this.bt_outputpath); + this.Controls.Add(this.tb_savepath); + this.Controls.Add(this.label3); + this.Controls.Add(this.gb_information); this.Controls.Add(this.gb_mdl); this.Controls.Add(this.gb_relatedfiles); this.Controls.Add(this.ss_packing); @@ -319,6 +432,7 @@ this.Controls.Add(this.bt_packing); this.Controls.Add(this.gb_license); this.Controls.Add(this.gb_programming); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3); this.Name = "frm_packing"; this.Text = "Packing"; @@ -334,6 +448,9 @@ ((System.ComponentModel.ISupportInitialize)(this.dgv_files)).EndInit(); this.gb_mdl.ResumeLayout(false); this.gb_mdl.PerformLayout(); + this.cms_delete.ResumeLayout(false); + this.gb_information.ResumeLayout(false); + this.gb_information.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -353,7 +470,7 @@ private System.Windows.Forms.Button bt_close; private System.Windows.Forms.Button bt_packing; private System.Windows.Forms.GroupBox gb_pick_wrappingfile; - private System.Windows.Forms.TextBox tb_wappingfilepath; + private System.Windows.Forms.TextBox tb_wrappingfilepath; private System.Windows.Forms.StatusStrip ss_packing; private System.Windows.Forms.GroupBox gb_relatedfiles; private System.Windows.Forms.DataGridView dgv_files; @@ -363,5 +480,15 @@ private System.Windows.Forms.Button bt_addFolder; private System.Windows.Forms.Button bt_addFile; private System.Windows.Forms.DataGridViewTextBoxColumn dgv_co_files; + private System.Windows.Forms.ContextMenuStrip cms_delete; + private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem; + private System.Windows.Forms.TextBox tb_savepath; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.GroupBox gb_information; + private System.Windows.Forms.TextBox tb_author; + private System.Windows.Forms.TextBox tb_modelName; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button bt_outputpath; } } \ No newline at end of file diff --git a/view/frm_packing.cs b/view/frm_packing.cs index d31ef073665ae23e4803be628dd4002e1869e8b5..60281608590d277cb0c4bd0b2a6ea8d5e14d028a 100644 --- a/view/frm_packing.cs +++ b/view/frm_packing.cs @@ -6,60 +6,87 @@ using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; +using System.IO; + +using ComputerResourceConsole.lib; +using ComputerResourceConsole.factory; +using ComputerResourceConsole.common; namespace ComputerResourceConsole.view { public partial class frm_packing : Form { + private string _strWrappingFiler = "python (*.py)|*.py"; + private int _selectedColumnIndex = -1; + private IPackingControl _pPackingCtrl = null; + + + public List ModelFiles + { + get + { + List modelfilelist = new List(); + for (int i = 0; i < this.dgv_files.Rows.Count; i++) + { + modelfilelist.Add(dgv_files.Rows[i].Cells[0].Value.ToString()); + } + return modelfilelist; + } + } + public frm_packing() { + this._pPackingCtrl = ComponentControlFactory.createPackingControl(); InitializeComponent(); + + //! For test! + this.dgv_files.Rows.Add("E:\\GitCode\\ogms\\python\\ogms\\context\\yolov5s.pt"); + this.dgv_files.Rows.Add("E:\\GitCode\\ogms\\python\\ogms\\context\\yolov5\\"); } - public int ProgrammingLanguage + public string ProgrammingLanguage { get { if (rb_programming_python.Checked) { - return 1; + return "Python"; } else if (rb_programming_cs.Checked) { - return 2; + return "CSharp"; } - return -1; + return ""; } } - public int License + public string License { get { if (rb_license_MIT.Checked) { - return 1; + return "MIT"; } else if (rb_license_apache.Checked) { - return 2; + return "Apache"; } else if (rb_license_gpl.Checked) { - return 3; + return "GPL"; } - return -1; + return ""; } } private void bt_pickWrappingFile_Click(object sender, EventArgs e) { - OpenFileDialog ofd = new OpenFileDialog(); - ofd.Filter = "exe/python (*.exe;*.py)|*.exe;*.py"; + ofd.Filter = this._strWrappingFiler; if (ofd.ShowDialog() == DialogResult.OK) { - this.tb_wappingfilepath.Text = ofd.FileName; + this.tb_wrappingfilepath.Text = ofd.FileName; } } @@ -75,9 +102,76 @@ namespace ComputerResourceConsole.view private void bt_packing_Click(object sender, EventArgs e) { - this.setStatus("Packing start..."); - List modelfiles = new List(); - + //! Checking + if (this.tb_modelName.Text == "") + { + MessageBox.Show("Please fill model name!", "Warning"); + return; + } + if (this.tb_author.Text == "") + { + MessageBox.Show("Please fill model author!", "Warning"); + return; + } + if (this.tb_wrappingfilepath.Text == "") + { + MessageBox.Show("Please select wrapping file!", "Warning"); + return; + } + if (this.tb_mdlpath.Text == "") + { + MessageBox.Show("Please select MDL file!", "Warning"); + return; + } + if (this.tb_savepath.Text == "") + { + MessageBox.Show("Please select saving path!", "Warning"); + return; + } + if (!Directory.Exists(this.tb_savepath.Text)) + { + MessageBox.Show("Saving path is not existing!", "Warning"); + return; + } + this.setStatusText("Packing start..."); + + string strConfig = this.tb_savepath.Text + "\\" + this.tb_modelName.Text + ".config"; + + FileStream fs = new FileStream(strConfig, FileMode.CreateNew, FileAccess.Write, FileShare.None); + StreamWriter sw = new StreamWriter(fs, Encoding.UTF8); + sw.Write("modelname||" + this.tb_modelName.Text + "\n"); + sw.Write("author||" + this.tb_author.Text + "\n"); + sw.Write("programming||" + this.ProgrammingLanguage + "\n"); + sw.Write("license||" + this.License + "\n"); + sw.Write("wrappingfile||" + this.tb_wrappingfilepath.Text + "\n"); + sw.Write("mdlfile||" + this.tb_mdlpath.Text + "\n"); + sw.Write("targetpath||" + this.tb_savepath.Text + "\n"); + for (int i = 0; i < this.dgv_files.Rows.Count; i++) + { + sw.Write("modelfile||" + this.dgv_files.Rows[i].Cells[0].Value + "\n"); + } + sw.Flush(); + sw.Close(); + fs.Close(); + fs.Dispose(); + + //! Start process + + this._pPackingCtrl.ConfigPath = strConfig; + this._pPackingCtrl.start(this.onPackingExit); + } + + private void onPackingExit(object sender, EventArgs e) + { + if (this.bt_packing.InvokeRequired) + { + CommonMethod.CommonEvent stcb = new CommonMethod.CommonEvent(onPackingExit); + this.Invoke(stcb, new object[] { sender, e }); + } + else + { + this.setStatusText("Finished!"); + } } private void bt_close_Click(object sender, EventArgs e) @@ -92,7 +186,7 @@ namespace ComputerResourceConsole.view this.rb_license_MIT.Checked = true; } - private void setStatus(string status) + private void setStatusText(string status) { this.ss_packing.Text = status; } @@ -103,7 +197,14 @@ namespace ComputerResourceConsole.view ofd.Filter = "All file (*.*)|*.*"; if (ofd.ShowDialog() == DialogResult.OK) { - this.dgv_files.Rows.Add(ofd.FileName); + if (this.existingFileOrFolder(ofd.FileName)) + { + MessageBox.Show("This file has been appended!", "Warning"); + } + else + { + this.dgv_files.Rows.Add(ofd.FileName); + } } } @@ -112,7 +213,66 @@ namespace ComputerResourceConsole.view FolderBrowserDialog fbd = new FolderBrowserDialog(); if (fbd.ShowDialog() == DialogResult.OK) { - this.dgv_files.Rows.Add(fbd.SelectedPath); + if (this.existingFileOrFolder(fbd.SelectedPath)) + { + MessageBox.Show("This folder has been appended!", "Warning"); + } + else + { + this.dgv_files.Rows.Add(fbd.SelectedPath); + } + } + } + + private void rb_programming_python_CheckedChanged(object sender, EventArgs e) + { + this.tb_wrappingfilepath.Text = ""; + if (this.ProgrammingLanguage == "Python") + { + this._strWrappingFiler = "Python (*.py)|*.py"; + } + else + { + this._strWrappingFiler = "Execuable file (*.exe)|*.exe"; + } + } + + private void dgv_files_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) + { + if (e.RowIndex > -1 && e.Button == System.Windows.Forms.MouseButtons.Right) + { + this.cms_delete.Show(this, new Point(e.X + 50, e.Y + 30 * (e.RowIndex + 1) + 210)); + this._selectedColumnIndex = e.ColumnIndex; + } + } + + private void deleteToolStripMenuItem_Click(object sender, EventArgs e) + { + if (this._selectedColumnIndex != -1) + { + this.dgv_files.Rows.RemoveAt(_selectedColumnIndex); + } + } + + private bool existingFileOrFolder(string fileorfolder) + { + List list = this.ModelFiles; + for (int i = 0; i < list.Count; i++) + { + if (list[i] == fileorfolder) + { + return true; + } + } + return false; + } + + private void bt_outputpath_Click(object sender, EventArgs e) + { + FolderBrowserDialog fbd = new FolderBrowserDialog(); + if (fbd.ShowDialog() == DialogResult.OK) + { + this.tb_savepath.Text = fbd.SelectedPath; } } } diff --git a/view/frm_packing.resx b/view/frm_packing.resx index a5014d4d8fe42a8b8794ae357f5289e134f6b601..54de97f2c6781a74018c879f85af1dece289d74a 100644 --- a/view/frm_packing.resx +++ b/view/frm_packing.resx @@ -126,7 +126,295 @@ 277, 17 - - True + + + + AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Av///yL///8+////Yv// + /4b///+e/v7+sP7+/pr///88////BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wL///8U////VP// + /6b///7g/v78//v79f/59+7/+Pbq//f05v/59+7//v797v///0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Av// + /yL+/v6M////2P7+/P/7+vL/7ObF/93Slf/PwG3/xLFL/72nNf+4oCT/0cJy//v79f////98AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////IP///5T////2/f36//Lu1//Yy4T/xLBF/7qjJv+1nRf/tZ0Z/7WcGv+1nBv/tZwb/9HC + c//7+vT/////fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////Mv///8L+/v3/8u7V/9TGdv+7pSf/tp8a/7adGf+1nRn/tZ0X/7Wd + GP+1nBn/tZwa/7WcGv/RwnP/+/r1/////3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4K////fv///+j5+O3/39WZ/8GtN/+3nxb/tp8W/7ae + Fv+2nhf/tp4Z/7WdGf+1nRf/tZ0Y/7WdGf+1nBr/0cJz//v69f////98AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4C/v7+hP7+/fTy7tT/0MFm/7ql + IP+3oBb/t58V/7efFP+2nxb/tp4X/7aeGP+2nhn/tp0Z/7WdF/+1nRf/tZ0Z/9HDc//7+vX/////fAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8K/v7+bP// + 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 + EP+5oxH/uaMS/7mjEv+4ohP/uKEU/7iiFf/HtUb/6eK3//38+f/+/v76////pP///1z///8w/v7+GP// + /wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////uvj26P/MvEr/u6YN/7ql + D/+6pRD/uqUQ/7qlEf+6pBD/uaQQ/7mjEf+5oxL/uaMS/7mjFv/Ov17/9PHd//////j+/v6y////Yv// + /woAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+EP// + //rq5Lf/v6wf/7umDf+6pQ3/uqUP/7qlEP+6pRH/uqUR/7mkEP+5pBD/uaMR/7mjEv/Ov1v/9/Xn//// + /+j+/v5SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Bv///57/////18ty/7yoEv+7pg//u6YO/7qlDf+6pQ//uqUQ/7qlEP+6pBH/uaQQ/7mk + EP/Bri//9PDa//7+/vb///9U/v7+AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///xD////6+vnv/8q6Q/+7pw//u6cP/7umD/+7pg3/u6YN/7ql + D/+6pRD/uqUQ/7qlEf+8qBr/4tqe//7+/P/+/v6M////DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4S//////DszP/DsSn/u6cP/7un + D/+7pw//u6YP/7umDf+6pQ7/uqUP/7qlEP+6pRH/yLdB//v68v/+/v7Y////HAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Lv// + ///o4q//vqsY/7yoDv+7pw//u6cP/7unD/+7pg//u6YN/7umDf+6pQ//u6cW/93UjP//////////Rv// + /wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AP///47+/v7/39eQ/7yqEv+8qA7/vKgO/7yoD/+7pw//u6cP/7umD/+7pg3/uqUN/7+r + If/v6sn/////7P///woAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gL///+e/f37/9nOef+9qRP/vKgP/7yoDv+8qA//u6cP/7un + D/+7pw//u6YP/7umDf/Htzv/9vPg/////6T///8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8I////MP7+ + /jD///8w////MP///zD///8w////MP///zD///8w/v7+Mv7+/goAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////oP38+f/Xy2//vakS/7yp + EP+8qA//vKgO/7yoDv+7pw//u6cP/7unD/+7pg//zb5O//n36/////+W////AgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///+I/v7+8P////j+/v74////+P////j////4////+P////j////4////+P////j+/v7w////aAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Av// + /6D9/Pj/1spt/72qEv+9qRH/vKkQ/7yoD/+8qA7/vKgP/7unD/+7pw//u6cP/87AVv/6+O7/////kv// + /wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8C////4vf05//bz43/2c2J/9nNif/ZzYn/2c2K/9nNi//ZzIv/2cyL/9nM + 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 + Ef+8qA//vaoU/82/Tv/n4Kr/9vPf//7+/f///////////////////////fz4//Ht0P/g15b/xbM3/7ql + Ev+5oxH/uaMS/7mjEv+4ohP/uKEU/7ihEv+4oRL/uKEU/7ihFf+3oRX/t6AW/7umJf/n4LP//v79/P// + /3L///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD+/v4y/v7+av// + /2z///9s////Zv///yoAAAAA////uvLv0v/EtSv/ybs8//Pw1f/+/v3//v79//7+/f/+/v3//v79/+jh + rP+/rBn/vaoR/72pEf+9qRH/vKkQ/7yoD/+8qA//vakU/8a1M//Nv1D/1Mdp/9jNeP/YzHT/0sRg/8q6 + SP/Brij/u6YU/7qlEv+5pA//uaMQ/7mjEf+5oxL/uaMS/7iiE/+4oRT/uKES/7ihEv+4oRT/t6EV/7ei + Gf/Ux3X//Pv1/////7T+/v4SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8+/v7+4P7+/f/+/vv//v77//7+/fz////S////LP///7jz8NP/xLUq/7+uGP/XzG7/+/vz//// + //D///88////SP///+Dn4av/v60Z/72qEf+9qRH/vakR/7ypEf+8qRD/vKgP/7yoDv+8qA//u6cP/7un + EP+8qBP/u6gS/7umDv+6pQ7/uqUP/7qlEP+6pRH/uqQR/7mkEP+5oxD/uaMR/7mjEv+4ohL/uKIT/7ih + FP+4oRL/uKES/7ehFP/GtUj/8+/Z/////97///8kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8C////lP38+P/f14r/1Mli/9TJYv/o463//v38/////3j+/v648/DT/8S1 + Kv+/rRb/w7Ml/+bfpv//////////cP///y7////c5+Gr/7+uGv+9qhH/vaoR/72qEf+9qRH/vakR/7yp + Ef+8qA//vKgO/7yoDv+7pw//u6cP/7unD/+7pg//u6YN/7qlDf+6pQ//uqUQ/7qlEP+6pBH/uaQQ/7mk + EP+5oxH/uaMS/7mjEv+4ohP/uKEU/7ihEv++qSj/6eK3//79+/z///94AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Av///5z8+/P/0MRT/8CwGf/AsBv/3dWG//39 + +f////+A////uPPw0//EtSr/v64W/7+uFv/Gti//8e3M//7+/fj+/v6i////3ufhq//Arhr/vasS/72q + Ef+9qhH/vaoR/72pEf+9qRH/vKkQ/7yoD/+8qA7/vKgO/7yoD/+7pw//u6cP/7umD/+7pg3/uqUN/7ql + D/+6pRD/uqUQ/7qlEf+6pBD/uaQQ/7mjEf+5oxL/uaMS/7iiE/+8qCP/49qk//38+vz///+4/v7+HAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wL///+c/Pv0/9HF + Vf/BsRr/wbEb/97Vh//9/fn/////gP///7jz8NP/xbYq/7+uFv+/rhb/v64W/8m7Pf/y79P//v79+P// + //rn4av/wK4a/76rE/+9qhL/vaoR/72qEf+9qhH/vakR/72pEf+8qRH/vKgP/7yoDv+8qA7/u6cP/7un + D/+7pw//u6YP/7umDf+6pQ7/uqUP/7qlEP+6pRH/uqUR/7mkEP+5oxD/uaMR/7mjEv+8px7/4tme//79 + /Pz///+0////IgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8C////mP38+P/i25X/181t/9jNbv/r5bX//v78/////3z+/v648/DU/8W2K/+/rhX/v64W/7+u + Fv+/rhb/yrxA//Huzv//////5+Gr/8CuGv++rBP/vqsT/72rEv+9qhH/vaoR/72qEf+9qRH/vakR/7yp + Ef+8qA//vKgO/7yoDv+7pw//u6cP/7unD/+7pg//u6YN/7qlDf+6pQ//uqUQ/7qlEP+6pRH/uaQQ/7mk + EP++qiT/49ui//7+/f////+q////DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AP///1D+/v7y/v7+//7+/f/+/v3//v7+//7+/uj///8+/v7+uPPw + 1P/Fti3/wK8V/7+uFv+/rhb/v64W/7+uFv/IuTf/7Oa6/+fgqf/Arhr/vqwT/76sE/++qxP/vasS/72q + Ef+9qhH/vaoR/72pEf+9qRH/vKkQ/7yoD/+8qA7/vKgP/7unD/+7pw//u6cP/7umD/+7pg3/uqUN/7ql + D/+6pRD/uqUR/7umFv/Kukj/7ujE//7+/v////++////GgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8E////GP///zj///9K/v7+hP7+ + /rD////Q/v7+uP///97z8NT/xbYt/8CvGP/Arxf/v64W/7+uFv+/rhb/v64W/8W1Lv/XzG3/x7cy/76s + FP++rBP/vqwT/76rE/+9qxL/vaoR/72qEf+9qhH/vakR/7ypEf+8qRH/vKgP/7yoDv+8qA//u6cP/7un + D/+7pw//u6YP/7qmDf+6pQ7/uqUQ/8CtKP/b0IT/9/Xl//7+/fT///+G////Dv///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Pv7+/ur5+Or/8/DT//Px1f/08dX/6+a4/87CTv/Mv0f/zL9H/8y/Rf/Mv0X/zL5F/8y+ + Rf/LvUP/29F8//HtzP/Vymn/xrYw/76sFf++rBP/vqsT/72rEv+9qhH/vaoR/72qEf+9qRH/vakR/7yp + EP+8qA//vKgO/7yoDv+7pw//u6cP/7unD/+7pxD/wrAp/9XHav/v68r//fz4+v///8b///9E////BgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///1j+/fz/4tqU/8a4Lv/GuC//xrgu/8u9P//w7Mn/+fjs//n4 + 7P/5+Oz/+fjs//n47P/5+Oz/+fjr//v68v/+/v76+/vz//Huz//e1If/0MNV/8S0Kf/Arxz/v6wX/72q + Ev+9qhH/vaoR/72pEf+8qRH/vKkR/7ypD/+9qhL/vqsY/8GvIv/Nv07/29GD//Dsy//8+/T//v7+7v// + /6L///8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///9a/v37/9/Xi//Csx//wbIb/8Gx + Gv/HuTL/8u/Q//7+/uj+/v6E////hP///4T///+E////hP///4T///90////VP///57+/v7m/v7++Pn4 + 6//x7c7/5uCn/9rQef/Qw1f/yrtA/8e2NP/GtjL/xrY0/8m5P//OwFL/2M1z/+TcoP/v68j/+Pfp//7+ + /vr////m////oP///z7///8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Wv79 + +//g2I3/wrMf/8GyG//Bshv/x7oz//Lv0P/+/v7W////DAAAAAAAAAAAAAAAAAAAAAD+/v4C////EP// + /yz///8q////OP///2r///+e///+9P7+/v/+/v3//v79//z89//6+e//+vjs//r57//8/Pb//v78//7+ + /f/+/v7////+9v///6L+/v5c////DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///1r+/vv/39eI/8KyHf/Cshv/wbIb/8e5Mf/x7s3/////1v///w4AAAAAAAAAAAAA + AAAAAAAA////fv////j////////////////////6////iP///1b///+G////hv///4j+/v6S////3v// + ///////k////kv///4j///+G////hv///1r///8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///9O/v79+vDsyP/g2Iz/4dmQ/+HZj//i25b/+Pfo//// + /9L///8GAAAAAAAAAAAAAAAA////Dv///8z18tn/3tWF/93Ug//b0n//8e7O/////9L///8Y////AP// + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8U////Rv7+/nj///+I////Uv7+/iD///8CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/////////////////////////////////////w/////////wB////////4AH///////+AAf/ + //////wAB///////+AAH///////gAAf//////+AAB///////wAAH//////+AAAf//////wAAB//////+ + AAAH//////wAAAf//////AAAB//////8AAB///////gAAf//////+AAH///////wAA////////AAD/// + ////8AAf///////wAD///////+AAP///////4AA////////gAD///AAf/+AAP//8AA//4AA///wAD//g + AD///AAP/+AAP//4AA//8AA///gAD//wAB//+AAf//AAD//wAB//+AAP/+AAH//4AAf/wAAf//gAAP8A + AD///AAAfAAAP//4AAAAAAB///gAAAAAAH/8CAwAAAAA//gIDAAAAAH/+AAAAAAAAf/4AAAAAAAD//gI + AAAAAAf//AgAAAAAD///gAAAAAAf//+AAAAAAH///4AAAAAA////gAGAAAP///+Af/AAH////4B+BAB/ + ////gHwH//////+AfAf////////8B//////w//wH/////+B//Af/////4H/+D//////gf////////+B/ + /////////f////////////////////////////////////////8= + + + + 426, 17 \ No newline at end of file