Browse Source

first commit

wdl 2 months ago
commit
6bb03afc66
100 changed files with 42998 additions and 0 deletions
  1. 1 0
      .svn/entries
  2. 1 0
      .svn/format
  3. 62 0
      .svn/pristine/00/003c9f8fb32c08f55460117e8948eb6960007c82.svn-base
  4. 63 0
      .svn/pristine/03/033d28bf852d78664a52d6e02296961110a7da86.svn-base
  5. 1773 0
      .svn/pristine/03/034193745920cc18d36bb5a258f310228edf361a.svn-base
  6. 58 0
      .svn/pristine/03/03c743805bec05abba0a71f9b22a11c42466f99c.svn-base
  7. 1605 0
      .svn/pristine/03/03db1196a4f8fb0132c9dcd78a97a008ce9d16be.svn-base
  8. 20 0
      .svn/pristine/04/04d3dda876fed5749b756131397b68e88dba4317.svn-base
  9. 68 0
      .svn/pristine/05/0541878f56c5821f51c9e27bdbce4528e7116d2f.svn-base
  10. BIN
      .svn/pristine/05/0564739af9b4b6e6420c0a4247445689b8452658.svn-base
  11. 209 0
      .svn/pristine/05/059cc443d17978212338e191cba134a87dde3020.svn-base
  12. 139 0
      .svn/pristine/05/05a512082b367d01db194674b83499144a55a9ef.svn-base
  13. 23 0
      .svn/pristine/06/0684b90bafca9c6277c072b3da1bd83b37af8c92.svn-base
  14. 56 0
      .svn/pristine/06/06b0701190e7f91490220272b622f05334142606.svn-base
  15. BIN
      .svn/pristine/08/0891626af45162ecfcbf7393e0556392e952c43c.svn-base
  16. 1351 0
      .svn/pristine/08/08cb34f2cf35ae46064acd700cf891c77c74b618.svn-base
  17. 244 0
      .svn/pristine/09/099c28f08dea94662f222b233a3e9751c99b2949.svn-base
  18. 192 0
      .svn/pristine/0a/0a050ce2d98c6d3d38347bb10d15f02123090424.svn-base
  19. 15 0
      .svn/pristine/0a/0a89627e85234f1299a6a81fae81ad51f69bca01.svn-base
  20. 21 0
      .svn/pristine/0a/0ae5ce4a36f9c66403d022db40e5484bdc561fe8.svn-base
  21. 78 0
      .svn/pristine/0c/0c1efad60be5367b8d517c4cf871036dade2e966.svn-base
  22. 66 0
      .svn/pristine/0c/0ce943ea0400ff450f0c1aac0d96827e55dd2bd3.svn-base
  23. BIN
      .svn/pristine/0d/0d7343d07bd947a9406cbc761d1c4772929e9904.svn-base
  24. 10 0
      .svn/pristine/0e/0efde00ff2e6b2243da037855e9e29776e56212b.svn-base
  25. 4185 0
      .svn/pristine/0f/0fd3b90416e339d00e9899ef9158cf0c62f4e35e.svn-base
  26. 322 0
      .svn/pristine/0f/0fea0eec5e8bad242e797bd1e058597250a00755.svn-base
  27. 202 0
      .svn/pristine/10/10052c5efc6c1e5f830b0223b677a5dac07a6005.svn-base
  28. 156 0
      .svn/pristine/11/11290dbe369be2676f102f5e39dda9cdf48fa11a.svn-base
  29. 15 0
      .svn/pristine/11/1184c59dba528d313ca685459928bf6050f6ecdc.svn-base
  30. 1581 0
      .svn/pristine/12/1246bd157caacbec170e1da330584182083c9300.svn-base
  31. 258 0
      .svn/pristine/14/14b200dc50575457f6a155a56911889cd5d89d8a.svn-base
  32. 71 0
      .svn/pristine/16/16827e9b05bb8cc8d5579607f5dc738118c32bd7.svn-base
  33. 275 0
      .svn/pristine/17/171516c55c281ea5d14af78cdc33f26871fb104d.svn-base
  34. 251 0
      .svn/pristine/19/19a0a42c0086f4798f964d25ca8cbfbc63f56c4a.svn-base
  35. 9 0
      .svn/pristine/1b/1b30d8db1edf3286e89b2aa390acfc9f62effd39.svn-base
  36. 4232 0
      .svn/pristine/1b/1ba03c2f6dab318cab4f29de099076691b846816.svn-base
  37. 48 0
      .svn/pristine/1b/1bdd7829884a465939b75c7fe89b96d92ed317d9.svn-base
  38. 314 0
      .svn/pristine/1c/1cd388a25d23b301d7fd80cd00888af5024aaf30.svn-base
  39. 31 0
      .svn/pristine/1c/1cf8f036ce9644120da3d6de5e3f9c48719483eb.svn-base
  40. 175 0
      .svn/pristine/1e/1ec9b9b73cdf2bb516b7ad68fa7db680db935e8a.svn-base
  41. 394 0
      .svn/pristine/20/201b01b16b071839fa43e546f653b9bceb2e7bb4.svn-base
  42. 35 0
      .svn/pristine/20/20f7330c3f21d8c0d9c35798c91a271d1d8fea7b.svn-base
  43. 132 0
      .svn/pristine/21/2170122c8c5e66945aac2055408af89ac6f8d50d.svn-base
  44. 20 0
      .svn/pristine/21/21e865728e7b4f6c3cb3bf2677474d49aec024f8.svn-base
  45. 715 0
      .svn/pristine/22/228f3fb69e9eb0ff4ba69d800fc1776409d5acda.svn-base
  46. 196 0
      .svn/pristine/22/22d6bb05c7acfaf3e0e68222e6932b5cdb26b9b2.svn-base
  47. 30 0
      .svn/pristine/22/22f3f2dc8cc28135764c778ac9841b71d3cc65a8.svn-base
  48. 57 0
      .svn/pristine/23/23bf40a8f14b4b840a64c213d70f667d884cc4be.svn-base
  49. 390 0
      .svn/pristine/24/24b9dbd5a0f80d097d37167b1ce6624a9e55dd25.svn-base
  50. 53 0
      .svn/pristine/24/24d7f3a29bcbe0372b96a1453d86e72c17a6c32b.svn-base
  51. 135 0
      .svn/pristine/26/26291c22bb98c29ea403f7f7e0e050320dff19a6.svn-base
  52. 23 0
      .svn/pristine/26/262e572144219841fc1dcf24bce67635f490dd0b.svn-base
  53. 438 0
      .svn/pristine/26/26a2ec87719ad5c4faf0c434ac83b6e8a4f12a4f.svn-base
  54. 17 0
      .svn/pristine/27/27ad43f3d6fa13f645c94141f5fa4329a13d9bcc.svn-base
  55. 2435 0
      .svn/pristine/27/27c6cf34b70ac85ca7b6ba09451cb335d97f7a5b.svn-base
  56. 1774 0
      .svn/pristine/28/2837b27652cfdc1ed916c108cbd61f0b7e8de940.svn-base
  57. 437 0
      .svn/pristine/28/285f24ac3a111ecbab0f002e69a608b76ef8c22b.svn-base
  58. 15 0
      .svn/pristine/29/295d5a2e79d1cd585d65616e819ab390271ce371.svn-base
  59. 74 0
      .svn/pristine/2d/2deefed755e75bf30915bc316c0a81eddf0a106f.svn-base
  60. 313 0
      .svn/pristine/2e/2e3eb3b858b19ec711cb643d471f86b7d218f08f.svn-base
  61. 324 0
      .svn/pristine/2e/2e9da1e884ff968afe2029660323b6c9c49eedb1.svn-base
  62. 55 0
      .svn/pristine/2f/2fe6d07be6718de56d5c9e0f599f78f578343b72.svn-base
  63. 948 0
      .svn/pristine/31/312024cf5c5c8085aceaf5477fdb786d87004d37.svn-base
  64. 56 0
      .svn/pristine/32/32431ec124421fef62929582cab59ba1ab2ebfa6.svn-base
  65. 153 0
      .svn/pristine/32/327d03ef8f20c0ebb4de51d83a2059210d485643.svn-base
  66. 1914 0
      .svn/pristine/33/334b014d76842216f6e6c0d70f5e1d62ee02b671.svn-base
  67. 426 0
      .svn/pristine/34/34b6e7e50df1338f6d40a24fd39d8f2b4167738d.svn-base
  68. 156 0
      .svn/pristine/34/34d11c214403af8c5d2843a95b4ff32c984580a9.svn-base
  69. BIN
      .svn/pristine/35/35eb9881f90e47fa4f84c3e683e088c098f739a9.svn-base
  70. 773 0
      .svn/pristine/36/360e6eb0d0bed18e0c8822bc3b2d9b16621283d1.svn-base
  71. 348 0
      .svn/pristine/36/361adc44292cfb279f55a326365117f8a6542b2e.svn-base
  72. 140 0
      .svn/pristine/36/366b63e8e97093d80fe03658a90238e8180d138b.svn-base
  73. 54 0
      .svn/pristine/38/385edb4f0268422f030e26fec1a3ee547117b28e.svn-base
  74. 2555 0
      .svn/pristine/38/38b2caf5685d21b1d911a1d2c4b4d34fa94fd71b.svn-base
  75. 263 0
      .svn/pristine/39/39eee7587dc8bb9e96ce86fb8fbdba0857a69c52.svn-base
  76. 128 0
      .svn/pristine/39/39f127d1a1b33435652a2849767d46ba7df28289.svn-base
  77. 1722 0
      .svn/pristine/3a/3a18b21c56a27eecd0a9590a199f17347bb1e42c.svn-base
  78. 393 0
      .svn/pristine/3b/3b56d57df3aee29be8c42864d2fbfc2bc1a38cb3.svn-base
  79. 1315 0
      .svn/pristine/3b/3bb78abfdf06c37c978c3fd27d87d5926b2bb1d5.svn-base
  80. 130 0
      .svn/pristine/3d/3dcfa78e59e304b0ea7c70fcabc85870259fb05b.svn-base
  81. 471 0
      .svn/pristine/3e/3e654e1ec02c122c2fbbea343c5c93973bdb8ad2.svn-base
  82. 109 0
      .svn/pristine/3f/3f50355a2bc5705d0c5ca28034aad110b4c320a9.svn-base
  83. 48 0
      .svn/pristine/40/40ad37b44991270e5fb7ff4cfe0c328ff166503b.svn-base
  84. 73 0
      .svn/pristine/40/40ed6a2a1ee5d619ec24ac517a60ef2ea88fcbc6.svn-base
  85. 26 0
      .svn/pristine/40/40f836ffec16681a0bcd5a7f0726eb1358135210.svn-base
  86. 132 0
      .svn/pristine/41/4144fc5a2dcbfbbab9b6a43f6ac5ac0f63cfa2e9.svn-base
  87. 10 0
      .svn/pristine/41/41db367a510ee4cefe2d03d8b605036c58f4a6ce.svn-base
  88. 145 0
      .svn/pristine/42/42ca92c32615e6bb4037bfaa6497b7cfc8a1a9ed.svn-base
  89. 53 0
      .svn/pristine/42/42d4c4ffe069660480c7e6fe029824ccb8fe596f.svn-base
  90. 1131 0
      .svn/pristine/43/43d5d0412f569ade21d16f13b82cce13a03d11f7.svn-base
  91. 210 0
      .svn/pristine/44/442deaa0d7b09759a9a073ae45b7c5e5a0370e95.svn-base
  92. 40 0
      .svn/pristine/44/448976e1922602faabf54d539fcd144ff18da77f.svn-base
  93. 198 0
      .svn/pristine/44/44b535859372c22e3f8cca4f64188f55155897bc.svn-base
  94. 135 0
      .svn/pristine/45/453449698defd6e2a89b89e082bbbd15c059b970.svn-base
  95. 138 0
      .svn/pristine/45/458163ea80b65a848f6480d17b81cd21fe1a3517.svn-base
  96. 195 0
      .svn/pristine/45/45ed176c139ba4ae2e4a6a7358ef8432ba3f75ad.svn-base
  97. 1611 0
      .svn/pristine/46/46d74b6c8751cf8c7461b1b4b104558e99063ad8.svn-base
  98. 117 0
      .svn/pristine/47/47b15748ecc8e952c5935170090db7c269ce4b4f.svn-base
  99. 434 0
      .svn/pristine/47/47bf226bb3bcaff1e987861ae885fd14013db70e.svn-base
  100. 6 0
      .svn/pristine/48/484650d8c371d8588e7994f634626e4a36fed5f5.svn-base

+ 1 - 0
.svn/entries

@@ -0,0 +1 @@
+12

+ 1 - 0
.svn/format

@@ -0,0 +1 @@
+12

+ 62 - 0
.svn/pristine/00/003c9f8fb32c08f55460117e8948eb6960007c82.svn-base

@@ -0,0 +1,62 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using System.IO;
+using System.Threading;
+
+namespace Core.Mes.ServerManager
+{
+
+
+    public class ExitMessageFilter : System.Windows.Forms.IMessageFilter
+    {
+        private FrmSeverMain frm;
+        public ExitMessageFilter(FrmSeverMain frm)
+        {
+            this.frm = frm;
+        }
+
+        #region IMessageFilter 成员
+
+        public bool PreFilterMessage(ref Message m)
+        {
+            if (frm == null)
+            {
+
+            }
+
+            if (m.Msg == 16)
+            {
+                ApplicationExit();
+                Thread.Sleep(2 * 1000);
+            }
+           
+            return false;
+        }
+
+
+        #endregion
+
+        private static void ApplicationExit()
+        {
+
+            string path = string.Format(@"{0}/log/Application/{1}.txt", Application.StartupPath, System.DateTime.Now.ToString("yyyy_MM_dd"));
+
+            using (StreamWriter sw = new StreamWriter(path, true, Encoding.UTF8))
+            {
+
+                StringBuilder sbtxt = new StringBuilder();
+                sbtxt.AppendLine("==============================================");
+                sbtxt.AppendLine("从任务管理器中关闭服务");
+                sbtxt.AppendLine(string.Format("服务关闭时间:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm::ss")));
+                sbtxt.AppendLine("==============================================");
+                sw.WriteLine(sbtxt.ToString());
+
+            }
+
+
+        }
+    }
+
+}

+ 63 - 0
.svn/pristine/03/033d28bf852d78664a52d6e02296961110a7da86.svn-base

@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     此代码由工具生成。
+//     运行时版本:2.0.50727.8800
+//
+//     对此文件的更改可能会导致不正确的行为,并且如果
+//     重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ConService.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   强类型资源类,用于查找本地化字符串等。
+    /// </summary>
+    // 此类是由 StronglyTypedResourceBuilder
+    // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
+    // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+    // (以 /str 作为命令选项),或重新生成 VS 项目。
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   返回此类使用的缓存 ResourceManager 实例。
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ConService.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   为使用此强类型资源类的所有资源查找
+        ///   重写当前线程的 CurrentUICulture 属性。
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}

+ 1773 - 0
.svn/pristine/03/034193745920cc18d36bb5a258f310228edf361a.svn-base

@@ -0,0 +1,1773 @@
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using Core.Mes.ClientFrameWork;
+using Core.Mes.IBaseInterface;
+using global::Infragistics.Win.UltraWinGrid;
+using global::Infragistics.Win.UltraWinEditors;
+using System.Data;
+using System.Diagnostics;
+using System.IO;
+using System.Text.RegularExpressions;
+
+namespace Core.Mes.ClientPurviewManager
+{
+
+    /// <summary>
+    /// FrmUserManager 的摘要说明。
+    /// </summary>
+    public class FrmUserManager : Core.Mes.ClientFrameWork.FrmBase
+    {
+        #region "Varible"
+        private System.Windows.Forms.Panel panel1;
+        private Infragistics.Win.UltraWinToolbars.UltraToolbarsManager ultraToolbarsManager1;
+        private System.Windows.Forms.Panel FrmUserManager_Fill_Panel;
+        private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Left;
+        private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Right;
+        private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Top;
+        private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Bottom;
+        private System.Windows.Forms.Panel panel2;
+        private Infragistics.Win.UltraWinGrid.UltraGrid ultraGrid1;
+        private Infragistics.Win.Misc.UltraExpandableGroupBox ultraExpandableGroupBox1;
+        private Infragistics.Win.Misc.UltraExpandableGroupBoxPanel ultraExpandableGroupBoxPanel1;
+        private System.Windows.Forms.Panel panel3;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel2;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel3;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel4;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel5;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel6;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel7;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel8;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel9;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel10;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel11;
+        private Infragistics.Win.UltraWinEditors.UltraComboEditor ulcmeSex;
+        private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtUserNo;
+        private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtUserName;
+        private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtAge;
+        private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtGW;
+        private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtZW;
+        private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtPhono;
+        private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtMemo;
+        private Infragistics.Win.Misc.UltraButton ultraButton1;
+        private System.ComponentModel.IContainer components;
+        private DataSet _departmentData;
+        public TreeView _departmentTree;
+        private string _selectPartSQL;
+        public string StrUser = "";
+        public string operDepart = "";
+        public string operDepartname = "";
+        public string allDept = "";
+        public string selDept = "";
+
+        private DataSet _userData;
+        private Infragistics.Win.UltraWinEditors.UltraComboEditor ulcmeDepartment;
+        private System.Windows.Forms.ToolTip toolTip1;
+        private Infragistics.Win.UltraWinEditors.UltraCheckEditor ultraCheckEditor1;
+        private Infragistics.Win.UltraWinEditors.UltraTextEditor ultraTextEditor8;
+        private Infragistics.Win.UltraWinGrid.ExcelExport.UltraGridExcelExporter ultraGridExcelExporter1;
+        private UltraTextEditor ultxtEmail;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel1;
+        private UltraTextEditor ultLoginID;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel12;
+        private FlowLayoutPanel flowLayoutPanel1;
+        private string _selectUserSQL;
+        #endregion
+
+        #region "头部"
+        public FrmUserManager()
+        {
+            //
+            // Windows 窗体设计器支持所必需的
+            //
+            InitializeComponent();
+
+            //
+            // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
+            //
+        }
+
+        /// <summary>
+        /// 清理所有正在使用的资源。
+        /// </summary>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing)
+            {
+                if (components != null)
+                {
+                    components.Dispose();
+                }
+            }
+            base.Dispose(disposing);
+        }
+        #endregion
+
+        #region Windows 窗体设计器生成的代码
+        /// <summary>
+        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
+        /// 此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            Infragistics.Win.UltraWinToolbars.UltraToolbar ultraToolbar1 = new Infragistics.Win.UltraWinToolbars.UltraToolbar("Toolbar1");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool1 = new Infragistics.Win.UltraWinToolbars.ButtonTool("query");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool2 = new Infragistics.Win.UltraWinToolbars.ButtonTool("add");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool3 = new Infragistics.Win.UltraWinToolbars.ButtonTool("edit");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool4 = new Infragistics.Win.UltraWinToolbars.ButtonTool("del");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool5 = new Infragistics.Win.UltraWinToolbars.ButtonTool("exit");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool6 = new Infragistics.Win.UltraWinToolbars.ButtonTool("back");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool7 = new Infragistics.Win.UltraWinToolbars.ButtonTool("leadin");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool8 = new Infragistics.Win.UltraWinToolbars.ButtonTool("add");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool9 = new Infragistics.Win.UltraWinToolbars.ButtonTool("edit");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool10 = new Infragistics.Win.UltraWinToolbars.ButtonTool("del");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool11 = new Infragistics.Win.UltraWinToolbars.ButtonTool("query");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool12 = new Infragistics.Win.UltraWinToolbars.ButtonTool("exit");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool13 = new Infragistics.Win.UltraWinToolbars.ButtonTool("back");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool14 = new Infragistics.Win.UltraWinToolbars.ButtonTool("leadin");
+            Infragistics.Win.UltraWinGrid.UltraGridBand ultraGridBand1 = new Infragistics.Win.UltraWinGrid.UltraGridBand("Band 0", -1);
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn1 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("USERID");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn2 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("DEPARTMENTID", -1, null, 1, Infragistics.Win.UltraWinGrid.SortIndicator.Ascending, false);
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn3 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("NAME");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn4 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("SEX");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn5 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("AGE");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn6 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("COMPUTERIP");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn7 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("HOMEPHONE");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn8 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("WORKPOS");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn9 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("WORKJOB");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn10 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("MEMO");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn11 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("EMAIL");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn12 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("PD", -1, null, 0, Infragistics.Win.UltraWinGrid.SortIndicator.Ascending, false);
+            Infragistics.Win.Appearance appearance1 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance2 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance3 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance4 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance5 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance6 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance7 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance8 = new Infragistics.Win.Appearance();
+            Infragistics.Win.ValueListItem valueListItem1 = new Infragistics.Win.ValueListItem();
+            Infragistics.Win.ValueListItem valueListItem2 = new Infragistics.Win.ValueListItem();
+            Infragistics.Win.ValueListItem valueListItem3 = new Infragistics.Win.ValueListItem();
+            Infragistics.Win.ValueListItem valueListItem4 = new Infragistics.Win.ValueListItem();
+            Infragistics.Win.Appearance appearance9 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance10 = new Infragistics.Win.Appearance();
+            this.panel1 = new System.Windows.Forms.Panel();
+            this._panel1_Toolbars_Dock_Area_Left = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this.ultraToolbarsManager1 = new Infragistics.Win.UltraWinToolbars.UltraToolbarsManager(this.components);
+            this._panel1_Toolbars_Dock_Area_Right = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this._panel1_Toolbars_Dock_Area_Top = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this._panel1_Toolbars_Dock_Area_Bottom = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this.FrmUserManager_Fill_Panel = new System.Windows.Forms.Panel();
+            this.ultraGrid1 = new Infragistics.Win.UltraWinGrid.UltraGrid();
+            this.ultraExpandableGroupBox1 = new Infragistics.Win.Misc.UltraExpandableGroupBox();
+            this.ultraExpandableGroupBoxPanel1 = new Infragistics.Win.Misc.UltraExpandableGroupBoxPanel();
+            this.panel3 = new System.Windows.Forms.Panel();
+            this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
+            this.ultxtEmail = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultraLabel1 = new Infragistics.Win.Misc.UltraLabel();
+            this.ulcmeDepartment = new Infragistics.Win.UltraWinEditors.UltraComboEditor();
+            this.ultxtMemo = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultxtPhono = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultxtZW = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultxtGW = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultxtAge = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultxtUserName = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultxtUserNo = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ulcmeSex = new Infragistics.Win.UltraWinEditors.UltraComboEditor();
+            this.ultraLabel11 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel10 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel9 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel8 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel7 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel6 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel5 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel4 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel3 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel2 = new Infragistics.Win.Misc.UltraLabel();
+            this.panel2 = new System.Windows.Forms.Panel();
+            this.ultLoginID = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultraLabel12 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraTextEditor8 = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultraCheckEditor1 = new Infragistics.Win.UltraWinEditors.UltraCheckEditor();
+            this.ultraButton1 = new Infragistics.Win.Misc.UltraButton();
+            this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+            this.ultraGridExcelExporter1 = new Infragistics.Win.UltraWinGrid.ExcelExport.UltraGridExcelExporter();
+            this.panel1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraToolbarsManager1)).BeginInit();
+            this.FrmUserManager_Fill_Panel.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraGrid1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraExpandableGroupBox1)).BeginInit();
+            this.ultraExpandableGroupBox1.SuspendLayout();
+            this.ultraExpandableGroupBoxPanel1.SuspendLayout();
+            this.panel3.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtEmail)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ulcmeDepartment)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtMemo)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtPhono)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtZW)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtGW)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtAge)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtUserName)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtUserNo)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ulcmeSex)).BeginInit();
+            this.panel2.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.ultLoginID)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor8)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // panel1
+            // 
+            this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Left);
+            this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Right);
+            this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Top);
+            this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Bottom);
+            this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.panel1.Location = new System.Drawing.Point(0, 0);
+            this.panel1.Name = "panel1";
+            this.panel1.Size = new System.Drawing.Size(1012, 32);
+            this.panel1.TabIndex = 0;
+            // 
+            // _panel1_Toolbars_Dock_Area_Left
+            // 
+            this._panel1_Toolbars_Dock_Area_Left.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._panel1_Toolbars_Dock_Area_Left.BackColor = System.Drawing.SystemColors.Control;
+            this._panel1_Toolbars_Dock_Area_Left.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Left;
+            this._panel1_Toolbars_Dock_Area_Left.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._panel1_Toolbars_Dock_Area_Left.Location = new System.Drawing.Point(0, 27);
+            this._panel1_Toolbars_Dock_Area_Left.Name = "_panel1_Toolbars_Dock_Area_Left";
+            this._panel1_Toolbars_Dock_Area_Left.Size = new System.Drawing.Size(0, 5);
+            this._panel1_Toolbars_Dock_Area_Left.ToolbarsManager = this.ultraToolbarsManager1;
+            // 
+            // ultraToolbarsManager1
+            // 
+            this.ultraToolbarsManager1.DesignerFlags = 1;
+            this.ultraToolbarsManager1.DockWithinContainer = this.panel1;
+            this.ultraToolbarsManager1.ShowQuickCustomizeButton = false;
+            this.ultraToolbarsManager1.Style = Infragistics.Win.UltraWinToolbars.ToolbarStyle.VisualStudio2005;
+            ultraToolbar1.DockedColumn = 0;
+            ultraToolbar1.DockedRow = 0;
+            ultraToolbar1.Text = "Toolbar1";
+            buttonTool1.InstanceProps.IsFirstInGroup = true;
+            buttonTool2.InstanceProps.IsFirstInGroup = true;
+            buttonTool3.InstanceProps.IsFirstInGroup = true;
+            buttonTool4.InstanceProps.IsFirstInGroup = true;
+            buttonTool5.InstanceProps.IsFirstInGroup = true;
+            buttonTool6.InstanceProps.IsFirstInGroup = true;
+            buttonTool7.InstanceProps.IsFirstInGroup = true;
+            ultraToolbar1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] {
+            buttonTool1,
+            buttonTool2,
+            buttonTool3,
+            buttonTool4,
+            buttonTool5,
+            buttonTool6,
+            buttonTool7});
+            this.ultraToolbarsManager1.Toolbars.AddRange(new Infragistics.Win.UltraWinToolbars.UltraToolbar[] {
+            ultraToolbar1});
+            buttonTool8.SharedProps.Caption = "新增(&A)";
+            buttonTool8.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            buttonTool8.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlA;
+            buttonTool9.SharedProps.Caption = "修改(&U)";
+            buttonTool9.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            buttonTool9.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlU;
+            buttonTool10.SharedProps.Caption = "删除(&D)";
+            buttonTool10.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            buttonTool10.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlD;
+            buttonTool11.SharedProps.Caption = "查询(&Q)";
+            buttonTool11.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            buttonTool11.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlQ;
+            buttonTool12.SharedProps.Caption = "关闭(&E)";
+            buttonTool12.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            buttonTool12.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlE;
+            buttonTool13.SharedProps.Caption = "返回(&B)";
+            buttonTool13.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            buttonTool13.SharedProps.Visible = false;
+            buttonTool14.SharedProps.Caption = "导入EXCEL";
+            buttonTool14.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            this.ultraToolbarsManager1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] {
+            buttonTool8,
+            buttonTool9,
+            buttonTool10,
+            buttonTool11,
+            buttonTool12,
+            buttonTool13,
+            buttonTool14});
+            this.ultraToolbarsManager1.ToolClick += new Infragistics.Win.UltraWinToolbars.ToolClickEventHandler(this.ultraToolbarsManager1_ToolClick);
+            // 
+            // _panel1_Toolbars_Dock_Area_Right
+            // 
+            this._panel1_Toolbars_Dock_Area_Right.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._panel1_Toolbars_Dock_Area_Right.BackColor = System.Drawing.SystemColors.Control;
+            this._panel1_Toolbars_Dock_Area_Right.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Right;
+            this._panel1_Toolbars_Dock_Area_Right.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._panel1_Toolbars_Dock_Area_Right.Location = new System.Drawing.Point(1012, 27);
+            this._panel1_Toolbars_Dock_Area_Right.Name = "_panel1_Toolbars_Dock_Area_Right";
+            this._panel1_Toolbars_Dock_Area_Right.Size = new System.Drawing.Size(0, 5);
+            this._panel1_Toolbars_Dock_Area_Right.ToolbarsManager = this.ultraToolbarsManager1;
+            // 
+            // _panel1_Toolbars_Dock_Area_Top
+            // 
+            this._panel1_Toolbars_Dock_Area_Top.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._panel1_Toolbars_Dock_Area_Top.BackColor = System.Drawing.SystemColors.Control;
+            this._panel1_Toolbars_Dock_Area_Top.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Top;
+            this._panel1_Toolbars_Dock_Area_Top.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._panel1_Toolbars_Dock_Area_Top.Location = new System.Drawing.Point(0, 0);
+            this._panel1_Toolbars_Dock_Area_Top.Name = "_panel1_Toolbars_Dock_Area_Top";
+            this._panel1_Toolbars_Dock_Area_Top.Size = new System.Drawing.Size(1012, 27);
+            this._panel1_Toolbars_Dock_Area_Top.ToolbarsManager = this.ultraToolbarsManager1;
+            // 
+            // _panel1_Toolbars_Dock_Area_Bottom
+            // 
+            this._panel1_Toolbars_Dock_Area_Bottom.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._panel1_Toolbars_Dock_Area_Bottom.BackColor = System.Drawing.SystemColors.Control;
+            this._panel1_Toolbars_Dock_Area_Bottom.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Bottom;
+            this._panel1_Toolbars_Dock_Area_Bottom.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._panel1_Toolbars_Dock_Area_Bottom.Location = new System.Drawing.Point(0, 32);
+            this._panel1_Toolbars_Dock_Area_Bottom.Name = "_panel1_Toolbars_Dock_Area_Bottom";
+            this._panel1_Toolbars_Dock_Area_Bottom.Size = new System.Drawing.Size(1012, 0);
+            this._panel1_Toolbars_Dock_Area_Bottom.ToolbarsManager = this.ultraToolbarsManager1;
+            // 
+            // FrmUserManager_Fill_Panel
+            // 
+            this.FrmUserManager_Fill_Panel.Controls.Add(this.ultraGrid1);
+            this.FrmUserManager_Fill_Panel.Controls.Add(this.ultraExpandableGroupBox1);
+            this.FrmUserManager_Fill_Panel.Controls.Add(this.panel2);
+            this.FrmUserManager_Fill_Panel.Controls.Add(this.panel1);
+            this.FrmUserManager_Fill_Panel.Cursor = System.Windows.Forms.Cursors.Default;
+            this.FrmUserManager_Fill_Panel.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.FrmUserManager_Fill_Panel.Location = new System.Drawing.Point(0, 0);
+            this.FrmUserManager_Fill_Panel.Name = "FrmUserManager_Fill_Panel";
+            this.FrmUserManager_Fill_Panel.Size = new System.Drawing.Size(1012, 733);
+            this.FrmUserManager_Fill_Panel.TabIndex = 0;
+            // 
+            // ultraGrid1
+            // 
+            this.ultraGrid1.Cursor = System.Windows.Forms.Cursors.Hand;
+            ultraGridColumn1.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn1.Header.Caption = "员工编号";
+            ultraGridColumn1.Header.VisiblePosition = 0;
+            ultraGridColumn1.Width = 80;
+            ultraGridColumn2.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn2.Header.Caption = "部门";
+            ultraGridColumn2.Header.VisiblePosition = 2;
+            ultraGridColumn2.Width = 100;
+            ultraGridColumn3.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn3.Header.Caption = "姓名";
+            ultraGridColumn3.Header.VisiblePosition = 5;
+            ultraGridColumn3.Width = 80;
+            ultraGridColumn4.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn4.Header.Caption = "性别";
+            ultraGridColumn4.Header.VisiblePosition = 6;
+            ultraGridColumn4.Width = 60;
+            ultraGridColumn5.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn5.Header.Caption = "年龄";
+            ultraGridColumn5.Header.VisiblePosition = 7;
+            ultraGridColumn5.Hidden = true;
+            ultraGridColumn6.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn6.Header.Caption = "机器地址";
+            ultraGridColumn6.Header.VisiblePosition = 8;
+            ultraGridColumn6.Width = 80;
+            ultraGridColumn7.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn7.Header.Caption = "联系电话";
+            ultraGridColumn7.Header.VisiblePosition = 9;
+            ultraGridColumn7.Width = 100;
+            ultraGridColumn8.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn8.Header.Caption = "岗位";
+            ultraGridColumn8.Header.VisiblePosition = 3;
+            ultraGridColumn8.Width = 100;
+            ultraGridColumn9.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn9.Header.Caption = "职务";
+            ultraGridColumn9.Header.VisiblePosition = 4;
+            ultraGridColumn9.Width = 100;
+            ultraGridColumn10.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn10.Header.Caption = "备注";
+            ultraGridColumn10.Header.VisiblePosition = 11;
+            ultraGridColumn10.Width = 100;
+            ultraGridColumn11.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn11.Header.Caption = "邮件地址";
+            ultraGridColumn11.Header.VisiblePosition = 10;
+            ultraGridColumn11.Width = 100;
+            ultraGridColumn12.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn12.Header.Caption = "上级部门";
+            ultraGridColumn12.Header.VisiblePosition = 1;
+            ultraGridColumn12.Width = 100;
+            ultraGridBand1.Columns.AddRange(new object[] {
+            ultraGridColumn1,
+            ultraGridColumn2,
+            ultraGridColumn3,
+            ultraGridColumn4,
+            ultraGridColumn5,
+            ultraGridColumn6,
+            ultraGridColumn7,
+            ultraGridColumn8,
+            ultraGridColumn9,
+            ultraGridColumn10,
+            ultraGridColumn11,
+            ultraGridColumn12});
+            ultraGridBand1.Override.RowSelectorHeaderStyle = Infragistics.Win.UltraWinGrid.RowSelectorHeaderStyle.SeparateElement;
+            ultraGridBand1.Override.RowSelectorNumberStyle = Infragistics.Win.UltraWinGrid.RowSelectorNumberStyle.RowIndex;
+            ultraGridBand1.Override.RowSelectors = Infragistics.Win.DefaultableBoolean.True;
+            this.ultraGrid1.DisplayLayout.BandsSerializer.Add(ultraGridBand1);
+            this.ultraGrid1.DisplayLayout.BorderStyle = Infragistics.Win.UIElementBorderStyle.RaisedSoft;
+            this.ultraGrid1.DisplayLayout.CaptionVisible = Infragistics.Win.DefaultableBoolean.False;
+            this.ultraGrid1.DisplayLayout.GroupByBox.BorderStyle = Infragistics.Win.UIElementBorderStyle.Solid;
+            this.ultraGrid1.DisplayLayout.GroupByBox.Hidden = true;
+            this.ultraGrid1.DisplayLayout.MaxColScrollRegions = 1;
+            this.ultraGrid1.DisplayLayout.MaxRowScrollRegions = 1;
+            this.ultraGrid1.DisplayLayout.Override.BorderStyleCell = Infragistics.Win.UIElementBorderStyle.RaisedSoft;
+            this.ultraGrid1.DisplayLayout.Override.BorderStyleRow = Infragistics.Win.UIElementBorderStyle.Dotted;
+            this.ultraGrid1.DisplayLayout.Override.CellClickAction = Infragistics.Win.UltraWinGrid.CellClickAction.EditAndSelectText;
+            this.ultraGrid1.DisplayLayout.Override.CellPadding = 0;
+            this.ultraGrid1.DisplayLayout.Override.HeaderClickAction = Infragistics.Win.UltraWinGrid.HeaderClickAction.SortMulti;
+            this.ultraGrid1.DisplayLayout.Override.HeaderStyle = Infragistics.Win.HeaderStyle.Standard;
+            this.ultraGrid1.DisplayLayout.Override.MinRowHeight = 21;
+            this.ultraGrid1.DisplayLayout.Override.RowSelectorHeaderStyle = Infragistics.Win.UltraWinGrid.RowSelectorHeaderStyle.SeparateElement;
+            this.ultraGrid1.DisplayLayout.Override.RowSelectorNumberStyle = Infragistics.Win.UltraWinGrid.RowSelectorNumberStyle.RowIndex;
+            this.ultraGrid1.DisplayLayout.Override.RowSelectors = Infragistics.Win.DefaultableBoolean.True;
+            this.ultraGrid1.DisplayLayout.ScrollBounds = Infragistics.Win.UltraWinGrid.ScrollBounds.ScrollToFill;
+            this.ultraGrid1.DisplayLayout.ScrollStyle = Infragistics.Win.UltraWinGrid.ScrollStyle.Immediate;
+            this.ultraGrid1.DisplayLayout.ViewStyleBand = Infragistics.Win.UltraWinGrid.ViewStyleBand.OutlookGroupBy;
+            this.ultraGrid1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.ultraGrid1.Location = new System.Drawing.Point(0, 88);
+            this.ultraGrid1.Name = "ultraGrid1";
+            this.ultraGrid1.Size = new System.Drawing.Size(1012, 477);
+            this.ultraGrid1.TabIndex = 2;
+            this.ultraGrid1.Text = "ultraGrid1";
+            // 
+            // ultraExpandableGroupBox1
+            // 
+            this.ultraExpandableGroupBox1.Controls.Add(this.ultraExpandableGroupBoxPanel1);
+            this.ultraExpandableGroupBox1.Dock = System.Windows.Forms.DockStyle.Bottom;
+            this.ultraExpandableGroupBox1.ExpandedSize = new System.Drawing.Size(1012, 168);
+            this.ultraExpandableGroupBox1.Location = new System.Drawing.Point(0, 565);
+            this.ultraExpandableGroupBox1.Name = "ultraExpandableGroupBox1";
+            this.ultraExpandableGroupBox1.Size = new System.Drawing.Size(1012, 168);
+            this.ultraExpandableGroupBox1.SupportThemes = false;
+            this.ultraExpandableGroupBox1.TabIndex = 3;
+            this.ultraExpandableGroupBox1.Text = "编辑区域";
+            this.ultraExpandableGroupBox1.ViewStyle = Infragistics.Win.Misc.GroupBoxViewStyle.Office2003;
+            // 
+            // ultraExpandableGroupBoxPanel1
+            // 
+            this.ultraExpandableGroupBoxPanel1.Controls.Add(this.panel3);
+            this.ultraExpandableGroupBoxPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.ultraExpandableGroupBoxPanel1.Location = new System.Drawing.Point(2, 22);
+            this.ultraExpandableGroupBoxPanel1.Name = "ultraExpandableGroupBoxPanel1";
+            this.ultraExpandableGroupBoxPanel1.Size = new System.Drawing.Size(1008, 144);
+            this.ultraExpandableGroupBoxPanel1.TabIndex = 0;
+            // 
+            // panel3
+            // 
+            this.panel3.BackColor = System.Drawing.Color.Gainsboro;
+            this.panel3.Controls.Add(this.flowLayoutPanel1);
+            this.panel3.Controls.Add(this.ultxtEmail);
+            this.panel3.Controls.Add(this.ultraLabel1);
+            this.panel3.Controls.Add(this.ulcmeDepartment);
+            this.panel3.Controls.Add(this.ultxtMemo);
+            this.panel3.Controls.Add(this.ultxtPhono);
+            this.panel3.Controls.Add(this.ultxtZW);
+            this.panel3.Controls.Add(this.ultxtGW);
+            this.panel3.Controls.Add(this.ultxtAge);
+            this.panel3.Controls.Add(this.ultxtUserName);
+            this.panel3.Controls.Add(this.ultxtUserNo);
+            this.panel3.Controls.Add(this.ulcmeSex);
+            this.panel3.Controls.Add(this.ultraLabel11);
+            this.panel3.Controls.Add(this.ultraLabel10);
+            this.panel3.Controls.Add(this.ultraLabel9);
+            this.panel3.Controls.Add(this.ultraLabel8);
+            this.panel3.Controls.Add(this.ultraLabel7);
+            this.panel3.Controls.Add(this.ultraLabel6);
+            this.panel3.Controls.Add(this.ultraLabel5);
+            this.panel3.Controls.Add(this.ultraLabel4);
+            this.panel3.Controls.Add(this.ultraLabel3);
+            this.panel3.Controls.Add(this.ultraLabel2);
+            this.panel3.Dock = System.Windows.Forms.DockStyle.Bottom;
+            this.panel3.Location = new System.Drawing.Point(0, -8);
+            this.panel3.Name = "panel3";
+            this.panel3.Size = new System.Drawing.Size(1008, 152);
+            this.panel3.TabIndex = 0;
+            // 
+            // flowLayoutPanel1
+            // 
+            this.flowLayoutPanel1.AutoScroll = true;
+            this.flowLayoutPanel1.Location = new System.Drawing.Point(806, 19);
+            this.flowLayoutPanel1.Name = "flowLayoutPanel1";
+            this.flowLayoutPanel1.Size = new System.Drawing.Size(171, 123);
+            this.flowLayoutPanel1.TabIndex = 24;
+            // 
+            // ultxtEmail
+            // 
+            appearance1.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtEmail.Appearance = appearance1;
+            this.ultxtEmail.AutoSize = true;
+            this.ultxtEmail.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtEmail.Location = new System.Drawing.Point(560, 85);
+            this.ultxtEmail.Name = "ultxtEmail";
+            this.ultxtEmail.Size = new System.Drawing.Size(160, 21);
+            this.ultxtEmail.TabIndex = 23;
+            // 
+            // ultraLabel1
+            // 
+            this.ultraLabel1.Location = new System.Drawing.Point(503, 86);
+            this.ultraLabel1.Name = "ultraLabel1";
+            this.ultraLabel1.Size = new System.Drawing.Size(54, 16);
+            this.ultraLabel1.TabIndex = 22;
+            this.ultraLabel1.Text = "邮件地址";
+            // 
+            // ulcmeDepartment
+            // 
+            this.ulcmeDepartment.AutoSize = true;
+            this.ulcmeDepartment.DropDownButtonDisplayStyle = Infragistics.Win.ButtonDisplayStyle.Never;
+            this.ulcmeDepartment.DropDownStyle = Infragistics.Win.DropDownStyle.DropDownList;
+            this.ulcmeDepartment.Location = new System.Drawing.Point(560, 17);
+            this.ulcmeDepartment.Name = "ulcmeDepartment";
+            this.ulcmeDepartment.Size = new System.Drawing.Size(160, 21);
+            this.ulcmeDepartment.TabIndex = 21;
+            this.ulcmeDepartment.SelectionChanged += new System.EventHandler(this.ultraComboEditor2_SelectionChanged);
+            this.ulcmeDepartment.EditorButtonClick += new Infragistics.Win.UltraWinEditors.EditorButtonEventHandler(this.ultraComboEditor2_EditorButtonClick);
+            // 
+            // ultxtMemo
+            // 
+            appearance2.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtMemo.Appearance = appearance2;
+            this.ultxtMemo.AutoSize = true;
+            this.ultxtMemo.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtMemo.Location = new System.Drawing.Point(81, 119);
+            this.ultxtMemo.Name = "ultxtMemo";
+            this.ultxtMemo.Size = new System.Drawing.Size(640, 21);
+            this.ultxtMemo.TabIndex = 19;
+            // 
+            // ultxtPhono
+            // 
+            appearance3.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtPhono.Appearance = appearance3;
+            this.ultxtPhono.AutoSize = true;
+            this.ultxtPhono.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtPhono.Location = new System.Drawing.Point(560, 51);
+            this.ultxtPhono.Name = "ultxtPhono";
+            this.ultxtPhono.Size = new System.Drawing.Size(160, 21);
+            this.ultxtPhono.TabIndex = 18;
+            // 
+            // ultxtZW
+            // 
+            appearance4.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtZW.Appearance = appearance4;
+            this.ultxtZW.AutoSize = true;
+            this.ultxtZW.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtZW.Location = new System.Drawing.Point(313, 51);
+            this.ultxtZW.Name = "ultxtZW";
+            this.ultxtZW.Size = new System.Drawing.Size(136, 21);
+            this.ultxtZW.TabIndex = 17;
+            // 
+            // ultxtGW
+            // 
+            appearance5.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtGW.Appearance = appearance5;
+            this.ultxtGW.AutoSize = true;
+            this.ultxtGW.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtGW.Location = new System.Drawing.Point(81, 51);
+            this.ultxtGW.Name = "ultxtGW";
+            this.ultxtGW.Size = new System.Drawing.Size(136, 21);
+            this.ultxtGW.TabIndex = 16;
+            // 
+            // ultxtAge
+            // 
+            appearance6.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtAge.Appearance = appearance6;
+            this.ultxtAge.AutoSize = true;
+            this.ultxtAge.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtAge.Location = new System.Drawing.Point(313, 81);
+            this.ultxtAge.Name = "ultxtAge";
+            this.ultxtAge.Size = new System.Drawing.Size(136, 21);
+            this.ultxtAge.TabIndex = 15;
+            this.ultxtAge.Visible = false;
+            // 
+            // ultxtUserName
+            // 
+            appearance7.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtUserName.Appearance = appearance7;
+            this.ultxtUserName.AutoSize = true;
+            this.ultxtUserName.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtUserName.Location = new System.Drawing.Point(313, 17);
+            this.ultxtUserName.Name = "ultxtUserName";
+            this.ultxtUserName.Size = new System.Drawing.Size(136, 21);
+            this.ultxtUserName.TabIndex = 14;
+            // 
+            // ultxtUserNo
+            // 
+            appearance8.BackColor = System.Drawing.Color.LavenderBlush;
+            this.ultxtUserNo.Appearance = appearance8;
+            this.ultxtUserNo.AutoSize = true;
+            this.ultxtUserNo.BackColor = System.Drawing.Color.LavenderBlush;
+            this.ultxtUserNo.Location = new System.Drawing.Point(81, 17);
+            this.ultxtUserNo.Name = "ultxtUserNo";
+            this.ultxtUserNo.Size = new System.Drawing.Size(136, 21);
+            this.ultxtUserNo.TabIndex = 13;
+            // 
+            // ulcmeSex
+            // 
+            this.ulcmeSex.AutoSize = true;
+            this.ulcmeSex.DropDownStyle = Infragistics.Win.DropDownStyle.DropDownList;
+            valueListItem2.DataValue = "男";
+            valueListItem2.DisplayText = "男";
+            valueListItem1.DataValue = valueListItem2;
+            valueListItem1.DisplayText = "男";
+            valueListItem4.DataValue = "女";
+            valueListItem4.DisplayText = "女";
+            valueListItem3.DataValue = valueListItem4;
+            valueListItem3.DisplayText = "女";
+            this.ulcmeSex.Items.Add(valueListItem1);
+            this.ulcmeSex.Items.Add(valueListItem3);
+            this.ulcmeSex.Location = new System.Drawing.Point(81, 85);
+            this.ulcmeSex.Name = "ulcmeSex";
+            this.ulcmeSex.Size = new System.Drawing.Size(136, 21);
+            this.ulcmeSex.TabIndex = 11;
+            // 
+            // ultraLabel11
+            // 
+            this.ultraLabel11.Location = new System.Drawing.Point(36, 120);
+            this.ultraLabel11.Name = "ultraLabel11";
+            this.ultraLabel11.Size = new System.Drawing.Size(42, 16);
+            this.ultraLabel11.TabIndex = 9;
+            this.ultraLabel11.Text = "备  注";
+            // 
+            // ultraLabel10
+            // 
+            this.ultraLabel10.Location = new System.Drawing.Point(503, 52);
+            this.ultraLabel10.Name = "ultraLabel10";
+            this.ultraLabel10.Size = new System.Drawing.Size(54, 16);
+            this.ultraLabel10.TabIndex = 8;
+            this.ultraLabel10.Text = "联系电话";
+            // 
+            // ultraLabel9
+            // 
+            this.ultraLabel9.Location = new System.Drawing.Point(734, 19);
+            this.ultraLabel9.Name = "ultraLabel9";
+            this.ultraLabel9.Size = new System.Drawing.Size(66, 16);
+            this.ultraLabel9.TabIndex = 7;
+            this.ultraLabel9.Text = "机器IP地址";
+            this.toolTip1.SetToolTip(this.ultraLabel9, "鼠标左击增加IP框;右击减少");
+            this.ultraLabel9.MouseClick += new System.Windows.Forms.MouseEventHandler(this.ultraLabel9_MouseClick);
+            // 
+            // ultraLabel8
+            // 
+            this.ultraLabel8.Location = new System.Drawing.Point(528, 18);
+            this.ultraLabel8.Name = "ultraLabel8";
+            this.ultraLabel8.Size = new System.Drawing.Size(29, 16);
+            this.ultraLabel8.TabIndex = 6;
+            this.ultraLabel8.Text = "部门";
+            // 
+            // ultraLabel7
+            // 
+            this.ultraLabel7.Location = new System.Drawing.Point(281, 52);
+            this.ultraLabel7.Name = "ultraLabel7";
+            this.ultraLabel7.Size = new System.Drawing.Size(29, 16);
+            this.ultraLabel7.TabIndex = 5;
+            this.ultraLabel7.Text = "职务";
+            // 
+            // ultraLabel6
+            // 
+            this.ultraLabel6.Location = new System.Drawing.Point(280, 84);
+            this.ultraLabel6.Name = "ultraLabel6";
+            this.ultraLabel6.Size = new System.Drawing.Size(32, 16);
+            this.ultraLabel6.TabIndex = 4;
+            this.ultraLabel6.Text = "年龄";
+            this.ultraLabel6.Visible = false;
+            // 
+            // ultraLabel5
+            // 
+            this.ultraLabel5.Location = new System.Drawing.Point(281, 18);
+            this.ultraLabel5.Name = "ultraLabel5";
+            this.ultraLabel5.Size = new System.Drawing.Size(29, 16);
+            this.ultraLabel5.TabIndex = 3;
+            this.ultraLabel5.Text = "姓名";
+            // 
+            // ultraLabel4
+            // 
+            this.ultraLabel4.Location = new System.Drawing.Point(49, 52);
+            this.ultraLabel4.Name = "ultraLabel4";
+            this.ultraLabel4.Size = new System.Drawing.Size(29, 16);
+            this.ultraLabel4.TabIndex = 2;
+            this.ultraLabel4.Text = "岗位";
+            // 
+            // ultraLabel3
+            // 
+            this.ultraLabel3.Location = new System.Drawing.Point(49, 86);
+            this.ultraLabel3.Name = "ultraLabel3";
+            this.ultraLabel3.Size = new System.Drawing.Size(29, 16);
+            this.ultraLabel3.TabIndex = 1;
+            this.ultraLabel3.Text = "性别";
+            // 
+            // ultraLabel2
+            // 
+            this.ultraLabel2.Location = new System.Drawing.Point(24, 18);
+            this.ultraLabel2.Name = "ultraLabel2";
+            this.ultraLabel2.Size = new System.Drawing.Size(54, 16);
+            this.ultraLabel2.TabIndex = 0;
+            this.ultraLabel2.Text = "员工编号";
+            // 
+            // panel2
+            // 
+            this.panel2.BackColor = System.Drawing.Color.Gainsboro;
+            this.panel2.Controls.Add(this.ultLoginID);
+            this.panel2.Controls.Add(this.ultraLabel12);
+            this.panel2.Controls.Add(this.ultraTextEditor8);
+            this.panel2.Controls.Add(this.ultraCheckEditor1);
+            this.panel2.Controls.Add(this.ultraButton1);
+            this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
+            this.panel2.Location = new System.Drawing.Point(0, 32);
+            this.panel2.Name = "panel2";
+            this.panel2.Size = new System.Drawing.Size(1012, 56);
+            this.panel2.TabIndex = 1;
+            // 
+            // ultLoginID
+            // 
+            appearance9.BackColor = System.Drawing.Color.LightCyan;
+            this.ultLoginID.Appearance = appearance9;
+            this.ultLoginID.AutoSize = true;
+            this.ultLoginID.BackColor = System.Drawing.Color.LightCyan;
+            this.ultLoginID.FlatMode = true;
+            this.ultLoginID.Location = new System.Drawing.Point(371, 18);
+            this.ultLoginID.Name = "ultLoginID";
+            this.ultLoginID.Size = new System.Drawing.Size(152, 19);
+            this.ultLoginID.TabIndex = 3;
+            this.ultLoginID.Visible = false;
+            this.ultLoginID.EditorButtonClick += new Infragistics.Win.UltraWinEditors.EditorButtonEventHandler(this.ultLoginID_EditorButtonClick);
+            // 
+            // ultraLabel12
+            // 
+            this.ultraLabel12.Location = new System.Drawing.Point(313, 22);
+            this.ultraLabel12.Name = "ultraLabel12";
+            this.ultraLabel12.Size = new System.Drawing.Size(54, 16);
+            this.ultraLabel12.TabIndex = 0;
+            this.ultraLabel12.Text = "员工编号";
+            this.ultraLabel12.Visible = false;
+            // 
+            // ultraTextEditor8
+            // 
+            appearance10.BackColor = System.Drawing.Color.Gainsboro;
+            this.ultraTextEditor8.Appearance = appearance10;
+            this.ultraTextEditor8.AutoSize = true;
+            this.ultraTextEditor8.BackColor = System.Drawing.Color.Gainsboro;
+            this.ultraTextEditor8.Enabled = false;
+            this.ultraTextEditor8.FlatMode = true;
+            this.ultraTextEditor8.Location = new System.Drawing.Point(86, 18);
+            this.ultraTextEditor8.Name = "ultraTextEditor8";
+            this.ultraTextEditor8.ReadOnly = true;
+            this.ultraTextEditor8.Size = new System.Drawing.Size(149, 19);
+            this.ultraTextEditor8.TabIndex = 1;
+            this.ultraTextEditor8.EditorButtonClick += new Infragistics.Win.UltraWinEditors.EditorButtonEventHandler(this.ultraTextEditor8_EditorButtonClick);
+            // 
+            // ultraCheckEditor1
+            // 
+            this.ultraCheckEditor1.Location = new System.Drawing.Point(31, 18);
+            this.ultraCheckEditor1.Name = "ultraCheckEditor1";
+            this.ultraCheckEditor1.Size = new System.Drawing.Size(48, 20);
+            this.ultraCheckEditor1.TabIndex = 0;
+            this.ultraCheckEditor1.Text = "部门";
+            this.ultraCheckEditor1.CheckedChanged += new System.EventHandler(this.ultraCheckEditor1_CheckedChanged);
+            // 
+            // ultraButton1
+            // 
+            this.ultraButton1.Location = new System.Drawing.Point(237, 17);
+            this.ultraButton1.Name = "ultraButton1";
+            this.ultraButton1.Size = new System.Drawing.Size(27, 21);
+            this.ultraButton1.TabIndex = 2;
+            this.ultraButton1.Text = ">>";
+            this.toolTip1.SetToolTip(this.ultraButton1, "部门维护");
+            this.ultraButton1.Visible = false;
+            this.ultraButton1.Click += new System.EventHandler(this.ultraButton1_Click);
+            // 
+            // FrmUserManager
+            // 
+            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
+            this.ClientSize = new System.Drawing.Size(1012, 733);
+            this.Controls.Add(this.FrmUserManager_Fill_Panel);
+            this.Name = "FrmUserManager";
+            this.Text = "系统用户管理";
+            this.Load += new System.EventHandler(this.FrmUserManager_Load);
+            this.panel1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.ultraToolbarsManager1)).EndInit();
+            this.FrmUserManager_Fill_Panel.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.ultraGrid1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraExpandableGroupBox1)).EndInit();
+            this.ultraExpandableGroupBox1.ResumeLayout(false);
+            this.ultraExpandableGroupBoxPanel1.ResumeLayout(false);
+            this.panel3.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtEmail)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ulcmeDepartment)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtMemo)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtPhono)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtZW)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtGW)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtAge)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtUserName)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtUserNo)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ulcmeSex)).EndInit();
+            this.panel2.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.ultLoginID)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor8)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+        #endregion
+
+        #region "显示窗体"
+
+        private void FrmUserManager_Load(object sender, System.EventArgs e)
+        {
+            StrUser = Core.Mes.ClientFrameWork.ClientCommon._UserInfo.UserName;
+
+            GetDepartmentData();
+            GetUserData("", true);
+            GetOperDepart();
+            GetChildDept();
+            InitComboBox();
+            InitGrid();
+            if (operDepart == "ROOT")
+            {
+                ultraButton1.Visible = true;
+            }
+
+            this.createIpedt(1);
+        }
+        private void GetDepartmentData()
+        {
+            try
+            {
+                CallingMessage par = new CallingMessage();
+                par.ServerName = "PurviewManager";
+                par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+                par.MethodName = "SelectUAM_DEPARTMENT";
+                par.args = new object[] { " order by DEPARTMENTID " };
+
+                string strOut = "";
+
+                _departmentData = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+
+                _selectPartSQL = strOut;
+            }
+            catch
+            { }
+        }
+
+        private void InitComboBox()
+        {
+            if (_departmentData != null && _departmentData.Tables.Count > 0)
+            {
+                DataTable dt = this._departmentData.Tables[0].Copy();
+
+                this.ulcmeDepartment.Items.Clear();
+                foreach (DataRow dr in dt.Rows)
+                {
+                    if (dr["DEPARTMENTID"].ToString() == "ROOT" && operDepart != "ROOT") continue;
+                    try
+                    {
+                        this.ulcmeDepartment.Items.Add(dr["DEPARTMENTID"], dr["DEPARTMENTNAME"].ToString());
+                    }
+                    catch
+                    { }
+                }
+            }
+        }
+        private void GetUserData(string strWhere, bool flag)
+        {
+            try
+            {
+                if (!flag)
+                {
+                    _userData.Tables[0].DefaultView.RowFilter = strWhere;
+                    return;
+                }
+                CallingMessage par = new CallingMessage();
+                par.ServerName = "PurviewManager";
+                par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+                par.MethodName = "SelectUAM_USER";
+                par.args = new object[] { strWhere };
+
+                string strOut = "";
+
+                _userData = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+
+                _selectUserSQL = strOut;
+            }
+            catch
+            { }
+        }
+        private void GetOperDepart()
+        {
+            try
+            {
+                if (_userData != null && _userData.Tables.Count > 0)
+                {
+                    DataTable dt = this._userData.Tables[0].Copy();
+
+                    foreach (DataRow dr in dt.Rows)
+                    {
+                        if (dr["NAME"].ToString() == StrUser)
+                        {
+                            operDepart = dr["DEPARTMENTID"].ToString();
+                            //operDepart=operDepart.Substring(0,3);
+                            //if(operDepart=="xg0")
+                            //{
+                            //    operDepart="xg";
+                            //}
+                            DataTable dn = this._departmentData.Tables[0].Copy();
+                            foreach (DataRow dm in dn.Rows)
+                            {
+                                if (dm["DEPARTMENTID"].ToString() == operDepart)
+                                {
+                                    operDepartname = dm["DEPARTMENTNAME"].ToString();
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            catch
+            { }
+        }
+        private void InitGrid()
+        {
+            #region "	ValueList	"
+            GetPartData();
+            ultraGrid1.DisplayLayout.Bands[0].Columns["DEPARTMENTID"].ValueList = ultraGrid1.DisplayLayout.ValueLists["part"];
+            ultraGrid1.DisplayLayout.Bands[0].Columns["PD"].ValueList = ultraGrid1.DisplayLayout.ValueLists["part"];
+            #endregion
+
+            this.ultraCheckEditor1.CheckedValue = true;
+            this.ultraTextEditor8.Enabled = true;
+            this.ultraTextEditor8.Text = operDepartname;
+            this.ultraTextEditor8.Tag = allDept;
+            Query();
+            //			this.ultraGrid1.DataSource = this._userData.Tables[0];
+
+            this.ultraGrid1.AfterRowActivate += new EventHandler(ultraGrid1_AfterRowActivate);
+        }
+        private void ultraGrid1_AfterRowActivate(object sender, System.EventArgs e)
+        {
+            try
+            {
+                if (this.ultraGrid1.ActiveRow == null) return;
+                UltraGridRow ugr = this.ultraGrid1.ActiveRow;
+
+                this.ultxtUserNo.Text = ugr.Cells["USERID"].Value.ToString();
+                this.ulcmeDepartment.Value = ugr.Cells["DEPARTMENTID"].Value;
+                this.ultxtUserName.Text = ugr.Cells["NAME"].Value.ToString();
+                this.ulcmeSex.Text = ugr.Cells["SEX"].Value.ToString();
+                this.ultxtAge.Text = ugr.Cells["AGE"].Value.ToString();
+                //this.ulmskedtIP.Text = ugr.Cells["COMPUTERIP"].Value.ToString();
+                this.analysisIpstr(ugr.Cells["COMPUTERIP"].Value.ToString());
+
+                this.ultxtPhono.Text = ugr.Cells["HOMEPHONE"].Value.ToString();
+                this.ultxtGW.Text = ugr.Cells["WORKPOS"].Value.ToString();
+                this.ultxtZW.Text = ugr.Cells["WORKJOB"].Value.ToString();
+                this.ultxtMemo.Text = ugr.Cells["MEMO"].Value.ToString();
+                this.ultxtEmail.Text = ugr.Cells["EMAIL"].Value.ToString();
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine(ex.Message);
+            }
+        }
+        private void GetPartData()
+        {
+            if (ultraGrid1.DisplayLayout.ValueLists.Exists("part"))
+                ultraGrid1.DisplayLayout.ValueLists["part"].ValueListItems.Clear();
+            else
+                ultraGrid1.DisplayLayout.ValueLists.Add("part");
+            //try
+            //{
+            //    ultraGrid1.DisplayLayout.ValueLists["part"].ValueListItems.Clear();
+            //}
+            //catch
+            //{
+            //    ultraGrid1.DisplayLayout.ValueLists.Add("part");
+            //}
+            DataTable dt = this._departmentData.Tables[0].Copy();
+            foreach (DataRow dr in dt.Rows)
+            {
+                Infragistics.Win.ValueListItem vli = new Infragistics.Win.ValueListItem();
+                vli.DisplayText = dr["DEPARTMENTNAME"].ToString();
+                vli.DataValue = dr["DEPARTMENTID"];
+                ultraGrid1.DisplayLayout.ValueLists["part"].ValueListItems.Add(vli);
+            }
+        }
+        #endregion
+
+        #region "工具栏操作"
+        private void ultraToolbarsManager1_ToolClick(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
+        {
+            switch (e.Tool.Key)
+            {
+                case "add":
+                    Add();
+                    GetUserData("", true);
+                    break;
+                case "del":
+                    Del();
+                    break;
+                case "edit":
+                    Edit();
+                    break;
+                case "query":
+                    Query();
+                    break;
+                case "exit":
+                    this.Close();
+                    break;
+                case "back":
+                    //                  this.ultraToolbarsManager1.Toolbars[0].Tools["back"].SharedProps.Visible=false;
+                    //				    RefreshGrid("");
+                    //					ultraCheckEditor1.Checked = false;
+                    //					ultraTextEditor8.Text = "";
+                    this.ultraCheckEditor1.CheckedValue = true;
+                    if (ultLoginID.Text.Trim().Length > 0)
+                    {
+                        ultLoginID.Tag = ultLoginID.Text.Trim();
+                        ultLoginID.Text = "";
+                    }
+                    this.ultraTextEditor8.Enabled = true;
+                    this.ultraTextEditor8.Text = operDepartname;
+                    this.ultraTextEditor8.Tag = allDept;
+                    Query();
+                    break;
+                case "leadin":
+                    try
+                    {
+                        string StrfileName = string.Format("c:\\{0}.xls", this.Text);
+                        this.ultraGridExcelExporter1.Export(this.ultraGrid1, StrfileName);
+
+                        ProcessStartInfo p = new ProcessStartInfo(StrfileName);
+                        p.WorkingDirectory = Path.GetDirectoryName(StrfileName);
+                        Process.Start(p);
+                    }
+                    catch (Exception ex)
+                    {
+                        MessageBox.Show(ex.Message);
+                    }
+                    break;
+            }
+        }
+        private void Add()
+        {
+            if (this.ultxtUserNo.Text.Trim() == "")
+            {
+                MessageBox.Show("请录入员工编号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                return;
+            }
+            if (this.ultxtUserName.Text.Trim() == "")
+            {
+                MessageBox.Show("请录入员工姓名!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                return;
+            }
+            if (this.ulcmeDepartment.Value == null)
+            {
+                MessageBox.Show("请选择员工所在部门!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                return;
+            }
+            if (this.ulcmeDepartment.Value.ToString() == "ROOT")
+            {
+                this.ulcmeDepartment.Value = null;
+                MessageBox.Show("必须选择下属部门!");
+                return;
+            }
+            if (!(RightsComm.CheckRole(ulcmeDepartment.Value.ToString())))
+            {
+                return;
+            }
+            //if (allDept.IndexOf("'" + ulcmeDepartment.Value.ToString() + "'") < 0 && operDepart != "ROOT")
+            //{
+            //  this.ulcmeDepartment.Value = null;
+            //  MessageBox.Show("你没有配置这一部门用户的权限,请重新选择部门!");
+            //  return;
+            //}
+            ArrayList al = new ArrayList();
+
+            al.Add(this.ultxtUserNo.Text.Trim());
+            al.Add(this.ulcmeDepartment.Value);
+            al.Add(this.ultxtUserName.Text.Trim());
+            if (this.ulcmeSex.SelectedIndex != -1)
+            {
+                al.Add(this.ulcmeSex.Text.Trim());
+            }
+            else
+            {
+                al.Add("");
+            }
+
+            if (this.ultxtAge.Text == "")
+                al.Add(0);
+            else
+                al.Add(this.ultxtAge.Text.Trim());
+
+            //al.Add(this.ulmskedtIP.Text.Trim());
+            al.Add(this.getIpstr());
+            this.checkIpstr(this.getIpstr());
+
+            al.Add(this.ultxtPhono.Text.Trim());
+            al.Add(this.ultxtGW.Text.Trim());
+            al.Add(this.ultxtZW.Text.Trim());
+            al.Add(this.ultxtMemo.Text.Trim());
+            al.Add(this.ultxtEmail.Text.Trim());
+
+            try
+            {
+                CallingMessage par = new CallingMessage();
+                par.ServerName = "PurviewManager";
+                par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+                par.MethodName = "InsertUAM_USER";
+                par.args = new object[] { al };
+
+                string strOut = "";
+
+                object obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut);
+
+                if (strOut != "")
+                {
+                    MessageBox.Show("新增失败! \n" + strOut);
+                    return;
+                }
+                else
+                {
+                    if ((int)obj != 1)
+                    {
+                        MessageBox.Show("新增失败!");
+                        return;
+                    }
+                }
+            }
+            catch
+            {
+                return;
+            }
+            this.GetDepartmentData();
+            UltraGridRow ugr = this.ultraGrid1.DisplayLayout.Bands[0].AddNew();
+            ugr.Cells["USERID"].Value = al[0];
+            ugr.Cells["DEPARTMENTID"].Value = al[1];
+            ugr.Cells["NAME"].Value = al[2];
+            ugr.Cells["SEX"].Value = al[3];
+            ugr.Cells["AGE"].Value = al[4];
+
+            //ugr.Cells["COMPUTERIP"].Value = al[5];
+            this.analysisIpstr(ugr.Cells["COMPUTERIP"].Value.ToString());
+
+            ugr.Cells["HOMEPHONE"].Value = al[6];
+            ugr.Cells["WORKPOS"].Value = al[7];
+            ugr.Cells["WORKJOB"].Value = al[8];
+            ugr.Cells["MEMO"].Value = al[9];
+            ugr.Cells["EMAIL"].Value = al[10];
+            for (int i = 0; i < _departmentData.Tables[0].Rows.Count; i++)
+            {
+                if (_departmentData.Tables[0].Rows[i]["DEPARTMENTID"].ToString() == al[1].ToString())
+                {
+                    ugr.Cells["PD"].Value = _departmentData.Tables[0].Rows[i]["DEPARTMENTPID"].ToString();
+                    break;
+                }
+            }
+
+            this.ultraGrid1.UpdateData();
+        }
+        private void Del()
+        {
+            int i = 0;
+            UltraGridRow ugr = this.ultraGrid1.ActiveRow;
+            if (ugr == null)
+            {
+                MessageBox.Show("请选择要删除的员工!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                return;
+            }
+            if (MessageBox.Show("是否确认删除选中的员工?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
+            {
+                return;
+            }
+            string targetName = ugr.Cells["NAME"].Value.ToString();
+            if (MessageBox.Show("是否确认删除员工----" + targetName + "----", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
+            {
+                return;
+            }
+            try
+            {
+                string OpDptID = "";
+                OpDptID = ugr.Cells["DEPARTMENTID"].Value.ToString();
+                if (!(RightsComm.CheckRole(OpDptID)))
+                    return;
+                i = ugr.Index;
+
+                CallingMessage par = new CallingMessage();
+                par.ServerName = "PurviewManager";
+                par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+                par.MethodName = "DeleteUAM_USER";
+                par.args = new object[] { ugr.Cells[0].Value.ToString() };
+
+                string strOut = "";
+
+                object obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut);
+
+                if (strOut != "")
+                {
+                    MessageBox.Show("删除失败! \n" + strOut);
+                    return;
+                }
+                else
+                {
+                    if ((int)obj != 1)
+                    {
+                        MessageBox.Show("删除失败!");
+                        return;
+                    }
+                }
+            }
+            catch //(Exception ex)
+            {
+                //			CoreMesLogger.log(this.GetType()).Error(ex.Message);
+                return;
+            }
+
+            this.ultraGrid1.ActiveRow.Delete(false);
+            this.ultraGrid1.UpdateData();
+
+            try
+            {
+                this.ultraGrid1.Rows[i].Activate();
+            }
+            catch
+            {
+                int count = this.ultraGrid1.Rows.Count;
+                if (count > 0)
+                    this.ultraGrid1.Rows[count - 1].Activate();
+            }
+        }
+        private void Edit()
+        {
+            UltraGridRow ugr = this.ultraGrid1.ActiveRow;
+            if (ugr == null)
+            {
+                MessageBox.Show("请选择要修改的员工!");
+                return;
+            }
+            if (this.ultxtUserNo.Text.Trim() != ugr.Cells["USERID"].Text.Trim())
+            {
+                MessageBox.Show("不能修改员工编号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                return;
+            }
+            if (this.ultxtUserName.Text.Trim() == "")
+            {
+                MessageBox.Show("请录入员工姓名!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                return;
+            }
+            if (this.ulcmeDepartment.Value == null)
+            {
+                MessageBox.Show("请选择员工所在部门!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                return;
+            }
+            if (this.ulcmeDepartment.Value.ToString() == "ROOT")
+            {
+                this.ulcmeDepartment.Value = null;
+                MessageBox.Show("必须选择下属部门!");
+                return;
+            }
+            if (allDept.IndexOf("'" + ulcmeDepartment.Value.ToString() + "'") < 0 && operDepart != "ROOT")
+            {
+                this.ulcmeDepartment.Value = null;
+                MessageBox.Show("你没有修改该用户的权限,请重新选择部门!");
+                return;
+            }
+            ArrayList al = new ArrayList();
+
+            al.Add(this.ultxtUserNo.Text.Trim());
+
+            al.Add(this.ulcmeDepartment.Value);
+
+            al.Add(this.ultxtUserName.Text.Trim());
+            al.Add(this.ulcmeSex.Text.Trim());
+            al.Add((ultxtAge.Text.Trim() != "") ? ultxtAge.Text.Trim() : "0");
+
+            //al.Add(this.ulmskedtIP.Text.Trim());
+            al.Add(this.getIpstr());
+            this.checkIpstr(this.getIpstr());
+
+            al.Add(this.ultxtPhono.Text.Trim());
+            al.Add(this.ultxtGW.Text.Trim());
+            al.Add(this.ultxtZW.Text.Trim());
+            al.Add(this.ultxtMemo.Text.Trim());
+            al.Add(this.ultxtEmail.Text.Trim());
+
+            try
+            {
+                CallingMessage par = new CallingMessage();
+                par.ServerName = "PurviewManager";
+                par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+                par.MethodName = "UpdateUAM_USER";
+                par.args = new object[] { al };
+
+                string strOut = "";
+
+                object obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut);
+
+                if (strOut != "")
+                {
+                    MessageBox.Show("修改失败 \n" + strOut);
+                    return;
+                }
+                else
+                {
+                    int i = (int)obj;
+                    if (i != 1)
+                    {
+                        MessageBox.Show("修改失败");
+                        return;
+                    }
+                }
+            }
+            catch //(Exception ex)
+            {
+                //			CoreMesLogger.log(this.GetType()).Error(ex.Message);
+                return;
+            }
+            ugr.Cells["DEPARTMENTID"].Value = al[1];
+            ugr.Cells["NAME"].Value = al[2];
+            ugr.Cells["SEX"].Value = al[3];
+            ugr.Cells["AGE"].Value = al[4];
+
+            //ugr.Cells["COMPUTERIP"].Value = al[5];
+            this.analysisIpstr(ugr.Cells["COMPUTERIP"].Value.ToString());
+
+            ugr.Cells["HOMEPHONE"].Value = al[6];
+            ugr.Cells["WORKPOS"].Value = al[7];
+            ugr.Cells["WORKJOB"].Value = al[8];
+            ugr.Cells["MEMO"].Value = al[9];
+            ugr.Cells["EMAIL"].Value = al[10];
+            for (int i = 0; i < _departmentData.Tables[0].Rows.Count; i++)
+            {
+                if (_departmentData.Tables[0].Rows[i]["DEPARTMENTID"].ToString() == al[1].ToString())
+                {
+                    ugr.Cells["PD"].Value = _departmentData.Tables[0].Rows[i]["DEPARTMENTPID"].ToString();
+                    break;
+                }
+            }
+
+            this.ultraGrid1.UpdateData();
+        }
+        private void Query()
+        {
+            try
+            {
+                if ((this.ultraTextEditor8.Text == null || !this.ultraCheckEditor1.Checked) &&
+                    (this.ultLoginID.Text.Trim().Length == 0))
+                {
+                    MessageBox.Show("请选择要查询的部门或员工编号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                    return;
+                }
+                if (this.ultraCheckEditor1.Checked && this.ultraTextEditor8.Text != "")
+                {
+                    GetSelDept();
+                    if (operDepart != "ROOT" && allDept.IndexOf("'" + selDept + "'") < 0)
+                    {
+                        MessageBox.Show("你没有查看这一部门的权限,请重新选择!");
+                        return;
+                    }
+                }
+                this.ultraToolbarsManager1.Toolbars[0].Tools["back"].SharedProps.Visible = true;
+                string strWhere = "";
+                if (this.ultraTextEditor8.Tag.ToString().Length > 0)
+                    strWhere = " WHERE DEPARTMENTID in (" + this.ultraTextEditor8.Tag.ToString() + ")";
+                //strWhere = GetRefreshWhere();
+                //strWhere = " where " + strWhere;
+
+                CallingMessage par = new CallingMessage();
+                par.ServerName = "PurviewManager";
+                par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+                par.MethodName = "GetUAM_USER";
+                par.args = new object[] { strWhere };
+
+                string strOut = "";
+
+                DataSet obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+                this.ultraGrid1.DataSource = obj.Tables[0];
+                this.ultraGrid1.Refresh();
+            }
+            catch (System.Exception ex)
+            {
+                System.Diagnostics.Debug.WriteLine(ex.ToString());
+            }
+        }
+        private string GetRefreshWhere()
+        {
+            string sqlstr = "";
+            if (this.ultraTextEditor8.Enabled && this.ultraCheckEditor1.Checked && this.ultraTextEditor8.Text != "")
+            {
+                ArrayList al = this.GetUserID();
+                if (al == null || al.Count == 0)
+                {
+                    sqlstr = "1=2";
+                }
+                else
+                {
+                    sqlstr += " USERID in ('" + al[0].ToString() + "'";
+                    for (int i = 1; i < al.Count; i++)
+                    {
+                        sqlstr += ", '" + al[i].ToString() + "' ";
+                    }
+                    sqlstr += ")";
+
+                }
+            }
+            if (this.ultLoginID.Text.Trim().Length > 0)
+            {
+                if (sqlstr != "")
+                    sqlstr += " and ";
+                sqlstr += " USERID = '" + this.ultLoginID.Text.Trim() + "'";
+            }
+            return sqlstr;
+        }
+        private ArrayList GetUserID()
+        {
+            ArrayList al = new ArrayList();
+            DataTable dt = null;
+            if (this._userData == null)
+                dt = null;
+            else
+                dt = this._userData.Tables[0];
+
+            if (dt != null)
+            {
+                if (this.ultraTextEditor8.Enabled && this.ultraTextEditor8.Tag != null)
+                {
+                    string partid = this.ultraTextEditor8.Tag.ToString();
+
+                    string strFilter = "DEPARTMENTID in (" + partid + ")";
+
+                    dt.DefaultView.RowFilter = strFilter;
+                }
+
+                for (int i = 0; i < dt.DefaultView.Count; i++)
+                {
+                    al.Add(dt.DefaultView[i]["USERID"].ToString());
+                }
+
+                return al;
+            }
+            else
+                return null;
+        }
+        private void RefreshGrid(string strWhere)
+        {
+            CallingMessage par = new CallingMessage();
+            par.ServerName = "PurviewManager";
+            par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+            par.MethodName = "SelectUAM_USER";
+            par.args = new object[] { strWhere };
+
+            string strOut = "";
+
+            DataSet obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+            this.ultraGrid1.DataSource = obj.Tables[0];
+            this.ultraGrid1.Refresh();
+        }
+        #endregion
+
+        #region "Button"
+        private void ultraButton1_Click(object sender, System.EventArgs e)
+        {
+            foreach (Form mdiChild in this.MdiParent.MdiChildren)
+            {
+                if (mdiChild.Text == "部门管理")
+                {
+                    mdiChild.Activate();
+                    return;
+                }
+            }
+
+            FrmDepartment frmpart = new FrmDepartment();
+
+            //			frmpart.RemotingHelp = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp;
+            frmpart.MdiParent = this.ParentForm;
+            frmpart.Show();
+        }
+        #endregion
+
+        #region "TextBox"
+        private void ultraTextEditor8_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e)
+        {
+            try
+            {
+                FrmSetDepart frm = new FrmSetDepart();
+                frm.Location = GetChildWindowLocation(frm.Size);
+                frm.ShowDialog();
+                if (frm.SelectedID != "" && frm.SelectedName != "")
+                {
+                    this.ultraTextEditor8.Text = frm.SelectedName;
+                    this.ultraTextEditor8.Tag = frm.SelectedID;
+                }
+                if (this.ultraTextEditor8.Text != "" && this.ultraCheckEditor1.Checked)
+                {
+                    GetSelDept();
+                    if (operDepart != "ROOT" && allDept.IndexOf("'" + selDept + "'") < 0)
+                    {
+                        MessageBox.Show("你没有查看这一部门的权限,请重新选择!");
+                    }
+                }
+            }
+            catch
+            { }
+        }
+        private void ultLoginID_EditorButtonClick(object sender, EditorButtonEventArgs e)
+        {
+            try
+            {
+                if (e.Button.Key == "SET")
+                {
+                    if (ultLoginID.Text.Trim().Length > 0)
+                    {
+                        ultLoginID.Tag = ultLoginID.Text.Trim();
+                        ultLoginID.Text = "";
+                    }
+                    else
+                    {
+                        if (ultLoginID.Tag != null)
+                            ultLoginID.Text = ultLoginID.Tag.ToString();
+                    }
+                }
+            }
+            catch { }
+        }
+        #endregion
+
+        #region "Custom Method"
+        private Point GetChildWindowLocation(Size ChildWindowSize)
+        {
+            int width = Cursor.Position.X + ChildWindowSize.Width - Screen.PrimaryScreen.Bounds.Width;
+            int height = Cursor.Position.Y + ChildWindowSize.Height - Screen.PrimaryScreen.Bounds.Height + 30;
+
+            if (width > 0)
+                width = Cursor.Position.X - width;
+            else
+                width = Cursor.Position.X;
+            if (height > 0)
+                height = Cursor.Position.Y - height + 10;
+            else
+                height = Cursor.Position.Y + 10;
+
+            return new Point(width, height);
+        }
+        private void GetChildDept()
+        {
+            try
+            {
+                string strOut = "";
+                DataSet ds = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod("PurviewManager", "Core.Mes.PurviewManager.UAM_USER", "SelectChildDept", new object[] { operDepart }, out strOut) as DataSet;
+                if (ds.Tables[0].Rows[0][0].ToString() != "")
+                {
+                    allDept = "'" + ds.Tables[0].Rows[0][0].ToString() + "'" + operDepart + "'";
+                }
+                else
+                    allDept = "'" + operDepart + "'";
+            }
+            catch
+            { }
+        }
+        private void GetSelDept()
+        {
+            try
+            {
+                if (this.ultraTextEditor8.Text != "" && this.ultraCheckEditor1.Checked)
+                {
+                    DataTable dt = this._departmentData.Tables[0].Copy();
+                    foreach (DataRow dr in dt.Rows)
+                    {
+                        if (dr["DEPARTMENTNAME"].ToString() == this.ultraTextEditor8.Text)
+                        {
+                            selDept = dr["DEPARTMENTID"].ToString();
+                            return;
+                        }
+                    }
+                }
+            }
+            catch
+            { }
+        }
+        #endregion
+
+        #region "ComboBox"
+        private void ultraComboEditor2_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e)
+        {
+            try
+            {
+                FrmSetDepart frm = new FrmSetDepart();
+                frm.GetChildIDFlag = false;
+                frm.Location = GetChildWindowLocation(frm.Size);
+                frm.ShowDialog();
+
+                InitComboBox();
+
+                if (frm.SelectedID != "" && frm.SelectedName != "")
+                {
+                    this.ulcmeDepartment.Value = frm.SelectedID;
+                    if (operDepart != "ROOT" && this.ulcmeDepartment.Value.ToString() == "ROOT")
+                    {
+                        this.ulcmeDepartment.Value = null;
+                        MessageBox.Show("所属权限不允许选择选择整个公司!");
+                        return;
+                    }
+                    if (allDept.IndexOf("'" + ulcmeDepartment.Value.ToString() + "'") < 0 && operDepart != "ROOT")
+                    {
+                        this.ulcmeDepartment.Value = null;
+                        MessageBox.Show("你没有配置这一部门用户的权限,请重新选择部门!");
+                        return;
+                    }
+                }
+            }
+            catch
+            { }
+        }
+        private void ultraComboEditor2_SelectionChanged(object sender, System.EventArgs e)
+        {
+            try
+            {
+                if (operDepart != "ROOT" && ulcmeDepartment.Value.ToString() == "ROOT")
+                {
+                    this.ulcmeDepartment.Value = null;
+                    MessageBox.Show("所属权限不允许选择选择整个公司!");
+                    return;
+                }
+                if (ulcmeDepartment.Value != null && allDept.IndexOf("'" + ulcmeDepartment.Value.ToString() + "'") < 0 && operDepart != "ROOT")
+                {
+                    this.ulcmeDepartment.Value = null;
+                    MessageBox.Show("你没有配置这一部门用户的权限,请重新选择部门!");
+                    return;
+                }
+            }
+            catch
+            { }
+        }
+        #endregion
+
+        #region "CheckBox"
+        private void ultraCheckEditor1_CheckedChanged(object sender, System.EventArgs e)
+        {
+            this.ultraTextEditor8.Enabled = this.ultraCheckEditor1.Checked;
+        }
+        #endregion
+
+
+        private ArrayList listIpedt = new ArrayList();
+
+        private void createIpedt(int sum)
+        {
+
+            for (int i = 0; i < sum; i++)
+            {
+                if (this.listIpedt.Count >= 4)
+                {
+                    break;
+                }
+            Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit ipedt = new Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit();
+
+            ipedt = new Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit();
+            ipedt.EditAs = Infragistics.Win.UltraWinMaskedEdit.EditAsType.UseSpecifiedMask;
+            ipedt.InputMask = "nnn\\.nnn\\.nnn\\.nnn";
+            ipedt.Location = new System.Drawing.Point(3, 3);
+            ipedt.Name = "ulmskedtIP";
+            ipedt.Size = new System.Drawing.Size(136, 21);
+            ipedt.TabIndex = 12;
+            ipedt.Text = "...";
+            //this.toolTip1.SetToolTip(ipedt, "鼠标左击增加IP框;右击减少");
+
+            this.flowLayoutPanel1.Controls.Add(ipedt);
+            listIpedt.Add(ipedt);
+            }
+            
+        }
+
+        private void deleteIpedt(int sum)
+        {
+            if (sum > 0 && listIpedt.Count - sum > 0)
+            {
+                int cnt = listIpedt.Count -sum;
+                for (int i=listIpedt.Count;i>cnt;i--){
+                    
+                Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit ipedt = (Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit) listIpedt[listIpedt.Count - 1];
+                ipedt.Dispose();
+                listIpedt.RemoveAt(listIpedt.Count - 1);
+                }
+
+            }
+        }
+
+        private string getIpstr()
+        {
+            string ipstr = "";
+            Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit ipedt;
+            for (int i = 0; i < listIpedt.Count; i++)
+            {
+                ipedt = (Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit)listIpedt[i];
+                if (!"...".Equals(ipedt.Value.ToString().Trim()) && !"".Equals(ipedt.Value.ToString().Trim()))
+                {
+                    ipstr += ipedt.Value.ToString().Trim() + ";";
+                }
+            }
+            if (ipstr.Trim().Length>0&&";".Equals(ipstr.Substring(ipstr.Length - 1, 1)))
+            {
+                ipstr = ipstr.Substring(0, ipstr.Length - 1);
+            }
+            return ipstr;
+        }
+
+        private void ultraLabel9_MouseClick(object sender, MouseEventArgs e)
+        {
+            if (e.Button == MouseButtons.Left)
+            {
+                this.createIpedt(1);
+            }
+            if (e.Button == MouseButtons.Right)
+            {
+                this.deleteIpedt(1);
+            }
+        }
+
+        private void analysisIpstr(string ipstr)
+        {
+            Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit ipedt;
+            string[] ipR = ipstr.Split(new string[] { ";", @";" }, StringSplitOptions.None); 
+            this.createIpedt(ipR.GetLength(0) - listIpedt.Count);
+            this.deleteIpedt(listIpedt.Count - ipR.GetLength(0));
+            for (int i = 0; i < ipR.GetLength(0); i++)
+            {
+                ipedt = (Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit) listIpedt[i];
+                ipedt.Text = ipR[i].ToString();
+            }
+        }
+
+        private bool checkIpstr(string IpRule)
+        {
+            if (string.IsNullOrEmpty(IpRule)) return true;
+
+            string[] ipR = IpRule.Split(new string[] { ";", @";" }, StringSplitOptions.None);
+            for (int i = 0; i < ipR.GetLength(0); i++)
+            {
+                string iprs = ipR[i].Trim();
+                string[] ipRules = iprs.Split(new string[] { ".", @"。" }, StringSplitOptions.None);
+                int min_len = ipRules.GetLength(0);
+                for (int idx = 0; idx < (min_len >= 4 ? 4 : min_len); idx++)
+                {
+                    string ip_segment = ipRules[idx].Trim();
+                    if (string.IsNullOrEmpty(ip_segment)) continue;
+
+                    //检查ip规则配置是否正确  只允许包含  [数字]、[*]、[?] 三种字符;
+                    Regex regex_segment = new Regex(@"^[0-9\?\*]{1,3}$");
+                    if (!regex_segment.IsMatch(ip_segment))
+                    {
+                        MessageBox.Show(string.Format("IP规则第三段配置不正确![{0}]", ip_segment));
+                    }
+                }
+            }
+            return true;
+        }
+
+    }
+}

+ 58 - 0
.svn/pristine/03/03c743805bec05abba0a71f9b22a11c42466f99c.svn-base

@@ -0,0 +1,58 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+//
+// 有关程序集的常规信息是通过下列
+// 属性集控制的。更改这些属性值可修改与程序集
+// 关联的信息。
+//
+[assembly: AssemblyTitle("")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]		
+
+//
+// 程序集的版本信息由下列 4 个值组成:
+//
+//      主版本
+//      次版本 
+//      内部版本号
+//      修订号
+//
+// 您可以指定所有这些值,也可以使用“修订号”和“内部版本号”的默认值,方法是按
+// 如下所示使用 '*':
+
+[assembly: AssemblyVersion("1.0.*")]
+
+//
+// 要对程序集进行签名,必须指定要使用的密钥。有关程序集签名的更多信息,请参考 
+// Microsoft .NET Framework 文档。
+//
+// 使用下面的属性控制用于签名的密钥。
+//
+// 注意:
+//   (*) 如果未指定密钥,则程序集不会被签名。
+//   (*) KeyName 是指已经安装在计算机上的
+//      加密服务提供程序(CSP)中的密钥。KeyFile 是指包含
+//       密钥的文件。
+//   (*) 如果 KeyFile 和 KeyName 值都已指定,则 
+//       发生下列处理:
+//       (1) 如果在 CSP 中可以找到 KeyName,则使用该密钥。
+//       (2) 如果 KeyName 不存在而 KeyFile 存在,则 
+//           KeyFile 中的密钥安装到 CSP 中并且使用该密钥。
+//   (*) 要创建 KeyFile,可以使用 sn.exe(强名称)实用工具。
+//       在指定 KeyFile 时,KeyFile 的位置应该相对于
+//       项目输出目录,即
+//       %Project Directory%\obj\<configuration>。例如,如果 KeyFile 位于
+//       该项目目录,应将 AssemblyKeyFile 
+//       属性指定为 [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
+//   (*) “延迟签名”是一个高级选项 - 有关它的更多信息,请参阅 Microsoft .NET Framework
+//       文档。
+//
+[assembly: AssemblyDelaySign(false)]
+[assembly: AssemblyKeyFile("")]
+[assembly: AssemblyKeyName("")]

+ 1605 - 0
.svn/pristine/03/03db1196a4f8fb0132c9dcd78a97a008ce9d16be.svn-base

@@ -0,0 +1,1605 @@
+#define forCG
+
+extern alias global1;
+
+using System;
+using System.Net;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.Configuration;
+using System.Data;
+using System.Reflection;
+using System.Xml;
+using System.Diagnostics;
+using Microsoft.VisualBasic;
+
+using global::Infragistics.Win.UltraWinExplorerBar;
+using global::Infragistics.Win.UltraWinTree;
+using global::Infragistics.Win.UltraWinToolbars;
+using G = global::Infragistics.Win;
+using G1 = global1::Infragistics.Win;
+
+using Core.Mes.ClientFrameWork;
+using System.Runtime.InteropServices;
+using Core.Mes.IBaseInterface;
+using System.Threading;
+
+
+namespace Core.Mes.ClientManager
+{
+    /// <summary>
+    /// 平台客户端主窗体
+    /// </summary>
+    public class MainForm : System.Windows.Forms.Form
+    {
+
+        #region	"	窗体自动生成	"
+
+        public MainForm()
+        {
+            //
+            // Windows 窗体设计器支持所必需的
+            //
+            InitializeComponent();
+
+            //
+            // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
+            //		
+        }
+
+        /// <summary>
+        /// 清理所有正在使用的资源。
+        /// </summary>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing)
+            {
+                if (components != null)
+                {
+                    components.Dispose();
+                }
+            }
+            base.Dispose(disposing);
+            try
+            {
+                foreach (System.Diagnostics.Process pr in System.Diagnostics.Process.GetProcessesByName("Core.Mes.ClientManager.vshost"))
+                {
+                    try
+                    {
+                        pr.Kill();
+                    }
+                    catch { }
+                }
+            }
+            catch { }
+        }
+
+        #region Windows 窗体设计器生成的代码
+
+        private G.UltraWinToolbars.UltraToolbarsManager ultraToolbarsManager1;
+        private G.UltraWinToolbars.UltraToolbarsDockArea _MainForm_Toolbars_Dock_Area_Left;
+        private G.UltraWinToolbars.UltraToolbarsDockArea _MainForm_Toolbars_Dock_Area_Right;
+        private G.UltraWinToolbars.UltraToolbarsDockArea _MainForm_Toolbars_Dock_Area_Top;
+        private G.UltraWinToolbars.UltraToolbarsDockArea _MainForm_Toolbars_Dock_Area_Bottom;
+        private System.Windows.Forms.Panel panel1;
+        private G.UltraWinMaskedEdit.UltraMaskedEdit ultraMaskedEdit2;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.RichTextBox richTextBox1;
+        private System.Windows.Forms.Timer timer1;
+        private G.UltraWinDock.UltraDockManager ultraDockManager1;
+        private G.UltraWinDock.UnpinnedTabArea _MainFormUnpinnedTabAreaLeft;
+        private G.UltraWinDock.UnpinnedTabArea _MainFormUnpinnedTabAreaRight;
+        private G.UltraWinDock.UnpinnedTabArea _MainFormUnpinnedTabAreaTop;
+        private G.UltraWinDock.UnpinnedTabArea _MainFormUnpinnedTabAreaBottom;
+        private G.UltraWinDock.AutoHideControl _MainFormAutoHideControl;
+        private System.Windows.Forms.Timer timer2;
+        private System.Windows.Forms.ToolTip toolTip1;
+        private System.Windows.Forms.Panel panel2;
+        private System.Windows.Forms.RichTextBox richTextBox2;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Button button2;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label4;
+        private Infragistics.Win.Misc.UltraPopupControlContainer MainPopup;
+        private Infragistics.Win.UltraWinTabbedMdi.UltraTabbedMdiManager ultraTabbedMdiManager1;
+        private Infragistics.Win.UltraWinStatusBar.UltraStatusBar ultraStatusBar1;
+        private System.ComponentModel.IContainer components;
+        /// <summary>
+        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
+        /// 此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            Infragistics.Win.UltraWinToolbars.UltraToolbar ultraToolbar1 = new Infragistics.Win.UltraWinToolbars.UltraToolbar("UltraToolbar1");
+            Infragistics.Win.UltraWinEditors.AutoRepeatEditorButton autoRepeatEditorButton1 = new Infragistics.Win.UltraWinEditors.AutoRepeatEditorButton("First");
+            Infragistics.Win.Appearance appearance1 = new Infragistics.Win.Appearance();
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+            Infragistics.Win.UltraWinEditors.AutoRepeatEditorButton autoRepeatEditorButton2 = new Infragistics.Win.UltraWinEditors.AutoRepeatEditorButton("Previous");
+            Infragistics.Win.Appearance appearance2 = new Infragistics.Win.Appearance();
+            Infragistics.Win.UltraWinEditors.AutoRepeatEditorButton autoRepeatEditorButton3 = new Infragistics.Win.UltraWinEditors.AutoRepeatEditorButton("Next");
+            Infragistics.Win.Appearance appearance3 = new Infragistics.Win.Appearance();
+            Infragistics.Win.UltraWinEditors.AutoRepeatEditorButton autoRepeatEditorButton4 = new Infragistics.Win.UltraWinEditors.AutoRepeatEditorButton("Last");
+            Infragistics.Win.Appearance appearance4 = new Infragistics.Win.Appearance();
+            Infragistics.Win.UltraWinStatusBar.UltraStatusPanel ultraStatusPanel1 = new Infragistics.Win.UltraWinStatusBar.UltraStatusPanel();
+            Infragistics.Win.UltraWinStatusBar.UltraStatusPanel ultraStatusPanel2 = new Infragistics.Win.UltraWinStatusBar.UltraStatusPanel();
+            Infragistics.Win.UltraWinStatusBar.UltraStatusPanel ultraStatusPanel3 = new Infragistics.Win.UltraWinStatusBar.UltraStatusPanel();
+            Infragistics.Win.UltraWinStatusBar.UltraStatusPanel ultraStatusPanel4 = new Infragistics.Win.UltraWinStatusBar.UltraStatusPanel();
+            Infragistics.Win.UltraWinStatusBar.UltraStatusPanel ultraStatusPanel5 = new Infragistics.Win.UltraWinStatusBar.UltraStatusPanel();
+            this.ultraToolbarsManager1 = new Infragistics.Win.UltraWinToolbars.UltraToolbarsManager(this.components);
+            this._MainForm_Toolbars_Dock_Area_Left = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this._MainForm_Toolbars_Dock_Area_Right = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this._MainForm_Toolbars_Dock_Area_Top = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this._MainForm_Toolbars_Dock_Area_Bottom = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this.panel1 = new System.Windows.Forms.Panel();
+            this.ultraMaskedEdit2 = new Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit();
+            this.button1 = new System.Windows.Forms.Button();
+            this.richTextBox1 = new System.Windows.Forms.RichTextBox();
+            this.timer1 = new System.Windows.Forms.Timer(this.components);
+            this.ultraDockManager1 = new Infragistics.Win.UltraWinDock.UltraDockManager(this.components);
+            this._MainFormUnpinnedTabAreaLeft = new Infragistics.Win.UltraWinDock.UnpinnedTabArea();
+            this._MainFormUnpinnedTabAreaRight = new Infragistics.Win.UltraWinDock.UnpinnedTabArea();
+            this._MainFormUnpinnedTabAreaTop = new Infragistics.Win.UltraWinDock.UnpinnedTabArea();
+            this._MainFormUnpinnedTabAreaBottom = new Infragistics.Win.UltraWinDock.UnpinnedTabArea();
+            this._MainFormAutoHideControl = new Infragistics.Win.UltraWinDock.AutoHideControl();
+            this.timer2 = new System.Windows.Forms.Timer(this.components);
+            this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+            this.ultraStatusBar1 = new Infragistics.Win.UltraWinStatusBar.UltraStatusBar();
+            this.panel2 = new System.Windows.Forms.Panel();
+            this.richTextBox2 = new System.Windows.Forms.RichTextBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.button2 = new System.Windows.Forms.Button();
+            this.label1 = new System.Windows.Forms.Label();
+            this.MainPopup = new Infragistics.Win.Misc.UltraPopupControlContainer(this.components);
+            this.ultraTabbedMdiManager1 = new Infragistics.Win.UltraWinTabbedMdi.UltraTabbedMdiManager(this.components);
+            ((System.ComponentModel.ISupportInitialize)(this.ultraToolbarsManager1)).BeginInit();
+            this.panel1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraDockManager1)).BeginInit();
+            this.panel2.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraTabbedMdiManager1)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // ultraToolbarsManager1
+            // 
+            this.ultraToolbarsManager1.DesignerFlags = 1;
+            this.ultraToolbarsManager1.DockWithinContainer = this;
+            this.ultraToolbarsManager1.LockToolbars = true;
+            this.ultraToolbarsManager1.ShowFullMenusDelay = 500;
+            this.ultraToolbarsManager1.ShowQuickCustomizeButton = false;
+            ultraToolbar1.DockedColumn = 0;
+            ultraToolbar1.DockedRow = 0;
+            ultraToolbar1.Text = "UltraToolbar1";
+            this.ultraToolbarsManager1.Toolbars.AddRange(new Infragistics.Win.UltraWinToolbars.UltraToolbar[] {
+            ultraToolbar1});
+            this.ultraToolbarsManager1.ToolClick += new Infragistics.Win.UltraWinToolbars.ToolClickEventHandler(this.ultraToolbarsManager1_ToolClick);
+            // 
+            // _MainForm_Toolbars_Dock_Area_Left
+            // 
+            this._MainForm_Toolbars_Dock_Area_Left.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._MainForm_Toolbars_Dock_Area_Left.BackColor = System.Drawing.SystemColors.Control;
+            this._MainForm_Toolbars_Dock_Area_Left.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Left;
+            this._MainForm_Toolbars_Dock_Area_Left.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._MainForm_Toolbars_Dock_Area_Left.Location = new System.Drawing.Point(0, 18);
+            this._MainForm_Toolbars_Dock_Area_Left.Name = "_MainForm_Toolbars_Dock_Area_Left";
+            this._MainForm_Toolbars_Dock_Area_Left.Size = new System.Drawing.Size(0, 357);
+            this._MainForm_Toolbars_Dock_Area_Left.ToolbarsManager = this.ultraToolbarsManager1;
+            // 
+            // _MainForm_Toolbars_Dock_Area_Right
+            // 
+            this._MainForm_Toolbars_Dock_Area_Right.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._MainForm_Toolbars_Dock_Area_Right.BackColor = System.Drawing.SystemColors.Control;
+            this._MainForm_Toolbars_Dock_Area_Right.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Right;
+            this._MainForm_Toolbars_Dock_Area_Right.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._MainForm_Toolbars_Dock_Area_Right.Location = new System.Drawing.Point(1105, 18);
+            this._MainForm_Toolbars_Dock_Area_Right.Name = "_MainForm_Toolbars_Dock_Area_Right";
+            this._MainForm_Toolbars_Dock_Area_Right.Size = new System.Drawing.Size(0, 357);
+            this._MainForm_Toolbars_Dock_Area_Right.ToolbarsManager = this.ultraToolbarsManager1;
+            // 
+            // _MainForm_Toolbars_Dock_Area_Top
+            // 
+            this._MainForm_Toolbars_Dock_Area_Top.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._MainForm_Toolbars_Dock_Area_Top.BackColor = System.Drawing.SystemColors.Control;
+            this._MainForm_Toolbars_Dock_Area_Top.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Top;
+            this._MainForm_Toolbars_Dock_Area_Top.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._MainForm_Toolbars_Dock_Area_Top.Location = new System.Drawing.Point(0, 0);
+            this._MainForm_Toolbars_Dock_Area_Top.Name = "_MainForm_Toolbars_Dock_Area_Top";
+            this._MainForm_Toolbars_Dock_Area_Top.Size = new System.Drawing.Size(1105, 18);
+            this._MainForm_Toolbars_Dock_Area_Top.ToolbarsManager = this.ultraToolbarsManager1;
+            // 
+            // _MainForm_Toolbars_Dock_Area_Bottom
+            // 
+            this._MainForm_Toolbars_Dock_Area_Bottom.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._MainForm_Toolbars_Dock_Area_Bottom.BackColor = System.Drawing.SystemColors.Control;
+            this._MainForm_Toolbars_Dock_Area_Bottom.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Bottom;
+            this._MainForm_Toolbars_Dock_Area_Bottom.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._MainForm_Toolbars_Dock_Area_Bottom.Location = new System.Drawing.Point(0, 375);
+            this._MainForm_Toolbars_Dock_Area_Bottom.Name = "_MainForm_Toolbars_Dock_Area_Bottom";
+            this._MainForm_Toolbars_Dock_Area_Bottom.Size = new System.Drawing.Size(1105, 0);
+            this._MainForm_Toolbars_Dock_Area_Bottom.ToolbarsManager = this.ultraToolbarsManager1;
+            // 
+            // panel1
+            // 
+            this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+            this.panel1.Controls.Add(this.ultraMaskedEdit2);
+            this.panel1.Controls.Add(this.button1);
+            this.panel1.Controls.Add(this.richTextBox1);
+            this.panel1.Location = new System.Drawing.Point(480, 24);
+            this.panel1.Name = "panel1";
+            this.panel1.Size = new System.Drawing.Size(208, 136);
+            this.panel1.TabIndex = 26;
+            this.panel1.Visible = false;
+            // 
+            // ultraMaskedEdit2
+            // 
+            this.ultraMaskedEdit2.BorderStyle = Infragistics.Win.UIElementBorderStyle.InsetSoft;
+            appearance1.Image = ((object)(resources.GetObject("appearance1.Image")));
+            appearance1.ImageHAlign = Infragistics.Win.HAlign.Center;
+            appearance1.ImageVAlign = Infragistics.Win.VAlign.Middle;
+            autoRepeatEditorButton1.Appearance = appearance1;
+            autoRepeatEditorButton1.ButtonStyle = Infragistics.Win.UIElementButtonStyle.ButtonSoftExtended;
+            autoRepeatEditorButton1.Interval = 100;
+            autoRepeatEditorButton1.Key = "First";
+            autoRepeatEditorButton1.Text = "";
+            appearance2.Image = ((object)(resources.GetObject("appearance2.Image")));
+            appearance2.ImageHAlign = Infragistics.Win.HAlign.Center;
+            appearance2.ImageVAlign = Infragistics.Win.VAlign.Middle;
+            autoRepeatEditorButton2.Appearance = appearance2;
+            autoRepeatEditorButton2.ButtonStyle = Infragistics.Win.UIElementButtonStyle.ButtonSoftExtended;
+            autoRepeatEditorButton2.Interval = 100;
+            autoRepeatEditorButton2.Key = "Previous";
+            autoRepeatEditorButton2.Text = "";
+            this.ultraMaskedEdit2.ButtonsLeft.Add(autoRepeatEditorButton1);
+            this.ultraMaskedEdit2.ButtonsLeft.Add(autoRepeatEditorButton2);
+            appearance3.Image = ((object)(resources.GetObject("appearance3.Image")));
+            appearance3.ImageHAlign = Infragistics.Win.HAlign.Center;
+            appearance3.ImageVAlign = Infragistics.Win.VAlign.Middle;
+            autoRepeatEditorButton3.Appearance = appearance3;
+            autoRepeatEditorButton3.ButtonStyle = Infragistics.Win.UIElementButtonStyle.ButtonSoftExtended;
+            autoRepeatEditorButton3.Interval = 100;
+            autoRepeatEditorButton3.Key = "Next";
+            autoRepeatEditorButton3.Text = "";
+            appearance4.Image = ((object)(resources.GetObject("appearance4.Image")));
+            appearance4.ImageHAlign = Infragistics.Win.HAlign.Center;
+            appearance4.ImageVAlign = Infragistics.Win.VAlign.Middle;
+            autoRepeatEditorButton4.Appearance = appearance4;
+            autoRepeatEditorButton4.ButtonStyle = Infragistics.Win.UIElementButtonStyle.ButtonSoftExtended;
+            autoRepeatEditorButton4.Interval = 100;
+            autoRepeatEditorButton4.Key = "Last";
+            this.ultraMaskedEdit2.ButtonsRight.Add(autoRepeatEditorButton3);
+            this.ultraMaskedEdit2.ButtonsRight.Add(autoRepeatEditorButton4);
+            this.ultraMaskedEdit2.EditAs = Infragistics.Win.UltraWinMaskedEdit.EditAsType.UseSpecifiedMask;
+            this.ultraMaskedEdit2.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.ultraMaskedEdit2.InputMask = "nnn \\o\\f\\ \\5\\0\\0";
+            this.ultraMaskedEdit2.Location = new System.Drawing.Point(0, 108);
+            this.ultraMaskedEdit2.MaxValue = 500;
+            this.ultraMaskedEdit2.MinValue = 1;
+            this.ultraMaskedEdit2.Name = "ultraMaskedEdit2";
+            this.ultraMaskedEdit2.PromptChar = ' ';
+            this.ultraMaskedEdit2.ReadOnly = true;
+            this.ultraMaskedEdit2.SelectedTextBackColor = System.Drawing.SystemColors.Window;
+            this.ultraMaskedEdit2.SelectedTextForeColor = System.Drawing.SystemColors.WindowText;
+            this.ultraMaskedEdit2.Size = new System.Drawing.Size(144, 21);
+            this.ultraMaskedEdit2.TabIndex = 102;
+            this.ultraMaskedEdit2.Text = " of 500";
+            this.ultraMaskedEdit2.EditorButtonClick += new Infragistics.Win.UltraWinEditors.EditorButtonEventHandler(this.ultraMaskedEdit2_EditorButtonClick);
+            // 
+            // button1
+            // 
+            this.button1.Location = new System.Drawing.Point(144, 108);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(56, 23);
+            this.button1.TabIndex = 1;
+            this.button1.Text = "确认";
+            this.button1.Click += new System.EventHandler(this.button1_Click);
+            // 
+            // richTextBox1
+            // 
+            this.richTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
+            this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.richTextBox1.Location = new System.Drawing.Point(0, 0);
+            this.richTextBox1.Name = "richTextBox1";
+            this.richTextBox1.ReadOnly = true;
+            this.richTextBox1.Size = new System.Drawing.Size(206, 104);
+            this.richTextBox1.TabIndex = 0;
+            this.richTextBox1.Text = "richTextBox1";
+            // 
+            // timer1
+            // 
+            this.timer1.Interval = 180000;
+            this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
+            // 
+            // ultraDockManager1
+            // 
+            this.ultraDockManager1.HostControl = this;
+            // 
+            // _MainFormUnpinnedTabAreaLeft
+            // 
+            this._MainFormUnpinnedTabAreaLeft.Dock = System.Windows.Forms.DockStyle.Left;
+            this._MainFormUnpinnedTabAreaLeft.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this._MainFormUnpinnedTabAreaLeft.Location = new System.Drawing.Point(0, 18);
+            this._MainFormUnpinnedTabAreaLeft.Name = "_MainFormUnpinnedTabAreaLeft";
+            this._MainFormUnpinnedTabAreaLeft.Owner = this.ultraDockManager1;
+            this._MainFormUnpinnedTabAreaLeft.Size = new System.Drawing.Size(0, 357);
+            this._MainFormUnpinnedTabAreaLeft.TabIndex = 27;
+            // 
+            // _MainFormUnpinnedTabAreaRight
+            // 
+            this._MainFormUnpinnedTabAreaRight.Dock = System.Windows.Forms.DockStyle.Right;
+            this._MainFormUnpinnedTabAreaRight.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this._MainFormUnpinnedTabAreaRight.Location = new System.Drawing.Point(1105, 18);
+            this._MainFormUnpinnedTabAreaRight.Name = "_MainFormUnpinnedTabAreaRight";
+            this._MainFormUnpinnedTabAreaRight.Owner = this.ultraDockManager1;
+            this._MainFormUnpinnedTabAreaRight.Size = new System.Drawing.Size(0, 357);
+            this._MainFormUnpinnedTabAreaRight.TabIndex = 28;
+            // 
+            // _MainFormUnpinnedTabAreaTop
+            // 
+            this._MainFormUnpinnedTabAreaTop.Dock = System.Windows.Forms.DockStyle.Top;
+            this._MainFormUnpinnedTabAreaTop.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this._MainFormUnpinnedTabAreaTop.Location = new System.Drawing.Point(0, 18);
+            this._MainFormUnpinnedTabAreaTop.Name = "_MainFormUnpinnedTabAreaTop";
+            this._MainFormUnpinnedTabAreaTop.Owner = this.ultraDockManager1;
+            this._MainFormUnpinnedTabAreaTop.Size = new System.Drawing.Size(1105, 0);
+            this._MainFormUnpinnedTabAreaTop.TabIndex = 29;
+            // 
+            // _MainFormUnpinnedTabAreaBottom
+            // 
+            this._MainFormUnpinnedTabAreaBottom.Dock = System.Windows.Forms.DockStyle.Bottom;
+            this._MainFormUnpinnedTabAreaBottom.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this._MainFormUnpinnedTabAreaBottom.Location = new System.Drawing.Point(0, 375);
+            this._MainFormUnpinnedTabAreaBottom.Name = "_MainFormUnpinnedTabAreaBottom";
+            this._MainFormUnpinnedTabAreaBottom.Owner = this.ultraDockManager1;
+            this._MainFormUnpinnedTabAreaBottom.Size = new System.Drawing.Size(1105, 0);
+            this._MainFormUnpinnedTabAreaBottom.TabIndex = 30;
+            // 
+            // _MainFormAutoHideControl
+            // 
+            this._MainFormAutoHideControl.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this._MainFormAutoHideControl.Location = new System.Drawing.Point(0, 0);
+            this._MainFormAutoHideControl.Name = "_MainFormAutoHideControl";
+            this._MainFormAutoHideControl.Owner = this.ultraDockManager1;
+            this._MainFormAutoHideControl.Size = new System.Drawing.Size(0, 0);
+            this._MainFormAutoHideControl.TabIndex = 31;
+            // 
+            // timer2
+            // 
+            this.timer2.Interval = 3000;
+            this.timer2.Tick += new System.EventHandler(this.timer2_Tick);
+            // 
+            // ultraStatusBar1
+            // 
+            this.ultraStatusBar1.Location = new System.Drawing.Point(0, 375);
+            this.ultraStatusBar1.Name = "ultraStatusBar1";
+            ultraStatusPanel1.Width = 600;
+            ultraStatusPanel2.MinWidth = 100;
+            ultraStatusPanel4.MinWidth = 300;
+            ultraStatusPanel4.Text = "湖南视拓科技发展有限公司";
+            ultraStatusPanel4.Width = 160;
+            ultraStatusPanel5.Width = 150;
+            this.ultraStatusBar1.Panels.AddRange(new Infragistics.Win.UltraWinStatusBar.UltraStatusPanel[] {
+            ultraStatusPanel1,
+            ultraStatusPanel2,
+            ultraStatusPanel3,
+            ultraStatusPanel4,
+            ultraStatusPanel5});
+            this.ultraStatusBar1.Size = new System.Drawing.Size(1105, 22);
+            this.ultraStatusBar1.TabIndex = 43;
+            this.toolTip1.SetToolTip(this.ultraStatusBar1, "双击弹出所要通告");
+            this.ultraStatusBar1.PanelDoubleClick += new Infragistics.Win.UltraWinStatusBar.PanelClickEventHandler(this.ultraStatusBar1_PanelDoubleClick);
+            this.ultraStatusBar1.PanelClick += new Infragistics.Win.UltraWinStatusBar.PanelClickEventHandler(this.ultraStatusBar1_PanelClick);
+            this.ultraStatusBar1.DoubleClick += new System.EventHandler(this.ultraStatusBar1_DoubleClick);
+            // 
+            // panel2
+            // 
+            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+            this.panel2.Controls.Add(this.richTextBox2);
+            this.panel2.Controls.Add(this.label4);
+            this.panel2.Controls.Add(this.label3);
+            this.panel2.Controls.Add(this.label2);
+            this.panel2.Controls.Add(this.button2);
+            this.panel2.Controls.Add(this.label1);
+            this.panel2.Location = new System.Drawing.Point(0, 231);
+            this.panel2.Name = "panel2";
+            this.panel2.Size = new System.Drawing.Size(600, 144);
+            this.panel2.TabIndex = 37;
+            this.panel2.Visible = false;
+            // 
+            // richTextBox2
+            // 
+            this.richTextBox2.Dock = System.Windows.Forms.DockStyle.Bottom;
+            this.richTextBox2.Location = new System.Drawing.Point(0, 24);
+            this.richTextBox2.Name = "richTextBox2";
+            this.richTextBox2.ReadOnly = true;
+            this.richTextBox2.Size = new System.Drawing.Size(600, 120);
+            this.richTextBox2.TabIndex = 0;
+            this.richTextBox2.Text = "";
+            // 
+            // label4
+            // 
+            this.label4.Location = new System.Drawing.Point(360, 8);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(48, 24);
+            this.label4.TabIndex = 5;
+            this.label4.Text = "   普通";
+            // 
+            // label3
+            // 
+            this.label3.ForeColor = System.Drawing.Color.Blue;
+            this.label3.Location = new System.Drawing.Point(304, 8);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(48, 24);
+            this.label3.TabIndex = 4;
+            this.label3.Text = "   重要";
+            // 
+            // label2
+            // 
+            this.label2.ForeColor = System.Drawing.Color.Red;
+            this.label2.Location = new System.Drawing.Point(248, 8);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(48, 24);
+            this.label2.TabIndex = 3;
+            this.label2.Text = "   紧急";
+            // 
+            // button2
+            // 
+            this.button2.Location = new System.Drawing.Point(552, 2);
+            this.button2.Name = "button2";
+            this.button2.Size = new System.Drawing.Size(40, 23);
+            this.button2.TabIndex = 2;
+            this.button2.Text = "关闭";
+            this.button2.Click += new System.EventHandler(this.button2_Click);
+            // 
+            // label1
+            // 
+            this.label1.Location = new System.Drawing.Point(16, 8);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(100, 23);
+            this.label1.TabIndex = 1;
+            this.label1.Text = "通知";
+            // 
+            // ultraTabbedMdiManager1
+            // 
+            this.ultraTabbedMdiManager1.MdiParent = this;
+            this.ultraTabbedMdiManager1.TabActivated += new Infragistics.Win.UltraWinTabbedMdi.MdiTabEventHandler(this.ultraTabbedMdiManager1_TabActivated);
+            // 
+            // MainForm
+            // 
+            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
+            this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
+            this.ClientSize = new System.Drawing.Size(1105, 397);
+            this.Controls.Add(this._MainFormAutoHideControl);
+            this.Controls.Add(this.panel2);
+            this.Controls.Add(this.panel1);
+            this.Controls.Add(this._MainFormUnpinnedTabAreaTop);
+            this.Controls.Add(this._MainFormUnpinnedTabAreaBottom);
+            this.Controls.Add(this._MainFormUnpinnedTabAreaLeft);
+            this.Controls.Add(this._MainFormUnpinnedTabAreaRight);
+            this.Controls.Add(this._MainForm_Toolbars_Dock_Area_Left);
+            this.Controls.Add(this._MainForm_Toolbars_Dock_Area_Right);
+            this.Controls.Add(this._MainForm_Toolbars_Dock_Area_Top);
+            this.Controls.Add(this._MainForm_Toolbars_Dock_Area_Bottom);
+            this.Controls.Add(this.ultraStatusBar1);
+            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+            this.IsMdiContainer = true;
+            this.Name = "MainForm";
+            this.Text = "新钢公司MES系统";
+            this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
+            this.Load += new System.EventHandler(this.MainForm_Load);
+            this.Closing += new System.ComponentModel.CancelEventHandler(this.MainForm_Closing);
+            ((System.ComponentModel.ISupportInitialize)(this.ultraToolbarsManager1)).EndInit();
+            this.panel1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.ultraDockManager1)).EndInit();
+            this.panel2.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.ultraTabbedMdiManager1)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+        /// <summary>
+        /// 应用程序的主入口点。
+        /// </summary>
+        //[STAThread]
+        //static void Main() 
+        //{
+        //    try
+        //    {
+        //        Process[] myProcesses = Process.GetProcessesByName("Core.Mes.ClientManager.vshost");
+        //        if(myProcesses.Length  == 1 )
+        //        {
+        //            Application.Run(new MainForm());
+        //        }
+        //    }
+        //    catch
+        //    {
+        //        Application.Run(new MainForm());
+        //    }
+        //}
+        #endregion
+
+        #endregion
+
+        #region "	Init Form	"
+        int FreeTime = 600;
+
+        private void Update_UPM()
+        {
+            UpdaterManager.Update_UPM();
+            UpdaterManager.Update_Shortcut();
+        }
+
+        private void MainForm_Load(object sender, System.EventArgs e)
+        {
+            //if (System.DateTime.Today > new System.DateTime(2007,1,1))	return;	
+            Thread t_update = new Thread(new ThreadStart(Update_UPM));
+            t_update.Start();
+
+            if (ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["Title"].Value.ToString() != null)
+                this.Text = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["Title"].Value.ToString();
+            this.BackgroundImage = System.Drawing.Image.FromFile(@"MainBackPic.jpg");
+
+            FrmCover frm = new FrmCover();
+            frm._mainForm = this;
+            frm.ShowDialog(this);
+
+            if (frm._loginFlag > 0)
+            {
+                InitForm(0);
+            }
+            else
+            {
+                Application.Exit();
+            }
+        }
+        private bool keyexit(string key)
+        {
+            for (int i = 0; i < ultraToolbarsManager1.Toolbars[0].Tools.Count; i++)
+            {
+                if (!keyisexist(key, ultraToolbarsManager1.Toolbars[0].Tools[i]))
+                    return false;
+            }
+            return true;
+        }
+        private bool keyisexist(string key, object Menu)
+        {
+            if (Menu.GetType() == typeof(Infragistics.Win.UltraWinToolbars.PopupMenuTool))
+            {
+                Infragistics.Win.UltraWinToolbars.PopupMenuTool tmpPMenu = (Menu as Infragistics.Win.UltraWinToolbars.PopupMenuTool);
+                if (tmpPMenu.Tools.Exists(key))
+                    return false;
+                for (int i = 0; i < tmpPMenu.Tools.Count; i++)
+                {
+                    keyisexist(key, tmpPMenu.Tools[i]);
+                }
+            }
+            else
+            {
+                return true;
+            }
+            return true;
+        }
+        public void InitForm(int ReLoginType)
+        {
+            try
+            {
+                if (ReLoginType == 0)
+                {
+                    CreateMenu();
+                    AjustTime();
+                    //InitMessageBox();
+                    //GetUserMessage();
+                    //timer2_Tick( null, new System.EventArgs() );
+                    //this.timer1.Start();
+                    //this.timer2.Start();
+                }
+                else if (ReLoginType == 1)
+                {
+                    this.ultraToolbarsManager1.Tools.Clear();
+                    this.ultraToolbarsManager1.Toolbars[0].Tools.Clear();
+
+                    CreateMenu();
+
+                    foreach (Form frm in this.MdiChildren)
+                    {
+                        frm.Close();
+                    }
+                }
+                else
+                {
+                    foreach (Form frm in this.MdiChildren)
+                    {
+                        frm.Show();
+                    }
+                    try
+                    {
+                        if (LastActiveForm != null)
+                        {
+                            LastActiveForm.Activate();
+                        }
+                    }
+                    catch { }
+                }
+
+                this.ultraStatusBar1.Panels[1].Text = ClientCommon._UserInfo.UserName;
+
+                string bc = this.GetBc(ClientCommon._UserInfo.UserBc);
+                string bb = this.GetBb(ClientCommon._UserInfo.UserBb);
+
+                if (bc == bb)
+                    this.ultraStatusBar1.Panels[2].Text = bb;
+                else
+                    this.ultraStatusBar1.Panels[2].Text = bc + "  " + bb;
+
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show("权限文件信息错误!请与管理员联系。\n" + ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
+
+            }
+
+            try
+            {
+                ClientCommon.GetServerConfig();
+                DataRow[] dr = ClientCommon.ServerConfig.Select("KEY_NAME='FREETIME'");
+                if (dr != null && dr.GetLength(0) > 0)
+                {
+                    int.TryParse(dr[0]["KEY_VALUE"].ToString(), out FreeTime);
+                }
+            }
+            catch { }
+
+            timer2.Enabled = true;
+            if (_dsMessage != null) _dsMessage.Clear();
+            //GetMessage();
+        }
+
+        #region "	班次、班别	"
+
+        private G.ValueList _vlBc;
+        private string GetBc(string str)
+        {
+            if (_vlBc == null)
+            {
+                _vlBc = new G.ValueList();
+                _vlBc.ValueListItems.Add("300201", "早班");
+                _vlBc.ValueListItems.Add("300202", "中班");
+                _vlBc.ValueListItems.Add("300203", "晚班");
+                _vlBc.ValueListItems.Add("300205", "常白班");
+            }
+            if (_vlBc.FindByDataValue(str) != null)
+                return _vlBc.FindByDataValue(str).DisplayText;
+            return "常白班";
+        }
+        private G.ValueList _vlBb;
+        private string GetBb(string str)
+        {
+            if (_vlBb == null)
+            {
+                _vlBb = new G.ValueList();
+                _vlBb.ValueListItems.Add("300301", "甲班");
+                _vlBb.ValueListItems.Add("300302", "乙班");
+                _vlBb.ValueListItems.Add("300303", "丙班");
+                _vlBb.ValueListItems.Add("300304", "丁班");
+                _vlBb.ValueListItems.Add("300305", "常白班");
+            }
+
+            if (_vlBb.FindByDataValue(str) != null)
+                return _vlBb.FindByDataValue(str).DisplayText;
+            return "常白班";
+        }
+        #endregion
+        private void MainForm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
+        {
+            DialogResult dr = MessageBox.Show(string.Format("是否确认退出{0}?", this.Text), "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
+            if (dr == DialogResult.No)
+            {
+                e.Cancel = true;
+                return;
+            }
+
+            string ipaddress = ClientCommon.GetIp();
+            string strOut = "";
+            ClientCommon._RemotingHelp.ExecuteMethod("ServerCommon", "Core.Mes.ServerCommon.UserInfoManager", "RecodeExitInfo",
+                new object[]{ClientCommon._UserInfo.LoginID, ClientCommon._UserInfo.UserName, 
+								Dns.GetHostName(), ipaddress}, out strOut);
+        }
+
+        #endregion
+
+        #region "	Menu Manager	"
+
+        #region "	Menu Events	"
+
+        private void CreateMenu()
+        {
+            string strOut = "";
+            try
+            {
+                DataSet obj = ClientCommon._RemotingHelp.ExecuteMethod("ServerCommon", "Core.Mes.ServerCommon.UserInfoManager", "GetBuildMenuInfo",
+                    new object[] { ClientCommon._UserInfo.LoginID }, out strOut) as DataSet;
+
+                if (strOut != "")
+                {
+                    MessageBox.Show(strOut); return;
+                }
+                for (int i = 0; i < obj.Tables[0].Rows.Count; i++)
+                {
+                    string strSetInfo = obj.Tables[0].Rows[i]["SETINFO"].ToString();
+                    string strBtName = obj.Tables[0].Rows[i]["CAPTION"].ToString();
+                    string strBtKey = obj.Tables[0].Rows[i]["KEY_"].ToString();
+                    string strBtCat = obj.Tables[0].Rows[i]["CATEGORY"].ToString();
+                    string strType = obj.Tables[0].Rows[i]["TYPE"].ToString();
+
+                    #region old code
+                    //int iCount = 0;
+                    //for (int j = 0; j < obj.Tables[0].Rows.Count; j++)
+                    //{
+                    //    if (obj.Tables[0].Rows[j]["SETINFO"].ToString().StartsWith(strSetInfo))
+                    //    {
+                    //        iCount++;
+                    //    }
+                    //}
+                    //if (iCount > 1)
+                    //{
+                    //    if (strSetInfo.Length == 3)
+                    //    {
+                    //        try
+                    //        {
+                    //            Infragistics.Win.UltraWinToolbars.PopupMenuTool pmt = new Infragistics.Win.UltraWinToolbars.PopupMenuTool(strBtName);
+                    //            Infragistics.Win.UltraWinToolbars.PopupMenuTool pmtb = new Infragistics.Win.UltraWinToolbars.PopupMenuTool(strBtName);
+                    //            pmtb.SharedProps.Caption = strBtName;
+
+                    //            this.ultraToolbarsManager1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { pmtb });
+
+                    //            this.ultraToolbarsManager1.Toolbars[0].Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { pmt });
+
+                    //            pmt.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+                    //        }
+                    //        catch(Exception ex) {
+                    //            MessageBox.Show(ex.Message);
+                    //            return;
+                    //        }
+                    //    }
+                    //    else
+                    //    {
+                    //        try
+                    //        {
+                    //            Infragistics.Win.UltraWinToolbars.PopupMenuTool pmt = new Infragistics.Win.UltraWinToolbars.PopupMenuTool(strBtName);
+                    //            Infragistics.Win.UltraWinToolbars.PopupMenuTool pmtb = new Infragistics.Win.UltraWinToolbars.PopupMenuTool(strBtName);
+                    //            pmtb.SharedProps.Caption = strBtName;
+
+                    //            this.ultraToolbarsManager1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { pmtb });
+
+                    //            this.ultraToolbarsManager1.Toolbars[strSetInfo.Substring(0, strSetInfo.Length - 3)].Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { pmt });
+
+                    //            pmt.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+                    //        }
+                    //        catch { }
+                    //    }
+                    //}
+                    //else
+                    //{
+                    //    try
+                    //    {
+                    //        string strPkey = "";
+                    //        for (int j = 0; j < obj.Tables[0].Rows.Count; j++)
+                    //        {
+                    //            if (obj.Tables[0].Rows[j]["SETINFO"].ToString() == strSetInfo.Substring(0, strSetInfo.Length - 3))
+                    //            {
+                    //                strPkey = obj.Tables[0].Rows[j]["CAPTION"].ToString();
+                    //            }
+                    //        }
+
+                    //        Infragistics.Win.UltraWinToolbars.ButtonTool bt = new Infragistics.Win.UltraWinToolbars.ButtonTool(strBtName);
+                    //        Infragistics.Win.UltraWinToolbars.ButtonTool btb = new Infragistics.Win.UltraWinToolbars.ButtonTool(strBtName);
+                    //        btb.SharedProps.Caption = strBtName;
+                    //        this.ultraToolbarsManager1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { btb });
+
+                    //        Infragistics.Win.UltraWinToolbars.PopupMenuTool pmtb;
+                    //        if (strSetInfo.Length == 3)
+                    //        {
+                    //            this.ultraToolbarsManager1.Toolbars[0].Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { bt });
+                    //            btb.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+                    //        }
+                    //        else
+                    //        {
+                    //            pmtb = this.ultraToolbarsManager1.Tools[strPkey] as PopupMenuTool;
+
+                    //            pmtb.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { bt });
+                    //        }
+
+                    //        bt.Key = strBtKey;
+                    //        bt.SharedProps.Category = strBtCat;
+
+                    //    }
+                    //    catch (Exception ex)
+                    //    {
+                    //        Console.WriteLine(ex.Message);
+                    //    }
+                    //}
+                    #endregion
+
+                    //if (ultraToolbarsManager1.Tools.Exists(strBtKey))
+                    //{
+                    //    for (int extKey = 0; extKey < 5; extKey++)
+                    //    {
+                    //        if (!ultraToolbarsManager1.Tools.Exists(strBtKey + "@" + extKey.ToString()))
+                    //        {
+                    //            strBtKey = strBtKey + "@" + extKey.ToString();
+                    //            break;
+                    //        }
+                    //    }
+                    //}
+                    strBtKey = strBtKey + "@" + System.Guid.NewGuid().ToString();
+                    obj.Tables[0].Rows[i]["KEY_"] = strBtKey;
+                    obj.Tables[0].AcceptChanges();
+                    if (strType == "MENU")
+                    {
+                        PopupMenuTool menu = new PopupMenuTool(strBtKey);
+                        PopupMenuTool menub = new PopupMenuTool(strBtKey);
+                        menub.SharedProps.Caption = strBtName;
+                        ultraToolbarsManager1.Tools.AddRange(new ToolBase[] { menub });
+
+                        if (strSetInfo.Length > 3)
+                        {
+                            string strPKey = "";
+                            for (int j = 0; j < obj.Tables[0].Rows.Count; j++)
+                            {
+                                if (obj.Tables[0].Rows[j]["SETINFO"].ToString() == strSetInfo.Substring(0, strSetInfo.Length - 3))
+                                {
+                                    strPKey = obj.Tables[0].Rows[j]["KEY_"].ToString();
+                                    break;
+                                }
+                            }
+
+                            ((PopupMenuTool)ultraToolbarsManager1.Tools[strPKey]).Tools.AddRange(new ToolBase[] { menu });
+                        }
+                        else
+                        {
+                            ultraToolbarsManager1.Toolbars[0].Tools.AddRange(new ToolBase[] { menu });
+                        }
+                    }
+                    else
+                    {
+                        ButtonTool btn = new ButtonTool(strBtKey);
+                        ButtonTool btnb = new ButtonTool(strBtKey);
+                        btnb.SharedProps.Category = strBtCat;
+                        btnb.SharedProps.Caption = strBtName;
+                        btnb.SharedProps.DisplayStyle = ToolDisplayStyle.ImageAndText;
+                        ultraToolbarsManager1.Tools.AddRange(new ToolBase[] { btnb });
+
+                        if (strSetInfo.Length > 3)
+                        {
+                            string strPKey = "";
+                            for (int j = 0; j < obj.Tables[0].Rows.Count; j++)
+                            {
+                                if (obj.Tables[0].Rows[j]["SETINFO"].ToString() == strSetInfo.Substring(0, strSetInfo.Length - 3))
+                                {
+                                    strPKey = obj.Tables[0].Rows[j]["KEY_"].ToString();
+                                    break;
+                                }
+                            }
+
+                            ((PopupMenuTool)ultraToolbarsManager1.Tools[strPKey]).Tools.AddRange(new ToolBase[] { btn });
+                        }
+                        else
+                        {
+                            ultraToolbarsManager1.Toolbars[0].Tools.AddRange(new ToolBase[] { btn });
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(ex.Message);
+            }
+
+            //this.ultraToolbarsManager1.LoadFromXml(ClientCommon._UserInfo.MenuConfigStream);
+            AddBasePoupToolBarItem("系统", "System");
+        }
+        private void AddBasePoupToolBarItem(string strBtName, string strKey)
+        {
+            try
+            {
+                Infragistics.Win.UltraWinToolbars.PopupMenuTool pmt = new Infragistics.Win.UltraWinToolbars.PopupMenuTool(strBtName);
+                Infragistics.Win.UltraWinToolbars.PopupMenuTool pmtb = new Infragistics.Win.UltraWinToolbars.PopupMenuTool(strBtName);
+                pmtb.SharedProps.Caption = strBtName;
+
+                this.ultraToolbarsManager1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { pmtb });
+
+                this.ultraToolbarsManager1.Toolbars[0].Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { pmt });
+
+                pmt.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+
+                AddBaseButtonToolBarItem("重新登录", "reLogin", pmtb);
+                AddBaseButtonToolBarItem("修改密码", "passwd", pmtb);
+                AddBaseButtonToolBarItem("设置班组", "setBz", pmtb);
+#if forCG
+                AddBaseButtonToolBarItem("我的有效菜单", "mymenu", pmtb);
+#endif
+                AddBaseButtonToolBarItem("帮助", "help", pmtb);
+                AddBaseButtonToolBarItem("关于", "about", pmtb);
+                AddBaseButtonToolBarItem("退出", "close", pmtb);
+
+                this.ultraToolbarsManager1.LockToolbars = true;
+                this.ultraToolbarsManager1.ShowQuickCustomizeButton = false;
+                this.ultraToolbarsManager1.Style = Infragistics.Win.UltraWinToolbars.ToolbarStyle.OfficeXP;
+
+            }
+            catch { }
+        }
+        private void AddBaseButtonToolBarItem(string strBtName, string strBtKey, PopupMenuTool pmt)
+        {
+            try
+            {
+                Infragistics.Win.UltraWinToolbars.ButtonTool bt = new Infragistics.Win.UltraWinToolbars.ButtonTool(strBtName);
+                Infragistics.Win.UltraWinToolbars.ButtonTool btb = new Infragistics.Win.UltraWinToolbars.ButtonTool(strBtName);
+                btb.SharedProps.Caption = strBtName;
+                this.ultraToolbarsManager1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { btb });
+
+                pmt.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { bt });
+
+                bt.Key = strBtKey;
+                if (strBtKey == "reLogin")
+                {
+                    btb.InstanceProps.IsFirstInGroup = true;
+                }
+            }
+            catch { }
+        }
+
+        private void ReLogin()
+        {
+            FrmCover frm = new FrmCover();
+            frm.ReLoginFlag = true;
+            frm._mainForm = this;
+            frm.ShowDialog();
+            if (frm._loginFlag > 0)
+            {
+                InitForm(1);
+            }
+        }
+
+        Form LastActiveForm = null;
+        private void ReLoginWithoutInit()
+        {
+            if (this.MdiChildren.GetLength(0) > 0)
+            {
+                LastActiveForm = this.ActiveMdiChild;
+                foreach (Form frm in this.MdiChildren)
+                {
+                    frm.Hide();
+                }
+            }
+            else
+            {
+                LastActiveForm = null;
+            }
+
+            this.ultraStatusBar1.Panels[0].Text = "闲置时间过长,请重新登录!";
+            this.ShowPopUpMsg("闲置时间过长,请重新登录!               ", this, new Point(this.Width > 1000 ? 1000 : this.Width, this.ultraStatusBar1.Top));
+            do
+            {
+                FrmCover frm = new FrmCover(ClientCommon._UserInfo.LoginID);
+                frm.ReLoginFlag = true;
+                frm._mainForm = this;
+                frm.Text = "闲置时间过长,请重新登录!";
+                frm.ShowDialog(this);
+                if (frm._loginFlag > 0)
+                {
+                    InitForm(2);
+                    break;
+                }
+                else if (frm._loginFlag == -1)
+                {
+                    DialogResult dr = MessageBox.Show(string.Format("是否确认退出{0}?", this.Text), "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
+                    if (dr == DialogResult.Yes)
+                    {
+                        Application.Exit();
+                        break;
+                    }
+                }
+            } while (true);
+        }
+
+        #endregion
+        //未激活的界面将线程开关关闭
+        private void ultraTabbedMdiManager1_TabActivated(object sender, Infragistics.Win.UltraWinTabbedMdi.MdiTabEventArgs e)
+        {
+            foreach (Form frmMdi in this.MdiChildren)
+            {
+                FrmBase frm = frmMdi as FrmBase;
+                frm.On_Off_Thread = false;
+            }
+            ((FrmBase)e.Tab.Form).On_Off_Thread = true;
+        }
+
+        private void ultraToolbarsManager1_ToolClick(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
+        {
+            switch (e.Tool.Key)
+            {
+                case "reLogin":
+                    ReLogin();
+                    break;
+                case "close":
+                    this.Close();
+                    break;
+                case "help":
+                    if (System.IO.File.Exists(@"CoreHelp.chm"))
+                    {
+                        try
+                        {
+                            ProcessStartInfo p = new ProcessStartInfo(@"CoreHelp.chm");
+                            p.WorkingDirectory = @"CoreHelp.chm";
+                            Process.Start(p);
+                        }
+                        catch (Exception ex)
+                        {
+                            Console.WriteLine(ex.Message);
+                        }
+                    }
+                    break;
+                case "about":
+                    FrmAbout frm = new FrmAbout();
+                    if (ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["About"].Value.ToString() != null)
+                        frm.InitPic(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["About"].Value.ToString());
+                    frm.ShowDialog();
+                    break;
+                case "passwd":
+                    FrmPasswd frm1 = new FrmPasswd();
+                    frm1.ShowDialog();
+                    break;
+                case "setBz":
+                    FrmSetBz frm2 = new FrmSetBz();
+                    frm2.ShowDialog();
+                    if (frm2._boFlag)
+                    {
+                        string bc = this.GetBc(ClientCommon._UserInfo.UserBc);
+                        string bb = this.GetBb(ClientCommon._UserInfo.UserBb);
+
+                        if (bc == bb)
+                            this.ultraStatusBar1.Panels[2].Text = bb;
+                        else
+                            this.ultraStatusBar1.Panels[2].Text = bc + "  " + bb;
+                    }
+                    break;
+                case "mymenu":
+                    frmMyMenuInfo frmMyMenuInfo_1 = new frmMyMenuInfo();
+                    frmMyMenuInfo_1.ShowDialog();
+                    break;
+                default:
+                    {
+                        OpenChildForm(e);
+                        break;
+                    }
+            }
+        }
+        #endregion
+
+        #region "	ExplorerBar Manager	"
+
+
+
+        /// <summary>
+        /// 打开子窗体
+        /// </summary>
+        /// <param name="xn">存放子窗体信息的xmlnode</param>
+        private void OpenChildForm(ToolClickEventArgs e)
+        {
+            foreach (Form mdiChild in this.MdiChildren)
+            {
+                if ((mdiChild as FrmBase).Key == e.Tool.Key)
+                {
+                    mdiChild.Activate();
+                    return;
+                }
+            }
+
+            //实例化窗体并打开
+            try
+            {
+                string assemblyName = e.Tool.SharedProps.Category;
+                string className = e.Tool.Key.Split('@')[0];
+                Assembly baseFormAssembly = Assembly.Load(assemblyName);
+                Type type = baseFormAssembly.GetType(className);
+
+                System.Diagnostics.Debug.Assert(type.IsSubclassOf(typeof(FrmBase)));
+
+                FrmBase form = Activator.CreateInstance(type, true) as FrmBase;
+                form.MdiParent = this;
+                form.Text = e.Tool.SharedProps.Caption;
+                form.Key = e.Tool.Key;
+
+                form.Show();
+
+                this.ultraStatusBar1.Panels[0].Text = "打开" + form.Text + "窗体。";
+                ClientCommon.RecodeOperateInfo("打开", form.Text, "");
+            }
+            catch (Exception ex)
+            {
+                this.ultraStatusBar1.Panels[0].Text = ex.Message;
+            }
+        }
+
+        #endregion
+
+        #region "	Message	"
+        private void InitMessageBox()
+        {
+            Infragistics.Win.UltraWinDock.DockAreaPane dockAreaPane1 = new Infragistics.Win.UltraWinDock.DockAreaPane(
+                Infragistics.Win.UltraWinDock.DockedLocation.Floating);
+
+            Infragistics.Win.UltraWinDock.DockableControlPane dockableControlPane1 = new Infragistics.Win.UltraWinDock.DockableControlPane();
+
+            dockAreaPane1.FloatingLocation = new System.Drawing.Point(1024 - 210, 780 - 150 - 50);
+            dockableControlPane1.Control = this.panel1;
+            dockableControlPane1.Text = "消息";
+            dockAreaPane1.Panes.AddRange(new Infragistics.Win.UltraWinDock.DockablePaneBase[] {
+																								  dockableControlPane1});
+            dockAreaPane1.Size = new System.Drawing.Size(200, 150);
+            this.ultraDockManager1.DockAreas.AddRange(new Infragistics.Win.UltraWinDock.DockAreaPane[] {
+																										   dockAreaPane1});
+            this.ultraDockManager1.ControlPanes[0].Closed = true;
+            this.panel1.Visible = true;
+        }
+        private void ShowMessageBox()
+        {
+            _RowCount = _dsMessage.Tables[0].Rows.Count;
+
+            this.ultraMaskedEdit2.InputMask = string.Format(@"nnn \o\f\ \{0}", _RowCount.ToString());
+            this.ultraMaskedEdit2.Text = string.Format("1 of {0}", _RowCount.ToString());
+            SetRichText(1);
+            this.ultraDockManager1.ControlPanes[0].Closed = false;
+        }
+
+        private int _RowCount = 0;
+        private DataSet _dsMessage;
+
+        private void timer1_Tick(object sender, System.EventArgs e)
+        {
+            //GetMessage();
+            GetUserMessage();
+        }
+
+        private void GetUserMessage()
+        {
+            string strOut = "";
+            DataSet ds = ClientCommon._RemotingHelp.ExecuteMethod("ServerCommon", "Core.Mes.ServerCommon.UserInfoManager", "GetUserMessage",
+                null, out strOut) as DataSet;
+
+            if (strOut == "" && ds.Tables[0].Rows.Count > 0)
+            {
+                this.dtUserMessage = ds.Tables[0];
+            }
+            else
+            {
+                this.dtUserMessage = null;
+            }
+
+        }
+
+        private DataTable dtUserMessage;
+        private int _iCount = 0;
+
+        private void timer2_Tick(object sender, System.EventArgs e)
+        {
+            GetLastCall();
+            if (this.dtUserMessage == null) return;
+
+            if (_iCount < this.dtUserMessage.Rows.Count)
+            {
+                string str = this.GetNoNullStr(this.dtUserMessage.Rows[_iCount][0]);
+                str = str + "  " + this.GetNoNullStr(this.dtUserMessage.Rows[_iCount][1]);
+                str = str + "  " + Convert.ToDateTime(this.dtUserMessage.Rows[_iCount][2]).ToString("MM月dd日 HH时mm分");
+
+                this.ultraStatusBar1.Panels[0].Text = str;
+
+                if (this.dtUserMessage.Rows[_iCount]["PRI_"].ToString() == "2")
+                    this.ultraStatusBar1.Panels[0].Appearance.ForeColor = Color.Red;
+                else if (this.dtUserMessage.Rows[_iCount]["PRI_"].ToString() == "1")
+                    this.ultraStatusBar1.Panels[0].Appearance.ForeColor = Color.Blue;
+                else
+                    this.ultraStatusBar1.Panels[0].Appearance.ForeColor = Color.Black;
+
+
+                _iCount++;
+
+            }
+            else
+            {
+                _iCount = 0;
+            }
+        }
+
+        private void GetLastCall()
+        {
+            CallingMessage cm = new CallingMessage();
+            DateTime ldt = ClientCommon._RemotingHelp.GetLastExecute(out cm);
+            TimeSpan ts = (DateTime.Now - ldt);
+
+            ultraStatusBar1.Panels[4].Text = string.Format("空闲时间 {0,3}'{1,2}\"", ts.Minutes, ts.Seconds);
+
+            if (ts.TotalSeconds > FreeTime)
+            {
+                timer2.Stop();
+                ReLoginWithoutInit();
+            }
+        }
+
+        private string GetNoNullStr(object obj)
+        {
+            if (obj == null || obj == DBNull.Value) return "";
+
+            return obj.ToString();
+        }
+
+        private void GetMessage()
+        {
+            string strOut = "";
+            DataSet ds = ClientCommon._RemotingHelp.ExecuteMethod("ServerCommon", "Core.Mes.ServerCommon.UserInfoManager", "GetMessage",
+                new object[] { ClientCommon._UserInfo.UserID }, out strOut) as DataSet;
+
+            if (strOut != "" || ds.Tables[0].Rows.Count == 0)
+            {
+                if (_dsMessage != null) _dsMessage.Clear();
+                this.ultraDockManager1.ControlPanes[0].Closed = true;
+                return;
+            }
+
+            if (!this.ultraDockManager1.ControlPanes[0].Closed) return;
+
+            if (_dsMessage == null)
+                _dsMessage = ds;
+            else
+            {
+                _dsMessage.Clear();
+                _dsMessage.Merge(ds);
+            }
+
+            ShowMessageBox();
+        }
+        private int newValue = 1;
+        private void ultraMaskedEdit2_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e)
+        {
+            int min = (int)this.ultraMaskedEdit2.MinValue;
+            int max = (int)this.ultraMaskedEdit2.MaxValue;
+            newValue = min;
+
+            Infragistics.Win.EditorWithMask maskEdit = e.Button.Editor as Infragistics.Win.EditorWithMask;
+
+            try
+            {
+                string maskText = maskEdit.GetText(Infragistics.Win.UltraWinMaskedEdit.MaskMode.Raw);
+
+                if (!Convert.IsDBNull(maskText))
+                    newValue = int.Parse(maskText);
+            }
+            catch { }
+
+            switch (e.Button.Key)
+            {
+                case "First":
+                    newValue = min;
+                    break;
+                case "Last":
+                    newValue = max;
+                    break;
+                case "Next":
+                    newValue++;
+                    break;
+                case "Previous":
+                    newValue--;
+                    break;
+            }
+
+            if (newValue < 1)
+                newValue = 1;
+            else if (newValue > _RowCount)
+                newValue = _RowCount;
+
+            e.Button.Editor.Value = newValue;
+            SetRichText(newValue);
+        }
+        private void SetRichText(int rowIndex)
+        {
+            try
+            {
+                this.richTextBox1.Text = this._dsMessage.Tables[0].Rows[rowIndex - 1]["INFO"].ToString();
+                this.richTextBox1.Text += "\n----------";
+                this.richTextBox1.Text += this._dsMessage.Tables[0].Rows[rowIndex - 1]["SENDPERSON"].ToString() + Convert.ToDateTime(this._dsMessage.Tables[0].Rows[rowIndex - 1]["SENDTIME"]).ToString("MM-dd HH:mm");
+
+                this.richTextBox1.Tag = this._dsMessage.Tables[0].Rows[rowIndex - 1]["ID_"].ToString();
+            }
+            catch
+            {
+                this.richTextBox1.Text = "错误!";
+            }
+        }
+        private void button1_Click(object sender, System.EventArgs e)
+        {
+            string strOut = "";
+            object obj = ClientCommon._RemotingHelp.ExecuteMethod("ServerCommon", "Core.Mes.ServerCommon.UserInfoManager", "AffirmMessage",
+                new object[] { this.richTextBox1.Tag.ToString() }, out strOut);
+
+            if (strOut != "") { MessageBox.Show(strOut); return; }
+
+            this._dsMessage.Tables[0].Rows.RemoveAt(newValue - 1);
+            this._dsMessage.AcceptChanges();
+            if (this._dsMessage.Tables[0].Rows.Count == 0) this.ultraDockManager1.ControlPanes[0].Closed = true;
+            GetMessage();
+        }
+        #endregion
+
+        private void ultraStatusBar1_DoubleClick(object sender, System.EventArgs e)
+        {
+            if (this.dtUserMessage != null && this.dtUserMessage.Rows.Count > 0)
+            {
+                this.richTextBox2.Clear();
+                for (int i = 0; i < this.dtUserMessage.Rows.Count; i++)
+                {
+                    DataRow dr = this.dtUserMessage.Rows[i];
+                    string str = Convert.ToString(i + 1) + "、 " + this.GetNoNullStr(dr[0]);
+                    str = str + "  " + this.GetNoNullStr(dr[1]);
+                    str = str + "  " + Convert.ToDateTime(dr[2]).ToString("MM月dd日 HH时mm分");
+                    str = str + " \n";
+
+
+                    if (dr["PRI_"].ToString() == "2")
+                        this.richTextBox2.SelectionColor = Color.Red;
+                    else if (dr["PRI_"].ToString() == "1")
+                        this.richTextBox2.SelectionColor = Color.Blue;
+                    else
+                        this.richTextBox2.SelectionColor = Color.Black;
+                    this.richTextBox2.SelectedText = str;
+
+                }
+                this.panel2.Visible = true;
+            }
+        }
+
+        private void ultraStatusBar1_PanelClick(object sender, Infragistics.Win.UltraWinStatusBar.PanelClickEventArgs e)
+        {
+            if (e.Panel.Index == 4)
+            {
+                CallingMessage cm = new CallingMessage();
+                DateTime ldt = ClientCommon._RemotingHelp.GetLastExecute(out cm);
+
+                ShowPopUpMsg(string.Format("{0}\n{1}\n{2}", cm.ServerName, cm.ClassName, cm.MethodName),
+                    string.Format("最后调用:{0}", ldt.ToString("yyyy-MM-dd HH:mm:ss")));
+            }
+        }
+
+        private void ultraStatusBar1_PanelDoubleClick(object sender, Infragistics.Win.UltraWinStatusBar.PanelClickEventArgs e)
+        {
+            try
+            {
+                if (e.Panel.Index == 3)
+                {
+                    ShowPopUpMsg(ultraTabbedMdiManager1.ActiveTab.Form.GetType().FullName);
+                }
+            }
+            catch { }
+        }
+
+        private void button2_Click(object sender, System.EventArgs e)
+        {
+            this.panel2.Visible = false;
+        }
+
+        void AjustTime()
+        {
+            string strOut = "";
+            DateTime time1 = DateTime.Now;
+            try
+            {
+                object obj = ClientCommon._RemotingHelp.ExecuteMethod("ServerCommon", "Core.Mes.ServerCommon.UserInfoManager", "getDBSrvTime",
+                    new object[] { }, out strOut);
+                if (obj != null)
+                {
+                    DateTime srvTime = ((DateTime)obj);
+                    DateTime time2 = DateTime.Now;
+                    srvTime.Add(time2 - time1);
+                    DateAndTime.Today = srvTime.Date;
+                    DateAndTime.TimeOfDay = srvTime;
+                }
+            }
+            catch
+            {
+            }
+        }
+
+        #region 气泡提示函数
+        //////////////////////////////////////////////////////////////////////////
+        private G1.UltraWinToolTip.UltraToolTipManager ToolTipManager1 = new G1.UltraWinToolTip.UltraToolTipManager();
+        public delegate void ShowPopUpMsgDelegate(string strmsg, string prompt);
+        public delegate void ShowPopUpMsgDelegate_1(string strmsg, Control control);
+        public void ShowPopUpMsg(string strMsg)
+        {
+            ShowPopUpMsg(strMsg, "");
+        }
+
+        public void ShowPopUpMsg(string strMsg, string Prompt)
+        {
+            if (this.InvokeRequired)
+            {
+                ShowPopUpMsgDelegate act_Show = new ShowPopUpMsgDelegate(ShowPopUpMsg);
+                this.Invoke(act_Show, strMsg, Prompt);
+            }
+            else
+            {
+                Form frm = this.MdiParent;
+                if (frm == null) frm = this;
+
+                int min_len = 40;
+                string[] lines = strMsg.Trim().Split(new char[] { '\n' });
+                if (lines == null)
+                {
+                    strMsg = "".PadRight(min_len, ' ');
+                }
+                else
+                {
+                    lines[0] = lines[0].PadRight(min_len, ' ');
+                    strMsg = string.Join("\n", lines);
+                }
+                G1.UltraWinToolTip.UltraToolTipInfo toolTipInfo = new G1.UltraWinToolTip.UltraToolTipInfo
+                    (strMsg, G1.ToolTipImage.Info, Prompt, G1.DefaultableBoolean.Default);
+
+                toolTipInfo.Appearance.BackColor = Color.FromArgb(255, 255, 200);
+                //toolTipInfo.Appearance.BackColor2 = Color.Chartreuse;
+                toolTipInfo.Appearance.BackColor2 = Color.LightGoldenrodYellow;
+                toolTipInfo.Appearance.BackGradientStyle = G1.GradientStyle.Circular;
+                toolTipInfo.Appearance.ForeColor = Color.Red;
+                toolTipInfo.Appearance.FontData.Bold = G1.DefaultableBoolean.True;
+                toolTipInfo.Appearance.FontData.SizeInPoints = 11f;
+                toolTipInfo.ToolTipTitleAppearance.ForeColor = Color.Navy;
+
+
+                int delay_time = (strMsg.Length + Prompt.Length) / 3 * 1000;
+                ToolTipManager1.AutoPopDelay = delay_time < 5 ? 5 : delay_time;
+                ToolTipManager1.SetUltraToolTip(this, toolTipInfo);
+                ToolTipManager1.ShowToolTip(this, new Point(frm.ClientSize.Width - 20, frm.ClientSize.Height - 10));
+            }
+        }
+
+
+        public void ShowPopUpMsg(string strMsg, Control control)
+        {
+            if (control == null) return;
+
+            if (control.InvokeRequired)
+            {
+                ShowPopUpMsgDelegate_1 act_Show = new ShowPopUpMsgDelegate_1(ShowPopUpMsg);
+                control.Invoke(act_Show, strMsg);
+            }
+            else
+            {
+                G1.UltraWinToolTip.UltraToolTipManager _ToolTipManager = new G1.UltraWinToolTip.UltraToolTipManager();
+                G1.UltraWinToolTip.UltraToolTipInfo toolTipInfo = new G1.UltraWinToolTip.UltraToolTipInfo
+                    (strMsg, G1.ToolTipImage.None, "", G1.DefaultableBoolean.Default);
+
+                toolTipInfo.Appearance.BackColor = Color.WhiteSmoke;
+                toolTipInfo.Appearance.BackColor2 = Color.Yellow;
+                toolTipInfo.Appearance.BackGradientStyle = G1.GradientStyle.Circular;
+                toolTipInfo.Appearance.ForeColor = Color.Red;
+                toolTipInfo.Appearance.FontData.Bold = G1.DefaultableBoolean.True;
+                toolTipInfo.Appearance.FontData.SizeInPoints = 11f;
+                toolTipInfo.ToolTipTitleAppearance.ForeColor = Color.Navy;
+
+                Rectangle rect = control.RectangleToScreen(control.ClientRectangle);
+                rect.Height -= 15;
+                rect.Width -= 15;
+                Point screen_pos = control.PointToScreen(new Point(control.Location.X + control.Size.Width - 15, control.Location.Y + control.Height - 15));
+
+                int delay_time = strMsg.Length / 3 * 1000;
+                _ToolTipManager.AutoPopDelay = delay_time < 5 ? 5 : delay_time;
+                _ToolTipManager.SetUltraToolTip(this, toolTipInfo);
+                _ToolTipManager.ShowToolTip(this, rect, screen_pos);
+            }
+        }
+
+        public void ShowPopUpMsg(string strMsg, Control control, Point _offset)
+        {
+            if (control == null) return;
+
+            if (control.InvokeRequired)
+            {
+                ShowPopUpMsgDelegate_1 act_Show = new ShowPopUpMsgDelegate_1(ShowPopUpMsg);
+                control.Invoke(act_Show, strMsg);
+            }
+            else
+            {
+                G1.UltraWinToolTip.UltraToolTipManager _ToolTipManager = new G1.UltraWinToolTip.UltraToolTipManager();
+                G1.UltraWinToolTip.UltraToolTipInfo toolTipInfo = new G1.UltraWinToolTip.UltraToolTipInfo
+                    (strMsg, G1.ToolTipImage.None, "", G1.DefaultableBoolean.Default);
+
+                toolTipInfo.Appearance.BackColor = Color.WhiteSmoke;
+                toolTipInfo.Appearance.BackColor2 = Color.Yellow;
+                toolTipInfo.Appearance.BackGradientStyle = G1.GradientStyle.Circular;
+                toolTipInfo.Appearance.ForeColor = Color.Red;
+                toolTipInfo.Appearance.FontData.Bold = G1.DefaultableBoolean.True;
+                toolTipInfo.Appearance.FontData.SizeInPoints = 11f;
+                toolTipInfo.ToolTipTitleAppearance.ForeColor = Color.Navy;
+
+                Rectangle rect = control.RectangleToScreen(control.ClientRectangle);
+                rect.Height -= 15;
+                rect.Width -= 15;
+                Point screen_pos = control.PointToScreen(new Point(control.Location.X, control.Location.Y));
+                screen_pos.Offset(_offset);
+
+                int delay_time = strMsg.Length / 3 * 1000;
+                _ToolTipManager.AutoPopDelay = delay_time < 5 ? 5 : delay_time;
+                _ToolTipManager.SetUltraToolTip(this, toolTipInfo);
+                _ToolTipManager.ShowToolTip(this, screen_pos);
+            }
+        }
+
+        #endregion
+
+        //////////////////////////////////////////////////////////////////////////
+        /*                  拦截窗口消息,检测按钮点击                          */
+        //////////////////////////////////////////////////////////////////////////
+        //  一些定义
+        [DllImport("user32.dll", EntryPoint = "WindowFromPoint")]//指定坐标处窗体句柄
+        public static extern int WindowFromPoint(
+            int xPoint,
+            int yPoint
+        );
+
+        const int WM_PARENTNOTIFY = 0x0210;
+        const int WM_LBUTTONDOWN = 0x0201;
+        const int WM_RBUTTONDOWN = 0x0204;
+        const int WM_MBUTTONDOWN = 0x0207;
+        //////////////////////////////////////////////////////////////////////////
+        protected override void WndProc(ref Message m)
+        {
+            //Debug.Print(string.Format("{0,8:x} -- {1,10},{2,10}", m.Msg, m.WParam, m.LParam));
+            try
+            {
+                if (m.Msg == WM_PARENTNOTIFY)
+                {
+                    int LO_WPARAM = ((int)m.WParam & 0xFFFF);
+                    int HI_WPARAM = ((int)m.WParam >> 16);
+
+                    if (LO_WPARAM == WM_LBUTTONDOWN)
+                    {
+                        int LO_LPARAM = ((int)m.LParam & 0xFFFF);
+                        int HI_LPARAM = ((int)m.LParam >> 16);
+
+                        Point p = new Point(LO_LPARAM, HI_LPARAM);
+                        Point p1 = PointToScreen(p);
+
+                        string p_Text = "";
+                        int hwnd = WindowFromPoint(p1.X, p1.Y);
+                        Control c = Control.FromHandle((IntPtr)hwnd);
+                        Control pc = c;
+
+                        while (pc.Parent != null)
+                        {
+                            pc = pc.Parent;
+                            if (pc.GetType() == typeof(Form) || typeof(Form).IsAssignableFrom(pc.GetType()))
+                            {
+                                p_Text = pc.Text;
+                                break;
+                            }
+                        }
+
+                        if (c.GetType().ToString().ToUpper().Contains("BUTTON"))
+                        {
+                            ClientCommon.RecordUserEvent("点击", "按钮", c.Text.Trim(), p_Text, (string.IsNullOrEmpty(p_Text) ? "" : pc.Name), "");
+                        }
+                    }
+                }
+            }
+            catch
+            {
+
+            }
+            base.WndProc(ref m);
+        }
+
+    }
+
+}

+ 20 - 0
.svn/pristine/04/04d3dda876fed5749b756131397b68e88dba4317.svn-base

@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<configuration>
+  <appSettings>
+    <add key="downloadUrl" value="http://172.16.0.108:9998/"/>
+    <add key="downloadUrlfile" value="filelist.xml"/>
+    <add key="ClientSettingsProvider.ServiceUri" value=""/>
+  </appSettings>
+  <system.web>
+    <membership defaultProvider="ClientAuthenticationMembershipProvider">
+      <providers>
+        <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri=""/>
+      </providers>
+    </membership>
+    <roleManager defaultProvider="ClientRoleProvider" enabled="true">
+      <providers>
+        <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400"/>
+      </providers>
+    </roleManager>
+  </system.web>
+<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>

+ 68 - 0
.svn/pristine/05/0541878f56c5821f51c9e27bdbce4528e7116d2f.svn-base

@@ -0,0 +1,68 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{300F90A7-7F06-402E-9104-9E23799E76B1}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Core.Mes.ServerFrameWork</RootNamespace>
+    <AssemblyName>Core.Mes.ServerFrameWork</AssemblyName>
+
+    <OldToolsVersion>2.0</OldToolsVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>D:\Code\SERVER\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Core.Mes.IBaseInterface, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\产销平台DLL\Server\Core.Mes.IBaseInterface.dll</HintPath>
+    </Reference>
+    <Reference Include="DBManager, Version=1.0.3206.14966, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="log4net, Version=1.2.0.30714, Culture=neutral">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\Output\log4net.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.configuration" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ClsComponentBase.cs" />
+    <Compile Include="ClsServerPoolBase.cs" />
+    <Compile Include="Dispatcher.cs" />
+    <Compile Include="IServerBase.cs" />
+    <Compile Include="LogCommon.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

BIN
.svn/pristine/05/0564739af9b4b6e6420c0a4247445689b8452658.svn-base


+ 209 - 0
.svn/pristine/05/059cc443d17978212338e191cba134a87dde3020.svn-base

@@ -0,0 +1,209 @@
+using System;
+using System.Data;
+using System.Collections;
+using Core.Mes.ServerFrameWork;
+using Core.Mes.IBaseInterface;
+
+namespace Core.Mes.PurviewManager
+{
+  public class UAM_AUTHORIZATION : IComponent
+  {
+    public UAM_AUTHORIZATION() { }
+
+    private System.String _LOGINID;
+    private System.String _ROLEID;
+    private System.String _USERID;
+    private System.String _PASSWORD;
+    private System.DateTime _EXPIREDATE;
+    private System.DateTime _RECORDTIME;
+    private System.String _ACCREDITMAN;
+    private System.String _LOCKSTATUS;
+    private System.String _VALIDATECODE;
+
+
+    public System.String LOGINID
+    {
+      get { return _LOGINID; }
+      set { _LOGINID = value; }
+    }
+
+    public System.String ROLEID
+    {
+      get { return _ROLEID; }
+      set { _ROLEID = value; }
+    }
+
+    public System.String USERID
+    {
+      get { return _USERID; }
+      set { _USERID = value; }
+    }
+
+    public System.String PASSWD
+    {
+      get { return _PASSWORD; }
+      set { _PASSWORD = value; }
+    }
+
+    public System.DateTime EXPIREDATE
+    {
+      get { return _EXPIREDATE; }
+      set { _EXPIREDATE = value; }
+    }
+
+    public System.DateTime RECORDTIME
+    {
+      get { return _RECORDTIME; }
+      set { _RECORDTIME = value; }
+    }
+
+    public System.String ACCREDITMAN
+    {
+      get { return _ACCREDITMAN; }
+      set { _ACCREDITMAN = value; }
+    }
+
+    public System.String LOCKSTATUS
+    {
+      get { return _LOCKSTATUS; }
+      set { _LOCKSTATUS = value; }
+    }
+
+    public System.String VALIDATECODE
+    {
+      get { return _VALIDATECODE; }
+      set { _VALIDATECODE = value; }
+    }
+
+
+    public ReturnObject SelectUAM_AUTHORIZATION(string strWhere)
+    {
+      string sqlstr = "SELECT LOGINID"
+                     + ", ROLEID"
+                     + ", USERID"
+                     + ", PASSWD"
+                     + ", (SELECT DEPARTMENTID FROM CXUSER.UAM_USER WHERE CXUSER.UAM_USER.USERID=CXUSER.UAM_AUTHORIZATION.USERID) DEPARTMENTID "
+                     + ", (SELECT WORKPOS FROM CXUSER.UAM_USER WHERE CXUSER.UAM_USER.USERID=CXUSER.UAM_AUTHORIZATION.USERID) WORKPOS "
+                     + ", (SELECT MEMO FROM CXUSER.UAM_ROLE WHERE CXUSER.UAM_ROLE.ROLEID=CXUSER.UAM_AUTHORIZATION.ROLEID) ROLEMEMO "
+                   //+ ", EXPIREDATE"
+                   //+ ", RECORDTIME"
+                   // + ", ACCREDITMAN"
+                    // + ", LOCKSTATUS"
+                    // + ", VALIDATECODE"
+                     + " from CXUSER.UAM_AUTHORIZATION " + strWhere;
+      string err = "";
+      DataSet ds = DBManager.ExecuteQuery(sqlstr, out err);
+      if (err == "") err = sqlstr;
+      return new ReturnObject(ds, err);
+    }
+    public ReturnObject GetUAM_AUTHORIZATION(string where)
+    {
+      string sql = "SELECT A.LOGINID,A.ROLEID,A.USERID,A.PASSWD,B.DEPARTMENTID,B.WORKPOS,"
+                  + "(SELECT MEMO FROM CXUSER.UAM_ROLE WHERE ROLEID=A.ROLEID) ROLEMEMO,decode(NVL(lockstatus,'0'),'0','ÒÑÆôÓÃ','ÒÑÍ£ÓÃ') STATUS "
+                //+"EXPIREDATE,RECORDTIME,ACCREDITMAN,LOCKSTATUS,VALIDATECODE "
+                  + "FROM CXUSER.UAM_AUTHORIZATION A,CXUSER.UAM_USER B WHERE A.USERID=B.USERID "
+                  + where
+                  + " ORDER BY A.LOGINID ";
+      string err = "";
+      DataSet rtndst = this.DBManager.ExecuteQuery(sql, out err);
+      if (err == "") err = err + "%" + sql;
+      return new ReturnObject(rtndst, err);
+    }
+    public ReturnObject SelectAndCopy(string strWhere)
+    {
+      string sqlstr = "SELECT LOGINID"
+         + ", ROLEID"
+         + ", USERID"
+         + ", PASSWD"
+         + ", EXPIREDATE"
+         + ", RECORDTIME"
+         + ", ACCREDITMAN"
+         + ", LOCKSTATUS"
+         + ", VALIDATECODE"
+         + " from CXUSER.UAM_AUTHORIZATION " + strWhere;
+      string err = "";
+      DataSet ds = DBManager.ExecuteQuery(sqlstr, out err);
+      if (err == "" && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
+      {
+        DataRow dr = ds.Tables[0].Rows[0];
+        Type type = this.GetType();
+        foreach (System.Reflection.PropertyInfo pro in type.GetProperties())
+        {
+          if (pro.GetType().ToString() == "System.Single")
+          {
+            pro.SetValue(this, (Single)dr[pro.Name], null);
+            continue;
+          }
+          pro.SetValue(this, dr[pro.Name], null);
+        }
+      }
+      if (err == "") err = sqlstr;
+      return new ReturnObject(ds, err);
+    }
+
+    public ReturnObject InsertUAM_AUTHORIZATION(ArrayList ar)
+    {
+      string sqlstr = "INSERT INTO CXUSER.UAM_AUTHORIZATION"
+         + " (LOGINID"
+         + ", ROLEID"
+         + ", USERID"
+         + ", PASSWD"
+         + ") VALUES ('" + ar[0]
+         + "', '" + ar[1]
+         + "', '" + ar[2]
+         + "', '" + ar[3] + "')";
+      string err = "";
+      int i = DBManager.ExecuteNonQuery(sqlstr, out err);
+      return new ReturnObject(i, err);
+    }
+
+    public ReturnObject UpdateUAM_AUTHORIZATION(ArrayList ar)
+    {
+      string sqlstr = "UPDATE CXUSER.UAM_AUTHORIZATION SET "
+         + "  ROLEID = '" + ar[1]
+         + "', USERID = '" + ar[2]
+         + "', PASSWD = '" + ar[3]
+         + "' WHERE LOGINID = '" + ar[0] + "'";
+      string err = "";
+      int i = DBManager.ExecuteNonQuery(sqlstr, out err);
+      return new ReturnObject(i, err);
+    }
+    public ReturnObject UpdateRollid(ArrayList ar)
+    {
+      string sqlstr = "UPDATE CXUSER.UAM_AUTHORIZATION SET "
+        + "  ROLEID = '" + ar[0]
+        + "' WHERE LOGINID = '" + ar[1] + "'";
+      string err = "";
+      int i = DBManager.ExecuteNonQuery(sqlstr, out err);
+      return new ReturnObject(i, err);
+    }
+
+    public ReturnObject DeleteUAM_AUTHORIZATION(string strWhere)
+    {
+      string sqlstr = "DELETE FROM CXUSER.UAM_AUTHORIZATION " + strWhere;
+      string err = "";
+      int i = DBManager.ExecuteNonQuery(sqlstr, out err);
+      return new ReturnObject(i, err);
+    }
+
+    public ReturnObject UpdateDataSet(DataSet ds, string sqlstr)
+    {
+      string err = "";
+      bool flag = DBManager.UpdateTable(ds.Tables[0], sqlstr, out err);
+      return new ReturnObject(flag, err);
+    }
+
+    public void Copy(UAM_AUTHORIZATION par)
+    {
+      LOGINID = par.LOGINID;
+      ROLEID = par.ROLEID;
+      USERID = par.USERID;
+      PASSWD = par.PASSWD;
+      EXPIREDATE = par.EXPIREDATE;
+      RECORDTIME = par.RECORDTIME;
+      ACCREDITMAN = par.ACCREDITMAN;
+      LOCKSTATUS = par.LOCKSTATUS;
+      VALIDATECODE = par.VALIDATECODE;
+    }
+  }
+}

+ 139 - 0
.svn/pristine/05/05a512082b367d01db194674b83499144a55a9ef.svn-base

@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{CC99E982-2E68-4CA1-A72A-64AF8491AC99}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Mes.AutoUpdate</RootNamespace>
+    <AssemblyName>Mes.AutoUpdate</AssemblyName>
+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <StartupObject>Mes.AutoUpdate.Program</StartupObject>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <ApplicationIcon>Resources\16.ico</ApplicationIcon>
+    <TargetFrameworkSubset>
+    </TargetFrameworkSubset>
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.6.0.0</ApplicationVersion>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\client\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\..\client\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.configuration" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AutoUpdate.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="AutoUpdate.Designer.cs">
+      <DependentUpon>AutoUpdate.cs</DependentUpon>
+    </Compile>
+    <Compile Include="DownManager.cs" />
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="AutoUpdate.resx">
+      <DependentUpon>AutoUpdate.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="16.ico" />
+    <None Include="Resources\16.ico" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 23 - 0
.svn/pristine/06/0684b90bafca9c6277c072b3da1bd83b37af8c92.svn-base

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+  <appSettings>
+    <add key="ServerIP" value="127.0.0.1" />
+    <add key="ServerPort" value="9999" />
+    <add key="log4net-config-file" value="log4net.config"/>
+    <add key="MesDB" value="MesDB|ODPDB"/>
+    <!--<add key="MesDB" value="MesDB|MesSQL"/>-->
+    <add key="connLifeTimeA" value="180" />
+    <add key="connLifeTimeB" value="360" />
+    <add key="connLifeTimeC" value="540" />
+    <add key="dbManagerLifeTimeA" value="180" />
+    <add key="dbManagerLifeTimeB" value="180" />
+    <add key="dbManagerLifeTimeC" value="180" />
+    <add key="DbProxyStep" value="60" />
+    <!--MemoryMaxSize默认100M-->
+    <add key="MemoryMaxSize" value="100"/>
+    <!--MethodTime 默认30秒-->
+    <add key="MethodTime" value="30"/>
+    <!--MethodTime 默认30秒-->
+    <add key="Debug" value="true"/>
+  </appSettings>
+</configuration>

+ 56 - 0
.svn/pristine/06/06b0701190e7f91490220272b622f05334142606.svn-base

@@ -0,0 +1,56 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <LastOpenVersion>7.10.3077</LastOpenVersion>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ReferencePath>D:\Code\SERVER\</ReferencePath>
+    <CopyProjectDestinationFolder>
+    </CopyProjectDestinationFolder>
+    <CopyProjectUncPath>
+    </CopyProjectUncPath>
+    <CopyProjectOption>0</CopyProjectOption>
+    <ProjectView>ProjectFiles</ProjectView>
+    <ProjectTrust>0</ProjectTrust>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <EnableASPDebugging>false</EnableASPDebugging>
+    <EnableASPXDebugging>false</EnableASPXDebugging>
+    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
+    <EnableSQLServerDebugging>false</EnableSQLServerDebugging>
+    <RemoteDebugEnabled>false</RemoteDebugEnabled>
+    <RemoteDebugMachine>
+    </RemoteDebugMachine>
+    <StartAction>Program</StartAction>
+    <StartArguments>
+    </StartArguments>
+    <StartPage>
+    </StartPage>
+    <StartProgram>D:\Code\SERVER\Core.Mes.ServerManager.exe</StartProgram>
+    <StartURL>
+    </StartURL>
+    <StartWorkingDirectory>
+    </StartWorkingDirectory>
+    <StartWithIE>true</StartWithIE>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <EnableASPDebugging>false</EnableASPDebugging>
+    <EnableASPXDebugging>false</EnableASPXDebugging>
+    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
+    <EnableSQLServerDebugging>false</EnableSQLServerDebugging>
+    <RemoteDebugEnabled>false</RemoteDebugEnabled>
+    <RemoteDebugMachine>
+    </RemoteDebugMachine>
+    <StartAction>Project</StartAction>
+    <StartArguments>
+    </StartArguments>
+    <StartPage>
+    </StartPage>
+    <StartProgram>
+    </StartProgram>
+    <StartURL>
+    </StartURL>
+    <StartWorkingDirectory>
+    </StartWorkingDirectory>
+    <StartWithIE>false</StartWithIE>
+  </PropertyGroup>
+</Project>

BIN
.svn/pristine/08/0891626af45162ecfcbf7393e0556392e952c43c.svn-base


+ 1351 - 0
.svn/pristine/08/08cb34f2cf35ae46064acd700cf891c77c74b618.svn-base

@@ -0,0 +1,1351 @@
+using System;
+using System.IO;
+using System.Xml;
+using System.Data;
+using System.Collections;
+using System.Data.OracleClient;
+using Core.Mes.IBaseInterface;
+using Core.Mes.ServerFrameWork;
+using System.Configuration;
+using System.Collections.Specialized;
+using System.Text.RegularExpressions;
+using System.Reflection;
+using System.Threading;
+
+namespace Core.Mes.ServerCommon
+{
+    /// <summary>
+    /// Class1 的摘要说明。
+    /// </summary>
+    public class UserInfoManager : IComponent
+    {
+        string sTableSpace = "";
+        static DataTable ServicesList = new DataTable();
+        static Thread t_MasterConnector = null;
+
+        public UserInfoManager()
+        {
+            try
+            {
+
+                sTableSpace = ServerConfig.UserTableSpace;
+                if (!string.IsNullOrEmpty(sTableSpace.Trim())) sTableSpace = sTableSpace.Trim() + ".";
+            }
+            catch { }
+
+            ArrayList col_names = new ArrayList() { "ServerName", "URL", "MD5_KEY", "SHA256_KEY" };
+
+            foreach (string col_name in col_names)
+            {
+                if (!ServicesList.Columns.Contains(col_name))
+                    ServicesList.Columns.Add(col_name, typeof(string));
+            }
+            ServicesList.AcceptChanges();
+        }
+
+        #region "	用户登录	"
+        public ReturnObject GetPurviewInfo(string userID, string passwd, string hostname, string ipaddress)
+        {
+            lock (this)
+            {
+                string err = "";
+
+                DataRow dr = GetPurviewRow(userID, passwd, out err);
+
+                if (err != "")
+                {
+                    return new ReturnObject(null, err);
+                }
+                if (dr == null || dr["MEMO"] == null)
+                    return new ReturnObject(null, 10009, "用户名或密码错误!");
+                UserInfo useInfo = new UserInfo();
+
+                useInfo = SetUserInfo(dr);
+
+                string v_CheckPwd = "";
+                v_CheckPwd = ServerConfig.CheckPassword > 0 ? CheckPWDRule(passwd) : "";
+
+                if (ServerConfig.CheckIpRule > 0 && !CheckUserIPRule(ipaddress, dr["COMPUTERIP"].ToString().Trim()))
+                {
+                    throw new Exception("帐号被限制不能在当前计算机IP登录!");
+                }
+
+                return new ReturnObject(useInfo, 0, v_CheckPwd);
+            }
+        }
+
+        private bool CheckUserIPRule(string IpAddress, string IpRule)
+        {
+            if (string.IsNullOrEmpty(IpRule)) return true;
+            string[] ips = IpAddress.Split(new string[] { ".", @"。" }, StringSplitOptions.None);
+
+            string[] ipR = IpRule.Split(new string[] { ";", @";" }, StringSplitOptions.None);
+            for (int i = 0; i < ipR.GetLength(0); i++)
+            {
+                string iprs = ipR[i].Trim();
+                string[] ipRules = iprs.Split(new string[] { ".", @"。" }, StringSplitOptions.None);
+                int min_len = Math.Min(ipRules.GetLength(0), ips.GetLength(0));
+                for (int idx = 0; idx < (min_len >= 4 ? 4 : min_len); idx++)
+                {
+                    string ip_segment = ipRules[idx].Trim();
+                    string ip = ips[idx].Trim();
+                    if (string.IsNullOrEmpty(ip_segment) || string.IsNullOrEmpty(ip)) continue;
+
+                    //检查ip规则配置是否正确  只允许包含  [数字]、[*]、[?] 三种字符;
+                    Regex regex_segment = new Regex(@"^[0-9\?\*]{1,3}$");
+                    if (!regex_segment.IsMatch(ip_segment))
+                    {
+                        throw new Exception(string.Format("IP规则第三段配置不正确![{0}]", ip_segment));
+                    }
+                    ip_segment = ip_segment.Replace("*", @"\d*").Replace("?", @"\d?");
+                    ip_segment = string.Format(@"^{0}$", ip_segment);
+
+                    Regex regex_Ip = new Regex(ip_segment);
+                    if (!regex_Ip.IsMatch(ip))
+                    {
+                        return false;
+                    }
+                }
+            }
+            return true;
+        }
+
+        public ReturnObject CheckPWD(string passwd)
+        {
+            string v_CheckPwd = "";
+            try
+            {
+                v_CheckPwd = ServerConfig.CheckPassword > 0 ? CheckPWDRule(passwd) : "";
+            }
+            catch
+            {
+            }
+            return new ReturnObject(null, string.IsNullOrEmpty(v_CheckPwd) ? 0 : 1, v_CheckPwd);
+        }
+
+        private string CheckPWDRule(string passwd)
+        {
+            string sReason = "";
+            Boolean ContainLetter = false;
+            Boolean ContainNumeric = false;
+            Boolean ContailOthers = false;
+            int len_pwd = passwd.Length;
+
+            if (len_pwd < 6)
+            {
+                sReason += "  密码位数太少\n";
+            }
+
+            for (int idx = 0; idx < passwd.Length; idx++)
+            {
+                Char[] cp = passwd.Substring(idx, 1).ToLower().ToCharArray();
+                if ((int)'a' <= (int)(cp[0]) && (int)'z' >= (int)(cp[0]))
+                {
+                    ContainLetter = true;
+                }
+                else if ((int)'0' <= (int)(cp[0]) && (int)'9' >= (int)(cp[0]))
+                {
+                    ContainNumeric = true;
+                }
+                else
+                {
+                    ContailOthers = true;
+                }
+            }
+
+            if (!ContailOthers && (!ContainLetter || !ContainNumeric))
+            {
+                sReason += "  密码不能全是字母或数字;\n";
+            }
+
+            if (!string.IsNullOrEmpty(sReason))
+            {
+                sReason = string.Format("{0}", sReason);
+            }
+            return sReason;
+        }
+
+        private DataRow GetPurviewRow(string userID, string passwd, out string err)
+        {
+            string sqlstr = string.Format(@"SELECT A.*, B.MEMO, C.NAME, C.BB, C.BC, B.ROLENAME, C.DEPARTMENTID, C.COMPUTERIP,
+                      D.DEPARTMENTNAME FROM {0}UAM_AUTHORIZATION A, {0}UAM_ROLE B, {0}UAM_USER C, {0}UAM_DEPARTMENT D 
+                      WHERE A.USERID = C.USERID AND A.ROLEID = B.ROLEID AND C.DEPARTMENTID=D.DEPARTMENTID AND  
+                       UPPER(A.LOGINID) = UPPER('{1}') AND UPPER(PASSWD) = '{2}'", sTableSpace, userID, PasswdSecurity(passwd));
+
+            err = "";
+
+            System.Data.DataSet ds = this.DBManager.ExecuteQuery(sqlstr, out err);
+
+            if (err != "") return null;
+
+            if (ds.Tables[0].Rows.Count == 0)
+            {
+                err = "用户名或密码错误!"; return null;
+            }
+
+            if ("1".Equals(ds.Tables[0].Rows[0]["lockstatus"].ToString()))
+            {
+                err = "该登录帐户已停用!"; return null;
+            }
+
+            System.Data.DataRow dr = ds.Tables[0].Rows[0];
+
+            return dr;
+        }
+        private XmlDocument ReadXmlDoc(string fileName)
+        {
+            XmlDocument doc = new XmlDocument();
+
+            try
+            {
+                doc.Load(@"CA\" + fileName);
+
+                return doc;
+            }
+
+            catch
+            {
+                return null;
+            }
+        }
+
+        private UserInfo SetUserInfo(DataRow dr)
+        {
+            UserInfo info;
+
+            try
+            {
+                info = new UserInfo();
+                info.LoginID = dr["LOGINID"].ToString();
+                info.UserID = dr["USERID"].ToString();
+                info.UserDepID = this.GetNoNullStr(dr["DEPARTMENTID"]);
+                info.UserDepName = this.GetNoNullStr(dr["DEPARTMENTNAME"]);
+                info.UserRoleID = this.GetNoNullStr(dr["ROLEID"]);
+                info.UserRoleName = this.GetNoNullStr(dr["ROLENAME"]);
+                if (dr["NAME"] == null || dr["NAME"] == DBNull.Value)
+                    info.UserName = "";
+                else
+                    info.UserName = dr["NAME"].ToString();
+
+                if (dr["BB"] == null || dr["BB"] == DBNull.Value)
+                    info.UserBb = "300305";
+                else
+                    info.UserBb = dr["BB"].ToString();
+
+                if (dr["BC"] == null || dr["BC"] == DBNull.Value)
+                {
+                    info.UserRz = "1";
+                    info.UserBc = "300205";
+                }
+                else
+                {
+                    info.UserRz = dr["BC"].ToString();
+                    info.UserBc = this.GetCurrBc(dr["BC"].ToString());
+                }
+
+                return info;
+            }
+            catch (Exception ex)
+            {
+                throw ex;
+            }
+        }
+        private string GetNoNullStr(object obj)
+        {
+            if (obj == null || obj == DBNull.Value)
+            {
+                return "";
+            }
+            return obj.ToString();
+        }
+
+
+        #region "	登录退出记录	"
+        private void RecodeLoginInfo(string vLoginID, string vUserName, string vUSERHOSTNAME,
+          string vUSERIPADRESS, string vIsLogin)
+        {
+            OracleParameter[] param = new OracleParameter[5];
+            object[] values = new object[5];
+            ArrayList outvalues = new ArrayList();
+
+            param[0] = new System.Data.OracleClient.OracleParameter();
+            param[0].ParameterName = "vLoginID";
+            param[0].DbType = System.Data.DbType.String;
+            param[0].Size = 20;
+
+            param[1] = new System.Data.OracleClient.OracleParameter();
+            param[1].ParameterName = "vUserName";
+            param[1].DbType = System.Data.DbType.String;
+            param[1].Size = 20;
+
+            param[2] = new System.Data.OracleClient.OracleParameter();
+            param[2].ParameterName = "vUSERHOSTNAME";
+            param[2].DbType = System.Data.DbType.String;
+            param[2].Size = 100;
+
+            param[3] = new System.Data.OracleClient.OracleParameter();
+            param[3].ParameterName = "vUSERIPADRESS";
+            param[3].DbType = System.Data.DbType.String;
+            param[3].Size = 20;
+
+            param[4] = new System.Data.OracleClient.OracleParameter();
+            param[4].ParameterName = "vIsLogin";
+            param[4].DbType = System.Data.DbType.String;
+            param[4].Size = 20;
+
+            values[0] = vLoginID;
+            values[1] = vUserName;
+            values[2] = vUSERHOSTNAME;
+            values[3] = vUSERIPADRESS;
+            values[4] = vIsLogin;
+
+            string strOut = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery("pub_useroperatemanager.pPub_Logininfo_Add", CommandType.StoredProcedure, param, values, ref outvalues, out strOut);
+
+            }
+            catch { }
+        }
+
+
+        public ReturnObject RecodeExitInfo(string vLoginID, string vUserName, string vUSERHOSTNAME,
+          string vUSERIPADRESS)
+        {
+            RecodeLoginInfo(vLoginID, vUserName, vUSERHOSTNAME, vUSERIPADRESS, "退出");
+
+            return new ReturnObject();
+        }
+
+        public ReturnObject RecodeOperateInfo(string vLoginID, string vUserName, string vUSERHOSTNAME,
+          string vUSERIPADRESS, string vOPERATETYPE, string vOPERATEOBJECT, string vREMARK)
+        {
+            OracleParameter[] param = new OracleParameter[7];
+            object[] values = new object[7];
+            ArrayList outvalues = new ArrayList();
+
+            param[0] = new System.Data.OracleClient.OracleParameter();
+            param[0].ParameterName = "vLoginID";
+            param[0].DbType = System.Data.DbType.String;
+            param[0].Size = 20;
+
+            param[1] = new System.Data.OracleClient.OracleParameter();
+            param[1].ParameterName = "vUserName";
+            param[1].DbType = System.Data.DbType.String;
+            param[1].Size = 20;
+
+            param[2] = new System.Data.OracleClient.OracleParameter();
+            param[2].ParameterName = "vUSERHOSTNAME";
+            param[2].DbType = System.Data.DbType.String;
+            param[2].Size = 100;
+
+            param[3] = new System.Data.OracleClient.OracleParameter();
+            param[3].ParameterName = "vUSERIPADRESS";
+            param[3].DbType = System.Data.DbType.String;
+            param[3].Size = 20;
+
+            param[4] = new System.Data.OracleClient.OracleParameter();
+            param[4].ParameterName = "vOPERATETYPE";
+            param[4].DbType = System.Data.DbType.String;
+            param[4].Size = 50;
+
+            param[5] = new System.Data.OracleClient.OracleParameter();
+            param[5].ParameterName = "vOPERATEOBJECT";
+            param[5].DbType = System.Data.DbType.String;
+            param[5].Size = 100;
+
+            param[6] = new System.Data.OracleClient.OracleParameter();
+            param[6].ParameterName = "vREMARK";
+            param[6].DbType = System.Data.DbType.String;
+            param[6].Size = 200;
+
+            values[0] = vLoginID;
+            values[1] = vUserName;
+            values[2] = vUSERHOSTNAME;
+            values[3] = vUSERIPADRESS;
+            values[4] = vOPERATETYPE;
+            values[5] = vOPERATEOBJECT;
+            values[6] = vREMARK;
+
+            string strOut = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery("pub_useroperatemanager.pPub_UserOperate_Add", CommandType.StoredProcedure, param, values, ref outvalues, out strOut);
+
+            }
+            catch { }
+
+            return new ReturnObject();
+        }
+
+        #endregion
+
+        #region "	班次、班别	"
+        private string GetCurrBc(string bc)
+        {
+            System.DateTime now = System.DateTime.Now;
+            switch (bc.Trim())
+            {
+                case "3":	//三班制
+                    //早
+                    if (now >= new DateTime(now.Year, now.Month, now.Day, 8, 0, 0) &&
+                      now < new DateTime(now.Year, now.Month, now.Day, 16, 0, 0))
+                        return "300201";
+                    //中
+                    if (now >= new DateTime(now.Year, now.Month, now.Day, 16, 0, 0) &&
+                      now <= new DateTime(now.Year, now.Month, now.Day, 23, 59, 59))
+                        return "300202";
+                    //晚				
+                    if (now >= new DateTime(now.Year, now.Month, now.Day, 0, 0, 0) &&
+                      now < new DateTime(now.Year, now.Month, now.Day, 8, 0, 0))
+                        return "300203";
+                    break;
+                case "2":	//两班制
+                    //早
+                    if (now >= new DateTime(now.Year, now.Month, now.Day, 8, 0, 0) &&
+                      now < new DateTime(now.Year, now.Month, now.Day, 20, 0, 0))
+                        return "300201";
+                    else
+                        return "300203";
+            }
+            return "300205";
+        }
+        public ReturnObject GetBz(string strWhere)
+        {
+            string sqlstr = string.Format("select ID_ BASECODE, NAME_ BASENAME from scm_base_info where SORT_CODE = '{0}' order by 1", strWhere);
+
+            string strOut = "";
+
+            try
+            {
+                DataSet ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+
+                return new ReturnObject(ds, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(new DataSet(), ex.Message + "\n" + strOut);
+            }
+        }
+
+        public ReturnObject SetBz(string userID, string Bc, string Bb)
+        {
+            string sqlstr = string.Format(" update UAM_USER set BC = '{0}', BB = '{1}' where USERID = '{2}' ",
+              Bc, Bb, userID);
+
+            string strOut = "";
+
+            try
+            {
+                int i = this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+
+                return new ReturnObject(i, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(new DataSet(), ex.Message + "\n" + strOut);
+            }
+        }
+        #endregion
+
+        private string PasswdSecurity(string pwd)
+        {
+            return pwd.ToUpper();
+        }
+        public ReturnObject GetServerList()
+        {
+            if (!File.Exists("MesServer.xml"))
+            {
+                return new ReturnObject(null, "未找到服务配置文件!");
+            }
+
+            DataSet ds = new DataSet();
+            ds.ReadXml("MesServer.xml");
+
+            if (ds == null || ds.Tables.Count == 0)
+                return new ReturnObject(null, "配置文件设置错误!");
+
+            ds.AcceptChanges();
+
+            lock (ServicesList)
+            {
+                foreach (DataRow dr in ds.Tables[0].Rows)
+                {
+                    string asmFile = dr["AssemblyName"].ToString() + ".dll";
+                    bool ExistServer = File.Exists(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), asmFile));
+                    string sn = dr["ServerName"].ToString();
+                    string url = dr["url"].ToString();
+                    DataRow[] drs = ServicesList.Select(string.Format("ServerName = '{0}'", sn));
+                    if (drs.GetLength(0) == 0 && ExistServer)
+                    {
+                        DataRow ndr = ServicesList.NewRow();
+                        ndr["ServerName"] = sn;
+                        ndr["URL"] = url;
+                        if (HTServiceKeys.ContainsKey(sn))
+                        {
+                            ServiceObject so = (ServiceObject)HTServiceKeys[sn];
+                            ndr["MD5_KEY"] = so.MD5_KEY;
+                            ndr["SHA256_KEY"] = so.SHA256_KEY;
+                            ServicesList.Rows.Add(ndr);
+                        }
+                    }
+                    else if (drs.GetLength(0) > 0 && !ExistServer)
+                    {
+                        foreach (DataRow cdr in drs)
+                        {
+                            cdr.Delete();
+                        }
+                    }
+                }
+                ServicesList.TableName = "ServiceList";
+                ServicesList.AcceptChanges();
+            }
+
+            DataTable dt_config = new DataTable("CONFIG");
+            dt_config.Columns.Add("NAME", typeof(string));
+            dt_config.Columns.Add("VALUE", typeof(object));
+            dt_config.Rows.Add("PriorityFactor", ServerConfig.PriorityFactor);
+
+            ds = new DataSet();
+            ds.Tables.Add(ServicesList.Copy());
+            ds.Tables.Add(dt_config);
+            ds.AcceptChanges();
+
+            return new ReturnObject(ds);
+        }
+
+        public ReturnObject CheckAlive(DateTime _dt)
+        {
+            return new ReturnObject((object)(new ArrayList() { ServerConfig.MAGIC_ID, _dt, ServerConfig.MasterServer }), 1314, "I'AM ALIVE");
+        }
+
+        public ReturnObject ControlIt(string ControlService)
+        {
+            try
+            {
+                UriBuilder ub = new UriBuilder(ControlService);
+                if (ub.Host == "127.0.0.1") return new ReturnObject(null, 0, "不接受本地主机IP");
+
+                if (!string.IsNullOrEmpty(ServerConfig.MasterServer))
+                {
+                    if (ServerConfig.MasterServer != ControlService) return new ReturnObject(ServerConfig.MasterServer, 1314, "已受控!");
+
+                    if (t_MasterConnector == null)
+                    {
+                        t_MasterConnector = new Thread(CheckMaster);
+                        t_MasterConnector.Start();
+                    }
+                }
+                else
+                {
+                    ServerConfig.MasterServer = ControlService;
+                    if (t_MasterConnector != null)
+                    {
+                        t_MasterConnector.Abort();
+                    }
+
+                    t_MasterConnector = new Thread(CheckMaster);
+                    t_MasterConnector.Start();
+                }
+                return new ReturnObject(ServerConfig.MasterServer, 1314, "控制成功!");
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(ServerConfig.MasterServer, 1, ex.Message);
+            }
+        }
+
+        ICommon MasterChecker = null;
+        private void CheckMaster()
+        {
+            int LostCommander = 0;
+            do
+            {
+                if (string.IsNullOrEmpty(ServerConfig.MasterServer)) Thread.CurrentThread.Abort();
+
+                if (MasterChecker == null)
+                {
+                    MasterChecker = (ICommon)Activator.GetObject(typeof(ICommon), ServerConfig.MasterServer);
+                }
+                DateTime dt = DateTime.Now;
+
+                CallingMessage par = new CallingMessage();
+                par.ServerName = ServerConfig.MasterServer;
+                par.ClassName = "Core.Mes.ServerCommon.UserInfoManager";
+                par.MethodName = "CheckAlive";
+                par.args = new object[] { dt };
+
+                par.ServerType = MesServerType.IComponentContainServer;
+                par.TransType = NetWorkTransType.Remoting;
+                par.visitType = VisitType.Method;
+
+                try
+                {
+
+                    ReturnObject rtn = MasterChecker.MethodHandler(par, new ValidateInfo());
+                    if (rtn.ErrCode == 1314 && rtn.RealObject != null && (DateTime)(((ArrayList)rtn.RealObject)[1]) == dt
+                        && (int)(((ArrayList)rtn.RealObject)[0]) != ServerConfig.MAGIC_ID)
+                    {
+                        LostCommander = 0;
+                    }
+                    else if (LostCommander >= 3)
+                    {
+                        ServerConfig.MasterServer = "";
+                        Thread.CurrentThread.Abort();
+                        break;
+                    }
+                    else
+                    {
+                        LostCommander += 1;
+                    }
+                }
+                catch
+                {
+                    if (LostCommander >= 3)
+                    {
+                        ServerConfig.MasterServer = "";
+                        break;
+                    }
+                    else
+                    {
+                        LostCommander += 1;
+                    }
+                }
+                Thread.Sleep(LostCommander == 0 ? 5000 : 1000);
+            } while (!string.IsNullOrEmpty(ServerConfig.MasterServer));
+        }
+
+        public ReturnObject GetServerConfig()
+        {
+            DataSet ds = new DataSet();
+            DataTable dt = new DataTable();
+
+            dt.Columns.AddRange(new DataColumn[] {  new DataColumn("KEY_NAME", typeof(string)), 
+                                                    new DataColumn("KEY_VALUE", typeof(string)) });
+            dt.TableName = "CONFIG";
+            dt.PrimaryKey = new DataColumn[] { dt.Columns["KEY_NAME"] };
+            dt.AcceptChanges();
+
+            NameValueCollection appSettings = ConfigurationManager.AppSettings;
+            IEnumerator appSettingsEnum = appSettings.Keys.GetEnumerator();
+
+            int i = 0;
+            while (appSettingsEnum.MoveNext())
+            {
+                string key = appSettings.Keys[i];
+                string value = appSettings[key];
+
+                dt.Rows.Add(new object[] { key, value });
+
+                i += 1;
+            }
+            dt.AcceptChanges();
+            if (dt.Rows.Count > 0)
+            {
+                ds.Tables.Add(dt);
+            }
+
+            return new ReturnObject((object)ds);
+        }
+
+        public ReturnObject ChangePasswd(string loginID, string passwd, string passwdNew)
+        {
+            string sqlstr = string.Format(" update UAM_AUTHORIZATION set passwd = '{2}' where loginid = '{0}' and passwd = '{1}' ",
+              loginID, passwd, passwdNew);
+
+            string strOut = "";
+
+            try
+            {
+                int i = this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+
+                return new ReturnObject(i, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(new DataSet(), ex.Message + "\n" + strOut);
+            }
+        }
+        #endregion
+
+        #region "	消息	"
+        public ReturnObject HeartBeat()
+        {
+            return new ReturnObject();
+        }
+
+        public ReturnObject GetUserMessage()
+        {
+            string sqlstr = "select MESSAGE, PROMULGATOR,EDITTIME, PRI_ from PUB_USERMESSAGE where ISVALID = '0' and	 > sysdate order by edittime desc ";
+
+            string strOut = "";
+
+            try
+            {
+                DataSet ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+
+                return new ReturnObject(ds, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(new DataSet(), ex.Message + "\n" + strOut);
+            }
+        }
+        public ReturnObject GetMessage(string strWhere)
+        {
+            string sqlstr = string.Format("select * from pub_message where GETFLAG <> '1' and SENDPERSONCODE = '{0}' ", strWhere);
+
+            string strOut = "";
+
+            try
+            {
+                DataSet ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+
+                return new ReturnObject(ds, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(new DataSet(), ex.Message + "\n" + strOut);
+            }
+        }
+
+        public ReturnObject SendMessage(string vSendPerson, string vSendPersonCode, string vInfo, string vGetPerson)
+        {
+            string strOut = "";
+
+            OracleParameter[] param = new OracleParameter[7];
+            object[] values = new object[7];
+            ArrayList outvalues = new ArrayList();
+            strOut = "";
+
+            param[0] = new OracleParameter();
+            param[0].ParameterName = "vID";
+            param[0].Direction = System.Data.ParameterDirection.Input;
+            param[0].DbType = System.Data.DbType.String;
+            param[0].Size = 20;
+
+            param[1] = new OracleParameter();
+            param[1].ParameterName = "vSendPerson";
+            param[1].Direction = System.Data.ParameterDirection.Input;
+            param[1].DbType = System.Data.DbType.String;
+            param[1].Size = 20;
+
+            param[2] = new OracleParameter();
+            param[2].ParameterName = "vSendPersonCode";
+            param[2].Direction = System.Data.ParameterDirection.Input;
+            param[2].DbType = System.Data.DbType.String;
+            param[2].Size = 20;
+
+            param[3] = new OracleParameter();
+            param[3].ParameterName = "vInfo";
+            param[3].Direction = System.Data.ParameterDirection.Input;
+            param[3].DbType = System.Data.DbType.String;
+            param[3].Size = 200;
+
+            param[4] = new OracleParameter();
+            param[4].ParameterName = "vGetPerson";
+            param[4].Direction = System.Data.ParameterDirection.Input;
+            param[4].DbType = System.Data.DbType.String;
+            param[4].Size = 20;
+
+            param[5] = new System.Data.OracleClient.OracleParameter();
+            param[5].ParameterName = "vRESULT";
+            param[5].Direction = System.Data.ParameterDirection.Output;
+            param[5].DbType = System.Data.DbType.Int16;
+
+            param[6] = new System.Data.OracleClient.OracleParameter();
+            param[6].ParameterName = "vMESSAGE";
+            param[6].Direction = System.Data.ParameterDirection.Output;
+            param[6].DbType = System.Data.DbType.String;
+            param[6].Size = 200;
+
+            values[0] = System.Guid.NewGuid().ToString();
+            values[1] = vSendPerson;
+            values[2] = vSendPersonCode;
+            values[3] = vInfo;
+            values[4] = vGetPerson;
+            values[5] = 0;
+            values[6] = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery("pub_MessageManager.pPub_Message_Send", CommandType.StoredProcedure, param, values, ref outvalues, out strOut);
+
+                return new ReturnObject(outvalues, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(-1, ex.Message + "\n" + strOut);
+            }
+        }
+        public ReturnObject AffirmMessage(string vID)
+        {
+            string strOut = "";
+
+            OracleParameter[] param = new OracleParameter[3];
+            object[] values = new object[3];
+            ArrayList outvalues = new ArrayList();
+            strOut = "";
+
+            param[0] = new OracleParameter();
+            param[0].ParameterName = "vID";
+            param[0].Direction = System.Data.ParameterDirection.Input;
+            param[0].DbType = System.Data.DbType.String;
+            param[0].Size = 20;
+
+            param[1] = new System.Data.OracleClient.OracleParameter();
+            param[1].ParameterName = "vRESULT";
+            param[1].Direction = System.Data.ParameterDirection.Output;
+            param[1].DbType = System.Data.DbType.Int16;
+
+            param[2] = new System.Data.OracleClient.OracleParameter();
+            param[2].ParameterName = "vMESSAGE";
+            param[2].Direction = System.Data.ParameterDirection.Output;
+            param[2].DbType = System.Data.DbType.String;
+            param[2].Size = 200;
+
+            values[0] = vID;
+            values[1] = 0;
+            values[2] = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery("pub_MessageManager.pPub_Message_Affirm", CommandType.StoredProcedure, param, values, ref outvalues, out strOut);
+
+                return new ReturnObject(outvalues, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(-1, ex.Message + "\n" + strOut);
+            }
+        }
+        #endregion
+
+        #region "	override	"
+        public override int maxValue
+        {
+            get
+            {
+                return 30;
+            }
+        }
+        public override int minValue
+        {
+            get
+            {
+                return 20;
+            }
+        }
+        #endregion
+
+        #region		权限设置
+        public ReturnObject selectPT_MenuInfo()
+        {
+            string sqlstr = string.Format("SELECT ID_,CAPTION,PARENTID,XH FROM {0}PT_MENUINFO ORDER BY PARENTID,XH,REMARK", sTableSpace);
+            string err = "";
+            DataSet dset = DBManager.ExecuteQuery(sqlstr, out err);
+            return new ReturnObject(dset, err);
+        }
+        public ReturnObject updatePT_MenuPos(DataTable dt)
+        {
+            try
+            {
+                string err = "";
+                bool success = DBManager.UpdateTable(dt, string.Format("SELECT ID_,CAPTION,PARENTID,XH FROM {0}PT_MENUINFO WHERE XH IS NOT NULL", sTableSpace), out err);
+                return new ReturnObject(null, err);
+            }
+            catch (Exception ee)
+            {
+                return new ReturnObject(null, ee.Message);
+            }
+        }
+
+        public ReturnObject GetPt_menuinfo(string strWhere)
+        {
+            string sqlstr = string.Format("SELECT * FROM {0}PT_MENUINFO WHERE 1=1 {1} ORDER BY CATEGORY, CAPTION", sTableSpace, strWhere);
+
+            string strOut = "";
+
+            try
+            {
+                DataSet ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+
+                return new ReturnObject(ds, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(new DataSet(), ex.Message + "\n" + strOut);
+            }
+        }
+        public ReturnObject InsertPt_menuinfo(string vkey, string vCategory, string vCaption, string vRemark, string vType)
+        {
+            string strOut = "";
+            DataSet ds = null;
+            string strID = "";
+            object obj = null;
+            int iCount = 0;
+
+            string sqlstr = string.Format("SELECT COUNT(1) FROM {0}PT_MENUINFO WHERE KEY_ = '{1}'", sTableSpace, vkey);
+            try
+            {
+                ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+            obj = ds.Tables[0].Rows[0][0];
+            if (obj == null || obj == DBNull.Value)
+            {
+                iCount = 0;
+            }
+            else
+            {
+                iCount = Convert.ToInt32(Convert.ToInt32(obj));
+            }
+            if (iCount > 0)
+            {
+                return new ReturnObject(null, "键值重复!请重新输入!");
+            }
+
+            sqlstr = string.Format("SELECT MAX(TO_NUMBER(ID_)) FROM {0}PT_MENUINFO ", sTableSpace);
+
+
+            try
+            {
+                ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+            obj = ds.Tables[0].Rows[0][0];
+            if (obj == null || obj == DBNull.Value)
+            {
+                strID = "0";
+            }
+            else
+            {
+                strID = Convert.ToString(Convert.ToInt32(obj) + 1);
+            }
+            sqlstr = string.Format("INSERT INTO {0}PT_MENUINFO (ID_, KEY_, CATEGORY, CAPTION, REMARK, TYPE) "
+                + " VALUES "
+                + " ('{1}', '{2}', '{3}', '{4}', '{5}', '{6}') ", sTableSpace, strID, vkey, vCategory, vCaption, vRemark, vType);
+
+            strOut = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+
+                return new ReturnObject(strID, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+        }
+        public ReturnObject UpdatePt_menuinfo(string vID, string vkey, string vCategory, string vCaption, string vRemark, string vType)
+        {
+            string sqlstr = string.Format("UPDATE {0}PT_MENUINFO SET KEY_ = '{1}', CATEGORY = '{2}', "
+                  + " CAPTION = '{3}', REMARK = '{4}', TYPE='{5}' WHERE ID_ = '{6}'  ",
+               sTableSpace, vkey, vCategory, vCaption, vRemark, vType, vID);
+
+            string strOut = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+
+                return new ReturnObject(null, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+        }
+        public ReturnObject DeletePt_menuinfo(string vID)
+        {
+            string sqlstr = string.Format("SELECT COUNT(1) FROM {0}PT_USERMENUINFO WHERE MENUID = '{1}' ", sTableSpace, vID);
+            string strOut = "";
+            try
+            {
+                DataSet dset = DBManager.ExecuteQuery(sqlstr, out strOut);
+                if (int.Parse(dset.Tables[0].Rows[0][0].ToString()) > 0)
+                    return new ReturnObject(null, "该菜单已被配置到角色菜单中去,请先在角色菜单中删除!");
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+
+            sqlstr = string.Format("SELECT COUNT(1) FROM {0}PT_MENUINFO WHERE PARENTID = '{1}' ", sTableSpace, vID);
+            strOut = "";
+            try
+            {
+                DataSet dset = DBManager.ExecuteQuery(sqlstr, out strOut);
+                if (int.Parse(dset.Tables[0].Rows[0][0].ToString()) > 0)
+                    return new ReturnObject(null, "该菜单其下还有子菜单,不可直接删除!");
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+
+            sqlstr = string.Format("DELETE {0}PT_MENUINFO WHERE ID_ = '{1}' ", sTableSpace, vID);
+            strOut = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+            sqlstr = string.Format("DELETE {0}PT_USERMENUINFO WHERE MENUID = '{1}' ", sTableSpace, vID);
+
+            strOut = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+                return new ReturnObject(null, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+        }
+        public ReturnObject PlastPt_menuinfo(string oldRole, string newRole)
+        {
+            string sqlstr = string.Format("DELETE {0}PT_USERMENUINFO WHERE ROLEID = '{1}' ", sTableSpace, newRole);
+
+            string strOut = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+
+            sqlstr = string.Format("SELECT MAX(TO_NUMBER(ID_)) FROM {0}PT_USERMENUINFO ", sTableSpace);
+            int iCount = 0;
+            DataSet ds = null;
+
+            try
+            {
+                ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+            object obj = ds.Tables[0].Rows[0][0];
+            if (obj == null || obj == DBNull.Value)
+            {
+                iCount = 0;
+            }
+            else
+            {
+                iCount = Convert.ToInt32(obj);
+            }
+            sqlstr = string.Format("SELECT * FROM {0}PT_USERMENUINFO WHERE ROLEID = '{1}'", sTableSpace, oldRole);
+            try
+            {
+                ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
+            {
+                iCount = iCount + 1;
+                sqlstr = string.Format("INSERT INTO {0}PT_USERMENUINFO (ID_, ROLEID, MENUID, SETINFO) "
+                    + " VALUES "
+                    + " ('{1}', '{2}', '{3}', '{4}' ) ", sTableSpace, Convert.ToString(iCount),
+                    newRole, ds.Tables[0].Rows[i]["MENUID"].ToString(),
+                    ds.Tables[0].Rows[i]["SETINFO"].ToString());
+
+                strOut = "";
+
+                try
+                {
+                    this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+                }
+                catch (Exception ex)
+                {
+                    return new ReturnObject(null, ex.Message + "\n" + strOut);
+                }
+            }
+            return new ReturnObject(null);
+        }
+        public ReturnObject SavePt_usermenuinfo(string vRole, ArrayList arMenu, ArrayList arSet)
+        {
+            string sqlstr = string.Format("DELETE {0}PT_USERMENUINFO WHERE ROLEID = '{1}' ", sTableSpace, vRole);
+
+            string strOut = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+
+            sqlstr = string.Format("SELECT MAX(TO_NUMBER(ID_)) FROM {0}PT_USERMENUINFO ", sTableSpace);
+            int iCount = 0;
+            DataSet ds = null;
+
+            try
+            {
+                ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+            object obj = ds.Tables[0].Rows[0][0];
+            if (obj == null || obj == DBNull.Value)
+            {
+                iCount = 0;
+            }
+            else
+            {
+                iCount = Convert.ToInt32(obj);
+            }
+
+            for (int i = 0; i < arMenu.Count; i++)
+            {
+                iCount = iCount + 1;
+                sqlstr = string.Format("INSERT INTO {0}PT_USERMENUINFO (ID_, ROLEID, MENUID, SETINFO) "
+                    + " VALUES "
+                    + " ('{1}', '{2}', '{3}', '{4}' ) ", sTableSpace, Convert.ToString(iCount),
+                    vRole, arMenu[i].ToString(), arSet[i].ToString());
+
+                strOut = "";
+
+                try
+                {
+                    this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+                }
+                catch (Exception ex)
+                {
+                    return new ReturnObject(null, ex.Message + "\n" + strOut);
+                }
+            }
+            return new ReturnObject(null, "");
+        }
+
+        public ReturnObject GetUserRolePairs()
+        {
+            try
+            {
+                string err = "";
+                string sql = "SELECT U.LOGINID, U.ROLEID FROM UAM_AUTHORIZATION U ORDER BY U.LOGINID";
+                DataSet ds = this.DBManager.ExecuteQuery(sql, out err);
+                if (ds != null && ds.Tables[0].Rows.Count > 0)
+                {
+                    return new ReturnObject(ds);
+                }
+                return new ReturnObject(null, err);
+            }
+            catch (System.Exception ex)
+            {
+                return new ReturnObject(null, ex.ToString());
+            }
+        }
+
+        public ReturnObject GetRoleMenuPairs(string RoleID)
+        {
+            try
+            {
+                if (RoleID.Trim() == "") return new ReturnObject(null, "");
+
+                string err = "";
+                string sql = string.Format(@"SELECT T.ROLEID, T.MENUID, T.SETINFO, M.KEY_, M.CATEGORY, M.CAPTION, M.REMARK
+                                 FROM   {0}PT_USERMENUINFO T
+                                 LEFT   JOIN {0}PT_MENUINFO M
+                                   ON   T.MENUID = M.ID_
+                                 Where T.ROLEID = '{1}'", sTableSpace, RoleID.Trim());
+
+                DataSet ds = this.DBManager.ExecuteQuery(sql, out err);
+                if (ds != null && ds.Tables[0].Rows.Count > 0)
+                {
+                    return new ReturnObject(ds);
+                }
+                return new ReturnObject(null, err);
+            }
+            catch (System.Exception ex)
+            {
+                return new ReturnObject(null, ex.ToString());
+            }
+        }
+
+        public ReturnObject GetUser_Uam_Role(string DptID)
+        {
+            try
+            {
+                string err = "";
+                string sql = string.Format("SELECT ROLEID, ROLENAME FROM {0}UAM_ROLE WHERE DEPARTMENTID IN({1}) ORDER BY ROLENAME ", sTableSpace, DptID);
+                DataSet ds = this.DBManager.ExecuteQuery(sql, out err);
+                if (ds != null && ds.Tables[0].Rows.Count > 0)
+                {
+                    return new ReturnObject(ds);
+                }
+                return new ReturnObject(null, err);
+            }
+            catch (System.Exception ex)
+            {
+                return new ReturnObject(null, ex.ToString());
+            }
+        }
+
+        public ReturnObject GetUam_role()
+        {
+            string sqlstr = "SELECT ROLEID, ROLENAME FROM UAM_ROLE ORDER BY ROLENAME ";
+
+            string strOut = "";
+
+            try
+            {
+                DataSet ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+                if (ds != null && ds.Tables[0].Rows.Count > 0)
+                {
+                    return new ReturnObject(ds, strOut);
+                }
+                else
+                {
+                    return new ReturnObject(null, strOut);
+                }
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+        }
+
+        public ReturnObject GetPurviewTree(string strWhere)
+        {
+            string sqlstr = string.Format("SELECT ID_, MENUID, (SELECT CAPTION FROM {0}PT_MENUINFO WHERE ID_ = MENUID) MENUNAME, "
+                  + " SETINFO FROM {0}PT_USERMENUINFO WHERE 1=1 {1} ORDER BY SETINFO ", sTableSpace, strWhere);
+
+            string strOut = "";
+
+            try
+            {
+                DataSet ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+
+                return new ReturnObject(ds, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(new DataSet(), ex.Message + "\n" + strOut);
+            }
+        }
+
+        public ReturnObject GetBuildMenuInfo(string strWhere)
+        {
+            string sqlstr = string.Format("SELECT C.KEY_, C.CATEGORY, C.CAPTION, C.TYPE,B.SETINFO "
+                + " FROM {0}UAM_AUTHORIZATION A, {0}PT_USERMENUINFO B, {0}PT_MENUINFO C "
+                + " WHERE LOGINID = '{1}' AND A.ROLEID = B.ROLEID AND B.MENUID = C.ID_ ORDER BY B.SETINFO ", sTableSpace, strWhere);
+
+            string strOut = "";
+
+            try
+            {
+                DataSet ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+
+                return new ReturnObject(ds, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(new DataSet(), ex.Message + "\n" + strOut);
+            }
+        }
+
+        #endregion
+
+        #region "系统监听"
+
+        public ReturnObject MesSystemListener()
+        {
+            string sqlstr = "select sysdate from dual";
+
+            string strOut = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+
+                return new ReturnObject(null, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+        }
+
+
+        public ReturnObject RecordUserEvent(string vLoginID, string vUserName, string vUSERHOSTNAME,
+            string vUSERIPADRESS, string vOPerateType, string vControlTYPE, string vOPERATEOBJECT, string vFormName, string vClassName, string vREMARK)
+        {
+            try
+            {
+                DateTime dt = System.DateTime.Now;
+                CoreWriteLogFile.WriteLog(dt, vLoginID, vUserName, vUSERHOSTNAME, vUSERIPADRESS, vOPerateType, vControlTYPE, vOPERATEOBJECT, vFormName, vClassName, vREMARK);
+
+                Insert_UserEventsRec(dt, vLoginID, vUserName, vUSERHOSTNAME, vUSERIPADRESS, vOPerateType, vControlTYPE, vOPERATEOBJECT, vFormName, vClassName, vREMARK);
+            }
+            catch { }
+
+            return new ReturnObject();
+        }
+
+        public ReturnObject Insert_UserEventsRec(DateTime dt, string vLoginID, string vUserName, string vUSERHOSTNAME, string vUSERIPADRESS, string vOPerateType,
+            string vControlTYPE, string vOPERATEOBJECT, string vFormName, string vClassName, string vREMARK)
+        {
+            string sqlstr = string.Format("INSERT INTO {0}PUB_USEREVENTS (LOGINID, USERNAME, USERHOSTNAME, USERIPADRESS, OPERATETIME, OPERATETYPE, CONTROLTYPE, OPERATEOBJECT, FORMNAME, CLASSNAME, REMARK) "
+                 + " VALUES   ('{1}', '{2}', '{3}', '{4}', TO_TIMESTAMP('{5}', 'yyyy-mm-dd hh24:mi:ss.ff'), '{6}', '{7}', '{8}', '{9}', '{10}', '{11}') ",
+                 sTableSpace, vLoginID, vUserName, vUSERHOSTNAME, vUSERIPADRESS, dt.ToString("yyyy-MM-dd HH:mm:ss.fff"),
+                 vOPerateType, vControlTYPE, vOPERATEOBJECT, vFormName, vClassName, vREMARK);
+
+            string strOut = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+
+                return new ReturnObject(null, 0, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, -1, ex.Message + "\n" + strOut);
+            }
+        }
+        #endregion
+
+        public ReturnObject getDBSrvTime()
+        {
+            string strOut = "";
+            try
+            {
+                DataSet ds = this.DBManager.ExecuteQuery("SELECT SYSDATE FROM DUAL", out strOut);
+
+                return new ReturnObject(ds.Tables[0].Rows[0][0], strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+        }
+    }
+}

+ 244 - 0
.svn/pristine/09/099c28f08dea94662f222b233a3e9751c99b2949.svn-base

@@ -0,0 +1,244 @@
+using System;
+using System.Data;
+using Core.Mes.ServerFrameWork;
+using System.Collections;
+using System.Xml;
+using System.IO;
+using System.Data.OracleClient;
+using Core.Mes.IBaseInterface;
+
+namespace Core.Mes.PurviewManager
+{
+  public class UAM_ROLE : IComponent
+  {
+    public UAM_ROLE() { }
+
+    private System.String _ROLEID;
+    private System.String _ROLENAME;
+    private System.String _MEMO;
+
+
+    public System.String ROLEID
+    {
+      get { return _ROLEID; }
+      set { _ROLEID = value; }
+    }
+
+    public System.String ROLENAME
+    {
+      get { return _ROLENAME; }
+      set { _ROLENAME = value; }
+    }
+
+    public System.String MEMO
+    {
+      get { return _MEMO; }
+      set { _MEMO = value; }
+    }
+
+
+    public ReturnObject SelectUAM_ROLE(string strWhere)
+    {
+      string sqlstr = "SELECT ROLEID"
+         + ", ROLENAME"
+         + ", MEMO"
+         + ", DEPARTMENTID"
+         + " FROM CXUSER.UAM_ROLE " + strWhere;
+      string err = "";
+      DataSet ds = DBManager.ExecuteQuery(sqlstr, out err);
+      if (err == "") err = sqlstr;
+      return new ReturnObject(ds, err);
+    }
+
+    public ReturnObject SelectAndCopy(string strWhere)
+    {
+      string sqlstr = "SELECT ROLEID"
+         + ", ROLENAME"
+         + ", MEMO"
+         + " FROM CXUSER.UAM_ROLE " + strWhere;
+      string err = "";
+      DataSet ds = DBManager.ExecuteQuery(sqlstr, out err);
+      if (err == "" && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
+      {
+        DataRow dr = ds.Tables[0].Rows[0];
+        Type type = this.GetType();
+        foreach (System.Reflection.PropertyInfo pro in type.GetProperties())
+        {
+          if (pro.GetType().ToString() == "System.Single")
+          {
+            pro.SetValue(this, (Single)dr[pro.Name], null);
+            continue;
+          }
+          pro.SetValue(this, dr[pro.Name], null);
+        }
+      }
+      if (err == "") err = sqlstr;
+      return new ReturnObject(ds, err);
+    }
+
+    public ReturnObject InsertUAM_ROLE(ArrayList ar)
+    {
+      string sqlstr = "INSERT INTO CXUSER.UAM_ROLE"
+        + " (ROLEID"
+        + ", ROLENAME"
+        + ", MEMO"
+        + ", DEPARTMENTID"
+        + ") VALUES ('" + ar[0]
+        + "', '" + ar[1]
+        + "', '" + ar[2]
+        + "', '" + ar[3] + "')";
+      string err = "";
+      int i = DBManager.ExecuteNonQuery(sqlstr, out err);
+      return new ReturnObject(i, err);
+    }
+
+    public ReturnObject UpdateUAM_ROLE(ArrayList ar)
+    {
+      string sqlstr = "UPDATE CXUSER.UAM_ROLE set "
+        //+ "ROLEID = '" + ar[0]
+        + " ROLENAME = '" + ar[1]
+        + "', MEMO = '" + ar[2]
+        + "', DEPARTMENTID = '" + ar[3]
+        + "' WHERE ROLEID = '" + ar[0] + "'";
+
+      string err = "";
+      int i = DBManager.ExecuteNonQuery(sqlstr, out err);
+      return new ReturnObject(i, err);
+    }
+
+    public ReturnObject DeleteUAM_ROLE(string sRoleID)
+    {
+      string err = "";
+
+      Guid transGuid = DBManager.BeginTransaction(out err);
+      try
+      {
+        if (err == "")
+        {
+          string sqlstr = "DELETE FROM CXUSER.PT_USERMENUINFO WHERE ROLEID='" + sRoleID + "'";
+          DBManager.ExecuteNonQuery(sqlstr, transGuid, out err);
+          if (err == "")
+          {
+            sqlstr = "DELETE FROM CXUSER.UAM_AUTHORIZATION WHERE ROLEID='" + sRoleID + "'";
+            DBManager.ExecuteNonQuery(sqlstr, transGuid, out err);
+            if (err == "")
+            {
+
+              sqlstr = "DELETE FROM CXUSER.UAM_ROLE WHERE ROLEID='" + sRoleID + "'";
+              DBManager.ExecuteNonQuery(sqlstr, transGuid, out err);
+              bool succ = DBManager.Commit(transGuid, out err);
+              if (succ)
+                return new ReturnObject(1, "");
+              else
+                return new ReturnObject(0, err);
+            }
+            else
+            {
+              DBManager.Rollback(transGuid);
+              return new ReturnObject(0, err);
+            }
+          }
+          else
+          {
+            DBManager.Rollback(transGuid);
+            return new ReturnObject(0, err);
+          }
+        }
+        else
+        {
+          return new ReturnObject(0, err);
+        }
+      }
+      catch (Exception ee)
+      {
+        DBManager.Rollback(transGuid);
+        return new ReturnObject(0, ee.Message);
+      }
+    }
+
+    public ReturnObject UpdateDataSet(DataSet ds, string sqlstr)
+    {
+      string err = "";
+      bool flag = DBManager.UpdateTable(ds.Tables[0], sqlstr, out err);
+      return new ReturnObject(flag, err);
+    }
+
+    public void Copy(UAM_ROLE par)
+    {
+      ROLEID = par.ROLEID;
+      ROLENAME = par.ROLENAME;
+      MEMO = par.MEMO;
+    }
+
+    public ReturnObject CommitImportData(System.Data.DataTable ImportData)
+    {
+      try
+      {
+        string err = "";
+        this.DBManager.UpdateTable(ImportData, "SELECT * FROM CXUSER.PT_MENUINFO_IMP", out err);
+        if (err.Length == 0)
+        {
+          //´¦Àí²Ëµ¥ºÍȨÏÞ¹¦ÄÜ
+          this.DBManager.ExecuteNonQuery("IMP_MENU_ROLE", System.Data.CommandType.StoredProcedure, out err);
+          if (err.Length == 0)
+          {
+            return new ReturnObject("1");
+          }
+          else
+          {
+            return new ReturnObject("0", err);
+          }
+        }
+        else
+        {
+          return new ReturnObject("0", err);
+        }
+      }
+      catch (System.Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+        return new ReturnObject(null, ex.ToString());
+      }
+    }
+
+    public ReturnObject GetRoleData()
+    {
+      try
+      {
+        string err = "";
+        string sql = "SELECT * FROM CXUSER.UAM_ROLE";
+        DataSet ds = DBManager.ExecuteQuery(sql, out err);
+        if (ds != null && ds.Tables[0].Rows.Count > 0)
+        {
+          return new ReturnObject(ds);
+        }
+        return new ReturnObject(null, err);
+      }
+      catch (System.Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+        return new ReturnObject(null, ex.ToString());
+      }
+    }
+
+    public ReturnObject GetRoleDepteID(string RoleID)
+    {
+      try
+      {
+        string err = "";
+        string sql = "SELECT DEPARTMENTID FROM CXUSER.UAM_ROLE WHERE ROLEID='" + RoleID+"'";
+        DataSet ds = DBManager.ExecuteQuery(sql, out err);
+        if (ds != null && ds.Tables[0].Rows.Count > 0)
+        {
+          return new ReturnObject(ds.Tables[0].Rows[0][0].ToString());
+        }
+        return new ReturnObject(null, err);
+      }
+      catch (System.Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+        return new ReturnObject(null);
+      }
+    }
+  }
+}

+ 192 - 0
.svn/pristine/0a/0a050ce2d98c6d3d38347bb10d15f02123090424.svn-base

@@ -0,0 +1,192 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{6C9E9C77-8752-4C8C-9355-E35BC1382746}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Core.Mes.ClientPurviewManager</RootNamespace>
+    <AssemblyName>Core.Mes.ClientPurviewManager</AssemblyName>
+
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\CXMES\Client\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\..\..\Source_2005\Client\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Core.Mes.IBaseInterface, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\CXMES\Server\Core.Mes.IBaseInterface.dll</HintPath>
+    </Reference>
+    <Reference Include="Infragistics.Excel.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Shared.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.Misc.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinDataSource.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinEditors.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinGrid.ExcelExport.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinGrid.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinListBar.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinMaskedEdit.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinToolbars.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinTree.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="FrmAuthorization.cs">
+    </Compile>
+    <Compile Include="FrmDepartment.cs">
+    </Compile>
+    <Compile Include="FrmFunction.cs">
+    </Compile>
+    <Compile Include="FrmPurviewSet.cs">
+    </Compile>
+    <Compile Include="frmQuestionFeedback.cs">
+    </Compile>
+    <Compile Include="frmQuestionFeedback.Designer.cs">
+      <DependentUpon>frmQuestionFeedback.cs</DependentUpon>
+    </Compile>
+    <Compile Include="frmReply.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="frmReply.Designer.cs">
+      <DependentUpon>frmReply.cs</DependentUpon>
+    </Compile>
+    <Compile Include="FrmRole.cs">
+    </Compile>
+    <Compile Include="FrmSelUserID.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="FrmSetDepart.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="FrmUserManager.cs">
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="RightsComm.cs" />
+    <Compile Include="UcDepartment.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="UltraTree DropHightLight DrawFilter.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="FrmAuthorization.resx">
+      <DependentUpon>FrmAuthorization.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FrmDepartment.resx">
+      <DependentUpon>FrmDepartment.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FrmFunction.resx">
+      <DependentUpon>FrmFunction.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FrmPurviewSet.resx">
+      <DependentUpon>FrmPurviewSet.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="frmQuestionFeedback.resx">
+      <SubType>Designer</SubType>
+      <DependentUpon>frmQuestionFeedback.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="frmReply.resx">
+      <SubType>Designer</SubType>
+      <DependentUpon>frmReply.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FrmRole.resx">
+      <DependentUpon>FrmRole.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FrmSelUserID.resx">
+      <DependentUpon>FrmSelUserID.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FrmSetDepart.resx">
+      <DependentUpon>FrmSetDepart.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FrmUserManager.resx">
+      <DependentUpon>FrmUserManager.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\licenses.licx" />
+    <EmbeddedResource Include="UcDepartment.resx">
+      <DependentUpon>UcDepartment.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="ClassDiagram1.cd" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 15 - 0
.svn/pristine/0a/0a89627e85234f1299a6a81fae81ad51f69bca01.svn-base

@@ -0,0 +1,15 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ProjectView>ProjectFiles</ProjectView>
+    <ReferencePath>E:\code\Server\</ReferencePath>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <StartAction>Program</StartAction>
+    <StartProgram>E:\Code\SERVER\Core.Mes.ServerManager.exe</StartProgram>
+    <StartArguments>log</StartArguments>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <StartAction>Program</StartAction>
+    <StartProgram>E:\code\Server\Core.Mes.ServerManager.exe</StartProgram>
+  </PropertyGroup>
+</Project>

+ 21 - 0
.svn/pristine/0a/0ae5ce4a36f9c66403d022db40e5484bdc561fe8.svn-base

@@ -0,0 +1,21 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ProjectView>ProjectFiles</ProjectView>
+    <ReferencePath>F:\MyWork\CXMES\Server\</ReferencePath>
+    <PublishUrlHistory>http://localhost/Core.Mes.ServerManager/|publish\</PublishUrlHistory>
+    <InstallUrlHistory>
+    </InstallUrlHistory>
+    <SupportUrlHistory>
+    </SupportUrlHistory>
+    <UpdateUrlHistory>
+    </UpdateUrlHistory>
+    <BootstrapperUrlHistory>
+    </BootstrapperUrlHistory>
+    <FallbackCulture>zh-CN</FallbackCulture>
+    <VerifyUploadedFiles>false</VerifyUploadedFiles>
+    <ApplicationRevision>0</ApplicationRevision>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <StartAction>Project</StartAction>
+  </PropertyGroup>
+</Project>

+ 78 - 0
.svn/pristine/0c/0c1efad60be5367b8d517c4cf871036dade2e966.svn-base

@@ -0,0 +1,78 @@
+using System;
+using System.Collections;
+
+namespace Core.Mes.ServerFrameWork
+{
+	/// <summary>
+	/// ClsComponentBase 的摘要说明。
+	/// </summary>
+	
+	/// <summary>
+	/// 业务服务组件的统一接口,
+	/// 只有实现该接口才能在服务端自动加载并公开给客户端调用,
+	/// 如属服务端内部处理,不用公开给客户端的类,则无需实现本接口。
+	/// </summary>
+	public class IComponent :  IServerBase
+	{
+		public IComponent() {}
+		
+		/// <summary>
+		/// 最大副本数,指该类在组件容器池中存在的最大副本数。
+		/// 即在服务运行过程中,由于用户并发调用而可以创建的该类的最大实例数量。
+		/// 当并发请求量超过该数量则需要排队等候。
+		/// </summary>
+		/// <returns>大于或等于最小副本数的整数</returns>
+		public virtual int maxValue
+		{
+			get {return 1;}
+		}
+
+		/// <summary>
+		/// 最小副本数,指在组件容器池中存在的最小副本数。
+		/// 即在服务启动时自动加载的该类的实例数量,
+		/// 和在运行过程中始终保留的最小实例数量。
+		/// 默认为1。
+		/// </summary>
+		/// <returns>大于零的整数</returns>
+		public virtual int minValue
+		{
+			get {return 1;}
+		}
+
+		public virtual string Description
+		{
+			get
+			{
+				return "业务组件";;
+			}
+		}
+		public string DBName = "MesDB";
+
+		private Hashtable _dbManagerList = null;		
+		public Hashtable DBManagerList
+		{
+			get
+			{
+				return _dbManagerList;
+			}
+			set
+			{
+				_dbManagerList = value;
+			}
+		}
+		private STMes.DBManager _dbManager;
+		public STMes.DBManager DBManager
+		{
+			set {_dbManager = value;}
+			get 
+			{
+				if (_dbManager == null && DBManagerList.Contains(DBName))
+					_dbManager = DBManagerList[DBName] as STMes.DBManager;
+				
+				return _dbManager;
+			}
+		}
+		
+		public virtual void Dispose(){}
+	}
+}

+ 66 - 0
.svn/pristine/0c/0ce943ea0400ff450f0c1aac0d96827e55dd2bd3.svn-base

@@ -0,0 +1,66 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.50727</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{6A96B64B-879F-463B-9360-ED5B7AFAAAE5}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Core.Mes.ServerCommon</RootNamespace>
+    <AssemblyName>Core.Mes.ServerCommon</AssemblyName>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>D:\Code\SERVER\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\Output\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Core.Mes.IBaseInterface, Version=1.0.2741.16142, Culture=neutral">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\CXMES\Client\Core.Mes.IBaseInterface.dll</HintPath>
+    </Reference>
+    <Reference Include="DBManager, Version=1.0.6257.35782, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Data.OracleClient" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="UserInfoManager.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Core.Mes.ServerFrameWork\Core.Mes.ServerFrameWork.csproj">
+      <Project>{0CC17989-7E54-4098-AD94-DBB43279595D}</Project>
+      <Name>Core.Mes.ServerFrameWork</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

BIN
.svn/pristine/0d/0d7343d07bd947a9406cbc761d1c4772929e9904.svn-base


+ 10 - 0
.svn/pristine/0e/0efde00ff2e6b2243da037855e9e29776e56212b.svn-base

@@ -0,0 +1,10 @@
+""
+{
+"FILE_VERSION" = "9237"
+"ENLISTMENT_CHOICE" = "NEVER"
+"PROJECT_FILE_RELATIVE_PATH" = "relative:DBProxy"
+"NUMBER_OF_EXCLUDED_FILES" = "0"
+"ORIGINAL_PROJECT_FILE_PATH" = ""
+"NUMBER_OF_NESTED_PROJECTS" = "0"
+"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
+}

+ 4185 - 0
.svn/pristine/0f/0fd3b90416e339d00e9899ef9158cf0c62f4e35e.svn-base

@@ -0,0 +1,4185 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="timerAutoRun.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>118, 17</value>
+  </metadata>
+  <metadata name="timer_checkSem.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>244, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.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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
+        /0mZlP8v4uD/Df///wDu6foB///7AP3/6gP///AB+/33Avn89wL4//cA9//7APb9/wD2/P8A//n/AP/5
+        /wDu//oP7v/6C/rz/wD/8/8D//P/Cf/0/wX/+P8C7+72AvD5/wPm7v8F+vL/Av/t/wv///kQ//+SC6SK
+        45F0YO79Oy7b/xwU1/8OEOb/Awzw/wAH8v8ACPH/AA3y/wAN8f8ADfD/AAr4/wAG//8ABP//AAP//wQA
+        //8GAP//BgD//wkA//8NAP//DwD8/xAA+/8OAfn/CQL3/wQC+v8BAv7/AAL//wAD/v8AAv3/AAT8/wAF
+        /f8AEOr/BA3p/w4E+P85JvX/cGvf45udzWf//7YK////Avvz+QP9/+kN/f/qCfr4/QL3+P0C+P/3Avf/
+        +wL2/f8C9fz/Af/5/wH/+f8A7v/6CO/++gf68/8C/fP/A//z/wX/9P8C//j/AfX18AX6/uoI8v7kDOX6
+        6g31//8Zk5n6QGBY44lFMt7dJxnj/xgR4/8SEOr/Cg3x/wEH9f8DBff/BQn4/wcK+P8RC/b/FxDn/xcS
+        1/8ZFsv/HyLB/yMnxv8mK9X+KSzW/Swu1f0vL9T8MC/S/DAvzv4uLM7/JSXL/xoazv8PENP/DQ7g/wwO
+        7f8JC/P/BAT0/wYH+f8IAvr/CAfu/w0N8/8OB/f/Egbo/yMczv9HQdTYZmXriJCS/if///8J9/vsCfv/
+        5wj6+fsB+vr9Afj/9wH3//sB9v3/Afv6/wH++f8C/vn/APD++gD/6v8A+vP/BPrz/wL+9P8A+/vxAPz+
+        6wD//+wF/f/oCvb/4w7///EVlrW3SVBess0wK9r/FQj6/wgB//8FBP//Awf//wEF//8AAv//BQP//w4C
+        //8UAP3/JgT4/0Mh6v9jTN7/eWzI5WtrlpttcZiTcYO0jXKEs4h0iK+Ed4ythHaLqoRzh6qGc4OwjWNy
+        rJVkbcG3XWLV8UND3/8lIt//FQ7k/xAH7/8PAPf/FAL8/xEE+/8HAvH/CQbv/xAM+f8PAv3/GAnt/zg0
+        0/9dZbiypLLCJv///wTy/usA9vr9APn6/QD4//cA9//7APb9/wD9+f8B/fn/Av75/wD/9/8B/vb/Afrz
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/8
+        7wD//O8A//3wAAAAAAD///QB///0AAAAAAD29fEA9vXxAPb18QAAAAAAAAAAAAAAAAAAAAAAAAAAAPj+
+        /wH4/v8B+P7/Afj+/wH4/v8B+P7/Aff9/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAADv/P8A7/z/APD8/wDx/P8A8/39APX9/QD0/f8A9/3/APj+/wD4/v8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD4/v8A+P7/APj+/wD4/v8A+P7/APj+/wD3/f8AAAAAAAAAAAAAAAAAAAAAAAAA
+        AAD4/v8A+P7/APj+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7/z/Ae/8/wfw/P8G8fz/BfH9/wXy/f8D9P3/Avf9
+        /wL4/v8B+P7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA+P7/APj+/wH4/v8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO/8/wLv/P8K8Pz/CfH8
+        /wjx/f8I8v3/BPT9/wP3/f8C+P7/Avj+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj+/wD4/v8C+P7/AQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AADy/f8B8v3/BfP9/wT0/f8D9P3/A/X9/wL3/f8C+P3/Avj+/wD4/v8AAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4/v8A+P7/APj+
+        /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//CAADggIP//8IAAOHBn////g8A/kgD///Ev+HAAEP//8
+        QcAAAAQ///4AwAAgHj///AAAAAAQP//8AAAAABA///yAAAAAej8gAAAAAAAAACAAAAAAAAAAAAAAAAAA
+        AACOAAAAAAAB+AAAAAAAAAB4IAAA5/8AABwAAAACGAAAHAAAAAIAAAAADAAAIgAAAAAAAAAEAQAAAAAA
+        AAOB4MAAAAAAAABgAABIAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAgAAAAAAIiAH5gABA
+        AAgAAHAQAAAAAAAAYGQAAkAAAACB4AAAAACAAAxwAAAAAIAACHAAAAAA/AAIcAAAAAD8AAf4AAAAAf4A
+        AEAAAAAE/wAAAHAAARwyAAAAAAAAADIAAAAAAAQAMgAAAAAAAAD+wAAAAAAH//4AAAAAAAZ//gAAAAAA
+        An/+MQAAAAAD///wAAAAAAD///AAAPgAAP//+AAAAAAAf///8AAAAAB///+YAAAAAH///4AAAAAAf///
+        ggAAAAB///+AAAAAAA///8A4AAAAD///wBAAAAAP/////4AADz/////wIAAPP/////A8AJ//////8AAA
+        f//////wAAA///////Ej4D///////z/gP/////////////////AD//4/////8AP//j/////wA//+PygA
+        AABIAAAAkAAAAAEAIAAAAAAAAFEAABMLAAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///wA///8AT+//IC/f/1AAAA
+        AAAAAAAA+P7+Afn//QH3+v4B9/r+AvT8/wPz/f8E8f7/BvH//wnx//8J8f//CvL//gT//+0A///tAP//
+        7wD///EA///yAP//9AD///QAAAAAAAAAAAAAAAAAAAAAAPj/9wH4//cC9//3Avb/9wL2//cBAAAAAAAA
+        AAD///QB///0Av//8QL//+8E///uBv//7gX///ADAAAAAP/5/wD/+f8AAAAAAP34/wD9+P8C/fj/Av34
+        /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///wAP//8AD+//IA/f/1AAAAAAAAAAAA/f/1Af3/
+        9AL9//QC/f/1Avv+9gHz/f8A8f7/APH//wHx//8B8f//Af7/7gP//+0G///tBv//7wX///EE///yA///
+        9AL///QBAAAAAAAAAAAAAAAAAAAAAPj/9wD4//cA9//3APb/9wD2//cAAAAAAAAAAAD///QA///0AP//
+        8QD//+8A///uAP//7gD///AAAAAAAP/5/wD/+f8CAAAAAP34/wD9+P8A/fj/AP34/wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f/0Af3/9AL9//QC/f/0Av3/
+        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
+        GPp/Uxv2dk8d84FeM+6ig2C6yLGXN5mLfRD+8uQL+fLrAAAAAAAAAAAAAAAAAAAAAAD3/P8A9/z/Avf8
+        /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP9/wL0/v8E8/3/BvL8/wX1+fsC9/r1Af/3
+        3gH/8tEB9du1A+HAlAbAnGwKuJlsFL2geB3Bp4cvv6mOW7OfhYyulnmrsZVus7idd5zDqoVpybCPMLqi
+        gRm5oYMO8uPQBffu5QX+8eMBAAAAAAAAAAAAAAAAAAAAAAAAAAD3/P8A9/z/APf8/wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAO74/wTw+v8G8/7/BPX//wP4/f4C+P3+Aff+/wD2/v8A8/v/AP37
+        8QH+/vED/v7wBP787AX38+II6ePQDN7XwhHaz7cU49m4G+zlwh/07MoZ/PXcDP/+7AX///IB+/PpAPbt
+        5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAPb+/wH3/v8C9///Avj//wL4/v8C+P7/Avf+/wL2/v8C8/v/AvL4/wL0/P4D9f3+BPX9
+        /gT1/f4E9f39BPb9+gL4/fcC///hAf/+2wH/+9kB//ziAf//7gD///MAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj/
+        /gH4//4C9/7/AvX8/gL1+/4C9vz/AvX8/wLy+v8D8vr/A/b9/gL1/f8D8/z/BPH6/wTv+P8E8Pn/A/P7
+        /wL0/P8B8/n+APX7/wD2/P8A9vz/APX7/wD3/f8A+P7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/88AH//fAC/v3yAfT7
+        /gD4/PsA+f37APX8/wDy+v8A9fbzAfb28gH1/f8A8/z/APH6/wDv+P8A8Pj/APP7/wDy+f0B8/n+AvX7
+        /wL2/P8C9vz/AvX7/wL3/f8C+P7/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/87wD//fAA//3wAAAAAAD///QB///0AQAA
+        AAAAAAAA9vXxAPb18QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4/v8B+P7/Avj+/wL4/v8C+P7/Avj+
+        /wL4/v8C9/3/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///QA///0AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4/v8A+P7/APj+/wD4/v8A+P7/APj+/wD4/v8A9/3/AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAO/8/wDv/P8B8Pz/APH8/wDx/f8A8v3/APT9/wD1/f8A+P3/APj+/wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAPj+/wD4/v8A+P7/APj+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO/8
+        /wXv/P8K8Pz/CPH8/wfx/f8I8v3/BfT9/wP1/f8D+P3/Avj+/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj+
+        /wD4/v8C+P7/Avj+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO/8/wXv/P8K8Pz/CfH8
+        /wjx/f8I8v3/BfT9/wP1/f8D+P3/Avj+/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj+/wD4/v8C+P7/Avj+
+        /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP9/wLz/f8F9P3/A/X9/wL1/f8C9f3/Avf9
+        /wL4/f8C+P3/Afj+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj+/wD4/v8A+P7/APj+/wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD//wwAAPBgJD8AAAD//wwAAPBgJD8AAAD///wfAP8SAD8AAAD//xgfAOAAAD8A
+        AAD//xA4AAAAGD8AAAD//wAQAAAAGD8AAAD//wAAAAAAYD8AAAD//wAAAAAAYD8AAAD//wAAAAAAYD8A
+        AAD//wAAAAAAYD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAHAAAAAAAAAAAAAAAHAAAAAAAAAAYYAAABwAAAAAAAAAYYAAABwAAAAAAAAAIAAAAAAA
+        AAAAAAAAIAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAEAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAADAAAAAAAAAA
+        AACAADAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAABwAAAAAAAAAAAAAAAQMAAAIAAAAAAAAAAQ+AAAAAAAA
+        AACAAAEPAAAAAAAAAACAAAEPAAAAAAAAAAD8AAAPAAAAAAAAAAD8AAAPgAAAAAAAAAD+AAAAAAAAAAQA
+        AAD+AAAAAAAAAAQAAAARAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAARAAAAAAAAAAAA
+        AAD/MAAAAAAAHP8AAAD+AAAAAAAAHH8AAAD/CAAAAAAABP8AAAD/CAAAAAAAB/8AAAD/nAAAAAAAA/8A
+        AAD//AAAAAAAAf8AAAD//AAAAAAAAf8AAAD//gAAAAAAAP8AAAD///AAAAAAAP8AAAD///AAAAAAAH8A
+        AAD///AAAAAAAP8AAAD///AAAAAAAP8AAAD///AAAAAAAA8AAAD///AAAAAAAA8AAAD///gAAAAAAA8A
+        AAD///gCAAAAAA8AAAD/////AAAAHj8AAAD/////AAAAPj8AAAD/////AAAAf/8AAAD/////AAAB//8A
+        AAD/////AAAA//8AAAD/////AAAA//8AAAD/////Ez8A//8AAAD/////8/8A//8AAAD/////AD///H8A
+        AAD/////AD///D8AAAD/////AD///D8AAAD/////AD///D8AAAAoAAAAYAAAAMAAAAABACAAAAAAAACQ
+        AAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///wAv//8AT///AE/v/yA/3/
+        9AH9//QAAAAAAAAAAAD4/v8B+P7/Avj+/wD2+v8B9vr/Avb6/wLz/P8E8/z/BPL9/wXx/v8I8f//CfH/
+        /wrx//8K8f//CvH//wP//+0A///tAP//7gD///AA///xAP//8QD///MA///0AP//9AD///QAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD4//cB+P/3Avj/9wL3//cC9v/3Avb/9wL2//cAAAAAAAAAAAD///QA///0Av//
+        8wL///ED///wBP//7gb//+4G///vBf//8AT///ABAAAAAP/5/wD/+f8A//n/AAAAAAD9+P8A/fj/Av34
+        /wL9+P8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA///wAf//8AL///AC/v/yAf3/9AD9//QAAAAAAAAAAAD7//gB+//4Avz/9QH7/vcC+v34Avr9
+        +QL1/P0C8/z/AvL9/wLx/v8D8f//BPH//wTx//8E8f//BPr/8wT//+0E///tBP//7gT///AD///xAv//
+        8QL///MB///0Af//9AH///QAAAAAAAAAAAAAAAAAAAAAAAAAAAD4//cA+P/3Afj/9wH3//cB9v/3Afb/
+        9wH2//cAAAAAAAAAAAD///QA///0Af//8wH///EB///wAv//7gL//+4C///vAv//8AH///AAAAAAAP/5
+        /wD/+f8B//n/AAAAAAD9+P8A/fj/Af34/wH9+P8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///wAP//8AD///AA/v/yAP3/9AD9//QAAAAAAAAA
+        AAD9//QB/f/0Av3/9AL9//QC/f/0Av3/9AL///AA8/z/APL9/wDx/v8A8f//APH//wDx//8A5f//AP//
+        7QT//+0H///tBv//7gb///AF///xBP//8QT///MC///0Av//9AH///QAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAD4//cA+P/3APj/9wD3//cA9v/3APb5+gD28v8A+PP/AP/6/wD///QA///0AP/99wD//fUA///wAP//
+        7gD//vAA//7yAP/99AD/+/oA//n/AP/5/wH/+f8C//n/AP7/9QD8/u8A+/7tAPv+7QD7/u0AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/b/APf2
+        /wD49/8A+Pf/AAAAAAAAAAAAAAAAAP/5/wD9//QB/f/0Av3+9QL9/vUC/f/0Av3/9AL9//QAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA///tAP//7QT//+0F///tBf//7gX///AE///xA///8QP//vQC///1Av//
+        9AH///QAAAAAAAAAAAAAAAAA//j/AP/4/wD/+P8A//j/AP/4/wD/9/sA/vT3APbx/wD28f8B+PP/Af/7
+        /wD28/8A9/H/AP/5/wD/+f8A//j/AP/1/wD//P8A//r/AP/5/wD/+f8A//n/AP/5/wH/+f8C//n/AP7/
+        9QD8/+0B+//pAvv/6QL7/+kBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA9/b/APf2/wD49/8A+Pf/AAAAAAAAAAAAAAAAAP/5/wD9/vUA/vz3AP/4
+        /AL/+fsB/f/0AP3/9AD9//QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///tAP//7QH//+0B///tAf//
+        7gH///AB///xAf/99QH/+v0C//v8Af//9AD///QAAAAAAAAAAAAAAAAA//j/AP/4/wD/+P8A//j/AP/4
+        /wD/9/sA/vT3APbx/wH28f8G+PP/BP/6/wH28/8A/Pb/AP/5/wH/+f8B//j/AP/1/wD/+f8B//n/Av/5
+        /wL/+f8C//n/Af/5/wD/+f8A//n/AP7/9QH8/+0G+//pDPv/6Q37/+kGAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/b/Aff2/wH49/8B+Pf/AAAA
+        AAD9//QA/f/0AP/5/wH/9/8B9v/oAP/B/wD/i/8A+//zAP3/9AD9//QAAAAAAAAAAAD9+f8A/fn/AP34
+        /wD+9/8A+/j9APP/8QDy//AA6v/oAP/0/wH/8f8B/+3/Af/u/wH/8/8B//T/Af/v/wDs/v8A6vr/AOr4
+        /wDs9/8A4/j/AP/4/wH/9/8B//f/AP/4/wH/9/sB/vT3Afrz+gL48/8E+vT/A/r0/wL38P8C+e//Avzz
+        /wL/9/8B//f/Af/1/wL78P4G+vD+Bv/4/wL/+f8C//n/Af/5/wD/+f8A//n/AP7/9QL8/+0H+//pDvv/
+        6Q/7/+kIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA9/b/Aff2/wH49/8B+ff/APT67wDh9+EA///3AP/7/QH7/fMD9//sBfb/6wX3/+wD+//yAf3/
+        6wD4/fQAAAAAAPj3/wDu8/8A/fn/Af34/wH+9/8B+/j+Ae7+8wPt//ID7//0BPP9+AXy/foG8f37BvH9
+        /gbx/v8I8v7/B/L+/wbu/v8F6vr/Ber4/wTs9/8D7fj/A/f5/wL7+/8B+v3/Af/4/wH/9/sB/vT3Afz1
+        +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
+        1f8hIMP+PUS0+1NgsLhocdc6q7T1GeLv/wnq8/8B8fr/Afv//wAAAAAAAAAAAAAAAAAAAAAAAAAAAP35
+        /wD9+f8C/fn/Avz5/wH0+v8A//f/Av/3/wL+9v8B+vP/Afrz/wH4/P8B9/7/Avj+9QP5/+kL+//oDvn7
+        6gvu7fMI/fT7B+ni/xbV0f47tbH8dl5T8MUuJ+LvERLd/wYQ7v8EDvb/BAv4/wMH9v8BBvX/AQP3/wEB
+        +f8BAvj/BAb1/w0N8v8WFuf/HCHV/yUqv/xDSL7uZGnHxHp6031nWuM9SSrzJGVJ+CKLd/8iuav/I9/Q
+        /yL25v8d8ef/FN7i/wvK3P8Hzd7/B9Pk/wbW6P8G1+r/Btjr/wbW6f8G1ef/BtHh/wbO3f8H0uD/B8zW
+        /wy4v/8Un6X/Hn+B/yNlZvgmVVbtKlla6TV2fdZrbXS9slldq+tBP6T6Oiu0/jIYzv8lCuX/Ggfq/w8F
+        6v8HA+n/AwLr/wMC8f8DBfr/Agn8/wML+P8FCfX/Cg3l/xkd1vU2PNLWe4fpbdHl/Sbr9P8J8Pn/BPn/
+        /wEAAAAAAAAAAAAAAAAAAAAAAAAAAP35/wD9+f8A/fn/APb6/wH0+v8C//b/Av/2/wL/9v8B+PT9AP35
+        +ADx/v8B8P3/Afb++wP5/+kO+//oEfv+5wvw7PME9+n/Dvv1/yatquNia2jIxjwz0vgcEt7/BwXs/wAI
+        +/8ABfn/AALx/wAB7v8BCPj/Bwv//wYH//8AAf3/AADy/xEP8/8vL/P/T1bs/2hw3dl5gs+Tj5zCUr/Q
+        xyz//8cLAADzAGVJ9wCHdf4ARzf/AP///wj/7f8R//L/DP///wO7zP8Avc7/AMDR/wDE1v8Ax9n/AMjZ
+        /wDG2P8Aw9T/AMDP/wC/zf8Av83/AH2M/wA/SP8AXWL/AEA//wAAANYA////Av///wnO4NomnKq5SISM
+        tXeCgcq/cWLX9VM44f8vEOj/GQPn/xEE7f8MCvP/Bwz3/wAH9/8ABPb/AAT5/wAG//8BB///BQj1/w8R
+        2v8hJ7n/SVmq0W2DqGD///8F/f/5Bezt9QHt9f8A/fj/APr4/wAAAAAAAAAAAP35/wD9+f8A/fn/APT6
+        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
+        8AL///AE+P/3Afj/9wH4//cA+P/3AAAAAAAAAAAA//n/AP/5/wH/+f8AAAAAAPb8/wD2/P8B9f3/AfT9
+        /wH///wA///wAv///wOvoHYmpJl2bJWQdcN9emTOlX9ey8aTYc65g1DQm2Yv7odTGf9/SQ3/fUYH/39H
+        Bf+HTgn/jVQN/oJGAv+HSgP/kFEH/49OBv+KSQH/iUYA/4tHAf+PSwT/k0wG/5NLBv+RSgb/k0sI/5BF
+        Bf+PQgT/kEQE/5NHBP+XSQX/mUsE/5lMBP+YSwT/l0oD/5ZJAv+WSQL/lEkD/5RMBP+TTwb/kE4I/4pK
+        CP+JSw3/hkwQ/4BIEP6VXSn4xI1ay+ezfaqpeT7VglMY9YFKC/+RTQn/jUIB/5lLAP+dUQD+k04D/4hJ
+        Ev+ETS7/mmte0OrL0Gn/7fAk////Bv//+gD/+P4B//v+APjq9gH09fsC8f//BPH//wTy//4D8//9AvT+
+        /QD/9v8A//f/Af/3/wH/9/8AAAAAAP//8AH///AB+P/3APj/9wD4//cA+P/3AAAAAAAAAAAA//n/AP/5
+        /wD/+f8AAAAAAPX5+QD1+foA9Pz+APP9/wD///wA///pAPP55gGfjFsAmaOdG4WMfohja17jgnNY8cuU
+        Xc/AilDPtoNH2Kx6Pd2ebTDhi1sc+X1ODv96Swr/gFEO/3lHCP99SQf/hU8J/4lPCf+ITAT/iUkC/45H
+        Af+USQH/mUcC/5tFAf+dRgD/oUoB/5xHAv+ZRgL/m0cB/55JAf+hSwD/o0wA/6NMAP6iSwD/oUoA/6JL
+        AP+jTAD/oU4A/6FSAv6eUwX+lk8F/45LBf+LTg3/hU4R/3ZDC/94RhP/jl8t2rOMWLC4mmW8hWk06XhT
+        Fv+EUAn/ikkB/55QAP6nUgD+n0wA/5ZIAP+LRAX/llso4sSZdZDXtZcj////Av//+wD/9/0A//n+APjq
+        9gD19foA8v39APH//gDx//4A8//9APT+/QD/9v8A//f/AP/3/wD/9/8AAAAAAP//8AD///AAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPT18wD09fMA9PXzAPT28AD09vAA9/vvAPf7
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA7vj/AO74/wXv+f8G8/3/BPT//wT2//8D+P7/Avj9/gL4/v4B9/7/APb+
+        /wD2/v8A8fj/APz78gH9/fID/v/zBP7/8QT+/vAF/f7uBvz86wb6+uYJ+fjkCvj34Av6+NwP/PraFP36
+        1xf++dcV/vrdDf/85gj//+4E///yAv//8wD37+UA9u3kAPbt5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9Pz/APT8/wL1/f8D9/7/Avf/
+        /wL4//8C+P7/Avj+/wL4/v8C9/7/Avb+/wL1/f8C8fj/AvL4/gL1/P0D9f39BPX9/QT2/v0E9//+BPn/
+        /wT///8D////Av///wL///8C////Av//7wP//+UD///lAv//6QH//+8B///yAP//9AD37+UA9u3kAPbt
+        5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA+f//APn//wH5//8C+P//Avb9/wL2/f8C9vz/Avb8/wL3/f8C9f3/AvP7/wPy+v8D8/v/AvT7
+        /wL0/P8D9P3/BPP8/wTx+/8E8Pr/BPD6/wTx+v8C8vv/AvL7/wH//9cA/v7iAP793gD++90A/vvjAP38
+        7AD7/vUA+v36APj+/gD4/v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/75APv++QH7/vkC+v76Avb8/gH0+/4B9Pv+AfX7
+        /wH2/P8B9Pv/AfL6/wLx+f8D9fr7Avf7/AL1/f8C9P3/AvL7/wPw+f8D7/j/A+/4/wLx+f8C8/v/AfT7
+        /wHy+P0B8/n+AfX7/wH2/P8B9vz/AfX7/wH1+/8B9vz/Afj+/wH4/v8AAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//zvAP/8
+        7wH//PAC//3wAf/98QD0+/4A/v/1AP//9AD9/vYA9Pz/APL6/wD19fMA9vXxAfb18QH1/f8A9P3/APP8
+        /wDw+f8A7/j/AO/4/wDx+f8A8/v/APP5/QDz+f0C9Pr+AvX7/wL2/P8C9vz/Avb8/wL2/P8C9vz/Avj+
+        /wL4/v8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA//zuAP/87gD//O8A//3vAP/96wD0+/4A///0Af//9AH///QA9Pz/APL6
+        /wD+7tkA9vXwAPb08AD1/f8A9P3/APP8/wDw+f8A7/j/AO/4/wDx+f8A8/v/APf9/wD3/f8C9/3/Avj+
+        /wL4/v8C+P7/Avj+/wL4/v8C+P7/Avf9/wL3/f8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//zvAP/87wD//O8A//3wAP/9
+        8AAAAAAA///0AP//9AH///QAAAAAAAAAAAD29fEA9vXxAPb18QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAPj+/wD4/v8B+P7/Afj+/wH4/v8B+P7/Afj+/wH4/v8B+P7/Aff9/wH3/f8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA7/z/AO/8/wDv/P8A7/z/APH8/wDx/P8A8/3+APT9/AD0/f4A9P3/APX9/wD4/f8A+P7/APj+
+        /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj+/wD4/v8A+P7/APj+/wD4/v8A+P7/APj+
+        /wD4/v8A+P7/APf9/wD3/f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4/v8A+P7/APj+
+        /wD4/v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7/z/AO/8/wHv/P8B7/z/AfH8/wHx/P8B8fz/AfH9
+        /wHz/P8A9P3/APX9/wD4/f8A+P7/APj+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD4/v8A+P7/APj+/wD4/v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7/z/AO/8
+        /wbv/P8J7/z/CPH8/wfx/P8H8fz/B/H9/wbz/P8D9P3/A/X9/wP4/f8C+P7/Avj+/wEAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4/v8A+P7/Avj+/wL4/v8BAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA7/z/AO/8/wfv/P8L7/z/CvH8/wnx/P8I8fz/CfH9/wjz/P8D9P3/A/X9
+        /wT4/f8C+P7/Avj+/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAD4/v8B+P7/Avj+/wL4/v8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Pz/APD8/wXw/P8I8Pz/B/H8
+        /wby/P8G8vz/BvL9/wX0/f8D9f3/A/b9/wP4/f8C+P7/Afj+/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4/v8A+P7/Afj+/wH4/v8BAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA9P3/APT9/wP0/f8E9P3/BPX9/wL2/f8C9v3/Avb9/wL2/f8C9/3/Avj9/wL4/f8C+P3/APj+
+        /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4/v8A+P7/APj+
+        /wD4/v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///4GAAAB+AwAiH////4GAAA
+        A+AwAiH/////+A/gA////j//////+A/AA/8MwAH////4cA/AA8AAAAH////4cn/8B8AAAcH////4YB4A
+        AAAAAcH////8AB4AAAMAAeH////4AAAAAAAABgH////4AAAAAAAABgH////4AAAAAAAwBg/////4AAAA
+        AAAABgH////4AAAAAAAABgH////5gAAAAAAAf+H/CBAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAw8AAAAAAAAAAAB/hAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAPgGAAAAA8P
+        //AAAAP8AAAAAAAMDgAAAAB8AAAAAHgMD4AAAAB8AAAAAAAEAGAAAAAAAAAAAAAEAAAAAAAAB8AAAAOG
+        ABAOAAAAAAAAAAAIABAAAAAAAAAAAAAAABAAAAAAAAAAAAAHwB8B4AAAAAAAAAAAIAcAAAAAIAAAAAAA
+        AAEAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAwgAD4GAAAAAAAAAhwgAAwDgAAAgAAAAgwgABwAAAAAAAAAAggAACfxgAAAAAAAAAAAAAfABg
+        AAAAAAAAAAACeAcYAAAH4AABAAAACAcAAAACAAAAgAAAiB+AAAAAAAAAwAAA3//AAAAMAAAAwAAAAQfA
+        AAAAAAAAwAAAAQfCAAAAAAAA/4AAAAfF4AAAAAAA/4AAAAfwAAAAAAAA/8AAAP/wAQAAAAQf/8AAAAAA
+        AAAAAAAc/8AAAAAAAAAAAAAc//AAAAAB/AAAABB8DEAAAAAAAAAAACAEDEAAAAAAAAAAAAAEDEAAAAAA
+        AAAAAAAEDEAAAAAAAAAAAAAE//9AAAAAAAAAAf///8YAAAAAAAAAAeP//8AAAAAAAAAAAeP//8CAAAAA
+        AAAAAeP///CEAAAAAAAAAH///+GAAAAAAAAAAH///+PDAAAAAAAAAB/////AAAAAAAAAAB/////AQAAA
+        +gAAAB/////AAAAAEAAAAAf////wAAAAAAAAAAf/////+AAABMAQAA//////xgAAAAAAAAP/////xAAA
+        AAAAAAP/////wAAAAAAAAAP/////wHAAAAAAAA//////wGgAAAAAAAP/////wAAAAAAAAAA/////wAAA
+        AAAAAAA/////8AHgAAAAAAA/////8ACAAAAAAAg/////8ADAAAAAAEA////////+AAAAA/H////////A
+        AAAAA/H////////AP8ABz//////////AAAAAD//////////AAAAAP//////////AAAB////////////A
+        AAAAH//////////AAAAAH//////////BGP8AH///////////H/8AH//////////////////////////A
+        AP///+H////////AAP///+H////////AAP///+H////////AAP///+H////////AAP///+H/KAAAAIAA
+        AAAAAQAAAQAgAAAAAAAAAAEAEwsAABMLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///AB///wBP//8AT///AE/v/yA/3/9AL9//UBAAAAAAAA
+        AAAAAAAAAAAAAPj+/wH4/v8C+P7/AfX6/wD2+v8B9vr/Avb6/wL1+/8D8/z/BPP8/wTz/f8E8v7/BvH+
+        /wjx//8K8f//CvH//wrx//8K8f//CvH//wbv//8B///tAP//7QD//+4A///uAP//8AD///EA///xAP//
+        8gD///QA///0AP//9AD///QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj/9wD4//cB+P/3Avj/
+        9wL3//cC9v/3Avb/9wL2//cC9v/3Afb/9wAAAAAAAAAAAAAAAAD///QB///0Av//8wL///IC///xA///
+        8AT//+8F///uBv//7gb//+4G///vBf//8AP///AAAAAAAP/5/wD/+f8A//n/AP/5/wAAAAAAAAAAAP34
+        /wH9+P8C/fj/Av34/wL9+P8B/fj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
+        8AH///AC///wA///8AP+//IC/f/0Af3/9QAAAAAAAAAAAAAAAAAAAAAA+v78Afr++wL7//kB/P72Afn8
+        +gH4/PsC+Pz7Avb8/QL0/P8D8/z/A/P9/wPy/v8E8f7/BfH//wbx//8H8f//B/H//wfx//8H8//8Bfz/
+        8QL//+0C///tAv//7gL//+4C///wAf//8QH///EB///yAf//9AH///QB///0Af//9AAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA+P/3APj/9wH4//cB+P/3Aff/9wH2//cB9v/3Afb/9wH2//cB9v/3AAAA
+        AAAAAAAAAAAAAP//9AD///QB///zAf//8gH///EC///wA///7wT//+4E///uBP//7gT//+8D///wAv//
+        8AAAAAAA//n/AP/5/wD/+f8B//n/AAAAAAAAAAAA/fj/AP34/wH9+P8B/fj/Af34/wH9+P8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///wAP//8AD///AA///wAP7/8gD9//QA/f/1AAAA
+        AAAAAAAAAAAAAAAAAAD8//UB/P/1Av3/9QL9//QC/P/1Avz+9QL8/vUC+/72Avf9+wHz/P8A8/3/APL+
+        /wHx/v8B8f//AfH//wHx//8B8f//AfH//wH7//ID///tBf//7QX//+0F///uBf//7gX///AE///xBP//
+        8QT///ID///0Av//9AL///QC///0AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4//cA+P/3APj/
+        9wD4//cA9//3APb/9wD2//cA9v/3APb/9wD2//cAAAAAAAAAAAAAAAAA///0AP//9AD///MA///yAP//
+        8QD///AA///vAf//7gH//+4B///uAf//7wH///AA///wAAAAAAD/+f8A//n/Af/5/wL/+f8BAAAAAAAA
+        AAD9+P8A/fj/AP34/wD9+P8A/fj/AP34/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAD///AA///wAP//8AD///AA/v/yAP3/9AD9//UAAAAAAAAAAAAAAAAAAAAAAP3/9AH9//QC/f/0Av3/
+        9AL9//QC/f/0Av3/9AL+//MB///tAPP8/wDz/f8A8v7/APH+/wDx//8A8f//APH//wDx//8A8f//AP//
+        6wL//+0G///tB///7Qb//+4G///uBv//8AX///EE///xBP//8gP///MC///0Av//9AL///QBAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj/9wD4//cA+P/3APj/9wD3//cA9v/3APb/9wD2/vgA9vT9APbx
+        /wD48/8A/fj/AP/6/wD///QA///0AP/99gD//PgA//31AP//8AD//+8A///vAP/+8QD//fMA//30AP/8
+        9wD/+vwA//n/AP/5/wD/+f8B//n/Av/5/wH9//QA/f/zAPz+7gD7/uwA+/7sAPv+7AD7/uwA+/7sAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPf2/wD39v8A9/b/APj3/wD49/8A+Pf/AAAA
+        AAAAAAAAAAAAAP/5/wD/+f8A/f/0Af3/9AL9//QC/f71Av3/9AL9//QC/f/0Av3/9AH9//QAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///tAv//7QX//+0G///tBv//7gb//+4F///wBP//
+        8QT///EE///yA///9AL///UC///0Av//9AEAAAAAAAAAAAAAAAAAAAAAAAAAAP/4/wD/+P8A//j/AP/4
+        /wD/+P8A//j/AP/4/gD/9voA/vX3APbx/wD28f8A9vH/Afjz/wD9+P8A//v/APfz/wD48v8A//n/AP/5
+        /wD/+f8A//n/AP/3/wD/+f8A//n/AP/5/wD/+f8A//n/AP/5/wD/+f8A//n/AP/5/wH/+f8C//n/Af3/
+        9AD9//MA/P/sAfv/6QH7/+kB+//pAfv/6QD7/+kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA9/b/APf2/wD39v8A+Pf/APj3/wD49/8AAAAAAAAAAAAAAAAA//n/AP/5/wD9//IA/f/0Af77
+        +AL++vkC/vz3Af3/9AH9//QB/f/0Af3/9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAD//+0B///tAv//7QL//+0C///tAv//7gL//+8C///wAv//8AL//vUC//z6Av/8+QH///QB///zAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA//j/AP/4/wD/+P8A//j/AP/4/wD/+P8A//j+AP/2+gD+9fcA7O3/APbx
+        /wL28f8F+PP/A/34/wH///8A9/P/APjy/wD/+/8A//n/Af/5/wH/9/8A//f/AP///wD//v8B//z/Af/6
+        /wH/+f8B//n/Af/5/wH/+f8A//n/AP/5/wH/+f8A/f/0AP3/8wL8/+wF+//pCPv/6Qn7/+kI+//pBPv/
+        6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD39v8A9/b/APf2/wD49/8A+Pf/APj3
+        /wAAAAAA/f/0AP3/9AD/+P8A//n/AP/3/wAh/wAA//b/Af/2/gH/9v4B+//yAPz/8wD9//QA/f/0AAAA
+        AAAAAAAAAAAAAP35/wD9+f8A/fn/AP34/wD/9v8A/ff/APP98wDx//AA8f/wAOv/6gD/9f8A//b/AP/y
+        /wD/8P8A//D/AP/3/wH/+P8C//j/Af/1/wD/5v8A7f3/AOr6/wDp+f8A6/f/AO33/wDq+P8A//j/AP/4
+        /wD/9/8A//b/AP/4/wD/+P4A//b6AP719wD68/kA9vH/BPbx/wb48/8E/Pf/Avv2/wH38f8B+fD/Af32
+        /wH/+P8C//n/Af/4/wD/9/8A/vT/Afz0/wP89P8D/vf/Av/5/wL/+f8C//n/Af/5/wD/+f8A//n/AP/5
+        /wD9//QB/f/zA/z/7Aj7/+kN+//pD/v/6Q37/+kG+//pAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAPf2/wD39v8B9/b/Avj3/wH49/8B+Pf/AAAAAAD9//QA/f/0AP/4/wD/+f8B//f/AfT/
+        4wDi/8EA/9r/AMD/dAD7//IA/P/zAP3/9AD9//QAAAAAAAAAAAAAAAAA/fn/AP35/wD9+f8A/fj/AP/2
+        /wD99/8A8/7zAPH/8ADy//AA6//qAP/1/wH/9v8B//P/Af/w/wH/8f8B//L/Af/0/wH/9f8B//X/Af/q
+        /wDt/f8A6vr/AOn5/wDr9/8A7ff/AOn4/wD/+P8B//j/Af/3/wH/9v8A//j/Af/4/gL/9voC/vX3Avzz
+        9wL68/wD+fT/BPr1/wP79f8C9/L/Avfx/wP58P8D+/L/Av32/wL/+P8C//j/Af/3/wL98/8E+u/+B/rv
+        /gf89P8D//r/Av/5/wL/+f8B//n/AP/5/wD/+f8A//n/AP3/9AH9//MD/P/sCPv/6Q37/+kP+//pDvv/
+        6Qb7/+kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/b/APf2/wH39v8C+Pf/Afj3
+        /wHl/r0A9PvvAP///wD///cA//z8Af/7/AL6/fMD9//tBPb/6wT2/+sE9//tAvr/8QH7//IA+P30APj9
+        9AAAAAAA+Pf/APj3/wD//P8A/fn/AP35/wH9+P8B//b/Af33/wHx/fUB7f/yAu3/8gPv//QD8/33A/T9
+        +QTz/PoF8vz7BfL8/QXy/f4G8v3/BvP9/wb0/f8F8f7/BO39/wTq+v8E6fj/A+v3/wPs9/8C7fj/AvT4
+        /wL8+f8C+/v/Afr9/wH++f8B//f+Av/2+gL+9fcC/PT2Avz3+gL8+/wC+vv6Avj69wT2+vQG9vr0B/j5
+        9Af5+vMG+/zyBP398wT//PcD//n7A/70/gT67/4G+e7+Bvzz/gP/+/8B//n/Af/5/wH/+f8AAAAAAAAA
+        AAAAAAAA/f/0Af3/8wL8/+0G+//qCvv/6gz7/+oL+//qBfv/6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD39v8A9/b/APf2/wD49/8A+Pf/AOL/sgD0++8A/f/0AP3/9AH+//YC/f72Avj/
+        7gb3/+wL9v/rDPb/6wv3/+0H+v/xA/v/8wH4/fQA+P30AAAAAAD49/8A+Pf/AP35/wD9+f8B/fn/Av34
+        /wL/9v8C/ff/AvD99ATs//EI7P/xCe3/8gju//QI7v/2Ce7/+Avt//kM7f/7DO3//g3t//8P7v//Du//
+        /wzv//8M7f3/DOr6/wzp+P8K6/f/CO33/wft+P8H7/n/BPb7/wL3/v8C9v//Afn9/wH/9/4A//b6AP71
+        9wD89fcA+Pz5Aff+9wL3/vQE9v7wBvX+7Qr2/uwN9/7sDfn+7Av7/+wJ/f/tB///7gX//vED/vv3Avvz
+        /AL57v4B/PP+Af/7/wD/+f8A//n/AP/5/wAAAAAAAAAAAAAAAAD9//QA/f/zAPv/7wL7/+4F+//uBvv/
+        7gX7/+4C+//uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPn1/wD59f8A8//mAPX8
+        7wH0+e8B8/nvAfT77wH2/e8C+P/vBfn/7wX6/+8E+v/tBvn/7An4/+wK+f/rCf7/6wX//+cBAAD/AKPE
+        /wC1y/8Arr//AKSy/wCRnf8AfIX/AFlg/wA4O/wAIiT0ABgY8gAAAPQA//8AAP//3gf//98J///fCP//
+        4Qj//+YJ///tCv//8wv///kL///9DP///w3///8L////Cf///wj///8I////CP///wX///8B////AP//
+        /wEAAPwAWmT/ADpI/wAAAP8ARWD/AKa6/wDD0/8Azd3/ANHg/wD//+8B9f/zA/T/8Af0/+4K9v/sDPf/
+        6wz4/+sL+v/rCvv/6wn9/+sJ/v/qCfz+6gf6/OoF+fzpAvb74gD/9v8A//v/AP/5/wD/+f8A//j/AP/4
+        /wD/+P8A/vn/AP37+wD9/fcA+//yAfv/8gP7//IE+//yBPv/8gL7//IAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA+vT/APr0/wD3+vQB9vvyAvX58QLz+e8C9PvvA/b97wX3/+4I9//vCPf/
+        8Af3//AG+P/xBvn/8QX3//IF8f31Ber5+ATk8/kE2ej7A8HU/gOuv/8EpbP/BqSt/wigpv8LlJf/DIeH
+        /Qx6efkMamb3DGFb+QyOkPUTqbLzHau18h+psvIfprHzH6Sv8x+jrvMfoq3zH6Kt8x+kr/QfprD1H6Wv
+        9h2jrPcboKj3GZ+n9xikrfcYoKn2FY+W9RCXnvgQq7T9Ea22/w6stf8Kvcf/Cc3Y/wjT3v8G1N//BMzb
+        /wLK3P8C0uP+Aen2+QLy/vMF8v/vCvP/7Q31/+4L+P7uCfn/7gf7/+4G/P/tBv3/6wr9/+kM+/3pC/n7
+        6Qj5+esE+vbyAfr19AD/+/8A//n/AP/5/wD/+P8A//j/AP/4/wD++f8A/fn/AP35/wD7//IB+//xA/v/
+        8QT7//EE+//xAvv/8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD69P8B+vT/Avr2
+        /QL6+fkC9/n0AfT68AH2/PQC9v70BPb/8gb0//MI8f/0Cu7/9Qzs//cN7P/4De3//g7s//8U7P//GO3/
+        /xbr//8W4PT/GsbW/yu0wv9GpbD/YZif/3eHjP+Dd3n/iGZm+4lWVPiJSUP5iUU6+41GN/6SQzP+kz8v
+        /pM6Kv6TNSb9kzAj+pMuIveTLyP0kzEn85M1LvOSOTXzkj4785FCQPGPR0bvj01O749VV/CNX2Pzim90
+        +YmBiP+Hkpr/faOs/2qzvv9PxtP/Ntfl/yTo9/8Y6/v/E+7//xDv//8N8P//CfH8/Abw+/MH8PvyCe74
+        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
+        wIBYX9HTRUTc/y4k6v8cD/X/Ewb+/wsC//8GAv//BQP//wQE//8EB///Awj//wMH//8CBv//AQT//wED
+        //8DA///CQT//w0E//8MAfv/DgD5/xcA/f8gAfv/Kwn0/zcU6v9DI9//SzHS/1I/xf9ZSrX6W1Gj61ZT
+        itVTVX3JVliBylpikMZebqTBX3Kpv2ByqL1idKa7Y3akumR4pLlmeqO5Z3uguGZ7n7lleZ66ZHeeu2N1
+        n7xjc6K/X26iwlJhncZKWJ/MSFKo1EZNseJCSLrzPUDD/TY2zP8sLNL/JCPY/x4Z3/8YEeP/Egzl/w4H
+        6P8MA+3/DQDy/w8A9/8SAPr/FAL8/xMD/P8PBPn/CgP1/wgD8f8IBe7/Cgjw/w0K9P8NB/n/DQP8/w4A
+        +v8WBfb/Jhru/zs05f9PTt3/X2PTt3qHv1qkr8Ip////Dv///wX//P8B3f7PAPj98AD2+/gA+vn/APr5
+        /wD5/PoA+P/3APj/9wD4//kA9v79APb9/wDw//8A/fn/Af35/wL9+f8C/fn/Av35/wH0+v8A7/76AO/+
+        +gDp//gA+vP/Avrz/wT68/8E+vP/BPrz/wH+9P8A/vT/AP34+AD7/O4A+/7rAP//7AD//+wD///sBv//
+        7Af9/+oI+v/oCPX/6Azu/+kU/P/7GrbT1TJjfZ6JSl+Z2zlCrPYrKsT/Ihje/xkM8v8RBP3/CwL//wcD
+        //8GBP//BQX//wQG//8CBv//AQT//wAC//8AAf7/AQH+/wMC//8IBP//DgX//xID/v8WAf7/GgD+/yAC
+        +/8qCfT/PBrw/1Iz7/9pUPH/fmvy+5KD7eaek+W8l5PQeo+Su1mRk79ckZnJXJCg1FqQotZYj6HUVZCi
+        0lGRo9BPkqXQT5Snz0+VqM5PlKjOT5OnzU+RpMxPkKLNUJOi0laSodNbi5rQW4uX1WWOl998i5LopYOJ
+        7tRzdvHwX1/y/0ZG7P8xMOb/IR3j/xcR5P8UDeb/FAzt/xYL9v8TBvf/EAH2/xQD+v8WBf3/FAX8/w4E
+        +P8HAfH/BAHt/wYD7f8NCvL/Ew/5/xQO/f8TCf7/EQP7/xIC8P8WCt3/IRrN/zIxwP9HTbPtXWuowXKA
+        rmDR3PUU////CeLn/Qbh5v4B+P3vAPb7+AD6+f8A+vn/APn8+gD4//cA+P/3APj/+QD2/v0A9v3/AP/1
+        /wD9+f8B/fn/Av35/wL9+f8C/fn/AfT6/wD/9/8B//f/Af/3/wH89P8C+vP/Avrz/wP68/8C+ff/Aff+
+        /wH3/v8B+P/tA/n/6Ab6/+gG+/7oBvf47Qb29fAH//vyBvXv+Qno4v0R5OL/IdPT/zqWjvxYYF7ogj9G
+        wcYtOLP+HibB/xQY1P8SEej/Dwv0/woG+v8HBPv/BAT6/wMD+/8DA/z/AgP8/wEE+/8CBPv/BAX5/wgH
+        9v8KCvL/Cw7r/xAR4/8aF97/KyTh+zcs5+06Ku3TOCHxuTMV8aM/HvOaWDr2mnVc/ZmQfv+WrJ7/iMS5
+        /2zb0/8+9/P/JvHw/yTn7f8i2+r/H9rr/x3e7/8b5PX/GOn6/xfq/P8X6/7/F+z//xfs//8X6v3/F+r8
+        /xbn9/8X4O//HN7s/x/k8v8e3en/Jc7W/ze2vv9Woqj/eYqN/45wcP+ZU1P2mzo57J0pJeaeJyPjqjEv
+        4cE3Nd3bOTXY9S8p0v4kGs7/JBXW/yQQ4f8fCuv/GAbv/xAE7f8KA+v/CAPr/woH7v8MCvP/Dgr3/w0H
+        +f8LBfv/CgX1/woH5/8ODdv/FxjS/icsxv82P77yPkfFrE1T2WmCjPA63u7/G+f2/wvx+v8D8fr/Avz/
+        /wH2//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/fn/AP35/wH9+f8B/fn/Afz5/wH4+v8B9Pr/Af/3
+        /wL/9/8C//f/Av73/wH79P8A+vP/APn4/wD3/f8B9/7/Avf+/wL4/+0G+f/oDfr/6A/7/ugN9fbsCu7r
+        9Aj88/sH7uX/EOHa/yXQy/tItrP5eHdv8rNFOuvpJh/j+BAO4f4GDez/Aw72/wMN+P8DC/j/Awj2/wIH
+        9P8BBvT/AQP3/wEB+f8BAfj/AQL3/wMF9f8JC/L/ExHv/xob5f8fJdb/JSvE/TE3uPVNVLvkaG/Bw3+F
+        yIyNj9JWeXDgKFQ28xVbPvQTcln6EpB+/xO5q/8V2Mv/GO7d/hz25P4a8+X+E+nj/gzL1P8Fvc7/BL7P
+        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
+        0v8FDt7/BA7q/wYS9P8FDvP/AQPo/wAE7P8BDPn/Bg/8/wsP+P8NC+3/Egzg/x0Y0v8uKNDuRj7fwl9X
+        6n2iqP8u////EOPv/wru9v8E+Pf/Af/+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Pv/AfD7
+        /wTw+/8G8v3/CPL9/wjy/f8I8v3/BPb++gH///YB///qBv//4xH//+IX///iF///4xD//O0F//H/BP3w
+        /wr8+f8M0tXwGra81D5+cdh/Uzbe3UQj2v88HNH/PB3Q/0Ej1P9EJ9L/SS/O/VRCxvhcUMH1X1LD9mlX
+        yfh3XtH4dVrL+WhQvfhaSabyUEeR6lNPid9gYI3LfoOhpJmjs2jB08gg////ASkAtACVgtIAs57WAMy6
+        2gDt4t8A9OveAPXt3gD39N8A+/viAOD//wDy//0E8f/7CPH/+Anr//IN5v/uFeT/7Rrk/+0a5P/tEOT/
+        7QLy7vYA8vL4AAAAAAD/+f8A//n/Af/5/wL/+f8C//n/Av/5/wL/+P8B8P/fAPb/7AD2/+wA+P/uAPv/
+        8gD7//YA+/74APr9+gD4/PwA///rAP//7QP//+0G///tBv//6wj//+kK///oC///6Ar//+QFNSz/AHdl
+        9QAAAM4A////Ba262SuNl9BzaXLIt0dPwe4sM8L/FBvH/wkR0/8ED+L/BxXx/wYT8f8BCeT/AAbm/wAK
+        9P8DDPr/Bwr+/wsF//8PAv7/EgPx/yES5v87L9//U03byoCL1me1xNMt3evzD////wT7+P8C//7/APb1
+        +gD28/EA9PDtAPf17gD8/+8A/P/vAP//7wDv+/8B7/v/Bu/7/wjy/f8I8v3/CPL9/wjy/f8E9v77Af//
+        9gH//+oG///jEf//4hf//+IX///jEP/87QX/8v8E/fD/Cv///wuxs9gphYmzgmhgtsxBJ8X0NBPM/zsa
+        0P9NLuD/ZEfz/3da9f+Fa/X7j33y7pKG8OmQgvHwkX/y9ZV98faWfO/4lHzr85B/39eMhNCzjInHjpCS
+        wWiepsZBtsnTIP///wgAAA8AYSyLAIFIlwCLLX4Az5mwAPXj1QD56tYA+u3XAPvz2gD9++EAl///APD+
+        +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
+        7gL//+8E///tBf3/8Qb2//sH8v//CP//8gL///EC//7wAv/88AH19v0B7vH/A+n5/wrm/v4Y5f/9IuT+
+        /CPo/v0X6Pn9CNPC5SO6prZcjXVep3tdMeR6URr3fkcM/4U+Bf+OPwL/mEoD/55UAf6hWwD9oVwA/Z9b
+        AP2bWwD+l1gA/pVTAP6dTgL+q0kH/65HB/+rRQX/qEQD/6VEAf+kRwH/pEkB/6NMAf+iTgD/olAA/qFR
+        AP6gUgD+n1EA/p5RAP6gUgD+oFQA/p5WAP6bVAD/lU8A/49KAP+JRgT/hkYN/4dLG/+QVC/4ml9E7KRr
+        Vt2mcGPMoG9ruKd+gILItb487vT/FAAAAADYsXcA/dSYAP/puAD+/eIA///pAOnu9wDu8/kB8fj9AvH5
+        /gPw+P4D8Pn/A/L8/wP0/v8C9P7/AvX+/wL3/f8C+P3/AfT//wD69/8A+/j/AP34/wD/9v8A//T/AP/z
+        /wDS/9EA9f/1AvX/9QT0//MD+vb6Bv3s/g/+6f8Y/+f/Hf/n/xX/7vsE/+3/AOXm+wDExPsAqKb6AIR+
+        +wCXke88i4Pvx2ld6f81JOD/Gwzf/xAG4/8PCO//EAv4/wwJ+P8JCPj/CAf5/wkI+v8LCfz/BwT9/wwL
+        +Pw6Qt/sZ3fKuH6PzEv///8H////Av/9/wH///0A///uAv//7wT//+0F/f/wBvb/+gfz//8I//z1Av/9
+        9AL///MB///uAe/3+wDu8/0D6vn9Ceb+/RLl//0X5f/9F+3//w/o7N4LtZ6WRKSKe5h/YT/YbkoZ/3xK
+        Ev+LSg7/kkQJ/5dCBv+aRQT/oU0H/qdWC/2lVgv9nlMJ/pNRBP+OUQD/k1MC/plRBf6gSgj/okcJ/6BG
+        B/+eRQX/m0UD/5pHAv+aSQL/mkwB/5pOAf+bUAH+nFIB/pxTAf6dUgH+nVIB/p1SAf6eUwD+oFYA/p9V
+        AP6cUgD/lUwA/45GAf+GQQP/gkAJ/4VEFP+LSiH/lFQv/5hcPf+YYkn/m2xSzqF/W4iuj2NZxaFuOOvG
+        kyX/+MgV////CP///wH///8A////AP///wD6/f8B+Pv/AvT4/gPz9/4E9vn/A/j6/wL4+v8C+Pr/Avj6
+        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
+        6gH5+/IC///4A////wb058gWm4VfaYpxSM+AYDPwdlEf/W9JFv9yRxL/gksR/5FNDP+eTgL/plMA/qpY
+        AP2lVAD+nU0A/5NHAP+ORQH/kUsC/5JPBv+RUQz+jFEP/4VOEf+ATBP/hFIe+Z1vPti3jF+zv5dulMSg
+        e3jGqIRhvqaFSq+bfjeyoocwwLKYK9LFriDq4MwV//vpD////wv///8I////CP///wn///8K////Cf//
+        /wn///8I////CP///wj///8I////Bv///wX///8D////Av///wH///8D////Cf///wv///8I///yDvX2
+        2Rna17UozcWfOdXIoESynXBqiW09u3VYJutmSRf6Z0gU/3VPFv+JUwz+mVMB/phQAP+VTgD/l1AC/5pR
+        Bf6bUQv+j0wK/39KDP6KYyzinoRryZmAq9V8YMvpRCjE+SgLzP8pDuf/JQrv/yAG5P8rGMz/PTWy/FBO
+        o/JiY53Jg4StZtfY3SDt7+UHo4H/APf+/QLy+P4C8/v/AvT9/QL1//sC9f/7Af/4+QD/+vsA//n8AP/4
+        /gD/9/8A//f/AAAAAAD///IA///yAf//8gL4//cA+P/3APj/9wD4//cA+P/3AAAAAAAAAAAAAAAAAP/5
+        /wD/+f8A//n/AP/5/wAAAAAA+/ryAPz58QD4+u4A+frvAfz99gL///8C////Bv//9hHHt5M2rJNqbpx7
+        TLqMZzX4cEsY/2o/Cv+ETRP/l1QR/qFSA/6oVAD+qlcA/qdVAP6iUgD+nE8B/pdOA/6VTwT/kk8F/4xM
+        Bv+FSQf/fkcJ/3tHD/97Shb/fVAf9n9VKemCWzPfhWI91YpqR8uNcVHBkXlctpyHbKqrl36Tv62WaN3O
+        uj//9OUi////D////wT///8D////B////wn///8I////Bv///wP///8BAAAAAAAAAAAAAAAAAAAAAP//
+        /wD///8B////Af///wL///8D////Bv///wz///8W4efMK7exj2CroHuUrZ93obCec5ywmGqKjXJAo2lO
+        G+lqTBf/fFce/o5YEf6ZUwH+k0sA/5FKAv+dVwn9oFgL/ZdMBv6JRgP/e0YH/3ROGfZ2XUHsinGW5Ilu
+        2edfQuD5QCLk/y4S7f8fBOv/GgLg/zcm1/9bU9D7dXLLw4+Qx32kp8Yy///OBw8A/wCkhP8A8vv4Au7z
+        /AP3/f8C9//+AvX/+wL1//oB//j5AP/6+gD/+fwA//j+AP/3/wD/9/8AAAAAAP//8gD///IB///yAvj/
+        9wH4//cB+P/3Afj/9wD4//cAAAAAAAAAAAAAAAAA//n/AP/5/wD/+f8A//n/AAAAAAD2/P8A9/3/APb7
+        +wH1+vcC9/v2A/z+9QP//+cH//rbD/XsyyLeyaNEuZlrg6B8Sr6BXSrbdk4Y7oFPF/yNURP/llAK/5pQ
+        Bv6ZTwT+mU8E/phPBP6YUQf+l1II/pZSCf+STwj/jEsF/4dIBP+DRwX/g0gK/4JJDf97RAv/eEQN/3tJ
+        Fv+AUSD/hVoq/4piNP+OaT/8lXJJ8px6Uduhf1SwpIBSiJ94R2yUazZYiFwlTZhmMUu0fUpPvYVST7+H
+        VE7DilVKxoxVRsiLVEPJjFNByIxSQMWLUULCiE9EvYVMR7iCSUq1f0ZLrng+S6FqMEuaZSxPm2ozVp1x
+        PV+eeEZxmHlLpZV5TNeWeErjn31Nz76UYpm5jVqclG873ohhLPiFWB/9j1YR/phTBf6QRwL/jUQC/51S
+        Cf2jVQv9m0wG/pBIBP+ESQX/dUkM/21NJf9+YG3ziGq15ndZ3dlaPujePiXX9zIb0/szHdfsSjrc1W5l
+        4rSQjO13w8T/PNjb/xK8wcsA4ePkAOz2/ALs9vwF7Pj6Buz6+QXw/foE9P/8A/X//QH/8v8A//f/AP/3
+        /wH/9/8B//f/AP/3/wAAAAAA///xAP//8QL///ED+P/3Avj/9wL4//cC+P/3Afj/9wAAAAAAAAAAAAAA
+        AAD/+f8A//n/Af/5/wH/+f8AAAAAAPb8/wD3/f8B9Pv+AvD3+gPw+PgD9vz3A///7QL8+eIH0MioKcvA
+        nlPKuJFWv6V1X7CVYJOaekTIfFUf8HZJFP9/TRj/gEkV/31CDv99Qgz/gEUM/4hLD/+OTxD/klEP/5RQ
+        DP+UTgf/lE0E/5RNAv+VTgL/lU4D/5NMAv+TTAP/lE4F/5VQCP+VUwv/k1UP/5FVEf6NVBP8iFIS94NP
+        D+5+TQ3le0wO33pLD9p9TRPYj1gg1qdoMdWvbjjTsnI70bh4P829fUTIwYFHxMODScLChEjBv4FGw7t9
+        Qci1eDvMsHM10KxwMtKlaCvUl1sd1o5SFNiLTxHah00P3IRLDuB/SQ7rfkcP9oBIEPmMUxvzqW034cmM
+        V9fepW/awYhS6JJWH/uPTxD/mFIM/pBGBf+NPgD/l0MC/6JJBv6oTwz+pFIK/phSA/6JUQP/fE8M/3lS
+        NPx+WmHok3OjoYVux5xfS6XjYE6q7Hdkxr6BcNR4hHvhNZKO7hrKyv8P5OT/Bf///wH/9v8A8f7/A/D+
+        /gjs+/oL6fr3DO38+Qrz//0G9P/+Av/y/wD/9/8B//f/Av/3/wL/9/8B//f/AAAAAAD///AA///wA///
+        8AT4//cC+P/3Avj/9wL4//cB+P/3AAAAAAAAAAAAAAAAAP/5/wD/+f8C//n/Av/5/wAAAAAA9vz/APf8
+        /wH1+/4C8fn8BPD5+wTz+/oC////APv78APLxKcdy8KhQsC0jly8q351w6x4k7ibZKybdkC9iV8t1oFV
+        J/d8Sx//eEMX/3lCFP98RRP/hEoT/4pNEf+NTA3/kEwJ/5VMBf+ZTwP/nFEC/51QAf+dTwD/nU8A/51P
+        AP+cTgD/mk4A/5dNAP+UTQD/kE4B/4pLAf+DSAH/fUYB/3hGA/93Rwj/eEoN/31OFP+JUxv/mFki/51c
+        Jf+fXyj/o2Mr/6dnLfypaTD6qmsx+KlrMPinai75pWcs/KFkKP+dYSP/m18h/5daHf+PUhT/iUwO/4ZJ
+        C/+DRwn/gUYI/31BBf97PgP/f0AF/4lJD/+dXCX9unlD8eGha97cm2XguXhB8KJfIvmUTgr/kkcF/5ZE
+        Bf+dRAT/pEYF/6hLCv+kTgf+m1EB/o9TAP6CUwP/dk0g/3VQRfCNb3+2mIOvpIVzq8KKerCyp5bHe76u
+        0zr//94EfHjmADxP8AD///8A/fL9Afjt+AHz+/0F8f//Cu79/Azr+/kN7v36C/P//Qf0//0C//L/AP/3
+        /wL/9/8C//f/Av/3/wH/9/8AAAAAAP//8AH///AD///wBPj/9wL4//cC+P/3Avj/9wH4//cAAAAAAAAA
+        AAAAAAAA//n/AP/5/wL/+f8B//n/AAAAAAD2/P8A9vz/AfX8/wL0/P8D8/z+A/P9/gH///8B/v7wA+vo
+        3Qne068gsKB3b6qZbbGznW20v6Vxo8+vfYy3j1+nl2k66YxaLPyIUST8hU4e/oRNGf+GTRT/h0sP/4dH
+        B/+JRgP/kEkD/5ZOBP+cUwb+mlAD/5hNAP+aTwD+m1AA/phNAP+VSwD/kUkA/49KAf+OTAL/i00E/4dM
+        Bv+CSwb/fkoI/3xLC/9+TRD/glAV/4VNFP+IRxD/iUcP/4pIEP6LShH+jUwR/o5NEv2OTRL9jU4R/YxO
+        Ef2MTRD+ikwO/olLDf6ISgz/h0kL/4ZJCv+FRwn/hEYI/4RHCf+FSQv/hEgL/4NHC/+ISg//jU4U/49Q
+        Gf6eXin2u3xG59maZd3pqnPav31A6ZNPC/uTSwj+nU8N/qNNC/+kSQf/nkMD/5lFAf+VSwD/j1IA/oZV
+        BP55TR7/c0xC/H1dcvCQdqDSsZ3UoMq57mrUw+834tHxFu7h9QT///wB//j9Av/5/gH57PgB9+34A/T4
+        /Abx/v8J8P/+Cu/+/Qrx//0J8//9B/P//QL/8v8A//f/Af/3/wL/9/8C//f/Af/3/wAAAAAA///wAP//
+        8AP///AE+P/3Afj/9wH4//cB+P/3Afj/9wAAAAAAAAAAAAAAAAD/+f8A//n/Af/5/wH/+f8AAAAAAPb8
+        /wD2/P8A9vz/AfX9/wL0/f8B8/3/AP///wD///EC////AureugysnHI5p5lycZ6VdayVjnHJhoFnwJWA
+        YMO3i1zRu4dU1K54RdiaZTDti1Ye/4NNE/9/SAz/fkYH/39GBf+DSQX/ik8J/5BUDP6KTAb+hUUA/4xM
+        A/+SUQb/kU8G/45MBP+LSAH/iUcA/4pHAf+MSQP/j0wF/5BMBv+QTAf/jksH/45LCP+QTAr/j0kJ/41D
+        Bf+NQgX/jkMF/5BFBf+SRwb/lEkG/5ZKBv+WSwX/lksF/5VKBf+USQT/k0kD/5NJA/+TSAP/kUgE/5FK
+        BP+RTAX/kU0H/49NCf+LSwn/iEkJ/4lMDv+ITRH/gkgQ/4hPGfydZDD0wYlV1e63grDPmmC/oG0w34hV
+        GPOBSg3/jk0L/5RMCP+PQwL/lEUA/5xOAP+aUQD+klAC/4hLDv+CSSH/g1E8/5NnYdzJpq+N/OPxTf/v
+        +B////8J//7/Av//+wD/+P0B//r+APfp9QD37fgC9Pf8A/H+/wTx//8F8f//BPL//gTz//0D8//9Af/y
+        /wD/9/8B//f/Af/3/wH/9/8B//f/AAAAAAD///AA///wAf//8AL4//cA+P/3APj/9wD4//cA+P/3AAAA
+        AAAAAAAAAAAAAP/5/wD/+f8A//n/AP/5/wAAAAAA9v3/APf9/wD2/f8A9P3/APT9/wDz/f8A////AP//
+        8AD6/PQA6unUAbOlfgKkppYhjJCAhHp/cNJeZFXxeG5W68ebbcngqG+9y5Zdw7B9QtybaC3yjlwg9YZU
+        F/eBUBH8fUwM/3pKCv9/Tw3/hFQR/nxKCv92QgP/f0oG/4hQCf+KUAr/ik4H/4dKAv+HRwH/iUUB/45H
+        Af+USgL/mksE/51KBP+cSAL/nEgA/51JAf+bRwH/l0QB/5dEAf+YRQH/m0cB/55KAf+hTAH/o00B/6NO
+        AP6jTQD+okwA/6FMAP+hTAD/oUwA/6FMAP+fTAD/nk4B/55SBP6cUwX+l1AG/5BMBf+LSgb/iU0N/4VN
+        EP96RQv/eUYQ/4VSH/+daznXxppnocync6WxkVvEg2Qv525LE/58Tg3/hU4I/4ZGAv+TSQD/pFMA/qRR
+        AP6dSwD/mEkA/5FIA/+KRw3/lFgn4cKSbJjpxalT8NXAGv/+/wX/8OYB///7AP/3/QD/+f4A+Ov3APft
+        +AD09/wA8f7/APD//wDw//4A8v/9APP//QDz//0A//L/AP/3/wD/9/8A//f/AP/3/wD/9/8AAAAAAP//
+        8AD///AA///wAPj/9wD4//cA+P/3APj/9wD4//cAAAAAAAAAAAAAAAAA//n/AP/5/wD/+f8A//n/AAAA
+        AAD1+PgA9fj4APX4+QD0+/wA9P3/APP9/wD///8A///wAPb67QH8//8CjHU6AKy8vQmRmI01f4Z5e2xz
+        ZdZ9cln5p3lK6LB3PuSrdTvjuoZK1cuYW8fMml3Bu4pMzp5uL+6KWhr/e0wM/3lKCf9+Twz/fk4M/39M
+        Cv+ATAf/g00G/4dOCP+JTwj/ik4F/4xMBP+PSgP/kkoC/5RIAP+URAH/lkIB/5dBAP+cRQD/oksD/qFL
+        BP+cSAT/m0gE/5xIA/+dSQL/n0oB/6BKAP+hSgD/oUoA/6BJAP+fSQD/n0kA/6BJAP+hSgD/okwA/6NP
+        AP6iUQH+oFMD/pxSBP6XTwT/kU0F/41MCP+NURD/iVIU/n1JD/9zQQv/cT4L/3pKGO+PZTLYqYVRw7aX
+        Yr2Ye0behGMr+oNXFv6GUAj/jEwC/5hOAP+kUwD+plIA/qJOAP6aSgD/kUYA/4hDB/+OUh/0pndQ07WN
+        bYC/nH0Z////Af//9wD///sA//f9AP/5/gD46/cA9+34APX3+gDz/PwA8v39APD//gDy//0A8//9APP/
+        /QD/8v8A//f/AP/3/wD/9/8A//f/AP/3/wAAAAAA///wAP//8AD///AAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPT18wD09fMA9PXzAPT18wD09vAA9PbwAPT2
+        8AD4/e8A9/vvAff77wP///8B////Af///wOZoJMwf4V4koV3XNaRZjr3j10p/41cJ/ymdkDdypxlv+Gz
+        e7XcrXK8vI1P1aNzNOaRYCDtilkX9IpZFPqMWBP9jVYR/oZOCP+DSgL/iEwF/4tOBv+NTwb/j08G/5NO
+        B/+UTgf/k0sH/5FFB/+PQQb/kEAG/5REB/+bSwr+nEwJ/plJB/+aSQf/mkkG/5tKBf+bSQP/nEgC/5xH
+        Af+bRwH/m0cB/5tGAf+cRwL/nkkC/59LAv+gTAL/oU4B/p9QAv6dUAT+mVAG/5VOBv+QSwf/jUsK/49Q
+        Ev6NUhf+g0sU/3hCDf9uOAb/cj4N/4BRH/+ZckHbtJdnuquQYMiZeUThiF0g9oRPCv+NTwT/lk8B/6BP
+        AP6kUQH+pFIB/ptMAP+RRwL/ikUH/4pOG/+RYzv7mG9NpbOObiX///8E/+vSAQAAAAAAAAAAAAAAAAAA
+        AAAAAAAA+fTxAPn08QD59PEA+fTxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        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
+        Psh2Wzn9bEwm/2lEGf9zSRj/f1Ea/41ZHf6bYyH2qm4n7rp5Me3Igzvv1I1E8N2WS/DjnFHt4ptS7tqV
+        TvHMiUfuvHs+57JzOuKqbjfgpGk3355lOOWZYTjzlGA4/JBgN/6KXjH/hFso/4NbJf+EWyX/g1ok/4FY
+        Iv+AVSD/f1Qe/35THf9/VB7/glUg/4NWIf+DViH/gVMh/4JVI/+KXSr/jmEw/45iMv6UZjfqnms6zZxk
+        MLSTViKgjU0alJJRII6oaDiMv4BRhdiZannxs4Vz/8ebaf/TqTv//NsN////AeDJnhzKqXtiqYBNq4ZV
+        HuuESQv/kUkD/5hMAP+bTgD/l0wA/5RKAf+WTAP/kU4K/4RPFv95TyL/c1Er/ndYNpK/pIMY////A//+
+        8AEAAAAAAAAAAAAAAAD59PEA+fTxAPn08QD59PEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHy8ADx8vAB8fLwAfHz8AD09vAA9PbwAAAAAADx9eoA8fXqAPP3
+        7AD2+u8A9/vwAff78AL2+e8C9/PjA5NxSwWYgGQWjHplfYRxWuBwVzv3akoo/XlTKf6AUyL+f0sV/4dN
+        EP6TUxD9mlUQ/Z9XEf2mXBT9s2ce+8h8M/fbkEn06qNe8PGtbeTvsXfV6q94zN+mdMfMmGvHu4lizrB+
+        XOCneVjmnHhV4ot0TeR7cUTpeHBC6nhvQep1az/rcWc77G5kOO1sYjbta2I27W1kOe1xZj7rc2hB63Vp
+        Q+p0aETrdWpH6XxxT+WCeFbih3xd3ZSJa7utooKGvrCQWce0lTbIrYwhxaOAF9S1kRfewJ0V5sOfEfHK
+        pg781LEM/ty+CPbw4gP7//8B8OLICu/dvyaigVhtfVQm24BMFP+OTAb/lUwB/5dMAP+WSgD/lUoA/5lN
+        AP+WUAX/i1IQ/nlKE/9oQBL7dFEoocOriTfl39UQ+/nqAv///wD//+8A///wAAAAAAAAAAAAAAAAAAAA
+        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
+        BP+LQwT/h0cJ/4JLDv98Rwr/ekMG/39CBv+KSAn/mFIQ/ppRDP6TSAL/lEgB/5ZKA/+RRwP/jUYE/49M
+        CP+NUA3+hVES/ndKEf9rRBP+fl4045+GYrCtl3VP8+jSBv///wD8+/cB9/T4AfTx+AHw8fsB7/D7AO7v
+        +wD6//8A+P//APj//wD4//8A+P//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAADt9PcA7fT3Ae/2+QLy+fsC9Pv9AvX8/wL1/P4C9Pz+AvT8/gH2//0A9v/+APb+
+        /AD3/PcA/v/yAv/+7Qb//eYL+vTZEOPZwBPfzq4f5syrOb+eeHSkfVTHn2g26p5UF+6YSQv2kUUH/I9D
+        Bf6RRgX/mU0J/p1PCf6cTAX/mUgD/5ZEAv+YRQH/mkgB/55MAf+fTAD/mkcA/5lGAP+eSgD/oU4C/6JQ
+        A/6gUAX+nE4F/5lNBP+WSwT/k0oF/5FIBP+QRgP/jUMC/4lCA/+KSgv+iVET/oNMD/+CSQv/i0wN/5RR
+        EP+bVBL+m1EM/pZKA/+VSAD/lUkB/5VLBf+TTAf/i0gE/4RHBf99SQv/c0cO/2xFFPyEYzfAv6aBb9zI
+        qC778tsG////Af//9QH9/fYA8O/9AfDw/ALw8PwB8fH9APr//wD4//8A+P//APj//wD4//8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOzz9gDs8/YB7fX4AfD3
+        +wH0/P0B9v79AvX+/QL1/fwC9v78Aff//gH3//8B9f7+AfP7+wH5/fcC/f/zBP795QX///UF////Av//
+        /wT///8Q2baQLKuEWlOodUVtqW44hJ9tOrqTaDjtgVkq/3ZPHf94TBf/e0sS/3xJDv9/SAv/gkgK/4ZK
+        Cv+KTQj/jk0E/5BNAv+PSwH/kkwC/5hPA/+bUQP+nFIE/plPA/6VTAP/kkkC/5BHAv+QRwL/kEgD/5JK
+        Bf+SSwf/kkwI/pVQCf6WUgn+kUwH/5BIBf+VSwb/mk0H/5tMCP+cTAX/nEwB/5tKAf+aSwP/m1AK/5dR
+        Df6ISAf/fEIF/3RDCv93TRr/gV0x+ZZ1TafUu5hD9ebOF/314QP///8A///0Af//7wDx7/4C8u/+BfLv
+        /gPz8v4A+v//Afj//wH4//8B+P//Afj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA7fT3AO309wD6//0A+P/8APX/+wH1//sC9f/7AvX/+wL0/voC9P76AvT+
+        /AL0/fwC9Pz7AvX9/AL3//8C9/3/Ae/1/wDm7P8A6/L/AO71/wH///8AYxwAAPX54gzRzbAsrKF/c5iL
+        Z7h7bknRaVoz3WtXLOhsUyTzbU8b/W9MFf9zTBH/eE4P/31QDP+BTgf/hE0D/4dPAv+MUQL/klIE/pZS
+        BP6WUgP+lE4B/5BLAP+OSAD/jUcA/49HAf+RSgP/lE0H/5VPCv+XUAr+m1EG/p9RAP6dTAD/nEkA/55K
+        AP+eSgD/nUcA/55JAP+gTAD/n0wB/5xLBP+cUAv+l1EO/odJCv96RAr/dUYQ/4FZKfeaeE/arY9rg+XO
+        ryb///8J//nqAv/9+gDy8PkA9PL4APLv/QPy7/4G8u/+BPPz/gD5//8B+P//Avj//wL4//8C+P//AAAA
+        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
+        +AD08vgA9/z/APf8/wH3/P8C9/z/Aff8/wD4//8A+P//APj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPX/
+        /wH1//8C9f//AvT+/wLy/f8E8v3+BPb8/AP6/PcC+/31A////wP///8C////Af///wH///8F////Df//
+        1xn93bEm5cKTNsagbk+uhlJqnHM7eI1iKH6DVxuBgVQah4hcJJSPZS+llGw4t5dwPseZckLUmHE/3Jdx
+        POCZcz/dmnVC05t2RMWYckGxjmk5moZiNIqFYjWBknFJeaaHZGnCpYU8///lFP///wMAAAAA////BP7w
+        4QT+798B//r3APjw6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD3/P8A9/z/APf8/wH3/P8A9/z/AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8/3/AvP9/wTz/f8E8/7/BPP9/wby/f8H8/z/BPT5
+        /QL1+vsC9fr5Afn68AD/99wA//LTAP/xzwD6474B79OrAeXFmwLZuIwCy6yCA8qxiwbaxqYL4c2xEd7K
+        rxTYxawd1cGrMcq4oku+rpdpt6aPgbKfiJSymn2is5l1qLabdqS6oXyWwqqGf8q0kWHWwKA84cywI+HP
+        sxXazbIM08OpCNrLtQT16doD9+7kBfbt5AT37uQB/vHjAP7x4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAPf8/wD3/P8A9/z/APf8/wD3/P8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AADv+f8D7/n/BvD6/wby/f8E8/7/BfP+/wX0/f8D9vz+Avb7/QL1+/8B//vJAP744wD+9NoA/vLUAPnl
+        wgDw1a8A37yNAL6IRgB+NQAAHQAAAAAAAAD///8C////BP///wj///8Q6eTaHNTNvynIv680wbSjO8Gw
+        l0PEsJFIyraVSdG/nkbby6o959u7L//23hv///8O////Bf///wAhAAAAgE0eAJlSBwD38ewB9eviAubg
+        3wD+8eMA/vHjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/z/APf8/wD3/P8A9/z/APf8
+        /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO74/wPv+P8G8Pr/BfP8/wT0/v8D9f//A/f/
+        /wL4/v8C+P3+Avj9/gH4/v8B9/7/APb+/wD3//8A9f3/APH5/wD3+fcB/PvzAv398wP9/vQE/f/0BP3/
+        8wT+//MF///1Bf//+wX///8F////Bv///wb///8G////B////wr///cO///tEf//5RL//+EQ///jDP/+
+        5gj//+sF///wA///8gL///QB/PTpAPfu5QD27eQA9u3kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA8vv/AfP7/wP0/P8D9v7/Avf//wL3//8C+P//Avj//wL4/v8C+P7/Avj+/wL3/v8C9v7/Avb+
+        /wL1/f8C8fn/AvH4/gL1+vwC9vz8A/b9/AT2/vwE9v79BPf//AT5//4E+///BP///wP///8D////Av//
+        /wL///8C////Av///wP///8E///6BP//7wT//+sD///qAv//7gH///AB///yAP//9AD89eoA9+7lAPbt
+        5AD27eQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD5//8B+f//Avn//wL4//8C+P7/Avf+
+        /wL3/v8C9/3/Avf9/wL3/f8C9/3/Avb9/wL1/f8C9Pz/A/P7/wPy+v8C8vn/AvP7/wL0/P8D9P3/BPP9
+        /wTz/P8E8vz/BPL7/wTy+/8E8vv/A/H7/wLx+/8C8vv/Au36/wH//+AA/v/hAP7+3gD//NsA/vvbAP77
+        4AD+/OYA/f7tAPz+8wD7/vcA+v77APj+/wD4/v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAPj//wH4//8C+P//Avj//wL2/f8C9fz/AvX8/gL1+/4C9fv/Avb8/wL2/P8C9fz/AvP7
+        /wLy+v8D8vr/A/T7/wP2/P8C9v3/AvX9/wP0/f8E8/z/BPL7/wTx+v8E8Pn/BO/4/wTw+f8D8fr/AvP7
+        /wL0/P8C9Pz/Aez4/wD//7UA//+8AP/9uAD/+q0A//h9AJz6/wDp9/8A8fr/APT8/wD3/f8A+P7/APj+
+        /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/73Afv+9wL7/vcC+/74Avj9
+        +wH1/P8B9Pv+AfT7/gH0+/8B9fv/Afb8/wH1/P8B8/v/AfH5/wLy+f4C9fn6Avb6+QL2/P0B9f3/AfT9
+        /wLz/P8C8vv/AvD5/wLv+P8C7/j/Au/4/wLx+f8B8/v/AfT8/wHz+v4B8vj9AfP5/gH0+v8B9fv/Afb8
+        /wH2/P8B9fv/AfX7/wH1+/8B9vz/Aff9/wH4/v8B+P7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD//PAB//zwAv/98AL//fEC/v3yAfX8/wD0+/4A+Pz7APv9+AD7/fkA9/z9APX8
+        /wDz+/8A8fn/APT29gD29fIB9vXyAfb39AD1/f8A9P3/APP8/wDy+/8A8Pn/AO/4/wDv+P8A7/j/APH5
+        /wDz+/8A8/v+APL4/QHz+f0C8/n+AvX7/wL2/P8C9vz/Avb8/wL2/P8C9fv/Avb8/wL2/P8C9/3/Avj+
+        /wL4/v8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/87gD//O4B//zuAf/9
+        7wH//e0A9fz/APT7/gD///IA///zAf//8wH//+kA9fz/APP7/wDx+f8A/+nKAPb07wH29PAB9vDpAPX9
+        /wD0/f8A8/z/APL7/wDw+f8A7/j/AO/4/wDv+P8A8fn/APP7/wDn/f8A9vz+Afb8/gL2/P8C9/3/Avf9
+        /wL3/f8C9/3/Avf9/wL3/f8C9/3/Avf9/wL3/f8C9/3/Avf9/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA//zvAP/87wD//fAA//3wAP/98AAAAAAAAAAAAP//9AD///QB///0Af//
+        9AAAAAAAAAAAAAAAAAD29fEA9vXxAPb18QD29fEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAPj+/wD4/v8B+P7/Avj+/wL4/v8C+P7/Avj+/wL4/v8C+P7/Avj+/wL4/v8C+P7/Avf9
+        /wL3/f8B9/3/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//O8A//zvAP/9
+        8AD//fAA//3wAAAAAAAAAAAA///0AP//9AD///QA///0AAAAAAAAAAAAAAAAAPb18QD29fEA9vXxAPb1
+        8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+P7/APj+/wD4/v8B+P7/Afj+
+        /wH4/v8B+P7/Afj+/wH4/v8B+P7/Afj+/wH4/v8B9/3/Aff9/wD3/f8AAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAO/8/wDv/P8A7/z/AO/8/wDw/P8A8fz/APH8/wDy/f4A9P38APX9
+        /AD0/f4A9P3/APT9/wD2/f8A+P3/APj+/wD4/v8A+P7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD4/v8A+P7/APj+/wD4/v8A+P7/APj+/wD4/v8A+P7/APj+/wD4/v8A+P7/APj+
+        /wD3/f8A9/3/APf9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj+
+        /wD4/v8A+P7/APj+/wD4/v8A+P7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7/z/AO/8
+        /wDv/P8A7/z/APD8/wDx/P8A8fz/APP9/gD1/fwA9f78APT9/gD0/f8A9P3/APb9/wD4/f8A+P7/APj+
+        /wD4/v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj+/wD4/v8A+P7/APj+
+        /wD4/v8A+P7/APj+/wD4/v8A+P7/APj+/wD4/v8A+P7/APf9/wD3/f8A9/3/AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+P7/APj+/wD4/v8A+P7/APj+/wD4/v8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADv/P8C7/z/BO/8/wTv/P8E8Pz/A/H8/wPx/P8D8fz/A/H9
+        /wPx/f8C8/z/AfT9/wH0/f8C9v3/Afj9/wH4/v8B+P7/Afj+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAD4/v8A+P7/Afj+/wH4/v8B+P7/APj+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO/8
+        /wTv/P8I7/z/Cu/8/wnw/P8I8fz/B/H8/wfx/P8I8f3/B/H9/wXz/P8C9P3/A/T9/wP2/f8D+P3/Avj+
+        /wL4/v8B+P7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj+/wH4/v8C+P7/Avj+/wL4/v8B+P7/AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7/z/BO/8/wrv/P8L7/z/CvD8/wnx/P8I8fz/CPH8
+        /wnx/f8J8f3/BvP8/wP0/f8D9P3/BPb9/wP4/f8C+P7/Avj+/wL4/v8AAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA+P7/Afj+/wL4/v8C+P7/Avj+/wH4/v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AADv/P8E7/z/Ce/8/wrv/P8J8Pz/CPH8/wfx/P8H8fz/B/H9/wfy/f8F8/z/A/T9/wP0/f8E9v3/A/j9
+        /wL4/v8C+P7/Afj+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4/v8B+P7/Avj+/wL4/v8C+P7/Afj+
+        /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPH8/wLx/P8F8fz/BvH8/wby/P8F8/z/BPP8
+        /wTz/f8E8/3/BPP9/wP1/f8C9v3/Avb9/wP3/f8C+P3/Avj9/wH4/v8A+P7/AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAPj+/wD4/v8B+P7/Afj+/wH4/v8A+P7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA9P3/AfT9/wT0/f8E9P3/BPX9/wP3/f8C9/3/Avb9/wL2/f8C9v3/Avb9/wL3/f8C+P3/Avj9
+        /wL4/f8C+P3/Afj+/wD4/v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+P7/APj+/wD4/v8A+P7/APj+
+        /wD4/v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////wHgAAH//8
+        AOAA/gf/////8B4AAAAB/ADgAIYH//////AeAAAAAfwA4ACGD////////gD/gAH/////h/////////4A
+        /4AB//gYQAAH///////+AP+AAf/4GMAAB//////wOI//+AH4AAAAOAf/////8Djf//gB+AAAADgH////
+        //BgA+AAAAAAAAA4B//////wYAPgAAAAAAAAOAf//////AAH/4AAB/wAB/4H//////AAAAAAAAAAAAOA
+        B//////wAAAAAAAAAAADgAf/////8AAAAAAAAAAAA4AP//////AMAAAAAAAA6AOAf//////wAAAAAAAA
+        AAADgAf/////8AAAAAAAAAAAA4AH//////CAAAAAAAAAAH/+D/8EAAAAAAAAAAAAAAAAAAABBAAAEAAA
+        AAAAAAAAAgAAAQQAAAAAAAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAgAABAAAAAAAAAAAAAAAAAAAAAQAA
+        AAAAAAAAAAAAAAAAAAHg+AAAAAAAAAAAAAAAA//B4PgAAAAAAAAAAAAAAAH/gQAAAAAAAAAAAAAAAAAA
+        H4AAAAAAAAAAAAAAAAAAAB/ADgAAAAAA+D///wAAAAA/+AAAAAAAAAAcA4AAAAAAA/gAAAAAAAAAHAOA
+        AAAAAAP4AAAAAAD/gBwH/AHAAAAD+AAAAAAB/4AcB/wBwAAAA/gAAAAAAAAABAAAAAAAAAAAAAAAAAAA
+        AAQAAAAAAAAAAAH4AAAAABwEAAEAHgAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAHhAAQAAAAAAAAAA
+        AAAAAAAIwAH4AfAAAAAAAAAAAAAAD8AB+AHwAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAA4AAAA
+        AAAwwAAAAAAAABgACBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAIAAAAAAAAAAAAAAQAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4MAAB+AM
+        AAAAAAAAAgAAgeDAAAHgAAAAAAAAAAIAAIHAwAAA4AOAAAAAgAACAACAwIAAAOAAAAAAAAAAAAAAgOCA
+        AAP/4/gAAAAwAAQAAMCAAAAAP4ABAAAAAAAAAAAAgAAAAD8AAYAAAAAAAAAAAIAAAAA+ADhwAAAABnAA
+        AAGAAAAAPgA4AAAAAAQwAAABgAAAA4YD/gIAAAAEAAAAAYAAAACGA/4AAAAAAAAAAAHgAAAA5///gAAA
+        ADwAAAABwAAAAABAP4AAAAAAAAAAAcAAAAAAQD+AAAAAAAAAAAH/8AAAAEA/j/4AAAAAAAQB//AAAATA
+        P4/4AAAAAAAEAf/gAAAAAD/gAAAAAAAAAAH/4AAAAAA/wAAAAAAAAAAB//wAAAAf/+AAYAAAAABAP//4
+        AAAAAAAAAAAAAAAAADj/+AAAAAAAAAAAAAAAAAA4//4AAAAAAAAAAAAAAAED+P/+AAAAAAAA8AAAAAAD
+        A/gHCAAAAAAAAAAAAAAABgAIBwgAAAAAAAAAAAAAAAAACAcIAAAAAAAAAAAAAAAwAAgHCAAAAAAAAAAA
+        AAAAAAAIBwgAAAAAAAAAAAAAAAAACA8MAAAAAAAAAAAAAAAAABj///kAAAAAAAAAAAAAP/////hwAAAA
+        AAAAAAAAAD4f///4eAAAAAAAAAAAAAA+H///+AYAAAAAAAAAAAAAPh////gEAAAAAAAAAAAAAA4f///+
+        BAgAAAAAAAAAAAAP/////gQAAAAAAAAAAAAAD/////4fAwAAAAAAAAKAAA///////wAAAAAAAAAAAAAB
+        //////8AAAAAAAAAAAAAAf//////AGAAAAAMgAAAAAH//////wAAAAAADoAAAAAB///////ACAAAAAwA
+        AAAAAH//////wAAAAAAAAAAAAAB////////+AAAAAbwAIAAAf///////4AAAAAAAAAAAAB///////+HA
+        AAAAAAAAAAAf///////hkAAAAAAAAAAAH///////4ZAAAAAAAAAAAB///////+AKAAAAAAAAAAD/////
+        ///gAAAAAAAAAAAAP///////4AyAAAAAAAAAAB///////+AAAAAAAAAAAAAA///////gAAAAAAAAAAAA
+        AP//////+AAAgAAAAAAAAAD///////gAB4AAAAAAAAAA///////4AAYAAAAAAAAAgP//////+AAGAAAA
+        AAAAAAD////////////AAAAAAP8P//////////+AAAAAAAA/B///////////gAAAAAAI/wf/////////
+        /4AAAAAAAP+P//////////+AH/wAAOP/////////////gAAAAAA//////////////4AAAAAAP///////
+        //////+AAAAB////////////////gAAAAPgP/////////////4AAAAAAD/////////////+AAAAAAA//
+        ////////////gw4f/AAP//////////////8P//gAD///////////////D//4AA//////////////////
+        //////////////////////////////////////+AAB/////+B///////////gAAf/////gf/////////
+        /4AAH/////4H//////////+AAB/////+B///////////gAAf/////gf//////////4AAf////////4lQ
+        TkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAgABJREFUeNrs/XnQbNmWH4T91tp7nyGHb7rz
+        rXnq97r79SDRLalFGNqAwTJhJDtwOAICcCgwBkNgEIOFZeEgQoYAFAEmBMY2lhlsEA7ZFsY2IBtkrJa6
+        Q2qp6VE9vKFeDbfqTt+Qw5n23mv5j73Pyfy+e29VvaGqXte7qyIr8+Z38mSeYa29ht/6LcJz+W0vGrcA
+        QFcelzZJT6RP/umZe83PT9vdExvp1U2Iq8/7tHzPikr3LW3/aZ5L+3mfjOfy3RD9uA0ob0SAfgtGYH//
+        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
+        RU5ErkJggg==
+</value>
+  </data>
+</root>

+ 322 - 0
.svn/pristine/0f/0fea0eec5e8bad242e797bd1e058597250a00755.svn-base

@@ -0,0 +1,322 @@
+using System;
+using System.Data;
+
+
+namespace Core.Mes.IBaseInterface
+{
+
+    /// <summary>
+    /// 消息原型
+    /// </summary>
+    [Serializable]
+    public struct CallingMessage
+    {
+        //== 服务名
+        public string ServerName;
+        //== 程序集名
+        public string AssemblyName;
+        //== 类名
+        public string ClassName;
+        //== 方法名
+        public string MethodName;
+        //== 参数数组
+        public object[] args;
+        //== 网络传输方式
+        public NetWorkTransType TransType;
+        //== 服务类型
+        public MesServerType ServerType;
+        //== 访问类型
+        public VisitType visitType;
+
+        public RequestType requestType;
+
+        public CallingMessage(string ServerName, string AssemblyName, string ClassName, string MethodName, object[] args)
+        {
+            this.ServerName = ServerName;
+            //== 常用
+
+            this.AssemblyName = AssemblyName;
+            this.ClassName = ClassName;
+            this.MethodName = MethodName;
+            this.args = args;
+
+            //== 特殊
+            this.TransType = NetWorkTransType.Remoting;
+            this.ServerType = MesServerType.IComponentContainServer;
+            this.visitType = VisitType.Method;
+            this.requestType = RequestType.DirectReturn;
+        }
+    }
+
+    /// <summary>
+    /// 网络传输方式枚举
+    /// </summary>
+    public enum NetWorkTransType
+    {
+        Remoting,
+        XmlWebService
+    }
+    /// <summary>
+    /// 服务类型
+    /// </summary>
+    public enum MesServerType
+    {
+        IComponentContainServer,
+        MesSystemBaseServer
+    }
+    /// <summary>
+    /// 访问类型
+    /// </summary>
+    public enum VisitType
+    {
+        Method,
+        Property
+    }
+    /// <summary>
+    /// 请求方式
+    /// </summary>
+    public enum RequestType
+    {
+        DirectReturn,
+        DirectBroakcast,
+        AfterHandlerBroakcast
+    }
+    /// <summary>
+    /// 用户验证信息 
+    /// </summary>
+    [Serializable]
+    public struct ValidateInfo
+    {
+        public string ValidateGuid;
+
+        public string LoginID;
+
+        public ValidateInfo(string validateGuid, string loginID)
+        {
+            this.ValidateGuid = validateGuid;
+            this.LoginID = loginID;
+        }
+    }
+    /// <summary>
+    /// 存储于服务端的客户信息
+    /// </summary>
+    [Serializable]
+    public struct UserInfo
+    {
+        public string ValidateGuid;
+
+        public string UserName;
+
+        public string LoginID;	//登录ID
+
+        public string UserID;		//用户ID
+
+        public string UserBc;		//班次
+
+        public string UserBb;		//班别
+
+        public string UserRz;		//工作制
+
+        public string UserDepID;	//部门
+
+        public string UserDepName;
+
+        public string UserRoleID;	//角色
+
+        public string UserRoleName;
+
+        public System.IO.Stream MenuConfigStream;
+
+    }
+    /// <summary>
+    /// 客户端调用服务端的返回对象,包括错误代码、错误信息和返回对象实体。
+    /// 在Web传输中,返回对象实体如果是DataSet类型,将存入RealDataSet中。
+    /// </summary>
+    [Serializable]
+    public struct ReturnObject
+    {
+        //== 错误代码
+        public int ErrCode;
+        //== 错误信息
+        public string ErrMessage;
+        //== 返回对象实体
+        //private object m_RealObject;
+
+        //private bool RealObjcetIsDataSet;
+
+
+        public object RealObject;
+        /*
+
+        public object RealObject
+        {
+
+            get
+            {
+                if (RealObjcetIsDataSet)
+                {
+                    byte[] buffer = Core.Mes.Common.Utility.Decompress(m_RealObject as byte[]);
+                    DataSet ds = Core.Mes.Common.Utility.ReSerializable(buffer);
+                    
+                    return ds;
+                }
+                else
+                {
+                    return m_RealObject;
+                }
+            }
+            set
+            {
+                if (value is DataSet)
+                {
+                    byte[] buffer = Core.Mes.Common.Utility.SerializeDataSet(value as DataSet);
+                    buffer = Core.Mes.Common.Utility.Compress(buffer);
+                    m_RealObject = buffer;
+
+                }
+                else
+                {
+                    m_RealObject = value;
+                }
+            }
+        }
+          
+         */
+
+
+        //== 用于Web传输时存放DataSet类型的返回实体
+        public DataSet RealDataSet;
+
+        public ReturnObject(object RealObject)
+        {
+
+            /*
+            if (RealObject is DataSet)
+            {
+                byte[] buffer = Core.Mes.Common.Utility.SerializeDataSet(RealObject as DataSet);
+                buffer = Core.Mes.Common.Utility.Compress(buffer);
+                m_RealObject = buffer;
+                RealObjcetIsDataSet = true;
+
+            }
+            else
+            {
+                m_RealObject = RealObject;
+                RealObjcetIsDataSet = false;
+            }
+
+             */
+
+
+
+            this.RealObject = RealObject;
+            this.ErrCode = 0;
+            this.ErrMessage = "";
+            this.RealDataSet = null;
+
+        }
+
+        public ReturnObject(object RealObject, string ErrMessage)
+        {
+
+
+
+
+            /*
+             if (RealObject is DataSet)
+             {
+                 byte[] buffer = Core.Mes.Common.Utility.SerializeDataSet(RealObject as DataSet);
+                 buffer = Core.Mes.Common.Utility.Compress(buffer);
+                 m_RealObject = buffer;
+                 RealObjcetIsDataSet = true;
+
+             }
+             else
+             {
+                 m_RealObject = RealObject;
+                 RealObjcetIsDataSet = false;
+             }
+
+              */
+
+
+
+
+             this.RealObject = RealObject;
+            this.ErrCode = 1;
+            this.ErrMessage = ErrMessage;
+            this.RealDataSet = null;
+        }
+
+        public ReturnObject(object RealObject, int ErrCode)
+        {
+
+
+
+            /*
+              if (RealObject is DataSet)
+              {
+                  byte[] buffer = Core.Mes.Common.Utility.SerializeDataSet(RealObject as DataSet);
+                  buffer = Core.Mes.Common.Utility.Compress(buffer);
+                  m_RealObject = buffer;
+                  RealObjcetIsDataSet = true;
+
+              }
+              else
+              {
+                  m_RealObject = RealObject;
+                  RealObjcetIsDataSet = false;
+              }
+
+               */
+
+
+
+
+             this.RealObject = RealObject;
+            this.ErrCode = ErrCode;
+            this.ErrMessage = "";
+            this.RealDataSet = null;
+        }
+
+        public ReturnObject(object RealObject, int ErrCode, string ErrMessage)
+        {
+
+
+
+
+
+
+            /*
+             if (RealObject is DataSet)
+             {
+                 byte[] buffer = Core.Mes.Common.Utility.SerializeDataSet(RealObject as DataSet);
+                 buffer = Core.Mes.Common.Utility.Compress(buffer);
+                 m_RealObject = buffer;
+                 RealObjcetIsDataSet = true;
+
+             }
+             else
+             {
+                 m_RealObject = RealObject;
+                 RealObjcetIsDataSet = false;
+             }
+
+              */
+
+            this.RealObject = RealObject;
+
+            this.ErrCode = ErrCode;
+            this.ErrMessage = ErrMessage;
+            this.RealDataSet = null;
+        }
+
+    }
+
+    public interface ICommon
+    {
+        ReturnObject MethodHandler(CallingMessage message, ValidateInfo info);
+    }
+
+}
+

+ 202 - 0
.svn/pristine/10/10052c5efc6c1e5f830b0223b677a5dac07a6005.svn-base

@@ -0,0 +1,202 @@
+using System;
+using System.Data;
+using System.Drawing;
+using System.Collections;
+using System.Configuration;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.IO;
+using System.Text;
+
+namespace Core.Mes.ServerManager
+{
+    /// <summary>
+    /// FrmSeverMain 的摘要说明。
+    /// </summary>
+    public class FrmSeverMain : System.Windows.Forms.Form
+    {
+        /// <summary>
+        /// 必需的设计器变量。
+        /// </summary>
+        private System.ComponentModel.Container components = null;
+
+        public FrmSeverMain()
+        {
+            //
+            // Windows 窗体设计器支持所必需的
+            //
+            InitializeComponent();
+
+            //
+            // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
+            //
+        }
+
+        /// <summary>
+        /// 清理所有正在使用的资源。
+        /// </summary>
+        protected override void Dispose(bool disposing)
+        {
+            try
+            {
+                if (disposing)
+                {
+                    if (cMain != null)
+                    {
+                        cMain.Dispose();
+                    }
+                    if (components != null)
+                    {
+                        components.Dispose();
+                    }
+                }
+
+
+                System.GC.Collect();
+                base.Dispose(disposing);
+            }
+            catch
+            {
+ 
+            }
+
+        }
+
+        #region Windows 窗体设计器生成的代码
+        /// <summary>
+        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
+        /// 此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmSeverMain));
+            this.pictureBox1 = new System.Windows.Forms.PictureBox();
+            this.listBox1 = new System.Windows.Forms.ListBox();
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // pictureBox1
+            // 
+            this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+            this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
+            this.pictureBox1.Location = new System.Drawing.Point(0, 0);
+            this.pictureBox1.Name = "pictureBox1";
+            this.pictureBox1.Size = new System.Drawing.Size(480, 112);
+            this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
+            this.pictureBox1.TabIndex = 0;
+            this.pictureBox1.TabStop = false;
+            // 
+            // listBox1
+            // 
+            this.listBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+            this.listBox1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.listBox1.ItemHeight = 12;
+            this.listBox1.Location = new System.Drawing.Point(0, 112);
+            this.listBox1.Name = "listBox1";
+            this.listBox1.Size = new System.Drawing.Size(480, 98);
+            this.listBox1.TabIndex = 1;
+            // 
+            // FrmSeverMain
+            // 
+            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
+            this.ClientSize = new System.Drawing.Size(480, 215);
+            this.Controls.Add(this.listBox1);
+            this.Controls.Add(this.pictureBox1);
+            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+            this.MaximizeBox = false;
+            this.Name = "FrmSeverMain";
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+            this.Text = "应用服务";
+            this.Load += new System.EventHandler(this.FrmSeverMain_Load);
+            this.Closing += new System.ComponentModel.CancelEventHandler(this.FrmSeverMain_Closing);
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+        #endregion
+
+        //[STAThread]
+        //static void Main()
+        //{			
+        //    Application.Run(new FrmSeverMain());
+        //}
+
+        public static AppSettingsReader app;
+        private System.Windows.Forms.PictureBox pictureBox1;
+        private System.Windows.Forms.ListBox listBox1;
+        private ClsServerMain cMain;
+
+        private void FrmSeverMain_Load(object sender, System.EventArgs e)
+        {
+            //==>
+            //if (System.DateTime.Today > new System.DateTime(2007,1,1))	return;
+
+            ApplicationStart();
+            app = new AppSettingsReader();
+            this.pictureBox1.Image = System.Drawing.Image.FromFile(@"Image\登录框.jpg");
+            cMain = new ClsServerMain();
+
+            cMain.ShowLogEvent += new Core.Mes.ServerManager.ClsServerMain.ShowLogDelegate(cMain_ShowLog);
+
+            cMain.InitServerMain();
+        }
+
+        private void cMain_ShowLog(string log)
+        {
+            this.listBox1.Items.Add(log);
+            this.listBox1.SelectedIndex = this.listBox1.Items.Count - 1;
+        }
+
+        private void FrmSeverMain_Closing(object sender, System.ComponentModel.CancelEventArgs e)
+        {
+            if (MessageBox.Show("是否确认退出服务端程序?", "提示", MessageBoxButtons.YesNo,
+                MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.No)
+            {
+                e.Cancel = true;
+            }
+            else
+            {
+                ApplicationExit();
+                Application.Exit();
+                System.Diagnostics.Process.GetCurrentProcess().Kill();
+
+            }
+        }
+
+        private static void ApplicationExit()
+        {
+
+            string path = string.Format(@"{0}/log/Application/{1}.txt", Application.StartupPath, System.DateTime.Now.ToString("yyyy_MM_dd"));
+
+            using (StreamWriter sw = new StreamWriter(path, true, Encoding.UTF8))
+            {
+
+                StringBuilder sbtxt = new StringBuilder();
+                sbtxt.AppendLine("==============================================");
+                sbtxt.AppendLine(string.Format("服务关闭时间:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm::ss")));
+                sbtxt.AppendLine("==============================================");
+                sw.WriteLine(sbtxt.ToString());
+
+            }
+
+
+        }
+        private static void ApplicationStart()
+        {
+            string path = string.Format(@"{0}/log/Application/{1}.txt", Application.StartupPath, System.DateTime.Now.ToString("yyyy_MM_dd"));
+
+            using (StreamWriter sw = new StreamWriter(path, true, Encoding.UTF8))
+            {
+
+                StringBuilder sbtxt = new StringBuilder();
+                sbtxt.AppendLine("==============================================");
+                sbtxt.AppendLine(string.Format("服务开启时间:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm::ss")));
+                sbtxt.AppendLine("==============================================");
+                sw.WriteLine(sbtxt.ToString());
+
+            }
+        }
+    }
+}

+ 156 - 0
.svn/pristine/11/11290dbe369be2676f102f5e39dda9cdf48fa11a.svn-base

@@ -0,0 +1,156 @@
+using System;
+using System.Net;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using Core.Mes.ClientFrameWork;
+
+namespace Core.Mes.ClientPurviewManager
+{
+    public partial class frmReply : Form
+    {
+        string _ID = "", _Creator = "", _Principal = "", _Complete = "";
+
+        public frmReply(string sID, string sComplete, string sCreator, string sPrincipal, string sQuestion)
+        {
+            _ID = sID;
+            _Complete = sComplete;
+            _Creator = sCreator;
+            _Principal = sPrincipal;
+
+            InitializeComponent();
+
+            txtQuestion.Text = sQuestion;
+        }
+
+        void doReply()
+        {
+            if (chbxComplete.Checked == false && txtReplyInfo.Text.Trim() == "")
+            {
+                txtReplyInfo.Focus();
+                MessageBox.Show("请输入回复内容!");
+                return;
+            }
+            string[] sArgs = new string[6];
+            sArgs[0] = _ID;
+            sArgs[1] = ClientCommon._UserInfo.UserName;
+            sArgs[2] = ClientCommon._UserInfo.UserDepName;
+            sArgs[3] = txtReplyInfo.Text.Trim();
+            sArgs[4] = (chbxComplete.Enabled) ? ((chbxComplete.Checked) ? "1" : "0") : "0";
+            sArgs[5] = ClientCommon.GetIp();
+            string err = "";
+            object obj = ClientCommon._RemotingHelp.ExecuteMethod("PurviewManager", "Core.Mes.PurviewManager.QuestionReply", "addReply",
+                new object[] { sArgs },
+                out err);
+            if ((int)obj > 0)
+            {
+                DataSet dset = (DataSet)ultraGrid1.DataSource;
+                dset.Tables[0].Rows.Add(new object[] { _ID, int.Parse(err), sArgs[1], sArgs[3], DateTime.Now, sArgs[5], sArgs[4], sArgs[2] });
+                ultraGrid1.Rows[ultraGrid1.Rows.Count - 1].Activate();
+                foreach (Infragistics.Win.UltraWinGrid.UltraGridRow arow in ultraGrid1.Selected.Rows)
+                    arow.Selected = false;
+
+                _Complete = sArgs[4];
+                ultraToolbarsManager1.Tools["tlbtnReply"].SharedProps.Visible = (_Complete == "0");
+                ultraToolbarsManager1.Tools["tlbtnDelete"].SharedProps.Visible = (_Complete == "0");
+            }
+            else
+                MessageBox.Show(err);
+        }
+
+        void doEdit()
+        {
+        }
+
+        void doDelete()
+        {
+            Infragistics.Win.UltraWinGrid.UltraGridRow arow = ultraGrid1.ActiveRow;
+            if (arow == null)
+                return;
+            if (MessageBox.Show("您确定要删除?", "选择", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) ==
+                DialogResult.No)
+                return;
+            string[] sArgs = new string[2];
+            sArgs[0] = _ID;
+            sArgs[1] = arow.Cells["XH"].Value.ToString();
+            string err = "";
+            object obj = ClientCommon._RemotingHelp.ExecuteMethod("PurviewManager", "Core.Mes.PurviewManager.QuestionReply", "delReply",
+                new object[] { sArgs },
+                out err);
+            if ((int)obj > 0)
+            {
+                int idx = arow.Index;
+                arow.Delete(false);
+                if (idx < ultraGrid1.Rows.Count)
+                {
+                    ultraGrid1.Rows[idx].Activate();
+                }
+                else if (idx == ultraGrid1.Rows.Count && ultraGrid1.Rows.Count > 0)
+                {
+                    ultraGrid1.Rows[idx - 1].Activate();
+                }
+            }
+            else
+                MessageBox.Show(err);
+        }
+
+        private void ultraToolbarsManager1_ToolClick(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
+        {
+            switch (e.Tool.Key)
+            {
+                case "tlbtnReply":    // ButtonTool
+                    doReply();
+                    break;
+
+                case "tlbtnEdit":    // ButtonTool
+                    break;
+
+                case "tlbtnDelete":    // ButtonTool
+                    doDelete();
+                    break;
+
+                case "tlbtnClose":    // ButtonTool
+                    Close();
+                    break;
+
+            }
+        }
+
+        private void frmReply_Load(object sender, EventArgs e)
+        {
+            string err = "";
+            object obj = ClientCommon._RemotingHelp.ExecuteMethod("PurviewManager", "Core.Mes.PurviewManager.QuestionReply", "getReplyData",
+                new object[] { _ID },
+                out err);
+            if (obj != null)
+            {
+                ultraGrid1.DataSource = (DataSet)obj;
+            }
+            ultraToolbarsManager1.Tools["tlbtnReply"].SharedProps.Visible = (_Complete == "0");
+            //ultraToolbarsManager1.Tools["tlbtnEdit"].SharedProps.Visible = (_Complete == "0");
+            ultraToolbarsManager1.Tools["tlbtnDelete"].SharedProps.Visible = (_Complete == "0");
+            chbxComplete.Enabled = (ClientCommon._UserInfo.UserName == _Creator || ClientCommon._UserInfo.UserName == _Principal);
+        }
+
+        private void ultraGrid1_AfterRowActivate(object sender, EventArgs e)
+        {
+            Infragistics.Win.UltraWinGrid.UltraGridRow arow = ultraGrid1.ActiveRow;
+            //ultraToolbarsManager1.Tools["tlbtnEdit"].SharedProps.Enabled = (ClientCommon._UserInfo.UserName == arow.Cells["ANSWERER"].Text.Trim() &&
+            //    arow.Index == ultraGrid1.Rows.Count-1);
+            ultraToolbarsManager1.Tools["tlbtnDelete"].SharedProps.Enabled = (ClientCommon._UserInfo.UserName == arow.Cells["ANSWERER"].Text.Trim() &&
+                arow.Index == ultraGrid1.Rows.Count - 1);
+
+            txtReplyInfo.Text = "";
+            chbxComplete.Checked = false;
+        }
+
+        private void ultraGrid1_DoubleClickRow(object sender, Infragistics.Win.UltraWinGrid.DoubleClickRowEventArgs e)
+        {
+            //txtReplyInfo.Text = e.Row.Cells["REPLYINFO"].Text;
+            //chbxComplete.Checked = (e.Row.Cells["REPLYINFO"].Value.ToString() == "1");
+        }
+    }//class
+}

+ 15 - 0
.svn/pristine/11/1184c59dba528d313ca685459928bf6050f6ecdc.svn-base

@@ -0,0 +1,15 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ProjectView>ProjectFiles</ProjectView>
+    <ReferencePath>E:\code\server\</ReferencePath>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <StartAction>Program</StartAction>
+    <StartProgram>E:\code\Server\Core.Mes.ServerManager.exe</StartProgram>
+    <StartArguments>log</StartArguments>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <StartAction>Program</StartAction>
+    <StartProgram>E:\code\Server\Core.Mes.ServerManager.exe</StartProgram>
+  </PropertyGroup>
+</Project>

+ 1581 - 0
.svn/pristine/12/1246bd157caacbec170e1da330584182083c9300.svn-base

@@ -0,0 +1,1581 @@
+using System;
+using System.Xml;
+using System.Data;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+
+using Core.Mes.ClientFrameWork;
+using Core.Mes.IBaseInterface;
+//using Core.Mes.ServerFrameWork;
+
+using Infragistics.Win.UltraWinGrid;
+using Infragistics.Win.UltraWinTree;
+
+namespace Core.Mes.ClientPurviewManager
+{
+	/// <summary>
+	/// FrmFunction 的摘要说明。
+	/// </summary>
+	public class FrmFunction : Core.Mes.ClientFrameWork.FrmBase
+	{
+		private System.Windows.Forms.Panel panel1;
+		private Infragistics.Win.UltraWinToolbars.UltraToolbarsManager ultraToolbarsManager1;
+		private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Left;
+		private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Right;
+		private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Top;
+		private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Bottom;
+		private System.Windows.Forms.Panel panel2;
+		private Infragistics.Win.Misc.UltraGroupBox ultraGroupBox1;
+		private System.Windows.Forms.Panel panel3;
+		private Infragistics.Win.UltraWinToolbars.UltraToolbarsManager ultraToolbarsManager2;
+		private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel2_Toolbars_Dock_Area_Left;
+		private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel2_Toolbars_Dock_Area_Right;
+		private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel2_Toolbars_Dock_Area_Top;
+		private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel2_Toolbars_Dock_Area_Bottom;
+		private Infragistics.Win.UltraWinGrid.UltraGrid ultraGrid1;
+		private Infragistics.Win.UltraWinTree.UltraTree trDb;
+		private Infragistics.Win.UltraWinTree.UltraTree trFile;
+		private Infragistics.Win.Misc.UltraButton ultraButton1;
+		private Infragistics.Win.Misc.UltraButton ultraButton2;
+		private Infragistics.Win.Misc.UltraButton ultraButton3;
+		private Infragistics.Win.Misc.UltraButton ultraButton4;
+		private Infragistics.Win.Misc.UltraButton ultraButton5;
+		private Infragistics.Win.Misc.UltraButton ultraButton6;
+		private Infragistics.Win.Misc.UltraButton ultraButton7;
+		private Infragistics.Win.Misc.UltraButton ultraButton8;
+		private System.ComponentModel.IContainer components;
+		private DataSet _functionData;
+		private Infragistics.Win.Misc.UltraExpandableGroupBox ultraExpandableGroupBox1;
+		private Infragistics.Win.Misc.UltraExpandableGroupBoxPanel ultraExpandableGroupBoxPanel1;
+		private Infragistics.Win.Misc.UltraLabel ultraLabel1;
+		private Infragistics.Win.Misc.UltraLabel ultraLabel2;
+		private Infragistics.Win.Misc.UltraLabel ultraLabel3;
+		private Infragistics.Win.Misc.UltraLabel ultraLabel4;
+		private Infragistics.Win.Misc.UltraLabel ultraLabel5;
+		private Infragistics.Win.UltraWinEditors.UltraTextEditor ultraTextEditor1;
+		private Infragistics.Win.UltraWinEditors.UltraComboEditor ultraComboEditor1;
+		private Infragistics.Win.UltraWinEditors.UltraTextEditor ultraTextEditor2;
+		private Infragistics.Win.UltraWinEditors.UltraTextEditor ultraTextEditor3;
+		private Infragistics.Win.UltraWinEditors.UltraTextEditor ultraTextEditor4;
+		private string _selectFuncSQL;
+
+		public FrmFunction()
+		{
+			//
+			// Windows 窗体设计器支持所必需的
+			//
+			InitializeComponent();
+
+			//
+			// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
+			//
+		}
+
+		/// <summary>
+		/// 清理所有正在使用的资源。
+		/// </summary>
+		protected override void Dispose( bool disposing )
+		{
+			if( disposing )
+			{
+				if(components != null)
+				{
+					components.Dispose();
+				}
+			}
+			base.Dispose( disposing );
+		}
+
+		#region Windows 窗体设计器生成的代码
+		/// <summary>
+		/// 设计器支持所需的方法 - 不要使用代码编辑器修改
+		/// 此方法的内容。
+		/// </summary>
+		private void InitializeComponent()
+		{
+            this.components = new System.ComponentModel.Container();
+            Infragistics.Win.UltraWinTree.UltraTreeColumnSet ultraTreeColumnSet1 = new Infragistics.Win.UltraWinTree.UltraTreeColumnSet();
+            Infragistics.Win.Appearance appearance1 = new Infragistics.Win.Appearance();
+            Infragistics.Win.UltraWinGrid.UltraGridBand ultraGridBand1 = new Infragistics.Win.UltraWinGrid.UltraGridBand("Band 0", -1);
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn1 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("Column 0");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn2 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("Column 1");
+            Infragistics.Win.Appearance appearance2 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance3 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance4 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance5 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance6 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance7 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance8 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance9 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance10 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance11 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance12 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance13 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance14 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance15 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance16 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance17 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance18 = new Infragistics.Win.Appearance();
+            Infragistics.Win.UltraWinToolbars.UltraToolbar ultraToolbar1 = new Infragistics.Win.UltraWinToolbars.UltraToolbar("Toolbar1");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool1 = new Infragistics.Win.UltraWinToolbars.ButtonTool("all");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool2 = new Infragistics.Win.UltraWinToolbars.ButtonTool("add");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool3 = new Infragistics.Win.UltraWinToolbars.ButtonTool("del");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool4 = new Infragistics.Win.UltraWinToolbars.ButtonTool("save");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool5 = new Infragistics.Win.UltraWinToolbars.ButtonTool("edit");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool6 = new Infragistics.Win.UltraWinToolbars.ButtonTool("exit");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool7 = new Infragistics.Win.UltraWinToolbars.ButtonTool("all");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool8 = new Infragistics.Win.UltraWinToolbars.ButtonTool("add");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool9 = new Infragistics.Win.UltraWinToolbars.ButtonTool("del");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool10 = new Infragistics.Win.UltraWinToolbars.ButtonTool("save");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool11 = new Infragistics.Win.UltraWinToolbars.ButtonTool("edit");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool12 = new Infragistics.Win.UltraWinToolbars.ButtonTool("exit");
+            Infragistics.Win.UltraWinTree.UltraTreeColumnSet ultraTreeColumnSet2 = new Infragistics.Win.UltraWinTree.UltraTreeColumnSet();
+            Infragistics.Win.UltraWinToolbars.UltraToolbar ultraToolbar2 = new Infragistics.Win.UltraWinToolbars.UltraToolbar("Toolbar1");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool13 = new Infragistics.Win.UltraWinToolbars.ButtonTool("open");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool14 = new Infragistics.Win.UltraWinToolbars.ButtonTool("save");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool15 = new Infragistics.Win.UltraWinToolbars.ButtonTool("open");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool16 = new Infragistics.Win.UltraWinToolbars.ButtonTool("save");
+            this.trDb = new Infragistics.Win.UltraWinTree.UltraTree();
+            this.panel1 = new System.Windows.Forms.Panel();
+            this.ultraGrid1 = new Infragistics.Win.UltraWinGrid.UltraGrid();
+            this.ultraExpandableGroupBox1 = new Infragistics.Win.Misc.UltraExpandableGroupBox();
+            this.ultraExpandableGroupBoxPanel1 = new Infragistics.Win.Misc.UltraExpandableGroupBoxPanel();
+            this.ultraTextEditor4 = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultraTextEditor3 = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultraTextEditor2 = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultraComboEditor1 = new Infragistics.Win.UltraWinEditors.UltraComboEditor();
+            this.ultraTextEditor1 = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultraLabel5 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel4 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel3 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel2 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel1 = new Infragistics.Win.Misc.UltraLabel();
+            this._panel1_Toolbars_Dock_Area_Left = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this.ultraToolbarsManager1 = new Infragistics.Win.UltraWinToolbars.UltraToolbarsManager(this.components);
+            this._panel1_Toolbars_Dock_Area_Right = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this._panel1_Toolbars_Dock_Area_Top = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this._panel1_Toolbars_Dock_Area_Bottom = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this.panel2 = new System.Windows.Forms.Panel();
+            this.trFile = new Infragistics.Win.UltraWinTree.UltraTree();
+            this._panel2_Toolbars_Dock_Area_Left = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this.ultraToolbarsManager2 = new Infragistics.Win.UltraWinToolbars.UltraToolbarsManager(this.components);
+            this._panel2_Toolbars_Dock_Area_Right = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this._panel2_Toolbars_Dock_Area_Top = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this._panel2_Toolbars_Dock_Area_Bottom = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this.ultraGroupBox1 = new Infragistics.Win.Misc.UltraGroupBox();
+            this.ultraButton8 = new Infragistics.Win.Misc.UltraButton();
+            this.ultraButton7 = new Infragistics.Win.Misc.UltraButton();
+            this.ultraButton6 = new Infragistics.Win.Misc.UltraButton();
+            this.ultraButton5 = new Infragistics.Win.Misc.UltraButton();
+            this.ultraButton4 = new Infragistics.Win.Misc.UltraButton();
+            this.ultraButton3 = new Infragistics.Win.Misc.UltraButton();
+            this.ultraButton2 = new Infragistics.Win.Misc.UltraButton();
+            this.ultraButton1 = new Infragistics.Win.Misc.UltraButton();
+            this.panel3 = new System.Windows.Forms.Panel();
+            ((System.ComponentModel.ISupportInitialize)(this.trDb)).BeginInit();
+            this.panel1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraGrid1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraExpandableGroupBox1)).BeginInit();
+            this.ultraExpandableGroupBox1.SuspendLayout();
+            this.ultraExpandableGroupBoxPanel1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor4)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor3)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor2)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraComboEditor1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraToolbarsManager1)).BeginInit();
+            this.panel2.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.trFile)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraToolbarsManager2)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraGroupBox1)).BeginInit();
+            this.ultraGroupBox1.SuspendLayout();
+            this.panel3.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // trDb
+            // 
+            this.trDb.ColumnSettings.RootColumnSet = ultraTreeColumnSet1;
+            this.trDb.Dock = System.Windows.Forms.DockStyle.Left;
+            this.trDb.Location = new System.Drawing.Point(0, 0);
+            this.trDb.Name = "trDb";
+            this.trDb.Size = new System.Drawing.Size(168, 555);
+            this.trDb.TabIndex = 0;
+            // 
+            // panel1
+            // 
+            this.panel1.Controls.Add(this.ultraGrid1);
+            this.panel1.Controls.Add(this.ultraExpandableGroupBox1);
+            this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Left);
+            this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Right);
+            this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Top);
+            this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Bottom);
+            this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.panel1.Location = new System.Drawing.Point(168, 0);
+            this.panel1.Name = "panel1";
+            this.panel1.Size = new System.Drawing.Size(584, 320);
+            this.panel1.TabIndex = 1;
+            // 
+            // ultraGrid1
+            // 
+            appearance1.BackColor = System.Drawing.SystemColors.Window;
+            appearance1.BorderColor = System.Drawing.SystemColors.InactiveCaption;
+            this.ultraGrid1.DisplayLayout.Appearance = appearance1;
+            ultraGridColumn1.Header.VisiblePosition = 0;
+            ultraGridColumn2.Header.VisiblePosition = 1;
+            ultraGridBand1.Columns.AddRange(new object[] {
+            ultraGridColumn1,
+            ultraGridColumn2});
+            appearance2.BackColor = System.Drawing.Color.LightSteelBlue;
+            ultraGridBand1.Override.RowSelectorAppearance = appearance2;
+            ultraGridBand1.Override.RowSelectorHeaderStyle = Infragistics.Win.UltraWinGrid.RowSelectorHeaderStyle.SeparateElement;
+            ultraGridBand1.Override.RowSelectorNumberStyle = Infragistics.Win.UltraWinGrid.RowSelectorNumberStyle.RowIndex;
+            ultraGridBand1.Override.RowSelectors = Infragistics.Win.DefaultableBoolean.True;
+            this.ultraGrid1.DisplayLayout.BandsSerializer.Add(ultraGridBand1);
+            this.ultraGrid1.DisplayLayout.CaptionVisible = Infragistics.Win.DefaultableBoolean.False;
+            appearance3.BackColor = System.Drawing.SystemColors.ActiveBorder;
+            appearance3.BackColor2 = System.Drawing.SystemColors.ControlDark;
+            appearance3.BackGradientStyle = Infragistics.Win.GradientStyle.Vertical;
+            appearance3.BorderColor = System.Drawing.SystemColors.Window;
+            this.ultraGrid1.DisplayLayout.GroupByBox.Appearance = appearance3;
+            appearance4.ForeColor = System.Drawing.SystemColors.GrayText;
+            this.ultraGrid1.DisplayLayout.GroupByBox.BandLabelAppearance = appearance4;
+            this.ultraGrid1.DisplayLayout.GroupByBox.BorderStyle = Infragistics.Win.UIElementBorderStyle.Solid;
+            this.ultraGrid1.DisplayLayout.GroupByBox.Hidden = true;
+            appearance5.BackColor = System.Drawing.SystemColors.ControlLightLight;
+            appearance5.BackColor2 = System.Drawing.SystemColors.Control;
+            appearance5.BackGradientStyle = Infragistics.Win.GradientStyle.Horizontal;
+            appearance5.ForeColor = System.Drawing.SystemColors.GrayText;
+            this.ultraGrid1.DisplayLayout.GroupByBox.PromptAppearance = appearance5;
+            this.ultraGrid1.DisplayLayout.MaxColScrollRegions = 1;
+            this.ultraGrid1.DisplayLayout.MaxRowScrollRegions = 1;
+            appearance6.BackColor = System.Drawing.SystemColors.Window;
+            appearance6.ForeColor = System.Drawing.SystemColors.ControlText;
+            this.ultraGrid1.DisplayLayout.Override.ActiveCellAppearance = appearance6;
+            appearance7.BackColor = System.Drawing.SystemColors.Highlight;
+            appearance7.ForeColor = System.Drawing.SystemColors.HighlightText;
+            this.ultraGrid1.DisplayLayout.Override.ActiveRowAppearance = appearance7;
+            this.ultraGrid1.DisplayLayout.Override.BorderStyleCell = Infragistics.Win.UIElementBorderStyle.RaisedSoft;
+            this.ultraGrid1.DisplayLayout.Override.BorderStyleRow = Infragistics.Win.UIElementBorderStyle.Dotted;
+            appearance8.BackColor = System.Drawing.SystemColors.Window;
+            this.ultraGrid1.DisplayLayout.Override.CardAreaAppearance = appearance8;
+            appearance9.BorderColor = System.Drawing.Color.Silver;
+            appearance9.TextTrimming = Infragistics.Win.TextTrimming.EllipsisCharacter;
+            this.ultraGrid1.DisplayLayout.Override.CellAppearance = appearance9;
+            this.ultraGrid1.DisplayLayout.Override.CellClickAction = Infragistics.Win.UltraWinGrid.CellClickAction.EditAndSelectText;
+            this.ultraGrid1.DisplayLayout.Override.CellPadding = 0;
+            appearance10.BackColor = System.Drawing.SystemColors.Control;
+            appearance10.BackColor2 = System.Drawing.SystemColors.ControlDark;
+            appearance10.BackGradientAlignment = Infragistics.Win.GradientAlignment.Element;
+            appearance10.BackGradientStyle = Infragistics.Win.GradientStyle.Horizontal;
+            appearance10.BorderColor = System.Drawing.SystemColors.Window;
+            this.ultraGrid1.DisplayLayout.Override.GroupByRowAppearance = appearance10;
+            appearance11.BackColor = System.Drawing.Color.LightSteelBlue;
+            appearance11.TextHAlign = Infragistics.Win.HAlign.Center;
+            this.ultraGrid1.DisplayLayout.Override.HeaderAppearance = appearance11;
+            this.ultraGrid1.DisplayLayout.Override.HeaderClickAction = Infragistics.Win.UltraWinGrid.HeaderClickAction.SortMulti;
+            this.ultraGrid1.DisplayLayout.Override.HeaderStyle = Infragistics.Win.HeaderStyle.Standard;
+            this.ultraGrid1.DisplayLayout.Override.MinRowHeight = 21;
+            appearance12.BackColor = System.Drawing.SystemColors.Window;
+            appearance12.BorderColor = System.Drawing.Color.Silver;
+            this.ultraGrid1.DisplayLayout.Override.RowAppearance = appearance12;
+            this.ultraGrid1.DisplayLayout.Override.RowSelectors = Infragistics.Win.DefaultableBoolean.False;
+            appearance13.BackColor = System.Drawing.SystemColors.ControlLight;
+            this.ultraGrid1.DisplayLayout.Override.TemplateAddRowAppearance = appearance13;
+            this.ultraGrid1.DisplayLayout.ScrollBounds = Infragistics.Win.UltraWinGrid.ScrollBounds.ScrollToFill;
+            this.ultraGrid1.DisplayLayout.ScrollStyle = Infragistics.Win.UltraWinGrid.ScrollStyle.Immediate;
+            this.ultraGrid1.DisplayLayout.ViewStyleBand = Infragistics.Win.UltraWinGrid.ViewStyleBand.OutlookGroupBy;
+            this.ultraGrid1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.ultraGrid1.Location = new System.Drawing.Point(0, 50);
+            this.ultraGrid1.Name = "ultraGrid1";
+            this.ultraGrid1.Size = new System.Drawing.Size(584, 182);
+            this.ultraGrid1.TabIndex = 4;
+            this.ultraGrid1.Text = "ultraGrid1";
+            this.ultraGrid1.AfterRowActivate += new System.EventHandler(this.ultraGrid1_AfterRowActivate);
+            // 
+            // ultraExpandableGroupBox1
+            // 
+            this.ultraExpandableGroupBox1.Controls.Add(this.ultraExpandableGroupBoxPanel1);
+            this.ultraExpandableGroupBox1.Dock = System.Windows.Forms.DockStyle.Bottom;
+            this.ultraExpandableGroupBox1.ExpandedSize = new System.Drawing.Size(584, 88);
+            this.ultraExpandableGroupBox1.Location = new System.Drawing.Point(0, 232);
+            this.ultraExpandableGroupBox1.Name = "ultraExpandableGroupBox1";
+            this.ultraExpandableGroupBox1.Size = new System.Drawing.Size(584, 88);
+            this.ultraExpandableGroupBox1.SupportThemes = false;
+            this.ultraExpandableGroupBox1.TabIndex = 9;
+            this.ultraExpandableGroupBox1.Text = "编辑区域";
+            // 
+            // ultraExpandableGroupBoxPanel1
+            // 
+            this.ultraExpandableGroupBoxPanel1.Controls.Add(this.ultraTextEditor4);
+            this.ultraExpandableGroupBoxPanel1.Controls.Add(this.ultraTextEditor3);
+            this.ultraExpandableGroupBoxPanel1.Controls.Add(this.ultraTextEditor2);
+            this.ultraExpandableGroupBoxPanel1.Controls.Add(this.ultraComboEditor1);
+            this.ultraExpandableGroupBoxPanel1.Controls.Add(this.ultraTextEditor1);
+            this.ultraExpandableGroupBoxPanel1.Controls.Add(this.ultraLabel5);
+            this.ultraExpandableGroupBoxPanel1.Controls.Add(this.ultraLabel4);
+            this.ultraExpandableGroupBoxPanel1.Controls.Add(this.ultraLabel3);
+            this.ultraExpandableGroupBoxPanel1.Controls.Add(this.ultraLabel2);
+            this.ultraExpandableGroupBoxPanel1.Controls.Add(this.ultraLabel1);
+            this.ultraExpandableGroupBoxPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.ultraExpandableGroupBoxPanel1.Location = new System.Drawing.Point(3, 19);
+            this.ultraExpandableGroupBoxPanel1.Name = "ultraExpandableGroupBoxPanel1";
+            this.ultraExpandableGroupBoxPanel1.Size = new System.Drawing.Size(578, 66);
+            this.ultraExpandableGroupBoxPanel1.TabIndex = 0;
+            // 
+            // ultraTextEditor4
+            // 
+            appearance14.BackColor = System.Drawing.Color.LightCyan;
+            this.ultraTextEditor4.Appearance = appearance14;
+            this.ultraTextEditor4.AutoSize = true;
+            this.ultraTextEditor4.Location = new System.Drawing.Point(432, 40);
+            this.ultraTextEditor4.Name = "ultraTextEditor4";
+            this.ultraTextEditor4.Size = new System.Drawing.Size(104, 21);
+            this.ultraTextEditor4.TabIndex = 10;
+            // 
+            // ultraTextEditor3
+            // 
+            appearance15.BackColor = System.Drawing.Color.LightCyan;
+            this.ultraTextEditor3.Appearance = appearance15;
+            this.ultraTextEditor3.AutoSize = true;
+            this.ultraTextEditor3.Location = new System.Drawing.Point(256, 40);
+            this.ultraTextEditor3.Name = "ultraTextEditor3";
+            this.ultraTextEditor3.Size = new System.Drawing.Size(104, 21);
+            this.ultraTextEditor3.TabIndex = 9;
+            // 
+            // ultraTextEditor2
+            // 
+            appearance16.BackColor = System.Drawing.Color.LightCyan;
+            this.ultraTextEditor2.Appearance = appearance16;
+            this.ultraTextEditor2.AutoSize = true;
+            this.ultraTextEditor2.Location = new System.Drawing.Point(80, 40);
+            this.ultraTextEditor2.Name = "ultraTextEditor2";
+            this.ultraTextEditor2.Size = new System.Drawing.Size(96, 21);
+            this.ultraTextEditor2.TabIndex = 8;
+            // 
+            // ultraComboEditor1
+            // 
+            appearance17.BackColor = System.Drawing.Color.LightCyan;
+            this.ultraComboEditor1.Appearance = appearance17;
+            this.ultraComboEditor1.AutoSize = true;
+            this.ultraComboEditor1.Location = new System.Drawing.Point(256, 8);
+            this.ultraComboEditor1.Name = "ultraComboEditor1";
+            this.ultraComboEditor1.Size = new System.Drawing.Size(104, 21);
+            this.ultraComboEditor1.TabIndex = 7;
+            // 
+            // ultraTextEditor1
+            // 
+            appearance18.BackColor = System.Drawing.Color.LightCyan;
+            this.ultraTextEditor1.Appearance = appearance18;
+            this.ultraTextEditor1.AutoSize = true;
+            this.ultraTextEditor1.Location = new System.Drawing.Point(80, 6);
+            this.ultraTextEditor1.Name = "ultraTextEditor1";
+            this.ultraTextEditor1.Size = new System.Drawing.Size(96, 21);
+            this.ultraTextEditor1.TabIndex = 6;
+            // 
+            // ultraLabel5
+            // 
+            this.ultraLabel5.Location = new System.Drawing.Point(376, 42);
+            this.ultraLabel5.Name = "ultraLabel5";
+            this.ultraLabel5.Size = new System.Drawing.Size(56, 16);
+            this.ultraLabel5.TabIndex = 4;
+            this.ultraLabel5.Text = "图标名称";
+            // 
+            // ultraLabel4
+            // 
+            this.ultraLabel4.Location = new System.Drawing.Point(192, 42);
+            this.ultraLabel4.Name = "ultraLabel4";
+            this.ultraLabel4.Size = new System.Drawing.Size(56, 16);
+            this.ultraLabel4.TabIndex = 3;
+            this.ultraLabel4.Text = "程序集名";
+            // 
+            // ultraLabel3
+            // 
+            this.ultraLabel3.Location = new System.Drawing.Point(32, 40);
+            this.ultraLabel3.Name = "ultraLabel3";
+            this.ultraLabel3.Size = new System.Drawing.Size(32, 16);
+            this.ultraLabel3.TabIndex = 2;
+            this.ultraLabel3.Text = "类名";
+            // 
+            // ultraLabel2
+            // 
+            this.ultraLabel2.Location = new System.Drawing.Point(192, 16);
+            this.ultraLabel2.Name = "ultraLabel2";
+            this.ultraLabel2.Size = new System.Drawing.Size(56, 16);
+            this.ultraLabel2.TabIndex = 1;
+            this.ultraLabel2.Text = "功能名称";
+            // 
+            // ultraLabel1
+            // 
+            this.ultraLabel1.Location = new System.Drawing.Point(16, 16);
+            this.ultraLabel1.Name = "ultraLabel1";
+            this.ultraLabel1.Size = new System.Drawing.Size(56, 16);
+            this.ultraLabel1.TabIndex = 0;
+            this.ultraLabel1.Text = "功能编码";
+            // 
+            // _panel1_Toolbars_Dock_Area_Left
+            // 
+            this._panel1_Toolbars_Dock_Area_Left.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._panel1_Toolbars_Dock_Area_Left.BackColor = System.Drawing.SystemColors.Control;
+            this._panel1_Toolbars_Dock_Area_Left.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Left;
+            this._panel1_Toolbars_Dock_Area_Left.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._panel1_Toolbars_Dock_Area_Left.Location = new System.Drawing.Point(0, 50);
+            this._panel1_Toolbars_Dock_Area_Left.Name = "_panel1_Toolbars_Dock_Area_Left";
+            this._panel1_Toolbars_Dock_Area_Left.Size = new System.Drawing.Size(0, 270);
+            this._panel1_Toolbars_Dock_Area_Left.ToolbarsManager = this.ultraToolbarsManager1;
+            // 
+            // ultraToolbarsManager1
+            // 
+            this.ultraToolbarsManager1.DesignerFlags = 1;
+            this.ultraToolbarsManager1.DockWithinContainer = this.panel1;
+            this.ultraToolbarsManager1.ShowQuickCustomizeButton = false;
+            this.ultraToolbarsManager1.Style = Infragistics.Win.UltraWinToolbars.ToolbarStyle.VisualStudio2005;
+            ultraToolbar1.DockedColumn = 0;
+            ultraToolbar1.DockedRow = 0;
+            ultraToolbar1.Text = "Toolbar1";
+            buttonTool1.InstanceProps.IsFirstInGroup = true;
+            buttonTool2.InstanceProps.IsFirstInGroup = true;
+            buttonTool3.InstanceProps.IsFirstInGroup = true;
+            buttonTool4.InstanceProps.IsFirstInGroup = true;
+            buttonTool5.InstanceProps.IsFirstInGroup = true;
+            buttonTool6.InstanceProps.IsFirstInGroup = true;
+            ultraToolbar1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] {
+            buttonTool1,
+            buttonTool2,
+            buttonTool3,
+            buttonTool4,
+            buttonTool5,
+            buttonTool6});
+            this.ultraToolbarsManager1.Toolbars.AddRange(new Infragistics.Win.UltraWinToolbars.UltraToolbar[] {
+            ultraToolbar1});
+            buttonTool7.SharedProps.Caption = "全部(&L)";
+            buttonTool7.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            buttonTool7.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlL;
+            buttonTool8.SharedProps.Caption = "新增(&A)";
+            buttonTool8.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            buttonTool8.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlA;
+            buttonTool9.SharedProps.Caption = "删除(&D)";
+            buttonTool9.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            buttonTool9.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlD;
+            buttonTool10.SharedProps.Caption = "保存(&S)";
+            buttonTool10.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            buttonTool10.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlS;
+            buttonTool10.SharedProps.Visible = false;
+            buttonTool11.SharedProps.Caption = "修改(&U)";
+            buttonTool11.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            buttonTool11.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlU;
+            buttonTool12.SharedProps.Caption = "关闭(&E)";
+            buttonTool12.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            buttonTool12.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlE;
+            this.ultraToolbarsManager1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] {
+            buttonTool7,
+            buttonTool8,
+            buttonTool9,
+            buttonTool10,
+            buttonTool11,
+            buttonTool12});
+            this.ultraToolbarsManager1.ToolClick += new Infragistics.Win.UltraWinToolbars.ToolClickEventHandler(this.ultraToolbarsManager1_ToolClick);
+            // 
+            // _panel1_Toolbars_Dock_Area_Right
+            // 
+            this._panel1_Toolbars_Dock_Area_Right.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._panel1_Toolbars_Dock_Area_Right.BackColor = System.Drawing.SystemColors.Control;
+            this._panel1_Toolbars_Dock_Area_Right.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Right;
+            this._panel1_Toolbars_Dock_Area_Right.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._panel1_Toolbars_Dock_Area_Right.Location = new System.Drawing.Point(584, 50);
+            this._panel1_Toolbars_Dock_Area_Right.Name = "_panel1_Toolbars_Dock_Area_Right";
+            this._panel1_Toolbars_Dock_Area_Right.Size = new System.Drawing.Size(0, 270);
+            this._panel1_Toolbars_Dock_Area_Right.ToolbarsManager = this.ultraToolbarsManager1;
+            // 
+            // _panel1_Toolbars_Dock_Area_Top
+            // 
+            this._panel1_Toolbars_Dock_Area_Top.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._panel1_Toolbars_Dock_Area_Top.BackColor = System.Drawing.SystemColors.Control;
+            this._panel1_Toolbars_Dock_Area_Top.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Top;
+            this._panel1_Toolbars_Dock_Area_Top.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._panel1_Toolbars_Dock_Area_Top.Location = new System.Drawing.Point(0, 0);
+            this._panel1_Toolbars_Dock_Area_Top.Name = "_panel1_Toolbars_Dock_Area_Top";
+            this._panel1_Toolbars_Dock_Area_Top.Size = new System.Drawing.Size(584, 50);
+            this._panel1_Toolbars_Dock_Area_Top.ToolbarsManager = this.ultraToolbarsManager1;
+            // 
+            // _panel1_Toolbars_Dock_Area_Bottom
+            // 
+            this._panel1_Toolbars_Dock_Area_Bottom.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._panel1_Toolbars_Dock_Area_Bottom.BackColor = System.Drawing.SystemColors.Control;
+            this._panel1_Toolbars_Dock_Area_Bottom.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Bottom;
+            this._panel1_Toolbars_Dock_Area_Bottom.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._panel1_Toolbars_Dock_Area_Bottom.Location = new System.Drawing.Point(0, 320);
+            this._panel1_Toolbars_Dock_Area_Bottom.Name = "_panel1_Toolbars_Dock_Area_Bottom";
+            this._panel1_Toolbars_Dock_Area_Bottom.Size = new System.Drawing.Size(584, 0);
+            this._panel1_Toolbars_Dock_Area_Bottom.ToolbarsManager = this.ultraToolbarsManager1;
+            // 
+            // panel2
+            // 
+            this.panel2.Controls.Add(this.trFile);
+            this.panel2.Controls.Add(this._panel2_Toolbars_Dock_Area_Left);
+            this.panel2.Controls.Add(this._panel2_Toolbars_Dock_Area_Right);
+            this.panel2.Controls.Add(this._panel2_Toolbars_Dock_Area_Top);
+            this.panel2.Controls.Add(this._panel2_Toolbars_Dock_Area_Bottom);
+            this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.panel2.Location = new System.Drawing.Point(128, 0);
+            this.panel2.Name = "panel2";
+            this.panel2.Size = new System.Drawing.Size(456, 235);
+            this.panel2.TabIndex = 2;
+            // 
+            // trFile
+            // 
+            this.trFile.ColumnSettings.RootColumnSet = ultraTreeColumnSet2;
+            this.trFile.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.trFile.Location = new System.Drawing.Point(0, 22);
+            this.trFile.Name = "trFile";
+            this.trFile.Size = new System.Drawing.Size(456, 213);
+            this.trFile.TabIndex = 0;
+            // 
+            // _panel2_Toolbars_Dock_Area_Left
+            // 
+            this._panel2_Toolbars_Dock_Area_Left.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._panel2_Toolbars_Dock_Area_Left.BackColor = System.Drawing.SystemColors.Control;
+            this._panel2_Toolbars_Dock_Area_Left.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Left;
+            this._panel2_Toolbars_Dock_Area_Left.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._panel2_Toolbars_Dock_Area_Left.Location = new System.Drawing.Point(0, 22);
+            this._panel2_Toolbars_Dock_Area_Left.Name = "_panel2_Toolbars_Dock_Area_Left";
+            this._panel2_Toolbars_Dock_Area_Left.Size = new System.Drawing.Size(0, 213);
+            this._panel2_Toolbars_Dock_Area_Left.ToolbarsManager = this.ultraToolbarsManager2;
+            // 
+            // ultraToolbarsManager2
+            // 
+            this.ultraToolbarsManager2.DesignerFlags = 1;
+            this.ultraToolbarsManager2.DockWithinContainer = this.panel2;
+            this.ultraToolbarsManager2.ShowQuickCustomizeButton = false;
+            ultraToolbar2.DockedColumn = 0;
+            ultraToolbar2.DockedRow = 0;
+            ultraToolbar2.Text = "Toolbar1";
+            buttonTool13.InstanceProps.IsFirstInGroup = true;
+            buttonTool14.InstanceProps.IsFirstInGroup = true;
+            ultraToolbar2.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] {
+            buttonTool13,
+            buttonTool14});
+            this.ultraToolbarsManager2.Toolbars.AddRange(new Infragistics.Win.UltraWinToolbars.UltraToolbar[] {
+            ultraToolbar2});
+            buttonTool15.SharedProps.Caption = "打开(&O)";
+            buttonTool15.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            buttonTool15.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlO;
+            buttonTool16.SharedProps.Caption = "保存(&S)";
+            buttonTool16.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            buttonTool16.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlS;
+            this.ultraToolbarsManager2.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] {
+            buttonTool15,
+            buttonTool16});
+            this.ultraToolbarsManager2.ToolClick += new Infragistics.Win.UltraWinToolbars.ToolClickEventHandler(this.ultraToolbarsManager2_ToolClick);
+            // 
+            // _panel2_Toolbars_Dock_Area_Right
+            // 
+            this._panel2_Toolbars_Dock_Area_Right.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._panel2_Toolbars_Dock_Area_Right.BackColor = System.Drawing.SystemColors.Control;
+            this._panel2_Toolbars_Dock_Area_Right.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Right;
+            this._panel2_Toolbars_Dock_Area_Right.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._panel2_Toolbars_Dock_Area_Right.Location = new System.Drawing.Point(456, 22);
+            this._panel2_Toolbars_Dock_Area_Right.Name = "_panel2_Toolbars_Dock_Area_Right";
+            this._panel2_Toolbars_Dock_Area_Right.Size = new System.Drawing.Size(0, 213);
+            this._panel2_Toolbars_Dock_Area_Right.ToolbarsManager = this.ultraToolbarsManager2;
+            // 
+            // _panel2_Toolbars_Dock_Area_Top
+            // 
+            this._panel2_Toolbars_Dock_Area_Top.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._panel2_Toolbars_Dock_Area_Top.BackColor = System.Drawing.SystemColors.Control;
+            this._panel2_Toolbars_Dock_Area_Top.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Top;
+            this._panel2_Toolbars_Dock_Area_Top.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._panel2_Toolbars_Dock_Area_Top.Location = new System.Drawing.Point(0, 0);
+            this._panel2_Toolbars_Dock_Area_Top.Name = "_panel2_Toolbars_Dock_Area_Top";
+            this._panel2_Toolbars_Dock_Area_Top.Size = new System.Drawing.Size(456, 22);
+            this._panel2_Toolbars_Dock_Area_Top.ToolbarsManager = this.ultraToolbarsManager2;
+            // 
+            // _panel2_Toolbars_Dock_Area_Bottom
+            // 
+            this._panel2_Toolbars_Dock_Area_Bottom.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._panel2_Toolbars_Dock_Area_Bottom.BackColor = System.Drawing.SystemColors.Control;
+            this._panel2_Toolbars_Dock_Area_Bottom.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Bottom;
+            this._panel2_Toolbars_Dock_Area_Bottom.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._panel2_Toolbars_Dock_Area_Bottom.Location = new System.Drawing.Point(0, 235);
+            this._panel2_Toolbars_Dock_Area_Bottom.Name = "_panel2_Toolbars_Dock_Area_Bottom";
+            this._panel2_Toolbars_Dock_Area_Bottom.Size = new System.Drawing.Size(456, 0);
+            this._panel2_Toolbars_Dock_Area_Bottom.ToolbarsManager = this.ultraToolbarsManager2;
+            // 
+            // ultraGroupBox1
+            // 
+            this.ultraGroupBox1.Controls.Add(this.ultraButton8);
+            this.ultraGroupBox1.Controls.Add(this.ultraButton7);
+            this.ultraGroupBox1.Controls.Add(this.ultraButton6);
+            this.ultraGroupBox1.Controls.Add(this.ultraButton5);
+            this.ultraGroupBox1.Controls.Add(this.ultraButton4);
+            this.ultraGroupBox1.Controls.Add(this.ultraButton3);
+            this.ultraGroupBox1.Controls.Add(this.ultraButton2);
+            this.ultraGroupBox1.Controls.Add(this.ultraButton1);
+            this.ultraGroupBox1.Dock = System.Windows.Forms.DockStyle.Left;
+            this.ultraGroupBox1.Location = new System.Drawing.Point(0, 0);
+            this.ultraGroupBox1.Name = "ultraGroupBox1";
+            this.ultraGroupBox1.Size = new System.Drawing.Size(128, 235);
+            this.ultraGroupBox1.SupportThemes = false;
+            this.ultraGroupBox1.TabIndex = 3;
+            this.ultraGroupBox1.Text = "控制区域";
+            this.ultraGroupBox1.Click += new System.EventHandler(this.ultraGroupBox1_Click);
+            // 
+            // ultraButton8
+            // 
+            this.ultraButton8.Location = new System.Drawing.Point(72, 176);
+            this.ultraButton8.Name = "ultraButton8";
+            this.ultraButton8.Size = new System.Drawing.Size(40, 23);
+            this.ultraButton8.TabIndex = 7;
+            this.ultraButton8.Text = "右";
+            this.ultraButton8.Click += new System.EventHandler(this.ultraButton8_Click);
+            // 
+            // ultraButton7
+            // 
+            this.ultraButton7.Location = new System.Drawing.Point(40, 200);
+            this.ultraButton7.Name = "ultraButton7";
+            this.ultraButton7.Size = new System.Drawing.Size(40, 23);
+            this.ultraButton7.TabIndex = 6;
+            this.ultraButton7.Text = "下";
+            this.ultraButton7.Click += new System.EventHandler(this.ultraButton7_Click);
+            // 
+            // ultraButton6
+            // 
+            this.ultraButton6.Location = new System.Drawing.Point(40, 152);
+            this.ultraButton6.Name = "ultraButton6";
+            this.ultraButton6.Size = new System.Drawing.Size(40, 23);
+            this.ultraButton6.TabIndex = 5;
+            this.ultraButton6.Text = "上";
+            this.ultraButton6.Click += new System.EventHandler(this.ultraButton6_Click);
+            // 
+            // ultraButton5
+            // 
+            this.ultraButton5.Location = new System.Drawing.Point(8, 176);
+            this.ultraButton5.Name = "ultraButton5";
+            this.ultraButton5.Size = new System.Drawing.Size(40, 23);
+            this.ultraButton5.TabIndex = 4;
+            this.ultraButton5.Text = "左";
+            this.ultraButton5.Click += new System.EventHandler(this.ultraButton5_Click);
+            // 
+            // ultraButton4
+            // 
+            this.ultraButton4.Location = new System.Drawing.Point(24, 120);
+            this.ultraButton4.Name = "ultraButton4";
+            this.ultraButton4.Size = new System.Drawing.Size(75, 23);
+            this.ultraButton4.TabIndex = 3;
+            this.ultraButton4.Text = "新增子";
+            this.ultraButton4.Click += new System.EventHandler(this.ultraButton4_Click);
+            // 
+            // ultraButton3
+            // 
+            this.ultraButton3.Location = new System.Drawing.Point(24, 96);
+            this.ultraButton3.Name = "ultraButton3";
+            this.ultraButton3.Size = new System.Drawing.Size(75, 23);
+            this.ultraButton3.TabIndex = 2;
+            this.ultraButton3.Text = "新增同";
+            this.ultraButton3.Click += new System.EventHandler(this.ultraButton3_Click);
+            // 
+            // ultraButton2
+            // 
+            this.ultraButton2.Location = new System.Drawing.Point(24, 72);
+            this.ultraButton2.Name = "ultraButton2";
+            this.ultraButton2.Size = new System.Drawing.Size(75, 23);
+            this.ultraButton2.TabIndex = 1;
+            this.ultraButton2.Text = "移除";
+            this.ultraButton2.Click += new System.EventHandler(this.ultraButton2_Click);
+            // 
+            // ultraButton1
+            // 
+            this.ultraButton1.Location = new System.Drawing.Point(24, 48);
+            this.ultraButton1.Name = "ultraButton1";
+            this.ultraButton1.Size = new System.Drawing.Size(75, 23);
+            this.ultraButton1.TabIndex = 0;
+            this.ultraButton1.Text = "选择";
+            this.ultraButton1.Click += new System.EventHandler(this.ultraButton1_Click);
+            // 
+            // panel3
+            // 
+            this.panel3.Controls.Add(this.panel2);
+            this.panel3.Controls.Add(this.ultraGroupBox1);
+            this.panel3.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.panel3.Location = new System.Drawing.Point(168, 320);
+            this.panel3.Name = "panel3";
+            this.panel3.Size = new System.Drawing.Size(584, 235);
+            this.panel3.TabIndex = 4;
+            // 
+            // FrmFunction
+            // 
+            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
+            this.ClientSize = new System.Drawing.Size(752, 555);
+            this.Controls.Add(this.panel3);
+            this.Controls.Add(this.panel1);
+            this.Controls.Add(this.trDb);
+            this.Name = "FrmFunction";
+            this.Text = "权限文件维护";
+            this.WindowState = System.Windows.Forms.FormWindowState.Normal;
+            this.Load += new System.EventHandler(this.FrmFunction_Load);
+            ((System.ComponentModel.ISupportInitialize)(this.trDb)).EndInit();
+            this.panel1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.ultraGrid1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraExpandableGroupBox1)).EndInit();
+            this.ultraExpandableGroupBox1.ResumeLayout(false);
+            this.ultraExpandableGroupBoxPanel1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor4)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor3)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor2)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraComboEditor1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraToolbarsManager1)).EndInit();
+            this.panel2.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.trFile)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraToolbarsManager2)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraGroupBox1)).EndInit();
+            this.ultraGroupBox1.ResumeLayout(false);
+            this.panel3.ResumeLayout(false);
+            this.ResumeLayout(false);
+
+		}
+		#endregion
+
+		private void FrmFunction_Load(object sender, System.EventArgs e)
+		{
+			GetTrDBdata("");
+			InCom();
+			InitTrDB();
+			InitDbGrid();
+			this.trDb.AfterSelect += new Infragistics.Win.UltraWinTree.AfterNodeSelectEventHandler(ultraTree1_AfterSelect);
+			if (this.trDb.Nodes.Count > 0)
+				this.trDb.Nodes[0].Selected = true;
+		}
+		#region "	InitDbTree	"
+
+		private void InitTrDB()
+		{
+			try
+			{
+				if (_functionData != null)
+				{
+					if (this.trDb.Nodes.Count > 0)
+					{
+						try
+						{
+							RemoveAllTreeNode(this.trDb);
+						}
+						catch
+						{
+							RemoveAllTreeNode(this.trDb);
+						}
+					}
+					TreeFillData1( _functionData.Tables[0]);
+					this.trDb.ExpandAll();
+				}
+			}
+			catch //(Exception ex)
+			{
+		//		CoreMesLogger.log(this.GetType()).Error(ex.Message);
+			}
+		}
+		private void RemoveAllTreeNode(UltraTree ut)
+		{
+			int count = ut.Nodes.Count ;
+				
+			for (int i = count -1; i >= 0 ; i--)
+			{
+				ut.Nodes[i].Remove();
+			}
+		}
+		//==========================================================
+		// 产线类型
+		//==========================================================
+		private void TreeFillData1(DataTable dt)
+		{
+			DataRow[] drs = dt.Select("len(FUNCTIONID) = 2");
+			
+			foreach(DataRow dr in drs)
+			{
+				UltraTreeNode tn = new UltraTreeNode();
+				tn.Text = dr["FUNCTIONNAME"].ToString();
+				tn.Key  = dr["FUNCTIONID"].ToString();
+				tn.Tag  = dr["IMAGENAME"].ToString();
+				TreeFillData2(dt, dr["FUNCTIONID"].ToString(), tn);
+
+				this.trDb.Nodes.Add(tn);
+			}
+		}
+		//==========================================================
+		// 产线编号
+		//==========================================================
+		private void TreeFillData2(DataTable dt, string str, UltraTreeNode tnd)
+		{
+			DataRow[] drs = dt.Select("len(FUNCTIONID) = 4 and substring(FUNCTIONID,1,2) = '" + str + "'");
+			foreach(DataRow dr in drs)
+			{
+				UltraTreeNode tn = new UltraTreeNode();
+				tn.Text = dr["FUNCTIONNAME"].ToString();
+				tn.Key  = dr["FUNCTIONID"].ToString();
+				tn.Tag  = dr["IMAGENAME"].ToString();
+				TreeFillData3(dt, dr["FUNCTIONID"].ToString(), tn);
+
+				tnd.Nodes.Add(tn);
+			}
+		}
+		//==========================================================
+		// 车间编码
+		//==========================================================
+		private void TreeFillData3(DataTable dt, string str, UltraTreeNode tnd)
+		{
+			DataRow[] drs = dt.Select("len(FUNCTIONID) = 6 and substring(FUNCTIONID,1,4) = '" + str + "'");
+			foreach(DataRow dr in drs)
+			{
+				UltraTreeNode tn = new UltraTreeNode();
+				tn.Text = dr["FUNCTIONNAME"].ToString();
+				tn.Key  = dr["FUNCTIONID"].ToString();
+				tn.Tag  = dr["IMAGENAME"].ToString();
+				
+				tnd.Nodes.Add(tn);
+			}
+		}
+		private void GetTrDBdata(string str)
+		{
+			try
+			{
+				CallingMessage par = new CallingMessage();
+				par.ServerName    = "PurviewManager";
+				//par.AssemblyName  = "Core.Mes.PurviewManager";
+				par.ClassName     = "Core.Mes.PurviewManager.PurviewManager";
+				par.MethodName    = "SelectUAM_FUNCTION";
+				par.args          = new object[]{str+" order by FUNCTIONID "};
+				par.ServerType    = MesServerType.MesSystemBaseServer;
+			
+				string strOut = "";
+
+				_functionData = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+
+				_selectFuncSQL = strOut;
+			}
+			catch //(Exception ex)
+			{
+		//		CoreMesLogger.log(this.GetType()).Error(ex.Message);
+			}
+		}
+		private void ultraTree1_AfterSelect(object sender, Infragistics.Win.UltraWinTree.SelectEventArgs e)
+		{
+			string rowFilter;
+			if (e.NewSelections == null || e.NewSelections.Count == 0) 
+				rowFilter = "";
+			else
+			{
+				string id = e.NewSelections[0].Key.ToString();
+				int count = id.Length;
+
+				rowFilter = "substring(FUNCTIONID,1," + count.ToString() + ") = '" + id + "' or FUNCTIONID is null or trim(FUNCTIONID) = '' ";
+			}
+			DataTable dt = this.ultraGrid1.DataSource as DataTable ;
+			dt.DefaultView.RowFilter = rowFilter;
+		}
+		#endregion
+		#region "	InitDbGrid	"
+
+		private void InitDbGrid()
+		{
+			this.ultraGrid1.DataSource = this._functionData.Tables[0];
+			this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].Header.Caption = "功能编码";
+			this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].Width = 80;
+			this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].CellAppearance.TextHAlign =  Infragistics.Win.HAlign.Left;
+			this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].CellAppearance.BackColor=Color.LightGoldenrodYellow;
+
+			this.ultraGrid1.DisplayLayout.Bands[0].Columns[1].Header.Caption = "功能名称";
+			this.ultraGrid1.DisplayLayout.Bands[0].Columns[1].Width = 100;
+			this.ultraGrid1.DisplayLayout.Bands[0].Columns[1].CellAppearance.TextHAlign =  Infragistics.Win.HAlign.Left;
+
+			this.ultraGrid1.DisplayLayout.Bands[0].Columns[2].Header.Caption = "类名";
+			this.ultraGrid1.DisplayLayout.Bands[0].Columns[2].Width = 200;
+			this.ultraGrid1.DisplayLayout.Bands[0].Columns[2].CellAppearance.TextHAlign =  Infragistics.Win.HAlign.Left;
+			this.ultraGrid1.DisplayLayout.Bands[0].Columns[2].CellAppearance.BackColor=Color.LightGoldenrodYellow;
+
+			this.ultraGrid1.DisplayLayout.Bands[0].Columns[3].Header.Caption = "程序集名";
+			this.ultraGrid1.DisplayLayout.Bands[0].Columns[3].Width = 200;
+			this.ultraGrid1.DisplayLayout.Bands[0].Columns[3].CellAppearance.TextHAlign =  Infragistics.Win.HAlign.Left;
+
+			this.ultraGrid1.DisplayLayout.Bands[0].Columns[4].Header.Caption = "图标名称";
+			this.ultraGrid1.DisplayLayout.Bands[0].Columns[4].Width = 100;
+			this.ultraGrid1.DisplayLayout.Bands[0].Columns[4].CellAppearance.TextHAlign =  Infragistics.Win.HAlign.Left;
+			this.ultraGrid1.DisplayLayout.Bands[0].Columns[4].CellAppearance.BackColor=Color.LightGoldenrodYellow;
+
+this.ultraGrid1.DisplayLayout.Bands[0].Columns[5].Hidden=true;
+		//	this.ultraGrid1.DisplayLayout.Bands[0].Columns[5].Header.Caption = "备注";
+//			this.ultraGrid1.DisplayLayout.Bands[0].Columns[5].Width = 100;
+//			this.ultraGrid1.DisplayLayout.Bands[0].Columns[5].CellAppearance.TextHAlign =  Infragistics.Win.HAlign.Left;
+		}
+		private void InCom()
+		{
+			if (_functionData != null && _functionData.Tables.Count >0)
+			{
+				foreach(DataRow arow in (_functionData).Tables[0].Rows)
+					this.ultraComboEditor1.Items.Add(arow[1]);
+				if(!this.ultraComboEditor1.Items.Contains(System.DBNull.Value)) this.ultraComboEditor1.Items.Add(System.DBNull.Value);
+			}
+		}
+		#endregion
+		#region "工具栏1"
+		private void ultraToolbarsManager1_ToolClick(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
+		{
+			switch(e.Tool .Key )
+			{
+				case "all":
+                    this.trDb.SelectedNodes.Clear();
+					break;
+				case "add":
+                    Add();
+					break;
+				case "del":
+                    Delete();
+					break;
+				case "edit":
+                   Edit();
+					break;
+				case "exit":
+					this.Close();
+					break;
+
+			}
+		}
+		private void Delete()
+		{
+			
+			int i = 0;
+			UltraGridRow ugr = this.ultraGrid1.ActiveRow;
+			if (ugr == null)
+			{
+				MessageBox.Show("请选择要删除的功能名!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information );
+				return;
+			}
+			if (MessageBox.Show("是否确认删除选中的功能?","提示",MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
+			{
+				return;
+			}
+			try
+			{
+				i = ugr.Index;
+				string strWhere = " where FUNCTIONID = '" + ugr.Cells[0].Value.ToString() + "'";
+				
+				CallingMessage par = new CallingMessage();
+				par.ServerName    = "PurviewManager";
+				//par.AssemblyName  = "Core.Mes.PurviewManager";
+				par.ClassName     = "Core.Mes.PurviewManager.PurviewManager";
+				par.MethodName    = "DeleteUAM_FUNCTION";
+				par.args          = new object[]{strWhere};
+				par.ServerType    = MesServerType.MesSystemBaseServer;
+			
+				string strOut = "";
+
+				object obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut);
+
+				if (strOut != "") 
+				{
+					MessageBox.Show("删除失败! \n" + strOut);
+					return;
+				}
+				else
+				{
+					if ((int)obj != 1)
+					{
+						MessageBox.Show("删除失败!");
+						return;
+					}
+				}
+			}
+			catch //(Exception ex)
+			{
+		//		CoreMesLogger.log(this.GetType()).Error(ex.Message);
+				return;
+			}
+			
+			ultraGrid1.ActiveRow.Delete(false);
+			ultraGrid1.UpdateData();
+			InCom();
+			InitTrDB();			
+			try
+			{
+				ultraGrid1.Rows[i].Activate();
+			}
+			catch
+			{
+				int count = ultraGrid1.Rows.Count;
+				if ( count > 0)
+					ultraGrid1.Rows[count -1].Activate();
+			}
+		}
+
+		private void Add()
+		{
+			if (this.ultraTextEditor1.Text.Trim() == "")
+			{
+				MessageBox.Show("请录入功能编码!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+				return;
+			}
+			if (this.ultraTextEditor2.Text.Trim() == "")
+			{
+				MessageBox.Show("请录入类名!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+				return;
+			}
+			if (this.ultraTextEditor3.Text.Trim() == "")
+			{
+				MessageBox.Show("请录入程序集名!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+				return;
+			}
+			if (this.ultraComboEditor1.Text.Trim() == null)
+			{
+				MessageBox.Show("请录入功能名称!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+				return;
+			}
+			ArrayList al = new ArrayList();
+			
+			al.Add(this.ultraTextEditor1.Text.Trim());
+			
+			al.Add(this.ultraComboEditor1.Text.Trim());
+			al.Add(this.ultraTextEditor2.Text.Trim());
+			al.Add(this.ultraTextEditor3.Text.Trim());
+			al.Add(this.ultraTextEditor4.Text.Trim());
+//			al.Add(this.ultraTextEditor5.Text.Trim());
+			
+			try
+			{
+				CallingMessage par = new CallingMessage();
+				par.ServerName    = "PurviewManager";
+				//par.AssemblyName  = "Core.Mes.PurviewManager";
+				par.ClassName     = "Core.Mes.PurviewManager.PurviewManager";
+				par.MethodName    = "InsertUAM_FUNCTION";
+				par.args          = new object[]{al};
+				par.ServerType    = MesServerType.MesSystemBaseServer;
+			
+				string strOut = "";
+
+				object obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut);
+
+				if (strOut != "") 
+				{
+					MessageBox.Show("新增失败! \n" + strOut);
+					return;
+				}
+				else
+				{
+					if ((int)obj != 1)
+					{
+						MessageBox.Show("新增失败!");
+						return;
+					}
+				}
+			}
+			catch //(Exception ex)
+			{
+	//			CoreMesLogger.log(this.GetType()).Error(ex.Message);
+				return;
+			}
+			GetTrDBdata("");
+			UltraGridRow ugr = this.ultraGrid1.DisplayLayout.Bands[0].AddNew();
+			ugr.Cells[0].Value = al[0];
+			ugr.Cells[1].Value = al[1];
+			ugr.Cells[2].Value = al[2];
+			ugr.Cells[3].Value = al[3];
+			ugr.Cells[4].Value = al[4];
+			ugr.Cells[5].Value = al[5];
+			
+			this.ultraGrid1.UpdateData();
+			InCom();
+			InitTrDB();
+		}
+
+		private void Edit()
+		{
+			UltraGridRow ugr = this.ultraGrid1.ActiveRow;
+			if (ugr == null)
+			{
+				MessageBox.Show("请选择要修改的功能编码!");
+				return;
+			}
+			
+			if (this.ultraComboEditor1.Value == null)
+			{
+				MessageBox.Show("请选择要修改的功能名称!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+				return;
+			}
+			if (this.ultraTextEditor2.Text.Trim() == "")
+			{
+				MessageBox.Show("请选择要修改的类名称!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+				return;
+			}
+			if (this.ultraTextEditor3.Text.Trim() == "")
+			{
+				MessageBox.Show("请选择要修改的程序集名称!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+				return;
+			}
+			
+			ArrayList al = new ArrayList();
+			
+			al.Add(this.ultraTextEditor1.Text.Trim());
+            al.Add(this.ultraComboEditor1.Text.Trim());
+			al.Add(this.ultraTextEditor2.Text.Trim());
+			
+			al.Add(this.ultraTextEditor3.Text.Trim());
+
+			al.Add(this.ultraTextEditor4.Text.Trim());
+//            al.Add(this.ultraTextEditor5.Text.Trim());
+			try
+			{
+				CallingMessage par = new CallingMessage();
+				par.ServerName    = "PurviewManager";
+				//par.AssemblyName  = "Core.Mes.PurviewManager";
+				par.ClassName     = "Core.Mes.PurviewManager.PurviewManager";
+				par.MethodName    = "UpdateUAM_FUNCTION";
+				par.args          = new object[]{al};
+				par.ServerType    = MesServerType.MesSystemBaseServer;
+			
+				string strOut = "";
+
+				object obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut);
+
+				if (strOut != "") 
+				{
+					MessageBox.Show("修改失败 \n" + strOut);
+					return;
+				}
+				else
+				{
+					int i = (int)obj;
+					if (i != 1)
+					{
+						MessageBox.Show("修改失败");
+						return;
+					}
+				}
+			}
+			catch //(Exception ex)
+			{
+		//		CoreMesLogger.log(this.GetType()).Error(ex.Message);
+				return;
+			}
+			ugr.Cells[0].Value = al[0];
+			ugr.Cells[1].Value = al[1];
+			ugr.Cells[2].Value = al[2];
+			ugr.Cells[3].Value = al[3];
+			ugr.Cells[4].Value = al[4];
+			ugr.Cells[5].Value = al[5];
+			
+			ultraGrid1.UpdateData();
+			InCom();
+			InitTrDB();
+		}
+
+		private void ultraGrid1_AfterRowActivate(object sender, System.EventArgs e)
+		{
+			try
+			{				
+				if (this.ultraGrid1.ActiveRow == null) return;
+				UltraGridRow ugr = this.ultraGrid1.ActiveRow;
+
+				this.ultraTextEditor1.Text = ugr.Cells[0].Value.ToString();
+				this.ultraComboEditor1.Text= ugr.Cells[1].Value.ToString();
+				this.ultraTextEditor2.Text = ugr.Cells[2].Value.ToString();	
+				this.ultraTextEditor3.Text = ugr.Cells[3].Value.ToString();
+	            this.ultraTextEditor4.Text = ugr.Cells[4].Value.ToString();
+//				this.ultraTextEditor5.Text = ugr.Cells[5].Value.ToString();
+			}
+			catch (Exception ex)
+			{
+				Console.WriteLine(ex.Message);
+			}
+		}
+		#endregion
+		#region "工具栏2"
+		private void ultraToolbarsManager2_ToolClick(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
+		{
+			switch (e.Tool.Key)
+			{
+				case "open" :
+					openFile();
+					break;
+				case "save" :
+					saveFile();
+					break;
+			}
+		}
+		#region "	save	"
+		private void saveFile()
+		{
+			DialogResult rs = MessageBox.Show("保存到本地?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
+
+			switch (rs)
+			{
+				
+				case DialogResult.OK :
+					saveLocalFile();
+					break;
+				case DialogResult.Cancel :
+					break;
+			}
+		}
+		private void saveLocalFile()
+		{
+			System.Windows.Forms.SaveFileDialog sfd = new SaveFileDialog();
+			
+			sfd.FileName = "*.xml";
+			sfd.Filter = "xml文件(*.xml)|*.xml|所有文件(*.*)|*.*";
+			DialogResult rs = sfd.ShowDialog(this);
+
+			switch (rs)
+			{
+				case DialogResult.OK :
+					try
+					{
+						string fileName = sfd.FileName;
+						//this.trFile.SaveAsXml(fileName);
+						SaveAsXml(fileName);
+					}
+					catch (Exception ex)
+					{
+						Console.WriteLine(ex.Message);
+						MessageBox.Show("文件保存错误!");
+					}
+					break;
+				default :
+					break;
+			}
+		}
+		private void SaveAsXml(string fileName)
+		{
+			XmlTextWriter xtw = new XmlTextWriter(fileName,System.Text.Encoding.UTF8);
+
+			try
+			{
+				xtw.Formatting = Formatting.Indented ;
+				xtw.WriteStartDocument();
+				xtw.WriteStartElement("MainMenu");
+			
+				foreach (UltraTreeNode utn in this.trFile.Nodes)
+				{
+					xtw.WriteStartElement("Group");
+					xtw.WriteAttributeString("GroupName", utn.Key);
+				
+					if (utn.Nodes.Count > 0 )
+					{
+						if (utn.GetNodeCount(true) != utn.GetNodeCount(false))
+							xtw.WriteAttributeString("flag", "Tree");
+						else
+							xtw.WriteAttributeString("flag", "Default");
+						
+						SetChildElement(xtw, utn.Nodes);
+					}
+									
+					xtw.WriteEndElement();
+				}
+			
+				xtw.WriteEndElement();
+				xtw.WriteEndDocument();
+
+				XmlDocument doc = new XmlDocument();
+				
+				xtw.Flush();
+			}
+			catch(Exception ex)
+			{
+				MessageBox.Show(ex.Message);			
+			}
+			xtw.Close();
+		}
+		private void SetChildElement(XmlTextWriter xtw, TreeNodesCollection tnc)
+		{
+			
+			foreach(UltraTreeNode utn in tnc)
+			{
+				xtw.WriteStartElement("Item");
+				xtw.WriteAttributeString("ItemID", utn.Key);
+				xtw.WriteAttributeString("Image", utn.Tag.ToString());
+
+				if (utn.Nodes.Count > 0)
+				{
+					SetChildElement(xtw, utn.Nodes);
+				}
+				xtw.WriteEndElement();
+			}
+		}
+		
+		#endregion
+		#region "	open	"
+		private void openFile()
+		{
+			DialogResult rs = MessageBox.Show("打开本地文件?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
+
+			switch (rs)
+			{
+				
+				case DialogResult.OK :
+					openLocalFile();
+					break;
+				case DialogResult.Cancel :
+					break;
+			}
+		}
+		private void openLocalFile()
+		{
+			System.Windows.Forms.OpenFileDialog ofd = new OpenFileDialog();
+			
+			ofd.FileName = "*.xml";
+			ofd.Filter = "xml文件(*.xml)|*.xml|所有文件(*.*)|*.*";
+			DialogResult rs = ofd.ShowDialog(this);
+
+			switch (rs)
+			{
+				case DialogResult.OK :
+					try
+					{
+						string fileName = ofd.FileName;
+						this.RemoveAllTreeNode(this.trFile);
+						LoadFromXml(fileName);
+					}
+					catch (Exception ex)
+					{						
+						MessageBox.Show(ex.Message);
+					}
+					break;
+				default :
+					break;
+			}
+		}
+		private void LoadFromXml(string fileName)
+		{
+			XmlDocument doc = new XmlDocument();
+			
+			doc.Load(fileName);
+
+			XmlNodeList xnl = doc.ChildNodes[1].ChildNodes;
+
+			foreach (XmlNode xn in xnl)
+			{
+				UltraTreeNode utn = new UltraTreeNode();
+				string strKey = xn.Attributes[0].Value.ToString();
+				UltraTreeNode tn = this.trDb.GetNodeByKey(strKey);
+				
+				if (this.trDb.GetNodeByKey(strKey) != null)
+				{
+					utn.Key = tn.Key;
+					utn.Text = tn.Text;
+					utn.Tag = tn.Tag;
+				}
+				else
+				{
+					utn.Key = strKey;
+					utn.Text = strKey;
+					utn.Tag = "";
+				}
+				if (xn.ChildNodes.Count >0)
+				{
+					SetChildNode(utn, xn.ChildNodes);
+				}
+				this.trFile.Nodes.Add(utn);
+			}
+		}
+		private void SetChildNode(UltraTreeNode utn, XmlNodeList xnl)
+		{
+			foreach (XmlNode xn in xnl)
+			{
+				UltraTreeNode tn = new UltraTreeNode();
+				string strKey = xn.Attributes[0].Value.ToString();
+				UltraTreeNode tntmp = this.trDb.GetNodeByKey(strKey);
+				
+				if (this.trDb.GetNodeByKey(strKey) != null)
+				{
+					tn.Key = tntmp.Key;
+					tn.Text = tntmp.Text;
+					tn.Tag = tntmp.Tag;
+				}
+				else
+				{
+					tn.Key = strKey;
+					tn.Text = strKey;
+					tn.Tag = "";
+				}
+
+				if (xn.ChildNodes.Count >0)
+				{
+					SetChildNode(tn, xn.ChildNodes);
+				}
+				utn.Nodes.Add(tn);			
+			}
+		}
+		#endregion
+	#endregion
+		private void ultraButton1_Click(object sender, System.EventArgs e)
+		{
+			if (this.trDb.SelectedNodes == null) return;
+			
+			SelectedNodesCollection utn = this.trDb.SelectedNodes;
+			
+			foreach(UltraTreeNode tn in utn)
+			{
+				CopyTreeNode(tn, this.trFile.Nodes);
+			}
+		}
+		private void CopyTreeNode(UltraTreeNode tn, TreeNodesCollection tnc)
+		{
+			if (this.trFile.GetNodeByKey(tn.Key) == null)
+			{
+				UltraTreeNode ftn = new UltraTreeNode(tn.Key, tn.Text);
+				ftn.Tag = tn.Tag;
+				tnc.Add(ftn);
+			}
+			if (tn.Nodes.Count > 0)
+			{
+				foreach (UltraTreeNode utn in tn.Nodes)
+				{
+					CopyTreeNode(utn,this.trFile.GetNodeByKey(tn.Key).Nodes);
+				}
+			}
+		}
+
+		private void ultraButton2_Click(object sender, System.EventArgs e)
+		{
+			if ( this.trFile.ActiveNode == null) return;
+			
+			DialogResult rs = MessageBox.Show("是否确认移除?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question);
+
+
+			switch (rs)
+			{
+				case DialogResult.Yes :
+					this.trFile.ActiveNode.Remove();
+					break;
+				case DialogResult.No :
+					break;
+			}
+		}
+
+		private void ultraButton6_Click(object sender, System.EventArgs e)
+		{
+			try
+			{	
+				if ( this.trFile.SelectedNodes == null) return;
+
+				UltraTreeNode tn= this.trFile.ActiveNode;
+				int i = tn.Index ;
+				if (i == 0) return;
+
+				if (tn.Level == 0)
+
+					tn.Reposition(this.trFile.Nodes, i - 1);
+				else
+					tn.Reposition(tn.Parent.Nodes, i - 1);
+			}
+			catch
+			{}
+		}
+
+		private void ultraButton7_Click(object sender, System.EventArgs e)
+		{
+			try
+			{	
+				if ( this.trFile.SelectedNodes == null) return;
+
+				UltraTreeNode tn= this.trFile.ActiveNode;
+				int i = tn.Index ;
+					
+				if (tn.Level == 0)
+				{
+					if (i == this.trFile.Nodes.Count-1) return;
+					tn.Reposition(this.trFile.Nodes, i + 1);
+				}
+				else
+				{
+					if (i == tn.Parent.Nodes.Count-1) return;
+					tn.Reposition(tn.Parent.Nodes, i + 1);
+				}
+			}
+			catch {}
+		}
+
+		private void ultraButton5_Click(object sender, System.EventArgs e)
+		{
+			try
+			{
+				if ( this.trFile.SelectedNodes == null) return;
+
+				UltraTreeNode tn= this.trFile.ActiveNode;
+			
+				if (tn.Level == 0 ) 
+					return;
+				else if (tn.Level == 1 ) 
+					tn.Reposition(this.trFile.Nodes);
+				else
+				{
+					UltraTreeNode utn = tn.Parent.Parent;
+					tn.Reposition(utn.Nodes);
+				}
+			}
+			catch {}
+		}
+
+		private void ultraButton8_Click(object sender, System.EventArgs e)
+		{
+			try
+			{
+				if ( this.trFile.SelectedNodes == null) return;
+
+				UltraTreeNode tn= this.trFile.ActiveNode;
+
+				int i = tn.Index;
+			
+				if (i == 0) return;
+			
+				UltraTreeNode utn;
+				if (tn.Level == 0)
+					utn = this.trFile.Nodes[i -1];
+				else
+					utn = tn.Parent.Nodes[i -1];
+			
+				tn.Reposition(utn.Nodes);
+
+				utn.ExpandAll();
+			}
+			catch {}
+		}
+
+		private void ultraButton3_Click(object sender, System.EventArgs e)
+		{
+			try
+			{
+				if ( this.trFile.SelectedNodes == null) return;
+
+				UltraTreeNode tn= this.trFile.ActiveNode;
+
+				if (tn.Level == 0)
+				{
+					UltraTreeNode utn = new UltraTreeNode();
+					this.trFile.Nodes.Add(utn);
+					utn.BeginEdit();
+				}
+				else
+				{
+					UltraTreeNode utn = new UltraTreeNode();
+					tn.Parent.Nodes.Add(utn);
+					utn.BeginEdit();
+				}
+			}
+			catch {}
+		}
+
+		private void ultraButton4_Click(object sender, System.EventArgs e)
+		{
+		
+		}
+
+		private void ultraGroupBox1_Click(object sender, System.EventArgs e)
+		{
+		
+		}
+
+
+	
+
+	
+	}
+}

+ 258 - 0
.svn/pristine/14/14b200dc50575457f6a155a56911889cd5d89d8a.svn-base

@@ -0,0 +1,258 @@
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.Threading;
+
+using Core.Mes.ClientFrameWork;
+using Core.Mes.IBaseInterface;
+
+namespace Core.Mes.ClientManager
+{
+	/// <summary>
+	/// FrmPasswd 的摘要说明。
+	/// </summary>
+	public class FrmPasswd : System.Windows.Forms.Form
+	{
+		#region "Construct	"
+		private System.Windows.Forms.TextBox textBox1;
+		private System.Windows.Forms.TextBox textBox2;
+		private System.Windows.Forms.TextBox textBox3;
+		private System.Windows.Forms.TextBox textBox4;
+		private System.Windows.Forms.Button button1;
+		private System.Windows.Forms.Button button2;
+		private System.Windows.Forms.Label label1;
+		private System.Windows.Forms.Label label2;
+		private System.Windows.Forms.Label label3;
+		private System.Windows.Forms.Label label4;
+		/// <summary>
+		/// 必需的设计器变量。
+		/// </summary>
+		private System.ComponentModel.Container components = null;
+
+		public FrmPasswd()
+		{
+			//
+			// Windows 窗体设计器支持所必需的
+			//
+			InitializeComponent();
+
+			//
+			// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
+			//
+		}
+
+		/// <summary>
+		/// 清理所有正在使用的资源。
+		/// </summary>
+		protected override void Dispose( bool disposing )
+		{
+			if( disposing )
+			{
+				if(components != null)
+				{
+					components.Dispose();
+				}
+			}
+			base.Dispose( disposing );
+		}
+
+		#region Windows 窗体设计器生成的代码
+		/// <summary>
+		/// 设计器支持所需的方法 - 不要使用代码编辑器修改
+		/// 此方法的内容。
+		/// </summary>
+		private void InitializeComponent()
+		{
+			this.textBox1 = new System.Windows.Forms.TextBox();
+			this.textBox2 = new System.Windows.Forms.TextBox();
+			this.textBox3 = new System.Windows.Forms.TextBox();
+			this.textBox4 = new System.Windows.Forms.TextBox();
+			this.button1 = new System.Windows.Forms.Button();
+			this.button2 = new System.Windows.Forms.Button();
+			this.label1 = new System.Windows.Forms.Label();
+			this.label2 = new System.Windows.Forms.Label();
+			this.label3 = new System.Windows.Forms.Label();
+			this.label4 = new System.Windows.Forms.Label();
+			this.SuspendLayout();
+			// 
+			// textBox1
+			// 
+			this.textBox1.Location = new System.Drawing.Point(64, 14);
+			this.textBox1.Name = "textBox1";
+			this.textBox1.Size = new System.Drawing.Size(112, 21);
+			this.textBox1.TabIndex = 0;
+			this.textBox1.Text = "";
+			// 
+			// textBox2
+			// 
+			this.textBox2.Location = new System.Drawing.Point(64, 43);
+			this.textBox2.Name = "textBox2";
+			this.textBox2.PasswordChar = '*';
+			this.textBox2.Size = new System.Drawing.Size(112, 21);
+			this.textBox2.TabIndex = 1;
+			this.textBox2.Text = "";
+			// 
+			// textBox3
+			// 
+			this.textBox3.Location = new System.Drawing.Point(64, 72);
+			this.textBox3.Name = "textBox3";
+			this.textBox3.PasswordChar = '*';
+			this.textBox3.Size = new System.Drawing.Size(112, 21);
+			this.textBox3.TabIndex = 2;
+			this.textBox3.Text = "";
+			// 
+			// textBox4
+			// 
+			this.textBox4.Location = new System.Drawing.Point(64, 101);
+			this.textBox4.Name = "textBox4";
+			this.textBox4.PasswordChar = '*';
+			this.textBox4.Size = new System.Drawing.Size(112, 21);
+			this.textBox4.TabIndex = 3;
+			this.textBox4.Text = "";
+			// 
+			// button1
+			// 
+			this.button1.Location = new System.Drawing.Point(16, 136);
+			this.button1.Name = "button1";
+			this.button1.TabIndex = 4;
+			this.button1.Text = "修改";
+			this.button1.Click += new System.EventHandler(this.button1_Click);
+			// 
+			// button2
+			// 
+			this.button2.Location = new System.Drawing.Point(101, 136);
+			this.button2.Name = "button2";
+			this.button2.TabIndex = 5;
+			this.button2.Text = "关闭";
+			this.button2.Click += new System.EventHandler(this.button2_Click);
+			// 
+			// label1
+			// 
+			this.label1.AutoSize = true;
+			this.label1.Location = new System.Drawing.Point(16, 16);
+			this.label1.Name = "label1";
+			this.label1.Size = new System.Drawing.Size(42, 17);
+			this.label1.TabIndex = 6;
+			this.label1.Text = "用户名";
+			// 
+			// label2
+			// 
+			this.label2.AutoSize = true;
+			this.label2.Location = new System.Drawing.Point(16, 45);
+			this.label2.Name = "label2";
+			this.label2.Size = new System.Drawing.Size(42, 17);
+			this.label2.TabIndex = 7;
+			this.label2.Text = "旧密码";
+			// 
+			// label3
+			// 
+			this.label3.AutoSize = true;
+			this.label3.Location = new System.Drawing.Point(16, 74);
+			this.label3.Name = "label3";
+			this.label3.Size = new System.Drawing.Size(42, 17);
+			this.label3.TabIndex = 8;
+			this.label3.Text = "新密码";
+			// 
+			// label4
+			// 
+			this.label4.AutoSize = true;
+			this.label4.Location = new System.Drawing.Point(4, 103);
+			this.label4.Name = "label4";
+			this.label4.Size = new System.Drawing.Size(54, 17);
+			this.label4.TabIndex = 9;
+			this.label4.Text = "确认密码";
+			// 
+			// FrmPasswd
+			// 
+			this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
+			this.ClientSize = new System.Drawing.Size(192, 173);
+			this.Controls.Add(this.label4);
+			this.Controls.Add(this.label3);
+			this.Controls.Add(this.label2);
+			this.Controls.Add(this.label1);
+			this.Controls.Add(this.button2);
+			this.Controls.Add(this.button1);
+			this.Controls.Add(this.textBox4);
+			this.Controls.Add(this.textBox3);
+			this.Controls.Add(this.textBox2);
+			this.Controls.Add(this.textBox1);
+			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+			this.MaximizeBox = false;
+			this.MinimizeBox = false;
+			this.Name = "FrmPasswd";
+			this.ShowInTaskbar = false;
+			this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+			this.Text = "修改密码";
+			this.Load += new System.EventHandler(this.FrmPasswd_Load);
+			this.ResumeLayout(false);
+
+		}
+		#endregion
+
+		#endregion
+
+		#region "	Valiable	"
+		public string strUserID = "";
+		public bool _remoteFlag = false;
+		#endregion
+
+		#region "	Init	"
+		private void FrmPasswd_Load(object sender, System.EventArgs e)
+		{
+			this.textBox1.Text = ClientCommon._UserInfo.LoginID;
+		}
+		#endregion
+
+
+
+		#region "	Button Events	"
+		private void button1_Click(object sender, System.EventArgs e)
+		{
+			if (this.textBox3.Text.Trim() != this.textBox4.Text.Trim())
+			{
+				MessageBox.Show("两次输入的新密码不一致,请重新设定。","提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+				return;
+			}
+
+			string strOut = "";
+			
+			string loginID = this.textBox1.Text.Trim();
+			string passwd  = this.textBox2.Text.Trim();
+			string passwdNew = this.textBox3.Text.Trim();
+
+			try
+			{
+				object obj = ClientCommon._RemotingHelp.ExecuteMethod("ServerCommon","Core.Mes.ServerCommon.UserInfoManager","ChangePasswd",
+					new object[]{loginID, passwd, passwdNew}, out strOut);
+
+				if (strOut != "") throw new Exception(strOut);
+
+				if (Convert.ToInt32(obj)>0)
+				
+				{
+					MessageBox.Show("密码修改成功!","提示",MessageBoxButtons.OK, MessageBoxIcon.Information);
+					this.Close();
+					return;
+				}
+				else
+				{
+					MessageBox.Show("密码修改失败!","提示",MessageBoxButtons.OK, MessageBoxIcon.Information);
+				}
+			}
+			catch (Exception ex)
+			{		
+				MessageBox.Show("密码修改失败!\n" + ex.Message,"提示",MessageBoxButtons.OK, MessageBoxIcon.Information);
+			}
+		}
+
+		private void button2_Click(object sender, System.EventArgs e)
+		{
+			this.Close();
+		}
+		#endregion
+
+		
+	}
+}

+ 71 - 0
.svn/pristine/16/16827e9b05bb8cc8d5579607f5dc738118c32bd7.svn-base

@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     此代码由一个工具生成。
+//     运行库版本:2.0.50727.3625
+//
+//     对此文件的更改可能会导致不正确的行为,并且如果
+//     重新生成代码,这些更改将丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ConService.Properties
+{
+
+
+    /// <summary>
+    ///   一个强类型的资源类,用于查找本地化的字符串等。
+    /// </summary>
+    // 此类是由 StronglyTypedResourceBuilder
+    // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
+    // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+    // (以 /str 作为命令选项),或重新生成 VS 项目。
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources
+    {
+
+        private static global::System.Resources.ResourceManager resourceMan;
+
+        private static global::System.Globalization.CultureInfo resourceCulture;
+
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources()
+        {
+        }
+
+        /// <summary>
+        ///   返回此类使用的、缓存的 ResourceManager 实例。
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager
+        {
+            get
+            {
+                if ((resourceMan == null))
+                {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ConService.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+
+        /// <summary>
+        ///   为所有资源查找重写当前线程的 CurrentUICulture 属性,
+        ///   方法是使用此强类型资源类。
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture
+        {
+            get
+            {
+                return resourceCulture;
+            }
+            set
+            {
+                resourceCulture = value;
+            }
+        }
+    }
+}

+ 275 - 0
.svn/pristine/17/171516c55c281ea5d14af78cdc33f26871fb104d.svn-base

@@ -0,0 +1,275 @@
+using System;
+using System.IO;
+using System.Xml;
+using System.Data;
+using System.Text;
+using System.Collections;
+using System.Reflection;
+using System.Configuration;
+
+using Core.Mes.IBaseInterface;
+
+namespace Core.Mes.ServerFrameWork
+{
+    public class Dispatcher : MarshalByRefObject, ICommon
+    {
+        #region	"	Construct	"
+        public Dispatcher() { }
+        public Dispatcher(IServerPool pool)
+        {
+            Pool = pool;
+            Debug = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["Debug"].Value.ToString().ToLower();
+        }
+        private IServerPool _pool = null;
+        public IServerPool Pool
+        {
+            get { return _pool; }
+            set { _pool = value; }
+        }
+        private string Debug = "false";
+        #endregion
+
+        #region "	Variable	"
+
+        //== 子服务集合
+        public static Hashtable _htServers = new Hashtable();
+        //== 数据链接集合
+        public static Hashtable htDBManager = new Hashtable();
+
+        public event GetStatusInfoHandler getStatusInfo;
+
+        public delegate void GetStatusInfoHandler(string info);
+
+        protected virtual void SetStatusMessage(string info)
+        {
+            if (getStatusInfo != null)
+            {
+                getStatusInfo(info);
+            }
+        }
+
+        #endregion
+
+        #region 内存释放
+        public void MemoryDispose()
+        {
+            int MemoryMaxSize = 100;
+            int.TryParse(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["MemoyMaxSize"].Value.ToString(), out MemoryMaxSize);
+            long memorysize = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64;
+            int PagedMemorySize = (int)memorysize / (1024 * 1024);
+            if (PagedMemorySize > MemoryMaxSize)//进程占用内存>100M 做GC.
+            {
+
+                try
+                {
+                    GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
+                }
+                catch
+                {
+
+                }
+                System.Diagnostics.Process.GetCurrentProcess().Dispose();
+
+            }
+        }
+        #endregion
+        #region MethodTimeLog
+        private static object lockObj = new object();
+        public void MethodTimeLog(TimeSpan tspan, object[] objs, object[] args)
+        {
+            string path = string.Format(@"./log/Method/MethodTimeLog_{0}.txt", System.DateTime.Now.ToString("yyyy_MM_dd"));
+
+            lock (lockObj)
+            {
+
+
+                using (StreamWriter sw = new StreamWriter(path, true, Encoding.UTF8))
+                {
+
+                    StringBuilder sbtxt = new StringBuilder();
+                    sbtxt.AppendLine("==============================================");
+                    sbtxt.AppendLine(string.Format("LogWriteTime:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
+                    sbtxt.AppendLine(string.Format("Time:{0}", tspan.TotalMilliseconds));
+                    sbtxt.AppendLine(string.Format("ClassName:{0}", objs[0].ToString()));
+                    sbtxt.AppendLine(string.Format("MethodName:{0}", objs[1].ToString()));
+                    if (args != null)
+                    {
+                        foreach (object obj in args)
+                        {
+                            if (obj != null)
+                            {
+                                sbtxt.AppendLine(string.Format("Parameters:{0}", obj.ToString()));
+                            }
+                        }
+                    }
+                    sbtxt.AppendLine("==============================================");
+                    sw.WriteLine(sbtxt.ToString());
+
+                }
+            }
+        }
+        public void MethodErrLog(Exception ex, object[] objs, object[] args)
+        {
+            string path = string.Format(@"./log/Method/MethodErrLog_{0}.txt", System.DateTime.Now.ToString("yyyy_MM_dd"));
+            lock (lockObj)
+            {
+                using (StreamWriter sw = new StreamWriter(path, true, Encoding.UTF8))
+                {
+
+                    StringBuilder sbtxt = new StringBuilder();
+                    sbtxt.AppendLine("==============================================");
+                    sbtxt.AppendLine(string.Format("LogWriteTime:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
+                    sbtxt.AppendLine(string.Format("ClassName:{0}", objs[0].ToString()));
+                    sbtxt.AppendLine(string.Format("MethodName:{0}", objs[1].ToString()));
+                    if (args != null)
+                    {
+                        foreach (object obj in args)
+                        {
+                            if (obj != null)
+                            {
+                                sbtxt.AppendLine(string.Format("Parameters:{0}", obj.ToString()));
+                            }
+                        }
+                    }
+                    sbtxt.AppendLine(ex.Message);
+                    sbtxt.AppendLine(ex.StackTrace);
+                    sbtxt.AppendLine("==============================================");
+                    sw.WriteLine(sbtxt.ToString());
+
+                }
+            }
+        }
+        public void DebugLog(object[] objs, object[] args)
+        {
+            string path = string.Format(@"./log/Method/DebugLog_{0}.txt", System.DateTime.Now.ToString("yyyy_MM_dd"));
+            lock (lockObj)
+            {
+                if (File.Exists(Path.GetFullPath(path)))
+                {
+                    FileInfo fileInfo = new FileInfo(Path.GetFullPath(path));
+                    if (fileInfo.Length / (1024 * 1024) > 6)
+                    {
+                        File.Delete(path);
+                    }
+                }
+
+                using (StreamWriter sw = new StreamWriter(path, true, Encoding.UTF8))
+                {
+
+                    StringBuilder sbtxt = new StringBuilder();
+                    sbtxt.AppendLine("==============================================");
+                    sbtxt.AppendLine(string.Format("LogWriteTime:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
+                    sbtxt.AppendLine(string.Format("ClassName:{0}", objs[0].ToString()));
+                    sbtxt.AppendLine(string.Format("MethodName:{0}", objs[1].ToString()));
+                    if (args != null)
+                    {
+                        foreach (object obj in args)
+                        {
+                            if (obj != null)
+                            {
+                                sbtxt.AppendLine(string.Format("Parameters:{0}", obj.ToString()));
+                            }
+                        }
+                    }
+                    sbtxt.AppendLine("==============================================");
+                    sw.WriteLine(sbtxt.ToString());
+
+                }
+            }
+        }
+        #endregion
+        #region "	调用服务	"
+        /// <summary>
+        /// 服务端公开给客户端的调用后台服务的方法
+        /// </summary>
+        /// <param name="message"></param>
+        /// <returns></returns>
+        public ReturnObject MethodHandler(CallingMessage message, ValidateInfo validateInfo)
+        {
+            //step1:
+            MemoryDispose();
+
+            //step2:
+            string serverName = message.ServerName;
+            string assemblyName = message.AssemblyName;
+            string className = message.ClassName;
+            string methodName = message.MethodName;
+            object[] args = message.args;
+
+            ReturnObject rtnObj = new ReturnObject();
+            MethodInfo myMethod = null;
+            try
+            {
+                if (Pool.HtComponent.Contains(className))
+                {
+                    myMethod = Pool.GetType().GetMethod("HandleMethod");
+                    try
+                    {
+                        //rtnObj = Pool.HandleMethod(className, methodName, args);
+                        DateTime startTime = DateTime.Now;
+                        if (Debug == "true")
+                        {
+                            DebugLog(new object[] { className, methodName }, args);
+                        }
+
+
+                        rtnObj = (ReturnObject)myMethod.Invoke(Pool, new object[] { className, methodName, args });
+                        DateTime endTime = DateTime.Now;
+                        TimeSpan tspan = endTime - startTime;
+                        int MethodTime = 30;
+
+                        int.TryParse(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["MethodTime"].Value.ToString().ToLower(), out MethodTime);
+                        if (tspan.TotalMilliseconds > (MethodTime * 1000))
+                        {
+                            MethodTimeLog(tspan, new object[] { className, methodName }, args);
+                        }
+
+                        return rtnObj;
+                    }
+                    catch (Exception ex)
+                    {
+                        MethodErrLog(ex, new object[] { className, methodName }, args);
+                        return new ReturnObject(null, ex.Message);
+                    }
+                    finally
+                    {
+                        //if (myMethod != null) myMethod = null;
+                        try
+                        {
+                            if (rtnObj.RealObject != null)
+                            {
+                                rtnObj.RealObject = null;
+                            }
+                            if (rtnObj.RealDataSet != null)
+                            {
+                                rtnObj.RealDataSet = null;
+                            }
+                        }
+                        catch { }
+                    }
+
+                }
+                else
+                {
+
+                    return new ReturnObject(null, "未找到请求的服务!");
+                }
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, "服务调用发生异常! \n" + ex.Message);
+            }
+        }
+        #endregion
+
+        #region "	Common Handler	"
+        //=======================================================
+        // 用来确保当创建 Singleton 时, 第一个实例永远不会过期
+        //=======================================================
+        public override object InitializeLifetimeService()
+        {
+            return null;
+        }
+        #endregion
+    }
+}

+ 251 - 0
.svn/pristine/19/19a0a42c0086f4798f964d25ca8cbfbc63f56c4a.svn-base

@@ -0,0 +1,251 @@
+extern alias G1;
+extern alias G2;
+extern alias T1;
+extern alias T2;
+
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.Reflection;
+using Toolbar1 = G1::Infragistics.Win.UltraWinToolbars;
+using Toolbar2 = G2::Infragistics.Win.UltraWinToolbars;
+
+using UltraText1 = T1::Infragistics.Win.UltraWinEditors;
+using UltraText2 = T2::Infragistics.Win.UltraWinEditors;
+using System.Text.RegularExpressions;
+namespace Core.Mes.ClientFrameWork
+{
+    /// <summary>
+    /// Core Mes 平台所有业务子窗体的基类
+    /// </summary>
+    public class FrmBase : System.Windows.Forms.Form
+    {
+        #region "	RemotingGate "
+        public string Key = "";
+        public bool On_Off_Thread = false;
+        public Form _ParentForm;
+        #endregion
+
+
+
+        private System.ComponentModel.IContainer components = null;
+
+        public FrmBase()
+        {
+            //
+            // Windows 窗体设计器支持所必需的
+            //
+            InitializeComponent();
+
+            //
+            // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
+            //
+        }
+
+        /// <summary>
+        /// 清理所有正在使用的资源。
+        /// </summary>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing)
+            {
+                if (components != null)
+                {
+                    components.Dispose();
+                }
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows 窗体设计器生成的代码
+        /// <summary>
+        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
+        /// 此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.SuspendLayout();
+            // 
+            // FrmBase
+            // 
+            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
+            this.ClientSize = new System.Drawing.Size(1012, 733);
+            this.Name = "FrmBase";
+            this.Text = "FrmBase";
+            this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
+            this.Load += new System.EventHandler(this.FrmBase_Load);
+            this.ResumeLayout(false);
+
+        }
+        #endregion
+
+        private void FrmBase_Load(object sender, EventArgs e)
+        {
+            AddToolBarListener();
+        }
+
+        private void AddToolBarListener()
+        {
+            //获取所有控件
+            System.Reflection.FieldInfo[] fieldInfo = this.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
+            for (int i = 0; i < fieldInfo.Length; i++)
+            {
+                try
+                {
+                    if (fieldInfo[i].FieldType == typeof(Toolbar1.UltraToolbarsManager))
+                    {
+                        Toolbar1.UltraToolbarsManager ut1 = fieldInfo[i].GetValue(this) as Toolbar1.UltraToolbarsManager;
+                        ut1.ToolClick += new Toolbar1.ToolClickEventHandler(_ToolbarClick_Listener1);
+
+                        //EventInfo ei = fieldInfo[i].FieldType.GetEvent("ToolClick");
+                        //MethodInfo mi = this.GetType().GetMethod("_ToolbarClick_Listener", BindingFlags.Instance);
+                        //Delegate dg = Delegate.CreateDelegate(ei.EventHandlerType, fieldInfo[i].GetValue(this), mi);
+                        //ei.AddEventHandler(fieldInfo[i].GetValue(this), dg);
+                    }
+                    else if (fieldInfo[i].FieldType == typeof(Toolbar2.UltraToolbarsManager))
+                    {
+                        Toolbar2.UltraToolbarsManager ut2 = fieldInfo[i].GetValue(this) as Toolbar2.UltraToolbarsManager;
+                        ut2.ToolClick += new Toolbar2.ToolClickEventHandler(_ToolbarClick_Listener2);
+                    }
+                    else if (fieldInfo[i].FieldType == typeof(ToolStrip))
+                    {
+                        ToolStrip t1 = fieldInfo[i].GetValue(this) as ToolStrip;
+                        t1.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this._toolStrip_ItemClicked);
+                    }
+                    else if (fieldInfo[i].FieldType == typeof(System.Windows.Forms.TextBox)) 
+                    {
+                        System.Windows.Forms.TextBox text = fieldInfo[i].GetValue(this) as System.Windows.Forms.TextBox;
+                        text.TextChanged +=  new System.EventHandler(TextBox_Listener);
+                        //text.KeyUp += new KeyEventHandler(TextBox_Listener);
+                    }
+                    else if (fieldInfo[i].FieldType == typeof(UltraText1.UltraTextEditor))
+                    {
+                        UltraText1.UltraTextEditor t1 = fieldInfo[i].GetValue(this) as UltraText1.UltraTextEditor;
+                        t1.TextChanged += new System.EventHandler(TextEditor_Listener1);
+                        //t1.KeyUp += new KeyEventHandler(TextEditor_Listener1);
+                    }
+
+                    else if (fieldInfo[i].FieldType == typeof(UltraText2.UltraTextEditor))
+                    {
+                        UltraText2.UltraTextEditor t2 = fieldInfo[i].GetValue(this) as UltraText2.UltraTextEditor;
+                        t2.TextChanged += new System.EventHandler(TextEditor_Listener2);
+                        //t2.KeyUp += new KeyEventHandler(TextEditor_Listener2);
+                    }
+                }
+                catch
+                {
+                }
+            }
+        }
+
+        public void _ToolbarClick_Listener1(object sender, Toolbar1.ToolClickEventArgs e)
+        {
+            ClientCommon.RecordUserEvent("点击", "按钮[ToolBar]", e.Tool.CaptionResolved, this.Text, this.ProductName, "");
+        }
+
+        public void _ToolbarClick_Listener2(object sender, Toolbar2.ToolClickEventArgs e)
+        {
+            ClientCommon.RecordUserEvent("点击", "按钮[ToolBar]", e.Tool.CaptionResolved, this.Text, this.ProductName, "");
+        }
+
+        private void _toolStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
+        {
+            ClientCommon.RecordUserEvent("点击", "按钮[ToolBar]", e.ClickedItem.Text, this.Text, this.ProductName, "");
+        }
+
+        private bool isDangerous(string target)
+        {
+            if (target == null) 
+            {
+                target = "";
+            }
+            string targetUpper = target.ToUpper();
+            bool isDanger = false;
+            string matchStr = "EXEC|INSERT|SELECT|DELETE|UPDATE|DROP|TRUNCATE|DECLARE|AND|UNION|OR|CREATE|XP_CMDSHELL|NET USER|NET LOCALGROUP|ASC|ORDER";
+            if (targetUpper != "")
+            {
+                string[] matchStrArray = matchStr.Split('|');
+                for (int i = 0; i < matchStrArray.Length; i++)
+                {
+                    if (targetUpper.IndexOf(matchStrArray[i]) > -1)
+                    {
+                        return true;
+                    }
+                }
+             }
+            return isDanger;
+        }
+
+        private string filterDangerStr(string source)
+        {
+            if (source == null)
+            {
+                return  "";
+            }
+             source = source.Replace("'", "“");
+            //去除执行SQL语句的命令关键字
+            source = Regex.Replace(source, "select", "", RegexOptions.IgnoreCase);
+            source = Regex.Replace(source, "insert", "", RegexOptions.IgnoreCase);
+            source = Regex.Replace(source, "update", "", RegexOptions.IgnoreCase);
+            source = Regex.Replace(source, "delete", "", RegexOptions.IgnoreCase);
+            source = Regex.Replace(source, "drop", "", RegexOptions.IgnoreCase);
+            source = Regex.Replace(source, "truncate", "", RegexOptions.IgnoreCase);
+            source = Regex.Replace(source, "declare", "", RegexOptions.IgnoreCase);
+            source = Regex.Replace(source, "xp_cmdshell", "", RegexOptions.IgnoreCase);
+            source = Regex.Replace(source, "/add", "", RegexOptions.IgnoreCase);
+            source = Regex.Replace(source, "net user", "", RegexOptions.IgnoreCase);
+            //source = Regex.Replace(source, "mid", "", RegexOptions.IgnoreCase);
+            source = Regex.Replace(source, "create", "", RegexOptions.IgnoreCase);
+            //source = Regex.Replace(source, "char", "", RegexOptions.IgnoreCase);
+            //去除执行存储过程的命令关键字 
+            source = Regex.Replace(source, "exec", "", RegexOptions.IgnoreCase);
+            source = Regex.Replace(source, "execute", "", RegexOptions.IgnoreCase);
+            //去除系统存储过程或扩展存储过程关键字
+            //source = Regex.Replace(source, "xp_", "x p_", RegexOptions.IgnoreCase);
+            //source = Regex.Replace(source, "sp_", "s p_", RegexOptions.IgnoreCase);
+            //防止16进制注入
+            //source = Regex.Replace(source, "0x", "0 x", RegexOptions.IgnoreCase);
+            return source;
+        }
+
+        private void TextBox_Listener(object sender, EventArgs e)
+        {
+            TextBox text1 = sender as TextBox;
+            string old_str = text1.Text;
+            text1.TextChanged -= new System.EventHandler(TextBox_Listener);
+            text1.Text = filterDangerStr(text1.Text);
+            text1.TextChanged += new System.EventHandler(TextBox_Listener);
+            if (!text1.Text.Equals(old_str))
+            {
+                MessageBox.Show("输入的字符串中含有数据库危险字符,已过滤。" + old_str);
+            }   
+        }
+        private void TextEditor_Listener1(object sender, EventArgs e)
+        {
+            UltraText1.UltraTextEditor text1 = sender as UltraText1.UltraTextEditor;
+            string old_str = text1.Text;
+            text1.TextChanged -= new System.EventHandler(TextEditor_Listener1);
+            text1.Text = filterDangerStr(text1.Text);
+            text1.TextChanged += new System.EventHandler(TextEditor_Listener1);
+            if (!text1.Text.Equals(old_str))
+            {
+                MessageBox.Show("输入的字符串中含有数据库危险字符,已过滤。" + old_str);
+            } 
+        }
+        private void TextEditor_Listener2(object sender, EventArgs e)
+        {
+            UltraText2.UltraTextEditor text2 = sender as UltraText2.UltraTextEditor;
+            string old_str = text2.Text;
+            text2.TextChanged -= new System.EventHandler(TextEditor_Listener2);
+            text2.Text = filterDangerStr(text2.Text);
+            text2.TextChanged += new System.EventHandler(TextEditor_Listener2);
+            if (!text2.Text.Equals(old_str))
+            {
+                MessageBox.Show("输入的字符串中含有数据库危险字符,已过滤。" + old_str);
+            } 
+        }
+
+    }
+}

+ 9 - 0
.svn/pristine/1b/1b30d8db1edf3286e89b2aa390acfc9f62effd39.svn-base

@@ -0,0 +1,9 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="Core.Mes.ServerManager.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="Setting" Type="System.String" Scope="User">
+      <Value Profile="(Default)" />
+    </Setting>
+  </Settings>
+</SettingsFile>

+ 4232 - 0
.svn/pristine/1b/1ba03c2f6dab318cab4f29de099076691b846816.svn-base

@@ -0,0 +1,4232 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="ultraToolbarsManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>194, 2</value>
+  </metadata>
+  <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>30</value>
+  </metadata>
+  <metadata name="ultraDockManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>464, 2</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="appearance1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        Qk3OAAAAAAAAAHYAAAAoAAAACwAAAAsAAAABAAQAAAAAAAAAAAATCwAAEwsAABAAAAAQAAAAAAAA/wAA
+        gP8AgAD/AICA/4AAAP+AAID/gIAA/4CAgP/AwMD/AAD//wD/AP8A/////wAA//8A/////wD//////93d
+        3d3d0ElM3Q3d0N3QSUzdDd0ADdBJTN0N0ADd0ElM3Q0ADd3QSUzdAADd3dBJTN0NAA3d0ElM3Q3QAN3Q
+        SUzdDd0ADdBJTN0N3dDd0ElM3d3d3d3QSUw=
+</value>
+  </data>
+  <data name="appearance2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        Qk3OAAAAAAAAAHYAAAAoAAAACwAAAAsAAAABAAQAAAAAAAAAAAATCwAAEwsAABAAAAAQAAAAAAAA/wAA
+        gP8AgAD/AICA/4AAAP+AAID/gIAA/4CAgP/AwMD/AAD//wD/AP8A/////wAA//8A/////wD//////93d
+        3d3d0ElM3d3dDd3QSUzd3dAA3dBJTN3dAA3d0ElM3dAA3d3QSUzdAA3d3dBJTN3QAN3d0ElM3d0ADd3Q
+        SUzd3dAA3dBJTN3d3Q3d0ElM3d3d3d3QSUw=
+</value>
+  </data>
+  <data name="appearance3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        Qk3OAAAAAAAAAHYAAAAoAAAACwAAAAsAAAABAAQAAAAAAAAAAAATCwAAEwsAABAAAAAQAAAAAAAA/wAA
+        gP8AgAD/AICA/4AAAP+AAID/gIAA/4CAgP/AwMD/AAD//wD/AP8A/////wAA//8A/////wD//////93d
+        3d3d0ElM3d0N3d3QSUzd0ADd3dBJTN3dAA3d0ElM3d3QAN3QSUzd3d0ADdBJTN3d0ADd0ElM3d0ADd3Q
+        SUzd0ADd3dBJTN3dDd3d0ElM3d3d3d3QSUw=
+</value>
+  </data>
+  <data name="appearance4.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        Qk3OAAAAAAAAAHYAAAAoAAAADAAAAAsAAAABAAQAAAAAAAAAAAATCwAAEwsAABAAAAAQAAAAAAAA/wAA
+        gP8AgAD/AICA/4AAAP+AAID/gIAA/4CAgP/AwMD/AAD//wD/AP8A/////wAA//8A/////wD//////93d
+        3d3d3UlM3dDd3Q3dSUzdAA3dDd1JTN3QAN0N3UlM3d0ADQ3dSUzd3dAADd1JTN3dAA0N3UlM3dAA3Q3d
+        SUzdAA3dDd1JTN3Q3d0N3UlM3d3d3d3dSUw=
+</value>
+  </data>
+  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>803, 4</value>
+  </metadata>
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        /0mZlP8v4uD/Df///wDu6foB///7AP3/6gP///AB+/33Avn89wL4//cA9//7APb9/wD2/P8A//n/AP/5
+        /wDu//oP7v/6C/rz/wD/8/8D//P/Cf/0/wX/+P8C7+72AvD5/wPm7v8F+vL/Av/t/wv///kQ//+SC6SK
+        45F0YO79Oy7b/xwU1/8OEOb/Awzw/wAH8v8ACPH/AA3y/wAN8f8ADfD/AAr4/wAG//8ABP//AAP//wQA
+        //8GAP//BgD//wkA//8NAP//DwD8/xAA+/8OAfn/CQL3/wQC+v8BAv7/AAL//wAD/v8AAv3/AAT8/wAF
+        /f8AEOr/BA3p/w4E+P85JvX/cGvf45udzWf//7YK////Avvz+QP9/+kN/f/qCfr4/QL3+P0C+P/3Avf/
+        +wL2/f8C9fz/Af/5/wH/+f8A7v/6CO/++gf68/8C/fP/A//z/wX/9P8C//j/AfX18AX6/uoI8v7kDOX6
+        6g31//8Zk5n6QGBY44lFMt7dJxnj/xgR4/8SEOr/Cg3x/wEH9f8DBff/BQn4/wcK+P8RC/b/FxDn/xcS
+        1/8ZFsv/HyLB/yMnxv8mK9X+KSzW/Swu1f0vL9T8MC/S/DAvzv4uLM7/JSXL/xoazv8PENP/DQ7g/wwO
+        7f8JC/P/BAT0/wYH+f8IAvr/CAfu/w0N8/8OB/f/Egbo/yMczv9HQdTYZmXriJCS/if///8J9/vsCfv/
+        5wj6+fsB+vr9Afj/9wH3//sB9v3/Afv6/wH++f8C/vn/APD++gD/6v8A+vP/BPrz/wL+9P8A+/vxAPz+
+        6wD//+wF/f/oCvb/4w7///EVlrW3SVBess0wK9r/FQj6/wgB//8FBP//Awf//wEF//8AAv//BQP//w4C
+        //8UAP3/JgT4/0Mh6v9jTN7/eWzI5WtrlpttcZiTcYO0jXKEs4h0iK+Ed4ythHaLqoRzh6qGc4OwjWNy
+        rJVkbcG3XWLV8UND3/8lIt//FQ7k/xAH7/8PAPf/FAL8/xEE+/8HAvH/CQbv/xAM+f8PAv3/GAnt/zg0
+        0/9dZbiypLLCJv///wTy/usA9vr9APn6/QD4//cA9//7APb9/wD9+f8B/fn/Av75/wD/9/8B/vb/Afrz
+        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
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/8
+        7wD//O8A//3wAAAAAAD///QB///0AAAAAAD29fEA9vXxAPb18QAAAAAAAAAAAAAAAAAAAAAAAAAAAPj+
+        /wH4/v8B+P7/Afj+/wH4/v8B+P7/Aff9/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAADv/P8A7/z/APD8/wDx/P8A8/39APX9/QD0/f8A9/3/APj+/wD4/v8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD4/v8A+P7/APj+/wD4/v8A+P7/APj+/wD3/f8AAAAAAAAAAAAAAAAAAAAAAAAA
+        AAD4/v8A+P7/APj+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7/z/Ae/8/wfw/P8G8fz/BfH9/wXy/f8D9P3/Avf9
+        /wL4/v8B+P7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA+P7/APj+/wH4/v8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO/8/wLv/P8K8Pz/CfH8
+        /wjx/f8I8v3/BPT9/wP3/f8C+P7/Avj+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj+/wD4/v8C+P7/AQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AADy/f8B8v3/BfP9/wT0/f8D9P3/A/X9/wL3/f8C+P3/Avj+/wD4/v8AAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4/v8A+P7/APj+
+        /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//CAADggIP//8IAAOHBn////g8A/kgD///Ev+HAAEP//8
+        QcAAAAQ///4AwAAgHj///AAAAAAQP//8AAAAABA///yAAAAAej8gAAAAAAAAACAAAAAAAAAAAAAAAAAA
+        AACOAAAAAAAB+AAAAAAAAAB4IAAA5/8AABwAAAACGAAAHAAAAAIAAAAADAAAIgAAAAAAAAAEAQAAAAAA
+        AAOB4MAAAAAAAABgAABIAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAgAAAAAAIiAH5gABA
+        AAgAAHAQAAAAAAAAYGQAAkAAAACB4AAAAACAAAxwAAAAAIAACHAAAAAA/AAIcAAAAAD8AAf4AAAAAf4A
+        AEAAAAAE/wAAAHAAARwyAAAAAAAAADIAAAAAAAQAMgAAAAAAAAD+wAAAAAAH//4AAAAAAAZ//gAAAAAA
+        An/+MQAAAAAD///wAAAAAAD///AAAPgAAP//+AAAAAAAf///8AAAAAB///+YAAAAAH///4AAAAAAf///
+        ggAAAAB///+AAAAAAA///8A4AAAAD///wBAAAAAP/////4AADz/////wIAAPP/////A8AJ//////8AAA
+        f//////wAAA///////Ej4D///////z/gP/////////////////AD//4/////8AP//j/////wA//+PygA
+        AABIAAAAkAAAAAEAIAAAAAAAAFEAABMLAAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///wA///8AT+//IC/f/1AAAA
+        AAAAAAAA+P7+Afn//QH3+v4B9/r+AvT8/wPz/f8E8f7/BvH//wnx//8J8f//CvL//gT//+0A///tAP//
+        7wD///EA///yAP//9AD///QAAAAAAAAAAAAAAAAAAAAAAPj/9wH4//cC9//3Avb/9wL2//cBAAAAAAAA
+        AAD///QB///0Av//8QL//+8E///uBv//7gX///ADAAAAAP/5/wD/+f8AAAAAAP34/wD9+P8C/fj/Av34
+        /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///wAP//8AD+//IA/f/1AAAAAAAAAAAA/f/1Af3/
+        9AL9//QC/f/1Avv+9gHz/f8A8f7/APH//wHx//8B8f//Af7/7gP//+0G///tBv//7wX///EE///yA///
+        9AL///QBAAAAAAAAAAAAAAAAAAAAAPj/9wD4//cA9//3APb/9wD2//cAAAAAAAAAAAD///QA///0AP//
+        8QD//+8A///uAP//7gD///AAAAAAAP/5/wD/+f8CAAAAAP34/wD9+P8A/fj/AP34/wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f/0Af3/9AL9//QC/f/0Av3/
+        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
+        GPp/Uxv2dk8d84FeM+6ig2C6yLGXN5mLfRD+8uQL+fLrAAAAAAAAAAAAAAAAAAAAAAD3/P8A9/z/Avf8
+        /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP9/wL0/v8E8/3/BvL8/wX1+fsC9/r1Af/3
+        3gH/8tEB9du1A+HAlAbAnGwKuJlsFL2geB3Bp4cvv6mOW7OfhYyulnmrsZVus7idd5zDqoVpybCPMLqi
+        gRm5oYMO8uPQBffu5QX+8eMBAAAAAAAAAAAAAAAAAAAAAAAAAAD3/P8A9/z/APf8/wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAO74/wTw+v8G8/7/BPX//wP4/f4C+P3+Aff+/wD2/v8A8/v/AP37
+        8QH+/vED/v7wBP787AX38+II6ePQDN7XwhHaz7cU49m4G+zlwh/07MoZ/PXcDP/+7AX///IB+/PpAPbt
+        5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAPb+/wH3/v8C9///Avj//wL4/v8C+P7/Avf+/wL2/v8C8/v/AvL4/wL0/P4D9f3+BPX9
+        /gT1/f4E9f39BPb9+gL4/fcC///hAf/+2wH/+9kB//ziAf//7gD///MAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj/
+        /gH4//4C9/7/AvX8/gL1+/4C9vz/AvX8/wLy+v8D8vr/A/b9/gL1/f8D8/z/BPH6/wTv+P8E8Pn/A/P7
+        /wL0/P8B8/n+APX7/wD2/P8A9vz/APX7/wD3/f8A+P7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/88AH//fAC/v3yAfT7
+        /gD4/PsA+f37APX8/wDy+v8A9fbzAfb28gH1/f8A8/z/APH6/wDv+P8A8Pj/APP7/wDy+f0B8/n+AvX7
+        /wL2/P8C9vz/AvX7/wL3/f8C+P7/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/87wD//fAA//3wAAAAAAD///QB///0AQAA
+        AAAAAAAA9vXxAPb18QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4/v8B+P7/Avj+/wL4/v8C+P7/Avj+
+        /wL4/v8C9/3/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///QA///0AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4/v8A+P7/APj+/wD4/v8A+P7/APj+/wD4/v8A9/3/AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAO/8/wDv/P8B8Pz/APH8/wDx/f8A8v3/APT9/wD1/f8A+P3/APj+/wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAPj+/wD4/v8A+P7/APj+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO/8
+        /wXv/P8K8Pz/CPH8/wfx/f8I8v3/BfT9/wP1/f8D+P3/Avj+/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj+
+        /wD4/v8C+P7/Avj+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO/8/wXv/P8K8Pz/CfH8
+        /wjx/f8I8v3/BfT9/wP1/f8D+P3/Avj+/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj+/wD4/v8C+P7/Avj+
+        /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP9/wLz/f8F9P3/A/X9/wL1/f8C9f3/Avf9
+        /wL4/f8C+P3/Afj+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj+/wD4/v8A+P7/APj+/wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD//wwAAPBgJD8AAAD//wwAAPBgJD8AAAD///wfAP8SAD8AAAD//xgfAOAAAD8A
+        AAD//xA4AAAAGD8AAAD//wAQAAAAGD8AAAD//wAAAAAAYD8AAAD//wAAAAAAYD8AAAD//wAAAAAAYD8A
+        AAD//wAAAAAAYD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAHAAAAAAAAAAAAAAAHAAAAAAAAAAYYAAABwAAAAAAAAAYYAAABwAAAAAAAAAIAAAAAAA
+        AAAAAAAAIAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAEAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAADAAAAAAAAAA
+        AACAADAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAABwAAAAAAAAAAAAAAAQMAAAIAAAAAAAAAAQ+AAAAAAAA
+        AACAAAEPAAAAAAAAAACAAAEPAAAAAAAAAAD8AAAPAAAAAAAAAAD8AAAPgAAAAAAAAAD+AAAAAAAAAAQA
+        AAD+AAAAAAAAAAQAAAARAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAARAAAAAAAAAAAA
+        AAD/MAAAAAAAHP8AAAD+AAAAAAAAHH8AAAD/CAAAAAAABP8AAAD/CAAAAAAAB/8AAAD/nAAAAAAAA/8A
+        AAD//AAAAAAAAf8AAAD//AAAAAAAAf8AAAD//gAAAAAAAP8AAAD///AAAAAAAP8AAAD///AAAAAAAH8A
+        AAD///AAAAAAAP8AAAD///AAAAAAAP8AAAD///AAAAAAAA8AAAD///AAAAAAAA8AAAD///gAAAAAAA8A
+        AAD///gCAAAAAA8AAAD/////AAAAHj8AAAD/////AAAAPj8AAAD/////AAAAf/8AAAD/////AAAB//8A
+        AAD/////AAAA//8AAAD/////AAAA//8AAAD/////Ez8A//8AAAD/////8/8A//8AAAD/////AD///H8A
+        AAD/////AD///D8AAAD/////AD///D8AAAD/////AD///D8AAAAoAAAAYAAAAMAAAAABACAAAAAAAACQ
+        AAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///wAv//8AT///AE/v/yA/3/
+        9AH9//QAAAAAAAAAAAD4/v8B+P7/Avj+/wD2+v8B9vr/Avb6/wLz/P8E8/z/BPL9/wXx/v8I8f//CfH/
+        /wrx//8K8f//CvH//wP//+0A///tAP//7gD///AA///xAP//8QD///MA///0AP//9AD///QAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD4//cB+P/3Avj/9wL3//cC9v/3Avb/9wL2//cAAAAAAAAAAAD///QA///0Av//
+        8wL///ED///wBP//7gb//+4G///vBf//8AT///ABAAAAAP/5/wD/+f8A//n/AAAAAAD9+P8A/fj/Av34
+        /wL9+P8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA///wAf//8AL///AC/v/yAf3/9AD9//QAAAAAAAAAAAD7//gB+//4Avz/9QH7/vcC+v34Avr9
+        +QL1/P0C8/z/AvL9/wLx/v8D8f//BPH//wTx//8E8f//BPr/8wT//+0E///tBP//7gT///AD///xAv//
+        8QL///MB///0Af//9AH///QAAAAAAAAAAAAAAAAAAAAAAAAAAAD4//cA+P/3Afj/9wH3//cB9v/3Afb/
+        9wH2//cAAAAAAAAAAAD///QA///0Af//8wH///EB///wAv//7gL//+4C///vAv//8AH///AAAAAAAP/5
+        /wD/+f8B//n/AAAAAAD9+P8A/fj/Af34/wH9+P8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///wAP//8AD///AA/v/yAP3/9AD9//QAAAAAAAAA
+        AAD9//QB/f/0Av3/9AL9//QC/f/0Av3/9AL///AA8/z/APL9/wDx/v8A8f//APH//wDx//8A5f//AP//
+        7QT//+0H///tBv//7gb///AF///xBP//8QT///MC///0Av//9AH///QAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAD4//cA+P/3APj/9wD3//cA9v/3APb5+gD28v8A+PP/AP/6/wD///QA///0AP/99wD//fUA///wAP//
+        7gD//vAA//7yAP/99AD/+/oA//n/AP/5/wH/+f8C//n/AP7/9QD8/u8A+/7tAPv+7QD7/u0AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/b/APf2
+        /wD49/8A+Pf/AAAAAAAAAAAAAAAAAP/5/wD9//QB/f/0Av3+9QL9/vUC/f/0Av3/9AL9//QAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA///tAP//7QT//+0F///tBf//7gX///AE///xA///8QP//vQC///1Av//
+        9AH///QAAAAAAAAAAAAAAAAA//j/AP/4/wD/+P8A//j/AP/4/wD/9/sA/vT3APbx/wD28f8B+PP/Af/7
+        /wD28/8A9/H/AP/5/wD/+f8A//j/AP/1/wD//P8A//r/AP/5/wD/+f8A//n/AP/5/wH/+f8C//n/AP7/
+        9QD8/+0B+//pAvv/6QL7/+kBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA9/b/APf2/wD49/8A+Pf/AAAAAAAAAAAAAAAAAP/5/wD9/vUA/vz3AP/4
+        /AL/+fsB/f/0AP3/9AD9//QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///tAP//7QH//+0B///tAf//
+        7gH///AB///xAf/99QH/+v0C//v8Af//9AD///QAAAAAAAAAAAAAAAAA//j/AP/4/wD/+P8A//j/AP/4
+        /wD/9/sA/vT3APbx/wH28f8G+PP/BP/6/wH28/8A/Pb/AP/5/wH/+f8B//j/AP/1/wD/+f8B//n/Av/5
+        /wL/+f8C//n/Af/5/wD/+f8A//n/AP7/9QH8/+0G+//pDPv/6Q37/+kGAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/b/Aff2/wH49/8B+Pf/AAAA
+        AAD9//QA/f/0AP/5/wH/9/8B9v/oAP/B/wD/i/8A+//zAP3/9AD9//QAAAAAAAAAAAD9+f8A/fn/AP34
+        /wD+9/8A+/j9APP/8QDy//AA6v/oAP/0/wH/8f8B/+3/Af/u/wH/8/8B//T/Af/v/wDs/v8A6vr/AOr4
+        /wDs9/8A4/j/AP/4/wH/9/8B//f/AP/4/wH/9/sB/vT3Afrz+gL48/8E+vT/A/r0/wL38P8C+e//Avzz
+        /wL/9/8B//f/Af/1/wL78P4G+vD+Bv/4/wL/+f8C//n/Af/5/wD/+f8A//n/AP7/9QL8/+0H+//pDvv/
+        6Q/7/+kIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA9/b/Aff2/wH49/8B+ff/APT67wDh9+EA///3AP/7/QH7/fMD9//sBfb/6wX3/+wD+//yAf3/
+        6wD4/fQAAAAAAPj3/wDu8/8A/fn/Af34/wH+9/8B+/j+Ae7+8wPt//ID7//0BPP9+AXy/foG8f37BvH9
+        /gbx/v8I8v7/B/L+/wbu/v8F6vr/Ber4/wTs9/8D7fj/A/f5/wL7+/8B+v3/Af/4/wH/9/sB/vT3Afz1
+        +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
+        1f8hIMP+PUS0+1NgsLhocdc6q7T1GeLv/wnq8/8B8fr/Afv//wAAAAAAAAAAAAAAAAAAAAAAAAAAAP35
+        /wD9+f8C/fn/Avz5/wH0+v8A//f/Av/3/wL+9v8B+vP/Afrz/wH4/P8B9/7/Avj+9QP5/+kL+//oDvn7
+        6gvu7fMI/fT7B+ni/xbV0f47tbH8dl5T8MUuJ+LvERLd/wYQ7v8EDvb/BAv4/wMH9v8BBvX/AQP3/wEB
+        +f8BAvj/BAb1/w0N8v8WFuf/HCHV/yUqv/xDSL7uZGnHxHp6031nWuM9SSrzJGVJ+CKLd/8iuav/I9/Q
+        /yL25v8d8ef/FN7i/wvK3P8Hzd7/B9Pk/wbW6P8G1+r/Btjr/wbW6f8G1ef/BtHh/wbO3f8H0uD/B8zW
+        /wy4v/8Un6X/Hn+B/yNlZvgmVVbtKlla6TV2fdZrbXS9slldq+tBP6T6Oiu0/jIYzv8lCuX/Ggfq/w8F
+        6v8HA+n/AwLr/wMC8f8DBfr/Agn8/wML+P8FCfX/Cg3l/xkd1vU2PNLWe4fpbdHl/Sbr9P8J8Pn/BPn/
+        /wEAAAAAAAAAAAAAAAAAAAAAAAAAAP35/wD9+f8A/fn/APb6/wH0+v8C//b/Av/2/wL/9v8B+PT9AP35
+        +ADx/v8B8P3/Afb++wP5/+kO+//oEfv+5wvw7PME9+n/Dvv1/yatquNia2jIxjwz0vgcEt7/BwXs/wAI
+        +/8ABfn/AALx/wAB7v8BCPj/Bwv//wYH//8AAf3/AADy/xEP8/8vL/P/T1bs/2hw3dl5gs+Tj5zCUr/Q
+        xyz//8cLAADzAGVJ9wCHdf4ARzf/AP///wj/7f8R//L/DP///wO7zP8Avc7/AMDR/wDE1v8Ax9n/AMjZ
+        /wDG2P8Aw9T/AMDP/wC/zf8Av83/AH2M/wA/SP8AXWL/AEA//wAAANYA////Av///wnO4NomnKq5SISM
+        tXeCgcq/cWLX9VM44f8vEOj/GQPn/xEE7f8MCvP/Bwz3/wAH9/8ABPb/AAT5/wAG//8BB///BQj1/w8R
+        2v8hJ7n/SVmq0W2DqGD///8F/f/5Bezt9QHt9f8A/fj/APr4/wAAAAAAAAAAAP35/wD9+f8A/fn/APT6
+        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
+        8AL///AE+P/3Afj/9wH4//cA+P/3AAAAAAAAAAAA//n/AP/5/wH/+f8AAAAAAPb8/wD2/P8B9f3/AfT9
+        /wH///wA///wAv///wOvoHYmpJl2bJWQdcN9emTOlX9ey8aTYc65g1DQm2Yv7odTGf9/SQ3/fUYH/39H
+        Bf+HTgn/jVQN/oJGAv+HSgP/kFEH/49OBv+KSQH/iUYA/4tHAf+PSwT/k0wG/5NLBv+RSgb/k0sI/5BF
+        Bf+PQgT/kEQE/5NHBP+XSQX/mUsE/5lMBP+YSwT/l0oD/5ZJAv+WSQL/lEkD/5RMBP+TTwb/kE4I/4pK
+        CP+JSw3/hkwQ/4BIEP6VXSn4xI1ay+ezfaqpeT7VglMY9YFKC/+RTQn/jUIB/5lLAP+dUQD+k04D/4hJ
+        Ev+ETS7/mmte0OrL0Gn/7fAk////Bv//+gD/+P4B//v+APjq9gH09fsC8f//BPH//wTy//4D8//9AvT+
+        /QD/9v8A//f/Af/3/wH/9/8AAAAAAP//8AH///AB+P/3APj/9wD4//cA+P/3AAAAAAAAAAAA//n/AP/5
+        /wD/+f8AAAAAAPX5+QD1+foA9Pz+APP9/wD///wA///pAPP55gGfjFsAmaOdG4WMfohja17jgnNY8cuU
+        Xc/AilDPtoNH2Kx6Pd2ebTDhi1sc+X1ODv96Swr/gFEO/3lHCP99SQf/hU8J/4lPCf+ITAT/iUkC/45H
+        Af+USQH/mUcC/5tFAf+dRgD/oUoB/5xHAv+ZRgL/m0cB/55JAf+hSwD/o0wA/6NMAP6iSwD/oUoA/6JL
+        AP+jTAD/oU4A/6FSAv6eUwX+lk8F/45LBf+LTg3/hU4R/3ZDC/94RhP/jl8t2rOMWLC4mmW8hWk06XhT
+        Fv+EUAn/ikkB/55QAP6nUgD+n0wA/5ZIAP+LRAX/llso4sSZdZDXtZcj////Av//+wD/9/0A//n+APjq
+        9gD19foA8v39APH//gDx//4A8//9APT+/QD/9v8A//f/AP/3/wD/9/8AAAAAAP//8AD///AAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPT18wD09fMA9PXzAPT28AD09vAA9/vvAPf7
+        7wP///sB8/PxAsbLvBZ9hXiQhnNW55ViMP2QXSf9s4JK1OCxd7TisXa4soJD4JNiI/GEVBL3hlUR/ItW
+        Ev2GTwr/hEsD/4pOB/+MTwb/kE8G/5NNBv+TSwX/kEME/5A/BP+UQwT/nkwI/pxLB/+bSQb/m0oG/5xK
+        A/+dSQL/nEgB/5xHAf+cRgH/nUgB/59JAf+hTAH/ok8B/p9RA/6aUQX+lU4G/45LB/+OUBH/i1IX/nxH
+        EP9tOQb/c0EP/4tgLu6zlGK8pYlX0o9pL/GFUQz/j08D/51QAP6lUQD+o1EB/pVJAP+KRAb/jFMj/5hu
+        S9ungmEz////AgAAAAAAAAAAAAAAAAAAAAD59PEA+fTxAPn08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPT1
+        8wD09fMC9PXzAPT28AD09vAA9/vvAPf77wD///sA////Ae3y5Aagpp0ejnhbg4RjQfp3Uij/dVAk+Ixl
+        N+62i1nZ0qVrrtakZbPEj0vQsHgu7qZoH/mXVw3+j00D/5FPBf+PTQX/kE0J/5NPD/+VVBf+klEa/otL
+        Gf+FRhb/hkYV/4pFDf+PRgj/kkgJ/5NJCP+USAf/lUcG/5VHBf+YSAb/mkoH/5xMCf+dTQn/l0gE/5VI
+        Bv+VSgv/lEwO/41GC/+LRg//jEoX/4tLGv+FRhb/iUwd/5ZhNu+qlXG1tqiFl5N2SL97Txf/hEsJ/5BH
+        Av+dTAH/o1QE/phNAf+TSwb/h0oR/3lNIumsiGZa+/rpEgAAAAAAAAAAAAAAAAAAAAD59PEA+fTxAvn0
+        8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPT18wD09fMB9fb0APT28AH09vAB9PbwAPf77wDv9OgA8/bsAv3/
+        9QP///8BmIFoKI1xUYF9WjPybkoh/3FLHv+GXCr0j2Ip3Kp4Odq+iUPfxIs/4tCRRunXlErt1JFF78aD
+        OPCraCD4k08M/oRBA/+CQgf/hkcS/4ZJGP+ESBr/g0cY/4pGD/+QRwr/k0kK/5RKCf+VSAj/lUYG/5VG
+        A/+XRgT/mEYD/5dGAv+WRQL/mEgF/5ZHB/+USAr/lUoO/4tCCf+HQAv/j0oZ/6JgMP+0c0P0x4ha7NGY
+        bcW+p4Zdx8CpOqyOYYOYbjjuiE8P/Y5GAv+bSwH/oVMC/pdMAP+UTAX/h0kO/3VJHviJa03FkHpiTP//
+        9QD37dgAAAAAAAAAAAD59PEA+fTxAfn08QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPT18wD8/fsA8fLwAfP0
+        8AH09vAB9PbwAAAAAADx9eoB8fXqAvP36wL1/fUCAAAAALygeh2HYzyOelw43XBRLP9qRBn/dEkV/4dW
+        HP+dZiT2snUt68iGPuvalUzt5Z5U7eWeVOzVkUrxv3w68KppLeqgYirnm18t5pddMfCSWzL8jVsx/4dY
+        Jv+GVyD/iFgg/4ZWHv+FUxv/g1EZ/4NRGP+GUhr/h1Ib/4VRGv+FUBv/jlok/5BdKf+TXy3ynWMv1JNV
+        H7uLSRaslFEhprJyQqHSk2OR87WHh//LoGf/58IV////BM6wg0SwiFWshVEY9ItIBf+YSwD/nE8A/pVK
+        AP+VSwP/jU0M/31OHf92VDD/fF4+eP///wb/++cBAAAAAAAAAAD59PEA+fTxAPn08QAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAADx8vAA8fLwAfHy8AH09vAA9PbwAAAAAADx9eoA+/7zAPv+9AD3+/AB9vjuAuri
+        2QHIt6UGjX1phX1oT+hsTS37e1Qp/n5NGv+ESg//k1IO/plSDf6hVg/+smYd+82BOfbkm1by7apr4uuu
+        dtHfpnPKyJRpybaFYdWrfV3enHtY04N1S9h4c0bdeHJF3XNsQN5uZzzfbGU54GxlO99waUHec2tF3XRr
+        SN11a0rcfXVU1YR9XtOSimy1s62Pc8vDqDvg1rwa7ODFDvbw1Q758dkK/PHaB/704AX4+vMC+P//AP38
+        7BGvkGpWfFIj6IdNDf+UTAH/l0wA/5VKAP+YTQD/lVEG/4RQEv9qQRH/flwzk9zTwCXn28QE////AP//
+        8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADx8vAA8fLwAPHy8AD09vAA9PbwAAAA
+        AADx9eoA/P/1APz/9QL6/fMC+PzxATEAAAAAAAAAraKUHKaNc3KVdlbhdk8k+3REEf+DSQ7/klAN/o9I
+        BP+SSAL/mEwE/5tPCf6dVRD9n1oc+p9fKPecYzD1nGk99a9+WdPNnn6OwqWCP7myiT29u45HvruPSLSv
+        hEGtp31AqaR5QKijeUCpo3w8rKaBO6ymgzqnooI3pKGCMKeihC61sJQq1dS5Hunq1A////sI////Bv//
+        /wb///QL///zCf7//QT0/vsC4vz/Af///wazk2tBjGIz4o5UFf+UTAH/lksA/5dMAP+aTwD/kU0D/3xI
+        C/94Tx7/k3RP0bShg3LDspcI////AP//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AADx8vAA8fLwAPHy8AAAAAAAAAAAAAAAAAAAAAAA8/XuAfP17gP19+8C/P/5AfP6+gHo8fEC////AMar
+        jh6niWlfl3VUwX9VLvV6SBv/jFMf/otJEv+MRQn/jUUF/4pCA/+IQwP/jEgL/49OE/+LUBf/hk4a/4xX
+        Je6aZzTNoHI/o82pfEv///8e////HP///xD///8L////Cf///wn///8H////Bf///wX///8E////Af//
+        /wD///8D////Bf///wP8//8D9vz5Bff89wX5/O8H+v3wBvP9+Qbr/f4L6fz/Dv///we7nHcpqINauJJd
+        JfGNSgX/lk0B/5hNAP+aTQD/kUoA/4JIBf+JWyH9k3FC9JuCWqTPw6MT////BP//8AIAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8PLsAPDy
+        7ALw8uwB9/r4AfT7+wLr8/MD4OvsAa2QcgDo1MYJwKSOYJx4WqyLXjniiFQq/4lKGv+LRg//jUYK/45H
+        DP+LRwv/i0gL/4tJDf+HSg7/f0UM/3xFDf+BTRb/ilso/4dlPKuVgmZ2uKSLXubdxyD///8GawAAAPF7
+        IwDnkQAA/fnIAP/9yQBarv8A///WAOb1/wDx+/8C8vz/A/D5/wLv+P8D7/n/BPD5/wTt9/8E8Pf/A+z7
+        /wfo+/8T5fj/GfH+/wzRtpgYxqaDfY5bJ9qFRgT/l08B/5xPAP+cTgD/lk0B/4tOBf6IVhb9h2Iu/4pu
+        QrjQwqAZ////Bf//8gL09O8A9fXvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA8PLsAPL07gDz9e4B8/j0AvX8/AL3/v4C9v//Af/25gH9++sE+PXkCP3a
+        uT2/kWuQi1ct4YtPI/mJSRb/ikcQ/5BNFf+NSxH/iEYJ/4RDBv+DRgn/hUkO/4RKD/+ASg7/e0kS/2xH
+        HP56XTz4nH9hzbeUcmLLoX0y2q2MH//auhL//+UEAAAAAP///wH/9ucB//XlAPT5/wH0+/8C9P3/A/H5
+        /wLy+v8D8/z/BPP8/wTw+f8E8Pn/BOr5/wjm+P8T4vX/GOT9/w3y2r4Q3LqWUIhTHceCQwL/mVAD/51Q
+        Af6dUAD+mlID/pFUB/54Rgb/dlEd/39jNrrLuZYZ////BP7/+gL09O8A9fXvAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8PLsAO7w6gDz9e4A8/j0APX9
+        /QD5//8A+P//AP/25gD///8B////Af/ryQnVs5Ufs4xyWZduVtODWDz+d0cl/31GHv9+RRX/gkUO/4ZG
+        CP+ISAT/jksD/5JOAv+UUAL+kk8D/4pJDP+JSxv/kFQp+JZbLuasc0rRz5t1rPzNq3D63Lwe8uzoBf3z
+        4Qf/9eYI//XmAvX3+wD0+/8A8/z+AfH4/ALy+v4D8vz/BPP9/wTw/f8H7vv/CO36/wnu/P8K6vj/COz+
+        /wPz2LoS4LyXVpFdKcmJSwv/mVEH/pRJAf+XSwD/lk8A/41PAf95RwP/dE0V/3pbKrzQvZcd////Bfv/
+        +QL09O8B9fXvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAPP17wDz9e4A8/j0APX8/AD3//8A9///AP/25gD+/e4A/PzxAP/dvAD///8A6NTNFKSF
+        dVGjfGWamGtO3IVRLP95QhT/gEQN/4xMDf+MSgX/jUgA/5NMAP+aUgD+mlIA/o9JB/+IRBH/hkUZ/4VI
+        G/+LUyr/l2M/76J0VNOeeF2pt5aBbOvSxy0AAAAA////Af///wDsyIEA/u+7AIbw/wDn9f8C6PX/BOj2
+        /wbr+v8I7Pv/CO78/wjx/v8I8v//A/fcwQC9oIIhrotnpIxaKeuDRQj/kUoD/5dNAP6cUQD+m1QB/pFT
+        BP6ATQj/dk4W/3paKb/ZxJ8l////CP3/+gL09O8B7vX/APP1/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AADy8vgA8vL4AfLy+AD/+N4AAAAAAP///wDkvKM0vpF0fplqR76GVi7xgU4e/4RLEv+ISwr/i0oE/5BM
+        Af+WUQD+nFUB/phQB/6SSwz+jEcN/4VDDP+CQw3/g0gV/4dSIv+NXjL/mW1B0J50QpCUaS5dz6p0Ov/i
+        sCb//s0X////Cv///wr///8L////DP///w////cR///1EP///wv///8D////Bf//7BHBnHhKk2pA4IdS
+        Hv+GRQb/j0cB/5lPAP6dUgD+mVIB/o1RBf6CUA//dE4Y/3VWJ8DZw58m////CP///ALu8/8A8/X9AfP1
+        /QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADy8vgA8vL4AfLy+AH2//8A/fTtAPv08gDcuqcB7dbIEs6y
+        n0mefWGyimI9539QIPSDTxP/i08J/5BPAv+TUQH/nFMC/qJVBf6iVAT+nE8A/pVKAf+USwH/k04C/45O
+        BP+CRgH/fUYD/4BPDv6MXyLyrYZLpcOibHvDp3Vhvax8RsO6jkPKxZs/08+nOd7ctjPm5sAv6uvFK9/d
+        uya2q5Uiwa+dM9Cyl1Swh2CRfEwb8IZKDv+TTgr/lU0F/5VLAf+XTAD/kEsA/4JIAv9/UBP/cEwZ/2xO
+        Ir3QvZkg////Bv///wHw8/8A8/X9AvP1/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADy8vgA8vL4APLz
+        +QD3//8A+fL0APry8wH///8A//73A+HOvA62noYkyKF6Y7WGVrWQXCD2ik8J/5JSA/+YVgT+kkoB/49D
+        Af+TRQH/mk0A/5xRA/6aUQP+lU8D/o1NA/+FSQL/gUoF/4BODf9/UhX+cEkP8m5MFut1WCbmfWY24Ih3
+        SNqViFrLo5htsbCof466tIt0wbyTZratjHWgkXqtmYRwyI5vVdt+VjDucD8P/YFFCf+VUQz/nFQM/pBG
+        Av+WSwL+lE4C/oNJA/+BUhX+c08d/29RJb3OwJwe////Bf///QHx8/4A8/X9APP1/QAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD3/v8A9/7/Afj//wH4//8B+P7+Afn7+wL5+vsB2qSXAAAAAAAAAAAA/+O7GNGl
+        eEKmeER1m28+0oheK/94TBf/gU0Z/5BJD/6aSQj/nE0H/5xOB/+cTgX/m00E/5lMBP+ZTQP+mE0D/5RM
+        Bf+PSQf/jkoF/45NB/+PTwz/j1MS/49XGf+TXR/6mWMl755mKt+gZinTnmMnzJZgKdSKYDDvhFos+n1N
+        H/96QxD/hkgM/4xHBv+VSwb/mk8J/4tCAf+STAj+lFUO/oVREP54Thf/e1sv/4NpQ7fCs5EU////Avn3
+        /AH28vcB5vL/APHy/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADz+vwA8/r8AvT7/QL2/f4C9/7/Avf+
+        /wL2/v8B+f/5APv66gD//O8BbgAAAP///wP//+8Zr5V4co1yU6t7XDrLiWE4+ZhWHf+dSwr/mUYE/5hH
+        BP+eSwX/ok0F/6JLA/+iSgL+okoA/6FKAP+gSQD/pE0D/qZPA/6lTgH+oEwA/5tJAP+YSAD/l0kC/5VL
+        Bv+USQb/kEYF/4pFBv+CSg3/e0UI/3tBBP+GRAf/mVMQ/pZLBv+URwH/lkoD/41EAv+PSwj/jVIP/oFR
+        FP5tRRP/g2Q75KKLaIzEspUN////APf1+gH18vgB8PH7Ae/w+wD7//8A+P//APj//wD4//8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AADt9PcA7fT3AfD3+gLz+v0C9fz+AvT8/gL0/P0B9//9APb//wD0/PsA/v/yA//+6Qf/++EN+ffgDfrw
+        0CDQr4lbpHtRwqBfJ9+aTRDtkEgM+4xGCP+UTAr/mU4K/5dKBf+URQP/lkYC/5pKAf+eTQD/mEcA/5pI
+        Af+gTgL/oVEE/p1PBf+ZTQT/lUoE/5JJBP+QRgP/jEQC/4pGBv+MURL+hEsO/4hKC/+UUA7/nFQR/plO
+        B/+WSQD/lUkC/5ZNB/+NSQX/gUYF/3hJDf9uRhX+jm5ErNrEo0bq278J////Af//9wHw7/0B8fD9A/Hv
+        /QH7//8A+P//APj//wD4//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADt9PcA7fT3APD3+gD1/fwB9v/8AvX+/AL1//wC9v/9Avb/
+        /gL0/PsC9/36Avv+9AL//+gC////Af///wXdvpsOqIFXH7yUaDqoi2KHkXlR4XFbMflrTyH+bUsY/3FK
+        Ev93Sg//fk4N/4RPCf+ITQP/i04C/5JRA/+XUgT+mFED/pNMAf+PSAH/jUYB/49HAf+TTAb/lU8K/5hR
+        Cv6cUgT+mEoC/5hIAv+cSgL/m0gD/51LAf+eTAH/nEwF/5xTD/6KSgr/eEEH/3RIE/6LaD32pohihPPr
+        2hv469UE////AP//9wDy7/4C8u/+BvLv/gL7//8B+P//Avj//wL4//8BAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADt9PcA7fT3APr/
+        /QH1//oC8/75A/X/+wLy/PgD8Pv3BPH7+gP0/fwC9/7+AvX9/wLs8/8B//8AAP/4vADGmmcAf0IEAP//
+        /wvExKY0pJx5YX92Um6MelGeiG8/2XlaJf9xTBL/dksL/35OCP+FTQP/h04A/41PAP+UUAH/llEB/5RO
+        AP+STAD/kksB/5RLA/+TTAX/kUsG/5NLBP+eTwD/olAA/qNPAP6jTQD+o0wA/qNNAP+gSwD/mkcB/5ZM
+        B/+LSgr/gkwS/4ZbJvqwjGGozrmWSf///wz/++oD//30APPx+QHz8fsC8u/+A/Ht/gH5//8B+P//Avj/
+        /wL4//8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPn//QH1//oC8v74AvX/+wLw+/YC7vr1A+/6+AP1/fwC+f//AfX8
+        /gHx9voB8fT6APHz/QDu6/8A+fj9Af//8Ab///8I////Cf///wreyJw4q5Bgc4lqNaWCXyq/g2Ar5YNd
+        Jf9+Uxj/fU4Q/4BNDP+ETAj/hUsF/4hMBP+LTgX/jk8H/49PCP+NTAb/iEcD/4dGAP+OSgH/lE8E/5VQ
+        Bv6UTgf+kk4J/o9MCf+JSAn/g0QN/4BJFP99Th//glcq6JdtO57ZtIlI///qGP//8gb//u4B//32APPx
+        +QH08vgB7+n/APr//wD4//8B+P//Afj//wH4//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPn//QD1//oA8v74APX/
+        +wDw+/YA7vr1AO/6+AD1/fwA+P//APb8/gDx9voA8fT6AAAAAADx8P8A+Pb7AP//4wD/+tQA//LHAOzY
+        pwDYyKMB1MiuAtnMthHMvqZDpJN4l4t3WNN3Xjrhd1ox53hXKux4UyH0dk4Y/XdLEP95Swz/fUwL/4FN
+        Cv+CTAf/gUoE/35IA/96SAT/eksJ/3tMD/96TBP/c0oV/25IGP9tSiD/bk8t+m1UNulrVUDgcV1MnNDB
+        sBn69e8G//vyAf//8wD//uwA//32APPx+QD08vgA+f7/APn+/wL5/v8B+P//APj//wD4//8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAPn//QD1//oA8v74APX/+wDw+/YA7vr1AO/6+AD1/fwA+P//APb8/gDx9voA8fT6AAAA
+        AADx8P8A+Pb7AP//3wD/+dAA//HCAOXHgwD///8B////Av///wXq4s4Rw7acIrSjhTO2oHxDwKR8X8Cf
+        coCyjFuwnXVA64ldIvp7TA7+dUUE/nhEAv59RwP+gksG/oNNCP99TAj/f1AP/4BTFf5+URj+dk0Z/nVP
+        H/6DYDf6mXlX2KqQcm2bh3I1h3lsHfrv5A3///8C/94NAP//8wD//uwA//32APPx+QD08vgA9/z/APf8
+        /wL3/P8B+P//APj//wD4//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9f//APX//wL1//8C9P7/A/L9/wX0/P0D+fv3Av//
+        +gP///8C////Af///wL///8J//jQFfLQoyTLpnQ6rIRPVpdtNWOJXiRpiF0lcpRrOImadkamnXpNv516
+        TdCceEfZnntK1KF+TsKgfU6mlHFDgopoO26RcUhjqotpT+LIqh3///8F////AP/56wT+794B//v5AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA9/z/APf8/wH3/P8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8fv/APH7
+        /wTx+/8F8/3/BfL9/wbz/f8E9fr+AvT6/QL//1UA/vffAP7z1QD758QA7tKqANq2hQCyg0gAaikAAP//
+        /wD///8E////DvDp4SXOxrdDv7OjXLmok267pIR5wKmId8q1lGfayapK//LcIv///wwAAAAAWyMAAI5Z
+        JwD38u0C9eviA//y4wD+8eMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/z/APf8/wD3/P8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA7vj/AO74/wXv+f8G8/3/BPT//wT2//8D+P7/Avj9/gL4/v4B9/7/APb+
+        /wD2/v8A8fj/APz78gH9/fID/v/zBP7/8QT+/vAF/f7uBvz86wb6+uYJ+fjkCvj34Av6+NwP/PraFP36
+        1xf++dcV/vrdDf/85gj//+4E///yAv//8wD37+UA9u3kAPbt5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9Pz/APT8/wL1/f8D9/7/Avf/
+        /wL4//8C+P7/Avj+/wL4/v8C9/7/Avb+/wL1/f8C8fj/AvL4/gL1/P0D9f39BPX9/QT2/v0E9//+BPn/
+        /wT///8D////Av///wL///8C////Av//7wP//+UD///lAv//6QH//+8B///yAP//9AD37+UA9u3kAPbt
+        5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA+f//APn//wH5//8C+P//Avb9/wL2/f8C9vz/Avb8/wL3/f8C9f3/AvP7/wPy+v8D8/v/AvT7
+        /wL0/P8D9P3/BPP8/wTx+/8E8Pr/BPD6/wTx+v8C8vv/AvL7/wH//9cA/v7iAP793gD++90A/vvjAP38
+        7AD7/vUA+v36APj+/gD4/v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/75APv++QH7/vkC+v76Avb8/gH0+/4B9Pv+AfX7
+        /wH2/P8B9Pv/AfL6/wLx+f8D9fr7Avf7/AL1/f8C9P3/AvL7/wPw+f8D7/j/A+/4/wLx+f8C8/v/AfT7
+        /wHy+P0B8/n+AfX7/wH2/P8B9vz/AfX7/wH1+/8B9vz/Afj+/wH4/v8AAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//zvAP/8
+        7wH//PAC//3wAf/98QD0+/4A/v/1AP//9AD9/vYA9Pz/APL6/wD19fMA9vXxAfb18QH1/f8A9P3/APP8
+        /wDw+f8A7/j/AO/4/wDx+f8A8/v/APP5/QDz+f0C9Pr+AvX7/wL2/P8C9vz/Avb8/wL2/P8C9vz/Avj+
+        /wL4/v8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA//zuAP/87gD//O8A//3vAP/96wD0+/4A///0Af//9AH///QA9Pz/APL6
+        /wD+7tkA9vXwAPb08AD1/f8A9P3/APP8/wDw+f8A7/j/AO/4/wDx+f8A8/v/APf9/wD3/f8C9/3/Avj+
+        /wL4/v8C+P7/Avj+/wL4/v8C+P7/Avf9/wL3/f8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//zvAP/87wD//O8A//3wAP/9
+        8AAAAAAA///0AP//9AH///QAAAAAAAAAAAD29fEA9vXxAPb18QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAPj+/wD4/v8B+P7/Afj+/wH4/v8B+P7/Afj+/wH4/v8B+P7/Aff9/wH3/f8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA7/z/AO/8/wDv/P8A7/z/APH8/wDx/P8A8/3+APT9/AD0/f4A9P3/APX9/wD4/f8A+P7/APj+
+        /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj+/wD4/v8A+P7/APj+/wD4/v8A+P7/APj+
+        /wD4/v8A+P7/APf9/wD3/f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4/v8A+P7/APj+
+        /wD4/v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7/z/AO/8/wHv/P8B7/z/AfH8/wHx/P8B8fz/AfH9
+        /wHz/P8A9P3/APX9/wD4/f8A+P7/APj+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD4/v8A+P7/APj+/wD4/v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7/z/AO/8
+        /wbv/P8J7/z/CPH8/wfx/P8H8fz/B/H9/wbz/P8D9P3/A/X9/wP4/f8C+P7/Avj+/wEAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4/v8A+P7/Avj+/wL4/v8BAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA7/z/AO/8/wfv/P8L7/z/CvH8/wnx/P8I8fz/CfH9/wjz/P8D9P3/A/X9
+        /wT4/f8C+P7/Avj+/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAD4/v8B+P7/Avj+/wL4/v8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Pz/APD8/wXw/P8I8Pz/B/H8
+        /wby/P8G8vz/BvL9/wX0/f8D9f3/A/b9/wP4/f8C+P7/Afj+/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4/v8A+P7/Afj+/wH4/v8BAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA9P3/APT9/wP0/f8E9P3/BPX9/wL2/f8C9v3/Avb9/wL2/f8C9/3/Avj9/wL4/f8C+P3/APj+
+        /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4/v8A+P7/APj+
+        /wD4/v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///4GAAAB+AwAiH////4GAAA
+        A+AwAiH/////+A/gA////j//////+A/AA/8MwAH////4cA/AA8AAAAH////4cn/8B8AAAcH////4YB4A
+        AAAAAcH////8AB4AAAMAAeH////4AAAAAAAABgH////4AAAAAAAABgH////4AAAAAAAwBg/////4AAAA
+        AAAABgH////4AAAAAAAABgH////5gAAAAAAAf+H/CBAIAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAw8AAAAAAAAAAAB/hAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAPgGAAAAA8P
+        //AAAAP8AAAAAAAMDgAAAAB8AAAAAHgMD4AAAAB8AAAAAAAEAGAAAAAAAAAAAAAEAAAAAAAAB8AAAAOG
+        ABAOAAAAAAAAAAAIABAAAAAAAAAAAAAAABAAAAAAAAAAAAAHwB8B4AAAAAAAAAAAIAcAAAAAIAAAAAAA
+        AAEAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAwgAD4GAAAAAAAAAhwgAAwDgAAAgAAAAgwgABwAAAAAAAAAAggAACfxgAAAAAAAAAAAAAfABg
+        AAAAAAAAAAACeAcYAAAH4AABAAAACAcAAAACAAAAgAAAiB+AAAAAAAAAwAAA3//AAAAMAAAAwAAAAQfA
+        AAAAAAAAwAAAAQfCAAAAAAAA/4AAAAfF4AAAAAAA/4AAAAfwAAAAAAAA/8AAAP/wAQAAAAQf/8AAAAAA
+        AAAAAAAc/8AAAAAAAAAAAAAc//AAAAAB/AAAABB8DEAAAAAAAAAAACAEDEAAAAAAAAAAAAAEDEAAAAAA
+        AAAAAAAEDEAAAAAAAAAAAAAE//9AAAAAAAAAAf///8YAAAAAAAAAAeP//8AAAAAAAAAAAeP//8CAAAAA
+        AAAAAeP///CEAAAAAAAAAH///+GAAAAAAAAAAH///+PDAAAAAAAAAB/////AAAAAAAAAAB/////AQAAA
+        +gAAAB/////AAAAAEAAAAAf////wAAAAAAAAAAf/////+AAABMAQAA//////xgAAAAAAAAP/////xAAA
+        AAAAAAP/////wAAAAAAAAAP/////wHAAAAAAAA//////wGgAAAAAAAP/////wAAAAAAAAAA/////wAAA
+        AAAAAAA/////8AHgAAAAAAA/////8ACAAAAAAAg/////8ADAAAAAAEA////////+AAAAA/H////////A
+        AAAAA/H////////AP8ABz//////////AAAAAD//////////AAAAAP//////////AAAB////////////A
+        AAAAH//////////AAAAAH//////////BGP8AH///////////H/8AH//////////////////////////A
+        AP///+H////////AAP///+H////////AAP///+H////////AAP///+H////////AAP///+H/KAAAAIAA
+        AAAAAQAAAQAgAAAAAAAAAAEAEwsAABMLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///AB///wBP//8AT///AE/v/yA/3/9AL9//UBAAAAAAAA
+        AAAAAAAAAAAAAPj+/wH4/v8C+P7/AfX6/wD2+v8B9vr/Avb6/wL1+/8D8/z/BPP8/wTz/f8E8v7/BvH+
+        /wjx//8K8f//CvH//wrx//8K8f//CvH//wbv//8B///tAP//7QD//+4A///uAP//8AD///EA///xAP//
+        8gD///QA///0AP//9AD///QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj/9wD4//cB+P/3Avj/
+        9wL3//cC9v/3Avb/9wL2//cC9v/3Afb/9wAAAAAAAAAAAAAAAAD///QB///0Av//8wL///IC///xA///
+        8AT//+8F///uBv//7gb//+4G///vBf//8AP///AAAAAAAP/5/wD/+f8A//n/AP/5/wAAAAAAAAAAAP34
+        /wH9+P8C/fj/Av34/wL9+P8B/fj/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
+        8AH///AC///wA///8AP+//IC/f/0Af3/9QAAAAAAAAAAAAAAAAAAAAAA+v78Afr++wL7//kB/P72Afn8
+        +gH4/PsC+Pz7Avb8/QL0/P8D8/z/A/P9/wPy/v8E8f7/BfH//wbx//8H8f//B/H//wfx//8H8//8Bfz/
+        8QL//+0C///tAv//7gL//+4C///wAf//8QH///EB///yAf//9AH///QB///0Af//9AAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA+P/3APj/9wH4//cB+P/3Aff/9wH2//cB9v/3Afb/9wH2//cB9v/3AAAA
+        AAAAAAAAAAAAAP//9AD///QB///zAf//8gH///EC///wA///7wT//+4E///uBP//7gT//+8D///wAv//
+        8AAAAAAA//n/AP/5/wD/+f8B//n/AAAAAAAAAAAA/fj/AP34/wH9+P8B/fj/Af34/wH9+P8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///wAP//8AD///AA///wAP7/8gD9//QA/f/1AAAA
+        AAAAAAAAAAAAAAAAAAD8//UB/P/1Av3/9QL9//QC/P/1Avz+9QL8/vUC+/72Avf9+wHz/P8A8/3/APL+
+        /wHx/v8B8f//AfH//wHx//8B8f//AfH//wH7//ID///tBf//7QX//+0F///uBf//7gX///AE///xBP//
+        8QT///ID///0Av//9AL///QC///0AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4//cA+P/3APj/
+        9wD4//cA9//3APb/9wD2//cA9v/3APb/9wD2//cAAAAAAAAAAAAAAAAA///0AP//9AD///MA///yAP//
+        8QD///AA///vAf//7gH//+4B///uAf//7wH///AA///wAAAAAAD/+f8A//n/Af/5/wL/+f8BAAAAAAAA
+        AAD9+P8A/fj/AP34/wD9+P8A/fj/AP34/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAD///AA///wAP//8AD///AA/v/yAP3/9AD9//UAAAAAAAAAAAAAAAAAAAAAAP3/9AH9//QC/f/0Av3/
+        9AL9//QC/f/0Av3/9AL+//MB///tAPP8/wDz/f8A8v7/APH+/wDx//8A8f//APH//wDx//8A8f//AP//
+        6wL//+0G///tB///7Qb//+4G///uBv//8AX///EE///xBP//8gP///MC///0Av//9AL///QBAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj/9wD4//cA+P/3APj/9wD3//cA9v/3APb/9wD2/vgA9vT9APbx
+        /wD48/8A/fj/AP/6/wD///QA///0AP/99gD//PgA//31AP//8AD//+8A///vAP/+8QD//fMA//30AP/8
+        9wD/+vwA//n/AP/5/wD/+f8B//n/Av/5/wH9//QA/f/zAPz+7gD7/uwA+/7sAPv+7AD7/uwA+/7sAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPf2/wD39v8A9/b/APj3/wD49/8A+Pf/AAAA
+        AAAAAAAAAAAAAP/5/wD/+f8A/f/0Af3/9AL9//QC/f71Av3/9AL9//QC/f/0Av3/9AH9//QAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///tAv//7QX//+0G///tBv//7gb//+4F///wBP//
+        8QT///EE///yA///9AL///UC///0Av//9AEAAAAAAAAAAAAAAAAAAAAAAAAAAP/4/wD/+P8A//j/AP/4
+        /wD/+P8A//j/AP/4/gD/9voA/vX3APbx/wD28f8A9vH/Afjz/wD9+P8A//v/APfz/wD48v8A//n/AP/5
+        /wD/+f8A//n/AP/3/wD/+f8A//n/AP/5/wD/+f8A//n/AP/5/wD/+f8A//n/AP/5/wH/+f8C//n/Af3/
+        9AD9//MA/P/sAfv/6QH7/+kB+//pAfv/6QD7/+kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA9/b/APf2/wD39v8A+Pf/APj3/wD49/8AAAAAAAAAAAAAAAAA//n/AP/5/wD9//IA/f/0Af77
+        +AL++vkC/vz3Af3/9AH9//QB/f/0Af3/9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAD//+0B///tAv//7QL//+0C///tAv//7gL//+8C///wAv//8AL//vUC//z6Av/8+QH///QB///zAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA//j/AP/4/wD/+P8A//j/AP/4/wD/+P8A//j+AP/2+gD+9fcA7O3/APbx
+        /wL28f8F+PP/A/34/wH///8A9/P/APjy/wD/+/8A//n/Af/5/wH/9/8A//f/AP///wD//v8B//z/Af/6
+        /wH/+f8B//n/Af/5/wH/+f8A//n/AP/5/wH/+f8A/f/0AP3/8wL8/+wF+//pCPv/6Qn7/+kI+//pBPv/
+        6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD39v8A9/b/APf2/wD49/8A+Pf/APj3
+        /wAAAAAA/f/0AP3/9AD/+P8A//n/AP/3/wAh/wAA//b/Af/2/gH/9v4B+//yAPz/8wD9//QA/f/0AAAA
+        AAAAAAAAAAAAAP35/wD9+f8A/fn/AP34/wD/9v8A/ff/APP98wDx//AA8f/wAOv/6gD/9f8A//b/AP/y
+        /wD/8P8A//D/AP/3/wH/+P8C//j/Af/1/wD/5v8A7f3/AOr6/wDp+f8A6/f/AO33/wDq+P8A//j/AP/4
+        /wD/9/8A//b/AP/4/wD/+P4A//b6AP719wD68/kA9vH/BPbx/wb48/8E/Pf/Avv2/wH38f8B+fD/Af32
+        /wH/+P8C//n/Af/4/wD/9/8A/vT/Afz0/wP89P8D/vf/Av/5/wL/+f8C//n/Af/5/wD/+f8A//n/AP/5
+        /wD9//QB/f/zA/z/7Aj7/+kN+//pD/v/6Q37/+kG+//pAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAPf2/wD39v8B9/b/Avj3/wH49/8B+Pf/AAAAAAD9//QA/f/0AP/4/wD/+f8B//f/AfT/
+        4wDi/8EA/9r/AMD/dAD7//IA/P/zAP3/9AD9//QAAAAAAAAAAAAAAAAA/fn/AP35/wD9+f8A/fj/AP/2
+        /wD99/8A8/7zAPH/8ADy//AA6//qAP/1/wH/9v8B//P/Af/w/wH/8f8B//L/Af/0/wH/9f8B//X/Af/q
+        /wDt/f8A6vr/AOn5/wDr9/8A7ff/AOn4/wD/+P8B//j/Af/3/wH/9v8A//j/Af/4/gL/9voC/vX3Avzz
+        9wL68/wD+fT/BPr1/wP79f8C9/L/Avfx/wP58P8D+/L/Av32/wL/+P8C//j/Af/3/wL98/8E+u/+B/rv
+        /gf89P8D//r/Av/5/wL/+f8B//n/AP/5/wD/+f8A//n/AP3/9AH9//MD/P/sCPv/6Q37/+kP+//pDvv/
+        6Qb7/+kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/b/APf2/wH39v8C+Pf/Afj3
+        /wHl/r0A9PvvAP///wD///cA//z8Af/7/AL6/fMD9//tBPb/6wT2/+sE9//tAvr/8QH7//IA+P30APj9
+        9AAAAAAA+Pf/APj3/wD//P8A/fn/AP35/wH9+P8B//b/Af33/wHx/fUB7f/yAu3/8gPv//QD8/33A/T9
+        +QTz/PoF8vz7BfL8/QXy/f4G8v3/BvP9/wb0/f8F8f7/BO39/wTq+v8E6fj/A+v3/wPs9/8C7fj/AvT4
+        /wL8+f8C+/v/Afr9/wH++f8B//f+Av/2+gL+9fcC/PT2Avz3+gL8+/wC+vv6Avj69wT2+vQG9vr0B/j5
+        9Af5+vMG+/zyBP398wT//PcD//n7A/70/gT67/4G+e7+Bvzz/gP/+/8B//n/Af/5/wH/+f8AAAAAAAAA
+        AAAAAAAA/f/0Af3/8wL8/+0G+//qCvv/6gz7/+oL+//qBfv/6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD39v8A9/b/APf2/wD49/8A+Pf/AOL/sgD0++8A/f/0AP3/9AH+//YC/f72Avj/
+        7gb3/+wL9v/rDPb/6wv3/+0H+v/xA/v/8wH4/fQA+P30AAAAAAD49/8A+Pf/AP35/wD9+f8B/fn/Av34
+        /wL/9v8C/ff/AvD99ATs//EI7P/xCe3/8gju//QI7v/2Ce7/+Avt//kM7f/7DO3//g3t//8P7v//Du//
+        /wzv//8M7f3/DOr6/wzp+P8K6/f/CO33/wft+P8H7/n/BPb7/wL3/v8C9v//Afn9/wH/9/4A//b6AP71
+        9wD89fcA+Pz5Aff+9wL3/vQE9v7wBvX+7Qr2/uwN9/7sDfn+7Av7/+wJ/f/tB///7gX//vED/vv3Avvz
+        /AL57v4B/PP+Af/7/wD/+f8A//n/AP/5/wAAAAAAAAAAAAAAAAD9//QA/f/zAPv/7wL7/+4F+//uBvv/
+        7gX7/+4C+//uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPn1/wD59f8A8//mAPX8
+        7wH0+e8B8/nvAfT77wH2/e8C+P/vBfn/7wX6/+8E+v/tBvn/7An4/+wK+f/rCf7/6wX//+cBAAD/AKPE
+        /wC1y/8Arr//AKSy/wCRnf8AfIX/AFlg/wA4O/wAIiT0ABgY8gAAAPQA//8AAP//3gf//98J///fCP//
+        4Qj//+YJ///tCv//8wv///kL///9DP///w3///8L////Cf///wj///8I////CP///wX///8B////AP//
+        /wEAAPwAWmT/ADpI/wAAAP8ARWD/AKa6/wDD0/8Azd3/ANHg/wD//+8B9f/zA/T/8Af0/+4K9v/sDPf/
+        6wz4/+sL+v/rCvv/6wn9/+sJ/v/qCfz+6gf6/OoF+fzpAvb74gD/9v8A//v/AP/5/wD/+f8A//j/AP/4
+        /wD/+P8A/vn/AP37+wD9/fcA+//yAfv/8gP7//IE+//yBPv/8gL7//IAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA+vT/APr0/wD3+vQB9vvyAvX58QLz+e8C9PvvA/b97wX3/+4I9//vCPf/
+        8Af3//AG+P/xBvn/8QX3//IF8f31Ber5+ATk8/kE2ej7A8HU/gOuv/8EpbP/BqSt/wigpv8LlJf/DIeH
+        /Qx6efkMamb3DGFb+QyOkPUTqbLzHau18h+psvIfprHzH6Sv8x+jrvMfoq3zH6Kt8x+kr/QfprD1H6Wv
+        9h2jrPcboKj3GZ+n9xikrfcYoKn2FY+W9RCXnvgQq7T9Ea22/w6stf8Kvcf/Cc3Y/wjT3v8G1N//BMzb
+        /wLK3P8C0uP+Aen2+QLy/vMF8v/vCvP/7Q31/+4L+P7uCfn/7gf7/+4G/P/tBv3/6wr9/+kM+/3pC/n7
+        6Qj5+esE+vbyAfr19AD/+/8A//n/AP/5/wD/+P8A//j/AP/4/wD++f8A/fn/AP35/wD7//IB+//xA/v/
+        8QT7//EE+//xAvv/8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD69P8B+vT/Avr2
+        /QL6+fkC9/n0AfT68AH2/PQC9v70BPb/8gb0//MI8f/0Cu7/9Qzs//cN7P/4De3//g7s//8U7P//GO3/
+        /xbr//8W4PT/GsbW/yu0wv9GpbD/YZif/3eHjP+Dd3n/iGZm+4lWVPiJSUP5iUU6+41GN/6SQzP+kz8v
+        /pM6Kv6TNSb9kzAj+pMuIveTLyP0kzEn85M1LvOSOTXzkj4785FCQPGPR0bvj01O749VV/CNX2Pzim90
+        +YmBiP+Hkpr/faOs/2qzvv9PxtP/Ntfl/yTo9/8Y6/v/E+7//xDv//8N8P//CfH8/Abw+/MH8PvyCe74
+        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
+        wIBYX9HTRUTc/y4k6v8cD/X/Ewb+/wsC//8GAv//BQP//wQE//8EB///Awj//wMH//8CBv//AQT//wED
+        //8DA///CQT//w0E//8MAfv/DgD5/xcA/f8gAfv/Kwn0/zcU6v9DI9//SzHS/1I/xf9ZSrX6W1Gj61ZT
+        itVTVX3JVliBylpikMZebqTBX3Kpv2ByqL1idKa7Y3akumR4pLlmeqO5Z3uguGZ7n7lleZ66ZHeeu2N1
+        n7xjc6K/X26iwlJhncZKWJ/MSFKo1EZNseJCSLrzPUDD/TY2zP8sLNL/JCPY/x4Z3/8YEeP/Egzl/w4H
+        6P8MA+3/DQDy/w8A9/8SAPr/FAL8/xMD/P8PBPn/CgP1/wgD8f8IBe7/Cgjw/w0K9P8NB/n/DQP8/w4A
+        +v8WBfb/Jhru/zs05f9PTt3/X2PTt3qHv1qkr8Ip////Dv///wX//P8B3f7PAPj98AD2+/gA+vn/APr5
+        /wD5/PoA+P/3APj/9wD4//kA9v79APb9/wDw//8A/fn/Af35/wL9+f8C/fn/Av35/wH0+v8A7/76AO/+
+        +gDp//gA+vP/Avrz/wT68/8E+vP/BPrz/wH+9P8A/vT/AP34+AD7/O4A+/7rAP//7AD//+wD///sBv//
+        7Af9/+oI+v/oCPX/6Azu/+kU/P/7GrbT1TJjfZ6JSl+Z2zlCrPYrKsT/Ihje/xkM8v8RBP3/CwL//wcD
+        //8GBP//BQX//wQG//8CBv//AQT//wAC//8AAf7/AQH+/wMC//8IBP//DgX//xID/v8WAf7/GgD+/yAC
+        +/8qCfT/PBrw/1Iz7/9pUPH/fmvy+5KD7eaek+W8l5PQeo+Su1mRk79ckZnJXJCg1FqQotZYj6HUVZCi
+        0lGRo9BPkqXQT5Snz0+VqM5PlKjOT5OnzU+RpMxPkKLNUJOi0laSodNbi5rQW4uX1WWOl998i5LopYOJ
+        7tRzdvHwX1/y/0ZG7P8xMOb/IR3j/xcR5P8UDeb/FAzt/xYL9v8TBvf/EAH2/xQD+v8WBf3/FAX8/w4E
+        +P8HAfH/BAHt/wYD7f8NCvL/Ew/5/xQO/f8TCf7/EQP7/xIC8P8WCt3/IRrN/zIxwP9HTbPtXWuowXKA
+        rmDR3PUU////CeLn/Qbh5v4B+P3vAPb7+AD6+f8A+vn/APn8+gD4//cA+P/3APj/+QD2/v0A9v3/AP/1
+        /wD9+f8B/fn/Av35/wL9+f8C/fn/AfT6/wD/9/8B//f/Af/3/wH89P8C+vP/Avrz/wP68/8C+ff/Aff+
+        /wH3/v8B+P/tA/n/6Ab6/+gG+/7oBvf47Qb29fAH//vyBvXv+Qno4v0R5OL/IdPT/zqWjvxYYF7ogj9G
+        wcYtOLP+HibB/xQY1P8SEej/Dwv0/woG+v8HBPv/BAT6/wMD+/8DA/z/AgP8/wEE+/8CBPv/BAX5/wgH
+        9v8KCvL/Cw7r/xAR4/8aF97/KyTh+zcs5+06Ku3TOCHxuTMV8aM/HvOaWDr2mnVc/ZmQfv+WrJ7/iMS5
+        /2zb0/8+9/P/JvHw/yTn7f8i2+r/H9rr/x3e7/8b5PX/GOn6/xfq/P8X6/7/F+z//xfs//8X6v3/F+r8
+        /xbn9/8X4O//HN7s/x/k8v8e3en/Jc7W/ze2vv9Woqj/eYqN/45wcP+ZU1P2mzo57J0pJeaeJyPjqjEv
+        4cE3Nd3bOTXY9S8p0v4kGs7/JBXW/yQQ4f8fCuv/GAbv/xAE7f8KA+v/CAPr/woH7v8MCvP/Dgr3/w0H
+        +f8LBfv/CgX1/woH5/8ODdv/FxjS/icsxv82P77yPkfFrE1T2WmCjPA63u7/G+f2/wvx+v8D8fr/Avz/
+        /wH2//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/fn/AP35/wH9+f8B/fn/Afz5/wH4+v8B9Pr/Af/3
+        /wL/9/8C//f/Av73/wH79P8A+vP/APn4/wD3/f8B9/7/Avf+/wL4/+0G+f/oDfr/6A/7/ugN9fbsCu7r
+        9Aj88/sH7uX/EOHa/yXQy/tItrP5eHdv8rNFOuvpJh/j+BAO4f4GDez/Aw72/wMN+P8DC/j/Awj2/wIH
+        9P8BBvT/AQP3/wEB+f8BAfj/AQL3/wMF9f8JC/L/ExHv/xob5f8fJdb/JSvE/TE3uPVNVLvkaG/Bw3+F
+        yIyNj9JWeXDgKFQ28xVbPvQTcln6EpB+/xO5q/8V2Mv/GO7d/hz25P4a8+X+E+nj/gzL1P8Fvc7/BL7P
+        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
+        0v8FDt7/BA7q/wYS9P8FDvP/AQPo/wAE7P8BDPn/Bg/8/wsP+P8NC+3/Egzg/x0Y0v8uKNDuRj7fwl9X
+        6n2iqP8u////EOPv/wru9v8E+Pf/Af/+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Pv/AfD7
+        /wTw+/8G8v3/CPL9/wjy/f8I8v3/BPb++gH///YB///qBv//4xH//+IX///iF///4xD//O0F//H/BP3w
+        /wr8+f8M0tXwGra81D5+cdh/Uzbe3UQj2v88HNH/PB3Q/0Ej1P9EJ9L/SS/O/VRCxvhcUMH1X1LD9mlX
+        yfh3XtH4dVrL+WhQvfhaSabyUEeR6lNPid9gYI3LfoOhpJmjs2jB08gg////ASkAtACVgtIAs57WAMy6
+        2gDt4t8A9OveAPXt3gD39N8A+/viAOD//wDy//0E8f/7CPH/+Anr//IN5v/uFeT/7Rrk/+0a5P/tEOT/
+        7QLy7vYA8vL4AAAAAAD/+f8A//n/Af/5/wL/+f8C//n/Av/5/wL/+P8B8P/fAPb/7AD2/+wA+P/uAPv/
+        8gD7//YA+/74APr9+gD4/PwA///rAP//7QP//+0G///tBv//6wj//+kK///oC///6Ar//+QFNSz/AHdl
+        9QAAAM4A////Ba262SuNl9BzaXLIt0dPwe4sM8L/FBvH/wkR0/8ED+L/BxXx/wYT8f8BCeT/AAbm/wAK
+        9P8DDPr/Bwr+/wsF//8PAv7/EgPx/yES5v87L9//U03byoCL1me1xNMt3evzD////wT7+P8C//7/APb1
+        +gD28/EA9PDtAPf17gD8/+8A/P/vAP//7wDv+/8B7/v/Bu/7/wjy/f8I8v3/CPL9/wjy/f8E9v77Af//
+        9gH//+oG///jEf//4hf//+IX///jEP/87QX/8v8E/fD/Cv///wuxs9gphYmzgmhgtsxBJ8X0NBPM/zsa
+        0P9NLuD/ZEfz/3da9f+Fa/X7j33y7pKG8OmQgvHwkX/y9ZV98faWfO/4lHzr85B/39eMhNCzjInHjpCS
+        wWiepsZBtsnTIP///wgAAA8AYSyLAIFIlwCLLX4Az5mwAPXj1QD56tYA+u3XAPvz2gD9++EAl///APD+
+        +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
+        7gL//+8E///tBf3/8Qb2//sH8v//CP//8gL///EC//7wAv/88AH19v0B7vH/A+n5/wrm/v4Y5f/9IuT+
+        /CPo/v0X6Pn9CNPC5SO6prZcjXVep3tdMeR6URr3fkcM/4U+Bf+OPwL/mEoD/55UAf6hWwD9oVwA/Z9b
+        AP2bWwD+l1gA/pVTAP6dTgL+q0kH/65HB/+rRQX/qEQD/6VEAf+kRwH/pEkB/6NMAf+iTgD/olAA/qFR
+        AP6gUgD+n1EA/p5RAP6gUgD+oFQA/p5WAP6bVAD/lU8A/49KAP+JRgT/hkYN/4dLG/+QVC/4ml9E7KRr
+        Vt2mcGPMoG9ruKd+gILItb487vT/FAAAAADYsXcA/dSYAP/puAD+/eIA///pAOnu9wDu8/kB8fj9AvH5
+        /gPw+P4D8Pn/A/L8/wP0/v8C9P7/AvX+/wL3/f8C+P3/AfT//wD69/8A+/j/AP34/wD/9v8A//T/AP/z
+        /wDS/9EA9f/1AvX/9QT0//MD+vb6Bv3s/g/+6f8Y/+f/Hf/n/xX/7vsE/+3/AOXm+wDExPsAqKb6AIR+
+        +wCXke88i4Pvx2ld6f81JOD/Gwzf/xAG4/8PCO//EAv4/wwJ+P8JCPj/CAf5/wkI+v8LCfz/BwT9/wwL
+        +Pw6Qt/sZ3fKuH6PzEv///8H////Av/9/wH///0A///uAv//7wT//+0F/f/wBvb/+gfz//8I//z1Av/9
+        9AL///MB///uAe/3+wDu8/0D6vn9Ceb+/RLl//0X5f/9F+3//w/o7N4LtZ6WRKSKe5h/YT/YbkoZ/3xK
+        Ev+LSg7/kkQJ/5dCBv+aRQT/oU0H/qdWC/2lVgv9nlMJ/pNRBP+OUQD/k1MC/plRBf6gSgj/okcJ/6BG
+        B/+eRQX/m0UD/5pHAv+aSQL/mkwB/5pOAf+bUAH+nFIB/pxTAf6dUgH+nVIB/p1SAf6eUwD+oFYA/p9V
+        AP6cUgD/lUwA/45GAf+GQQP/gkAJ/4VEFP+LSiH/lFQv/5hcPf+YYkn/m2xSzqF/W4iuj2NZxaFuOOvG
+        kyX/+MgV////CP///wH///8A////AP///wD6/f8B+Pv/AvT4/gPz9/4E9vn/A/j6/wL4+v8C+Pr/Avj6
+        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
+        6gH5+/IC///4A////wb058gWm4VfaYpxSM+AYDPwdlEf/W9JFv9yRxL/gksR/5FNDP+eTgL/plMA/qpY
+        AP2lVAD+nU0A/5NHAP+ORQH/kUsC/5JPBv+RUQz+jFEP/4VOEf+ATBP/hFIe+Z1vPti3jF+zv5dulMSg
+        e3jGqIRhvqaFSq+bfjeyoocwwLKYK9LFriDq4MwV//vpD////wv///8I////CP///wn///8K////Cf//
+        /wn///8I////CP///wj///8I////Bv///wX///8D////Av///wH///8D////Cf///wv///8I///yDvX2
+        2Rna17UozcWfOdXIoESynXBqiW09u3VYJutmSRf6Z0gU/3VPFv+JUwz+mVMB/phQAP+VTgD/l1AC/5pR
+        Bf6bUQv+j0wK/39KDP6KYyzinoRryZmAq9V8YMvpRCjE+SgLzP8pDuf/JQrv/yAG5P8rGMz/PTWy/FBO
+        o/JiY53Jg4StZtfY3SDt7+UHo4H/APf+/QLy+P4C8/v/AvT9/QL1//sC9f/7Af/4+QD/+vsA//n8AP/4
+        /gD/9/8A//f/AAAAAAD///IA///yAf//8gL4//cA+P/3APj/9wD4//cA+P/3AAAAAAAAAAAAAAAAAP/5
+        /wD/+f8A//n/AP/5/wAAAAAA+/ryAPz58QD4+u4A+frvAfz99gL///8C////Bv//9hHHt5M2rJNqbpx7
+        TLqMZzX4cEsY/2o/Cv+ETRP/l1QR/qFSA/6oVAD+qlcA/qdVAP6iUgD+nE8B/pdOA/6VTwT/kk8F/4xM
+        Bv+FSQf/fkcJ/3tHD/97Shb/fVAf9n9VKemCWzPfhWI91YpqR8uNcVHBkXlctpyHbKqrl36Tv62WaN3O
+        uj//9OUi////D////wT///8D////B////wn///8I////Bv///wP///8BAAAAAAAAAAAAAAAAAAAAAP//
+        /wD///8B////Af///wL///8D////Bv///wz///8W4efMK7exj2CroHuUrZ93obCec5ywmGqKjXJAo2lO
+        G+lqTBf/fFce/o5YEf6ZUwH+k0sA/5FKAv+dVwn9oFgL/ZdMBv6JRgP/e0YH/3ROGfZ2XUHsinGW5Ilu
+        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
+        AAAAAAAA//n/AP/5/wL/+f8B//n/AAAAAAD2/P8A9vz/AfX8/wL0/P8D8/z+A/P9/gH///8B/v7wA+vo
+        3Qne068gsKB3b6qZbbGznW20v6Vxo8+vfYy3j1+nl2k66YxaLPyIUST8hU4e/oRNGf+GTRT/h0sP/4dH
+        B/+JRgP/kEkD/5ZOBP+cUwb+mlAD/5hNAP+aTwD+m1AA/phNAP+VSwD/kUkA/49KAf+OTAL/i00E/4dM
+        Bv+CSwb/fkoI/3xLC/9+TRD/glAV/4VNFP+IRxD/iUcP/4pIEP6LShH+jUwR/o5NEv2OTRL9jU4R/YxO
+        Ef2MTRD+ikwO/olLDf6ISgz/h0kL/4ZJCv+FRwn/hEYI/4RHCf+FSQv/hEgL/4NHC/+ISg//jU4U/49Q
+        Gf6eXin2u3xG59maZd3pqnPav31A6ZNPC/uTSwj+nU8N/qNNC/+kSQf/nkMD/5lFAf+VSwD/j1IA/oZV
+        BP55TR7/c0xC/H1dcvCQdqDSsZ3UoMq57mrUw+834tHxFu7h9QT///wB//j9Av/5/gH57PgB9+34A/T4
+        /Abx/v8J8P/+Cu/+/Qrx//0J8//9B/P//QL/8v8A//f/Af/3/wL/9/8C//f/Af/3/wAAAAAA///wAP//
+        8AP///AE+P/3Afj/9wH4//cB+P/3Afj/9wAAAAAAAAAAAAAAAAD/+f8A//n/Af/5/wH/+f8AAAAAAPb8
+        /wD2/P8A9vz/AfX9/wL0/f8B8/3/AP///wD///EC////AureugysnHI5p5lycZ6VdayVjnHJhoFnwJWA
+        YMO3i1zRu4dU1K54RdiaZTDti1Ye/4NNE/9/SAz/fkYH/39GBf+DSQX/ik8J/5BUDP6KTAb+hUUA/4xM
+        A/+SUQb/kU8G/45MBP+LSAH/iUcA/4pHAf+MSQP/j0wF/5BMBv+QTAf/jksH/45LCP+QTAr/j0kJ/41D
+        Bf+NQgX/jkMF/5BFBf+SRwb/lEkG/5ZKBv+WSwX/lksF/5VKBf+USQT/k0kD/5NJA/+TSAP/kUgE/5FK
+        BP+RTAX/kU0H/49NCf+LSwn/iEkJ/4lMDv+ITRH/gkgQ/4hPGfydZDD0wYlV1e63grDPmmC/oG0w34hV
+        GPOBSg3/jk0L/5RMCP+PQwL/lEUA/5xOAP+aUQD+klAC/4hLDv+CSSH/g1E8/5NnYdzJpq+N/OPxTf/v
+        +B////8J//7/Av//+wD/+P0B//r+APfp9QD37fgC9Pf8A/H+/wTx//8F8f//BPL//gTz//0D8//9Af/y
+        /wD/9/8B//f/Af/3/wH/9/8B//f/AAAAAAD///AA///wAf//8AL4//cA+P/3APj/9wD4//cA+P/3AAAA
+        AAAAAAAAAAAAAP/5/wD/+f8A//n/AP/5/wAAAAAA9v3/APf9/wD2/f8A9P3/APT9/wDz/f8A////AP//
+        8AD6/PQA6unUAbOlfgKkppYhjJCAhHp/cNJeZFXxeG5W68ebbcngqG+9y5Zdw7B9QtybaC3yjlwg9YZU
+        F/eBUBH8fUwM/3pKCv9/Tw3/hFQR/nxKCv92QgP/f0oG/4hQCf+KUAr/ik4H/4dKAv+HRwH/iUUB/45H
+        Af+USgL/mksE/51KBP+cSAL/nEgA/51JAf+bRwH/l0QB/5dEAf+YRQH/m0cB/55KAf+hTAH/o00B/6NO
+        AP6jTQD+okwA/6FMAP+hTAD/oUwA/6FMAP+fTAD/nk4B/55SBP6cUwX+l1AG/5BMBf+LSgb/iU0N/4VN
+        EP96RQv/eUYQ/4VSH/+daznXxppnocync6WxkVvEg2Qv525LE/58Tg3/hU4I/4ZGAv+TSQD/pFMA/qRR
+        AP6dSwD/mEkA/5FIA/+KRw3/lFgn4cKSbJjpxalT8NXAGv/+/wX/8OYB///7AP/3/QD/+f4A+Ov3APft
+        +AD09/wA8f7/APD//wDw//4A8v/9APP//QDz//0A//L/AP/3/wD/9/8A//f/AP/3/wD/9/8AAAAAAP//
+        8AD///AA///wAPj/9wD4//cA+P/3APj/9wD4//cAAAAAAAAAAAAAAAAA//n/AP/5/wD/+f8A//n/AAAA
+        AAD1+PgA9fj4APX4+QD0+/wA9P3/APP9/wD///8A///wAPb67QH8//8CjHU6AKy8vQmRmI01f4Z5e2xz
+        ZdZ9cln5p3lK6LB3PuSrdTvjuoZK1cuYW8fMml3Bu4pMzp5uL+6KWhr/e0wM/3lKCf9+Twz/fk4M/39M
+        Cv+ATAf/g00G/4dOCP+JTwj/ik4F/4xMBP+PSgP/kkoC/5RIAP+URAH/lkIB/5dBAP+cRQD/oksD/qFL
+        BP+cSAT/m0gE/5xIA/+dSQL/n0oB/6BKAP+hSgD/oUoA/6BJAP+fSQD/n0kA/6BJAP+hSgD/okwA/6NP
+        AP6iUQH+oFMD/pxSBP6XTwT/kU0F/41MCP+NURD/iVIU/n1JD/9zQQv/cT4L/3pKGO+PZTLYqYVRw7aX
+        Yr2Ye0behGMr+oNXFv6GUAj/jEwC/5hOAP+kUwD+plIA/qJOAP6aSgD/kUYA/4hDB/+OUh/0pndQ07WN
+        bYC/nH0Z////Af//9wD///sA//f9AP/5/gD46/cA9+34APX3+gDz/PwA8v39APD//gDy//0A8//9APP/
+        /QD/8v8A//f/AP/3/wD/9/8A//f/AP/3/wAAAAAA///wAP//8AD///AAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPT18wD09fMA9PXzAPT18wD09vAA9PbwAPT2
+        8AD4/e8A9/vvAff77wP///8B////Af///wOZoJMwf4V4koV3XNaRZjr3j10p/41cJ/ymdkDdypxlv+Gz
+        e7XcrXK8vI1P1aNzNOaRYCDtilkX9IpZFPqMWBP9jVYR/oZOCP+DSgL/iEwF/4tOBv+NTwb/j08G/5NO
+        B/+UTgf/k0sH/5FFB/+PQQb/kEAG/5REB/+bSwr+nEwJ/plJB/+aSQf/mkkG/5tKBf+bSQP/nEgC/5xH
+        Af+bRwH/m0cB/5tGAf+cRwL/nkkC/59LAv+gTAL/oU4B/p9QAv6dUAT+mVAG/5VOBv+QSwf/jUsK/49Q
+        Ev6NUhf+g0sU/3hCDf9uOAb/cj4N/4BRH/+ZckHbtJdnuquQYMiZeUThiF0g9oRPCv+NTwT/lk8B/6BP
+        AP6kUQH+pFIB/ptMAP+RRwL/ikUH/4pOG/+RYzv7mG9NpbOObiX///8E/+vSAQAAAAAAAAAAAAAAAAAA
+        AAAAAAAA+fTxAPn08QD59PEA+fTxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        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
+        Psh2Wzn9bEwm/2lEGf9zSRj/f1Ea/41ZHf6bYyH2qm4n7rp5Me3Igzvv1I1E8N2WS/DjnFHt4ptS7tqV
+        TvHMiUfuvHs+57JzOuKqbjfgpGk3355lOOWZYTjzlGA4/JBgN/6KXjH/hFso/4NbJf+EWyX/g1ok/4FY
+        Iv+AVSD/f1Qe/35THf9/VB7/glUg/4NWIf+DViH/gVMh/4JVI/+KXSr/jmEw/45iMv6UZjfqnms6zZxk
+        MLSTViKgjU0alJJRII6oaDiMv4BRhdiZannxs4Vz/8ebaf/TqTv//NsN////AeDJnhzKqXtiqYBNq4ZV
+        HuuESQv/kUkD/5hMAP+bTgD/l0wA/5RKAf+WTAP/kU4K/4RPFv95TyL/c1Er/ndYNpK/pIMY////A//+
+        8AEAAAAAAAAAAAAAAAD59PEA+fTxAPn08QD59PEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHy8ADx8vAB8fLwAfHz8AD09vAA9PbwAAAAAADx9eoA8fXqAPP3
+        7AD2+u8A9/vwAff78AL2+e8C9/PjA5NxSwWYgGQWjHplfYRxWuBwVzv3akoo/XlTKf6AUyL+f0sV/4dN
+        EP6TUxD9mlUQ/Z9XEf2mXBT9s2ce+8h8M/fbkEn06qNe8PGtbeTvsXfV6q94zN+mdMfMmGvHu4lizrB+
+        XOCneVjmnHhV4ot0TeR7cUTpeHBC6nhvQep1az/rcWc77G5kOO1sYjbta2I27W1kOe1xZj7rc2hB63Vp
+        Q+p0aETrdWpH6XxxT+WCeFbih3xd3ZSJa7utooKGvrCQWce0lTbIrYwhxaOAF9S1kRfewJ0V5sOfEfHK
+        pg781LEM/ty+CPbw4gP7//8B8OLICu/dvyaigVhtfVQm24BMFP+OTAb/lUwB/5dMAP+WSgD/lUoA/5lN
+        AP+WUAX/i1IQ/nlKE/9oQBL7dFEoocOriTfl39UQ+/nqAv///wD//+8A///wAAAAAAAAAAAAAAAAAAAA
+        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
+        BP+LQwT/h0cJ/4JLDv98Rwr/ekMG/39CBv+KSAn/mFIQ/ppRDP6TSAL/lEgB/5ZKA/+RRwP/jUYE/49M
+        CP+NUA3+hVES/ndKEf9rRBP+fl4045+GYrCtl3VP8+jSBv///wD8+/cB9/T4AfTx+AHw8fsB7/D7AO7v
+        +wD6//8A+P//APj//wD4//8A+P//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAADt9PcA7fT3Ae/2+QLy+fsC9Pv9AvX8/wL1/P4C9Pz+AvT8/gH2//0A9v/+APb+
+        /AD3/PcA/v/yAv/+7Qb//eYL+vTZEOPZwBPfzq4f5syrOb+eeHSkfVTHn2g26p5UF+6YSQv2kUUH/I9D
+        Bf6RRgX/mU0J/p1PCf6cTAX/mUgD/5ZEAv+YRQH/mkgB/55MAf+fTAD/mkcA/5lGAP+eSgD/oU4C/6JQ
+        A/6gUAX+nE4F/5lNBP+WSwT/k0oF/5FIBP+QRgP/jUMC/4lCA/+KSgv+iVET/oNMD/+CSQv/i0wN/5RR
+        EP+bVBL+m1EM/pZKA/+VSAD/lUkB/5VLBf+TTAf/i0gE/4RHBf99SQv/c0cO/2xFFPyEYzfAv6aBb9zI
+        qC778tsG////Af//9QH9/fYA8O/9AfDw/ALw8PwB8fH9APr//wD4//8A+P//APj//wD4//8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOzz9gDs8/YB7fX4AfD3
+        +wH0/P0B9v79AvX+/QL1/fwC9v78Aff//gH3//8B9f7+AfP7+wH5/fcC/f/zBP795QX///UF////Av//
+        /wT///8Q2baQLKuEWlOodUVtqW44hJ9tOrqTaDjtgVkq/3ZPHf94TBf/e0sS/3xJDv9/SAv/gkgK/4ZK
+        Cv+KTQj/jk0E/5BNAv+PSwH/kkwC/5hPA/+bUQP+nFIE/plPA/6VTAP/kkkC/5BHAv+QRwL/kEgD/5JK
+        Bf+SSwf/kkwI/pVQCf6WUgn+kUwH/5BIBf+VSwb/mk0H/5tMCP+cTAX/nEwB/5tKAf+aSwP/m1AK/5dR
+        Df6ISAf/fEIF/3RDCv93TRr/gV0x+ZZ1TafUu5hD9ebOF/314QP///8A///0Af//7wDx7/4C8u/+BfLv
+        /gPz8v4A+v//Afj//wH4//8B+P//Afj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA7fT3AO309wD6//0A+P/8APX/+wH1//sC9f/7AvX/+wL0/voC9P76AvT+
+        /AL0/fwC9Pz7AvX9/AL3//8C9/3/Ae/1/wDm7P8A6/L/AO71/wH///8AYxwAAPX54gzRzbAsrKF/c5iL
+        Z7h7bknRaVoz3WtXLOhsUyTzbU8b/W9MFf9zTBH/eE4P/31QDP+BTgf/hE0D/4dPAv+MUQL/klIE/pZS
+        BP6WUgP+lE4B/5BLAP+OSAD/jUcA/49HAf+RSgP/lE0H/5VPCv+XUAr+m1EG/p9RAP6dTAD/nEkA/55K
+        AP+eSgD/nUcA/55JAP+gTAD/n0wB/5xLBP+cUAv+l1EO/odJCv96RAr/dUYQ/4FZKfeaeE/arY9rg+XO
+        ryb///8J//nqAv/9+gDy8PkA9PL4APLv/QPy7/4G8u/+BPPz/gD5//8B+P//Avj//wL4//8C+P//AAAA
+        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
+        +AD08vgA9/z/APf8/wH3/P8C9/z/Aff8/wD4//8A+P//APj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPX/
+        /wH1//8C9f//AvT+/wLy/f8E8v3+BPb8/AP6/PcC+/31A////wP///8C////Af///wH///8F////Df//
+        1xn93bEm5cKTNsagbk+uhlJqnHM7eI1iKH6DVxuBgVQah4hcJJSPZS+llGw4t5dwPseZckLUmHE/3Jdx
+        POCZcz/dmnVC05t2RMWYckGxjmk5moZiNIqFYjWBknFJeaaHZGnCpYU8///lFP///wMAAAAA////BP7w
+        4QT+798B//r3APjw6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD3/P8A9/z/APf8/wH3/P8A9/z/AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8/3/AvP9/wTz/f8E8/7/BPP9/wby/f8H8/z/BPT5
+        /QL1+vsC9fr5Afn68AD/99wA//LTAP/xzwD6474B79OrAeXFmwLZuIwCy6yCA8qxiwbaxqYL4c2xEd7K
+        rxTYxawd1cGrMcq4oku+rpdpt6aPgbKfiJSymn2is5l1qLabdqS6oXyWwqqGf8q0kWHWwKA84cywI+HP
+        sxXazbIM08OpCNrLtQT16doD9+7kBfbt5AT37uQB/vHjAP7x4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAPf8/wD3/P8A9/z/APf8/wD3/P8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AADv+f8D7/n/BvD6/wby/f8E8/7/BfP+/wX0/f8D9vz+Avb7/QL1+/8B//vJAP744wD+9NoA/vLUAPnl
+        wgDw1a8A37yNAL6IRgB+NQAAHQAAAAAAAAD///8C////BP///wj///8Q6eTaHNTNvynIv680wbSjO8Gw
+        l0PEsJFIyraVSdG/nkbby6o959u7L//23hv///8O////Bf///wAhAAAAgE0eAJlSBwD38ewB9eviAubg
+        3wD+8eMA/vHjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/z/APf8/wD3/P8A9/z/APf8
+        /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO74/wPv+P8G8Pr/BfP8/wT0/v8D9f//A/f/
+        /wL4/v8C+P3+Avj9/gH4/v8B9/7/APb+/wD3//8A9f3/APH5/wD3+fcB/PvzAv398wP9/vQE/f/0BP3/
+        8wT+//MF///1Bf//+wX///8F////Bv///wb///8G////B////wr///cO///tEf//5RL//+EQ///jDP/+
+        5gj//+sF///wA///8gL///QB/PTpAPfu5QD27eQA9u3kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA8vv/AfP7/wP0/P8D9v7/Avf//wL3//8C+P//Avj//wL4/v8C+P7/Avj+/wL3/v8C9v7/Avb+
+        /wL1/f8C8fn/AvH4/gL1+vwC9vz8A/b9/AT2/vwE9v79BPf//AT5//4E+///BP///wP///8D////Av//
+        /wL///8C////Av///wP///8E///6BP//7wT//+sD///qAv//7gH///AB///yAP//9AD89eoA9+7lAPbt
+        5AD27eQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD5//8B+f//Avn//wL4//8C+P7/Avf+
+        /wL3/v8C9/3/Avf9/wL3/f8C9/3/Avb9/wL1/f8C9Pz/A/P7/wPy+v8C8vn/AvP7/wL0/P8D9P3/BPP9
+        /wTz/P8E8vz/BPL7/wTy+/8E8vv/A/H7/wLx+/8C8vv/Au36/wH//+AA/v/hAP7+3gD//NsA/vvbAP77
+        4AD+/OYA/f7tAPz+8wD7/vcA+v77APj+/wD4/v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAPj//wH4//8C+P//Avj//wL2/f8C9fz/AvX8/gL1+/4C9fv/Avb8/wL2/P8C9fz/AvP7
+        /wLy+v8D8vr/A/T7/wP2/P8C9v3/AvX9/wP0/f8E8/z/BPL7/wTx+v8E8Pn/BO/4/wTw+f8D8fr/AvP7
+        /wL0/P8C9Pz/Aez4/wD//7UA//+8AP/9uAD/+q0A//h9AJz6/wDp9/8A8fr/APT8/wD3/f8A+P7/APj+
+        /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/73Afv+9wL7/vcC+/74Avj9
+        +wH1/P8B9Pv+AfT7/gH0+/8B9fv/Afb8/wH1/P8B8/v/AfH5/wLy+f4C9fn6Avb6+QL2/P0B9f3/AfT9
+        /wLz/P8C8vv/AvD5/wLv+P8C7/j/Au/4/wLx+f8B8/v/AfT8/wHz+v4B8vj9AfP5/gH0+v8B9fv/Afb8
+        /wH2/P8B9fv/AfX7/wH1+/8B9vz/Aff9/wH4/v8B+P7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD//PAB//zwAv/98AL//fEC/v3yAfX8/wD0+/4A+Pz7APv9+AD7/fkA9/z9APX8
+        /wDz+/8A8fn/APT29gD29fIB9vXyAfb39AD1/f8A9P3/APP8/wDy+/8A8Pn/AO/4/wDv+P8A7/j/APH5
+        /wDz+/8A8/v+APL4/QHz+f0C8/n+AvX7/wL2/P8C9vz/Avb8/wL2/P8C9fv/Avb8/wL2/P8C9/3/Avj+
+        /wL4/v8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/87gD//O4B//zuAf/9
+        7wH//e0A9fz/APT7/gD///IA///zAf//8wH//+kA9fz/APP7/wDx+f8A/+nKAPb07wH29PAB9vDpAPX9
+        /wD0/f8A8/z/APL7/wDw+f8A7/j/AO/4/wDv+P8A8fn/APP7/wDn/f8A9vz+Afb8/gL2/P8C9/3/Avf9
+        /wL3/f8C9/3/Avf9/wL3/f8C9/3/Avf9/wL3/f8C9/3/Avf9/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA//zvAP/87wD//fAA//3wAP/98AAAAAAAAAAAAP//9AD///QB///0Af//
+        9AAAAAAAAAAAAAAAAAD29fEA9vXxAPb18QD29fEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAPj+/wD4/v8B+P7/Avj+/wL4/v8C+P7/Avj+/wL4/v8C+P7/Avj+/wL4/v8C+P7/Avf9
+        /wL3/f8B9/3/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//O8A//zvAP/9
+        8AD//fAA//3wAAAAAAAAAAAA///0AP//9AD///QA///0AAAAAAAAAAAAAAAAAPb18QD29fEA9vXxAPb1
+        8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+P7/APj+/wD4/v8B+P7/Afj+
+        /wH4/v8B+P7/Afj+/wH4/v8B+P7/Afj+/wH4/v8B9/3/Aff9/wD3/f8AAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAO/8/wDv/P8A7/z/AO/8/wDw/P8A8fz/APH8/wDy/f4A9P38APX9
+        /AD0/f4A9P3/APT9/wD2/f8A+P3/APj+/wD4/v8A+P7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD4/v8A+P7/APj+/wD4/v8A+P7/APj+/wD4/v8A+P7/APj+/wD4/v8A+P7/APj+
+        /wD3/f8A9/3/APf9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj+
+        /wD4/v8A+P7/APj+/wD4/v8A+P7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7/z/AO/8
+        /wDv/P8A7/z/APD8/wDx/P8A8fz/APP9/gD1/fwA9f78APT9/gD0/f8A9P3/APb9/wD4/f8A+P7/APj+
+        /wD4/v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj+/wD4/v8A+P7/APj+
+        /wD4/v8A+P7/APj+/wD4/v8A+P7/APj+/wD4/v8A+P7/APf9/wD3/f8A9/3/AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+P7/APj+/wD4/v8A+P7/APj+/wD4/v8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADv/P8C7/z/BO/8/wTv/P8E8Pz/A/H8/wPx/P8D8fz/A/H9
+        /wPx/f8C8/z/AfT9/wH0/f8C9v3/Afj9/wH4/v8B+P7/Afj+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAD4/v8A+P7/Afj+/wH4/v8B+P7/APj+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO/8
+        /wTv/P8I7/z/Cu/8/wnw/P8I8fz/B/H8/wfx/P8I8f3/B/H9/wXz/P8C9P3/A/T9/wP2/f8D+P3/Avj+
+        /wL4/v8B+P7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj+/wH4/v8C+P7/Avj+/wL4/v8B+P7/AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7/z/BO/8/wrv/P8L7/z/CvD8/wnx/P8I8fz/CPH8
+        /wnx/f8J8f3/BvP8/wP0/f8D9P3/BPb9/wP4/f8C+P7/Avj+/wL4/v8AAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA+P7/Afj+/wL4/v8C+P7/Avj+/wH4/v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AADv/P8E7/z/Ce/8/wrv/P8J8Pz/CPH8/wfx/P8H8fz/B/H9/wfy/f8F8/z/A/T9/wP0/f8E9v3/A/j9
+        /wL4/v8C+P7/Afj+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4/v8B+P7/Avj+/wL4/v8C+P7/Afj+
+        /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPH8/wLx/P8F8fz/BvH8/wby/P8F8/z/BPP8
+        /wTz/f8E8/3/BPP9/wP1/f8C9v3/Avb9/wP3/f8C+P3/Avj9/wH4/v8A+P7/AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAPj+/wD4/v8B+P7/Afj+/wH4/v8A+P7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA9P3/AfT9/wT0/f8E9P3/BPX9/wP3/f8C9/3/Avb9/wL2/f8C9v3/Avb9/wL3/f8C+P3/Avj9
+        /wL4/f8C+P3/Afj+/wD4/v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+P7/APj+/wD4/v8A+P7/APj+
+        /wD4/v8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////wHgAAH//8
+        AOAA/gf/////8B4AAAAB/ADgAIYH//////AeAAAAAfwA4ACGD////////gD/gAH/////h/////////4A
+        /4AB//gYQAAH///////+AP+AAf/4GMAAB//////wOI//+AH4AAAAOAf/////8Djf//gB+AAAADgH////
+        //BgA+AAAAAAAAA4B//////wYAPgAAAAAAAAOAf//////AAH/4AAB/wAB/4H//////AAAAAAAAAAAAOA
+        B//////wAAAAAAAAAAADgAf/////8AAAAAAAAAAAA4AP//////AMAAAAAAAA6AOAf//////wAAAAAAAA
+        AAADgAf/////8AAAAAAAAAAAA4AH//////CAAAAAAAAAAH/+D/8EAAAAAAAAAAAAAAAAAAABBAAAEAAA
+        AAAAAAAAAgAAAQQAAAAAAAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAgAABAAAAAAAAAAAAAAAAAAAAAQAA
+        AAAAAAAAAAAAAAAAAAHg+AAAAAAAAAAAAAAAA//B4PgAAAAAAAAAAAAAAAH/gQAAAAAAAAAAAAAAAAAA
+        H4AAAAAAAAAAAAAAAAAAAB/ADgAAAAAA+D///wAAAAA/+AAAAAAAAAAcA4AAAAAAA/gAAAAAAAAAHAOA
+        AAAAAAP4AAAAAAD/gBwH/AHAAAAD+AAAAAAB/4AcB/wBwAAAA/gAAAAAAAAABAAAAAAAAAAAAAAAAAAA
+        AAQAAAAAAAAAAAH4AAAAABwEAAEAHgAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAHhAAQAAAAAAAAAA
+        AAAAAAAIwAH4AfAAAAAAAAAAAAAAD8AB+AHwAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAA4AAAA
+        AAAwwAAAAAAAABgACBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAIAAAAAAAAAAAAAAQAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4MAAB+AM
+        AAAAAAAAAgAAgeDAAAHgAAAAAAAAAAIAAIHAwAAA4AOAAAAAgAACAACAwIAAAOAAAAAAAAAAAAAAgOCA
+        AAP/4/gAAAAwAAQAAMCAAAAAP4ABAAAAAAAAAAAAgAAAAD8AAYAAAAAAAAAAAIAAAAA+ADhwAAAABnAA
+        AAGAAAAAPgA4AAAAAAQwAAABgAAAA4YD/gIAAAAEAAAAAYAAAACGA/4AAAAAAAAAAAHgAAAA5///gAAA
+        ADwAAAABwAAAAABAP4AAAAAAAAAAAcAAAAAAQD+AAAAAAAAAAAH/8AAAAEA/j/4AAAAAAAQB//AAAATA
+        P4/4AAAAAAAEAf/gAAAAAD/gAAAAAAAAAAH/4AAAAAA/wAAAAAAAAAAB//wAAAAf/+AAYAAAAABAP//4
+        AAAAAAAAAAAAAAAAADj/+AAAAAAAAAAAAAAAAAA4//4AAAAAAAAAAAAAAAED+P/+AAAAAAAA8AAAAAAD
+        A/gHCAAAAAAAAAAAAAAABgAIBwgAAAAAAAAAAAAAAAAACAcIAAAAAAAAAAAAAAAwAAgHCAAAAAAAAAAA
+        AAAAAAAIBwgAAAAAAAAAAAAAAAAACA8MAAAAAAAAAAAAAAAAABj///kAAAAAAAAAAAAAP/////hwAAAA
+        AAAAAAAAAD4f///4eAAAAAAAAAAAAAA+H///+AYAAAAAAAAAAAAAPh////gEAAAAAAAAAAAAAA4f///+
+        BAgAAAAAAAAAAAAP/////gQAAAAAAAAAAAAAD/////4fAwAAAAAAAAKAAA///////wAAAAAAAAAAAAAB
+        //////8AAAAAAAAAAAAAAf//////AGAAAAAMgAAAAAH//////wAAAAAADoAAAAAB///////ACAAAAAwA
+        AAAAAH//////wAAAAAAAAAAAAAB////////+AAAAAbwAIAAAf///////4AAAAAAAAAAAAB///////+HA
+        AAAAAAAAAAAf///////hkAAAAAAAAAAAH///////4ZAAAAAAAAAAAB///////+AKAAAAAAAAAAD/////
+        ///gAAAAAAAAAAAAP///////4AyAAAAAAAAAAB///////+AAAAAAAAAAAAAA///////gAAAAAAAAAAAA
+        AP//////+AAAgAAAAAAAAAD///////gAB4AAAAAAAAAA///////4AAYAAAAAAAAAgP//////+AAGAAAA
+        AAAAAAD////////////AAAAAAP8P//////////+AAAAAAAA/B///////////gAAAAAAI/wf/////////
+        /4AAAAAAAP+P//////////+AH/wAAOP/////////////gAAAAAA//////////////4AAAAAAP///////
+        //////+AAAAB////////////////gAAAAPgP/////////////4AAAAAAD/////////////+AAAAAAA//
+        ////////////gw4f/AAP//////////////8P//gAD///////////////D//4AA//////////////////
+        //////////////////////////////////////+AAB/////+B///////////gAAf/////gf/////////
+        /4AAH/////4H//////////+AAB/////+B///////////gAAf/////gf//////////4AAf////////4lQ
+        TkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAgABJREFUeNrs/XnQbNmWH4T91tp7nyGHb7rz
+        rXnq97r79SDRLalFGNqAwTJhJDtwOAICcCgwBkNgEIOFZeEgQoYAFAEmBMY2lhlsEA7ZFsY2IBtkrJa6
+        Q2qp6VE9vKFeDbfqTt+Qw5n23mv5j73Pyfy+e29VvaGqXte7qyIr8+Z38mSeYa29ht/6LcJz+W0vGrcA
+        QFcelzZJT6RP/umZe83PT9vdExvp1U2Iq8/7tHzPikr3LW3/aZ5L+3mfjOfy3RD9uA0ob0SAfgtGYH//
+        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
+        RU5ErkJggg==
+</value>
+  </data>
+  <metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>375, 2</value>
+  </metadata>
+  <metadata name="timer2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>621, 2</value>
+  </metadata>
+  <metadata name="MainPopup.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>708, 2</value>
+  </metadata>
+  <metadata name="ultraTabbedMdiManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>11, 4</value>
+  </metadata>
+</root>

+ 48 - 0
.svn/pristine/1b/1bdd7829884a465939b75c7fe89b96d92ed317d9.svn-base

@@ -0,0 +1,48 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DBProxy", "DBProxy\DBProxy.csproj", "{F6CD9B3C-806A-4009-ACAB-935FF453A13C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DBManager", "DBManager\DBManager.csproj", "{860513AD-2743-4EB8-9406-01FEEA175348}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.Mes.ServerManager", "Core.Mes.ServerManager\Core.Mes.ServerManager.csproj", "{B724E4EE-31DB-420F-B417-C54470FCFEBA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.Mes.ServerFrameWork", "Core.Mes.ServerFrameWork\Core.Mes.ServerFrameWork.csproj", "{300F90A7-7F06-402E-9104-9E23799E76B1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.Mes.ServerCommon", "Core.Mes.ServerCommon\Core.Mes.ServerCommon.csproj", "{6A96B64B-879F-463B-9360-ED5B7AFAAAE5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.Mes.IBaseInterface", "Core.Mes.IBaseInterface\Core.Mes.IBaseInterface.csproj", "{ED2F98A3-DF8A-4097-A916-A7268F8D2CD0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.Mes.PurviewManager", "Core.Mes.PurviewManager\Core.Mes.PurviewManager.csproj", "{CF2CBB34-C907-40E0-8C83-D81A234482E7}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{F6CD9B3C-806A-4009-ACAB-935FF453A13C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F6CD9B3C-806A-4009-ACAB-935FF453A13C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F6CD9B3C-806A-4009-ACAB-935FF453A13C}.Release|Any CPU.Build.0 = Release|Any CPU
+		{860513AD-2743-4EB8-9406-01FEEA175348}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{860513AD-2743-4EB8-9406-01FEEA175348}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{860513AD-2743-4EB8-9406-01FEEA175348}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B724E4EE-31DB-420F-B417-C54470FCFEBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B724E4EE-31DB-420F-B417-C54470FCFEBA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B724E4EE-31DB-420F-B417-C54470FCFEBA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{300F90A7-7F06-402E-9104-9E23799E76B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{300F90A7-7F06-402E-9104-9E23799E76B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{300F90A7-7F06-402E-9104-9E23799E76B1}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6A96B64B-879F-463B-9360-ED5B7AFAAAE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6A96B64B-879F-463B-9360-ED5B7AFAAAE5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6A96B64B-879F-463B-9360-ED5B7AFAAAE5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{ED2F98A3-DF8A-4097-A916-A7268F8D2CD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{ED2F98A3-DF8A-4097-A916-A7268F8D2CD0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{ED2F98A3-DF8A-4097-A916-A7268F8D2CD0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{CF2CBB34-C907-40E0-8C83-D81A234482E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{CF2CBB34-C907-40E0-8C83-D81A234482E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{CF2CBB34-C907-40E0-8C83-D81A234482E7}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

+ 314 - 0
.svn/pristine/1c/1cd388a25d23b301d7fd80cd00888af5024aaf30.svn-base

@@ -0,0 +1,314 @@
+using System;
+using System.Net;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using Core.Mes.ClientFrameWork;
+
+namespace Core.Mes.ClientPurviewManager
+{
+    public partial class frmQuestionFeedback : Core.Mes.ClientFrameWork.FrmBase
+    {
+        public frmQuestionFeedback()
+        {
+            InitializeComponent();
+        }
+
+        void doQuery()
+        {
+            string[] sArgs = new string[4];
+            if (!chbxTime_Q.Checked && !chbxCreator_Q.Checked)
+            {
+                MessageBox.Show("至少选择1个查询条件!系统自动选择1个条件。");
+                chbxTime_Q.Checked = true;
+            }
+
+            if (chbxTime_Q.Checked)
+            {
+                if (uldtpTime1_Q.DateTime > uldtpTime2_Q.DateTime)
+                {
+                    uldtpTime1_Q.Focus();
+                    MessageBox.Show("请选择合理的时间范围!");
+                    return;
+                }
+
+                TimeSpan tspan = uldtpTime2_Q.DateTime - uldtpTime1_Q.DateTime;
+                if (tspan.Days > 31)
+                {
+                    uldtpTime1_Q.Focus();
+                    MessageBox.Show("不能查时间范围超过1个月的数据!");
+                    return;
+                }
+
+                sArgs[0] = uldtpTime1_Q.Text + " 00:00:00";
+                sArgs[1] = uldtpTime2_Q.Text + " 23:59:59";
+            }
+
+            if (chbxCreator_Q.Checked)
+            {
+                if (txtCreator_Q.Text.Trim() == "")
+                {
+                    txtCreator_Q.Focus();
+                    MessageBox.Show("请输入查询内容!");
+                    return;
+                }
+                sArgs[2] = txtCreator_Q.Text.Trim();
+            }
+
+            if (rdbtnAll.Checked)
+                sArgs[3] = "All";
+            else if (rdbtnNoReply.Checked)
+                sArgs[3] = "NoReply";
+            else if (rdbtnNoComplete.Checked)
+                sArgs[3] = "NoComplete";
+            else if (rdbtnComplete.Checked)
+                sArgs[3] = "Complete";
+
+            string err = "";
+            object obj = ClientCommon._RemotingHelp.ExecuteMethod("PurviewManager", "Core.Mes.PurviewManager.QuestionReply", "getAllData",
+                new object[] { sArgs },
+                out err);
+            if (obj != null)
+            {
+                ultraGrid1.DataSource = (DataSet)obj;
+            }
+        }
+
+        void doAdd()
+        {
+            if (txtQuestion.Text.Trim() == "")
+            {
+                txtQuestion.Focus();
+                MessageBox.Show("请输入内容!");
+                return;
+            }
+            string[] sArgs = new string[8];
+            sArgs[0] = ClientCommon._UserInfo.UserName;
+            sArgs[1] = ClientCommon._UserInfo.UserDepName;
+            sArgs[2] = txtQuestion.Text.Trim();
+            sArgs[3] = ulcmeDepartment.Text.Trim();
+            sArgs[4] = txtPrincipal.Text.Trim();
+            sArgs[5] = ClientCommon.GetIp();
+            sArgs[6] = mtxtPhono.Text;
+            sArgs[7] = ulcmeQuestionType.Text;
+
+            string err = "";
+            object obj = ClientCommon._RemotingHelp.ExecuteMethod("PurviewManager", "Core.Mes.PurviewManager.QuestionReply", "addQuestion",
+                new object[] { sArgs },
+                out err);
+            if ((int)obj > 0)
+            {
+                DataSet dset = (DataSet)ultraGrid1.DataSource;
+                if (!rdbtnComplete.Checked)
+                {
+                    DataRow newRow = dset.Tables[0].NewRow();
+                    newRow.ItemArray = new object[] { err, sArgs[0], sArgs[1], sArgs[2], sArgs[3], sArgs[4], DateTime.Now, "", null, sArgs[5], '0', sArgs[6], sArgs[7] };
+                    dset.Tables[0].Rows.InsertAt(newRow, 0);
+                    ultraGrid1.Rows[0].Activate();
+
+                    foreach (Infragistics.Win.UltraWinGrid.UltraGridRow arow in ultraGrid1.Selected.Rows)
+                        arow.Selected = false;
+
+                    int idx = -1;
+                    if (ultraGrid1.Selected.Cells.Count > 0)
+                        idx = ultraGrid1.Selected.Cells[0].Column.Index;
+                    for (int i = 0; i < ultraGrid1.Selected.Cells.Count; i++)
+                    {
+                        ultraGrid1.Selected.Cells[i].Selected = false;
+                    }
+                    if (idx > -1)
+                        ultraGrid1.Rows[0].Cells[idx].Selected = true;
+                }
+                else
+                {
+                    MessageBox.Show("操作成功!请更改查询条件后重新查询。");
+                }
+            }
+        }
+
+        void doEdit()
+        {
+            if (curTopRow == null)
+                return;
+
+            if (txtQuestion.Text.Trim() == "")
+            {
+                txtQuestion.Focus();
+                MessageBox.Show("请输入内容!");
+                return;
+            }
+            string[] sArgs = new string[6];
+            sArgs[0] = curTopRow.Cells["ID_"].Text;
+            sArgs[1] = txtQuestion.Text.Trim();
+            sArgs[2] = ulcmeDepartment.Text.Trim();
+            sArgs[3] = txtPrincipal.Text.Trim();
+            sArgs[4] = mtxtPhono.Text;
+            sArgs[5] = ulcmeQuestionType.Text;
+
+            string err = "";
+            object obj = ClientCommon._RemotingHelp.ExecuteMethod("PurviewManager", "Core.Mes.PurviewManager.QuestionReply", "editQuestion",
+                new object[] { sArgs },
+                out err);
+            if ((int)obj > 0)
+            {
+                curTopRow.Cells["QUESTION"].Value = sArgs[1];
+                curTopRow.Cells["DEPARTMENT"].Value = sArgs[2];
+                curTopRow.Cells["PRINCIPAL"].Value = sArgs[3];
+                curTopRow.Cells["PHONE"].Value = sArgs[4];
+                curTopRow.Cells["QUESTIONTYPE"].Value = sArgs[5];
+            }
+        }
+
+        void doDelete()
+        {
+            if (curTopRow == null)
+                return;
+
+            if (MessageBox.Show("您确定要删除?", "选择", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) ==
+                DialogResult.No)
+                return;
+
+            string[] sArgs = new string[1];
+            sArgs[0] = curTopRow.Cells["ID_"].Text;
+            string err = "";
+            object obj = ClientCommon._RemotingHelp.ExecuteMethod("PurviewManager", "Core.Mes.PurviewManager.QuestionReply", "delQuestion",
+                new object[] { sArgs },
+                out err);
+            if ((int)obj > 0)
+            {
+                int idx = curTopRow.Index;
+                curTopRow = null;
+                doQuery();
+                if (idx < ultraGrid1.Rows.Count)
+                {
+                    ultraGrid1.Rows[idx].Activate();
+                }
+                else if (idx == ultraGrid1.Rows.Count && ultraGrid1.Rows.Count > 0)
+                {
+                    ultraGrid1.Rows[idx - 1].Activate();
+                }
+            }
+        }
+
+        private void frmQuestionFeedback_Load(object sender, EventArgs e)
+        {
+            ulcmeQuestionType.SelectedIndex = 0;
+
+            ultraGrid1.DisplayLayout.Override.MinRowHeight = 21;
+            ultraGrid1.DisplayLayout.Bands[0].Override.HeaderAppearance.BackColor = System.Drawing.Color.LightSteelBlue;
+            ultraGrid1.DisplayLayout.Bands[0].Override.RowSelectorAppearance.BackColor = System.Drawing.Color.LightSteelBlue;
+            ultraGrid1.DisplayLayout.Bands[0].Override.RowAppearance.BackColor = Color.LightGray;
+
+            ultraGrid1.DisplayLayout.Bands[1].Override.HeaderAppearance.BackColor = Color.FromArgb(233, 242, 199);
+            ultraGrid1.DisplayLayout.Bands[1].Override.HeaderAppearance.BackColor2 = Color.FromArgb(170, 184, 131);
+            ultraGrid1.DisplayLayout.Bands[1].Override.HeaderAppearance.BackGradientStyle = Infragistics.Win.GradientStyle.Vertical;
+
+            ultraGrid1.DisplayLayout.Bands[1].Override.RowSelectorAppearance.BackColor = Color.FromArgb(233, 242, 199);
+            ultraGrid1.DisplayLayout.Bands[1].Override.RowSelectorAppearance.BackColor2 = Color.FromArgb(170, 184, 131);
+            ultraGrid1.DisplayLayout.Bands[1].Override.RowSelectorAppearance.BackGradientStyle = Infragistics.Win.GradientStyle.Vertical;
+
+            ultraGrid1.DisplayLayout.Bands[1].Override.RowAppearance.BorderColor = Color.FromArgb(170, 184, 131);
+
+            string err = "";
+            object obj = ClientCommon._RemotingHelp.ExecuteMethod("PurviewManager", "Core.Mes.PurviewManager.UAM_DEPARTMENT", "SelectUAM_DEPARTMENT",
+                new object[] { "" },
+                out err);
+            if (obj != null)
+            {
+                DataSet dset = (DataSet)obj;
+                foreach (DataRow drow in dset.Tables[0].Rows)
+                {
+                    ulcmeDepartment.Items.Add(drow["DEPARTMENTNAME"].ToString());
+                }
+            }
+
+            uldtpTime1_Q.DateTime = uldtpTime1_Q.DateTime.AddDays(-2);
+            doQuery();
+        }
+
+        private void ultraToolbarsManager1_ToolClick(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
+        {
+            switch (e.Tool.Key)
+            {
+                case "tlbtnQuery":    // ButtonTool
+                    doQuery();
+                    break;
+
+                case "tlbtnAdd":    // ButtonTool
+                    doAdd();
+                    break;
+
+                case "tlbtnEdit":    // ButtonTool
+                    doEdit();
+                    break;
+
+                case "tlbtnDelete":    // ButtonTool
+                    doDelete();
+                    break;
+
+                case "tlbtnClose":    // ButtonTool
+                    Close();
+                    break;
+            }
+        }
+
+        Infragistics.Win.UltraWinGrid.UltraGridRow curTopRow = null;
+        private void ultraGrid1_AfterRowActivate(object sender, EventArgs e)
+        {
+            Infragistics.Win.UltraWinGrid.UltraGridRow arow = ultraGrid1.ActiveRow;
+            if (arow.Band.Index == 0)
+            {
+                if (arow != curTopRow)
+                {
+                    curTopRow = arow;
+                }
+            }
+            else
+            {
+                curTopRow = arow.ParentRow;
+            }
+            ultraToolbarsManager1.Tools["tlbtnEdit"].SharedProps.Enabled = (curTopRow.Cells["CREATOR"].Text.Trim() == ClientCommon._UserInfo.UserName && curTopRow.Cells["LASTANSWERER"].Text.Trim() == "");
+            ultraToolbarsManager1.Tools["tlbtnDelete"].SharedProps.Enabled = (curTopRow.Cells["CREATOR"].Text.Trim() == ClientCommon._UserInfo.UserName && curTopRow.Cells["LASTANSWERER"].Text.Trim() == "");
+            txtQuestion.Text = curTopRow.Cells["QUESTION"].Text.Trim();
+            ulcmeDepartment.Text = curTopRow.Cells["DEPARTMENT"].Text.Trim();
+            txtPrincipal.Text = curTopRow.Cells["PRINCIPAL"].Text.Trim();
+            mtxtPhono.Text = curTopRow.Cells["PHONE"].Text.Trim();
+            ulcmeQuestionType.Text = curTopRow.Cells["QUESTIONTYPE"].Text.Trim();
+        }
+
+        private void ultraGrid1_DoubleClickCell(object sender, Infragistics.Win.UltraWinGrid.DoubleClickCellEventArgs e)
+        {
+            if (curTopRow != null)
+            {
+                frmReply frmReply_1 = new frmReply(curTopRow.Cells["ID_"].Text, curTopRow.Cells["FLAG"].Value.ToString(), curTopRow.Cells["CREATOR"].Text, curTopRow.Cells["PRINCIPAL"].Text, curTopRow.Cells["QUESTION"].Text);
+                frmReply_1.ShowDialog();
+
+                string sID = curTopRow.Cells["ID_"].Text;
+                doQuery();
+                foreach (Infragistics.Win.UltraWinGrid.UltraGridRow arow in ultraGrid1.Rows)
+                {
+                    if (arow.Cells["ID_"].Text == sID)
+                    {
+                        arow.Activate();
+                        break;
+                    }
+                }
+            }
+        }
+
+        private void ultraGrid1_InitializeRow(object sender, Infragistics.Win.UltraWinGrid.InitializeRowEventArgs e)
+        {
+            if (e.Row.Band.Index == 0)
+            {
+                if (e.Row.Cells["FLAG"].Value.ToString() == "1")
+                    e.Row.Cells["QUESTION"].Appearance.ForeColor = Color.Green;
+                else
+                    e.Row.Cells["QUESTION"].Appearance.ForeColor = Color.Black;
+            }
+        }
+    }//class
+}
+

+ 31 - 0
.svn/pristine/1c/1cf8f036ce9644120da3d6de5e3f9c48719483eb.svn-base

@@ -0,0 +1,31 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.Mes.ClientFrameWork", "Core.Mes.ClientFrameWork\Core.Mes.ClientFrameWork.csproj", "{276BAEDE-B4B5-4BAE-9ECE-2911D506D4EE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.Mes.ClientManager", "Core.Mes.ClientManager\Core.Mes.ClientManager.csproj", "{00576810-2D0C-4CFA-8B0E-CE0FDFA44EDB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.Mes.ClientPurviewManager", "Core.Mes.ClientPurviewManager\Core.Mes.ClientPurviewManager.csproj", "{6C9E9C77-8752-4C8C-9355-E35BC1382746}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{276BAEDE-B4B5-4BAE-9ECE-2911D506D4EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{276BAEDE-B4B5-4BAE-9ECE-2911D506D4EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{276BAEDE-B4B5-4BAE-9ECE-2911D506D4EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{276BAEDE-B4B5-4BAE-9ECE-2911D506D4EE}.Release|Any CPU.Build.0 = Release|Any CPU
+		{00576810-2D0C-4CFA-8B0E-CE0FDFA44EDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{00576810-2D0C-4CFA-8B0E-CE0FDFA44EDB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{00576810-2D0C-4CFA-8B0E-CE0FDFA44EDB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{00576810-2D0C-4CFA-8B0E-CE0FDFA44EDB}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6C9E9C77-8752-4C8C-9355-E35BC1382746}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6C9E9C77-8752-4C8C-9355-E35BC1382746}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6C9E9C77-8752-4C8C-9355-E35BC1382746}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6C9E9C77-8752-4C8C-9355-E35BC1382746}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

+ 175 - 0
.svn/pristine/1e/1ec9b9b73cdf2bb516b7ad68fa7db680db935e8a.svn-base

@@ -0,0 +1,175 @@
+
+using System;
+using System.Data;
+using System.Data.Common;
+using System.Data.OracleClient;
+
+namespace STMes.DataProvider
+{
+    /// <summary>
+    /// Implements access to the Data Provider for Oracle.
+    /// </summary>
+    /// <remarks>
+    /// See the <see cref="DbManager.AddDataProvider"/> method to find an example.
+    /// </remarks>
+    /// <seealso cref="DbManager.AddDataProvider">AddDataManager Method</seealso>
+    public class OracleDataProvider : IDataProvider
+    {
+        private CoreWriteLogFile cwl = new CoreWriteLogFile();
+        /// <summary>
+        /// Creates the database connection object.
+        /// </summary>
+        /// <remarks>
+        /// See the <see cref="DbManager.AddDataProvider"/> method to find an example.
+        /// </remarks>
+        /// <seealso cref="DbManager.AddDataProvider">AddDataManager Method</seealso>
+        /// <returns>The database connection object.</returns>
+        IDbConnection IDataProvider.CreateConnectionObject()
+        {
+            OracleConnection conn = new OracleConnection();
+
+            return conn;
+        }
+        IDbConnection IDataProvider.CreateConnectionObject(string connectionString)
+        {
+            OracleConnection conn = new OracleConnection(connectionString);
+
+            return conn;
+        }
+
+        /// <summary>
+        /// Creates the data adapter object.
+        /// </summary>
+        /// <remarks>
+        /// See the <see cref="DbManager.AddDataProvider"/> method to find an example.
+        /// </remarks>
+        /// <seealso cref="DbManager.AddDataProvider">AddDataManager Method</seealso>
+        /// <returns>A data adapter object.</returns>
+        DbDataAdapter IDataProvider.CreateDataAdapterObject()
+        {
+            return new OracleDataAdapter();
+        }
+
+        /// <summary>
+        /// Populates the specified IDbCommand object's Parameters collection with 
+        /// parameter information for the stored procedure specified in the IDbCommand.
+        /// </summary>
+        /// <remarks>
+        /// See the <see cref="DbManager.AddDataProvider"/> method to find an example.
+        /// </remarks>
+        /// <seealso cref="DbManager.AddDataProvider">AddDataManager Method</seealso>
+        /// <param name="command">The IDbCommand referencing the stored procedure for which the parameter information is to be derived. The derived parameters will be populated into the Parameters of this command.</param>
+        void IDataProvider.DeriveParameters(IDbCommand command)
+        {
+            OracleCommandBuilder.DeriveParameters((OracleCommand)command);
+        }
+
+        /// <summary>
+        /// Returns connection type.
+        /// </summary>
+        /// <remarks>
+        /// See the <see cref="DbManager.AddDataProvider"/> method to find an example.
+        /// </remarks>
+        /// <seealso cref="DbManager.AddDataProvider">AddDataManager Method</seealso>
+        /// <value>An instance of the <see cref="Type"/> class.</value>
+        public Type ConnectionType
+        {
+            get
+            {
+                return typeof(OracleConnection);
+            }
+        }
+
+        /// <summary>
+        /// Returns the data provider name.
+        /// </summary>
+        /// <remarks>
+        /// See the <see cref="DbManager.AddDataProvider"/> method to find an example.
+        /// </remarks>
+        /// <seealso cref="DbManager.AddDataProvider">AddDataProvider Method</seealso>
+        /// <value>Data provider name.</value>
+        public string Name
+        {
+            get
+            {
+                return "Oracle";
+            }
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        public IDbDataParameter CreateDataParameter()
+        {
+            // TODO:  Ìí¼Ó OracleDataProvider.CreateDataParameter ʵÏÖ
+            return new OracleParameter();
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="da"></param>
+        /// <returns></returns>
+        public Object CreateCommandBuilder(DbDataAdapter da)
+        {
+            return new OracleCommandBuilder(da as OracleDataAdapter) as object;
+        }
+
+        /// <summary>
+        /// Test Connection Info(ORACLE)
+        /// </summary>
+        /// <param name="db">Test Connection Object</param> 
+        /// <returns>Test Result</returns>
+        public bool Ping(ref IDbConnection db)
+        {
+            OracleDataReader read = null;
+            try
+            {
+                using (OracleCommand cmd = new OracleCommand("SELECT 1 FROM DUAL", (OracleConnection)db))
+                {
+                    read = cmd.ExecuteReader();
+                }
+                return true;
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine(ex.Message);
+            }
+            finally
+            {
+                if (read != null) read.Dispose();
+            }
+            return false;
+        }
+
+        public int GetSID(ref IDbConnection db)
+        {
+            //OracleDataReader read = null;
+            //try
+            //{
+            //    int sid = -1;
+            //    using (OracleCommand cmd = new OracleCommand("SELECT SID FROM SYS.V_$MYSTAT@XGCXMES WHERE ROWNUM =1", (OracleConnection)db))
+            //    {
+            //        read = cmd.ExecuteReader();
+
+            //        while (read.Read())
+            //        {
+            //            sid = Convert.ToInt32(read.GetValue(0));
+            //            read.Close();
+            //            return sid;
+            //        }
+            //    }
+            //}
+            //catch (Exception ex)
+            //{
+            //    cwl.WriteLog(ex.Message, LogInfoLevel.Error, "GetSID", "ORACLE");
+            //}
+            //finally
+            //{
+            //    if (read != null) read.Dispose();
+            //}
+            return -1;
+        }
+    }
+}

+ 394 - 0
.svn/pristine/20/201b01b16b071839fa43e546f653b9bceb2e7bb4.svn-base

@@ -0,0 +1,394 @@
+using System;
+using System.IO;
+using System.Xml;
+using System.Data;
+using System.Text;
+using System.Collections;
+using System.Reflection;
+using System.Configuration;
+using Core.Mes.Common;
+using Core.Mes.IBaseInterface;
+
+namespace Core.Mes.ServerFrameWork
+{
+    public class Dispatcher : MarshalByRefObject, ICommon
+    {
+        private ServerConfigure _servConf = null;
+        public ServerConfigure ServConfig
+        {
+            get { return _servConf; }
+        }
+
+        #region	"	Construct	"
+        public Dispatcher() { }
+        public Dispatcher(IServerPool pool, ServerConfigure _conf)
+        {
+            Pool = pool;
+            _servConf = _conf;
+        }
+        private IServerPool _pool = null;
+        public IServerPool Pool
+        {
+            get { return _pool; }
+            set { _pool = value; }
+        }
+        #endregion
+
+        #region "	Variable	"
+
+        //== 子服务集合
+        public static Hashtable _htServers = new Hashtable();
+        //== 数据链接集合
+        public static Hashtable htDBManager = new Hashtable();
+
+        public event GetStatusInfoHandler getStatusInfo;
+
+        public delegate void GetStatusInfoHandler(string info);
+
+        protected virtual void SetStatusMessage(string info)
+        {
+            if (getStatusInfo != null)
+            {
+                getStatusInfo(info);
+            }
+        }
+
+        #endregion
+
+        #region 内存释放
+        public void MemoryDispose()
+        {
+            long memorysize = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64;
+            int PagedMemorySize = (int)memorysize / (1024 * 1024);
+            if (PagedMemorySize > _servConf.MemoryMaxSize)//进程占用内存>100M 做GC.
+            {
+                try
+                {
+                    GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
+                }
+                catch
+                {
+
+                }
+                System.Diagnostics.Process.GetCurrentProcess().Dispose();
+            }
+        }
+        #endregion
+
+        #region MethodTimeLog
+        private static object lockObj = new object();
+        public void MethodTimeLog(TimeSpan tspan, object[] objs, object[] args)
+        {
+            string path = string.Format(@"./log/Method/MethodTimeLog_{0}.txt", System.DateTime.Now.ToString("yyyy_MM_dd"));
+
+            lock (lockObj)
+            {
+                using (StreamWriter sw = new StreamWriter(path, true, Encoding.UTF8))
+                {
+
+                    StringBuilder sbtxt = new StringBuilder();
+                    sbtxt.AppendLine("==============================================");
+                    sbtxt.AppendLine(string.Format("LogWriteTime:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
+                    sbtxt.AppendLine(string.Format("Time:{0}", tspan.TotalMilliseconds));
+                    sbtxt.AppendLine(string.Format("ClassName:{0}", objs[0].ToString()));
+                    sbtxt.AppendLine(string.Format("MethodName:{0}", objs[1].ToString()));
+                    if (args != null)
+                    {
+                        foreach (object obj in args)
+                        {
+                            if (obj != null)
+                            {
+                                sbtxt.AppendLine(string.Format("Parameters:{0}", obj.ToString()));
+                            }
+                        }
+                    }
+                    sbtxt.AppendLine("==============================================");
+                    sw.WriteLine(sbtxt.ToString());
+
+                }
+            }
+        }
+        public void MethodErrLog(Exception ex, object[] objs, object[] args)
+        {
+            string path = string.Format(@"./log/Method/MethodErrLog_{0}.txt", System.DateTime.Now.ToString("yyyy_MM_dd"));
+            lock (lockObj)
+            {
+                using (StreamWriter sw = new StreamWriter(path, true, Encoding.UTF8))
+                {
+
+                    StringBuilder sbtxt = new StringBuilder();
+                    sbtxt.AppendLine("==============================================");
+                    sbtxt.AppendLine(string.Format("LogWriteTime:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
+                    sbtxt.AppendLine(string.Format("ClassName:{0}", objs[0].ToString()));
+                    sbtxt.AppendLine(string.Format("MethodName:{0}", objs[1].ToString()));
+                    if (args != null)
+                    {
+                        foreach (object obj in args)
+                        {
+                            if (obj != null)
+                            {
+                                sbtxt.AppendLine(string.Format("Parameters:{0}", obj.ToString()));
+                            }
+                        }
+                    }
+                    sbtxt.AppendLine(ex.Message);
+                    sbtxt.AppendLine(ex.StackTrace);
+                    sbtxt.AppendLine("==============================================");
+                    sw.WriteLine(sbtxt.ToString());
+
+                }
+            }
+        }
+        public void DebugLog(object[] objs, object[] args)
+        {
+            string path = string.Format(@"./log/Method/DebugLog_{0}.txt", System.DateTime.Now.ToString("yyyy_MM_dd"));
+            lock (lockObj)
+            {
+                if (File.Exists(Path.GetFullPath(path)))
+                {
+                    FileInfo fileInfo = new FileInfo(Path.GetFullPath(path));
+                    if (fileInfo.Length / (1024 * 1024) > 6)
+                    {
+                        File.Delete(path);
+                    }
+                }
+
+                using (StreamWriter sw = new StreamWriter(path, true, Encoding.UTF8))
+                {
+
+                    StringBuilder sbtxt = new StringBuilder();
+                    sbtxt.AppendLine("==============================================");
+                    sbtxt.AppendLine(string.Format("LogWriteTime:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
+                    sbtxt.AppendLine(string.Format("ClassName:{0}", objs[0].ToString()));
+                    sbtxt.AppendLine(string.Format("MethodName:{0}", objs[1].ToString()));
+                    if (args != null)
+                    {
+                        foreach (object obj in args)
+                        {
+                            if (obj != null)
+                            {
+                                sbtxt.AppendLine(string.Format("Parameters:{0}", obj.ToString()));
+                            }
+                        }
+                    }
+                    sbtxt.AppendLine("==============================================");
+                    sw.WriteLine(sbtxt.ToString());
+
+                }
+            }
+        }
+        #endregion
+        #region "	调用服务	"
+        /// <summary>
+        /// 服务端公开给客户端的调用后台服务的方法
+        /// </summary>
+        /// <param name="message"></param>
+        /// <returns></returns>
+        public ReturnObject MethodHandler(CallingMessage message, ValidateInfo validateInfo)
+        {
+            CallingMessageEx messageEx = new CallingMessageEx();
+            messageEx.FromCallingMessage(message);
+            messageEx.RedirectLimit = 0;
+            messageEx.InnerServerRedirect = true;
+
+            ReturnObjectEx rtnObjEx = Execute(messageEx, validateInfo);
+            ReturnObject rtnObj = new ReturnObject();
+            rtnObj.ErrCode = rtnObjEx.ErrCode;
+            rtnObj.ErrMessage = rtnObjEx.ErrMessage;
+            rtnObj.RealDataSet = rtnObjEx.RealDataSet;
+            rtnObj.RealObject = rtnObjEx.RealObject;
+
+            return rtnObj;
+        }
+
+        public ReturnObjectEx MethodHandlerEx(CallingMessageEx message, ValidateInfo validateInfo)
+        {
+            return Execute(message, validateInfo);
+        }
+
+        private ReturnObjectEx Execute(CallingMessageEx messageEx, ValidateInfo validateInfo)
+        {
+            //step1:
+            MemoryDispose();
+
+            //step2:
+            string serverName = messageEx.ServerName;
+            string assemblyName = messageEx.AssemblyName;
+            string className = messageEx.ClassName;
+            string methodName = messageEx.MethodName;
+            object[] args = messageEx.args;
+
+            ReturnObjectEx rtnObjEx = new ReturnObjectEx();
+            MethodInfo myMethod = null;
+            try
+            {
+                if (Pool.HtComponent.Contains(className))
+                {
+                    try
+                    {
+                        if (serverName.ToUpper() != "SERVERCOMMON" && messageEx.RedirectLimit > 0)
+                        {
+                            string RedirURL = "";
+                            double sum_factor = 0;
+                            ArrayList serviceProvider = new ArrayList();
+                            ArrayList pfactors = new ArrayList();
+                            serviceProvider.Add("THIS");
+                            sum_factor += this.ServConfig.PriorityFactor;
+                            pfactors.Add(sum_factor);
+                            foreach (string server in Pool.HtExtServer.Keys)
+                            {
+                                RemotingServer rs = (RemotingServer)Pool.HtExtServer[server];
+                                if (rs.Valid != RemoteServerStatus.Normal || rs.Enable == false) continue;
+
+                                rs.FindRemoteServer(serverName);
+
+                                if (!rs.HTServices.ContainsKey(serverName)) continue;
+                                ServiceObject so = ((ServiceObject)(rs.HTServices[serverName]));
+                                if (so.Valid != ServiceObjectStatus.Normal || so.Enable == false) continue;
+
+                                RedirURL = so.URL;
+                                sum_factor += rs.PriorityFactor;
+                                serviceProvider.Add(server);
+                                pfactors.Add(sum_factor);
+                            }
+
+                            Random rand = new Random();
+                            double rand_selector = rand.NextDouble() * sum_factor;
+                            int selector = 0;
+                            for (int idx = 0; idx < pfactors.Count; idx++)
+                            {
+                                if (rand_selector <= (double)pfactors[idx])
+                                {
+                                    selector = idx;
+                                    break;
+                                }
+                            }
+                            if (selector != 0)
+                            {
+                                SimpleReturnObject _out = new SimpleReturnObject();
+                                if (messageEx.InnerServerRedirect)
+                                {
+                                    RemotingServer rs = (RemotingServer)Pool.HtExtServer[serviceProvider[selector]];
+                                    rtnObjEx = (ReturnObjectEx)rs.ExecuteMethod(messageEx, out _out);
+                                    return rtnObjEx;
+                                }
+                                else
+                                {
+                                    rtnObjEx.ReDirectURL = RedirURL;
+                                    return rtnObjEx;
+                                }
+                            }
+                        }
+
+                        //使用本地服务
+                        myMethod = Pool.GetType().GetMethod("HandleMethod");
+                        DateTime startTime = DateTime.Now;
+                        if (_servConf.Debug == "true")
+                        {
+                            DebugLog(new object[] { className, methodName }, args);
+                        }
+
+                        ReturnObject rtnObj = (ReturnObject)myMethod.Invoke(Pool, new object[] { className, methodName, args });
+                        rtnObjEx.ReDirectURL = "";
+                        rtnObjEx.ErrCode = rtnObj.ErrCode;
+                        rtnObjEx.ErrMessage = rtnObj.ErrMessage;
+                        rtnObjEx.RealDataSet = rtnObj.RealDataSet;
+                        rtnObjEx.RealObject = rtnObj.RealObject;
+
+                        DateTime endTime = DateTime.Now;
+                        TimeSpan tspan = endTime - startTime;
+                        if (tspan.TotalMilliseconds > (_servConf.MethodTime * 1000))
+                        {
+                            MethodTimeLog(tspan, new object[] { className, methodName }, args);
+                        }
+
+                        if (rtnObjEx.RealObject != null)
+                        {
+                            if (rtnObjEx.RealObject.GetType() == typeof(DataSet))
+                            {
+                                DataSet _ds = (DataSet)rtnObjEx.RealObject;
+                                bool largeData = false;
+
+                                int row_cnt = 0;
+                                foreach (DataTable _dt in _ds.Tables)
+                                {
+                                    row_cnt += _dt.Rows.Count;
+                                    if (_dt.Rows.Count > _servConf.CompressThreshold || row_cnt > _servConf.CompressThreshold)
+                                    {
+                                        largeData = true;
+                                        break;
+                                    }
+                                }
+
+                                if (largeData)
+                                {
+                                    byte[] _rtn = Utility.SerializeDataSet(_ds);
+                                    byte[] _rtn_comp = Utility.CompressBytes(_rtn);
+                                    DataTable dt_rus = new DataTable("RETURN_RESULT");
+                                    dt_rus.Columns.AddRange(new DataColumn[]{
+                                    new DataColumn("IsCompressed",  System.Type.GetType("System.Int32") ),
+                                    new DataColumn("UnCompress_size", System.Type.GetType("System.Int32")),
+                                    new DataColumn("Compress_size", System.Type.GetType("System.Int32"))}
+                                    );
+                                    dt_rus.AcceptChanges();
+                                    dt_rus.Rows.Add(new object[] { 1, _rtn.Length, _rtn_comp.Length });
+                                    dt_rus.AcceptChanges();
+                                    if (rtnObjEx.RealDataSet == null)
+                                    {
+                                        rtnObjEx.RealDataSet = new DataSet();
+                                    }
+                                    rtnObjEx.RealDataSet.Tables.Add(dt_rus);
+                                    rtnObjEx.RealObject = _rtn_comp;
+                                }
+                            }
+                        }
+
+                        return rtnObjEx;
+
+                    }
+                    catch (Exception ex)
+                    {
+                        MethodErrLog(ex, new object[] { className, methodName }, args);
+                        return new ReturnObjectEx(null, ex.Message);
+                    }
+                    finally
+                    {
+                        //if (myMethod != null) myMethod = null;
+                        try
+                        {
+                            if (rtnObjEx.RealObject != null)
+                            {
+                                rtnObjEx.RealObject = null;
+                            }
+                            if (rtnObjEx.RealDataSet != null)
+                            {
+                                rtnObjEx.RealDataSet = null;
+                            }
+                        }
+                        catch { }
+                    }
+
+                }
+                else
+                {
+                    return new ReturnObjectEx(null, "未找到请求的服务![2]");
+                }
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObjectEx(null, "服务调用发生异常! \n" + ex.Message);
+            }
+        }
+        #endregion
+
+        #region "	Common Handler	"
+        //=======================================================
+        // 用来确保当创建 Singleton 时, 第一个实例永远不会过期
+        //=======================================================
+        public override object InitializeLifetimeService()
+        {
+            return null;
+        }
+        #endregion
+    }
+}

+ 35 - 0
.svn/pristine/20/20f7330c3f21d8c0d9c35798c91a271d1d8fea7b.svn-base

@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的常规信息通过下列属性集
+// 控制。更改这些属性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("Core.Mes.ClientFrameWork")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("inc")]
+[assembly: AssemblyProduct("Core.Mes.ClientFrameWork")]
+[assembly: AssemblyCopyright("版权所有 (C) inc 2007")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 使此程序集中的类型
+// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
+// 则将该类型上的 ComVisible 属性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("f892d792-fe70-4658-bb96-8c619747db62")]
+
+// 程序集的版本信息由下面四个值组成:
+//
+//      主版本
+//      次版本 
+//      内部版本号
+//      修订号
+//
+// 可以指定所有这些值,也可以使用“修订号”和“内部版本号”的默认值,
+// 方法是按如下所示使用“*”:
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 132 - 0
.svn/pristine/21/2170122c8c5e66945aac2055408af89ac6f8d50d.svn-base

@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="ultraToolbarsManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>348, 17</value>
+  </metadata>
+  <metadata name="ultraGridExcelExporter1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>449, 17</value>
+  </metadata>
+  <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>44</value>
+  </metadata>
+</root>

+ 20 - 0
.svn/pristine/21/21e865728e7b4f6c3cb3bf2677474d49aec024f8.svn-base

@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DBProxy", "DBProxy.csproj", "{F6CD9B3C-806A-4009-ACAB-935FF453A13C}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{F6CD9B3C-806A-4009-ACAB-935FF453A13C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F6CD9B3C-806A-4009-ACAB-935FF453A13C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F6CD9B3C-806A-4009-ACAB-935FF453A13C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F6CD9B3C-806A-4009-ACAB-935FF453A13C}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

+ 715 - 0
.svn/pristine/22/228f3fb69e9eb0ff4ba69d800fc1776409d5acda.svn-base

@@ -0,0 +1,715 @@
+using System;
+using System.IO;
+using System.Net;
+using System.Data;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.Configuration;
+using System.Threading;
+
+using Core.Mes.IBaseInterface;
+using Core.Mes.ClientFrameWork;
+using System.Runtime.InteropServices;
+using System.Diagnostics;
+
+namespace Core.Mes.ClientManager
+{
+    /// <summary>
+    /// 登录窗口
+    /// </summary>
+    public class FrmCover : System.Windows.Forms.Form
+    {
+
+        #region "	定义变量	"
+
+        public MainForm _mainForm;
+
+        public static int pot;
+        public static string url;
+        public static string messageFlag;
+
+
+        public int _loginFlag = 0;
+
+        //重新登录标志
+        public bool ReLoginFlag = false;
+        public int ReLoginType = 0;
+        private System.Windows.Forms.Timer timer_checkSem;
+        private int index = 1;
+
+        #endregion //
+
+        #region "	窗体自动生成代码	"
+
+
+        public FrmCover()
+        {
+            //
+            // Windows 窗体设计器支持所必需的
+            //
+            InitializeComponent();
+
+            //
+            // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
+            //
+
+        }
+
+        public FrmCover(string sUserName)
+        {
+            //
+            // Windows 窗体设计器支持所必需的
+            //
+            InitializeComponent();
+
+            textBox1.Text = sUserName;
+            textBox1.Enabled = false;
+            //
+            // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
+            //
+        }
+
+        /// <summary>
+        /// 清理所有正在使用的资源。
+        /// </summary>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing)
+            {
+                if (components != null)
+                {
+                    components.Dispose();
+                }
+            }
+            base.Dispose(disposing);
+        }
+
+
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.TextBox textBox1;
+        private System.Windows.Forms.TextBox textBox2;
+        private System.Windows.Forms.Button btnLoad;
+        private System.Windows.Forms.ToolTip toolTip1;
+        private System.Windows.Forms.Button btnExit;
+        private System.Windows.Forms.PictureBox pictureBox1;
+        private System.ComponentModel.IContainer components;
+        private global::Infragistics.Win.UltraWinProgressBar.UltraProgressBar ultraProgressBar1;
+        private System.Windows.Forms.Timer timerAutoRun;
+        #region Windows 窗体设计器生成的代码
+        /// <summary>
+        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
+        /// 此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            Infragistics.Win.Appearance appearance1 = new Infragistics.Win.Appearance();
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmCover));
+            this.textBox1 = new System.Windows.Forms.TextBox();
+            this.textBox2 = new System.Windows.Forms.TextBox();
+            this.btnLoad = new System.Windows.Forms.Button();
+            this.btnExit = new System.Windows.Forms.Button();
+            this.pictureBox1 = new System.Windows.Forms.PictureBox();
+            this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+            this.ultraProgressBar1 = new Infragistics.Win.UltraWinProgressBar.UltraProgressBar();
+            this.timerAutoRun = new System.Windows.Forms.Timer(this.components);
+            this.label4 = new System.Windows.Forms.Label();
+            this.label5 = new System.Windows.Forms.Label();
+            this.timer_checkSem = new System.Windows.Forms.Timer(this.components);
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // textBox1
+            // 
+            this.textBox1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Append;
+            this.textBox1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSource;
+            this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+            this.textBox1.Location = new System.Drawing.Point(150, 133);
+            this.textBox1.Name = "textBox1";
+            this.textBox1.Size = new System.Drawing.Size(120, 21);
+            this.textBox1.TabIndex = 0;
+            this.textBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox1_KeyDown);
+            this.textBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox1_KeyPress);
+            // 
+            // textBox2
+            // 
+            this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+            this.textBox2.Location = new System.Drawing.Point(150, 161);
+            this.textBox2.Name = "textBox2";
+            this.textBox2.PasswordChar = '*';
+            this.textBox2.Size = new System.Drawing.Size(120, 21);
+            this.textBox2.TabIndex = 1;
+            this.textBox2.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox2_KeyPress);
+            // 
+            // btnLoad
+            // 
+            this.btnLoad.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
+            this.btnLoad.ImageIndex = 0;
+            this.btnLoad.Location = new System.Drawing.Point(282, 132);
+            this.btnLoad.Name = "btnLoad";
+            this.btnLoad.Size = new System.Drawing.Size(56, 23);
+            this.btnLoad.TabIndex = 2;
+            this.btnLoad.Text = "登录";
+            this.btnLoad.Click += new System.EventHandler(this.btnLoad_Click);
+            // 
+            // btnExit
+            // 
+            this.btnExit.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
+            this.btnExit.ImageIndex = 3;
+            this.btnExit.Location = new System.Drawing.Point(282, 160);
+            this.btnExit.Name = "btnExit";
+            this.btnExit.Size = new System.Drawing.Size(55, 23);
+            this.btnExit.TabIndex = 3;
+            this.btnExit.Text = "退出";
+            this.btnExit.Click += new System.EventHandler(this.btnExit_Click);
+            // 
+            // pictureBox1
+            // 
+            this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.pictureBox1.Location = new System.Drawing.Point(0, 0);
+            this.pictureBox1.Name = "pictureBox1";
+            this.pictureBox1.Size = new System.Drawing.Size(450, 104);
+            this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
+            this.pictureBox1.TabIndex = 6;
+            this.pictureBox1.TabStop = false;
+            // 
+            // ultraProgressBar1
+            // 
+            this.ultraProgressBar1.BorderStyle = Infragistics.Win.UIElementBorderStyle.None;
+            this.ultraProgressBar1.Dock = System.Windows.Forms.DockStyle.Bottom;
+            appearance1.ForeColor = System.Drawing.Color.Yellow;
+            this.ultraProgressBar1.FillAppearance = appearance1;
+            this.ultraProgressBar1.Location = new System.Drawing.Point(0, 213);
+            this.ultraProgressBar1.Maximum = 300;
+            this.ultraProgressBar1.Name = "ultraProgressBar1";
+            this.ultraProgressBar1.Size = new System.Drawing.Size(450, 14);
+            this.ultraProgressBar1.Step = 1;
+            this.ultraProgressBar1.SupportThemes = false;
+            this.ultraProgressBar1.TabIndex = 8;
+            this.ultraProgressBar1.Text = "新余钢铁有限责任公司技术中心";
+            // 
+            // timerAutoRun
+            // 
+            this.timerAutoRun.Tick += new System.EventHandler(this.timerAutoRun_Tick);
+            // 
+            // label4
+            // 
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(105, 137);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(41, 12);
+            this.label4.TabIndex = 12;
+            this.label4.Text = "用户名";
+            // 
+            // label5
+            // 
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(117, 165);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(29, 12);
+            this.label5.TabIndex = 13;
+            this.label5.Text = "密码";
+            // 
+            // timer_checkSem
+            // 
+            this.timer_checkSem.Interval = 200;
+            this.timer_checkSem.Tick += new System.EventHandler(this.timer_checkSem_Tick);
+            // 
+            // FrmCover
+            // 
+            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
+            this.ClientSize = new System.Drawing.Size(450, 227);
+            this.Controls.Add(this.label5);
+            this.Controls.Add(this.label4);
+            this.Controls.Add(this.textBox2);
+            this.Controls.Add(this.textBox1);
+            this.Controls.Add(this.ultraProgressBar1);
+            this.Controls.Add(this.btnExit);
+            this.Controls.Add(this.btnLoad);
+            this.Controls.Add(this.pictureBox1);
+            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+            this.MaximizeBox = false;
+            this.Name = "FrmCover";
+            this.ShowInTaskbar = false;
+            this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+            this.Text = "系统用户登录";
+            this.Load += new System.EventHandler(this.FrmCover_Load);
+            this.SizeChanged += new System.EventHandler(this.FrmCover_SizeChanged);
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+        #endregion
+
+
+
+        #endregion
+
+        #region "	Init Form "
+
+        DataSet dsetLoginUrl = new DataSet();
+
+        /// <summary>
+        /// 窗体初始化
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void FrmCover_Load(object sender, System.EventArgs e)
+        {
+            try
+            {
+                if (ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["Corporation"].Value.ToString() != null)
+                    this.ultraProgressBar1.Text = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["Corporation"].Value.ToString() + @" & 湖南视拓科技发展有限责任公司 联合研发";
+                this.pictureBox1.Image = System.Drawing.Image.FromFile(@"LoginPic.jpg");
+                url = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["RemoteServerUrl"].Value.ToString();
+
+                if (File.Exists("LoginUrl.txt"))
+                {
+                    dsetLoginUrl.ReadXml("LoginUrl.txt");
+                    dsetLoginUrl.Tables[0].PrimaryKey = new DataColumn[] { dsetLoginUrl.Tables[0].Columns[0] };
+                    foreach (DataRow arow in dsetLoginUrl.Tables[0].Rows)
+                    {
+                        textBox1.AutoCompleteCustomSource.Add(arow[0].ToString());
+                    }
+                }
+                else
+                {
+                    DataTable dtab = new DataTable();
+                    dtab.Columns.Add("LogID", typeof(string));
+                    dtab.PrimaryKey = new DataColumn[] { dtab.Columns[0] };
+                    dsetLoginUrl.Tables.Add(dtab);
+                    dsetLoginUrl.WriteXml("LoginUrl.txt", XmlWriteMode.IgnoreSchema);
+                }
+
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine(ex.Message);
+            }
+
+            try
+            {
+                //为锁定统一登录设置进程间信号量
+                if (!string.IsNullOrEmpty(textBox1.Text.Trim()) && ReLoginType == 2)
+                {
+                    Semaphore sem = OpenSem(false, true);
+                    if (sem != null)
+                        timer_checkSem.Enabled = true;
+
+                }
+            }
+            catch { }
+
+            this.textBox1.Focus();
+        }
+
+        #endregion
+
+        #region "	Button Event	"
+
+        private bool IsLoginThreadFlag = false;
+        private string loginID = "";
+        private string passwd = "";
+        private bool IsException = false;
+
+        private Thread ThLogin;
+
+        /// <summary>
+        /// 登录按钮事件
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void btnLoad_Click(object sender, System.EventArgs e)
+        {
+            loginID = this.textBox1.Text.Trim();
+            passwd = this.textBox2.Text.Trim();
+            this.timerAutoRun.Interval = 100;
+            index = 1;
+            IsException = false;
+            this.ultraProgressBar1.Value = this.ultraProgressBar1.Minimum;
+
+            this.btnLoad.Enabled = false;
+
+            if (!ReLoginFlag)
+            {
+                //this.ultraProgressBar1.Visible = true;
+                this.timerAutoRun.Start();
+
+                ThreadStart ts = new ThreadStart(LoginHandler);
+                ThLogin = new Thread(ts);
+                ThLogin.Name = "LoginThread";
+                ThLogin.Start();
+            }
+            else
+            {
+                Relogin();
+            }
+        }
+
+        private void Relogin()
+        {
+            try
+            {
+                string ipaddress = ClientCommon.GetIp();
+
+                SimpleReturnObject _out = new SimpleReturnObject(0, "");
+                ClientCommon._RemotingHelp.InitServerUrlList("ServerCommon", url);
+
+                object obj = ClientCommon._RemotingHelp.ExecuteMethod("ServerCommon", "Core.Mes.ServerCommon.UserInfoManager", "GetPurviewInfo",
+                    new object[] { this.loginID, this.passwd, Dns.GetHostName(), ipaddress }, out _out);
+
+                if (_out.ErrCode != 0) throw new Exception(_out.ErrMessage);
+
+
+                if (!string.IsNullOrEmpty(_out.ErrMessage))
+                {
+                    this._mainForm.ShowPopUpMsg(_out.ErrMessage, "密码过于简单,请尽快修改密码!");
+                }
+
+                ClientCommon._UserInfo = (UserInfo)obj;
+
+                Semaphore sem = OpenSem(true, true);
+                timer_checkSem.Enabled = false;
+
+
+                AfterLogin();
+
+                //调用服务器与客户端时间同步函数
+                SetTime.SetClientTime();
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show("连接服务器失败!\n" + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
+
+            }
+            this.btnLoad.Enabled = true;
+        }
+
+        private void AfterLogin()
+        {
+            try
+            {
+                _loginFlag = 1;
+
+                try
+                {
+                    if (dsetLoginUrl.Tables[0].Rows.Find(textBox1.Text.Trim()) == null)
+                    {
+                        if (dsetLoginUrl.Tables[0].Rows.Count == 10)
+                            dsetLoginUrl.Tables[0].Rows[0].Delete();
+
+                        dsetLoginUrl.Tables[0].Rows.Add(new object[] { textBox1.Text.Trim() });
+                        dsetLoginUrl.Tables[0].AcceptChanges();
+                        dsetLoginUrl.WriteXml("LoginUrl.txt", XmlWriteMode.IgnoreSchema);
+                    }
+                }
+                catch
+                { }
+
+                this.Close();
+            }
+            catch (Exception ex)
+            {
+                this.btnLoad.Enabled = true;
+                _loginFlag = 0;
+                MessageBox.Show("连接服务器失败!\n" + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+
+
+        }
+
+
+        private void LoginHandler()
+        {
+            string ipaddress = ClientCommon.GetIp();
+
+            try
+            {
+                IsLoginThreadFlag = false;
+                SimpleReturnObject outInfo = new SimpleReturnObject(0, "");
+                ClientCommon._RemotingHelp.InitServerUrlList("ServerCommon", url);
+                object obj = ClientCommon._RemotingHelp.ExecuteMethod("ServerCommon", "Core.Mes.ServerCommon.UserInfoManager", "GetPurviewInfo",
+                    new object[] { this.loginID, this.passwd, Dns.GetHostName(), ipaddress }, out outInfo);
+
+                if (outInfo.ErrCode != 0) throw new Exception(outInfo.ErrMessage);
+
+                if (!string.IsNullOrEmpty(outInfo.ErrMessage))
+                {
+                    this._mainForm.ShowPopUpMsg(outInfo.ErrMessage, "密码过于简单,请尽快修改密码!");
+                }
+
+                ClientCommon._UserInfo = (UserInfo)obj;
+                ClientCommon._RemotingHelp.ServerUrlList = (DataSet)ClientCommon._RemotingHelp.ExecuteMethod("ServerCommon", "Core.Mes.ServerCommon.UserInfoManager", "GetServerList",
+                    null, out outInfo);
+
+                _loginFlag = 1;
+                IsLoginThreadFlag = true;
+
+
+            }
+            catch (Exception ex)
+            {
+                //this.btnLoad.Enabled =true;
+                IsException = true;
+                _loginFlag = 0;
+                IsLoginThreadFlag = true;
+                if (ex.Message == "线程正被中止。") return;
+                MessageBox.Show("连接服务器失败!\n" + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
+
+            }
+        }
+
+        private void btnExit_Click(object sender, System.EventArgs e)
+        {
+            _loginFlag = -1;
+            try
+            {
+                this.timerAutoRun.Stop();
+
+                if (ThLogin != null)
+                {
+                    ThLogin.Abort();
+                }
+
+            }
+            catch { }
+            this.Close();
+        }
+
+        private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
+        {
+            if (e.KeyChar == (char)13)
+            {
+
+            }
+            if (e.KeyChar == (char)27)
+            {
+                this.btnExit_Click(sender, new EventArgs());
+            }
+        }
+
+        private void textBox2_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
+        {
+            if (e.KeyChar == (char)13)
+            {
+                this.btnLoad_Click(sender, new EventArgs());
+            }
+            if (e.KeyChar == (char)27)
+            {
+                this.btnExit_Click(sender, new EventArgs());
+            }
+        }
+
+        private void button1_Click(object sender, System.EventArgs e)
+        {
+            FrmPasswd frm = new FrmPasswd();
+            frm.strUserID = this.textBox1.Text.Trim();
+            frm.ShowDialog();
+        }
+        #endregion
+
+        #region "	Monuse	Events	"
+
+        #endregion
+
+
+        private void timerAutoRun_Tick(object sender, System.EventArgs e)
+        {
+            int current = this.ultraProgressBar1.Value;
+            int max = this.ultraProgressBar1.Maximum;
+            int min = this.ultraProgressBar1.Minimum;
+            int step = this.ultraProgressBar1.Step;
+
+            if (index++ > 300)
+            {
+                string strInfo = "";
+                try
+                {
+                    this.timerAutoRun.Stop();
+
+                    if (ThLogin != null)
+                    {
+                        ThLogin.Abort();
+                    }
+                }
+                catch (Exception ex)
+                {
+                    strInfo = ex.Message;
+                }
+
+                MessageBox.Show("连接超时!\n" + strInfo, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                return;
+            }
+
+            if (current == max && step > 0)
+                this.ultraProgressBar1.Value = min;
+
+            this.ultraProgressBar1.PerformStep();
+
+
+            if (IsLoginThreadFlag)
+            {
+                if (IsException)
+                {
+                    this.timerAutoRun.Stop();
+                    //this.ultraProgressBar1.Visible = false;
+                }
+                if (this.ultraProgressBar1.Value != max)
+                {
+                    this.timerAutoRun.Interval = 10;
+                    this.ultraProgressBar1.Step = 5;
+                }
+                else
+                {
+                    this.timerAutoRun.Stop();
+
+                    Semaphore sem = OpenSem(true, false);
+                    this.AfterLogin();
+                }
+            }
+            else
+            {
+
+            }
+        }
+
+        private void textBox1_KeyDown(object sender, KeyEventArgs e)
+        {
+            if (e.KeyData == System.Windows.Forms.Keys.Return)
+            {
+                System.Windows.Forms.SendKeys.Send("{TAB}");
+            }
+        }
+
+
+        [DllImport("user32.dll")]
+        private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
+        [DllImport("User32.dll")]
+        public static extern int SetWindowPos(IntPtr hwnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, int wFlags);
+        //ShowWindow参数   
+        private const int SW_SHOWMINIMIZED = 2;
+        private const int SWP_SHOWWINDOW = 0x40;
+
+        private void FrmCover_SizeChanged(object sender, EventArgs e)
+        {
+            //base.OnSizeChanged(e);
+
+            if (this.WindowState == FormWindowState.Minimized)
+            {
+                var owner = this.Owner;
+                if (owner != null)
+                {
+                    ShowWindow(owner.Handle, SW_SHOWMINIMIZED);
+                    this.Visible = true;
+                    //移到屏幕外面,模拟最小化效果
+                    SetWindowPos(this.Handle, IntPtr.Zero, owner.Left, owner.Top, 0, 0, SWP_SHOWWINDOW);
+                    //Trace.WriteLine(string.Format("x: {0}, y: {1}", Program.MainForm.Left, Program.MainForm.Top));
+                }
+            }
+        }
+
+        private void timer_checkSem_Tick(object sender, EventArgs e)
+        {
+            try
+            {
+                string loginid = textBox1.Text.Trim().ToUpper();
+                string sem_name = "CORE_MES." + loginid;
+                if (string.IsNullOrEmpty(loginid)) return;
+
+                bool CreateNewSem = false;
+                Semaphore ProcessSem = new Semaphore(1, 1, sem_name, out CreateNewSem);
+
+                if (ProcessSem.WaitOne(0, false))
+                {
+                    try
+                    {
+                        ProcessSem.Release(1);
+                    }
+                    catch { }
+                    timer_checkSem.Enabled = false;
+                    SomeOneLogined();
+                }
+
+            }
+            catch { }
+
+        }
+
+        private Semaphore OpenSem(bool ReleaseIt, bool ForceCreate)
+        {
+            bool CreateNewSem = false;
+            Semaphore sem = null;
+
+            string loginid = textBox1.Text.Trim().ToUpper();
+            string sem_name = "CORE_MES." + loginid;
+            if (string.IsNullOrEmpty(loginid)) return sem;
+
+
+            if (!ForceCreate)
+            {
+                try
+                {
+                    sem = Semaphore.OpenExisting(sem_name);
+                }
+                catch
+                {
+                    sem = null;
+                }
+            }
+            else
+            {
+                sem = new Semaphore(1, 1, sem_name, out CreateNewSem);
+            }
+
+            try
+            {
+                if (sem != null)
+                {
+                    if (ReleaseIt)
+                    {
+                        sem.Release(1);
+                        Debug.Print("释放信号量!");
+                    }
+                    else
+                    {
+                        if (sem.WaitOne(1, false))
+                            Debug.Print("获取信号量!");
+                    }
+                }
+            }
+            catch (Exception ex) { }
+            return sem;
+        }
+
+        private void SomeOneLogined()
+        {
+            timer_checkSem.Enabled = false;
+            loginID = this.textBox1.Text.Trim();
+            this.timerAutoRun.Interval = 100;
+            index = 1;
+            IsException = false;
+            this.ultraProgressBar1.Value = this.ultraProgressBar1.Minimum;
+
+            this.btnLoad.Enabled = false;
+
+            try
+            {
+                AfterLogin();
+
+                //调用服务器与客户端时间同步函数
+                SetTime.SetClientTime();
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show("连接服务器失败!\n" + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+            this.btnLoad.Enabled = true;
+        }
+    }
+}

+ 196 - 0
.svn/pristine/22/22d6bb05c7acfaf3e0e68222e6932b5cdb26b9b2.svn-base

@@ -0,0 +1,196 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{00576810-2D0C-4CFA-8B0E-CE0FDFA44EDB}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Core.Mes.ClientManager</RootNamespace>
+    <AssemblyName>Core.Mes.ClientManager</AssemblyName>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <ApplicationRevision>0</ApplicationRevision>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <ApplicationIcon>XG.ico</ApplicationIcon>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\Client\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget>x86</PlatformTarget>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\..\Client\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Core.Mes.IBaseInterface, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Infragistics.Shared.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.Misc.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinDock.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinExplorerBar.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinMaskedEdit.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinStatusBar.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinTabbedMdi.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinToolbars.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinTree.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics2.Shared.v7.3, Version=7.3.20073.1043, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <Aliases>global1</Aliases>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Infragistics2.Win.v7.3, Version=7.3.20073.1043, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <Aliases>global1</Aliases>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Microsoft.VisualBasic" />
+    <Reference Include="System" />
+    <Reference Include="System.configuration" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Design" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization.Formatters.Soap" />
+    <Reference Include="System.Web" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="FrmAbout.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="FrmCover.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="frmMyMenuInfo.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="frmMyMenuInfo.Designer.cs">
+      <DependentUpon>frmMyMenuInfo.cs</DependentUpon>
+    </Compile>
+    <Compile Include="FrmPasswd.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="FrmSetBz.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="INIFile.cs" />
+    <Compile Include="MainForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="FrmAbout.resx">
+      <DependentUpon>FrmAbout.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FrmCover.resx">
+      <DependentUpon>FrmCover.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="frmMyMenuInfo.resx">
+      <SubType>Designer</SubType>
+      <DependentUpon>frmMyMenuInfo.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FrmPasswd.resx">
+      <DependentUpon>FrmPasswd.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FrmSetBz.resx">
+      <DependentUpon>FrmSetBz.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="MainForm.resx">
+      <DependentUpon>MainForm.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\licenses.licx" />
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <Compile Include="SetTime.cs" />
+    <Compile Include="UpdaterManager.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 2.0</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="XG.ico" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Core.Mes.ClientFrameWork\Core.Mes.ClientFrameWork.csproj">
+      <Project>{276BAEDE-B4B5-4BAE-9ECE-2911D506D4EE}</Project>
+      <Name>Core.Mes.ClientFrameWork</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <COMReference Include="IWshRuntimeLibrary">
+      <Guid>{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}</Guid>
+      <VersionMajor>1</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+    </COMReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 30 - 0
.svn/pristine/22/22f3f2dc8cc28135764c778ac9841b71d3cc65a8.svn-base

@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3625
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ConService.Properties
+{
+
+
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}

+ 57 - 0
.svn/pristine/23/23bf40a8f14b4b840a64c213d70f667d884cc4be.svn-base

@@ -0,0 +1,57 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+
+namespace Core.Mes.ClientPurviewManager
+{
+  public sealed class RightsComm
+  {
+    private static string _ChildDpt = "";
+    public static string GetChildDpt()
+    {
+      string err = "";
+      object obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod("PurviewManager", "Core.Mes.PurviewManager.UAM_DEPARTMENT",
+            "GetAllChildDpt", new object[] { Core.Mes.ClientFrameWork.ClientCommon._UserInfo.UserDepID }, out err);
+      _ChildDpt = CheckNullStr(obj);
+      return _ChildDpt;
+    }
+    public static string CheckNullStr(object obj)
+    {
+      if (obj == null || obj.GetType() == typeof(System.DBNull))
+      {
+        return "";
+      }
+      else
+      {
+        return Convert.ToString(obj);
+      }
+    }
+    public static bool CheckRole(string OpDptID)
+    {
+      OpDptID = "'" + OpDptID + "'";
+      string UserID = Core.Mes.ClientFrameWork.ClientCommon._UserInfo.UserID;
+      string LoginID = Core.Mes.ClientFrameWork.ClientCommon._UserInfo.LoginID;
+      string UserRoleID = Core.Mes.ClientFrameWork.ClientCommon._UserInfo.UserRoleID;
+      string UserChildDpt = GetChildDpt();
+      if (UserID.ToUpper() == "ROOT" || UserRoleID.ToUpper() == "ADMIN001" || LoginID.ToUpper() == "ROOT")
+        return true;
+      if (UserRoleID.IndexOf("Admin") < 0)
+      {
+        MessageBox.Show("执行该命令需要管理员权限,请与管理员联系", "系统提示");
+        return false;
+      }
+      if (UserChildDpt.Length == 0)
+      {
+        MessageBox.Show("权限不够,不能执行该命令,请与系统管理员联系", "系统提示");
+        return false;
+      }
+      if (UserChildDpt.IndexOf(OpDptID) < 0)
+      {
+        MessageBox.Show("权限不够,不能执行该命令,请与系统管理员联系", "系统提示");
+        return false;
+      }
+      return true;
+    }
+  }
+}

+ 390 - 0
.svn/pristine/24/24b9dbd5a0f80d097d37167b1ce6624a9e55dd25.svn-base

@@ -0,0 +1,390 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.IO;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Data;
+using System.Runtime.Serialization;
+using System.IO.Compression;
+using System.Collections;
+using System.Threading;
+
+namespace Core.Mes.Common
+{
+    public class Utility
+    {
+        #region dataset to byte[]
+        /// <summary>
+        /// 序列化数据集
+        /// </summary>
+        /// <param name="ds"></param>
+        /// <returns></returns>
+        public static byte[] SerializeDataSet(DataSet ds)
+        {
+            byte[] buffer = null;
+            ds.RemotingFormat = SerializationFormat.Binary;
+            MemoryStream ms = new MemoryStream();
+            IFormatter bf = new BinaryFormatter();
+            bf.Serialize(ms, ds);
+            ds.Clear();
+            ds.Dispose();
+            ds = null;
+
+            buffer = ms.ToArray();
+            ms.Close();
+            ms.Dispose();
+            ms = null;
+            return buffer;
+        }
+
+        /// <summary>
+        /// 反序列化数据集
+        /// </summary>
+        /// <param name="buffer"></param>
+        /// <returns></returns>
+        public static DataSet ReSerializable(byte[] buffer)
+        {
+            MemoryStream ms = new MemoryStream(buffer);
+            Array.Resize(ref buffer, 0);
+
+            IFormatter bf = new BinaryFormatter();
+            object obj = bf.Deserialize(ms);
+            DataSet ds = (DataSet)obj;
+            ms.Close();
+            ms.Dispose();
+            return ds;
+        }
+
+        /// <summary>
+        /// 序列化对象
+        /// </summary>
+        /// <param name="ds"></param>
+        /// <returns></returns>
+        public static byte[] SerializeObject(Object obj)
+        {
+            byte[] buffer = null;
+            MemoryStream ms = new MemoryStream();
+            IFormatter bf = new BinaryFormatter();
+            bf.Serialize(ms, obj);
+
+            buffer = ms.ToArray();
+            ms.Close();
+            ms.Dispose();
+            ms = null;
+            return buffer;
+        }
+        /// <summary>
+        /// 反序列化对象
+        /// </summary>
+        /// <param name="buffer"></param>
+        /// <returns></returns>
+        public static Object ReSerializeObject(byte[] buffer)
+        {
+            MemoryStream ms = new MemoryStream(buffer);
+            IFormatter bf = new BinaryFormatter();
+            object obj = bf.Deserialize(ms);
+
+            ms.Close();
+            ms.Dispose();
+            return obj;
+        }
+        /// <summary>
+        /// 序列化对象
+        /// </summary>
+        /// <param name="ds"></param>
+        /// <returns></returns>
+        public static byte[] SerializeAndCompressObject(Object obj)
+        {
+            byte[] buffer = null;
+            MemoryStream ms = new MemoryStream();
+            IFormatter bf = new BinaryFormatter();
+            bf.Serialize(ms, obj);
+            buffer = ms.ToArray();
+            ms.Close();
+            ms.Dispose();
+            ms = null;
+            return CompressBytes(buffer);
+        }
+        /// <summary>
+        /// 反序列化对象
+        /// </summary>
+        /// <param name="buffer"></param>
+        /// <returns></returns>
+        public static Object ReSerializeCompressedObject(byte[] buffer)
+        {
+            MemoryStream ms = new MemoryStream(Decompress(buffer));
+            IFormatter bf = new BinaryFormatter();
+            object obj = bf.Deserialize(ms);
+            ms.Close();
+            ms.Dispose();
+            return obj;
+        }
+        #endregion
+
+        #region 压缩、解压缩
+        //压缩字节
+        public static byte[] CompressBytes(byte[] bytes)
+        {   /*  1.创建压缩的数据流 
+                2.设定compressStream为存放被压缩的文件流,并设定为压缩模式
+                3.将需要压缩的字节写到被压缩的文件流
+            */
+            using (MemoryStream compressStream = new MemoryStream())
+            {
+                using (GZipStream zipStream = new GZipStream(compressStream, CompressionMode.Compress))
+                    zipStream.Write(bytes, 0, bytes.Length);
+                Array.Resize(ref bytes, 0);
+                return compressStream.ToArray();
+            }
+        }
+
+
+        //解压缩字节
+        public static byte[] Decompress(byte[] bytes)
+        {
+            /*  1.创建被压缩的数据流
+                2.创建zipStream对象,并传入解压的内存流
+                3.创建目标流
+                4.zipStream拷贝到目标流
+                5.返回目标流输出字节
+            * */
+            byte[] buffer = new byte[4096];//定义数据缓冲  
+            using (MemoryStream compressStream = new MemoryStream(bytes))
+            {
+                using (GZipStream zipStream = new GZipStream(compressStream, CompressionMode.Decompress))
+                {
+                    using (MemoryStream resultStream = new MemoryStream())
+                    {
+                        int offset = 0;
+                        while ((offset = zipStream.Read(buffer, 0, buffer.Length)) != 0)
+                        {
+                            resultStream.Write(buffer, 0, offset);
+                        }
+                        return resultStream.ToArray();
+                    }
+                }
+            }
+
+        }
+
+        //////////////////////////////////////////////////////////////////////////            
+        ///读取Stream
+        //////////////////////////////////////////////////////////////////////////
+        public static int ReadAllBytesFromStream(Stream stream, byte[] buffer)
+        {
+            int offset = 0;
+            int totalCount = 0;
+            while (true)
+            {
+                int bytesRead = stream.Read(buffer, offset, 100);
+                if (bytesRead == 0)
+                {
+                    break;
+                }
+                offset += bytesRead;
+                totalCount += bytesRead;
+            }
+            return totalCount;
+        }
+
+        #endregion
+    }
+
+    public class TaskManager
+    {
+        private Thread taskMonitor = new Thread(new ThreadStart(Kill_InvalidTask));
+
+        public static Hashtable Tasks = new Hashtable();
+
+        public bool CreateTask(TaskType taskType, object param, out string outmsg)
+        {
+            outmsg = "";
+            TaskInfo ti = null;
+
+            do
+            {
+                ti = new TaskInfo();
+            } while (Tasks.Contains(ti.UniqueID));
+
+            if (!ti.CreateTask(taskType, param, out outmsg))
+            {
+                return false;
+            }
+            Tasks.Add(ti.UniqueID, ti);
+            return true;
+        }
+
+        public void SetTouch(String TaskID)
+        {
+            if (Tasks.Contains(TaskID))
+            {
+                TaskInfo ti = (TaskInfo)Tasks[TaskID];
+                ti.SetTouch();
+            }
+        }
+
+        public static void Kill_InvalidTask()
+        {
+            do
+            {
+                Thread.Sleep(30000);
+                try
+                {
+                    string outmsg = "";
+                    DateTime time_now = DateTime.Now;
+                    foreach (string key in Tasks.Keys)
+                    {
+                        try
+                        {
+                            TaskInfo ti = (TaskInfo)(Tasks[key]);
+                            if (ti.PlanEndTime < time_now)
+                            {
+                                if (ti.EndTask(out outmsg))
+                                {
+                                    Tasks.Remove(key);
+                                }
+                            }
+                        }
+                        catch { }
+                        //继续判断其他任务
+                    }
+                }
+                catch { }
+            } while (true);
+        }
+    }
+
+    public class TaskInfo
+    {
+        TimeSpan _keepTimes = new TimeSpan(0, 15, 0);
+
+        DateTime _startTime;
+        public DateTime StartTime
+        {
+            get { return _startTime; }
+        }
+
+        DateTime _touchTime;
+        public DateTime LastTouchTime
+        {
+            get { return _touchTime; }
+        }
+
+        DateTime _planEndTime;
+        public DateTime PlanEndTime
+        {
+            get { return _planEndTime; }
+        }
+
+
+        string _id;
+        public String UniqueID
+        {
+            get { return _id; }
+        }
+
+        TaskType _taskType;
+        object _parameter;
+
+        public TaskInfo(string _ID)
+        {
+            SetID(_ID);
+            _startTime = DateTime.Now;
+            _touchTime = _startTime;
+            _keepTimes = new TimeSpan(0, 15, 0);
+            _planEndTime = _touchTime.Add(_keepTimes);
+        }
+
+        public TaskInfo()
+        {
+            _startTime = DateTime.Now;
+            _touchTime = _startTime;
+            _keepTimes = new TimeSpan(0, 15, 0);
+            SetID(_startTime.Ticks.ToString());
+            _planEndTime = _touchTime.Add(_keepTimes);
+        }
+
+        public void SetID(string _ID)
+        {
+            if (string.IsNullOrEmpty(_ID)) return;
+            _id = _ID.ToString();
+        }
+
+        public void SetTouch()
+        {
+            _touchTime = DateTime.Now;
+            _planEndTime = _touchTime.Add(_keepTimes);
+        }
+
+        public void SetKeepTime(TimeSpan ts)
+        {
+            if (ts.Ticks <= 0) return;
+
+            _keepTimes = ts;
+            _planEndTime = _touchTime.Add(_keepTimes);
+        }
+
+        public bool CreateTask(TaskType taskType, object param, out string outmsg)
+        {
+            bool success = false;
+            outmsg = "";
+
+            switch (taskType)
+            {
+                case TaskType.SendFile:
+                    if (param.GetType() != typeof(string))
+                    {
+                        outmsg = "设置[文件发送]任务失败!,参数格式不正确!";
+                        return success;
+                    }
+                    string p = ((string)(param)).Trim();
+
+
+                    if (string.IsNullOrEmpty(p) || !File.Exists(p))
+                    {
+                        outmsg = "设置[文件发送]任务失败!,文件不存在!";
+                        return success;
+                    }
+
+                    _taskType = taskType;
+                    _parameter = param;
+
+                    success = true;
+                    break;
+                default:
+                    break;
+            }
+            return success;
+        }
+
+        public bool EndTask(out string outmsg)
+        {
+            bool success = false;
+            outmsg = "";
+
+            switch (_taskType)
+            {
+                case TaskType.SendFile:
+                    string p = ((string)(_parameter)).Trim();
+
+                    if (File.Exists(p))
+                    {
+                        try
+                        {
+                            File.Delete(p);
+                        }
+                        catch (Exception ex)
+                        {
+                            outmsg = "删除[文件发送]任务失败!\n" + ex.Message;
+                        }
+                    }
+                    success = true;
+                    break;
+                default:
+                    break;
+            }
+            return success;
+        }
+    }
+
+    public enum TaskType { SendFile = 1 };
+}

+ 53 - 0
.svn/pristine/24/24d7f3a29bcbe0372b96a1453d86e72c17a6c32b.svn-base

@@ -0,0 +1,53 @@
+using System;
+using System.Collections.Generic;
+using System.Windows.Forms;
+
+namespace Mes.AutoUpdate
+{
+    static class Program
+    {
+        /// <summary>
+        /// 应用程序的主入口点。
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(false);
+
+            /**
+             * 当前用户是管理员的时候,直接启动应用程序
+             * 如果不是管理员,则使用启动对象启动程序,以确保使用管理员身份运行
+             */
+            //获得当前登录的Windows用户标示
+            System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
+            System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity);
+            //判断当前登录用户是否为管理员
+            if (principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator))
+            {
+                //如果是管理员,则直接运行
+                Application.Run(new AutoUpdate());
+            }
+            else
+            {
+                //创建启动对象
+                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
+                startInfo.UseShellExecute = true;
+                startInfo.WorkingDirectory = Environment.CurrentDirectory;
+                startInfo.FileName = Application.ExecutablePath;
+                //设置启动动作,确保以管理员身份运行
+                startInfo.Verb = "runas";
+                try
+                {
+                    System.Diagnostics.Process.Start(startInfo);
+                }
+                catch
+                {
+                    return;
+                }
+                //退出
+                Application.Exit();
+            }
+        }
+    }
+}

+ 135 - 0
.svn/pristine/26/26291c22bb98c29ea403f7f7e0e050320dff19a6.svn-base

@@ -0,0 +1,135 @@
+extern alias G1;
+extern alias G2;
+
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.Reflection;
+using Toolbar1 = G1::Infragistics.Win.UltraWinToolbars;
+using Toolbar2 = G2::Infragistics.Win.UltraWinToolbars;
+
+namespace Core.Mes.ClientFrameWork
+{
+    /// <summary>
+    /// Core Mes 平台所有业务子窗体的基类
+    /// </summary>
+    public class FrmBase : System.Windows.Forms.Form
+    {
+        #region "	RemotingGate "
+        public string Key = "";
+        public bool On_Off_Thread = false;
+        public Form _ParentForm;
+        #endregion
+
+
+
+        private System.ComponentModel.IContainer components = null;
+
+        public FrmBase()
+        {
+            //
+            // Windows 窗体设计器支持所必需的
+            //
+            InitializeComponent();
+
+            //
+            // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
+            //
+        }
+
+        /// <summary>
+        /// 清理所有正在使用的资源。
+        /// </summary>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing)
+            {
+                if (components != null)
+                {
+                    components.Dispose();
+                }
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows 窗体设计器生成的代码
+        /// <summary>
+        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
+        /// 此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.SuspendLayout();
+            // 
+            // FrmBase
+            // 
+            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
+            this.ClientSize = new System.Drawing.Size(1012, 733);
+            this.Name = "FrmBase";
+            this.Text = "FrmBase";
+            this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
+            this.Load += new System.EventHandler(this.FrmBase_Load);
+            this.ResumeLayout(false);
+
+        }
+        #endregion
+
+        private void FrmBase_Load(object sender, EventArgs e)
+        {
+            AddToolBarListener();
+        }
+
+        private void AddToolBarListener()
+        {
+            //获取所有控件
+            System.Reflection.FieldInfo[] fieldInfo = this.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
+            for (int i = 0; i < fieldInfo.Length; i++)
+            {
+                try
+                {
+                    if (fieldInfo[i].FieldType == typeof(Toolbar1.UltraToolbarsManager))
+                    {
+                        Toolbar1.UltraToolbarsManager ut1 = fieldInfo[i].GetValue(this) as Toolbar1.UltraToolbarsManager;
+                        ut1.ToolClick += new Toolbar1.ToolClickEventHandler(_ToolbarClick_Listener1);
+
+                        //EventInfo ei = fieldInfo[i].FieldType.GetEvent("ToolClick");
+                        //MethodInfo mi = this.GetType().GetMethod("_ToolbarClick_Listener", BindingFlags.Instance);
+                        //Delegate dg = Delegate.CreateDelegate(ei.EventHandlerType, fieldInfo[i].GetValue(this), mi);
+                        //ei.AddEventHandler(fieldInfo[i].GetValue(this), dg);
+                    }
+                    else if (fieldInfo[i].FieldType == typeof(Toolbar2.UltraToolbarsManager))
+                    {
+                        Toolbar2.UltraToolbarsManager ut2 = fieldInfo[i].GetValue(this) as Toolbar2.UltraToolbarsManager;
+                        ut2.ToolClick += new Toolbar2.ToolClickEventHandler(_ToolbarClick_Listener2);
+                    }
+                    else if (fieldInfo[i].FieldType == typeof(ToolStrip))
+                    {
+                        ToolStrip t1 = fieldInfo[i].GetValue(this) as ToolStrip;
+                        t1.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this._toolStrip_ItemClicked);
+                    }
+                }
+                catch
+                {
+                }
+            }
+        }
+
+        public void _ToolbarClick_Listener1(object sender, Toolbar1.ToolClickEventArgs e)
+        {
+            ClientCommon.RecordUserEvent("点击", "按钮[ToolBar]", e.Tool.CaptionResolved, this.Text, this.ProductName, "");
+        }
+
+        public void _ToolbarClick_Listener2(object sender, Toolbar2.ToolClickEventArgs e)
+        {
+            ClientCommon.RecordUserEvent("点击", "按钮[ToolBar]", e.Tool.CaptionResolved, this.Text, this.ProductName, "");
+        }
+
+        private void _toolStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
+        {
+            ClientCommon.RecordUserEvent("点击", "按钮[ToolBar]", e.ClickedItem.Text, this.Text, this.ProductName, "");
+        }
+
+    }
+}

+ 23 - 0
.svn/pristine/26/262e572144219841fc1dcf24bce67635f490dd0b.svn-base

@@ -0,0 +1,23 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ProjectView>ProjectFiles</ProjectView>
+    <ReferencePath>e:\Code\Client\</ReferencePath>
+    <PublishUrlHistory>publish\</PublishUrlHistory>
+    <InstallUrlHistory>
+    </InstallUrlHistory>
+    <SupportUrlHistory>
+    </SupportUrlHistory>
+    <UpdateUrlHistory>
+    </UpdateUrlHistory>
+    <BootstrapperUrlHistory>
+    </BootstrapperUrlHistory>
+    <FallbackCulture>zh-CN</FallbackCulture>
+    <VerifyUploadedFiles>false</VerifyUploadedFiles>
+    <ErrorReportUrlHistory>
+    </ErrorReportUrlHistory>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <StartAction>Program</StartAction>
+    <StartProgram>E:\code\Client\Core.Mes.ClientManager.exe</StartProgram>
+  </PropertyGroup>
+</Project>

+ 438 - 0
.svn/pristine/26/26a2ec87719ad5c4faf0c434ac83b6e8a4f12a4f.svn-base

@@ -0,0 +1,438 @@
+using System;
+using System.IO;
+using System.Xml;
+using System.Data;
+using System.Text;
+using System.Collections;
+using System.Reflection;
+using System.Configuration;
+using Core.Mes.Common;
+using Core.Mes.IBaseInterface;
+
+namespace Core.Mes.ServerFrameWork
+{
+    [Serializable]
+    public class Dispatcher : MarshalByRefObject, ICommon
+    {
+        private ArrayList _objects = null;
+        private ServerConfigure _servConf = null;
+        public ServerConfigure ServConfig
+        {
+            get { return _servConf; }
+        }
+
+        #region	"	Construct	"
+        public Dispatcher() { }
+        public Dispatcher(IServerPool pool, ServerConfigure _conf, ArrayList _objs)
+        {
+            Pool = pool;
+            _servConf = _conf;
+            _objects = _objs;
+        }
+        private IServerPool _pool = null;
+        public IServerPool Pool
+        {
+            get { return _pool; }
+            set
+            {
+                _pool = value;
+                if (_pool.OwnObjects == null && _objects != null) _pool.OwnObjects = _objects;
+            }
+        }
+        #endregion
+
+        #region "	Variable	"
+
+        //== 子服务集合
+        public static Hashtable _htServers = new Hashtable();
+        //== 数据链接集合
+        public static Hashtable htDBManager = new Hashtable();
+
+        public event GetStatusInfoHandler getStatusInfo;
+
+        public delegate void GetStatusInfoHandler(string info);
+
+        protected virtual void SetStatusMessage(string info)
+        {
+            if (getStatusInfo != null)
+            {
+                getStatusInfo(info);
+            }
+        }
+
+        #endregion
+
+        #region 内存释放
+        public void MemoryDispose()
+        {
+            long memorysize = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64;
+            int PagedMemorySize = (int)memorysize / (1024 * 1024);
+            if (PagedMemorySize > _servConf.MemoryMaxSize)//进程占用内存>100M 做GC.
+            {
+                try
+                {
+                    GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
+                }
+                catch
+                {
+
+                }
+                System.Diagnostics.Process.GetCurrentProcess().Dispose();
+            }
+        }
+        #endregion
+
+        #region MethodTimeLog
+        private static object lockObj = new object();
+        public void MethodTimeLog(TimeSpan tspan, object[] objs, object[] args)
+        {
+            string path = string.Format(@"./log/Method/MethodTimeLog_{0}.txt", System.DateTime.Now.ToString("yyyy_MM_dd"));
+
+            lock (lockObj)
+            {
+                using (StreamWriter sw = new StreamWriter(path, true, Encoding.UTF8))
+                {
+
+                    StringBuilder sbtxt = new StringBuilder();
+                    sbtxt.AppendLine("==============================================");
+                    sbtxt.AppendLine(string.Format("LogWriteTime:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
+                    sbtxt.AppendLine(string.Format("Time:{0}", tspan.TotalMilliseconds));
+                    sbtxt.AppendLine(string.Format("ClassName:{0}", objs[0].ToString()));
+                    sbtxt.AppendLine(string.Format("MethodName:{0}", objs[1].ToString()));
+                    if (args != null)
+                    {
+                        foreach (object obj in args)
+                        {
+                            if (obj != null)
+                            {
+                                sbtxt.AppendLine(string.Format("Parameters:{0}", obj.ToString()));
+                            }
+                        }
+                    }
+                    sbtxt.AppendLine("==============================================");
+                    sw.WriteLine(sbtxt.ToString());
+
+                }
+            }
+        }
+        public void MethodErrLog(Exception ex, object[] objs, object[] args)
+        {
+            string path = string.Format(@"./log/Method/MethodErrLog_{0}.txt", System.DateTime.Now.ToString("yyyy_MM_dd"));
+            lock (lockObj)
+            {
+                using (StreamWriter sw = new StreamWriter(path, true, Encoding.UTF8))
+                {
+
+                    StringBuilder sbtxt = new StringBuilder();
+                    sbtxt.AppendLine("==============================================");
+                    sbtxt.AppendLine(string.Format("LogWriteTime:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
+                    sbtxt.AppendLine(string.Format("ClassName:{0}", objs[0].ToString()));
+                    sbtxt.AppendLine(string.Format("MethodName:{0}", objs[1].ToString()));
+                    if (args != null)
+                    {
+                        foreach (object obj in args)
+                        {
+                            if (obj != null)
+                            {
+                                sbtxt.AppendLine(string.Format("Parameters:{0}", obj.ToString()));
+                            }
+                        }
+                    }
+                    sbtxt.AppendLine(ex.Message);
+                    sbtxt.AppendLine(ex.StackTrace);
+                    sbtxt.AppendLine("==============================================");
+                    sw.WriteLine(sbtxt.ToString());
+
+                }
+            }
+        }
+        public void DebugLog(object[] objs, object[] args)
+        {
+            string path = string.Format(@"./log/Method/DebugLog_{0}.txt", System.DateTime.Now.ToString("yyyy_MM_dd"));
+            lock (lockObj)
+            {
+                if (File.Exists(Path.GetFullPath(path)))
+                {
+                    FileInfo fileInfo = new FileInfo(Path.GetFullPath(path));
+                    if (fileInfo.Length / (1024 * 1024) > 6)
+                    {
+                        File.Delete(path);
+                    }
+                }
+
+                using (StreamWriter sw = new StreamWriter(path, true, Encoding.UTF8))
+                {
+
+                    StringBuilder sbtxt = new StringBuilder();
+                    sbtxt.AppendLine("==============================================");
+                    sbtxt.AppendLine(string.Format("LogWriteTime:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
+                    sbtxt.AppendLine(string.Format("ClassName:{0}", objs[0].ToString()));
+                    sbtxt.AppendLine(string.Format("MethodName:{0}", objs[1].ToString()));
+                    if (args != null)
+                    {
+                        foreach (object obj in args)
+                        {
+                            if (obj != null)
+                            {
+                                sbtxt.AppendLine(string.Format("Parameters:{0}", obj.ToString()));
+                            }
+                        }
+                    }
+                    sbtxt.AppendLine("==============================================");
+                    sw.WriteLine(sbtxt.ToString());
+
+                }
+            }
+        }
+        #endregion
+        #region "	调用服务	"
+        /// <summary>
+        /// 服务端公开给客户端的调用后台服务的方法
+        /// </summary>
+        /// <param name="message"></param>
+        /// <returns></returns>
+        public ReturnObject MethodHandler(CallingMessage message, ValidateInfo validateInfo)
+        {
+            CallingMessageEx messageEx = new CallingMessageEx();
+            messageEx.FromCallingMessage(message);
+            messageEx.RedirectLimit = 0;
+            messageEx.InnerServerRedirect = true;
+
+            ReturnObjectEx rtnObjEx = RelayMessage(messageEx, validateInfo);
+            ReturnObject rtnObj = new ReturnObject();
+            rtnObj.ErrCode = rtnObjEx.ErrCode;
+            rtnObj.ErrMessage = rtnObjEx.ErrMessage;
+            rtnObj.RealDataSet = rtnObjEx.RealDataSet;
+            rtnObj.RealObject = rtnObjEx.RealObject;
+
+            return rtnObj;
+        }
+
+        public ReturnObjectEx MethodHandlerEx(CallingMessageEx message, ValidateInfo validateInfo)
+        {
+            return RelayMessage(message, validateInfo);
+        }
+
+        private ReturnObjectEx RelayMessage(CallingMessageEx messageEx, ValidateInfo validateInfo)
+        {
+            string serverName = messageEx.ServerName;
+            string assemblyName = messageEx.AssemblyName;
+            string className = messageEx.ClassName;
+            string methodName = messageEx.MethodName;
+            object[] args = messageEx.args;
+
+            ReturnObjectEx rtnObjEx = new ReturnObjectEx(); 
+            try
+            {
+                if (serverName.ToUpper() != "SERVERCOMMON" && messageEx.RedirectLimit > 0)
+                {
+                    string RedirURL = "";
+                    double sum_factor = 0;
+                    ArrayList serviceProvider = new ArrayList();
+                    ArrayList pfactors = new ArrayList();
+                    serviceProvider.Add("THIS");
+                    sum_factor += this.ServConfig.PriorityFactor;
+                    pfactors.Add(sum_factor);
+                    foreach (string server in Pool.HtExtServer.Keys)
+                    {
+                        RemotingServer rs = (RemotingServer)Pool.HtExtServer[server];
+                        if (rs.Valid != RemoteServerStatus.Normal || rs.Enable == false) continue;
+
+                        rs.FindRemoteServer(serverName);
+
+                        if (!rs.HTServices.ContainsKey(serverName)) continue;
+                        ServiceObject so = ((ServiceObject)(rs.HTServices[serverName]));
+                        if (so.Valid != ServiceObjectStatus.Normal || so.Enable == false) continue;
+
+                        RedirURL = so.URL;
+                        sum_factor += rs.PriorityFactor;
+                        serviceProvider.Add(server);
+                        pfactors.Add(sum_factor);
+                    }
+
+                    Random rand = new Random();
+                    double rand_selector = rand.NextDouble() * sum_factor;
+                    int selector = 0;
+                    for (int idx = 0 ; idx < pfactors.Count ; idx++)
+                    {
+                        if (rand_selector <= (double)pfactors[idx])
+                        {
+                            selector = idx;
+                            break;
+                        }
+                    }
+                    if (selector != 0)
+                    {
+                        SimpleReturnObject _out = new SimpleReturnObject();
+                        if (messageEx.InnerServerRedirect)
+                        {
+                            //通过服务器转发调用。(由本服务器 调用其他服务器方法,并转发结果到客户机)
+                            RemotingServer rs = (RemotingServer)Pool.HtExtServer[serviceProvider[selector]];
+                            rtnObjEx = (ReturnObjectEx)rs.ExecuteMethod(messageEx, out _out);
+                            return rtnObjEx;
+                        }
+                        else
+                        {
+                            //不转发调用。(返回其他服务器地址,由客户机自行调用)
+                            rtnObjEx.ReDirectURL = RedirURL;
+                            return rtnObjEx;
+                        }
+                    }
+                }
+
+                //调用本地服务
+                return ExecuteLocalService(messageEx, validateInfo);
+
+
+            }
+            catch (Exception ex)
+            {
+                MethodErrLog(ex, new object[] { className, methodName }, args);
+                return new ReturnObjectEx(null, "服务调用发生异常! \n" + ex.Message);
+            }        
+        }
+
+        private ReturnObjectEx ExecuteLocalService(CallingMessageEx messageEx, ValidateInfo validateInfo)
+        {
+            //step1:
+            MemoryDispose();
+
+            //step2:
+            string serverName = messageEx.ServerName;
+            string assemblyName = messageEx.AssemblyName;
+            string className = messageEx.ClassName;
+            string methodName = messageEx.MethodName;
+            object[] args = messageEx.args;
+
+            ReturnObjectEx rtnObjEx = new ReturnObjectEx();
+            MethodInfo myMethod = null;
+            try
+            {
+                if (Pool.HtComponent.Contains(className))
+                {
+                    try
+                    {
+                        //使用本地服务
+                        myMethod = Pool.GetType().GetMethod("HandleMethodEx");
+
+                        DateTime startTime = DateTime.Now;
+                        if (_servConf.Debug == "true")
+                        {
+                            DebugLog(new object[] { className, methodName }, args);
+                        }
+
+                        ReturnObject rtnObj = (ReturnObject)myMethod.Invoke(Pool, new object[] { className, methodName, args, _objects });
+
+                        rtnObjEx.ReDirectURL = "";
+                        rtnObjEx.ErrCode = rtnObj.ErrCode;
+                        rtnObjEx.ErrMessage = rtnObj.ErrMessage;
+                        rtnObjEx.RealDataSet = rtnObj.RealDataSet;
+                        rtnObjEx.RealObject = rtnObj.RealObject;
+
+                        DateTime endTime = DateTime.Now;
+                        TimeSpan tspan = endTime - startTime;
+                        if (tspan.TotalMilliseconds > (_servConf.MethodTime * 1000))
+                        {
+                            MethodTimeLog(tspan, new object[] { className, methodName }, args);
+                        }
+
+                        if (rtnObjEx.RealObject != null)
+                        {
+                            #region 返回值为表格
+                            if (rtnObjEx.RealObject.GetType() == typeof(DataSet))
+                            {
+                                DataSet _ds = (DataSet)rtnObjEx.RealObject;
+                                bool largeData = false;
+
+                                int row_cnt = 0;
+                                foreach (DataTable _dt in _ds.Tables)
+                                {
+                                    row_cnt += _dt.Rows.Count;
+                                    if (_dt.Rows.Count > _servConf.CompressThreshold || row_cnt > _servConf.CompressThreshold)
+                                    {
+                                        largeData = true;
+                                        break;
+                                    }
+                                }
+
+                                if (largeData)
+                                {
+                                    byte[] _rtn = Utility.SerializeDataSet(_ds);
+
+                                    _ds.Dispose();
+                                    _ds = null;
+                                    rtnObjEx.RealObject = null;
+
+                                    byte[] _rtn_comp = Utility.CompressBytes(_rtn);
+                                    DataTable dt_rus = new DataTable("RETURN_RESULT");
+                                    dt_rus.Columns.AddRange(new DataColumn[]{
+                                    new DataColumn("IsCompressed",  System.Type.GetType("System.Int32") ),
+                                    new DataColumn("UnCompress_size", System.Type.GetType("System.Int32")),
+                                    new DataColumn("Compress_size", System.Type.GetType("System.Int32"))}
+                                    );
+                                    dt_rus.AcceptChanges();
+                                    dt_rus.Rows.Add(new object[] { 1, _rtn.Length, _rtn_comp.Length });
+                                    dt_rus.AcceptChanges();
+                                    if (rtnObjEx.RealDataSet == null)
+                                    {
+                                        rtnObjEx.RealDataSet = new DataSet();
+                                    }
+                                    rtnObjEx.RealDataSet.Tables.Add(dt_rus);
+                                    rtnObjEx.RealObject = _rtn_comp;
+                                }
+                            }
+                            else if (rtnObjEx.RealObject.GetType() == typeof(ArrayList))
+                            {
+
+                            }
+
+                            #endregion
+                        }
+
+                        return rtnObjEx;
+
+                    }
+                    catch (Exception ex)
+                    {
+                        MethodErrLog(ex, new object[] { className, methodName }, args);
+                        return new ReturnObjectEx(null, ex.Message);
+                    }
+                    finally
+                    {
+                        try
+                        {
+                            if (rtnObjEx.RealObject != null)
+                            {
+                                rtnObjEx.RealObject = null;
+                            }
+                            if (rtnObjEx.RealDataSet != null)
+                            {
+                                rtnObjEx.RealDataSet = null;
+                            }
+                        }
+                        catch { }
+                    }
+                }
+                else
+                {
+                    return new ReturnObjectEx(null, "未找到请求的服务![2]");
+                }
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObjectEx(null, "服务调用发生异常! \n" + ex.Message);
+            }
+        }
+        #endregion
+
+        #region "	Common Handler	"
+        //=======================================================
+        // 用来确保当创建 Singleton 时, 第一个实例永远不会过期
+        //=======================================================
+        public override object InitializeLifetimeService()
+        {
+            return null;
+        }
+        #endregion
+    }
+}

+ 17 - 0
.svn/pristine/27/27ad43f3d6fa13f645c94141f5fa4329a13d9bcc.svn-base

@@ -0,0 +1,17 @@
+using System;
+
+namespace Core.Mes.ServerFrameWork
+{
+	public class CoreMesLogger
+	{
+		static CoreMesLogger()
+		{
+			log4net.Config.DOMConfigurator.ConfigureAndWatch(new System.IO.FileInfo("log4net.config"));  
+		}
+		
+		public static log4net.ILog log( System.Type name)
+		{
+			return log4net.LogManager.GetLogger(name);
+		}
+	}
+}

+ 2435 - 0
.svn/pristine/27/27c6cf34b70ac85ca7b6ba09451cb335d97f7a5b.svn-base

@@ -0,0 +1,2435 @@
+using System;
+using System.Data;
+using System.Data.OracleClient;
+using System.Collections;
+using System.Runtime.Remoting;
+using System.Runtime.Remoting.Channels;
+using System.Runtime.Remoting.Channels.Tcp;
+using System.Threading;
+
+namespace STMes
+{
+    /// <summary>
+    /// DBManager 的摘要说明。
+    /// </summary>
+    public class DBManager : IDisposable
+    {
+        /// <summary>
+        /// 初始化
+        /// </summary>
+        public DBManager()
+        {
+            InitDBManager("MesDB", "A");
+        }
+
+        /// <summary>
+        /// 初始化
+        /// </summary>
+        /// <param name="dbName">数据库名称</param>
+        public DBManager(string dbName)
+        {
+            InitDBManager(dbName, "A");
+        }
+
+        /// <summary>
+        /// 初始化
+        /// </summary>
+        /// <param name="dbName">数据库名称</param>
+        /// <param name="priority">优先级</param>
+        public DBManager(string dbName, string priority)
+        {
+            InitDBManager(dbName, priority);
+        }
+
+        /// <summary>
+        /// 初始化
+        /// </summary>
+        /// 
+        public void SetLogHandle(ShowLogDelegate _slDel)
+        {
+            if (_slDel != null)
+                this.ShowLogEvent += _slDel;
+        }
+
+        public void Dispose() { }
+
+
+
+        private bool _isLogging = false;
+        public bool IsLogging
+        {
+            get { return _isLogging; }
+            set
+            {
+                _isLogging = value;
+                if (_dbProxy != null)
+                {
+                    _dbProxy.SetLogging(_isLogging);
+                }
+            }
+        }
+
+        /// <summary>
+        /// 获取上次执行时最后一个错误信息,无错误则返回空字符串
+        /// </summary>
+        /// <returns>错误信息</returns>
+        public string GetLastError()
+        {
+            return _errMsg;
+        }
+
+        /// <summary>
+        /// 判断DBManager是否有效
+        /// </summary>
+        /// <returns>是否有效</returns>
+        public bool IsValid()
+        {
+            return _valid;
+        }
+
+        /// <summary>
+        /// 获取数据库类型,用字符串"SQLServer","Oracle", "OleDb"分别表示不同类型的数据库
+        /// </summary>
+        /// <returns>数据库类型</returns>
+        public string GetDbType()
+        {
+            string dbType = "";
+            try
+            {
+                dbType = _dbProxy.GetDbType(_dbName, out _errMsg);
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return dbType;
+        }
+
+        //获取数据库类型,用字符串"SQLServer","Oracle", "OleDb"分别表示不同类型的数据库
+        public string GetDbType(out string err)
+        {
+            string dbType = "";
+            err = "";
+            try
+            {
+                dbType = _dbProxy.GetDbType(_dbName, out err);
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = err = ex.Message;
+            }
+
+            return dbType;
+        }
+        #region add 马亮 2011-10-21
+        /// <summary>
+        /// 分页返回查询数据[只支持Oracle数据库]
+        /// </summary>
+        /// <param name="sql"></param>
+        /// <param name="pageIndex"></param>
+        /// <param name="pageSize"></param>
+        /// <param name="recordCount"></param>
+        /// <param name="pageCount"></param>
+        /// <param name="err"></param>
+        /// <returns></returns>
+        public DataSet ExecuteDataPageQuery(string sql, int pageIndex, int pageSize, out int recordCount, out int pageCount, out string err)
+        {
+            DataPage dpage = new DataPage(_dbProxy, _dbName, _priority);
+            dpage.InitDataPage(sql, pageIndex, pageSize);
+            _valid = dpage._valid;
+            _errMsg = dpage._errMsg;
+            err = _errMsg;
+            recordCount = dpage.RecordCount;
+            pageCount = dpage.PageCount;
+            return dpage.Result;
+        }
+        /// <summary>
+        /// 分页返回查询数据[只支持Oracle数据库]
+        /// </summary>
+        /// <param name="sql"></param>
+        /// <param name="pageIndex"></param>
+        /// <param name="pageSize"></param>
+        /// <param name="Params"></param>
+        /// <param name="Values"></param>
+        /// <param name="recordCount"></param>
+        /// <param name="pageCount"></param>
+        /// <param name="err"></param>
+        /// <returns></returns>
+        public DataSet ExecuteDataPageQuery(string sql, int pageIndex, int pageSize, IDataParameter[] Params, object[] Values, out int recordCount, out int pageCount, out string err)
+        {
+            DataPage dpage = new DataPage(_dbProxy, _dbName, _priority);
+            dpage.InitDataPage(sql, pageIndex, pageSize, Params, Values);
+            _valid = dpage._valid;
+            _errMsg = dpage._errMsg;
+            err = _errMsg;
+            recordCount = dpage.RecordCount;
+            pageCount = dpage.PageCount;
+            return dpage.Result;
+        }
+        #endregion
+
+        //执行SQL语句,返回DataSet
+        public DataSet ExecuteQuery(string Sql, Guid guid)
+        {
+            DataSet ds = null;
+
+            try
+            {
+                ds = _dbProxy.ExecuteQuery(_dbName, _priority, guid, Sql, CommandType.Text, null, null, out _errMsg);
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+        public DataSet ExecuteQuery(string Sql)
+        {
+            DataSet ds = null;
+
+            try
+            {
+                ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, CommandType.Text, null, null, out _errMsg);
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+
+        //执行SQL语句,返回DataSet
+        public DataSet ExecuteQuery(string Sql, Guid guid, out string err)
+        {
+            err = "";
+            DataSet ds = new DataSet();
+
+            try
+            {
+                ds = _dbProxy.ExecuteQuery(_dbName, _priority, guid, Sql, CommandType.Text, null, null, out err);
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+        public DataSet ExecuteQuery(string Sql, out string err)
+        {
+            err = "";
+            DataSet ds = new DataSet();
+
+            try
+            {
+                ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, CommandType.Text, null, null, out err);
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+        public DataSet ExecuteQuery(string Sql, out string err, bool ifDBLink)
+        {
+            err = "";
+            DataSet ds = new DataSet();
+
+            try
+            {
+                ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, CommandType.Text, null, null, out err, ifDBLink);
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+        //执行SQL语句,返回DataSet
+        public DataSet ExecuteQuery(string Sql, CommandType cmdType, Guid guid)
+        {
+            DataSet ds = new DataSet();
+
+            try
+            {
+                ds = _dbProxy.ExecuteQuery(_dbName, _priority, guid, Sql, cmdType, null, null, out _errMsg);
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+        public DataSet ExecuteQuery(string Sql, CommandType cmdType)
+        {
+            DataSet ds = new DataSet();
+
+            try
+            {
+                ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, cmdType, null, null, out _errMsg);
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+
+        //执行SQL语句,返回DataSet
+        public DataSet ExecuteQuery(string Sql, CommandType cmdType, Guid guid, out string err)
+        {
+            err = "";
+            DataSet ds = new DataSet();
+
+            try
+            {
+                ds = _dbProxy.ExecuteQuery(_dbName, _priority, guid, Sql, cmdType, null, null, out err);
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+        public DataSet ExecuteQuery(string Sql, CommandType cmdType, out string err)
+        {
+            err = "";
+            DataSet ds = new DataSet();
+
+            try
+            {
+                ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, cmdType, null, null, out err);
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+
+        //执行带参数的SQL语句,返回DataSet
+        public DataSet ExecuteQuery(string Sql, IDataParameter[] Params, object[] Values, Guid guid)
+        {
+            DataSet ds = new DataSet();
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    ArrayList OutputValues = null;
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, guid, Sql, CommandType.Text, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out _errMsg);
+                }
+                else
+                {
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, guid, Sql, CommandType.Text, null, null, out _errMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+        public DataSet ExecuteQuery(string Sql, IDataParameter[] Params, object[] Values)
+        {
+            DataSet ds = new DataSet();
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    ArrayList OutputValues = null;
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, CommandType.Text, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out _errMsg);
+                }
+                else
+                {
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, CommandType.Text, null, null, out _errMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+
+        //执行带参数的SQL语句,返回DataSet
+        public DataSet ExecuteQuery(string Sql, IDataParameter[] Params, object[] Values, ref ArrayList OutputValues, Guid guid)
+        {
+            DataSet ds = new DataSet();
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, guid, Sql, CommandType.Text, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out _errMsg);
+                }
+                else
+                {
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, guid, Sql, CommandType.Text, null, null, out _errMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+        public DataSet ExecuteQuery(string Sql, IDataParameter[] Params, object[] Values, ref ArrayList OutputValues)
+        {
+            DataSet ds = new DataSet();
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, CommandType.Text, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out _errMsg);
+                }
+                else
+                {
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, CommandType.Text, null, null, out _errMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+
+        //执行带参数的SQL语句,返回DataSet
+        public DataSet ExecuteQuery(string Sql, IDataParameter[] Params, object[] Values, Guid guid, out string err)
+        {
+            err = "";
+            DataSet ds = new DataSet();
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    ArrayList OutputValues = null;
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, guid, Sql, CommandType.Text, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out err);
+                }
+                else
+                {
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, guid, Sql, CommandType.Text, null, null, out err);
+                }
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+        public DataSet ExecuteQuery(string Sql, IDataParameter[] Params, object[] Values, out string err)
+        {
+            err = "";
+            DataSet ds = new DataSet();
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    ArrayList OutputValues = null;
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, CommandType.Text, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out err);
+                }
+                else
+                {
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, CommandType.Text, null, null, out err);
+                }
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+
+        //执行带参数的SQL语句,返回DataSet
+        public DataSet ExecuteQuery(string Sql, IDataParameter[] Params, object[] Values, ref ArrayList OutputValues, Guid guid, out string err)
+        {
+            err = "";
+            DataSet ds = new DataSet();
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, guid, Sql, CommandType.Text, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out err);
+                }
+                else
+                {
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, guid, Sql, CommandType.Text, null, null, out err);
+                }
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+        public DataSet ExecuteQuery(string Sql, IDataParameter[] Params, object[] Values, ref ArrayList OutputValues, out string err)
+        {
+            err = "";
+            DataSet ds = new DataSet();
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, CommandType.Text, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out err);
+                }
+                else
+                {
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, CommandType.Text, null, null, out err);
+                }
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+
+        //执行带参数的SQL语句,返回DataSet
+        public DataSet ExecuteQuery(string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, Guid guid)
+        {
+            DataSet ds = new DataSet();
+            ArrayList OutputValues = null;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, guid, Sql, cmdType, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out _errMsg);
+                }
+                else
+                {
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, guid, Sql, cmdType, null, null, out _errMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+        public DataSet ExecuteQuery(string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values)
+        {
+            DataSet ds = new DataSet();
+            ArrayList OutputValues = null;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, cmdType, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out _errMsg);
+                }
+                else
+                {
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, cmdType, null, null, out _errMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+
+        //执行带参数的SQL语句,返回DataSet
+        public DataSet ExecuteQuery(string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, ref ArrayList OutputValues, Guid guid)
+        {
+            DataSet ds = new DataSet();
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, guid, Sql, cmdType, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out _errMsg);
+                }
+                else
+                {
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, guid, Sql, cmdType, null, null, out _errMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+        public DataSet ExecuteQuery(string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, ref ArrayList OutputValues)
+        {
+            DataSet ds = new DataSet();
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, cmdType, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out _errMsg);
+                }
+                else
+                {
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, cmdType, null, null, out _errMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+
+        //执行带参数的SQL语句,返回DataSet
+        public DataSet ExecuteQuery(string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, Guid guid, out string err)
+        {
+            err = "";
+            DataSet ds = new DataSet();
+            ArrayList OutputValues = null;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, guid, Sql, cmdType, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out err);
+                }
+                else
+                {
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, guid, Sql, cmdType, null, null, out err);
+                }
+
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+        public DataSet ExecuteQuery(string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, out string err)
+        {
+            err = "";
+            DataSet ds = new DataSet();
+            ArrayList OutputValues = null;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, cmdType, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out err);
+                }
+                else
+                {
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, cmdType, null, null, out err);
+                }
+
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+
+        //执行带参数的SQL语句,返回DataSet
+        public DataSet ExecuteQuery(string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, ref ArrayList OutputValues, Guid guid, out string err)
+        {
+            err = "";
+            DataSet ds = new DataSet();
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, guid, Sql, cmdType, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out err);
+                }
+                else
+                {
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, guid, Sql, cmdType, null, null, out err);
+                }
+
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+        public DataSet ExecuteQuery(string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, ref ArrayList OutputValues, out string err)
+        {
+            err = "";
+            DataSet ds = new DataSet();
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, cmdType, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out err);
+                }
+                else
+                {
+                    ds = _dbProxy.ExecuteQuery(_dbName, _priority, Sql, cmdType, null, null, out err);
+                }
+
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return ds;
+        }
+
+
+        //执行SQL语句,返回受影响的行数
+        public int ExecuteNonQuery(string Sql, Guid guid)
+        {
+            int lines = -1;
+
+            try
+            {
+                lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, CommandType.Text, null, null, out _errMsg);
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+        public int ExecuteNonQuery(string Sql)
+        {
+            int lines = -1;
+
+            try
+            {
+                lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, CommandType.Text, null, null, out _errMsg);
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+
+        //执行SQL语句,返回受影响的行数
+        public int ExecuteNonQuery(string Sql, Guid guid, out string err)
+        {
+            err = "";
+            int lines = -1;
+
+            try
+            {
+                lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, CommandType.Text, null, null, out err);
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+        public int ExecuteNonQuery(string Sql, out string err)
+        {
+            err = "";
+            int lines = -1;
+
+            try
+            {
+                lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, CommandType.Text, null, null, out err);
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+        //执行SQL语句,返回受影响的行数
+        public int ExecuteNonQuery(string Sql, CommandType cmdType, Guid guid)
+        {
+            int lines = -1;
+
+            try
+            {
+                lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, cmdType, null, null, out _errMsg);
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+        public int ExecuteNonQuery(string Sql, CommandType cmdType)
+        {
+            int lines = -1;
+
+            try
+            {
+                lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, cmdType, null, null, out _errMsg);
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+        //执行SQL语句,返回受影响的行数
+        public int ExecuteNonQuery(string Sql, CommandType cmdType, Guid guid, out string err)
+        {
+            err = "";
+            int lines = -1;
+
+            try
+            {
+                lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, cmdType, null, null, out err);
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+        public int ExecuteNonQuery(string Sql, CommandType cmdType, out string err)
+        {
+            err = "";
+            int lines = -1;
+
+            try
+            {
+                lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, cmdType, null, null, out err);
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+        //执行带参数的SQL语句,返回受影响的行数
+        public int ExecuteNonQuery(string Sql, IDataParameter[] Params, object[] Values, Guid guid)
+        {
+            int lines = -1;
+            ArrayList OutputValues = null;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, CommandType.Text, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out _errMsg);
+                }
+                else
+                {
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, CommandType.Text, null, null, out _errMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+        public int ExecuteNonQuery(string Sql, IDataParameter[] Params, object[] Values)
+        {
+            int lines = -1;
+            ArrayList OutputValues = null;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, CommandType.Text, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out _errMsg);
+                }
+                else
+                {
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, CommandType.Text, null, null, out _errMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+
+        //执行带参数的SQL语句,返回受影响的行数
+        public int ExecuteNonQuery(string Sql, IDataParameter[] Params, object[] Values, ref ArrayList OutputValues, Guid guid)
+        {
+            int lines = -1;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, CommandType.Text, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out _errMsg);
+                }
+                else
+                {
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, CommandType.Text, null, null, out _errMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+        public int ExecuteNonQuery(string Sql, IDataParameter[] Params, object[] Values, ref ArrayList OutputValues)
+        {
+            int lines = -1;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, CommandType.Text, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out _errMsg);
+                }
+                else
+                {
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, CommandType.Text, null, null, out _errMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+
+        //执行带参数的SQL语句,返回受影响的行数
+        public int ExecuteNonQuery(string Sql, IDataParameter[] Params, object[] Values, Guid guid, out string err)
+        {
+            err = "";
+            int lines = -1;
+            ArrayList OutputValues = null;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, CommandType.Text, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out err);
+                }
+                else
+                {
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, CommandType.Text, null, null, out err);
+                }
+
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+        public int ExecuteNonQuery(string Sql, IDataParameter[] Params, object[] Values, out string err)
+        {
+            err = "";
+            int lines = -1;
+            ArrayList OutputValues = null;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, CommandType.Text, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out err);
+                }
+                else
+                {
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, CommandType.Text, null, null, out err);
+                }
+
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+
+        //执行带参数的SQL语句,返回受影响的行数
+        public int ExecuteNonQuery(string Sql, IDataParameter[] Params, object[] Values, ref ArrayList OutputValues, Guid guid, out string err)
+        {
+            err = "";
+            int lines = -1;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, CommandType.Text, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out err);
+                }
+                else
+                {
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, CommandType.Text, null, null, out err);
+                }
+
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+        public int ExecuteNonQuery(string Sql, IDataParameter[] Params, object[] Values, ref ArrayList OutputValues, out string err)
+        {
+            err = "";
+            int lines = -1;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, CommandType.Text, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out err);
+                }
+                else
+                {
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, CommandType.Text, null, null, out err);
+                }
+
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+
+        //执行带参数的SQL语句,返回受影响的行数
+        public int ExecuteNonQuery(string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, Guid guid)
+        {
+            int lines = -1;
+            ArrayList OutputValues = null;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, cmdType, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out _errMsg);
+                }
+                else
+                {
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, cmdType, null, null, out _errMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+        public int ExecuteNonQuery(string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values)
+        {
+            int lines = -1;
+            ArrayList OutputValues = null;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, cmdType, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out _errMsg);
+                }
+                else
+                {
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, cmdType, null, null, out _errMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+
+        //执行带参数的SQL语句,返回受影响的行数
+        public int ExecuteNonQuery(string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, ref ArrayList OutputValues, Guid guid)
+        {
+            int lines = -1;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, cmdType, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out _errMsg);
+                }
+                else
+                {
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, cmdType, null, null, out _errMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+        public int ExecuteNonQuery(string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, ref ArrayList OutputValues)
+        {
+            int lines = -1;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, cmdType, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out _errMsg);
+                }
+                else
+                {
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, cmdType, null, null, out _errMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+
+        //执行带参数的SQL语句,返回受影响的行数
+        public int ExecuteNonQuery(string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, Guid guid, out string err)
+        {
+            err = "";
+            int lines = -1;
+            ArrayList OutputValues = null;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, cmdType, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out err);
+                }
+                else
+                {
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, cmdType, null, null, out err);
+                }
+
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+        public int ExecuteNonQuery(string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, out string err)
+        {
+            err = "";
+            int lines = -1;
+            ArrayList OutputValues = null;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                    }
+
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, cmdType, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out err);
+                }
+                else
+                {
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, cmdType, null, null, out err);
+                }
+
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+
+        //执行带参数的SQL语句,返回受影响的行数
+        public int ExecuteNonQuery(string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, ref ArrayList OutputValues, Guid guid, out string err)
+        {
+            err = "";
+            int lines = -1;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+                    int[] Sizes = new int[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        if (this.GetDbType().ToUpper() == "ORACLE")
+                            DbTypes[i] = (DbType)(((OracleParameter)Params[i]).OracleType);
+                        else
+                            DbTypes[i] = Params[i].DbType;
+
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                        if (this.GetDbType().ToUpper() == "ORACLE") Sizes[i] = ((OracleParameter)Params[i]).Size;
+                    }
+                    if (this.GetDbType().ToUpper() == "ORACLE")
+                        lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, cmdType, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Sizes, Values, ref OutputValues, out err);
+
+                    else
+                        lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, cmdType, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out err);
+                }
+                else
+                {
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, guid, Sql, cmdType, null, null, out err);
+                }
+
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+        public int ExecuteNonQuery(string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, ref ArrayList OutputValues, out string err)
+        {
+            err = "";
+            int lines = -1;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+                    ParameterDirection[] Directions = new ParameterDirection[Params.Length];
+                    bool[] IsNullables = new bool[Params.Length];
+                    string[] SourceColumns = new string[Params.Length];
+                    DataRowVersion[] SourceVersions = new DataRowVersion[Params.Length];
+                    int[] Sizes = new int[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        if (this.GetDbType().ToUpper() == "ORACLE")
+                            DbTypes[i] = (DbType)(((OracleParameter)Params[i]).OracleType);
+                        else
+                            DbTypes[i] = Params[i].DbType;
+
+                        Directions[i] = Params[i].Direction;
+                        IsNullables[i] = Params[i].IsNullable;
+                        SourceColumns[i] = Params[i].SourceColumn;
+                        SourceVersions[i] = Params[i].SourceVersion;
+                        if (this.GetDbType().ToUpper() == "ORACLE") Sizes[i] = ((OracleParameter)Params[i]).Size;
+                    }
+                    if (this.GetDbType().ToUpper() == "ORACLE")
+                        lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, cmdType, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Sizes, Values, ref OutputValues, out err);
+
+                    else
+                        lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, cmdType, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out err);
+                }
+                else
+                {
+                    lines = _dbProxy.ExecuteNonQuery(_dbName, _priority, Sql, cmdType, null, null, out err);
+                }
+
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+
+        //不通过DBServer时使用
+        public int ExecuteNonQuery_NoDBSever(string Sql, CommandType cmdType, IDataParameter[] Params, Guid guid, out string err)
+        {
+            err = "";
+            int lines = -1;
+
+            try
+            {
+                lines = _dbProxy.ExecuteNonQuery_NoDBSever(_dbName, _priority, guid, Sql, cmdType, Params, out err);
+
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+        public int ExecuteNonQuery_NoDBSever(string Sql, CommandType cmdType, IDataParameter[] Params, out string err)
+        {
+            err = "";
+            int lines = -1;
+
+            try
+            {
+                lines = _dbProxy.ExecuteNonQuery_NoDBSever(_dbName, _priority, Sql, cmdType, Params, out err);
+
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return lines;
+        }
+
+        //更新
+
+        public bool UpdateTable(DataTable dt, string Sql, Guid guid)
+        {
+            bool result = false;
+
+            try
+            {
+                result = _dbProxy.UpdateTable(_dbName, _priority, guid, Sql, CommandType.Text, null, null, dt, out _errMsg);
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return result;
+        }
+        public bool UpdateTable(DataTable dt, string Sql)
+        {
+            bool result = false;
+
+            try
+            {
+                result = _dbProxy.UpdateTable(_dbName, _priority, Sql, CommandType.Text, null, null, dt, out _errMsg);
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return result;
+        }
+
+        public bool UpdateTable(DataTable dt, string Sql, Guid guid, out string err)
+        {
+            err = "";
+
+            bool result = false;
+
+            try
+            {
+                result = _dbProxy.UpdateTable(_dbName, _priority, guid, Sql, CommandType.Text, null, null, dt, out err);
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return result;
+        }
+
+        public bool UpdateTable(DataTable dt, string Sql, out string err)
+        {
+            err = "";
+
+            bool result = false;
+
+            try
+            {
+                result = _dbProxy.UpdateTable(_dbName, _priority, Sql, CommandType.Text, null, null, dt, out err);
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return result;
+        }
+        public bool UpdateTable(DataTable dt, string Sql, IDataParameter[] Params, object[] Values, Guid guid)
+        {
+            bool result = false;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                    }
+
+                    result = _dbProxy.UpdateTable(_dbName, _priority, guid, Sql, CommandType.Text, ParameterNames, DbTypes, Values, dt, out _errMsg);
+                }
+                else
+                {
+                    result = _dbProxy.UpdateTable(_dbName, _priority, guid, Sql, CommandType.Text, null, null, null, dt, out _errMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return result;
+        }
+
+        public bool UpdateTable(DataTable dt, string Sql, IDataParameter[] Params, object[] Values)
+        {
+            bool result = false;
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                    }
+
+                    result = _dbProxy.UpdateTable(_dbName, _priority, Sql, CommandType.Text, ParameterNames, DbTypes, Values, dt, out _errMsg);
+                }
+                else
+                {
+                    result = _dbProxy.UpdateTable(_dbName, _priority, Sql, CommandType.Text, null, null, null, dt, out _errMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return result;
+        }
+
+        public bool UpdateTable(DataTable dt, string Sql, IDataParameter[] Params, object[] Values, Guid guid, out string err)
+        {
+            bool result = false;
+            err = "";
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                    }
+
+                    result = _dbProxy.UpdateTable(_dbName, _priority, guid, Sql, CommandType.Text, ParameterNames, DbTypes, Values, dt, out err);
+                }
+                else
+                {
+                    result = _dbProxy.UpdateTable(_dbName, _priority, guid, Sql, CommandType.Text, null, null, null, dt, out err);
+                }
+
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = err = ex.Message;
+            }
+
+            return result;
+        }
+        public bool UpdateTable(DataTable dt, string Sql, IDataParameter[] Params, object[] Values, out string err)
+        {
+            bool result = false;
+            err = "";
+
+            try
+            {
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    string[] ParameterNames = new string[Params.Length];
+                    DbType[] DbTypes = new DbType[Params.Length];
+
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        ParameterNames[i] = Params[i].ParameterName;
+                        DbTypes[i] = Params[i].DbType;
+                    }
+
+                    result = _dbProxy.UpdateTable(_dbName, _priority, Sql, CommandType.Text, ParameterNames, DbTypes, Values, dt, out err);
+                }
+                else
+                {
+                    result = _dbProxy.UpdateTable(_dbName, _priority, Sql, CommandType.Text, null, null, null, dt, out err);
+                }
+
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = err = ex.Message;
+            }
+
+            return result;
+        }
+
+
+
+        public Guid BeginTransaction(out string err)
+        {
+            return BeginTransaction("", out err);
+        }
+        //开始处理事物,返回结果表示是否成功
+        public Guid BeginTransaction(string methodName, out string err)
+        {
+            err = "";
+            Guid guid = Guid.NewGuid();
+            try
+            {
+                guid = _dbProxy.BeginTransaction(methodName, _dbName, _priority, _dbManagerID, 20.00, out err);
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return guid;
+        }
+
+        public Guid BeginTransaction(double minutes, out string err)
+        {
+            return BeginTransaction("", minutes, out err);
+        }
+        //开始处理事物,指定事务最长执行时间, 返回结果表示是否成功
+        public Guid BeginTransaction(string methodName, double minutes, out string err)
+        {
+            err = "";
+            Guid guid = Guid.NewGuid();
+
+            try
+            {
+                guid = _dbProxy.BeginTransaction(methodName, _dbName, _priority, _dbManagerID, minutes, out err);
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return guid;
+        }
+
+        //提交当前事物,返回结果表示是否成功
+        public bool Commit(Guid guid)
+        {
+            bool bSuccess = false;
+
+            try
+            {
+                bSuccess = _dbProxy.Commit(_dbName, _priority, guid, out _errMsg);
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return bSuccess;
+        }
+
+        //提交当前事物,返回结果表示是否成功
+        public bool Commit(Guid guid, out string err)
+        {
+            err = "";
+            bool bSuccess = false;
+
+            try
+            {
+                bSuccess = _dbProxy.Commit(_dbName, _priority, guid, out err);
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return bSuccess;
+        }
+
+        //回滚当前事务
+        public bool Rollback(Guid guid)
+        {
+            bool bSuccess = false;
+
+            try
+            {
+                bSuccess = _dbProxy.Rollback(_dbName, _priority, guid, out _errMsg);
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                _errMsg = ex.Message;
+            }
+
+            return bSuccess;
+        }
+
+        //回滚当前事务
+        public bool Rollback(Guid guid, out string err)
+        {
+            err = "";
+            bool bSuccess = false;
+
+            try
+            {
+                bSuccess = _dbProxy.Rollback(_dbName, _priority, guid, out err);
+                _errMsg = err;
+            }
+            catch (Exception ex)
+            {
+                _valid = false;
+                err = _errMsg = ex.Message;
+            }
+
+            return bSuccess;
+        }
+
+        ////////////////////////////////////////////////////////////////////////////////////
+        ///私有函数
+        ///////////////////////////////////////////////////////////////////////////////////
+
+        //初始化DBManager
+        private void InitDBManager(string name, string priority)
+        {
+            //保存数据库信息
+            _dbName = name;
+            _priority = priority;
+            _errMsg = "";
+            _valid = true;
+
+            //如果是第一次创建DBManager对象,则需先读取远程处理配置文件		
+            if (_firstCreate)
+            {
+                try
+                {
+                    //读取远程处理配置文件clientConfig.cfg
+                    //RemotingConfiguration.Configure("clientConfig.cfg");
+                    //生成DBProxy对象
+
+                    _dbProxy = new DBProxy();
+                    _dbProxy.SetLogHandler(ShowLog);
+                    _dbProxy.SetLogging(_isLogging);
+                    _firstCreate = false;
+                }
+                catch (Exception ex)
+                {
+                    _errMsg = ex.Message;
+                    _valid = false;
+                    throw ex;
+                }
+            }
+
+            try
+            {
+                //获取由DBProxy为DBManager对象分配的ID
+                _dbManagerID = _dbProxy.GetDBManagerID();
+
+                //设置数据库信息
+                _dbProxy.SetDbInfo(_dbManagerID, _dbName, _priority);
+            }
+            catch (Exception ex)
+            {
+                _errMsg = ex.Message;
+                _valid = false;
+            }
+        }
+
+
+        //////////////////////////////////////////////////////////////////////////////////
+        ///私有数据成员
+        //////////////////////////////////////////////////////////////////////////////////
+
+        public static DBProxy _dbProxy;
+
+        private long _dbManagerID;//DBProxy为DBManager对象分配的ID
+
+        private string _dbName;//数据库名称
+
+        private string _priority;//数据库访问优先级
+
+        private string _errMsg;//最后一个错误信息
+
+        private bool _valid;//DBManager有效标志,每次调用DBProxy函数时设置
+
+        private static bool _firstCreate = true;
+
+        //////////////////////////////////////////////////////////////////////////////////
+        ///公共属性
+        //////////////////////////////////////////////////////////////////////////////////
+
+        //数据库名称
+        public string DBName
+        {
+            get
+            {
+                return _dbName;
+            }
+            set
+            {
+                _dbName = value;
+            }
+        }
+
+        //数据库访问优先级
+        public string Priority
+        {
+            get
+            {
+                return _priority;
+            }
+            set
+            {
+                _priority = value;
+            }
+        }
+
+        public delegate void ShowLogDelegate(string log);
+
+        public event ShowLogDelegate ShowLogEvent;
+
+        private void ShowLog(string log)
+        {
+            if (ShowLogEvent != null)
+            {
+                ShowLogEvent(log);
+            }
+        }
+
+    }
+}

+ 1774 - 0
.svn/pristine/28/2837b27652cfdc1ed916c108cbd61f0b7e8de940.svn-base

@@ -0,0 +1,1774 @@
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using Core.Mes.ClientFrameWork;
+using Core.Mes.IBaseInterface;
+using global::Infragistics.Win.UltraWinGrid;
+using global::Infragistics.Win.UltraWinEditors;
+using System.Data;
+using System.Diagnostics;
+using System.IO;
+using System.Text.RegularExpressions;
+
+namespace Core.Mes.ClientPurviewManager
+{
+
+    /// <summary>
+    /// FrmUserManager 的摘要说明。
+    /// </summary>
+    public class FrmUserManager : Core.Mes.ClientFrameWork.FrmBase
+    {
+        #region "Varible"
+        private System.Windows.Forms.Panel panel1;
+        private Infragistics.Win.UltraWinToolbars.UltraToolbarsManager ultraToolbarsManager1;
+        private System.Windows.Forms.Panel FrmUserManager_Fill_Panel;
+        private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Left;
+        private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Right;
+        private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Top;
+        private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Bottom;
+        private System.Windows.Forms.Panel panel2;
+        private Infragistics.Win.UltraWinGrid.UltraGrid ultraGrid1;
+        private Infragistics.Win.Misc.UltraExpandableGroupBox ultraExpandableGroupBox1;
+        private Infragistics.Win.Misc.UltraExpandableGroupBoxPanel ultraExpandableGroupBoxPanel1;
+        private System.Windows.Forms.Panel panel3;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel2;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel3;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel4;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel5;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel6;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel7;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel8;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel9;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel10;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel11;
+        private Infragistics.Win.UltraWinEditors.UltraComboEditor ulcmeSex;
+        private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtUserNo;
+        private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtUserName;
+        private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtAge;
+        private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtGW;
+        private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtZW;
+        private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtPhono;
+        private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtMemo;
+        private Infragistics.Win.Misc.UltraButton ultraButton1;
+        private System.ComponentModel.IContainer components;
+        private DataSet _departmentData;
+        public TreeView _departmentTree;
+        private string _selectPartSQL;
+        public string StrUser = "";
+        public string operDepart = "";
+        public string operDepartname = "";
+        public string allDept = "";
+        public string selDept = "";
+
+        private DataSet _userData;
+        private Infragistics.Win.UltraWinEditors.UltraComboEditor ulcmeDepartment;
+        private System.Windows.Forms.ToolTip toolTip1;
+        private Infragistics.Win.UltraWinEditors.UltraCheckEditor ultraCheckEditor1;
+        private Infragistics.Win.UltraWinEditors.UltraTextEditor ultraTextEditor8;
+        private Infragistics.Win.UltraWinGrid.ExcelExport.UltraGridExcelExporter ultraGridExcelExporter1;
+        private UltraTextEditor ultxtEmail;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel1;
+        private UltraTextEditor ultLoginID;
+        private Infragistics.Win.Misc.UltraLabel ultraLabel12;
+        private FlowLayoutPanel flowLayoutPanel1;
+        private string _selectUserSQL;
+        #endregion
+
+        #region "头部"
+        public FrmUserManager()
+        {
+            //
+            // Windows 窗体设计器支持所必需的
+            //
+            InitializeComponent();
+
+            //
+            // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
+            //
+        }
+
+        /// <summary>
+        /// 清理所有正在使用的资源。
+        /// </summary>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing)
+            {
+                if (components != null)
+                {
+                    components.Dispose();
+                }
+            }
+            base.Dispose(disposing);
+        }
+        #endregion
+
+        #region Windows 窗体设计器生成的代码
+        /// <summary>
+        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
+        /// 此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            Infragistics.Win.UltraWinToolbars.UltraToolbar ultraToolbar1 = new Infragistics.Win.UltraWinToolbars.UltraToolbar("Toolbar1");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool1 = new Infragistics.Win.UltraWinToolbars.ButtonTool("query");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool2 = new Infragistics.Win.UltraWinToolbars.ButtonTool("add");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool3 = new Infragistics.Win.UltraWinToolbars.ButtonTool("edit");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool4 = new Infragistics.Win.UltraWinToolbars.ButtonTool("del");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool5 = new Infragistics.Win.UltraWinToolbars.ButtonTool("exit");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool6 = new Infragistics.Win.UltraWinToolbars.ButtonTool("back");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool7 = new Infragistics.Win.UltraWinToolbars.ButtonTool("leadin");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool8 = new Infragistics.Win.UltraWinToolbars.ButtonTool("add");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool9 = new Infragistics.Win.UltraWinToolbars.ButtonTool("edit");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool10 = new Infragistics.Win.UltraWinToolbars.ButtonTool("del");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool11 = new Infragistics.Win.UltraWinToolbars.ButtonTool("query");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool12 = new Infragistics.Win.UltraWinToolbars.ButtonTool("exit");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool13 = new Infragistics.Win.UltraWinToolbars.ButtonTool("back");
+            Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool14 = new Infragistics.Win.UltraWinToolbars.ButtonTool("leadin");
+            Infragistics.Win.UltraWinGrid.UltraGridBand ultraGridBand1 = new Infragistics.Win.UltraWinGrid.UltraGridBand("Band 0", -1);
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn1 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("USERID");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn2 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("DEPARTMENTID", -1, null, 1, Infragistics.Win.UltraWinGrid.SortIndicator.Ascending, false);
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn3 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("NAME");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn4 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("SEX");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn5 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("AGE");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn6 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("COMPUTERIP");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn7 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("HOMEPHONE");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn8 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("WORKPOS");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn9 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("WORKJOB");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn10 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("MEMO");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn11 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("EMAIL");
+            Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn12 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("PD", -1, null, 0, Infragistics.Win.UltraWinGrid.SortIndicator.Ascending, false);
+            Infragistics.Win.Appearance appearance1 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance2 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance3 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance4 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance5 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance6 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance7 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance8 = new Infragistics.Win.Appearance();
+            Infragistics.Win.ValueListItem valueListItem1 = new Infragistics.Win.ValueListItem();
+            Infragistics.Win.ValueListItem valueListItem2 = new Infragistics.Win.ValueListItem();
+            Infragistics.Win.ValueListItem valueListItem3 = new Infragistics.Win.ValueListItem();
+            Infragistics.Win.ValueListItem valueListItem4 = new Infragistics.Win.ValueListItem();
+            Infragistics.Win.Appearance appearance9 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance10 = new Infragistics.Win.Appearance();
+            this.panel1 = new System.Windows.Forms.Panel();
+            this._panel1_Toolbars_Dock_Area_Left = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this.ultraToolbarsManager1 = new Infragistics.Win.UltraWinToolbars.UltraToolbarsManager(this.components);
+            this._panel1_Toolbars_Dock_Area_Right = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this._panel1_Toolbars_Dock_Area_Top = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this._panel1_Toolbars_Dock_Area_Bottom = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this.FrmUserManager_Fill_Panel = new System.Windows.Forms.Panel();
+            this.ultraGrid1 = new Infragistics.Win.UltraWinGrid.UltraGrid();
+            this.ultraExpandableGroupBox1 = new Infragistics.Win.Misc.UltraExpandableGroupBox();
+            this.ultraExpandableGroupBoxPanel1 = new Infragistics.Win.Misc.UltraExpandableGroupBoxPanel();
+            this.panel3 = new System.Windows.Forms.Panel();
+            this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
+            this.ultxtEmail = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultraLabel1 = new Infragistics.Win.Misc.UltraLabel();
+            this.ulcmeDepartment = new Infragistics.Win.UltraWinEditors.UltraComboEditor();
+            this.ultxtMemo = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultxtPhono = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultxtZW = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultxtGW = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultxtAge = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultxtUserName = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultxtUserNo = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ulcmeSex = new Infragistics.Win.UltraWinEditors.UltraComboEditor();
+            this.ultraLabel11 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel10 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel9 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel8 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel7 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel6 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel5 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel4 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel3 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraLabel2 = new Infragistics.Win.Misc.UltraLabel();
+            this.panel2 = new System.Windows.Forms.Panel();
+            this.ultLoginID = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultraLabel12 = new Infragistics.Win.Misc.UltraLabel();
+            this.ultraTextEditor8 = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+            this.ultraCheckEditor1 = new Infragistics.Win.UltraWinEditors.UltraCheckEditor();
+            this.ultraButton1 = new Infragistics.Win.Misc.UltraButton();
+            this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+            this.ultraGridExcelExporter1 = new Infragistics.Win.UltraWinGrid.ExcelExport.UltraGridExcelExporter();
+            this.panel1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraToolbarsManager1)).BeginInit();
+            this.FrmUserManager_Fill_Panel.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraGrid1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraExpandableGroupBox1)).BeginInit();
+            this.ultraExpandableGroupBox1.SuspendLayout();
+            this.ultraExpandableGroupBoxPanel1.SuspendLayout();
+            this.panel3.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtEmail)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ulcmeDepartment)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtMemo)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtPhono)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtZW)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtGW)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtAge)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtUserName)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtUserNo)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ulcmeSex)).BeginInit();
+            this.panel2.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.ultLoginID)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor8)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // panel1
+            // 
+            this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Left);
+            this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Right);
+            this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Top);
+            this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Bottom);
+            this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.panel1.Location = new System.Drawing.Point(0, 0);
+            this.panel1.Name = "panel1";
+            this.panel1.Size = new System.Drawing.Size(1012, 32);
+            this.panel1.TabIndex = 0;
+            // 
+            // _panel1_Toolbars_Dock_Area_Left
+            // 
+            this._panel1_Toolbars_Dock_Area_Left.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._panel1_Toolbars_Dock_Area_Left.BackColor = System.Drawing.SystemColors.Control;
+            this._panel1_Toolbars_Dock_Area_Left.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Left;
+            this._panel1_Toolbars_Dock_Area_Left.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._panel1_Toolbars_Dock_Area_Left.Location = new System.Drawing.Point(0, 27);
+            this._panel1_Toolbars_Dock_Area_Left.Name = "_panel1_Toolbars_Dock_Area_Left";
+            this._panel1_Toolbars_Dock_Area_Left.Size = new System.Drawing.Size(0, 5);
+            this._panel1_Toolbars_Dock_Area_Left.ToolbarsManager = this.ultraToolbarsManager1;
+            // 
+            // ultraToolbarsManager1
+            // 
+            this.ultraToolbarsManager1.DesignerFlags = 1;
+            this.ultraToolbarsManager1.DockWithinContainer = this.panel1;
+            this.ultraToolbarsManager1.ShowQuickCustomizeButton = false;
+            this.ultraToolbarsManager1.Style = Infragistics.Win.UltraWinToolbars.ToolbarStyle.VisualStudio2005;
+            ultraToolbar1.DockedColumn = 0;
+            ultraToolbar1.DockedRow = 0;
+            ultraToolbar1.Text = "Toolbar1";
+            buttonTool1.InstanceProps.IsFirstInGroup = true;
+            buttonTool2.InstanceProps.IsFirstInGroup = true;
+            buttonTool3.InstanceProps.IsFirstInGroup = true;
+            buttonTool4.InstanceProps.IsFirstInGroup = true;
+            buttonTool5.InstanceProps.IsFirstInGroup = true;
+            buttonTool6.InstanceProps.IsFirstInGroup = true;
+            buttonTool7.InstanceProps.IsFirstInGroup = true;
+            ultraToolbar1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] {
+            buttonTool1,
+            buttonTool2,
+            buttonTool3,
+            buttonTool4,
+            buttonTool5,
+            buttonTool6,
+            buttonTool7});
+            this.ultraToolbarsManager1.Toolbars.AddRange(new Infragistics.Win.UltraWinToolbars.UltraToolbar[] {
+            ultraToolbar1});
+            buttonTool8.SharedProps.Caption = "新增(&A)";
+            buttonTool8.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            buttonTool8.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlA;
+            buttonTool9.SharedProps.Caption = "修改(&U)";
+            buttonTool9.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            buttonTool9.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlU;
+            buttonTool10.SharedProps.Caption = "删除(&D)";
+            buttonTool10.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            buttonTool10.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlD;
+            buttonTool11.SharedProps.Caption = "查询(&Q)";
+            buttonTool11.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            buttonTool11.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlQ;
+            buttonTool12.SharedProps.Caption = "关闭(&E)";
+            buttonTool12.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            buttonTool12.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlE;
+            buttonTool13.SharedProps.Caption = "返回(&B)";
+            buttonTool13.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            buttonTool13.SharedProps.Visible = false;
+            buttonTool14.SharedProps.Caption = "导入EXCEL";
+            buttonTool14.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+            this.ultraToolbarsManager1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] {
+            buttonTool8,
+            buttonTool9,
+            buttonTool10,
+            buttonTool11,
+            buttonTool12,
+            buttonTool13,
+            buttonTool14});
+            this.ultraToolbarsManager1.ToolClick += new Infragistics.Win.UltraWinToolbars.ToolClickEventHandler(this.ultraToolbarsManager1_ToolClick);
+            // 
+            // _panel1_Toolbars_Dock_Area_Right
+            // 
+            this._panel1_Toolbars_Dock_Area_Right.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._panel1_Toolbars_Dock_Area_Right.BackColor = System.Drawing.SystemColors.Control;
+            this._panel1_Toolbars_Dock_Area_Right.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Right;
+            this._panel1_Toolbars_Dock_Area_Right.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._panel1_Toolbars_Dock_Area_Right.Location = new System.Drawing.Point(1012, 27);
+            this._panel1_Toolbars_Dock_Area_Right.Name = "_panel1_Toolbars_Dock_Area_Right";
+            this._panel1_Toolbars_Dock_Area_Right.Size = new System.Drawing.Size(0, 5);
+            this._panel1_Toolbars_Dock_Area_Right.ToolbarsManager = this.ultraToolbarsManager1;
+            // 
+            // _panel1_Toolbars_Dock_Area_Top
+            // 
+            this._panel1_Toolbars_Dock_Area_Top.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._panel1_Toolbars_Dock_Area_Top.BackColor = System.Drawing.SystemColors.Control;
+            this._panel1_Toolbars_Dock_Area_Top.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Top;
+            this._panel1_Toolbars_Dock_Area_Top.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._panel1_Toolbars_Dock_Area_Top.Location = new System.Drawing.Point(0, 0);
+            this._panel1_Toolbars_Dock_Area_Top.Name = "_panel1_Toolbars_Dock_Area_Top";
+            this._panel1_Toolbars_Dock_Area_Top.Size = new System.Drawing.Size(1012, 27);
+            this._panel1_Toolbars_Dock_Area_Top.ToolbarsManager = this.ultraToolbarsManager1;
+            // 
+            // _panel1_Toolbars_Dock_Area_Bottom
+            // 
+            this._panel1_Toolbars_Dock_Area_Bottom.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._panel1_Toolbars_Dock_Area_Bottom.BackColor = System.Drawing.SystemColors.Control;
+            this._panel1_Toolbars_Dock_Area_Bottom.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Bottom;
+            this._panel1_Toolbars_Dock_Area_Bottom.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._panel1_Toolbars_Dock_Area_Bottom.Location = new System.Drawing.Point(0, 32);
+            this._panel1_Toolbars_Dock_Area_Bottom.Name = "_panel1_Toolbars_Dock_Area_Bottom";
+            this._panel1_Toolbars_Dock_Area_Bottom.Size = new System.Drawing.Size(1012, 0);
+            this._panel1_Toolbars_Dock_Area_Bottom.ToolbarsManager = this.ultraToolbarsManager1;
+            // 
+            // FrmUserManager_Fill_Panel
+            // 
+            this.FrmUserManager_Fill_Panel.Controls.Add(this.ultraGrid1);
+            this.FrmUserManager_Fill_Panel.Controls.Add(this.ultraExpandableGroupBox1);
+            this.FrmUserManager_Fill_Panel.Controls.Add(this.panel2);
+            this.FrmUserManager_Fill_Panel.Controls.Add(this.panel1);
+            this.FrmUserManager_Fill_Panel.Cursor = System.Windows.Forms.Cursors.Default;
+            this.FrmUserManager_Fill_Panel.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.FrmUserManager_Fill_Panel.Location = new System.Drawing.Point(0, 0);
+            this.FrmUserManager_Fill_Panel.Name = "FrmUserManager_Fill_Panel";
+            this.FrmUserManager_Fill_Panel.Size = new System.Drawing.Size(1012, 733);
+            this.FrmUserManager_Fill_Panel.TabIndex = 0;
+            // 
+            // ultraGrid1
+            // 
+            this.ultraGrid1.Cursor = System.Windows.Forms.Cursors.Hand;
+            ultraGridColumn1.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn1.Header.Caption = "员工编号";
+            ultraGridColumn1.Header.VisiblePosition = 0;
+            ultraGridColumn1.Width = 80;
+            ultraGridColumn2.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn2.Header.Caption = "部门";
+            ultraGridColumn2.Header.VisiblePosition = 2;
+            ultraGridColumn2.Width = 100;
+            ultraGridColumn3.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn3.Header.Caption = "姓名";
+            ultraGridColumn3.Header.VisiblePosition = 5;
+            ultraGridColumn3.Width = 80;
+            ultraGridColumn4.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn4.Header.Caption = "性别";
+            ultraGridColumn4.Header.VisiblePosition = 6;
+            ultraGridColumn4.Width = 60;
+            ultraGridColumn5.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn5.Header.Caption = "年龄";
+            ultraGridColumn5.Header.VisiblePosition = 7;
+            ultraGridColumn5.Hidden = true;
+            ultraGridColumn6.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn6.Header.Caption = "机器地址";
+            ultraGridColumn6.Header.VisiblePosition = 8;
+            ultraGridColumn6.Width = 80;
+            ultraGridColumn7.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn7.Header.Caption = "联系电话";
+            ultraGridColumn7.Header.VisiblePosition = 9;
+            ultraGridColumn7.Width = 100;
+            ultraGridColumn8.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn8.Header.Caption = "岗位";
+            ultraGridColumn8.Header.VisiblePosition = 3;
+            ultraGridColumn8.Width = 100;
+            ultraGridColumn9.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn9.Header.Caption = "职务";
+            ultraGridColumn9.Header.VisiblePosition = 4;
+            ultraGridColumn9.Width = 100;
+            ultraGridColumn10.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn10.Header.Caption = "备注";
+            ultraGridColumn10.Header.VisiblePosition = 11;
+            ultraGridColumn10.Width = 100;
+            ultraGridColumn11.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn11.Header.Caption = "邮件地址";
+            ultraGridColumn11.Header.VisiblePosition = 10;
+            ultraGridColumn11.Width = 100;
+            ultraGridColumn12.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+            ultraGridColumn12.Header.Caption = "上级部门";
+            ultraGridColumn12.Header.VisiblePosition = 1;
+            ultraGridColumn12.Width = 100;
+            ultraGridBand1.Columns.AddRange(new object[] {
+            ultraGridColumn1,
+            ultraGridColumn2,
+            ultraGridColumn3,
+            ultraGridColumn4,
+            ultraGridColumn5,
+            ultraGridColumn6,
+            ultraGridColumn7,
+            ultraGridColumn8,
+            ultraGridColumn9,
+            ultraGridColumn10,
+            ultraGridColumn11,
+            ultraGridColumn12});
+            ultraGridBand1.Override.RowSelectorHeaderStyle = Infragistics.Win.UltraWinGrid.RowSelectorHeaderStyle.SeparateElement;
+            ultraGridBand1.Override.RowSelectorNumberStyle = Infragistics.Win.UltraWinGrid.RowSelectorNumberStyle.RowIndex;
+            ultraGridBand1.Override.RowSelectors = Infragistics.Win.DefaultableBoolean.True;
+            this.ultraGrid1.DisplayLayout.BandsSerializer.Add(ultraGridBand1);
+            this.ultraGrid1.DisplayLayout.BorderStyle = Infragistics.Win.UIElementBorderStyle.RaisedSoft;
+            this.ultraGrid1.DisplayLayout.CaptionVisible = Infragistics.Win.DefaultableBoolean.False;
+            this.ultraGrid1.DisplayLayout.GroupByBox.BorderStyle = Infragistics.Win.UIElementBorderStyle.Solid;
+            this.ultraGrid1.DisplayLayout.GroupByBox.Hidden = true;
+            this.ultraGrid1.DisplayLayout.MaxColScrollRegions = 1;
+            this.ultraGrid1.DisplayLayout.MaxRowScrollRegions = 1;
+            this.ultraGrid1.DisplayLayout.Override.BorderStyleCell = Infragistics.Win.UIElementBorderStyle.RaisedSoft;
+            this.ultraGrid1.DisplayLayout.Override.BorderStyleRow = Infragistics.Win.UIElementBorderStyle.Dotted;
+            this.ultraGrid1.DisplayLayout.Override.CellClickAction = Infragistics.Win.UltraWinGrid.CellClickAction.EditAndSelectText;
+            this.ultraGrid1.DisplayLayout.Override.CellPadding = 0;
+            this.ultraGrid1.DisplayLayout.Override.HeaderClickAction = Infragistics.Win.UltraWinGrid.HeaderClickAction.SortMulti;
+            this.ultraGrid1.DisplayLayout.Override.HeaderStyle = Infragistics.Win.HeaderStyle.Standard;
+            this.ultraGrid1.DisplayLayout.Override.MinRowHeight = 21;
+            this.ultraGrid1.DisplayLayout.Override.RowSelectorHeaderStyle = Infragistics.Win.UltraWinGrid.RowSelectorHeaderStyle.SeparateElement;
+            this.ultraGrid1.DisplayLayout.Override.RowSelectorNumberStyle = Infragistics.Win.UltraWinGrid.RowSelectorNumberStyle.RowIndex;
+            this.ultraGrid1.DisplayLayout.Override.RowSelectors = Infragistics.Win.DefaultableBoolean.True;
+            this.ultraGrid1.DisplayLayout.ScrollBounds = Infragistics.Win.UltraWinGrid.ScrollBounds.ScrollToFill;
+            this.ultraGrid1.DisplayLayout.ScrollStyle = Infragistics.Win.UltraWinGrid.ScrollStyle.Immediate;
+            this.ultraGrid1.DisplayLayout.ViewStyleBand = Infragistics.Win.UltraWinGrid.ViewStyleBand.OutlookGroupBy;
+            this.ultraGrid1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.ultraGrid1.Location = new System.Drawing.Point(0, 88);
+            this.ultraGrid1.Name = "ultraGrid1";
+            this.ultraGrid1.Size = new System.Drawing.Size(1012, 477);
+            this.ultraGrid1.TabIndex = 2;
+            this.ultraGrid1.Text = "ultraGrid1";
+            // 
+            // ultraExpandableGroupBox1
+            // 
+            this.ultraExpandableGroupBox1.Controls.Add(this.ultraExpandableGroupBoxPanel1);
+            this.ultraExpandableGroupBox1.Dock = System.Windows.Forms.DockStyle.Bottom;
+            this.ultraExpandableGroupBox1.ExpandedSize = new System.Drawing.Size(1012, 168);
+            this.ultraExpandableGroupBox1.Location = new System.Drawing.Point(0, 565);
+            this.ultraExpandableGroupBox1.Name = "ultraExpandableGroupBox1";
+            this.ultraExpandableGroupBox1.Size = new System.Drawing.Size(1012, 168);
+            this.ultraExpandableGroupBox1.SupportThemes = false;
+            this.ultraExpandableGroupBox1.TabIndex = 3;
+            this.ultraExpandableGroupBox1.Text = "编辑区域";
+            this.ultraExpandableGroupBox1.ViewStyle = Infragistics.Win.Misc.GroupBoxViewStyle.Office2003;
+            // 
+            // ultraExpandableGroupBoxPanel1
+            // 
+            this.ultraExpandableGroupBoxPanel1.Controls.Add(this.panel3);
+            this.ultraExpandableGroupBoxPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.ultraExpandableGroupBoxPanel1.Location = new System.Drawing.Point(2, 22);
+            this.ultraExpandableGroupBoxPanel1.Name = "ultraExpandableGroupBoxPanel1";
+            this.ultraExpandableGroupBoxPanel1.Size = new System.Drawing.Size(1008, 144);
+            this.ultraExpandableGroupBoxPanel1.TabIndex = 0;
+            // 
+            // panel3
+            // 
+            this.panel3.BackColor = System.Drawing.Color.Gainsboro;
+            this.panel3.Controls.Add(this.flowLayoutPanel1);
+            this.panel3.Controls.Add(this.ultxtEmail);
+            this.panel3.Controls.Add(this.ultraLabel1);
+            this.panel3.Controls.Add(this.ulcmeDepartment);
+            this.panel3.Controls.Add(this.ultxtMemo);
+            this.panel3.Controls.Add(this.ultxtPhono);
+            this.panel3.Controls.Add(this.ultxtZW);
+            this.panel3.Controls.Add(this.ultxtGW);
+            this.panel3.Controls.Add(this.ultxtAge);
+            this.panel3.Controls.Add(this.ultxtUserName);
+            this.panel3.Controls.Add(this.ultxtUserNo);
+            this.panel3.Controls.Add(this.ulcmeSex);
+            this.panel3.Controls.Add(this.ultraLabel11);
+            this.panel3.Controls.Add(this.ultraLabel10);
+            this.panel3.Controls.Add(this.ultraLabel9);
+            this.panel3.Controls.Add(this.ultraLabel8);
+            this.panel3.Controls.Add(this.ultraLabel7);
+            this.panel3.Controls.Add(this.ultraLabel6);
+            this.panel3.Controls.Add(this.ultraLabel5);
+            this.panel3.Controls.Add(this.ultraLabel4);
+            this.panel3.Controls.Add(this.ultraLabel3);
+            this.panel3.Controls.Add(this.ultraLabel2);
+            this.panel3.Dock = System.Windows.Forms.DockStyle.Bottom;
+            this.panel3.Location = new System.Drawing.Point(0, -8);
+            this.panel3.Name = "panel3";
+            this.panel3.Size = new System.Drawing.Size(1008, 152);
+            this.panel3.TabIndex = 0;
+            // 
+            // flowLayoutPanel1
+            // 
+            this.flowLayoutPanel1.AutoScroll = true;
+            this.flowLayoutPanel1.Location = new System.Drawing.Point(806, 19);
+            this.flowLayoutPanel1.Name = "flowLayoutPanel1";
+            this.flowLayoutPanel1.Size = new System.Drawing.Size(171, 123);
+            this.flowLayoutPanel1.TabIndex = 24;
+            // 
+            // ultxtEmail
+            // 
+            appearance1.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtEmail.Appearance = appearance1;
+            this.ultxtEmail.AutoSize = true;
+            this.ultxtEmail.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtEmail.Location = new System.Drawing.Point(560, 85);
+            this.ultxtEmail.Name = "ultxtEmail";
+            this.ultxtEmail.Size = new System.Drawing.Size(160, 21);
+            this.ultxtEmail.TabIndex = 23;
+            // 
+            // ultraLabel1
+            // 
+            this.ultraLabel1.Location = new System.Drawing.Point(503, 86);
+            this.ultraLabel1.Name = "ultraLabel1";
+            this.ultraLabel1.Size = new System.Drawing.Size(54, 16);
+            this.ultraLabel1.TabIndex = 22;
+            this.ultraLabel1.Text = "邮件地址";
+            // 
+            // ulcmeDepartment
+            // 
+            this.ulcmeDepartment.AutoSize = true;
+            this.ulcmeDepartment.DropDownButtonDisplayStyle = Infragistics.Win.ButtonDisplayStyle.Never;
+            this.ulcmeDepartment.DropDownStyle = Infragistics.Win.DropDownStyle.DropDownList;
+            this.ulcmeDepartment.Location = new System.Drawing.Point(560, 17);
+            this.ulcmeDepartment.Name = "ulcmeDepartment";
+            this.ulcmeDepartment.Size = new System.Drawing.Size(160, 21);
+            this.ulcmeDepartment.TabIndex = 21;
+            this.ulcmeDepartment.SelectionChanged += new System.EventHandler(this.ultraComboEditor2_SelectionChanged);
+            this.ulcmeDepartment.EditorButtonClick += new Infragistics.Win.UltraWinEditors.EditorButtonEventHandler(this.ultraComboEditor2_EditorButtonClick);
+            // 
+            // ultxtMemo
+            // 
+            appearance2.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtMemo.Appearance = appearance2;
+            this.ultxtMemo.AutoSize = true;
+            this.ultxtMemo.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtMemo.Location = new System.Drawing.Point(81, 119);
+            this.ultxtMemo.Name = "ultxtMemo";
+            this.ultxtMemo.Size = new System.Drawing.Size(640, 21);
+            this.ultxtMemo.TabIndex = 19;
+            // 
+            // ultxtPhono
+            // 
+            appearance3.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtPhono.Appearance = appearance3;
+            this.ultxtPhono.AutoSize = true;
+            this.ultxtPhono.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtPhono.Location = new System.Drawing.Point(560, 51);
+            this.ultxtPhono.Name = "ultxtPhono";
+            this.ultxtPhono.Size = new System.Drawing.Size(160, 21);
+            this.ultxtPhono.TabIndex = 18;
+            // 
+            // ultxtZW
+            // 
+            appearance4.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtZW.Appearance = appearance4;
+            this.ultxtZW.AutoSize = true;
+            this.ultxtZW.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtZW.Location = new System.Drawing.Point(313, 51);
+            this.ultxtZW.Name = "ultxtZW";
+            this.ultxtZW.Size = new System.Drawing.Size(136, 21);
+            this.ultxtZW.TabIndex = 17;
+            // 
+            // ultxtGW
+            // 
+            appearance5.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtGW.Appearance = appearance5;
+            this.ultxtGW.AutoSize = true;
+            this.ultxtGW.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtGW.Location = new System.Drawing.Point(81, 51);
+            this.ultxtGW.Name = "ultxtGW";
+            this.ultxtGW.Size = new System.Drawing.Size(136, 21);
+            this.ultxtGW.TabIndex = 16;
+            // 
+            // ultxtAge
+            // 
+            appearance6.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtAge.Appearance = appearance6;
+            this.ultxtAge.AutoSize = true;
+            this.ultxtAge.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtAge.Location = new System.Drawing.Point(313, 81);
+            this.ultxtAge.Name = "ultxtAge";
+            this.ultxtAge.Size = new System.Drawing.Size(136, 21);
+            this.ultxtAge.TabIndex = 15;
+            this.ultxtAge.Visible = false;
+            // 
+            // ultxtUserName
+            // 
+            appearance7.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtUserName.Appearance = appearance7;
+            this.ultxtUserName.AutoSize = true;
+            this.ultxtUserName.BackColor = System.Drawing.Color.LightCyan;
+            this.ultxtUserName.Location = new System.Drawing.Point(313, 17);
+            this.ultxtUserName.Name = "ultxtUserName";
+            this.ultxtUserName.Size = new System.Drawing.Size(136, 21);
+            this.ultxtUserName.TabIndex = 14;
+            // 
+            // ultxtUserNo
+            // 
+            appearance8.BackColor = System.Drawing.Color.LavenderBlush;
+            this.ultxtUserNo.Appearance = appearance8;
+            this.ultxtUserNo.AutoSize = true;
+            this.ultxtUserNo.BackColor = System.Drawing.Color.LavenderBlush;
+            this.ultxtUserNo.Location = new System.Drawing.Point(81, 17);
+            this.ultxtUserNo.Name = "ultxtUserNo";
+            this.ultxtUserNo.Size = new System.Drawing.Size(136, 21);
+            this.ultxtUserNo.TabIndex = 13;
+            // 
+            // ulcmeSex
+            // 
+            this.ulcmeSex.AutoSize = true;
+            this.ulcmeSex.DropDownStyle = Infragistics.Win.DropDownStyle.DropDownList;
+            valueListItem2.DataValue = "男";
+            valueListItem2.DisplayText = "男";
+            valueListItem1.DataValue = valueListItem2;
+            valueListItem1.DisplayText = "男";
+            valueListItem4.DataValue = "女";
+            valueListItem4.DisplayText = "女";
+            valueListItem3.DataValue = valueListItem4;
+            valueListItem3.DisplayText = "女";
+            this.ulcmeSex.Items.Add(valueListItem1);
+            this.ulcmeSex.Items.Add(valueListItem3);
+            this.ulcmeSex.Location = new System.Drawing.Point(81, 85);
+            this.ulcmeSex.Name = "ulcmeSex";
+            this.ulcmeSex.Size = new System.Drawing.Size(136, 21);
+            this.ulcmeSex.TabIndex = 11;
+            // 
+            // ultraLabel11
+            // 
+            this.ultraLabel11.Location = new System.Drawing.Point(36, 120);
+            this.ultraLabel11.Name = "ultraLabel11";
+            this.ultraLabel11.Size = new System.Drawing.Size(42, 16);
+            this.ultraLabel11.TabIndex = 9;
+            this.ultraLabel11.Text = "备  注";
+            // 
+            // ultraLabel10
+            // 
+            this.ultraLabel10.Location = new System.Drawing.Point(503, 52);
+            this.ultraLabel10.Name = "ultraLabel10";
+            this.ultraLabel10.Size = new System.Drawing.Size(54, 16);
+            this.ultraLabel10.TabIndex = 8;
+            this.ultraLabel10.Text = "联系电话";
+            // 
+            // ultraLabel9
+            // 
+            this.ultraLabel9.Location = new System.Drawing.Point(734, 19);
+            this.ultraLabel9.Name = "ultraLabel9";
+            this.ultraLabel9.Size = new System.Drawing.Size(66, 16);
+            this.ultraLabel9.TabIndex = 7;
+            this.ultraLabel9.Text = "机器IP地址";
+            this.toolTip1.SetToolTip(this.ultraLabel9, "鼠标左击增加IP框;右击减少");
+            this.ultraLabel9.MouseClick += new System.Windows.Forms.MouseEventHandler(this.ultraLabel9_MouseClick);
+            // 
+            // ultraLabel8
+            // 
+            this.ultraLabel8.Location = new System.Drawing.Point(528, 18);
+            this.ultraLabel8.Name = "ultraLabel8";
+            this.ultraLabel8.Size = new System.Drawing.Size(29, 16);
+            this.ultraLabel8.TabIndex = 6;
+            this.ultraLabel8.Text = "部门";
+            // 
+            // ultraLabel7
+            // 
+            this.ultraLabel7.Location = new System.Drawing.Point(281, 52);
+            this.ultraLabel7.Name = "ultraLabel7";
+            this.ultraLabel7.Size = new System.Drawing.Size(29, 16);
+            this.ultraLabel7.TabIndex = 5;
+            this.ultraLabel7.Text = "职务";
+            // 
+            // ultraLabel6
+            // 
+            this.ultraLabel6.Location = new System.Drawing.Point(280, 84);
+            this.ultraLabel6.Name = "ultraLabel6";
+            this.ultraLabel6.Size = new System.Drawing.Size(32, 16);
+            this.ultraLabel6.TabIndex = 4;
+            this.ultraLabel6.Text = "年龄";
+            this.ultraLabel6.Visible = false;
+            // 
+            // ultraLabel5
+            // 
+            this.ultraLabel5.Location = new System.Drawing.Point(281, 18);
+            this.ultraLabel5.Name = "ultraLabel5";
+            this.ultraLabel5.Size = new System.Drawing.Size(29, 16);
+            this.ultraLabel5.TabIndex = 3;
+            this.ultraLabel5.Text = "姓名";
+            // 
+            // ultraLabel4
+            // 
+            this.ultraLabel4.Location = new System.Drawing.Point(49, 52);
+            this.ultraLabel4.Name = "ultraLabel4";
+            this.ultraLabel4.Size = new System.Drawing.Size(29, 16);
+            this.ultraLabel4.TabIndex = 2;
+            this.ultraLabel4.Text = "岗位";
+            // 
+            // ultraLabel3
+            // 
+            this.ultraLabel3.Location = new System.Drawing.Point(49, 86);
+            this.ultraLabel3.Name = "ultraLabel3";
+            this.ultraLabel3.Size = new System.Drawing.Size(29, 16);
+            this.ultraLabel3.TabIndex = 1;
+            this.ultraLabel3.Text = "性别";
+            // 
+            // ultraLabel2
+            // 
+            this.ultraLabel2.Location = new System.Drawing.Point(24, 18);
+            this.ultraLabel2.Name = "ultraLabel2";
+            this.ultraLabel2.Size = new System.Drawing.Size(54, 16);
+            this.ultraLabel2.TabIndex = 0;
+            this.ultraLabel2.Text = "员工编号";
+            // 
+            // panel2
+            // 
+            this.panel2.BackColor = System.Drawing.Color.Gainsboro;
+            this.panel2.Controls.Add(this.ultLoginID);
+            this.panel2.Controls.Add(this.ultraLabel12);
+            this.panel2.Controls.Add(this.ultraTextEditor8);
+            this.panel2.Controls.Add(this.ultraCheckEditor1);
+            this.panel2.Controls.Add(this.ultraButton1);
+            this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
+            this.panel2.Location = new System.Drawing.Point(0, 32);
+            this.panel2.Name = "panel2";
+            this.panel2.Size = new System.Drawing.Size(1012, 56);
+            this.panel2.TabIndex = 1;
+            // 
+            // ultLoginID
+            // 
+            appearance9.BackColor = System.Drawing.Color.LightCyan;
+            this.ultLoginID.Appearance = appearance9;
+            this.ultLoginID.AutoSize = true;
+            this.ultLoginID.BackColor = System.Drawing.Color.LightCyan;
+            this.ultLoginID.FlatMode = true;
+            this.ultLoginID.Location = new System.Drawing.Point(371, 18);
+            this.ultLoginID.Name = "ultLoginID";
+            this.ultLoginID.Size = new System.Drawing.Size(152, 19);
+            this.ultLoginID.TabIndex = 3;
+            this.ultLoginID.Visible = false;
+            this.ultLoginID.EditorButtonClick += new Infragistics.Win.UltraWinEditors.EditorButtonEventHandler(this.ultLoginID_EditorButtonClick);
+            // 
+            // ultraLabel12
+            // 
+            this.ultraLabel12.Location = new System.Drawing.Point(313, 22);
+            this.ultraLabel12.Name = "ultraLabel12";
+            this.ultraLabel12.Size = new System.Drawing.Size(54, 16);
+            this.ultraLabel12.TabIndex = 0;
+            this.ultraLabel12.Text = "员工编号";
+            this.ultraLabel12.Visible = false;
+            // 
+            // ultraTextEditor8
+            // 
+            appearance10.BackColor = System.Drawing.Color.Gainsboro;
+            this.ultraTextEditor8.Appearance = appearance10;
+            this.ultraTextEditor8.AutoSize = true;
+            this.ultraTextEditor8.BackColor = System.Drawing.Color.Gainsboro;
+            this.ultraTextEditor8.Enabled = false;
+            this.ultraTextEditor8.FlatMode = true;
+            this.ultraTextEditor8.Location = new System.Drawing.Point(86, 18);
+            this.ultraTextEditor8.Name = "ultraTextEditor8";
+            this.ultraTextEditor8.ReadOnly = true;
+            this.ultraTextEditor8.Size = new System.Drawing.Size(149, 19);
+            this.ultraTextEditor8.TabIndex = 1;
+            this.ultraTextEditor8.EditorButtonClick += new Infragistics.Win.UltraWinEditors.EditorButtonEventHandler(this.ultraTextEditor8_EditorButtonClick);
+            // 
+            // ultraCheckEditor1
+            // 
+            this.ultraCheckEditor1.Location = new System.Drawing.Point(31, 18);
+            this.ultraCheckEditor1.Name = "ultraCheckEditor1";
+            this.ultraCheckEditor1.Size = new System.Drawing.Size(48, 20);
+            this.ultraCheckEditor1.TabIndex = 0;
+            this.ultraCheckEditor1.Text = "部门";
+            this.ultraCheckEditor1.CheckedChanged += new System.EventHandler(this.ultraCheckEditor1_CheckedChanged);
+            // 
+            // ultraButton1
+            // 
+            this.ultraButton1.Location = new System.Drawing.Point(237, 17);
+            this.ultraButton1.Name = "ultraButton1";
+            this.ultraButton1.Size = new System.Drawing.Size(27, 21);
+            this.ultraButton1.TabIndex = 2;
+            this.ultraButton1.Text = ">>";
+            this.toolTip1.SetToolTip(this.ultraButton1, "部门维护");
+            this.ultraButton1.Visible = false;
+            this.ultraButton1.Click += new System.EventHandler(this.ultraButton1_Click);
+            // 
+            // FrmUserManager
+            // 
+            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
+            this.ClientSize = new System.Drawing.Size(1012, 733);
+            this.Controls.Add(this.FrmUserManager_Fill_Panel);
+            this.Name = "FrmUserManager";
+            this.Text = "系统用户管理";
+            this.Load += new System.EventHandler(this.FrmUserManager_Load);
+            this.panel1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.ultraToolbarsManager1)).EndInit();
+            this.FrmUserManager_Fill_Panel.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.ultraGrid1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraExpandableGroupBox1)).EndInit();
+            this.ultraExpandableGroupBox1.ResumeLayout(false);
+            this.ultraExpandableGroupBoxPanel1.ResumeLayout(false);
+            this.panel3.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtEmail)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ulcmeDepartment)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtMemo)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtPhono)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtZW)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtGW)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtAge)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtUserName)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultxtUserNo)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ulcmeSex)).EndInit();
+            this.panel2.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.ultLoginID)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor8)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+        #endregion
+
+        #region "显示窗体"
+
+        private void FrmUserManager_Load(object sender, System.EventArgs e)
+        {
+            StrUser = Core.Mes.ClientFrameWork.ClientCommon._UserInfo.UserName;
+
+            GetDepartmentData();
+            GetUserData("", true);
+            GetOperDepart();
+            GetChildDept();
+            InitComboBox();
+            InitGrid();
+            if (operDepart == "ROOT")
+            {
+                ultraButton1.Visible = true;
+            }
+
+            this.createIpedt(1);
+            this.ultraGrid1.DisplayLayout.Bands[0].Override.AllowRowFiltering = Infragistics.Win.DefaultableBoolean.True;
+        }
+        private void GetDepartmentData()
+        {
+            try
+            {
+                CallingMessage par = new CallingMessage();
+                par.ServerName = "PurviewManager";
+                par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+                par.MethodName = "SelectUAM_DEPARTMENT";
+                par.args = new object[] { " order by DEPARTMENTID " };
+
+                string strOut = "";
+
+                _departmentData = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+
+                _selectPartSQL = strOut;
+            }
+            catch
+            { }
+        }
+
+        private void InitComboBox()
+        {
+            if (_departmentData != null && _departmentData.Tables.Count > 0)
+            {
+                DataTable dt = this._departmentData.Tables[0].Copy();
+
+                this.ulcmeDepartment.Items.Clear();
+                foreach (DataRow dr in dt.Rows)
+                {
+                    if (dr["DEPARTMENTID"].ToString() == "ROOT" && operDepart != "ROOT") continue;
+                    try
+                    {
+                        this.ulcmeDepartment.Items.Add(dr["DEPARTMENTID"], dr["DEPARTMENTNAME"].ToString());
+                    }
+                    catch
+                    { }
+                }
+            }
+        }
+        private void GetUserData(string strWhere, bool flag)
+        {
+            try
+            {
+                if (!flag)
+                {
+                    _userData.Tables[0].DefaultView.RowFilter = strWhere;
+                    return;
+                }
+                CallingMessage par = new CallingMessage();
+                par.ServerName = "PurviewManager";
+                par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+                par.MethodName = "SelectUAM_USER";
+                par.args = new object[] { strWhere };
+
+                string strOut = "";
+
+                _userData = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+
+                _selectUserSQL = strOut;
+            }
+            catch
+            { }
+        }
+        private void GetOperDepart()
+        {
+            try
+            {
+                if (_userData != null && _userData.Tables.Count > 0)
+                {
+                    DataTable dt = this._userData.Tables[0].Copy();
+
+                    foreach (DataRow dr in dt.Rows)
+                    {
+                        if (dr["NAME"].ToString() == StrUser)
+                        {
+                            operDepart = dr["DEPARTMENTID"].ToString();
+                            //operDepart=operDepart.Substring(0,3);
+                            //if(operDepart=="xg0")
+                            //{
+                            //    operDepart="xg";
+                            //}
+                            DataTable dn = this._departmentData.Tables[0].Copy();
+                            foreach (DataRow dm in dn.Rows)
+                            {
+                                if (dm["DEPARTMENTID"].ToString() == operDepart)
+                                {
+                                    operDepartname = dm["DEPARTMENTNAME"].ToString();
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            catch
+            { }
+        }
+        private void InitGrid()
+        {
+            #region "	ValueList	"
+            GetPartData();
+            ultraGrid1.DisplayLayout.Bands[0].Columns["DEPARTMENTID"].ValueList = ultraGrid1.DisplayLayout.ValueLists["part"];
+            ultraGrid1.DisplayLayout.Bands[0].Columns["PD"].ValueList = ultraGrid1.DisplayLayout.ValueLists["part"];
+            #endregion
+
+            this.ultraCheckEditor1.CheckedValue = true;
+            this.ultraTextEditor8.Enabled = true;
+            this.ultraTextEditor8.Text = operDepartname;
+            this.ultraTextEditor8.Tag = allDept;
+            Query();
+            //			this.ultraGrid1.DataSource = this._userData.Tables[0];
+
+            this.ultraGrid1.AfterRowActivate += new EventHandler(ultraGrid1_AfterRowActivate);
+        }
+        private void ultraGrid1_AfterRowActivate(object sender, System.EventArgs e)
+        {
+            try
+            {
+                if (this.ultraGrid1.ActiveRow == null) return;
+                UltraGridRow ugr = this.ultraGrid1.ActiveRow;
+
+                this.ultxtUserNo.Text = ugr.Cells["USERID"].Value.ToString();
+                this.ulcmeDepartment.Value = ugr.Cells["DEPARTMENTID"].Value;
+                this.ultxtUserName.Text = ugr.Cells["NAME"].Value.ToString();
+                this.ulcmeSex.Text = ugr.Cells["SEX"].Value.ToString();
+                this.ultxtAge.Text = ugr.Cells["AGE"].Value.ToString();
+                //this.ulmskedtIP.Text = ugr.Cells["COMPUTERIP"].Value.ToString();
+                this.analysisIpstr(ugr.Cells["COMPUTERIP"].Value.ToString());
+
+                this.ultxtPhono.Text = ugr.Cells["HOMEPHONE"].Value.ToString();
+                this.ultxtGW.Text = ugr.Cells["WORKPOS"].Value.ToString();
+                this.ultxtZW.Text = ugr.Cells["WORKJOB"].Value.ToString();
+                this.ultxtMemo.Text = ugr.Cells["MEMO"].Value.ToString();
+                this.ultxtEmail.Text = ugr.Cells["EMAIL"].Value.ToString();
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine(ex.Message);
+            }
+        }
+        private void GetPartData()
+        {
+            if (ultraGrid1.DisplayLayout.ValueLists.Exists("part"))
+                ultraGrid1.DisplayLayout.ValueLists["part"].ValueListItems.Clear();
+            else
+                ultraGrid1.DisplayLayout.ValueLists.Add("part");
+            //try
+            //{
+            //    ultraGrid1.DisplayLayout.ValueLists["part"].ValueListItems.Clear();
+            //}
+            //catch
+            //{
+            //    ultraGrid1.DisplayLayout.ValueLists.Add("part");
+            //}
+            DataTable dt = this._departmentData.Tables[0].Copy();
+            foreach (DataRow dr in dt.Rows)
+            {
+                Infragistics.Win.ValueListItem vli = new Infragistics.Win.ValueListItem();
+                vli.DisplayText = dr["DEPARTMENTNAME"].ToString();
+                vli.DataValue = dr["DEPARTMENTID"];
+                ultraGrid1.DisplayLayout.ValueLists["part"].ValueListItems.Add(vli);
+            }
+        }
+        #endregion
+
+        #region "工具栏操作"
+        private void ultraToolbarsManager1_ToolClick(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
+        {
+            switch (e.Tool.Key)
+            {
+                case "add":
+                    Add();
+                    GetUserData("", true);
+                    break;
+                case "del":
+                    Del();
+                    break;
+                case "edit":
+                    Edit();
+                    break;
+                case "query":
+                    Query();
+                    break;
+                case "exit":
+                    this.Close();
+                    break;
+                case "back":
+                    //                  this.ultraToolbarsManager1.Toolbars[0].Tools["back"].SharedProps.Visible=false;
+                    //				    RefreshGrid("");
+                    //					ultraCheckEditor1.Checked = false;
+                    //					ultraTextEditor8.Text = "";
+                    this.ultraCheckEditor1.CheckedValue = true;
+                    if (ultLoginID.Text.Trim().Length > 0)
+                    {
+                        ultLoginID.Tag = ultLoginID.Text.Trim();
+                        ultLoginID.Text = "";
+                    }
+                    this.ultraTextEditor8.Enabled = true;
+                    this.ultraTextEditor8.Text = operDepartname;
+                    this.ultraTextEditor8.Tag = allDept;
+                    Query();
+                    break;
+                case "leadin":
+                    try
+                    {
+                        string StrfileName = string.Format("c:\\{0}.xls", this.Text);
+                        this.ultraGridExcelExporter1.Export(this.ultraGrid1, StrfileName);
+
+                        ProcessStartInfo p = new ProcessStartInfo(StrfileName);
+                        p.WorkingDirectory = Path.GetDirectoryName(StrfileName);
+                        Process.Start(p);
+                    }
+                    catch (Exception ex)
+                    {
+                        MessageBox.Show(ex.Message);
+                    }
+                    break;
+            }
+        }
+        private void Add()
+        {
+            if (this.ultxtUserNo.Text.Trim() == "")
+            {
+                MessageBox.Show("请录入员工编号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                return;
+            }
+            if (this.ultxtUserName.Text.Trim() == "")
+            {
+                MessageBox.Show("请录入员工姓名!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                return;
+            }
+            if (this.ulcmeDepartment.Value == null)
+            {
+                MessageBox.Show("请选择员工所在部门!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                return;
+            }
+            if (this.ulcmeDepartment.Value.ToString() == "ROOT")
+            {
+                this.ulcmeDepartment.Value = null;
+                MessageBox.Show("必须选择下属部门!");
+                return;
+            }
+            if (!(RightsComm.CheckRole(ulcmeDepartment.Value.ToString())))
+            {
+                return;
+            }
+            //if (allDept.IndexOf("'" + ulcmeDepartment.Value.ToString() + "'") < 0 && operDepart != "ROOT")
+            //{
+            //  this.ulcmeDepartment.Value = null;
+            //  MessageBox.Show("你没有配置这一部门用户的权限,请重新选择部门!");
+            //  return;
+            //}
+            ArrayList al = new ArrayList();
+
+            al.Add(this.ultxtUserNo.Text.Trim());
+            al.Add(this.ulcmeDepartment.Value);
+            al.Add(this.ultxtUserName.Text.Trim());
+            if (this.ulcmeSex.SelectedIndex != -1)
+            {
+                al.Add(this.ulcmeSex.Text.Trim());
+            }
+            else
+            {
+                al.Add("");
+            }
+
+            if (this.ultxtAge.Text == "")
+                al.Add(0);
+            else
+                al.Add(this.ultxtAge.Text.Trim());
+
+            //al.Add(this.ulmskedtIP.Text.Trim());
+            al.Add(this.getIpstr());
+            this.checkIpstr(this.getIpstr());
+
+            al.Add(this.ultxtPhono.Text.Trim());
+            al.Add(this.ultxtGW.Text.Trim());
+            al.Add(this.ultxtZW.Text.Trim());
+            al.Add(this.ultxtMemo.Text.Trim());
+            al.Add(this.ultxtEmail.Text.Trim());
+
+            try
+            {
+                CallingMessage par = new CallingMessage();
+                par.ServerName = "PurviewManager";
+                par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+                par.MethodName = "InsertUAM_USER";
+                par.args = new object[] { al };
+
+                string strOut = "";
+
+                object obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut);
+
+                if (strOut != "")
+                {
+                    MessageBox.Show("新增失败! \n" + strOut);
+                    return;
+                }
+                else
+                {
+                    if ((int)obj != 1)
+                    {
+                        MessageBox.Show("新增失败!");
+                        return;
+                    }
+                }
+            }
+            catch
+            {
+                return;
+            }
+            this.GetDepartmentData();
+            UltraGridRow ugr = this.ultraGrid1.DisplayLayout.Bands[0].AddNew();
+            ugr.Cells["USERID"].Value = al[0];
+            ugr.Cells["DEPARTMENTID"].Value = al[1];
+            ugr.Cells["NAME"].Value = al[2];
+            ugr.Cells["SEX"].Value = al[3];
+            ugr.Cells["AGE"].Value = al[4];
+
+            //ugr.Cells["COMPUTERIP"].Value = al[5];
+            this.analysisIpstr(ugr.Cells["COMPUTERIP"].Value.ToString());
+
+            ugr.Cells["HOMEPHONE"].Value = al[6];
+            ugr.Cells["WORKPOS"].Value = al[7];
+            ugr.Cells["WORKJOB"].Value = al[8];
+            ugr.Cells["MEMO"].Value = al[9];
+            ugr.Cells["EMAIL"].Value = al[10];
+            for (int i = 0; i < _departmentData.Tables[0].Rows.Count; i++)
+            {
+                if (_departmentData.Tables[0].Rows[i]["DEPARTMENTID"].ToString() == al[1].ToString())
+                {
+                    ugr.Cells["PD"].Value = _departmentData.Tables[0].Rows[i]["DEPARTMENTPID"].ToString();
+                    break;
+                }
+            }
+
+            this.ultraGrid1.UpdateData();
+        }
+        private void Del()
+        {
+            int i = 0;
+            UltraGridRow ugr = this.ultraGrid1.ActiveRow;
+            if (ugr == null)
+            {
+                MessageBox.Show("请选择要删除的员工!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                return;
+            }
+            if (MessageBox.Show("是否确认删除选中的员工?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
+            {
+                return;
+            }
+            string targetName = ugr.Cells["NAME"].Value.ToString();
+            if (MessageBox.Show("是否确认删除员工----" + targetName + "----", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
+            {
+                return;
+            }
+            try
+            {
+                string OpDptID = "";
+                OpDptID = ugr.Cells["DEPARTMENTID"].Value.ToString();
+                if (!(RightsComm.CheckRole(OpDptID)))
+                    return;
+                i = ugr.Index;
+
+                CallingMessage par = new CallingMessage();
+                par.ServerName = "PurviewManager";
+                par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+                par.MethodName = "DeleteUAM_USER";
+                par.args = new object[] { ugr.Cells[0].Value.ToString() };
+
+                string strOut = "";
+
+                object obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut);
+
+                if (strOut != "")
+                {
+                    MessageBox.Show("删除失败! \n" + strOut);
+                    return;
+                }
+                else
+                {
+                    if ((int)obj != 1)
+                    {
+                        MessageBox.Show("删除失败!");
+                        return;
+                    }
+                }
+            }
+            catch //(Exception ex)
+            {
+                //			CoreMesLogger.log(this.GetType()).Error(ex.Message);
+                return;
+            }
+
+            this.ultraGrid1.ActiveRow.Delete(false);
+            this.ultraGrid1.UpdateData();
+
+            try
+            {
+                this.ultraGrid1.Rows[i].Activate();
+            }
+            catch
+            {
+                int count = this.ultraGrid1.Rows.Count;
+                if (count > 0)
+                    this.ultraGrid1.Rows[count - 1].Activate();
+            }
+        }
+        private void Edit()
+        {
+            UltraGridRow ugr = this.ultraGrid1.ActiveRow;
+            if (ugr == null)
+            {
+                MessageBox.Show("请选择要修改的员工!");
+                return;
+            }
+            if (this.ultxtUserNo.Text.Trim() != ugr.Cells["USERID"].Text.Trim())
+            {
+                MessageBox.Show("不能修改员工编号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                return;
+            }
+            if (this.ultxtUserName.Text.Trim() == "")
+            {
+                MessageBox.Show("请录入员工姓名!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                return;
+            }
+            if (this.ulcmeDepartment.Value == null)
+            {
+                MessageBox.Show("请选择员工所在部门!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                return;
+            }
+            if (this.ulcmeDepartment.Value.ToString() == "ROOT")
+            {
+                this.ulcmeDepartment.Value = null;
+                MessageBox.Show("必须选择下属部门!");
+                return;
+            }
+            if (allDept.IndexOf("'" + ulcmeDepartment.Value.ToString() + "'") < 0 && operDepart != "ROOT")
+            {
+                this.ulcmeDepartment.Value = null;
+                MessageBox.Show("你没有修改该用户的权限,请重新选择部门!");
+                return;
+            }
+            ArrayList al = new ArrayList();
+
+            al.Add(this.ultxtUserNo.Text.Trim());
+
+            al.Add(this.ulcmeDepartment.Value);
+
+            al.Add(this.ultxtUserName.Text.Trim());
+            al.Add(this.ulcmeSex.Text.Trim());
+            al.Add((ultxtAge.Text.Trim() != "") ? ultxtAge.Text.Trim() : "0");
+
+            //al.Add(this.ulmskedtIP.Text.Trim());
+            al.Add(this.getIpstr());
+            this.checkIpstr(this.getIpstr());
+
+            al.Add(this.ultxtPhono.Text.Trim());
+            al.Add(this.ultxtGW.Text.Trim());
+            al.Add(this.ultxtZW.Text.Trim());
+            al.Add(this.ultxtMemo.Text.Trim());
+            al.Add(this.ultxtEmail.Text.Trim());
+
+            try
+            {
+                CallingMessage par = new CallingMessage();
+                par.ServerName = "PurviewManager";
+                par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+                par.MethodName = "UpdateUAM_USER";
+                par.args = new object[] { al };
+
+                string strOut = "";
+
+                object obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut);
+
+                if (strOut != "")
+                {
+                    MessageBox.Show("修改失败 \n" + strOut);
+                    return;
+                }
+                else
+                {
+                    int i = (int)obj;
+                    if (i != 1)
+                    {
+                        MessageBox.Show("修改失败");
+                        return;
+                    }
+                }
+            }
+            catch //(Exception ex)
+            {
+                //			CoreMesLogger.log(this.GetType()).Error(ex.Message);
+                return;
+            }
+            ugr.Cells["DEPARTMENTID"].Value = al[1];
+            ugr.Cells["NAME"].Value = al[2];
+            ugr.Cells["SEX"].Value = al[3];
+            ugr.Cells["AGE"].Value = al[4];
+
+            //ugr.Cells["COMPUTERIP"].Value = al[5];
+            this.analysisIpstr(ugr.Cells["COMPUTERIP"].Value.ToString());
+
+            ugr.Cells["HOMEPHONE"].Value = al[6];
+            ugr.Cells["WORKPOS"].Value = al[7];
+            ugr.Cells["WORKJOB"].Value = al[8];
+            ugr.Cells["MEMO"].Value = al[9];
+            ugr.Cells["EMAIL"].Value = al[10];
+            for (int i = 0; i < _departmentData.Tables[0].Rows.Count; i++)
+            {
+                if (_departmentData.Tables[0].Rows[i]["DEPARTMENTID"].ToString() == al[1].ToString())
+                {
+                    ugr.Cells["PD"].Value = _departmentData.Tables[0].Rows[i]["DEPARTMENTPID"].ToString();
+                    break;
+                }
+            }
+
+            this.ultraGrid1.UpdateData();
+        }
+        private void Query()
+        {
+            try
+            {
+                if ((this.ultraTextEditor8.Text == null || !this.ultraCheckEditor1.Checked) &&
+                    (this.ultLoginID.Text.Trim().Length == 0))
+                {
+                    MessageBox.Show("请选择要查询的部门或员工编号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                    return;
+                }
+                if (this.ultraCheckEditor1.Checked && this.ultraTextEditor8.Text != "")
+                {
+                    GetSelDept();
+                    if (operDepart != "ROOT" && allDept.IndexOf("'" + selDept + "'") < 0)
+                    {
+                        MessageBox.Show("你没有查看这一部门的权限,请重新选择!");
+                        return;
+                    }
+                }
+                this.ultraToolbarsManager1.Toolbars[0].Tools["back"].SharedProps.Visible = true;
+                string strWhere = "";
+                if (this.ultraTextEditor8.Tag.ToString().Length > 0)
+                    strWhere = " WHERE DEPARTMENTID in (" + this.ultraTextEditor8.Tag.ToString() + ")";
+                //strWhere = GetRefreshWhere();
+                //strWhere = " where " + strWhere;
+
+                CallingMessage par = new CallingMessage();
+                par.ServerName = "PurviewManager";
+                par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+                par.MethodName = "GetUAM_USER";
+                par.args = new object[] { strWhere };
+
+                string strOut = "";
+
+                DataSet obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+                this.ultraGrid1.DataSource = obj.Tables[0];
+                this.ultraGrid1.Refresh();
+            }
+            catch (System.Exception ex)
+            {
+                System.Diagnostics.Debug.WriteLine(ex.ToString());
+            }
+        }
+        private string GetRefreshWhere()
+        {
+            string sqlstr = "";
+            if (this.ultraTextEditor8.Enabled && this.ultraCheckEditor1.Checked && this.ultraTextEditor8.Text != "")
+            {
+                ArrayList al = this.GetUserID();
+                if (al == null || al.Count == 0)
+                {
+                    sqlstr = "1=2";
+                }
+                else
+                {
+                    sqlstr += " USERID in ('" + al[0].ToString() + "'";
+                    for (int i = 1; i < al.Count; i++)
+                    {
+                        sqlstr += ", '" + al[i].ToString() + "' ";
+                    }
+                    sqlstr += ")";
+
+                }
+            }
+            if (this.ultLoginID.Text.Trim().Length > 0)
+            {
+                if (sqlstr != "")
+                    sqlstr += " and ";
+                sqlstr += " USERID = '" + this.ultLoginID.Text.Trim() + "'";
+            }
+            return sqlstr;
+        }
+        private ArrayList GetUserID()
+        {
+            ArrayList al = new ArrayList();
+            DataTable dt = null;
+            if (this._userData == null)
+                dt = null;
+            else
+                dt = this._userData.Tables[0];
+
+            if (dt != null)
+            {
+                if (this.ultraTextEditor8.Enabled && this.ultraTextEditor8.Tag != null)
+                {
+                    string partid = this.ultraTextEditor8.Tag.ToString();
+
+                    string strFilter = "DEPARTMENTID in (" + partid + ")";
+
+                    dt.DefaultView.RowFilter = strFilter;
+                }
+
+                for (int i = 0; i < dt.DefaultView.Count; i++)
+                {
+                    al.Add(dt.DefaultView[i]["USERID"].ToString());
+                }
+
+                return al;
+            }
+            else
+                return null;
+        }
+        private void RefreshGrid(string strWhere)
+        {
+            CallingMessage par = new CallingMessage();
+            par.ServerName = "PurviewManager";
+            par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+            par.MethodName = "SelectUAM_USER";
+            par.args = new object[] { strWhere };
+
+            string strOut = "";
+
+            DataSet obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+            this.ultraGrid1.DataSource = obj.Tables[0];
+            this.ultraGrid1.Refresh();
+        }
+        #endregion
+
+        #region "Button"
+        private void ultraButton1_Click(object sender, System.EventArgs e)
+        {
+            foreach (Form mdiChild in this.MdiParent.MdiChildren)
+            {
+                if (mdiChild.Text == "部门管理")
+                {
+                    mdiChild.Activate();
+                    return;
+                }
+            }
+
+            FrmDepartment frmpart = new FrmDepartment();
+
+            //			frmpart.RemotingHelp = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp;
+            frmpart.MdiParent = this.ParentForm;
+            frmpart.Show();
+        }
+        #endregion
+
+        #region "TextBox"
+        private void ultraTextEditor8_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e)
+        {
+            try
+            {
+                FrmSetDepart frm = new FrmSetDepart();
+                frm.Location = GetChildWindowLocation(frm.Size);
+                frm.ShowDialog();
+                if (frm.SelectedID != "" && frm.SelectedName != "")
+                {
+                    this.ultraTextEditor8.Text = frm.SelectedName;
+                    this.ultraTextEditor8.Tag = frm.SelectedID;
+                }
+                if (this.ultraTextEditor8.Text != "" && this.ultraCheckEditor1.Checked)
+                {
+                    GetSelDept();
+                    if (operDepart != "ROOT" && allDept.IndexOf("'" + selDept + "'") < 0)
+                    {
+                        MessageBox.Show("你没有查看这一部门的权限,请重新选择!");
+                    }
+                }
+            }
+            catch
+            { }
+        }
+        private void ultLoginID_EditorButtonClick(object sender, EditorButtonEventArgs e)
+        {
+            try
+            {
+                if (e.Button.Key == "SET")
+                {
+                    if (ultLoginID.Text.Trim().Length > 0)
+                    {
+                        ultLoginID.Tag = ultLoginID.Text.Trim();
+                        ultLoginID.Text = "";
+                    }
+                    else
+                    {
+                        if (ultLoginID.Tag != null)
+                            ultLoginID.Text = ultLoginID.Tag.ToString();
+                    }
+                }
+            }
+            catch { }
+        }
+        #endregion
+
+        #region "Custom Method"
+        private Point GetChildWindowLocation(Size ChildWindowSize)
+        {
+            int width = Cursor.Position.X + ChildWindowSize.Width - Screen.PrimaryScreen.Bounds.Width;
+            int height = Cursor.Position.Y + ChildWindowSize.Height - Screen.PrimaryScreen.Bounds.Height + 30;
+
+            if (width > 0)
+                width = Cursor.Position.X - width;
+            else
+                width = Cursor.Position.X;
+            if (height > 0)
+                height = Cursor.Position.Y - height + 10;
+            else
+                height = Cursor.Position.Y + 10;
+
+            return new Point(width, height);
+        }
+        private void GetChildDept()
+        {
+            try
+            {
+                string strOut = "";
+                DataSet ds = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod("PurviewManager", "Core.Mes.PurviewManager.UAM_USER", "SelectChildDept", new object[] { operDepart }, out strOut) as DataSet;
+                if (ds.Tables[0].Rows[0][0].ToString() != "")
+                {
+                    allDept = "'" + ds.Tables[0].Rows[0][0].ToString() + "'" + operDepart + "'";
+                }
+                else
+                    allDept = "'" + operDepart + "'";
+            }
+            catch
+            { }
+        }
+        private void GetSelDept()
+        {
+            try
+            {
+                if (this.ultraTextEditor8.Text != "" && this.ultraCheckEditor1.Checked)
+                {
+                    DataTable dt = this._departmentData.Tables[0].Copy();
+                    foreach (DataRow dr in dt.Rows)
+                    {
+                        if (dr["DEPARTMENTNAME"].ToString() == this.ultraTextEditor8.Text)
+                        {
+                            selDept = dr["DEPARTMENTID"].ToString();
+                            return;
+                        }
+                    }
+                }
+            }
+            catch
+            { }
+        }
+        #endregion
+
+        #region "ComboBox"
+        private void ultraComboEditor2_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e)
+        {
+            try
+            {
+                FrmSetDepart frm = new FrmSetDepart();
+                frm.GetChildIDFlag = false;
+                frm.Location = GetChildWindowLocation(frm.Size);
+                frm.ShowDialog();
+
+                InitComboBox();
+
+                if (frm.SelectedID != "" && frm.SelectedName != "")
+                {
+                    this.ulcmeDepartment.Value = frm.SelectedID;
+                    if (operDepart != "ROOT" && this.ulcmeDepartment.Value.ToString() == "ROOT")
+                    {
+                        this.ulcmeDepartment.Value = null;
+                        MessageBox.Show("所属权限不允许选择选择整个公司!");
+                        return;
+                    }
+                    if (allDept.IndexOf("'" + ulcmeDepartment.Value.ToString() + "'") < 0 && operDepart != "ROOT")
+                    {
+                        this.ulcmeDepartment.Value = null;
+                        MessageBox.Show("你没有配置这一部门用户的权限,请重新选择部门!");
+                        return;
+                    }
+                }
+            }
+            catch
+            { }
+        }
+        private void ultraComboEditor2_SelectionChanged(object sender, System.EventArgs e)
+        {
+            try
+            {
+                if (operDepart != "ROOT" && ulcmeDepartment.Value.ToString() == "ROOT")
+                {
+                    this.ulcmeDepartment.Value = null;
+                    MessageBox.Show("所属权限不允许选择选择整个公司!");
+                    return;
+                }
+                if (ulcmeDepartment.Value != null && allDept.IndexOf("'" + ulcmeDepartment.Value.ToString() + "'") < 0 && operDepart != "ROOT")
+                {
+                    this.ulcmeDepartment.Value = null;
+                    MessageBox.Show("你没有配置这一部门用户的权限,请重新选择部门!");
+                    return;
+                }
+            }
+            catch
+            { }
+        }
+        #endregion
+
+        #region "CheckBox"
+        private void ultraCheckEditor1_CheckedChanged(object sender, System.EventArgs e)
+        {
+            this.ultraTextEditor8.Enabled = this.ultraCheckEditor1.Checked;
+        }
+        #endregion
+
+
+        private ArrayList listIpedt = new ArrayList();
+
+        private void createIpedt(int sum)
+        {
+
+            for (int i = 0; i < sum; i++)
+            {
+                if (this.listIpedt.Count >= 4)
+                {
+                    break;
+                }
+            Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit ipedt = new Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit();
+
+            ipedt = new Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit();
+            ipedt.EditAs = Infragistics.Win.UltraWinMaskedEdit.EditAsType.UseSpecifiedMask;
+            ipedt.InputMask = "nnn\\.nnn\\.nnn\\.nnn";
+            ipedt.Location = new System.Drawing.Point(3, 3);
+            ipedt.Name = "ulmskedtIP";
+            ipedt.Size = new System.Drawing.Size(136, 21);
+            ipedt.TabIndex = 12;
+            ipedt.Text = "...";
+            //this.toolTip1.SetToolTip(ipedt, "鼠标左击增加IP框;右击减少");
+
+            this.flowLayoutPanel1.Controls.Add(ipedt);
+            listIpedt.Add(ipedt);
+            }
+            
+        }
+
+        private void deleteIpedt(int sum)
+        {
+            if (sum > 0 && listIpedt.Count - sum > 0)
+            {
+                int cnt = listIpedt.Count -sum;
+                for (int i=listIpedt.Count;i>cnt;i--){
+                    
+                Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit ipedt = (Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit) listIpedt[listIpedt.Count - 1];
+                ipedt.Dispose();
+                listIpedt.RemoveAt(listIpedt.Count - 1);
+                }
+
+            }
+        }
+
+        private string getIpstr()
+        {
+            string ipstr = "";
+            Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit ipedt;
+            for (int i = 0; i < listIpedt.Count; i++)
+            {
+                ipedt = (Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit)listIpedt[i];
+                if (!"...".Equals(ipedt.Value.ToString().Trim()) && !"".Equals(ipedt.Value.ToString().Trim()))
+                {
+                    ipstr += ipedt.Value.ToString().Trim() + ";";
+                }
+            }
+            if (ipstr.Trim().Length>0&&";".Equals(ipstr.Substring(ipstr.Length - 1, 1)))
+            {
+                ipstr = ipstr.Substring(0, ipstr.Length - 1);
+            }
+            return ipstr;
+        }
+
+        private void ultraLabel9_MouseClick(object sender, MouseEventArgs e)
+        {
+            if (e.Button == MouseButtons.Left)
+            {
+                this.createIpedt(1);
+            }
+            if (e.Button == MouseButtons.Right)
+            {
+                this.deleteIpedt(1);
+            }
+        }
+
+        private void analysisIpstr(string ipstr)
+        {
+            Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit ipedt;
+            string[] ipR = ipstr.Split(new string[] { ";", @";" }, StringSplitOptions.None); 
+            this.createIpedt(ipR.GetLength(0) - listIpedt.Count);
+            this.deleteIpedt(listIpedt.Count - ipR.GetLength(0));
+            for (int i = 0; i < ipR.GetLength(0); i++)
+            {
+                ipedt = (Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit) listIpedt[i];
+                ipedt.Text = ipR[i].ToString();
+            }
+        }
+
+        private bool checkIpstr(string IpRule)
+        {
+            if (string.IsNullOrEmpty(IpRule)) return true;
+
+            string[] ipR = IpRule.Split(new string[] { ";", @";" }, StringSplitOptions.None);
+            for (int i = 0; i < ipR.GetLength(0); i++)
+            {
+                string iprs = ipR[i].Trim();
+                string[] ipRules = iprs.Split(new string[] { ".", @"。" }, StringSplitOptions.None);
+                int min_len = ipRules.GetLength(0);
+                for (int idx = 0; idx < (min_len >= 4 ? 4 : min_len); idx++)
+                {
+                    string ip_segment = ipRules[idx].Trim();
+                    if (string.IsNullOrEmpty(ip_segment)) continue;
+
+                    //检查ip规则配置是否正确  只允许包含  [数字]、[*]、[?] 三种字符;
+                    Regex regex_segment = new Regex(@"^[0-9\?\*]{1,3}$");
+                    if (!regex_segment.IsMatch(ip_segment))
+                    {
+                        MessageBox.Show(string.Format("IP规则第三段配置不正确![{0}]", ip_segment));
+                    }
+                }
+            }
+            return true;
+        }
+
+    }
+}

+ 437 - 0
.svn/pristine/28/285f24ac3a111ecbab0f002e69a608b76ef8c22b.svn-base

@@ -0,0 +1,437 @@
+using Infragistics.Win.UltraWinTree;
+
+namespace Core.Mes.ClientPurviewManager
+{
+	//Enumerates the possiblt Drop States
+	[System.Flags] public enum DropLinePositionEnum
+	{
+		None = 0,
+		OnNode = 1,
+		AboveNode = 2,
+		BelowNode = 4,
+		All = OnNode | AboveNode | BelowNode
+	}
+
+	public class UltraTree_DropHightLight_DrawFilter_Class:Infragistics.Win.IUIElementDrawFilter
+	{
+		//This class has to implement the DrawFilter Interface
+		//so it can be used as a DrawFilter by the tree
+
+		public event System.EventHandler Invalidate;
+		//public delegate void InvalidateEventHandler( object sender, EventArgs e );
+
+		public event QueryStateAllowedForNodeEventHandler QueryStateAllowedForNode;
+		public delegate void QueryStateAllowedForNodeEventHandler( object sender, QueryStateAllowedForNodeEventArgs e );
+
+		//Used by the QueryStateAllowedForNode event
+		public class QueryStateAllowedForNodeEventArgs:System.EventArgs
+		{
+			public UltraTreeNode Node ;
+			public DropLinePositionEnum DropLinePosition;
+			public DropLinePositionEnum StatesAllowed ;
+		}
+
+		public UltraTree_DropHightLight_DrawFilter_Class()
+		{
+			//Initialize the properties to the defaults
+			InitProperties();
+		} 
+
+		//Initialize the properties to the defaults
+		private void InitProperties()
+		{
+			mvarDropHighLightNode = null;
+			mvarDropLinePosition = DropLinePositionEnum.None;
+			mvarDropHighLightBackColor = System.Drawing.SystemColors.Highlight;
+			mvarDropHighLightForeColor = System.Drawing.SystemColors.HighlightText;
+			mvarDropLineColor = System.Drawing.SystemColors.ControlText;
+			mvarEdgeSensitivity = 0;
+			mvarDropLineWidth = 2;
+		}
+
+
+		//Clean up
+		public void Dispose()
+		{
+			mvarDropHighLightNode = null;
+		}
+
+		//The DropHighLightNode is a reference to the node the
+		//Mouse is currently over
+		private UltraTreeNode mvarDropHighLightNode;
+		public UltraTreeNode DropHightLightNode
+		{
+			get
+			{
+				return mvarDropHighLightNode;
+			}
+			set
+			{
+				//If the Node is being set to the same value,
+				// just exit
+				if (mvarDropHighLightNode.Equals(value))
+				{	
+					return;
+				}
+				mvarDropHighLightNode = value;
+				//The DropNode has changed.
+				PositionChanged();
+			}
+		}
+
+		private DropLinePositionEnum mvarDropLinePosition;
+		public DropLinePositionEnum DropLinePosition
+		{
+			get
+			{
+				return mvarDropLinePosition;
+			}
+			set
+			{
+				//If the position is the same as it was, 
+				//just exit
+				if (mvarDropLinePosition == value)
+				{
+					return;
+				}
+				mvarDropLinePosition = value;
+				//The Drop Position has changed
+				PositionChanged();
+			}
+		}
+
+		//The width of the DropLine
+		private int mvarDropLineWidth;
+		public int DropLineWidth
+		{
+			get
+			{
+				return mvarDropLineWidth;
+			}
+			set
+			{
+				mvarDropLineWidth = value;
+			}
+		}
+
+		//The BackColor of the DropHighLight node
+		//This only affect the node when it is being dropped On. 
+		//Not Above or Below. 
+		private System.Drawing.Color mvarDropHighLightBackColor; 
+		public System.Drawing.Color DropHighLightBackColor
+		{
+			get
+			{
+				return mvarDropHighLightBackColor;
+			}
+			set
+			{
+				mvarDropHighLightBackColor = value;
+			}
+		}
+
+		//The ForeColor of the DropHighLight node
+		//This only affect the node when it is being dropped On. 
+		//Not Above or Below. 
+		private System.Drawing.Color  mvarDropHighLightForeColor;
+		public System.Drawing.Color  DropHighLightForeColor
+		{
+			get
+			{
+				return mvarDropHighLightForeColor;
+			}
+			set
+			{
+				mvarDropHighLightForeColor = value;
+			}
+		}
+
+		//The color of the DropLine
+		private System.Drawing.Color  mvarDropLineColor ;
+		public System.Drawing.Color DropLineColor
+		{
+			get
+			{
+				return mvarDropLineColor;
+			}
+			set
+			{
+				mvarDropLineColor = value;
+			}
+		}
+
+		//Determines how close to the top or bottom edge of a node
+		//the mouse must be to be consider dropping Above or Below
+		//respectively. 
+		//By default the top 1/3 of the node is Above, the bottom 1/3
+		//is Below, and the middle is On. 
+		private int mvarEdgeSensitivity ;
+		public int EdgeSensitivity
+		{
+			get
+			{
+				return mvarEdgeSensitivity;
+			}
+			set
+			{
+				mvarEdgeSensitivity = value;
+			}
+		}
+
+		//When the DropNode or DropPosition change, we fire the
+		//Invalidate event to let the program know to invalidate
+		//the Tree control. 
+		//This is neccessary since the DrawFilter does not have a 
+		//reference to the Tree Control (although it probably could)
+		private void PositionChanged()
+		{
+			// if nobody is listening then just return
+			//
+			if ( null == this.Invalidate)
+				return;
+
+			System.EventArgs e = System.EventArgs.Empty;
+		
+			this.Invalidate(this, e);
+		}
+
+		//Set the DropNode to Nothing and the position to None. This
+		//Will clear whatever Drophighlight is in the tree
+		public void ClearDropHighlight()
+		{
+			SetDropHighlightNode(null, DropLinePositionEnum.None);
+		}
+
+		//Call this proc every time the DragOver event of the 
+		//Tree fires. 
+		//Note that the point pass in MUST be in Tree coords, not
+		//form coords
+		public void SetDropHighlightNode(UltraTreeNode Node, System.Drawing.Point PointInTreeCoords )
+		{
+			//The distance from the edge of the node used to 
+			//determine whether to drop Above, Below, or On a node
+			int DistanceFromEdge; 
+        
+			//The new DropLinePosition
+			DropLinePositionEnum NewDropLinePosition;
+		
+			DistanceFromEdge = mvarEdgeSensitivity;
+			//Check to see if DistanceFromEdge is 0
+			if (DistanceFromEdge == 0)
+			{
+				//It is, so we use the default value - one third. 
+				DistanceFromEdge = Node.Bounds.Height / 3;
+			}
+
+			//Determine which part of the node the point is in
+			if (PointInTreeCoords.Y < (Node.Bounds.Top + DistanceFromEdge))
+			{
+				//Point is in the top of the node
+				NewDropLinePosition = DropLinePositionEnum.AboveNode;
+			}
+			else
+			{
+				if (PointInTreeCoords.Y > ((Node.Bounds.Bottom - DistanceFromEdge) - 1))
+				{
+					//Point is in the bottom of the node
+					NewDropLinePosition = DropLinePositionEnum.BelowNode;
+				}
+				else
+				{
+					//Point is in the middle of the node
+					NewDropLinePosition = DropLinePositionEnum.OnNode;
+				}
+			}
+
+			//Now that we have the new DropLinePosition, call the
+			//real proc to get things rolling
+			SetDropHighlightNode(Node, NewDropLinePosition);
+		}
+
+		private void SetDropHighlightNode(UltraTreeNode Node , DropLinePositionEnum DropLinePosition )
+		{
+			//Use to store whether there have been any changes in 
+			//DropNode or DropLinePosition
+			bool IsPositionChanged = false;
+
+			try	
+			{
+				//Check to see if the nodes are equal and if 
+				//the dropline position are equal
+				if (mvarDropHighLightNode != null && mvarDropHighLightNode.Equals(Node) && (mvarDropLinePosition == DropLinePosition))
+				{
+					//They are both equal. Nothing has changed. 
+					IsPositionChanged = false;
+				}
+				else	
+				{
+					//One or both have changed
+					IsPositionChanged = true;
+				}
+			}
+			catch 
+			{
+				//If we reach this code, it means mvarDropHighLightNode 
+				//is null, so it could not be compared
+				if (mvarDropHighLightNode == null)
+				{
+					//Check to see if Node is nothing, so we//ll know
+					//if Node = mvarDropHighLightNode
+					IsPositionChanged = !(Node == null);
+				}
+			}
+
+			//Set both properties without calling PositionChanged
+			mvarDropHighLightNode = Node;
+			mvarDropLinePosition = DropLinePosition;
+
+			//Check to see if the PositionChanged
+			if (IsPositionChanged)
+			{
+				//Position did change.
+				PositionChanged();
+			}
+		}
+
+		//Only need to trap for 2 phases:
+		//AfterDrawElement: for drawing the DropLine
+		//BeforeDrawElement: for drawing the DropHighlight
+		Infragistics.Win.DrawPhase Infragistics.Win.IUIElementDrawFilter.GetPhasesToFilter(ref Infragistics.Win.UIElementDrawParams drawParams) 
+		{
+			return Infragistics.Win.DrawPhase.AfterDrawElement | Infragistics.Win.DrawPhase.BeforeDrawElement;
+		}
+
+		//The actual drawing code
+		bool Infragistics.Win.IUIElementDrawFilter.DrawElement(Infragistics.Win.DrawPhase drawPhase, ref Infragistics.Win.UIElementDrawParams drawParams)
+		{
+			Infragistics.Win.UIElement aUIElement;
+			System.Drawing.Graphics g;
+			UltraTreeNode aNode;
+
+			//If there//s no DropHighlight node or no position
+			//specified, then we don//t need to draw anything special. 
+			//Just exit Function
+			if ((mvarDropHighLightNode == null) || (mvarDropLinePosition == DropLinePositionEnum.None))
+			{
+				return false;
+			}
+
+			//Create a new QueryStateAllowedForNodeEventArgs object
+			//to pass to the event
+			QueryStateAllowedForNodeEventArgs eArgs = new QueryStateAllowedForNodeEventArgs();
+
+			//Initialize the object with the correct info
+			eArgs.Node = mvarDropHighLightNode;
+			eArgs.DropLinePosition = this.mvarDropLinePosition;
+
+			//Default to all states allowed. 
+			eArgs.StatesAllowed = DropLinePositionEnum.All;
+
+			//Raise the event
+			this.QueryStateAllowedForNode(this, eArgs);
+
+			//Check to see if the user allowed the current state
+			//for this node. If not, exit function
+			if ((eArgs.StatesAllowed & mvarDropLinePosition) != mvarDropLinePosition)
+			{
+				return false;
+			}
+
+			//Get the element being drawn
+			aUIElement = drawParams.Element;
+
+			//Determine which drawing phase we are in. 
+			switch (drawPhase)
+			{
+				case Infragistics.Win.DrawPhase.BeforeDrawElement:
+				{
+					//We are in BeforeDrawElement, so we are only concerned with 
+					//drawing the OnNode state. 
+					if ((mvarDropLinePosition & DropLinePositionEnum.OnNode) == DropLinePositionEnum.OnNode)
+					{
+						//Check to see if we are drawing a NodeTextUIElement
+						if (aUIElement.GetType() == typeof(Infragistics.Win.UltraWinTree.NodeTextUIElement))
+						{
+							//Get a reference to the node that this
+							//NodeTextUIElement is associated with
+							aNode = (UltraTreeNode)aUIElement.GetContext(typeof(UltraTreeNode));
+
+							//See if this is the DropHighlightNode
+							if (aNode.Equals(mvarDropHighLightNode))
+							{
+								//Set the ForeColor and Backcolor of the node 
+								//to the DropHighlight colors 
+								//Note that AppearanceData only affects the
+								//node for this one paint. It will not
+								//change any properties of the node
+								drawParams.AppearanceData.BackColor = mvarDropHighLightBackColor;
+								drawParams.AppearanceData.ForeColor = mvarDropHighLightForeColor;
+							}
+						}
+					}
+					break;
+				}
+				case Infragistics.Win.DrawPhase.AfterDrawElement:
+				{
+					//We're in AfterDrawElement
+					//So the only states we are conderned with are
+					//Below and Above
+					//Check to see if we are drawing the Tree Element
+					if (aUIElement.GetType() == typeof(Infragistics.Win.UltraWinTree.UltraTreeUIElement))
+					{
+						//Declare a pen to us for drawing Droplines
+						System.Drawing.Pen p = new System.Drawing.Pen(mvarDropLineColor, mvarDropLineWidth);
+
+						//Get a reference to the Graphics object
+						//we are drawing to. 
+						g = drawParams.Graphics;
+
+						//Get the NodeSelectableAreaUIElement for the 
+						//current DropNode. We will use this for
+						//positioning and sizing the DropLine
+						Infragistics.Win.UltraWinTree.NodeSelectableAreaUIElement tElement ;
+						tElement = (Infragistics.Win.UltraWinTree.NodeSelectableAreaUIElement)drawParams.Element.GetDescendant(typeof(Infragistics.Win.UltraWinTree.NodeSelectableAreaUIElement), mvarDropHighLightNode);
+
+						//The left edge of the DropLine
+						int LeftEdge = tElement.Rect.Left - 4;
+
+						//We need a reference to the control to 
+						//determine the right edge of the line
+						UltraTree aTree; 
+						aTree = (UltraTree)tElement.GetContext(typeof(UltraTree));
+						int RightEdge = aTree.DisplayRectangle.Right -4;
+
+						//Used to store the Vertical position of the 
+						//DropLine
+						int LineVPosition;
+
+						if ((mvarDropLinePosition & DropLinePositionEnum.AboveNode) == DropLinePositionEnum.AboveNode)
+						{
+							//Draw line above node
+							LineVPosition = mvarDropHighLightNode.Bounds.Top;
+							g.DrawLine(p, LeftEdge, LineVPosition, RightEdge, LineVPosition);
+							p.Width = 1;
+							g.DrawLine(p, LeftEdge, LineVPosition - 3, LeftEdge, LineVPosition + 2);
+							g.DrawLine(p, LeftEdge + 1, LineVPosition - 2, LeftEdge + 1, LineVPosition + 1);
+							g.DrawLine(p, RightEdge, LineVPosition - 3, RightEdge, LineVPosition + 2);
+							g.DrawLine(p, RightEdge - 1, LineVPosition - 2, RightEdge - 1, LineVPosition + 1);
+						}
+						if ((mvarDropLinePosition & DropLinePositionEnum.BelowNode) == DropLinePositionEnum.BelowNode)
+						{
+							//Draw Line below node
+							LineVPosition = mvarDropHighLightNode.Bounds.Bottom;
+							g.DrawLine(p, LeftEdge, LineVPosition, RightEdge, LineVPosition);
+							p.Width = 1;
+							g.DrawLine(p, LeftEdge, LineVPosition - 3, LeftEdge, LineVPosition + 2);
+							g.DrawLine(p, LeftEdge + 1, LineVPosition - 2, LeftEdge + 1, LineVPosition + 1);
+							g.DrawLine(p, RightEdge, LineVPosition - 3, RightEdge, LineVPosition + 2);
+							g.DrawLine(p, RightEdge - 1, LineVPosition - 2, RightEdge - 1, LineVPosition + 1);
+						}
+					}
+					break;
+				}				
+			}
+			return false;
+		}
+	}
+}

+ 15 - 0
.svn/pristine/29/295d5a2e79d1cd585d65616e819ab390271ce371.svn-base

@@ -0,0 +1,15 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ProjectView>ProjectFiles</ProjectView>
+    <ReferencePath>E:\code\server\</ReferencePath>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <StartAction>Program</StartAction>
+    <StartProgram>e:\code\Server\Core.Mes.ServerManager.exe</StartProgram>
+    <StartArguments>log</StartArguments>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <StartAction>Program</StartAction>
+    <StartProgram>E:\code\Server\Core.Mes.ServerManager.exe</StartProgram>
+  </PropertyGroup>
+</Project>

+ 74 - 0
.svn/pristine/2d/2deefed755e75bf30915bc316c0a81eddf0a106f.svn-base

@@ -0,0 +1,74 @@
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+
+namespace Core.Mes.ClientFrameWork
+{
+	/// <summary>
+	/// Core Mes 平台所有业务子窗体的基类
+	/// </summary>
+	public class FrmBase : System.Windows.Forms.Form
+	{
+		private System.ComponentModel.IContainer components;
+
+		public FrmBase()
+		{
+			//
+			// Windows 窗体设计器支持所必需的
+			//
+			InitializeComponent();
+
+			//
+			// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
+			//
+		}
+
+		/// <summary>
+		/// 清理所有正在使用的资源。
+		/// </summary>
+		protected override void Dispose( bool disposing )
+		{
+			if( disposing )
+			{
+				if(components != null)
+				{
+					components.Dispose();
+				}
+			}
+			base.Dispose( disposing );
+		}
+
+		#region Windows 窗体设计器生成的代码
+		/// <summary>
+		/// 设计器支持所需的方法 - 不要使用代码编辑器修改
+		/// 此方法的内容。
+		/// </summary>
+		private void InitializeComponent()
+		{
+            this.SuspendLayout();
+            // 
+            // FrmBase
+            // 
+            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
+            this.ClientSize = new System.Drawing.Size(1012, 733);
+            this.Name = "FrmBase";
+            this.Text = "FrmBase";
+            this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
+            this.ResumeLayout(false);
+
+		}
+		#endregion
+
+
+		#region "	RemotingGate "
+
+		public string Key = "";
+		public bool On_Off_Thread = false;
+		public Form _ParentForm;
+		#endregion
+
+		
+	}
+}

+ 313 - 0
.svn/pristine/2e/2e3eb3b858b19ec711cb643d471f86b7d218f08f.svn-base

@@ -0,0 +1,313 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.IO;
+using System.Net;
+
+namespace Core.Mes.ServerFrameWork
+{
+    public delegate void Action<T1, T2>(T1 _t1, T2 _t2);
+    public static class FtpHelper
+    {
+        public static string FtpUserID = string.Empty;
+
+        public static string FtpPassword = string.Empty;
+
+        public static bool FtpDownload(string remoteFileName, string localFileName, bool ifCredential, Action<int, int> updateProgress)
+        {
+            Stream stream = null;
+            FtpWebResponse ftpWebResponse = null;
+            FileStream fileStream = null;
+            try
+            {
+                fileStream = new FileStream(localFileName, FileMode.Create);
+                Uri requestUri = new Uri(remoteFileName);
+                FtpWebRequest ftpWebRequest = (FtpWebRequest)WebRequest.Create(requestUri);
+                ftpWebRequest.UseBinary = true;
+                FtpWebRequest ftpWebRequest2 = (FtpWebRequest)WebRequest.Create(requestUri);
+                ftpWebRequest2.UseBinary = true;
+                ftpWebRequest2.KeepAlive = false;
+                if (ifCredential)
+                {
+                    ftpWebRequest.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
+                    ftpWebRequest2.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
+                }
+                ftpWebRequest.Method = "SIZE";
+                FtpWebResponse ftpWebResponse2 = (FtpWebResponse)ftpWebRequest.GetResponse();
+                long contentLength = ftpWebResponse2.ContentLength;
+                ftpWebResponse2.Close();
+                ftpWebRequest2.Method = "RETR";
+                ftpWebResponse = (FtpWebResponse)ftpWebRequest2.GetResponse();
+                stream = ftpWebResponse.GetResponseStream();
+                if (updateProgress != null)
+                    updateProgress(0, (int)contentLength);
+                long num = 0L;
+                int num2 = 2048;
+                byte[] buffer = new byte[num2];
+                for (int num3 = stream.Read(buffer, 0, num2); num3 > 0; num3 = stream.Read(buffer, 0, num2))
+                {
+                    num = num3 + num;
+                    fileStream.Write(buffer, 0, num3);
+                    if (updateProgress != null)
+                        updateProgress((int)num, (int)contentLength);
+                }
+                stream.Close();
+                fileStream.Close();
+                ftpWebResponse.Close();
+                return true;
+            }
+            catch (Exception)
+            {
+                return false;
+            }
+            finally
+            {
+                stream.Close();
+                fileStream.Close();
+                ftpWebResponse.Close();
+            }
+        }
+
+        public static bool FtpBrokenDownload(string remoteFileName, string localFileName, bool ifCredential, long size, Action<int, int> updateProgress)
+        {
+            Stream stream = null;
+            FtpWebResponse ftpWebResponse = null;
+            FileStream fileStream = null;
+            try
+            {
+                fileStream = new FileStream(localFileName, FileMode.Append);
+                Uri requestUri = new Uri(remoteFileName);
+                FtpWebRequest ftpWebRequest = (FtpWebRequest)WebRequest.Create(requestUri);
+                ftpWebRequest.UseBinary = true;
+                ftpWebRequest.ContentOffset = size;
+                FtpWebRequest ftpWebRequest2 = (FtpWebRequest)WebRequest.Create(requestUri);
+                ftpWebRequest2.UseBinary = true;
+                ftpWebRequest2.KeepAlive = false;
+                ftpWebRequest2.ContentOffset = size;
+                if (ifCredential)
+                {
+                    ftpWebRequest.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
+                    ftpWebRequest2.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
+                }
+                ftpWebRequest.Method = "SIZE";
+                FtpWebResponse ftpWebResponse2 = (FtpWebResponse)ftpWebRequest.GetResponse();
+                long contentLength = ftpWebResponse2.ContentLength;
+                ftpWebResponse2.Close();
+                ftpWebRequest2.Method = "RETR";
+                ftpWebResponse = (FtpWebResponse)ftpWebRequest2.GetResponse();
+                stream = ftpWebResponse.GetResponseStream();
+                if (updateProgress != null)
+                    updateProgress(0, (int)contentLength);
+                long num = 0L;
+                int num2 = 2048;
+                byte[] buffer = new byte[num2];
+                for (int num3 = stream.Read(buffer, 0, num2); num3 > 0; num3 = stream.Read(buffer, 0, num2))
+                {
+                    num = num3 + num;
+                    fileStream.Write(buffer, 0, num3);
+                    if (updateProgress != null)
+                        updateProgress((int)num, (int)contentLength);
+                }
+                stream.Close();
+                fileStream.Close();
+                ftpWebResponse.Close();
+                return true;
+            }
+            catch (Exception)
+            {
+                return false;
+            }
+            finally
+            {
+                stream.Close();
+                fileStream.Close();
+                ftpWebResponse.Close();
+            }
+        }
+
+        public static bool FtpDownload(string remoteFileName, string localFileName, bool ifCredential, bool brokenOpen, Action<int, int> updateProgress)
+        {
+            if (brokenOpen)
+            {
+                try
+                {
+                    long size = 0L;
+                    if (File.Exists(localFileName))
+                    {
+                        using (FileStream fileStream = new FileStream(localFileName, FileMode.Open))
+                        {
+                            size = fileStream.Length;
+                        }
+                    }
+                    return FtpBrokenDownload(remoteFileName, localFileName, ifCredential, size, updateProgress);
+                }
+                catch
+                {
+                    throw;
+                }
+            }
+            return FtpDownload(remoteFileName, localFileName, ifCredential, updateProgress);
+        }
+
+        public static bool FtpUploadFile(string localFullPathName, string remotePath, Action<int, int> updateProgress)
+        {
+            Stream stream = null;
+            FtpWebResponse ftpWebResponse = null;
+            FileStream fileStream = null;
+            try
+            {
+                FileInfo fileInfo = new FileInfo(localFullPathName);
+                Uri requestUri = new Uri(remotePath);
+                FtpWebRequest ftpWebRequest = (FtpWebRequest)WebRequest.Create(requestUri);
+                ftpWebRequest.KeepAlive = false;
+                ftpWebRequest.UseBinary = true;
+                ftpWebRequest.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
+                ftpWebRequest.Method = "STOR";
+                ftpWebRequest.ContentLength = fileInfo.Length;
+                ftpWebResponse = (ftpWebRequest.GetResponse() as FtpWebResponse);
+                ftpWebRequest.ContentLength = fileInfo.Length;
+                int num = 1024;
+                byte[] buffer = new byte[num];
+                fileStream = fileInfo.OpenRead();
+                stream = ftpWebRequest.GetRequestStream();
+                int num2 = fileStream.Read(buffer, 0, num);
+                int num3 = (int)fileInfo.Length;
+                if (updateProgress != null)
+                    updateProgress(0, num3);
+
+                int num4 = 0;
+                while (num2 != 0)
+                {
+                    num4 = num2 + num4;
+                    stream.Write(buffer, 0, num2);
+                    if (updateProgress != null)
+                        updateProgress(num4, num3);
+                    num2 = fileStream.Read(buffer, 0, num);
+                }
+                stream.Close();
+                fileStream.Close();
+                ftpWebResponse.Close();
+                return true;
+            }
+            catch (Exception)
+            {
+                return false;
+            }
+            finally
+            {
+                fileStream.Close();
+                stream.Close();
+                ftpWebResponse.Close();
+            }
+        }
+
+        public static bool FtpUploadBroken(string localFullPath, string remoteFilepath, Action<int, int> updateProgress)
+        {
+            if (remoteFilepath == null)
+            {
+                remoteFilepath = "";
+            }
+            string empty = string.Empty;
+            bool result = true;
+            FileInfo fileInfo = new FileInfo(localFullPath);
+            long length = fileInfo.Length;
+            if (fileInfo.Name.IndexOf("#") == -1)
+            {
+                empty = RemoveSpaces(fileInfo.Name);
+            }
+            else
+            {
+                empty = fileInfo.Name.Replace("#", "#");
+                empty = RemoveSpaces(empty);
+            }
+            long fileSize = GetFileSize(empty, remoteFilepath);
+            if (fileSize >= length)
+            {
+                return false;
+            }
+            long num = fileSize;
+            if (updateProgress != null)
+                updateProgress((int)fileSize, (int)length);
+            string uriString = (remoteFilepath.Length != 0) ? (remoteFilepath + "/" + remoteFilepath + "/" + empty) : (remoteFilepath + "/" + empty);
+            FtpWebRequest ftpWebRequest = (FtpWebRequest)WebRequest.Create(new Uri(uriString));
+            ftpWebRequest.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
+            ftpWebRequest.KeepAlive = false;
+            ftpWebRequest.Method = "APPE";
+            ftpWebRequest.UseBinary = true;
+            ftpWebRequest.ContentLength = fileInfo.Length;
+            int num2 = 2048;
+            byte[] buffer = new byte[num2];
+            FileStream fileStream = fileInfo.OpenRead();
+            Stream stream = null;
+            try
+            {
+                stream = ftpWebRequest.GetRequestStream();
+                fileStream.Seek(fileSize, SeekOrigin.Begin);
+                int num3 = fileStream.Read(buffer, 0, num2);
+                while (num3 != 0)
+                {
+                    stream.Write(buffer, 0, num3);
+                    num3 = fileStream.Read(buffer, 0, num2);
+                    num += num3;
+                    if (updateProgress != null)
+                        updateProgress((int)num, (int)length);
+                }
+                stream.Close();
+                fileStream.Close();
+            }
+            catch
+            {
+                result = false;
+                throw;
+            }
+            finally
+            {
+                fileStream.Close();
+                stream.Close();
+            }
+            return result;
+        }
+
+        private static string RemoveSpaces(string str)
+        {
+            string text = "";
+            CharEnumerator enumerator = str.GetEnumerator();
+            while (enumerator.MoveNext())
+            {
+                byte[] array = new byte[1];
+                array = Encoding.ASCII.GetBytes(enumerator.Current.ToString());
+                int num = array[0];
+                if (num != 32)
+                {
+                    text += enumerator.Current.ToString();
+                }
+            }
+            string text2 = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString();
+            return text.Split('.')[text.Split('.').Length - 2] + "." + text.Split('.')[text.Split('.').Length - 1];
+        }
+
+        public static long GetFileSize(string filename, string remoteFilepath)
+        {
+            try
+            {
+                if (remoteFilepath.Length == 0)
+                {
+                    return 0L;
+                }
+                FtpWebRequest ftpWebRequest = (FtpWebRequest)WebRequest.Create(remoteFilepath);
+                ftpWebRequest.KeepAlive = false;
+                ftpWebRequest.UseBinary = true;
+                ftpWebRequest.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
+                ftpWebRequest.Method = "SIZE";
+                FtpWebResponse ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse();
+                return ftpWebResponse.ContentLength;
+            }
+            catch
+            {
+                return 0L;
+            }
+        }
+    }
+
+
+}

+ 324 - 0
.svn/pristine/2e/2e9da1e884ff968afe2029660323b6c9c49eedb1.svn-base

@@ -0,0 +1,324 @@
+using System;
+using System.Threading;
+using System.Collections;
+using System.Reflection;
+
+using Core.Mes.IBaseInterface;
+
+namespace Core.Mes.ServerFrameWork
+{
+	/// <summary>
+	/// 容器型服务的统一接口
+	/// </summary>
+	public class IServerPool : IServerBase
+	{
+		#region IServerBase 成员
+
+		public string Description
+		{
+			get
+			{
+				// TODO:  添加 IServerPool.Description getter 实现
+				return null;
+			}
+		}
+
+		private Hashtable _dbManager = null;
+		public Hashtable DBManagerList
+		{
+			get{return _dbManager;}
+			set{_dbManager = value;}
+		}
+
+		private Hashtable _htComponent = new Hashtable();
+		public Hashtable HtComponent
+		{
+			get { return _htComponent;}
+			set { _htComponent = value;}
+		}
+
+		#endregion
+
+		#region IDisposable 成员
+
+		public void Dispose()
+		{
+			System.Collections.IEnumerator ie = this.HtComponent.GetEnumerator() ;
+
+			while(ie.MoveNext())
+			{
+				try
+				{
+					System.Collections.DictionaryEntry de = (DictionaryEntry)ie.Current;
+					DisposeClass((Hashtable)de.Value,0);
+					DisposeClass((Hashtable)de.Value,1);
+				}
+				catch{}
+			}
+		}
+		private void DisposeClass(Hashtable ht, int index)
+		{
+			try
+			{
+				ArrayList al = ht[index] as ArrayList;
+				int count = al.Count ;
+				for(int i = 0; i < al.Count ; i++)
+				{
+					try
+					{
+						((IComponent)al[0]).Dispose();
+					}
+					catch{}
+				}
+			}
+			catch{}
+		}
+
+		
+
+		//=======================================================
+		// 加载单个类,并按最小副本数生成多个类的实例
+		//	classPoolHash 0--闲列表	1-忙列表	2--最小副本数	3--最大副本数
+		//=======================================================
+		public void LoadClass(Type moduleType, string dataBaseName)
+		{	
+			try
+			{
+				string className = moduleType.FullName;
+				//== 反射类
+				IComponent module  = (IComponent)Activator.CreateInstance(moduleType);
+				module.DBName = dataBaseName;
+				module.DBManagerList  = this.DBManagerList;
+				
+				
+				int maxCopyValue = module.maxValue;
+				int minCopyValue = module.minValue;
+
+				Hashtable classPoolHash = (Hashtable)HtComponent[className];
+
+				if(classPoolHash == null)
+				{
+					classPoolHash = new Hashtable();
+					HtComponent.Add(className, classPoolHash);
+				}
+			
+				//存储每个类的空闲列表
+                ArrayList freeList = classPoolHash[0] as ArrayList;
+				if(freeList == null)
+				{
+					freeList = new ArrayList();
+					classPoolHash.Add(0,freeList);
+				}
+
+				//存储一个空忙列表
+                ArrayList busyList = classPoolHash[1] as ArrayList;
+				if(busyList==null)
+				{
+					busyList=new ArrayList();
+					classPoolHash.Add(1,busyList);
+				}
+
+				//加入最小副本数个副本到空闲列表
+				freeList.Add(module);
+			
+				if (minCopyValue < 1) minCopyValue = 1;
+				
+				for(int i=0; i<minCopyValue-1; i++)
+				{
+					IComponent classObj = (IComponent)Activator.CreateInstance(moduleType); 
+					
+					classObj.DBName = dataBaseName;
+					classObj.DBManagerList = this.DBManagerList;
+					
+					freeList.Add(classObj);
+				}
+
+				//加入最大,最小副本值
+				classPoolHash.Add(2,maxCopyValue);
+				classPoolHash.Add(3,minCopyValue);
+			}
+			catch (Exception ex)
+			{
+				Console.WriteLine(ex.Message);
+			}
+		}
+		#endregion
+
+		private string _serverName = "";
+		public string ServerName
+		{
+			get { return _serverName; }
+			set { _serverName = value; }
+		}
+		private string _assemblyName = "";
+		public string AssemblyName
+		{
+			get { return _assemblyName; }
+			set { _assemblyName = value; }
+		}
+
+		public ReturnObject HandleMethod(string className, string methodName, object[] args)
+		{
+			//查找对应的业务组件子服务
+			Result structObj = this.searchObject(className);		
+			
+			if (structObj.busy.Equals("Error"))
+			{	
+				//无此所访问的类
+				return new ReturnObject(null,10003,"未找到请求的类!");
+			}
+			else if (structObj.busy.Equals("Wait"))
+			{	
+				//达到最大访问限制,等待,超过规定时间放弃
+				int i=1;
+				while(structObj.busy.Equals("Wait"))
+				{
+					if ((i++)>30)
+					{
+						//3秒后放弃,超时返回
+						return new ReturnObject(null,10001,"服务正忙,请稍后再试!");
+					}
+					Thread.Sleep(100);					
+					structObj = this.searchObject(className);	
+				}
+			}
+
+			//得到正确的副本后...
+			
+			//执行方法
+			Type type = structObj.obj.GetType();
+			MethodInfo mthod=type.GetMethod(methodName);
+			object myReturnObj;
+
+			if(mthod==null)
+			{
+				myReturnObj = new ReturnObject(null,10002,"未找到方法,请检查方法名是否正确!");
+			}
+			else
+			{
+				try
+				{
+					
+                    myReturnObj = mthod.Invoke(structObj.obj,args);
+				}
+				catch (Exception ex)
+				{
+					myReturnObj = new ReturnObject(null, ex.Message);
+				}
+			}
+			
+			//释放副本
+			this.realeasObject(className,structObj.obj as IComponent);
+			
+			if (myReturnObj.GetType().Equals(typeof(ReturnObject)))
+				return (ReturnObject)myReturnObj;
+			else
+				return new ReturnObject(myReturnObj,10005,"未按指定的类型定义返回值!");
+			
+		}
+		private Result searchObject(string className)
+		{
+			string busy="Success";
+			string err="";
+
+			Hashtable poolHash=(Hashtable)this.HtComponent[className];
+				
+			if(poolHash==null)
+			{
+				busy="Error";
+				err="no the class";
+				Result result=new Result(busy,err,null);
+				return result;
+			}
+			lock(poolHash)
+			{
+				//取出空闲和忙列表
+                ArrayList frList  = poolHash[0] as ArrayList;
+                ArrayList bsyList = poolHash[1] as ArrayList;
+				if(bsyList==null)
+				{
+					bsyList=new ArrayList();
+					poolHash.Add(1,bsyList);
+				}
+				//如果无空闲副本,且忙列表超过最大副本数目,等待后重新请求
+				//否则返回空闲副本
+				if(frList.Count>0)
+				{
+					IComponent temp=(IComponent)frList[0];
+					
+					bsyList.Add(temp);
+					frList.RemoveAt(0);
+					Result result=new Result(busy,err,temp);
+						
+					return result;
+				
+				}
+				//最大,等待
+				if(bsyList.Count==Convert.ToInt16(poolHash[2]))
+				{
+					busy="Wait";
+					Result result=new Result(busy,err,null);
+					return result;
+				}
+				//创建并返回新副本
+			
+				if(bsyList.Count<Convert.ToInt16(poolHash[2]))
+				{	
+					Assembly ab=Assembly.Load(this.AssemblyName);
+					Type tp=ab.GetType(className);
+					IComponent newObj=(IComponent)Activator.CreateInstance(tp); 
+					
+					bsyList.Add(newObj);
+					Result result=new Result(busy,err,newObj);
+					return result;
+				}			
+				return new Result("","",null);
+			}
+		}
+        public string realeasObject(string className, IComponent busyObj)
+        {
+            string err = "success";
+
+            Hashtable poolHash = (Hashtable)this.HtComponent[className];
+
+            if (poolHash == null)
+            {
+                err = "no the class";
+                return err;
+            }
+            lock (poolHash)
+            {
+                //移入空闲列表
+                ArrayList frList = poolHash[0] as ArrayList;
+                ArrayList bsyList = poolHash[1] as ArrayList;
+                //如果空闲副本数目大于最小副本数目,销毁生存期较长副本
+                if (frList.Count > Convert.ToInt16(poolHash[3]))
+                {
+                    bsyList.Remove(busyObj);
+                    busyObj.Dispose();
+                    busyObj = null;
+                    return err;
+                }
+
+                frList.Add(busyObj);
+                bsyList.Remove(busyObj);
+                return err;
+            }
+        }
+
+
+		public struct Result
+		{
+			public string busy;
+			public string err;
+			public object  obj;
+			
+			public Result(string busy,string err,object obj)
+			{
+				this.busy=busy;
+				this.err=err;
+				this.obj=obj;
+			}
+		}
+	}
+}

+ 55 - 0
.svn/pristine/2f/2fe6d07be6718de56d5c9e0f599f78f578343b72.svn-base

@@ -0,0 +1,55 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <LastOpenVersion>7.10.3077</LastOpenVersion>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ReferencePath>E:\Code\SERVER\</ReferencePath>
+    <CopyProjectDestinationFolder>
+    </CopyProjectDestinationFolder>
+    <CopyProjectUncPath>
+    </CopyProjectUncPath>
+    <CopyProjectOption>0</CopyProjectOption>
+    <ProjectView>ProjectFiles</ProjectView>
+    <ProjectTrust>0</ProjectTrust>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <EnableASPDebugging>false</EnableASPDebugging>
+    <EnableASPXDebugging>false</EnableASPXDebugging>
+    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
+    <EnableSQLServerDebugging>false</EnableSQLServerDebugging>
+    <RemoteDebugEnabled>false</RemoteDebugEnabled>
+    <RemoteDebugMachine>
+    </RemoteDebugMachine>
+    <StartAction>Program</StartAction>
+    <StartArguments>log</StartArguments>
+    <StartPage>
+    </StartPage>
+    <StartProgram>D:\Code\SERVER\Core.Mes.ServerManager.exe</StartProgram>
+    <StartURL>
+    </StartURL>
+    <StartWorkingDirectory>
+    </StartWorkingDirectory>
+    <StartWithIE>false</StartWithIE>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <EnableASPDebugging>false</EnableASPDebugging>
+    <EnableASPXDebugging>false</EnableASPXDebugging>
+    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
+    <EnableSQLServerDebugging>false</EnableSQLServerDebugging>
+    <RemoteDebugEnabled>false</RemoteDebugEnabled>
+    <RemoteDebugMachine>
+    </RemoteDebugMachine>
+    <StartAction>Project</StartAction>
+    <StartArguments>
+    </StartArguments>
+    <StartPage>
+    </StartPage>
+    <StartProgram>
+    </StartProgram>
+    <StartURL>
+    </StartURL>
+    <StartWorkingDirectory>
+    </StartWorkingDirectory>
+    <StartWithIE>false</StartWithIE>
+  </PropertyGroup>
+</Project>

+ 948 - 0
.svn/pristine/31/312024cf5c5c8085aceaf5477fdb786d87004d37.svn-base

@@ -0,0 +1,948 @@
+using System;
+using System.IO;
+using System.Xml;
+using System.Data;
+using System.Collections;
+using System.Data.OracleClient;
+using Core.Mes.IBaseInterface;
+using Core.Mes.ServerFrameWork;
+
+namespace Core.Mes.ServerCommon
+{
+    /// <summary>
+    /// Class1 的摘要说明。
+    /// </summary>
+    public class UserInfoManager : IComponent
+    {
+        public UserInfoManager()
+        {
+
+        }
+       
+
+        #region "	用户登录	"
+        public ReturnObject GetPurviewInfo(string userID, string passwd, string hostname, string ipaddress)
+        {
+            lock (this)
+            {
+                string err = "";
+
+                DataRow dr = GetPurviewRow(userID, passwd, out err);
+
+                if (err != "")
+                {
+                    return new ReturnObject(null, err);
+                }
+                if (dr == null || dr["MEMO"] == null)
+                    return new ReturnObject(null, 10009, "用户名或密码错误!");
+                UserInfo useInfo = new UserInfo();
+
+                useInfo = SetUserInfo(dr);
+                return new ReturnObject(useInfo);
+            }
+        }
+        private DataRow GetPurviewRow(string userID, string passwd, out string err)
+        {
+            string sqlstr = "SELECT A.*, B.MEMO, C.NAME, C.BB, C.BC, B.ROLENAME, C.DEPARTMENTID,"
+                      + " D.DEPARTMENTNAME FROM CXUSER.UAM_AUTHORIZATION A, CXUSER.UAM_ROLE B, CXUSER.UAM_USER C, CXUSER.UAM_DEPARTMENT D"
+                      + " WHERE A.USERID = C.USERID AND A.ROLEID = B.ROLEID AND C.DEPARTMENTID=D.DEPARTMENTID AND "
+                //+" UPPER(LOGINID) = UPPER('" + userID + "') AND UPPER(PASSWD) = UPPER('" + PasswdSecurity(passwd) + "')";
+                      + " UPPER(A.LOGINID) = UPPER('" + userID + "') AND UPPER(PASSWD) = '" + PasswdSecurity(passwd) + "'";
+
+            err = "";
+
+            System.Data.DataSet ds = this.DBManager.ExecuteQuery(sqlstr, out err);
+
+            if (err != "") return null;
+
+            if (ds.Tables[0].Rows.Count == 0)
+            {
+                err = "用户名或密码错误!"; return null;
+            }
+            System.Data.DataRow dr = ds.Tables[0].Rows[0];
+
+            return dr;
+        }
+        private XmlDocument ReadXmlDoc(string fileName)
+        {
+            XmlDocument doc = new XmlDocument();
+
+            try
+            {
+                doc.Load(@"CA\" + fileName);
+
+                return doc;
+            }
+
+            catch
+            {
+                return null;
+            }
+        }
+
+        private UserInfo SetUserInfo(DataRow dr)
+        {
+            UserInfo info;
+
+            try
+            {
+                info = new UserInfo();
+                info.LoginID = dr["LOGINID"].ToString();
+                info.UserID = dr["USERID"].ToString();
+                info.UserDepID = this.GetNoNullStr(dr["DEPARTMENTID"]);
+                info.UserDepName = this.GetNoNullStr(dr["DEPARTMENTNAME"]);
+                info.UserRoleID = this.GetNoNullStr(dr["ROLEID"]);
+                info.UserRoleName = this.GetNoNullStr(dr["ROLENAME"]);
+                if (dr["NAME"] == null || dr["NAME"] == DBNull.Value)
+                    info.UserName = "";
+                else
+                    info.UserName = dr["NAME"].ToString();
+
+                if (dr["BB"] == null || dr["BB"] == DBNull.Value)
+                    info.UserBb = "300305";
+                else
+                    info.UserBb = dr["BB"].ToString();
+
+                if (dr["BC"] == null || dr["BC"] == DBNull.Value)
+                {
+                    info.UserRz = "1";
+                    info.UserBc = "300205";
+                }
+                else
+                {
+                    info.UserRz = dr["BC"].ToString();
+                    info.UserBc = this.GetCurrBc(dr["BC"].ToString());
+                }
+
+                return info;
+            }
+            catch (Exception ex)
+            {
+                throw ex;
+            }
+        }
+        private string GetNoNullStr(object obj)
+        {
+            if (obj == null || obj == DBNull.Value)
+            {
+                return "";
+            }
+            return obj.ToString();
+        }
+
+
+        #region "	登录退出记录	"
+        private void RecodeLoginInfo(string vLoginID, string vUserName, string vUSERHOSTNAME,
+          string vUSERIPADRESS, string vIsLogin)
+        {
+            OracleParameter[] param = new OracleParameter[5];
+            object[] values = new object[5];
+            ArrayList outvalues = new ArrayList();
+
+            param[0] = new System.Data.OracleClient.OracleParameter();
+            param[0].ParameterName = "vLoginID";
+            param[0].DbType = System.Data.DbType.String;
+            param[0].Size = 20;
+
+            param[1] = new System.Data.OracleClient.OracleParameter();
+            param[1].ParameterName = "vUserName";
+            param[1].DbType = System.Data.DbType.String;
+            param[1].Size = 20;
+
+            param[2] = new System.Data.OracleClient.OracleParameter();
+            param[2].ParameterName = "vUSERHOSTNAME";
+            param[2].DbType = System.Data.DbType.String;
+            param[2].Size = 100;
+
+            param[3] = new System.Data.OracleClient.OracleParameter();
+            param[3].ParameterName = "vUSERIPADRESS";
+            param[3].DbType = System.Data.DbType.String;
+            param[3].Size = 20;
+
+            param[4] = new System.Data.OracleClient.OracleParameter();
+            param[4].ParameterName = "vIsLogin";
+            param[4].DbType = System.Data.DbType.String;
+            param[4].Size = 20;
+
+            values[0] = vLoginID;
+            values[1] = vUserName;
+            values[2] = vUSERHOSTNAME;
+            values[3] = vUSERIPADRESS;
+            values[4] = vIsLogin;
+
+            string strOut = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery("pub_useroperatemanager.pPub_Logininfo_Add", CommandType.StoredProcedure, param, values, ref outvalues, out strOut);
+
+            }
+            catch { }
+        }
+
+
+        public ReturnObject RecodeExitInfo(string vLoginID, string vUserName, string vUSERHOSTNAME,
+          string vUSERIPADRESS)
+        {
+            RecodeLoginInfo(vLoginID, vUserName, vUSERHOSTNAME, vUSERIPADRESS, "退出");
+
+            return new ReturnObject();
+        }
+        public ReturnObject RecodeOperateInfo(string vLoginID, string vUserName, string vUSERHOSTNAME,
+          string vUSERIPADRESS, string vOPERATETYPE, string vOPERATEOBJECT, string vREMARK)
+        {
+            OracleParameter[] param = new OracleParameter[7];
+            object[] values = new object[7];
+            ArrayList outvalues = new ArrayList();
+
+            param[0] = new System.Data.OracleClient.OracleParameter();
+            param[0].ParameterName = "vLoginID";
+            param[0].DbType = System.Data.DbType.String;
+            param[0].Size = 20;
+
+            param[1] = new System.Data.OracleClient.OracleParameter();
+            param[1].ParameterName = "vUserName";
+            param[1].DbType = System.Data.DbType.String;
+            param[1].Size = 20;
+
+            param[2] = new System.Data.OracleClient.OracleParameter();
+            param[2].ParameterName = "vUSERHOSTNAME";
+            param[2].DbType = System.Data.DbType.String;
+            param[2].Size = 100;
+
+            param[3] = new System.Data.OracleClient.OracleParameter();
+            param[3].ParameterName = "vUSERIPADRESS";
+            param[3].DbType = System.Data.DbType.String;
+            param[3].Size = 20;
+
+            param[4] = new System.Data.OracleClient.OracleParameter();
+            param[4].ParameterName = "vOPERATETYPE";
+            param[4].DbType = System.Data.DbType.String;
+            param[4].Size = 50;
+
+            param[5] = new System.Data.OracleClient.OracleParameter();
+            param[5].ParameterName = "vOPERATEOBJECT";
+            param[5].DbType = System.Data.DbType.String;
+            param[5].Size = 100;
+
+            param[6] = new System.Data.OracleClient.OracleParameter();
+            param[6].ParameterName = "vREMARK";
+            param[6].DbType = System.Data.DbType.String;
+            param[6].Size = 200;
+
+            values[0] = vLoginID;
+            values[1] = vUserName;
+            values[2] = vUSERHOSTNAME;
+            values[3] = vUSERIPADRESS;
+            values[4] = vOPERATETYPE;
+            values[5] = vOPERATEOBJECT;
+            values[6] = vREMARK;
+
+            string strOut = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery("pub_useroperatemanager.pPub_UserOperate_Add", CommandType.StoredProcedure, param, values, ref outvalues, out strOut);
+
+            }
+            catch { }
+
+            return new ReturnObject();
+        }
+        #endregion
+
+        #region "	班次、班别	"
+        private string GetCurrBc(string bc)
+        {
+            System.DateTime now = System.DateTime.Now;
+            switch (bc.Trim())
+            {
+                case "3":	//三班制
+                    //早
+                    if (now >= new DateTime(now.Year, now.Month, now.Day, 8, 0, 0) &&
+                      now < new DateTime(now.Year, now.Month, now.Day, 16, 0, 0))
+                        return "300201";
+                    //中
+                    if (now >= new DateTime(now.Year, now.Month, now.Day, 16, 0, 0) &&
+                      now <= new DateTime(now.Year, now.Month, now.Day, 23, 59, 59))
+                        return "300202";
+                    //晚				
+                    if (now >= new DateTime(now.Year, now.Month, now.Day, 0, 0, 0) &&
+                      now < new DateTime(now.Year, now.Month, now.Day, 8, 0, 0))
+                        return "300203";
+                    break;
+                case "2":	//两班制
+                    //早
+                    if (now >= new DateTime(now.Year, now.Month, now.Day, 8, 0, 0) &&
+                      now < new DateTime(now.Year, now.Month, now.Day, 20, 0, 0))
+                        return "300201";
+                    else
+                        return "300203";
+            }
+            return "300205";
+        }
+        public ReturnObject GetBz(string strWhere)
+        {
+            string sqlstr = string.Format("select ID_ BASECODE, NAME_ BASENAME from scm_base_info where SORT_CODE = '{0}' order by 1", strWhere);
+
+            string strOut = "";
+
+            try
+            {
+                DataSet ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+
+                return new ReturnObject(ds, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(new DataSet(), ex.Message + "\n" + strOut);
+            }
+        }
+
+        public ReturnObject SetBz(string userID, string Bc, string Bb)
+        {
+            string sqlstr = string.Format(" update UAM_USER set BC = '{0}', BB = '{1}' where USERID = '{2}' ",
+              Bc, Bb, userID);
+
+            string strOut = "";
+
+            try
+            {
+                int i = this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+
+                return new ReturnObject(i, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(new DataSet(), ex.Message + "\n" + strOut);
+            }
+        }
+        #endregion
+
+        private string PasswdSecurity(string pwd)
+        {
+            return pwd.ToUpper();
+        }
+        public ReturnObject GetServerList()
+        {
+            if (!File.Exists("MesServer.xml"))
+            {
+                return new ReturnObject(null, "未找到服务配置文件!");
+            }
+
+            DataSet ds = new DataSet();
+            ds.ReadXml("MesServer.xml");
+
+            if (ds == null || ds.Tables.Count == 0)
+                return new ReturnObject(null, "配置文件设置错误!");
+
+            ds.AcceptChanges();
+
+            return new ReturnObject(ds);
+        }
+        public ReturnObject ChangePasswd(string loginID, string passwd, string passwdNew)
+        {
+            string sqlstr = string.Format(" update UAM_AUTHORIZATION set passwd = '{2}' where loginid = '{0}' and passwd = '{1}' ",
+              loginID, passwd, passwdNew);
+
+            string strOut = "";
+
+            try
+            {
+                int i = this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+
+                return new ReturnObject(i, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(new DataSet(), ex.Message + "\n" + strOut);
+            }
+        }
+        #endregion
+
+        #region "	消息	"
+        public ReturnObject GetUserMessage()
+        {
+            string sqlstr = "select MESSAGE, PROMULGATOR,EDITTIME, PRI_ from PUB_USERMESSAGE where ISVALID = '0' and	 > sysdate order by edittime desc ";
+
+            string strOut = "";
+
+            try
+            {
+                DataSet ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+
+                return new ReturnObject(ds, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(new DataSet(), ex.Message + "\n" + strOut);
+            }
+        }
+        public ReturnObject GetMessage(string strWhere)
+        {
+            string sqlstr = string.Format("select * from pub_message where GETFLAG <> '1' and SENDPERSONCODE = '{0}' ", strWhere);
+
+            string strOut = "";
+
+            try
+            {
+                DataSet ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+
+                return new ReturnObject(ds, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(new DataSet(), ex.Message + "\n" + strOut);
+            }
+        }
+
+        public ReturnObject SendMessage(string vSendPerson, string vSendPersonCode, string vInfo, string vGetPerson)
+        {
+            string strOut = "";
+
+            OracleParameter[] param = new OracleParameter[7];
+            object[] values = new object[7];
+            ArrayList outvalues = new ArrayList();
+            strOut = "";
+
+            param[0] = new OracleParameter();
+            param[0].ParameterName = "vID";
+            param[0].Direction = System.Data.ParameterDirection.Input;
+            param[0].DbType = System.Data.DbType.String;
+            param[0].Size = 20;
+
+            param[1] = new OracleParameter();
+            param[1].ParameterName = "vSendPerson";
+            param[1].Direction = System.Data.ParameterDirection.Input;
+            param[1].DbType = System.Data.DbType.String;
+            param[1].Size = 20;
+
+            param[2] = new OracleParameter();
+            param[2].ParameterName = "vSendPersonCode";
+            param[2].Direction = System.Data.ParameterDirection.Input;
+            param[2].DbType = System.Data.DbType.String;
+            param[2].Size = 20;
+
+            param[3] = new OracleParameter();
+            param[3].ParameterName = "vInfo";
+            param[3].Direction = System.Data.ParameterDirection.Input;
+            param[3].DbType = System.Data.DbType.String;
+            param[3].Size = 200;
+
+            param[4] = new OracleParameter();
+            param[4].ParameterName = "vGetPerson";
+            param[4].Direction = System.Data.ParameterDirection.Input;
+            param[4].DbType = System.Data.DbType.String;
+            param[4].Size = 20;
+
+            param[5] = new System.Data.OracleClient.OracleParameter();
+            param[5].ParameterName = "vRESULT";
+            param[5].Direction = System.Data.ParameterDirection.Output;
+            param[5].DbType = System.Data.DbType.Int16;
+
+            param[6] = new System.Data.OracleClient.OracleParameter();
+            param[6].ParameterName = "vMESSAGE";
+            param[6].Direction = System.Data.ParameterDirection.Output;
+            param[6].DbType = System.Data.DbType.String;
+            param[6].Size = 200;
+
+            values[0] = System.Guid.NewGuid().ToString();
+            values[1] = vSendPerson;
+            values[2] = vSendPersonCode;
+            values[3] = vInfo;
+            values[4] = vGetPerson;
+            values[5] = 0;
+            values[6] = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery("pub_MessageManager.pPub_Message_Send", CommandType.StoredProcedure, param, values, ref outvalues, out strOut);
+
+                return new ReturnObject(outvalues, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(-1, ex.Message + "\n" + strOut);
+            }
+        }
+        public ReturnObject AffirmMessage(string vID)
+        {
+            string strOut = "";
+
+            OracleParameter[] param = new OracleParameter[3];
+            object[] values = new object[3];
+            ArrayList outvalues = new ArrayList();
+            strOut = "";
+
+            param[0] = new OracleParameter();
+            param[0].ParameterName = "vID";
+            param[0].Direction = System.Data.ParameterDirection.Input;
+            param[0].DbType = System.Data.DbType.String;
+            param[0].Size = 20;
+
+            param[1] = new System.Data.OracleClient.OracleParameter();
+            param[1].ParameterName = "vRESULT";
+            param[1].Direction = System.Data.ParameterDirection.Output;
+            param[1].DbType = System.Data.DbType.Int16;
+
+            param[2] = new System.Data.OracleClient.OracleParameter();
+            param[2].ParameterName = "vMESSAGE";
+            param[2].Direction = System.Data.ParameterDirection.Output;
+            param[2].DbType = System.Data.DbType.String;
+            param[2].Size = 200;
+
+            values[0] = vID;
+            values[1] = 0;
+            values[2] = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery("pub_MessageManager.pPub_Message_Affirm", CommandType.StoredProcedure, param, values, ref outvalues, out strOut);
+
+                return new ReturnObject(outvalues, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(-1, ex.Message + "\n" + strOut);
+            }
+        }
+        #endregion
+
+        #region "	override	"
+        public override int maxValue
+        {
+            get
+            {
+                return 30;
+            }
+        }
+        public override int minValue
+        {
+            get
+            {
+                return 20;
+            }
+        }
+        #endregion
+
+        #region		权限设置
+        public ReturnObject selectPT_MenuInfo()
+        {
+            string sqlstr = "SELECT ID_,CAPTION,PARENTID,XH FROM CXUSER.PT_MENUINFO ORDER BY PARENTID,XH,REMARK";
+            string err = "";
+            DataSet dset = DBManager.ExecuteQuery(sqlstr, out err);
+            return new ReturnObject(dset, err);
+        }
+        public ReturnObject updatePT_MenuPos(DataTable dt)
+        {
+            try
+            {
+                string err = "";
+                bool success = DBManager.UpdateTable(dt, "SELECT ID_,CAPTION,PARENTID,XH FROM CXUSER.PT_MENUINFO WHERE XH IS NOT NULL", out err);
+                return new ReturnObject(null, err);
+            }
+            catch (Exception ee)
+            {
+                return new ReturnObject(null, ee.Message);
+            }
+        }
+
+        public ReturnObject GetPt_menuinfo(string strWhere)
+        {
+            string sqlstr = string.Format("SELECT * FROM CXUSER.PT_MENUINFO WHERE 1=1 {0} ORDER BY CATEGORY, CAPTION", strWhere);
+
+            string strOut = "";
+
+            try
+            {
+                DataSet ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+
+                return new ReturnObject(ds, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(new DataSet(), ex.Message + "\n" + strOut);
+            }
+        }
+        public ReturnObject InsertPt_menuinfo(string vkey, string vCategory, string vCaption, string vRemark, string vType)
+        {
+            string strOut = "";
+            DataSet ds = null;
+            string strID = "";
+            object obj = null;
+            int iCount = 0;
+
+            string sqlstr = string.Format("SELECT COUNT(1) FROM CXUSER.PT_MENUINFO WHERE KEY_ = '{0}'", vkey);
+            try
+            {
+                ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+            obj = ds.Tables[0].Rows[0][0];
+            if (obj == null || obj == DBNull.Value)
+            {
+                iCount = 0;
+            }
+            else
+            {
+                iCount = Convert.ToInt32(Convert.ToInt32(obj));
+            }
+            if (iCount > 0)
+            {
+                return new ReturnObject(null, "键值重复!请重新输入!");
+            }
+
+            sqlstr = "SELECT MAX(TO_NUMBER(ID_)) FROM CXUSER.PT_MENUINFO ";
+
+
+            try
+            {
+                ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+            obj = ds.Tables[0].Rows[0][0];
+            if (obj == null || obj == DBNull.Value)
+            {
+                strID = "0";
+            }
+            else
+            {
+                strID = Convert.ToString(Convert.ToInt32(obj) + 1);
+            }
+            sqlstr = string.Format("INSERT INTO CXUSER.PT_MENUINFO (ID_, KEY_, CATEGORY, CAPTION, REMARK, TYPE) "
+                + " VALUES "
+                + " ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}') ", strID, vkey, vCategory, vCaption, vRemark, vType);
+
+            strOut = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+
+                return new ReturnObject(strID, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+        }
+        public ReturnObject UpdatePt_menuinfo(string vID, string vkey, string vCategory, string vCaption, string vRemark, string vType)
+        {
+            string sqlstr = string.Format("UPDATE CXUSER.PT_MENUINFO SET KEY_ = '{0}', CATEGORY = '{1}', "
+                  + " CAPTION = '{2}', REMARK = '{3}', TYPE='{4}' WHERE ID_ = '{5}'  ",
+                  vkey, vCategory, vCaption, vRemark, vType, vID);
+
+            string strOut = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+
+                return new ReturnObject(null, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+        }
+        public ReturnObject DeletePt_menuinfo(string vID)
+        {
+            string sqlstr = string.Format("SELECT COUNT(1) FROM CXUSER.PT_USERMENUINFO WHERE MENUID = '{0}' ", vID);
+            string strOut = "";
+            try
+            {
+                DataSet dset = DBManager.ExecuteQuery(sqlstr, out strOut);
+                if (int.Parse(dset.Tables[0].Rows[0][0].ToString()) > 0)
+                    return new ReturnObject(null, "该菜单已被配置到角色菜单中去,请先在角色菜单中删除!");
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+
+            sqlstr = string.Format("SELECT COUNT(1) FROM CXUSER.PT_MENUINFO WHERE PARENTID = '{0}' ", vID);
+            strOut = "";
+            try
+            {
+                DataSet dset = DBManager.ExecuteQuery(sqlstr, out strOut);
+                if (int.Parse(dset.Tables[0].Rows[0][0].ToString()) > 0)
+                    return new ReturnObject(null, "该菜单其下还有子菜单,不可直接删除!");
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+
+            sqlstr = string.Format("DELETE CXUSER.PT_MENUINFO WHERE ID_ = '{0}' ", vID);
+            strOut = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+            sqlstr = string.Format("DELETE CXUSER.PT_USERMENUINFO WHERE MENUID = '{0}' ", vID);
+
+            strOut = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+                return new ReturnObject(null, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+        }
+        public ReturnObject PlastPt_menuinfo(string oldRole, string newRole)
+        {
+            string sqlstr = string.Format("DELETE CXUSER.PT_USERMENUINFO WHERE ROLEID = '{0}' ", newRole);
+
+            string strOut = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+
+            sqlstr = "SELECT MAX(TO_NUMBER(ID_)) FROM CXUSER.PT_USERMENUINFO ";
+            int iCount = 0;
+            DataSet ds = null;
+
+            try
+            {
+                ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+            object obj = ds.Tables[0].Rows[0][0];
+            if (obj == null || obj == DBNull.Value)
+            {
+                iCount = 0;
+            }
+            else
+            {
+                iCount = Convert.ToInt32(obj);
+            }
+            sqlstr = string.Format("SELECT * FROM CXUSER.PT_USERMENUINFO WHERE ROLEID = '{0}'", oldRole);
+            try
+            {
+                ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
+            {
+                iCount = iCount + 1;
+                sqlstr = string.Format("INSERT INTO CXUSER.PT_USERMENUINFO (ID_, ROLEID, MENUID, SETINFO) "
+                    + " VALUES "
+                    + " ('{0}', '{1}', '{2}', '{3}' ) ", Convert.ToString(iCount),
+                    newRole, ds.Tables[0].Rows[i]["MENUID"].ToString(),
+                    ds.Tables[0].Rows[i]["SETINFO"].ToString());
+
+                strOut = "";
+
+                try
+                {
+                    this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+                }
+                catch (Exception ex)
+                {
+                    return new ReturnObject(null, ex.Message + "\n" + strOut);
+                }
+            }
+            return new ReturnObject(null);
+        }
+        public ReturnObject SavePt_usermenuinfo(string vRole, ArrayList arMenu, ArrayList arSet)
+        {
+            string sqlstr = string.Format("DELETE CXUSER.PT_USERMENUINFO WHERE ROLEID = '{0}' ", vRole);
+
+            string strOut = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+
+            sqlstr = "SELECT MAX(TO_NUMBER(ID_)) FROM CXUSER.PT_USERMENUINFO ";
+            int iCount = 0;
+            DataSet ds = null;
+
+            try
+            {
+                ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+            object obj = ds.Tables[0].Rows[0][0];
+            if (obj == null || obj == DBNull.Value)
+            {
+                iCount = 0;
+            }
+            else
+            {
+                iCount = Convert.ToInt32(obj);
+            }
+
+            for (int i = 0; i < arMenu.Count; i++)
+            {
+                iCount = iCount + 1;
+                sqlstr = string.Format("INSERT INTO CXUSER.PT_USERMENUINFO (ID_, ROLEID, MENUID, SETINFO) "
+                    + " VALUES "
+                    + " ('{0}', '{1}', '{2}', '{3}' ) ", Convert.ToString(iCount),
+                    vRole, arMenu[i].ToString(), arSet[i].ToString());
+
+                strOut = "";
+
+                try
+                {
+                    this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+                }
+                catch (Exception ex)
+                {
+                    return new ReturnObject(null, ex.Message + "\n" + strOut);
+                }
+            }
+            return new ReturnObject(null, "");
+        }
+        public ReturnObject GetUser_Uam_Role(string DptID)
+        {
+            try
+            {
+                string err = "";
+                string sql = "SELECT ROLEID, ROLENAME FROM CXUSER.UAM_ROLE WHERE DEPARTMENTID IN(" + DptID + ") ORDER BY ROLENAME ";
+                DataSet ds = this.DBManager.ExecuteQuery(sql, out err);
+                if (ds != null && ds.Tables[0].Rows.Count > 0)
+                {
+                    return new ReturnObject(ds);
+                }
+                return new ReturnObject(null, err);
+            }
+            catch (System.Exception ex)
+            {
+                return new ReturnObject(null, ex.ToString());
+            }
+        }
+        public ReturnObject GetUam_role()
+        {
+            string sqlstr = "SELECT ROLEID, ROLENAME FROM UAM_ROLE ORDER BY ROLENAME ";
+
+            string strOut = "";
+
+            try
+            {
+                DataSet ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+                if (ds != null && ds.Tables[0].Rows.Count > 0)
+                {
+                    return new ReturnObject(ds, strOut);
+                }
+                else
+                {
+                    return new ReturnObject(null, strOut);
+                }
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+        }
+        public ReturnObject GetPurviewTree(string strWhere)
+        {
+            string sqlstr = string.Format("SELECT ID_, MENUID, (SELECT CAPTION FROM CXUSER.PT_MENUINFO WHERE ID_ = MENUID) MENUNAME, "
+                  + " SETINFO FROM CXUSER.PT_USERMENUINFO WHERE 1=1 {0} ORDER BY SETINFO ", strWhere);
+
+            string strOut = "";
+
+            try
+            {
+                DataSet ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+
+                return new ReturnObject(ds, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(new DataSet(), ex.Message + "\n" + strOut);
+            }
+        }
+        public ReturnObject GetBuildMenuInfo(string strWhere)
+        {
+            string sqlstr = string.Format("SELECT C.KEY_, C.CATEGORY, C.CAPTION, C.TYPE,B.SETINFO "
+                + " FROM CXUSER.UAM_AUTHORIZATION A, CXUSER.PT_USERMENUINFO B, CXUSER.PT_MENUINFO C "
+                + " WHERE LOGINID = '{0}' AND A.ROLEID = B.ROLEID AND B.MENUID = C.ID_ ORDER BY B.SETINFO ", strWhere);
+
+            string strOut = "";
+
+            try
+            {
+                DataSet ds = this.DBManager.ExecuteQuery(sqlstr, out strOut);
+
+                return new ReturnObject(ds, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(new DataSet(), ex.Message + "\n" + strOut);
+            }
+        }
+        #endregion
+
+        #region "系统监听"
+
+        public ReturnObject MesSystemListener()
+        {
+            string sqlstr = "select sysdate from dual";
+
+            string strOut = "";
+
+            try
+            {
+                this.DBManager.ExecuteNonQuery(sqlstr, out strOut);
+
+                return new ReturnObject(null, strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+        }
+        #endregion
+
+        public ReturnObject getDBSrvTime()
+        {
+            string strOut = "";
+            try
+            {
+                DataSet ds = this.DBManager.ExecuteQuery("SELECT SYSDATE FROM DUAL", out strOut);
+
+                return new ReturnObject(ds.Tables[0].Rows[0][0], strOut);
+            }
+            catch (Exception ex)
+            {
+                return new ReturnObject(null, ex.Message + "\n" + strOut);
+            }
+        }
+    }
+}

+ 56 - 0
.svn/pristine/32/32431ec124421fef62929582cab59ba1ab2ebfa6.svn-base

@@ -0,0 +1,56 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <LastOpenVersion>7.10.3077</LastOpenVersion>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ReferencePath>D:\Code\SERVER\</ReferencePath>
+    <CopyProjectDestinationFolder>
+    </CopyProjectDestinationFolder>
+    <CopyProjectUncPath>
+    </CopyProjectUncPath>
+    <CopyProjectOption>0</CopyProjectOption>
+    <ProjectView>ProjectFiles</ProjectView>
+    <ProjectTrust>0</ProjectTrust>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <EnableASPDebugging>false</EnableASPDebugging>
+    <EnableASPXDebugging>false</EnableASPXDebugging>
+    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
+    <EnableSQLServerDebugging>false</EnableSQLServerDebugging>
+    <RemoteDebugEnabled>false</RemoteDebugEnabled>
+    <RemoteDebugMachine>
+    </RemoteDebugMachine>
+    <StartAction>Program</StartAction>
+    <StartArguments>
+    </StartArguments>
+    <StartPage>
+    </StartPage>
+    <StartProgram>D:\Source_2005\Server\Core.Mes.ServerManager.exe</StartProgram>
+    <StartURL>
+    </StartURL>
+    <StartWorkingDirectory>
+    </StartWorkingDirectory>
+    <StartWithIE>true</StartWithIE>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <EnableASPDebugging>false</EnableASPDebugging>
+    <EnableASPXDebugging>false</EnableASPXDebugging>
+    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
+    <EnableSQLServerDebugging>false</EnableSQLServerDebugging>
+    <RemoteDebugEnabled>false</RemoteDebugEnabled>
+    <RemoteDebugMachine>
+    </RemoteDebugMachine>
+    <StartAction>Project</StartAction>
+    <StartArguments>
+    </StartArguments>
+    <StartPage>
+    </StartPage>
+    <StartProgram>
+    </StartProgram>
+    <StartURL>
+    </StartURL>
+    <StartWorkingDirectory>
+    </StartWorkingDirectory>
+    <StartWithIE>true</StartWithIE>
+  </PropertyGroup>
+</Project>

+ 153 - 0
.svn/pristine/32/327d03ef8f20c0ebb4de51d83a2059210d485643.svn-base

@@ -0,0 +1,153 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{B724E4EE-31DB-420F-B417-C54470FCFEBA}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Core.Mes.ServerManager</RootNamespace>
+    <AssemblyName>Core.Mes.ServerManager</AssemblyName>
+    <StartupObject>Core.Mes.ServerManager.Program</StartupObject>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <ApplicationRevision>0</ApplicationRevision>
+    <IsWebBootstrapper>true</IsWebBootstrapper>
+    <ApplicationIcon>Resources\XG.ico</ApplicationIcon>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+    <PublishUrl>http://localhost/Core.Mes.ServerManager/</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Web</InstallFrom>
+    <UpdateEnabled>true</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\server\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget>x86</PlatformTarget>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\..\server\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Core.Mes.IBaseInterface, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\产销平台DLL\Server\Core.Mes.IBaseInterface.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Core.Mes.ServerFrameWork, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Infragistics.Shared.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinGrid.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Microsoft.VisualBasic" />
+    <Reference Include="System" />
+    <Reference Include="System.configuration" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Design" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Management" />
+    <Reference Include="System.Runtime.Remoting" />
+    <Reference Include="System.Runtime.Serialization.Formatters.Soap" />
+    <Reference Include="System.Web" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Windows.Forms.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
+    <Reference Include="System.Windows.Forms.DataVisualization.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ClsServerMain.cs" />
+    <Compile Include="ExitMessageFilter.cs" />
+    <Compile Include="FrmSeverMain.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="FrmSeverMain.resx">
+      <DependentUpon>FrmSeverMain.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\licenses.licx" />
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <Compile Include="RemotingGate.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Core.Mes.Common\Core.Mes.Common.csproj">
+      <Project>{BBAFC889-ADFA-4063-BCA0-9CD6C61570E7}</Project>
+      <Name>Core.Mes.Common</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\Core.Mes.ServerCommon\Core.Mes.ServerCommon.csproj">
+      <Project>{6A96B64B-879F-463B-9360-ED5B7AFAAAE5}</Project>
+      <Name>Core.Mes.ServerCommon</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\DBManager\DBManager.csproj">
+      <Project>{860513AD-2743-4EB8-9406-01FEEA175348}</Project>
+      <Name>DBManager</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\DBProxy\DBProxy.csproj">
+      <Project>{F6CD9B3C-806A-4009-ACAB-935FF453A13C}</Project>
+      <Name>DBProxy</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 2.0</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\XG.ico" />
+    <None Include="Resources\16.ico" />
+    <Content Include="XG.ico" />
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 1914 - 0
.svn/pristine/33/334b014d76842216f6e6c0d70f5e1d62ee02b671.svn-base

@@ -0,0 +1,1914 @@
+using System;
+using System.Data;
+using System.Drawing;
+using System.Diagnostics;
+using System.IO;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using Infragistics.Win.UltraWinGrid;
+using Infragistics.Win.UltraWinEditors ;
+
+using Core.Mes.ClientFrameWork;
+using Core.Mes.IBaseInterface;
+//using Core.Mes.ServerFrameWork;
+
+namespace Core.Mes.ClientPurviewManager
+{
+	/// <summary>
+	/// FrmAuthorization 的摘要说明。
+	/// </summary>
+  public class FrmAuthorization : Core.Mes.ClientFrameWork.FrmBase
+  {
+    private System.Windows.Forms.Panel panel1;
+    private Infragistics.Win.UltraWinToolbars.UltraToolbarsManager ultraToolbarsManager1;
+    private System.Windows.Forms.Panel FrmAuthorization_Fill_Panel;
+    private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Left;
+    private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Right;
+    private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Top;
+    private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Bottom;
+    private Infragistics.Win.UltraWinGrid.UltraGrid ultraGrid1;
+    private System.Windows.Forms.Panel panel2;
+    private Infragistics.Win.UltraWinEditors.UltraCheckEditor ultraCheckEditor1;
+    private Infragistics.Win.UltraWinEditors.UltraTextEditor ultraTextEditor1;
+    private Infragistics.Win.UltraWinEditors.UltraCheckEditor ultraCheckEditor2;
+    private Infragistics.Win.UltraWinEditors.UltraComboEditor ultraComboEditor1;
+    private Infragistics.Win.Misc.UltraButton ultraButton1;
+    private Infragistics.Win.Misc.UltraButton ultraButton2;
+    private Infragistics.Win.Misc.UltraExpandableGroupBox ultraExpandableGroupBox1;
+    private Infragistics.Win.Misc.UltraExpandableGroupBoxPanel ultraExpandableGroupBoxPanel1;
+    private System.Windows.Forms.Panel panel3;
+    private Infragistics.Win.UltraWinEditors.UltraComboEditor ultraComboEditor3;
+    private Infragistics.Win.UltraWinEditors.UltraTextEditor ultraTextEditor4;
+    private Infragistics.Win.UltraWinEditors.UltraComboEditor ultraComboEditor2;
+    private Infragistics.Win.UltraWinEditors.UltraTextEditor ultraTextEditor2;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel4;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel3;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel2;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel1;
+    private System.Windows.Forms.ToolTip toolTip1;
+    private Infragistics.Win.UltraWinGrid.ExcelExport.UltraGridExcelExporter ultraGridExcelExporter1;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel5;
+    private UltraTextEditor ultLoginID;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel6;
+    private System.ComponentModel.IContainer components;
+
+    public FrmAuthorization()
+    {
+      //
+      // Windows 窗体设计器支持所必需的
+      //
+      InitializeComponent();
+
+      //
+      // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
+      //
+    }
+
+    /// <summary>
+    /// 清理所有正在使用的资源。
+    /// </summary>
+    protected override void Dispose(bool disposing)
+    {
+      if (disposing)
+      {
+        if (components != null)
+        {
+          components.Dispose();
+        }
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows 窗体设计器生成的代码
+    /// <summary>
+    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
+    /// 此方法的内容。
+    /// </summary>
+    private void InitializeComponent()
+    {
+      this.components = new System.ComponentModel.Container();
+      Infragistics.Win.Appearance appearance121 = new Infragistics.Win.Appearance();
+      Infragistics.Win.UltraWinToolbars.UltraToolbar ultraToolbar2 = new Infragistics.Win.UltraWinToolbars.UltraToolbar("aubar");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool15 = new Infragistics.Win.UltraWinToolbars.ButtonTool("query");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool16 = new Infragistics.Win.UltraWinToolbars.ButtonTool("add");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool17 = new Infragistics.Win.UltraWinToolbars.ButtonTool("edit");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool18 = new Infragistics.Win.UltraWinToolbars.ButtonTool("del");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool19 = new Infragistics.Win.UltraWinToolbars.ButtonTool("close");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool20 = new Infragistics.Win.UltraWinToolbars.ButtonTool("back");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool21 = new Infragistics.Win.UltraWinToolbars.ButtonTool("leadin");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool22 = new Infragistics.Win.UltraWinToolbars.ButtonTool("add");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool23 = new Infragistics.Win.UltraWinToolbars.ButtonTool("edit");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool24 = new Infragistics.Win.UltraWinToolbars.ButtonTool("del");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool25 = new Infragistics.Win.UltraWinToolbars.ButtonTool("query");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool26 = new Infragistics.Win.UltraWinToolbars.ButtonTool("close");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool27 = new Infragistics.Win.UltraWinToolbars.ButtonTool("back");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool28 = new Infragistics.Win.UltraWinToolbars.ButtonTool("leadin");
+      Infragistics.Win.Appearance appearance122 = new Infragistics.Win.Appearance();
+      Infragistics.Win.UltraWinGrid.UltraGridBand ultraGridBand6 = new Infragistics.Win.UltraWinGrid.UltraGridBand("Band 0", -1);
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn36 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("LOGINID");
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn37 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("ROLEID");
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn38 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("USERID");
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn39 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("PASSWD");
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn40 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("DEPARTMENTID");
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn41 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("WORKPOS");
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn42 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("ROLEMEMO");
+      Infragistics.Win.Appearance appearance123 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance124 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance125 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance126 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance127 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance128 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance129 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance130 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance131 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance132 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance133 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance134 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance135 = new Infragistics.Win.Appearance();
+      Infragistics.Win.UltraWinEditors.EditorButton editorButton16 = new Infragistics.Win.UltraWinEditors.EditorButton("part");
+      Infragistics.Win.Appearance appearance136 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance137 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance138 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance139 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance140 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance141 = new Infragistics.Win.Appearance();
+      Infragistics.Win.UltraWinEditors.EditorButton editorButton17 = new Infragistics.Win.UltraWinEditors.EditorButton("part");
+      Infragistics.Win.Appearance appearance142 = new Infragistics.Win.Appearance();
+      Infragistics.Win.UltraWinEditors.EditorButton editorButton18 = new Infragistics.Win.UltraWinEditors.EditorButton("SET");
+      Infragistics.Win.Appearance appearance143 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance144 = new Infragistics.Win.Appearance();
+      this.ultraTextEditor4 = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+      this.panel1 = new System.Windows.Forms.Panel();
+      this._panel1_Toolbars_Dock_Area_Left = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+      this.ultraToolbarsManager1 = new Infragistics.Win.UltraWinToolbars.UltraToolbarsManager(this.components);
+      this._panel1_Toolbars_Dock_Area_Right = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+      this._panel1_Toolbars_Dock_Area_Top = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+      this._panel1_Toolbars_Dock_Area_Bottom = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+      this.FrmAuthorization_Fill_Panel = new System.Windows.Forms.Panel();
+      this.ultraGrid1 = new Infragistics.Win.UltraWinGrid.UltraGrid();
+      this.ultraExpandableGroupBox1 = new Infragistics.Win.Misc.UltraExpandableGroupBox();
+      this.ultraExpandableGroupBoxPanel1 = new Infragistics.Win.Misc.UltraExpandableGroupBoxPanel();
+      this.panel3 = new System.Windows.Forms.Panel();
+      this.ultraLabel5 = new Infragistics.Win.Misc.UltraLabel();
+      this.ultraComboEditor3 = new Infragistics.Win.UltraWinEditors.UltraComboEditor();
+      this.ultraComboEditor2 = new Infragistics.Win.UltraWinEditors.UltraComboEditor();
+      this.ultraTextEditor2 = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+      this.ultraLabel4 = new Infragistics.Win.Misc.UltraLabel();
+      this.ultraLabel3 = new Infragistics.Win.Misc.UltraLabel();
+      this.ultraLabel2 = new Infragistics.Win.Misc.UltraLabel();
+      this.ultraLabel1 = new Infragistics.Win.Misc.UltraLabel();
+      this.panel2 = new System.Windows.Forms.Panel();
+      this.ultraButton2 = new Infragistics.Win.Misc.UltraButton();
+      this.ultraButton1 = new Infragistics.Win.Misc.UltraButton();
+      this.ultraComboEditor1 = new Infragistics.Win.UltraWinEditors.UltraComboEditor();
+      this.ultraCheckEditor2 = new Infragistics.Win.UltraWinEditors.UltraCheckEditor();
+      this.ultraTextEditor1 = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+      this.ultraCheckEditor1 = new Infragistics.Win.UltraWinEditors.UltraCheckEditor();
+      this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+      this.ultraGridExcelExporter1 = new Infragistics.Win.UltraWinGrid.ExcelExport.UltraGridExcelExporter();
+      this.ultLoginID = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+      this.ultraLabel6 = new Infragistics.Win.Misc.UltraLabel();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor4)).BeginInit();
+      this.panel1.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraToolbarsManager1)).BeginInit();
+      this.FrmAuthorization_Fill_Panel.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraGrid1)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraExpandableGroupBox1)).BeginInit();
+      this.ultraExpandableGroupBox1.SuspendLayout();
+      this.ultraExpandableGroupBoxPanel1.SuspendLayout();
+      this.panel3.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraComboEditor3)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraComboEditor2)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor2)).BeginInit();
+      this.panel2.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraComboEditor1)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor1)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultLoginID)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // ultraTextEditor4
+      // 
+      appearance121.BackColor = System.Drawing.Color.LightCyan;
+      this.ultraTextEditor4.Appearance = appearance121;
+      this.ultraTextEditor4.AutoSize = true;
+      this.ultraTextEditor4.BackColor = System.Drawing.Color.LightCyan;
+      this.ultraTextEditor4.FlatMode = true;
+      this.ultraTextEditor4.Location = new System.Drawing.Point(422, 23);
+      this.ultraTextEditor4.Name = "ultraTextEditor4";
+      this.ultraTextEditor4.PasswordChar = '*';
+      this.ultraTextEditor4.Size = new System.Drawing.Size(224, 19);
+      this.ultraTextEditor4.TabIndex = 15;
+      // 
+      // panel1
+      // 
+      this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Left);
+      this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Right);
+      this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Top);
+      this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Bottom);
+      this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
+      this.panel1.Location = new System.Drawing.Point(0, 0);
+      this.panel1.Name = "panel1";
+      this.panel1.Size = new System.Drawing.Size(927, 32);
+      this.panel1.TabIndex = 0;
+      // 
+      // _panel1_Toolbars_Dock_Area_Left
+      // 
+      this._panel1_Toolbars_Dock_Area_Left.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+      this._panel1_Toolbars_Dock_Area_Left.BackColor = System.Drawing.SystemColors.Control;
+      this._panel1_Toolbars_Dock_Area_Left.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Left;
+      this._panel1_Toolbars_Dock_Area_Left.ForeColor = System.Drawing.SystemColors.ControlText;
+      this._panel1_Toolbars_Dock_Area_Left.Location = new System.Drawing.Point(0, 27);
+      this._panel1_Toolbars_Dock_Area_Left.Name = "_panel1_Toolbars_Dock_Area_Left";
+      this._panel1_Toolbars_Dock_Area_Left.Size = new System.Drawing.Size(0, 5);
+      this._panel1_Toolbars_Dock_Area_Left.ToolbarsManager = this.ultraToolbarsManager1;
+      // 
+      // ultraToolbarsManager1
+      // 
+      this.ultraToolbarsManager1.DesignerFlags = 1;
+      this.ultraToolbarsManager1.DockWithinContainer = this.panel1;
+      this.ultraToolbarsManager1.FlatMode = true;
+      this.ultraToolbarsManager1.ShowQuickCustomizeButton = false;
+      this.ultraToolbarsManager1.Style = Infragistics.Win.UltraWinToolbars.ToolbarStyle.VisualStudio2005;
+      ultraToolbar2.DockedColumn = 0;
+      ultraToolbar2.DockedRow = 0;
+      ultraToolbar2.Text = "aubar";
+      buttonTool15.InstanceProps.IsFirstInGroup = true;
+      buttonTool16.InstanceProps.IsFirstInGroup = true;
+      buttonTool17.InstanceProps.IsFirstInGroup = true;
+      buttonTool18.InstanceProps.IsFirstInGroup = true;
+      buttonTool19.InstanceProps.IsFirstInGroup = true;
+      buttonTool20.InstanceProps.IsFirstInGroup = true;
+      buttonTool21.InstanceProps.IsFirstInGroup = true;
+      ultraToolbar2.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] {
+            buttonTool15,
+            buttonTool16,
+            buttonTool17,
+            buttonTool18,
+            buttonTool19,
+            buttonTool20,
+            buttonTool21});
+      this.ultraToolbarsManager1.Toolbars.AddRange(new Infragistics.Win.UltraWinToolbars.UltraToolbar[] {
+            ultraToolbar2});
+      buttonTool22.SharedProps.Caption = "新增(&A)";
+      buttonTool22.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      buttonTool23.SharedProps.Caption = "修改(&U)";
+      buttonTool23.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      buttonTool23.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlU;
+      buttonTool24.SharedProps.Caption = "删除(&D)";
+      buttonTool24.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      buttonTool25.SharedProps.Caption = "查询(&Q)";
+      buttonTool25.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      buttonTool26.SharedProps.Caption = "关闭(&E)";
+      buttonTool26.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      buttonTool26.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlE;
+      buttonTool27.SharedProps.Caption = "返回(&B)";
+      buttonTool27.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      buttonTool27.SharedProps.Visible = false;
+      buttonTool28.SharedProps.Caption = "导入Excel";
+      buttonTool28.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      this.ultraToolbarsManager1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] {
+            buttonTool22,
+            buttonTool23,
+            buttonTool24,
+            buttonTool25,
+            buttonTool26,
+            buttonTool27,
+            buttonTool28});
+      this.ultraToolbarsManager1.ToolClick += new Infragistics.Win.UltraWinToolbars.ToolClickEventHandler(this.ultraToolbarsManager1_ToolClick);
+      // 
+      // _panel1_Toolbars_Dock_Area_Right
+      // 
+      this._panel1_Toolbars_Dock_Area_Right.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+      this._panel1_Toolbars_Dock_Area_Right.BackColor = System.Drawing.SystemColors.Control;
+      this._panel1_Toolbars_Dock_Area_Right.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Right;
+      this._panel1_Toolbars_Dock_Area_Right.ForeColor = System.Drawing.SystemColors.ControlText;
+      this._panel1_Toolbars_Dock_Area_Right.Location = new System.Drawing.Point(927, 27);
+      this._panel1_Toolbars_Dock_Area_Right.Name = "_panel1_Toolbars_Dock_Area_Right";
+      this._panel1_Toolbars_Dock_Area_Right.Size = new System.Drawing.Size(0, 5);
+      this._panel1_Toolbars_Dock_Area_Right.ToolbarsManager = this.ultraToolbarsManager1;
+      // 
+      // _panel1_Toolbars_Dock_Area_Top
+      // 
+      this._panel1_Toolbars_Dock_Area_Top.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+      this._panel1_Toolbars_Dock_Area_Top.BackColor = System.Drawing.SystemColors.Control;
+      this._panel1_Toolbars_Dock_Area_Top.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Top;
+      this._panel1_Toolbars_Dock_Area_Top.ForeColor = System.Drawing.SystemColors.ControlText;
+      this._panel1_Toolbars_Dock_Area_Top.Location = new System.Drawing.Point(0, 0);
+      this._panel1_Toolbars_Dock_Area_Top.Name = "_panel1_Toolbars_Dock_Area_Top";
+      this._panel1_Toolbars_Dock_Area_Top.Size = new System.Drawing.Size(927, 27);
+      this._panel1_Toolbars_Dock_Area_Top.ToolbarsManager = this.ultraToolbarsManager1;
+      // 
+      // _panel1_Toolbars_Dock_Area_Bottom
+      // 
+      this._panel1_Toolbars_Dock_Area_Bottom.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+      this._panel1_Toolbars_Dock_Area_Bottom.BackColor = System.Drawing.SystemColors.Control;
+      this._panel1_Toolbars_Dock_Area_Bottom.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Bottom;
+      this._panel1_Toolbars_Dock_Area_Bottom.ForeColor = System.Drawing.SystemColors.ControlText;
+      this._panel1_Toolbars_Dock_Area_Bottom.Location = new System.Drawing.Point(0, 32);
+      this._panel1_Toolbars_Dock_Area_Bottom.Name = "_panel1_Toolbars_Dock_Area_Bottom";
+      this._panel1_Toolbars_Dock_Area_Bottom.Size = new System.Drawing.Size(927, 0);
+      this._panel1_Toolbars_Dock_Area_Bottom.ToolbarsManager = this.ultraToolbarsManager1;
+      // 
+      // FrmAuthorization_Fill_Panel
+      // 
+      this.FrmAuthorization_Fill_Panel.Controls.Add(this.ultraGrid1);
+      this.FrmAuthorization_Fill_Panel.Controls.Add(this.ultraExpandableGroupBox1);
+      this.FrmAuthorization_Fill_Panel.Controls.Add(this.panel2);
+      this.FrmAuthorization_Fill_Panel.Controls.Add(this.panel1);
+      this.FrmAuthorization_Fill_Panel.Cursor = System.Windows.Forms.Cursors.Default;
+      this.FrmAuthorization_Fill_Panel.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.FrmAuthorization_Fill_Panel.Location = new System.Drawing.Point(0, 0);
+      this.FrmAuthorization_Fill_Panel.Name = "FrmAuthorization_Fill_Panel";
+      this.FrmAuthorization_Fill_Panel.Size = new System.Drawing.Size(927, 509);
+      this.FrmAuthorization_Fill_Panel.TabIndex = 0;
+      // 
+      // ultraGrid1
+      // 
+      appearance122.BackColor = System.Drawing.SystemColors.Window;
+      appearance122.BorderColor = System.Drawing.SystemColors.InactiveCaption;
+      this.ultraGrid1.DisplayLayout.Appearance = appearance122;
+      ultraGridColumn36.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+      ultraGridColumn36.Header.Caption = "登录帐号";
+      ultraGridColumn36.Header.VisiblePosition = 0;
+      ultraGridColumn36.Width = 80;
+      ultraGridColumn37.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+      ultraGridColumn37.Header.Caption = "角色";
+      ultraGridColumn37.Header.VisiblePosition = 5;
+      ultraGridColumn37.Width = 150;
+      ultraGridColumn38.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+      ultraGridColumn38.Header.Caption = "员工";
+      ultraGridColumn38.Header.VisiblePosition = 2;
+      ultraGridColumn38.Width = 100;
+      ultraGridColumn39.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+      ultraGridColumn39.EditorControl = this.ultraTextEditor4;
+      ultraGridColumn39.Format = "*";
+      ultraGridColumn39.Header.Caption = "登录密码";
+      ultraGridColumn39.Header.VisiblePosition = 1;
+      ultraGridColumn39.Width = 80;
+      ultraGridColumn40.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+      ultraGridColumn40.Header.Caption = "部门";
+      ultraGridColumn40.Header.VisiblePosition = 3;
+      ultraGridColumn40.Width = 150;
+      ultraGridColumn41.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+      ultraGridColumn41.Header.Caption = "岗位";
+      ultraGridColumn41.Header.VisiblePosition = 4;
+      ultraGridColumn41.Width = 100;
+      ultraGridColumn42.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+      ultraGridColumn42.Header.Caption = "角色描述";
+      ultraGridColumn42.Header.VisiblePosition = 6;
+      ultraGridColumn42.Width = 300;
+      ultraGridBand6.Columns.AddRange(new object[] {
+            ultraGridColumn36,
+            ultraGridColumn37,
+            ultraGridColumn38,
+            ultraGridColumn39,
+            ultraGridColumn40,
+            ultraGridColumn41,
+            ultraGridColumn42});
+      this.ultraGrid1.DisplayLayout.BandsSerializer.Add(ultraGridBand6);
+      this.ultraGrid1.DisplayLayout.BorderStyle = Infragistics.Win.UIElementBorderStyle.Solid;
+      this.ultraGrid1.DisplayLayout.CaptionVisible = Infragistics.Win.DefaultableBoolean.False;
+      appearance123.BackColor = System.Drawing.SystemColors.ActiveBorder;
+      appearance123.BackColor2 = System.Drawing.SystemColors.ControlDark;
+      appearance123.BackGradientStyle = Infragistics.Win.GradientStyle.Vertical;
+      appearance123.BorderColor = System.Drawing.SystemColors.Window;
+      this.ultraGrid1.DisplayLayout.GroupByBox.Appearance = appearance123;
+      appearance124.ForeColor = System.Drawing.SystemColors.GrayText;
+      this.ultraGrid1.DisplayLayout.GroupByBox.BandLabelAppearance = appearance124;
+      this.ultraGrid1.DisplayLayout.GroupByBox.BorderStyle = Infragistics.Win.UIElementBorderStyle.Solid;
+      this.ultraGrid1.DisplayLayout.GroupByBox.Hidden = true;
+      appearance125.BackColor = System.Drawing.SystemColors.ControlLightLight;
+      appearance125.BackColor2 = System.Drawing.SystemColors.Control;
+      appearance125.BackGradientStyle = Infragistics.Win.GradientStyle.Horizontal;
+      appearance125.ForeColor = System.Drawing.SystemColors.GrayText;
+      this.ultraGrid1.DisplayLayout.GroupByBox.PromptAppearance = appearance125;
+      this.ultraGrid1.DisplayLayout.MaxColScrollRegions = 1;
+      this.ultraGrid1.DisplayLayout.MaxRowScrollRegions = 1;
+      appearance126.BackColor = System.Drawing.SystemColors.Window;
+      appearance126.ForeColor = System.Drawing.SystemColors.ControlText;
+      this.ultraGrid1.DisplayLayout.Override.ActiveCellAppearance = appearance126;
+      appearance127.BackColor = System.Drawing.SystemColors.Highlight;
+      appearance127.ForeColor = System.Drawing.SystemColors.HighlightText;
+      this.ultraGrid1.DisplayLayout.Override.ActiveRowAppearance = appearance127;
+      this.ultraGrid1.DisplayLayout.Override.BorderStyleCell = Infragistics.Win.UIElementBorderStyle.RaisedSoft;
+      this.ultraGrid1.DisplayLayout.Override.BorderStyleRow = Infragistics.Win.UIElementBorderStyle.Dotted;
+      appearance128.BackColor = System.Drawing.SystemColors.Window;
+      this.ultraGrid1.DisplayLayout.Override.CardAreaAppearance = appearance128;
+      appearance129.BorderColor = System.Drawing.Color.Silver;
+      appearance129.TextTrimming = Infragistics.Win.TextTrimming.EllipsisCharacter;
+      this.ultraGrid1.DisplayLayout.Override.CellAppearance = appearance129;
+      this.ultraGrid1.DisplayLayout.Override.CellClickAction = Infragistics.Win.UltraWinGrid.CellClickAction.EditAndSelectText;
+      this.ultraGrid1.DisplayLayout.Override.CellPadding = 0;
+      appearance130.BackColor = System.Drawing.SystemColors.Control;
+      appearance130.BackColor2 = System.Drawing.SystemColors.ControlDark;
+      appearance130.BackGradientAlignment = Infragistics.Win.GradientAlignment.Element;
+      appearance130.BackGradientStyle = Infragistics.Win.GradientStyle.Horizontal;
+      appearance130.BorderColor = System.Drawing.SystemColors.Window;
+      this.ultraGrid1.DisplayLayout.Override.GroupByRowAppearance = appearance130;
+      appearance131.BackColor = System.Drawing.Color.LightSteelBlue;
+      appearance131.TextHAlign = Infragistics.Win.HAlign.Center;
+      this.ultraGrid1.DisplayLayout.Override.HeaderAppearance = appearance131;
+      this.ultraGrid1.DisplayLayout.Override.HeaderClickAction = Infragistics.Win.UltraWinGrid.HeaderClickAction.SortMulti;
+      this.ultraGrid1.DisplayLayout.Override.HeaderStyle = Infragistics.Win.HeaderStyle.Standard;
+      this.ultraGrid1.DisplayLayout.Override.MinRowHeight = 21;
+      appearance132.BackColor = System.Drawing.SystemColors.Window;
+      appearance132.BorderColor = System.Drawing.Color.Silver;
+      this.ultraGrid1.DisplayLayout.Override.RowAppearance = appearance132;
+      appearance133.BackColor = System.Drawing.Color.LightSteelBlue;
+      this.ultraGrid1.DisplayLayout.Override.RowSelectorAppearance = appearance133;
+      this.ultraGrid1.DisplayLayout.Override.RowSelectorHeaderStyle = Infragistics.Win.UltraWinGrid.RowSelectorHeaderStyle.SeparateElement;
+      this.ultraGrid1.DisplayLayout.Override.RowSelectorNumberStyle = Infragistics.Win.UltraWinGrid.RowSelectorNumberStyle.RowIndex;
+      this.ultraGrid1.DisplayLayout.Override.RowSelectors = Infragistics.Win.DefaultableBoolean.True;
+      appearance134.BackColor = System.Drawing.SystemColors.ControlLight;
+      this.ultraGrid1.DisplayLayout.Override.TemplateAddRowAppearance = appearance134;
+      this.ultraGrid1.DisplayLayout.ScrollBounds = Infragistics.Win.UltraWinGrid.ScrollBounds.ScrollToFill;
+      this.ultraGrid1.DisplayLayout.ScrollStyle = Infragistics.Win.UltraWinGrid.ScrollStyle.Immediate;
+      this.ultraGrid1.DisplayLayout.ViewStyleBand = Infragistics.Win.UltraWinGrid.ViewStyleBand.OutlookGroupBy;
+      this.ultraGrid1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.ultraGrid1.Location = new System.Drawing.Point(0, 80);
+      this.ultraGrid1.Name = "ultraGrid1";
+      this.ultraGrid1.Size = new System.Drawing.Size(927, 317);
+      this.ultraGrid1.TabIndex = 1;
+      this.ultraGrid1.Text = "ultraGrid1";
+      this.ultraGrid1.AfterRowActivate += new System.EventHandler(this.ultraGrid1_AfterRowActivate);
+      // 
+      // ultraExpandableGroupBox1
+      // 
+      this.ultraExpandableGroupBox1.BackColor = System.Drawing.Color.Gainsboro;
+      this.ultraExpandableGroupBox1.Controls.Add(this.ultraExpandableGroupBoxPanel1);
+      this.ultraExpandableGroupBox1.Dock = System.Windows.Forms.DockStyle.Bottom;
+      this.ultraExpandableGroupBox1.ExpandedSize = new System.Drawing.Size(704, 112);
+      this.ultraExpandableGroupBox1.Location = new System.Drawing.Point(0, 397);
+      this.ultraExpandableGroupBox1.Name = "ultraExpandableGroupBox1";
+      this.ultraExpandableGroupBox1.Size = new System.Drawing.Size(927, 112);
+      this.ultraExpandableGroupBox1.SupportThemes = false;
+      this.ultraExpandableGroupBox1.TabIndex = 3;
+      this.ultraExpandableGroupBox1.Text = "编辑区域";
+      this.ultraExpandableGroupBox1.ViewStyle = Infragistics.Win.Misc.GroupBoxViewStyle.Office2003;
+      // 
+      // ultraExpandableGroupBoxPanel1
+      // 
+      this.ultraExpandableGroupBoxPanel1.Controls.Add(this.panel3);
+      this.ultraExpandableGroupBoxPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.ultraExpandableGroupBoxPanel1.Location = new System.Drawing.Point(2, 22);
+      this.ultraExpandableGroupBoxPanel1.Name = "ultraExpandableGroupBoxPanel1";
+      this.ultraExpandableGroupBoxPanel1.Size = new System.Drawing.Size(923, 88);
+      this.ultraExpandableGroupBoxPanel1.TabIndex = 0;
+      // 
+      // panel3
+      // 
+      this.panel3.Controls.Add(this.ultraLabel5);
+      this.panel3.Controls.Add(this.ultraComboEditor3);
+      this.panel3.Controls.Add(this.ultraTextEditor4);
+      this.panel3.Controls.Add(this.ultraComboEditor2);
+      this.panel3.Controls.Add(this.ultraTextEditor2);
+      this.panel3.Controls.Add(this.ultraLabel4);
+      this.panel3.Controls.Add(this.ultraLabel3);
+      this.panel3.Controls.Add(this.ultraLabel2);
+      this.panel3.Controls.Add(this.ultraLabel1);
+      this.panel3.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.panel3.Location = new System.Drawing.Point(0, 0);
+      this.panel3.Name = "panel3";
+      this.panel3.Size = new System.Drawing.Size(923, 88);
+      this.panel3.TabIndex = 0;
+      // 
+      // ultraLabel5
+      // 
+      this.ultraLabel5.Location = new System.Drawing.Point(665, 28);
+      this.ultraLabel5.Name = "ultraLabel5";
+      this.ultraLabel5.Size = new System.Drawing.Size(54, 16);
+      this.ultraLabel5.TabIndex = 17;
+      this.ultraLabel5.Text = "登录密码";
+      this.ultraLabel5.Visible = false;
+      // 
+      // ultraComboEditor3
+      // 
+      appearance135.BackColor = System.Drawing.Color.LightCyan;
+      this.ultraComboEditor3.Appearance = appearance135;
+      this.ultraComboEditor3.AutoSize = true;
+      editorButton16.Key = "part";
+      editorButton16.Text = "...";
+      this.ultraComboEditor3.ButtonsRight.Add(editorButton16);
+      this.ultraComboEditor3.DropDownButtonDisplayStyle = Infragistics.Win.ButtonDisplayStyle.Never;
+      this.ultraComboEditor3.DropDownStyle = Infragistics.Win.DropDownStyle.DropDownList;
+      this.ultraComboEditor3.FlatMode = true;
+      this.ultraComboEditor3.Location = new System.Drawing.Point(168, 56);
+      this.ultraComboEditor3.Name = "ultraComboEditor3";
+      this.ultraComboEditor3.Size = new System.Drawing.Size(152, 19);
+      this.ultraComboEditor3.TabIndex = 16;
+      this.ultraComboEditor3.SelectionChanged += new System.EventHandler(this.ultraComboEditor3_SelectionChanged);
+      this.ultraComboEditor3.EditorButtonClick += new Infragistics.Win.UltraWinEditors.EditorButtonEventHandler(this.ultraComboEditor3_EditorButtonClick_1);
+      // 
+      // ultraComboEditor2
+      // 
+      appearance136.BackColor = System.Drawing.Color.LightCyan;
+      this.ultraComboEditor2.Appearance = appearance136;
+      this.ultraComboEditor2.AutoSize = true;
+      this.ultraComboEditor2.FlatMode = true;
+      this.ultraComboEditor2.Location = new System.Drawing.Point(422, 56);
+      this.ultraComboEditor2.Name = "ultraComboEditor2";
+      this.ultraComboEditor2.Size = new System.Drawing.Size(224, 19);
+      this.ultraComboEditor2.TabIndex = 14;
+      // 
+      // ultraTextEditor2
+      // 
+      appearance137.BackColor = System.Drawing.Color.LightCyan;
+      this.ultraTextEditor2.Appearance = appearance137;
+      this.ultraTextEditor2.AutoSize = true;
+      this.ultraTextEditor2.BackColor = System.Drawing.Color.LightCyan;
+      this.ultraTextEditor2.FlatMode = true;
+      this.ultraTextEditor2.Location = new System.Drawing.Point(168, 23);
+      this.ultraTextEditor2.Name = "ultraTextEditor2";
+      this.ultraTextEditor2.Size = new System.Drawing.Size(152, 19);
+      this.ultraTextEditor2.TabIndex = 13;
+      // 
+      // ultraLabel4
+      // 
+      this.ultraLabel4.Location = new System.Drawing.Point(364, 24);
+      this.ultraLabel4.Name = "ultraLabel4";
+      this.ultraLabel4.Size = new System.Drawing.Size(54, 16);
+      this.ultraLabel4.TabIndex = 12;
+      this.ultraLabel4.Text = "登录密码";
+      // 
+      // ultraLabel3
+      // 
+      this.ultraLabel3.Location = new System.Drawing.Point(110, 57);
+      this.ultraLabel3.Name = "ultraLabel3";
+      this.ultraLabel3.Size = new System.Drawing.Size(54, 16);
+      this.ultraLabel3.TabIndex = 11;
+      this.ultraLabel3.Text = "用户姓名";
+      // 
+      // ultraLabel2
+      // 
+      appearance138.BackColor = System.Drawing.Color.Gainsboro;
+      this.ultraLabel2.Appearance = appearance138;
+      this.ultraLabel2.Location = new System.Drawing.Point(389, 57);
+      this.ultraLabel2.Name = "ultraLabel2";
+      this.ultraLabel2.Size = new System.Drawing.Size(29, 16);
+      this.ultraLabel2.TabIndex = 10;
+      this.ultraLabel2.Text = "角色";
+      // 
+      // ultraLabel1
+      // 
+      appearance139.BackColor = System.Drawing.Color.Gainsboro;
+      this.ultraLabel1.Appearance = appearance139;
+      this.ultraLabel1.Location = new System.Drawing.Point(110, 24);
+      this.ultraLabel1.Name = "ultraLabel1";
+      this.ultraLabel1.Size = new System.Drawing.Size(54, 16);
+      this.ultraLabel1.TabIndex = 9;
+      this.ultraLabel1.Text = "登录帐号";
+      // 
+      // panel2
+      // 
+      this.panel2.BackColor = System.Drawing.Color.Gainsboro;
+      this.panel2.Controls.Add(this.ultLoginID);
+      this.panel2.Controls.Add(this.ultraLabel6);
+      this.panel2.Controls.Add(this.ultraButton2);
+      this.panel2.Controls.Add(this.ultraButton1);
+      this.panel2.Controls.Add(this.ultraComboEditor1);
+      this.panel2.Controls.Add(this.ultraCheckEditor2);
+      this.panel2.Controls.Add(this.ultraTextEditor1);
+      this.panel2.Controls.Add(this.ultraCheckEditor1);
+      this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
+      this.panel2.Location = new System.Drawing.Point(0, 32);
+      this.panel2.Name = "panel2";
+      this.panel2.Size = new System.Drawing.Size(927, 48);
+      this.panel2.TabIndex = 2;
+      // 
+      // ultraButton2
+      // 
+      this.ultraButton2.Location = new System.Drawing.Point(571, 17);
+      this.ultraButton2.Name = "ultraButton2";
+      this.ultraButton2.Size = new System.Drawing.Size(29, 19);
+      this.ultraButton2.TabIndex = 5;
+      this.ultraButton2.Text = ">>";
+      this.toolTip1.SetToolTip(this.ultraButton2, "角色维护");
+      this.ultraButton2.Click += new System.EventHandler(this.ultraButton2_Click);
+      // 
+      // ultraButton1
+      // 
+      this.ultraButton1.Location = new System.Drawing.Point(272, 17);
+      this.ultraButton1.Name = "ultraButton1";
+      this.ultraButton1.Size = new System.Drawing.Size(29, 19);
+      this.ultraButton1.TabIndex = 2;
+      this.ultraButton1.Text = ">>";
+      this.toolTip1.SetToolTip(this.ultraButton1, "部门维护");
+      this.ultraButton1.Visible = false;
+      this.ultraButton1.Click += new System.EventHandler(this.ultraButton1_Click);
+      // 
+      // ultraComboEditor1
+      // 
+      appearance140.BackColor = System.Drawing.Color.LightCyan;
+      this.ultraComboEditor1.Appearance = appearance140;
+      this.ultraComboEditor1.AutoSize = true;
+      this.ultraComboEditor1.Enabled = false;
+      this.ultraComboEditor1.FlatMode = true;
+      this.ultraComboEditor1.Location = new System.Drawing.Point(387, 17);
+      this.ultraComboEditor1.Name = "ultraComboEditor1";
+      this.ultraComboEditor1.Size = new System.Drawing.Size(182, 19);
+      this.ultraComboEditor1.TabIndex = 4;
+      // 
+      // ultraCheckEditor2
+      // 
+      this.ultraCheckEditor2.Location = new System.Drawing.Point(331, 17);
+      this.ultraCheckEditor2.Name = "ultraCheckEditor2";
+      this.ultraCheckEditor2.Size = new System.Drawing.Size(48, 20);
+      this.ultraCheckEditor2.TabIndex = 3;
+      this.ultraCheckEditor2.Text = "角色";
+      this.ultraCheckEditor2.CheckedChanged += new System.EventHandler(this.ultraCheckEditor2_CheckedChanged);
+      // 
+      // ultraTextEditor1
+      // 
+      appearance141.BackColor = System.Drawing.Color.LightCyan;
+      this.ultraTextEditor1.Appearance = appearance141;
+      this.ultraTextEditor1.AutoSize = true;
+      this.ultraTextEditor1.BackColor = System.Drawing.Color.LightCyan;
+      editorButton17.ButtonStyle = Infragistics.Win.UIElementButtonStyle.VisualStudio2005Button;
+      editorButton17.Key = "part";
+      editorButton17.Text = "…";
+      this.ultraTextEditor1.ButtonsRight.Add(editorButton17);
+      this.ultraTextEditor1.Enabled = false;
+      this.ultraTextEditor1.FlatMode = true;
+      this.ultraTextEditor1.Location = new System.Drawing.Point(88, 17);
+      this.ultraTextEditor1.Name = "ultraTextEditor1";
+      this.ultraTextEditor1.ReadOnly = true;
+      this.ultraTextEditor1.Size = new System.Drawing.Size(182, 19);
+      this.ultraTextEditor1.TabIndex = 1;
+      this.ultraTextEditor1.EditorButtonClick += new Infragistics.Win.UltraWinEditors.EditorButtonEventHandler(this.ultraTextEditor1_EditorButtonClick_1);
+      // 
+      // ultraCheckEditor1
+      // 
+      this.ultraCheckEditor1.Location = new System.Drawing.Point(32, 17);
+      this.ultraCheckEditor1.Name = "ultraCheckEditor1";
+      this.ultraCheckEditor1.Size = new System.Drawing.Size(48, 20);
+      this.ultraCheckEditor1.TabIndex = 0;
+      this.ultraCheckEditor1.Text = "部门";
+      this.ultraCheckEditor1.CheckedChanged += new System.EventHandler(this.ultraCheckEditor1_CheckedChanged);
+      // 
+      // ultLoginID
+      // 
+      appearance142.BackColor = System.Drawing.Color.LightCyan;
+      this.ultLoginID.Appearance = appearance142;
+      this.ultLoginID.AutoSize = true;
+      this.ultLoginID.BackColor = System.Drawing.Color.LightCyan;
+      appearance143.TextHAlign = Infragistics.Win.HAlign.Center;
+      appearance143.TextVAlign = Infragistics.Win.VAlign.Middle;
+      editorButton18.Appearance = appearance143;
+      editorButton18.ButtonStyle = Infragistics.Win.UIElementButtonStyle.VisualStudio2005Button;
+      editorButton18.Key = "SET";
+      editorButton18.Text = "";
+      this.ultLoginID.ButtonsRight.Add(editorButton18);
+      this.ultLoginID.FlatMode = true;
+      this.ultLoginID.Location = new System.Drawing.Point(688, 17);
+      this.ultLoginID.Name = "ultLoginID";
+      this.ultLoginID.Size = new System.Drawing.Size(152, 19);
+      this.ultLoginID.TabIndex = 6;
+      this.ultLoginID.EditorButtonClick += new Infragistics.Win.UltraWinEditors.EditorButtonEventHandler(this.ultLoginID_EditorButtonClick);
+      // 
+      // ultraLabel6
+      // 
+      appearance144.BackColor = System.Drawing.Color.Gainsboro;
+      this.ultraLabel6.Appearance = appearance144;
+      this.ultraLabel6.Location = new System.Drawing.Point(630, 21);
+      this.ultraLabel6.Name = "ultraLabel6";
+      this.ultraLabel6.Size = new System.Drawing.Size(54, 16);
+      this.ultraLabel6.TabIndex = 0;
+      this.ultraLabel6.Text = "登录帐号";
+      // 
+      // FrmAuthorization
+      // 
+      this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
+      this.ClientSize = new System.Drawing.Size(927, 509);
+      this.Controls.Add(this.FrmAuthorization_Fill_Panel);
+      this.Name = "FrmAuthorization";
+      this.Text = "FrmAuthorization";
+      this.Load += new System.EventHandler(this.FrmAuthorization_Load);
+      ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor4)).EndInit();
+      this.panel1.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.ultraToolbarsManager1)).EndInit();
+      this.FrmAuthorization_Fill_Panel.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.ultraGrid1)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraExpandableGroupBox1)).EndInit();
+      this.ultraExpandableGroupBox1.ResumeLayout(false);
+      this.ultraExpandableGroupBoxPanel1.ResumeLayout(false);
+      this.panel3.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.ultraComboEditor3)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraComboEditor2)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor2)).EndInit();
+      this.panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.ultraComboEditor1)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor1)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultLoginID)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+    #endregion
+
+    #region "	Variable	"
+    private DataSet _departmentData;
+    public TreeView _departmentTree;
+    private string _selectPartSQL;
+
+    private DataSet _roleData;
+    private string _selectRoleSQL;
+
+    private DataSet _auData;
+    private string _selectAuSQL;
+
+    private DataSet _userData;
+    DataSet _validUserData;
+    private DataSet _fitRole;
+
+    private string userid;
+    private string roleid;
+    private bool IsAdminFlag = false;
+
+    public string StrUser = "";
+
+    public string operDepart = "";
+    public string operDepartname = "";
+    public string allDept = "";
+    public string selDept = "";
+    public string SelComboDept = "";
+
+    #endregion
+
+    private void FrmAuthorization_Load(object sender, System.EventArgs e)
+    {
+      try
+      {
+        StrUser = Core.Mes.ClientFrameWork.ClientCommon._UserInfo.UserName;
+
+        GetUserData();
+        GetDepartmentData();
+        GetOperDepart();
+        GetChildDept();
+        GetFitRole();
+        GetValidUserData();
+
+        GetRoleDataSet();
+        InitCombo();
+        GetAuData();
+        ultraCheckEditor1.CheckedValue = true;
+        ultraTextEditor1.Enabled = true;
+        ultraTextEditor1.Text = operDepartname;
+        ultraTextEditor1.Tag = allDept;
+
+        InitGrid();
+        //InitRoleCombo();
+        //                GetCombo3Dept();
+        IsAdminFlag = CheckRoleID();
+        if (operDepart == "ROOT")
+        {
+          ultraButton1.Visible = true;
+          ultraButton2.Visible = true;
+        }
+      }
+      catch(System.Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+      }
+
+    }
+    private DataSet GetUserData()
+    {
+      try
+      {
+        string str = "";
+
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "SelectUAM_USER";
+        par.args = new object[] { str };
+        string strOut = "";
+
+        _userData = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+
+        return _userData;
+      }
+      catch (Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+        return null;
+      }
+    }
+
+    private DataSet GetValidUserData()
+    {
+      try
+      {
+        string str = "";
+        if (operDepart != "ROOT")
+          str = " where DEPARTMENTID in (" + allDept + ") order by 1";
+        else
+          str = " order by 1";
+
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "SelectUAM_USER";
+        par.args = new object[] { str };
+        string strOut = "";
+
+        _validUserData = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+
+        return _validUserData;
+      }
+      catch (Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+        return null;
+      }
+    }
+    private void GetDepartmentData()
+    {
+      try
+      {
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "SelectUAM_DEPARTMENT";
+        par.args = new object[] { "" };
+
+        string strOut = "";
+
+        _departmentData = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+
+        _selectPartSQL = strOut;
+      }
+      catch(System.Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+      }
+    }
+    private void GetRoleDataSet()
+    {
+      try
+      {
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "SelectUAM_ROLE";
+        par.args = new object[] { " order by roleid" };
+
+        string strOut = "";
+
+        _roleData = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+
+        _selectRoleSQL = strOut;
+      }
+      catch(System.Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+      }
+    }
+    private void GetCombo3Dept()
+    {
+      try
+      {
+        if (_userData != null && _userData.Tables.Count > 0)
+        {
+          DataTable dt = this._userData.Tables[0].Copy();
+
+          foreach (DataRow dr in dt.Rows)
+          {
+            if (dr["NAME"].ToString() == this.ultraComboEditor3.Text.ToString())
+            {
+              SelComboDept = dr["DEPARTMENTID"].ToString();
+            }
+          }
+        }
+      }
+      catch(System.Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+        SelComboDept = "";
+      }
+    }
+    private void GetFitRole()
+    {
+      try
+      {
+        string str = "";
+        if (operDepart != "ROOT")
+          str = " where DEPARTMENTID in (" + allDept + ") order by roleid";
+        else
+          str = " order by roleid";
+
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "SelectUAM_ROLE";
+        par.args = new object[] { str };
+
+        string strOut = "";
+        _fitRole = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+      }
+      catch(System.Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+      }
+    }
+    private void InitCombo()
+    {
+      if (_validUserData != null && _validUserData.Tables.Count > 0)
+      {
+        ultraComboEditor3.Items.Clear();
+        foreach (DataRow arow in (_validUserData).Tables[0].Rows)
+          ultraComboEditor3.Items.Add(arow[0], arow[2].ToString());
+      }
+      if (_fitRole != null && _fitRole.Tables.Count > 0)
+      {
+        ultraComboEditor1.Items.Clear();
+        ultraComboEditor2.Items.Clear();
+        foreach (DataRow arow in (_fitRole).Tables[0].Rows)
+        {
+          ultraComboEditor1.Items.Add(arow[0], arow[1].ToString());
+          ultraComboEditor2.Items.Add(arow[0], arow[1].ToString());
+        }
+      }
+    }
+    private void GetOperDepart()
+    {
+      try
+      {
+        if (_userData != null && _userData.Tables.Count > 0)
+        {
+          DataTable dt = this._userData.Tables[0].Copy();
+
+          foreach (DataRow dr in dt.Rows)
+          {
+            if (dr["NAME"].ToString() == StrUser)
+            {
+              operDepart = dr["DEPARTMENTID"].ToString();
+              DataTable dn = this._departmentData.Tables[0].Copy();
+              foreach (DataRow dm in dn.Rows)
+              {
+                if (dm["DEPARTMENTID"].ToString() == operDepart)
+                {
+                  operDepartname = dm["DEPARTMENTNAME"].ToString();
+                }
+              }
+            }
+          }
+        }
+      }
+      catch(System.Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+      }
+    }
+
+    private void InitGrid()
+    {
+      //		    InitRoleCombo();
+      GetPartData();
+      GetUserDataInGrid();
+
+      this.ultraCheckEditor1.CheckedValue = true;
+      this.ultraTextEditor1.Enabled = true;
+      this.ultraTextEditor1.Text = operDepartname;
+      this.ultraTextEditor1.Tag = allDept;
+      Query();
+      //			this.ultraGrid1.DataSource =this.ultraDataSource1 ;
+      //			ultraGrid1.DataSource = ((DataSet)_auData).Tables[0];
+
+      this.ultraGrid1.DisplayLayout.Bands[0].Columns["USERID"].ValueList = ultraGrid1.DisplayLayout.ValueLists["name"];
+      this.ultraGrid1.DisplayLayout.Bands[0].Columns["ROLEID"].ValueList = ultraGrid1.DisplayLayout.ValueLists["role"];
+      ultraGrid1.DisplayLayout.Bands[0].Columns["DEPARTMENTID"].ValueList = ultraGrid1.DisplayLayout.ValueLists["department"];
+
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns["LOGINID"].Header.Caption = "登录帐号";
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns["LOGINID"].Width = 80;
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns["LOGINID"].CellAppearance.TextHAlign = Infragistics.Win.HAlign.Left;
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns["LOGINID"].CellActivation = Activation.NoEdit;
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns["LOGINID"].CellAppearance.BackColor = Color.LightGoldenrodYellow;
+
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns["ROLEID"].Header.Caption = "角色";
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns["ROLEID"].Width = 200;
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns["ROLEID"].CellAppearance.TextHAlign = Infragistics.Win.HAlign.Left;
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns["ROLEID"].CellActivation = Activation.NoEdit;
+
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].Style = Infragistics.Win.UltraWinGrid.ColumnStyle.Default;
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns[2].Style = Infragistics.Win.UltraWinGrid.ColumnStyle.Default;
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns[1].Style = Infragistics.Win.UltraWinGrid.ColumnStyle.Default;
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns[3].Style = Infragistics.Win.UltraWinGrid.ColumnStyle.Default;
+
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns["USERID"].Header.Caption = "用户姓名";
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns["USERID"].Width = 100;
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns["USERID"].CellAppearance.TextHAlign = Infragistics.Win.HAlign.Left;
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns["USERID"].CellActivation = Activation.NoEdit;
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns["USERID"].CellAppearance.BackColor = Color.LightGoldenrodYellow;
+
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns["PASSWD"].Header.Caption = "登录密码";
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns["PASSWD"].Width = 100;
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns["PASSWD"].CellAppearance.TextHAlign = Infragistics.Win.HAlign.Left;
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns["PASSWD"].CellActivation = Activation.NoEdit;
+
+    }
+    private void InitRoleCombo()
+    {
+      if (_userData != null && _userData.Tables.Count > 0)
+      {
+        DataTable dt = _userData.Tables[0].Copy();
+        foreach (DataRow dr in dt.Rows)
+        {
+          try
+          {
+            this.ultraComboEditor3.Items.Add(dr["USERID"], dr["NAME"].ToString());
+          }
+          catch(System.Exception ex)
+          {
+            System.Diagnostics.Debug.WriteLine(ex.ToString());
+          }
+        }
+      }
+
+    }
+    private void GetAuData()
+    {
+      try
+      {
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "SelectUAM_AUTHORIZATION";
+        par.args = new object[] { " order by loginID" };
+
+        string strOut = "";
+
+        _auData = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+
+        _selectAuSQL = strOut;
+      }
+      catch(System.Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+      }
+    }
+    private void GetPartData()
+    {
+      if (ultraGrid1.DisplayLayout.ValueLists.Exists("role"))
+      {
+        ultraGrid1.DisplayLayout.ValueLists["role"].ValueListItems.Clear();
+      }
+      else
+      {
+        ultraGrid1.DisplayLayout.ValueLists.Add("role");
+      }
+
+      foreach (DataRow dr in this._roleData.Tables[0].Rows)
+      {
+        Infragistics.Win.ValueListItem vli = new Infragistics.Win.ValueListItem();
+        vli.DisplayText = dr["ROLENAME"].ToString();
+        vli.DataValue = dr["ROLEID"];
+        ultraGrid1.DisplayLayout.ValueLists["role"].ValueListItems.Add(vli);
+      }
+
+      if (ultraGrid1.DisplayLayout.ValueLists.Exists("department"))
+      {
+        ultraGrid1.DisplayLayout.ValueLists["department"].ValueListItems.Clear();
+      }
+      else
+      {
+        ultraGrid1.DisplayLayout.ValueLists.Add("department");
+      }
+
+      foreach (DataRow dr in this._departmentData.Tables[0].Rows)
+      {
+        Infragistics.Win.ValueListItem vli = new Infragistics.Win.ValueListItem();
+        vli.DisplayText = dr["DEPARTMENTNAME"].ToString();
+        vli.DataValue = dr["DEPARTMENTID"];
+        ultraGrid1.DisplayLayout.ValueLists["department"].ValueListItems.Add(vli);
+      }
+    }
+    private void GetUserDataInGrid()
+    {
+      if (ultraGrid1.DisplayLayout.ValueLists.Exists("name"))
+      {
+        ultraGrid1.DisplayLayout.ValueLists["name"].ValueListItems.Clear();
+      }
+      else
+      {
+        ultraGrid1.DisplayLayout.ValueLists.Add("name");
+      }
+
+      foreach (DataRow dr in this._userData.Tables[0].Rows)
+      {
+        Infragistics.Win.ValueListItem vli = new Infragistics.Win.ValueListItem();
+        vli.DisplayText = dr["NAME"].ToString();
+        vli.DataValue = dr["USERID"];
+        ultraGrid1.DisplayLayout.ValueLists["name"].ValueListItems.Add(vli);
+      }
+    }
+
+    private void ultraGrid1_AfterRowActivate(object sender, System.EventArgs e)
+    {
+      try
+      {
+        if (this.ultraGrid1.ActiveRow == null) return;
+        UltraGridRow ugr = this.ultraGrid1.ActiveRow;
+        this.ultraTextEditor2.Text = ugr.Cells[0].Value.ToString();
+        this.ultraTextEditor4.Text = ugr.Cells[3].Value.ToString();
+
+        //Usering();
+        //Roleing();
+        ultraComboEditor3.Value = ugr.Cells[2].Value.ToString();
+        ultraComboEditor2.Value = ugr.Cells[1].Value.ToString();
+
+      }
+      catch (Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+      }
+    }
+    private void Usering()
+    {
+      UltraGridRow ugr = this.ultraGrid1.ActiveRow;
+      if (_userData != null && _userData.Tables.Count > 0)
+      {
+        for (int i = 0; i < _userData.Tables[0].Rows.Count; i++)
+        {
+          if (_userData.Tables[0].Rows[i][0].ToString() == ugr.Cells[2].Value.ToString())
+          {
+            this.ultraComboEditor3.Value = (_userData).Tables[0].Rows[i][2];
+            return;
+          }
+        }
+      }
+    }
+    private void Userid()
+    {
+
+      if (_userData != null && _userData.Tables.Count > 0)
+      {
+        for (int i = 0; i < _userData.Tables[0].Rows.Count; i++)
+        {
+          if (_userData.Tables[0].Rows[i]["NAME"].ToString() == this.ultraComboEditor3.Text.ToString())
+          {
+            userid = (_userData).Tables[0].Rows[i]["USERID"].ToString();
+            return;
+          }
+        }
+      }
+    }
+    private void Roleing()
+    {
+      UltraGridRow ugr = this.ultraGrid1.ActiveRow;
+      if (_roleData != null && _roleData.Tables.Count > 0)
+      {
+        for (int i = 0; i < _roleData.Tables[0].Rows.Count; i++)
+        {
+          if (_roleData.Tables[0].Rows[i]["ROLEID"].ToString() == ugr.Cells[1].Value.ToString())
+          {
+            this.ultraComboEditor2.Value = (_roleData).Tables[0].Rows[i]["ROLENAME"];
+            return;
+          }
+        }
+      }
+    }
+
+    private void Roleid()
+    {
+
+      if (_roleData != null && _roleData.Tables.Count > 0)
+      {
+        for (int i = 0; i < _roleData.Tables[0].Rows.Count; i++)
+        {
+          if (_roleData.Tables[0].Rows[i]["ROLENAME"].ToString() == this.ultraComboEditor2.Value.ToString())
+          {
+            roleid = (_roleData).Tables[0].Rows[i]["ROLEID"].ToString();
+            return;
+          }
+        }
+      }
+    }
+    #region 工具栏操作
+    private void ultraToolbarsManager1_ToolClick(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
+    {
+
+      switch (e.Tool.Key)
+      {
+        case "add":
+          Add();
+          break;
+        case "del":
+          Del();
+          break;
+        case "edit":
+          Edit();
+          break;
+        case "query":
+          Query();
+          break;
+        case "close":
+          this.Close();
+          break;
+        case "back":
+          this.ultraToolbarsManager1.Toolbars[0].Tools["back"].SharedProps.Visible = false;
+          //						RefreshData1("");
+          //						ultraCheckEditor1.Checked = false;
+          //						ultraTextEditor1.Text = "";
+          //						ultraCheckEditor2.Checked = false;
+          //						ultraComboEditor1.Text = "";
+          this.ultraCheckEditor1.CheckedValue = true;
+          this.ultraCheckEditor2.CheckedValue = false;
+          if (ultLoginID.Text.Trim().Length > 0)
+          {
+            ultLoginID.Tag = ultLoginID.Text.Trim();
+            ultLoginID.Text = "";
+          }
+          this.ultraTextEditor1.Enabled = true;
+          this.ultraTextEditor1.Text = operDepartname;
+          this.ultraTextEditor1.Tag = allDept;
+          Query();
+          break;
+        case "leadin":
+          try
+          {
+            string StrfileName = string.Format("c:\\{0}.xls", this.Text);
+            this.ultraGridExcelExporter1.Export(this.ultraGrid1, StrfileName);
+
+            ProcessStartInfo p = new ProcessStartInfo(StrfileName);
+            p.WorkingDirectory = Path.GetDirectoryName(StrfileName);
+            Process.Start(p);
+          }
+          catch (Exception ex)
+          {
+            MessageBox.Show(ex.Message);
+          }
+          break;
+      }
+    }
+    private void Add()
+    {
+      //			try
+      //			{
+      if (this.ultraTextEditor2.Text.Trim() == "")
+      {
+        MessageBox.Show("请输入登录帐号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        return;
+      }
+      if (this.ultraComboEditor2.Value == null)
+      {
+        MessageBox.Show("请选择角色!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        return;
+      }
+      if (this.ultraComboEditor3.Value == null)
+      {
+        MessageBox.Show("请选择用户!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        return;
+      }
+      GetCombo3Dept();
+      if (operDepart != "ROOT")
+      {
+        if (allDept.IndexOf("'" + SelComboDept + "'") < 0)
+        {
+          MessageBox.Show("你没有配置该用户的权限,请重新选择!");
+          return;
+        }
+      }
+      if (this.ultraTextEditor4.Text.Trim() == "")
+      {
+        MessageBox.Show("请输入登录密码!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        return;
+      }
+      Roleid();
+      Userid();
+      ArrayList al = new ArrayList();
+
+      al.Add(this.ultraTextEditor2.Text.Trim());
+
+      al.Add(ultraComboEditor2.Value.ToString().Trim());
+      al.Add(ultraComboEditor3.Value.ToString().Trim());
+
+      //				al.Add(this.ultraComboEditor3 .Value .ToString ());
+      al.Add(this.ultraTextEditor4.Text.Trim());
+      try
+      {
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        //  par.AssemblyName  = "Core.Mes.PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "InsertUAM_AUTHORIZATION";
+        par.args = new object[] { al };
+        par.ServerType = MesServerType.MesSystemBaseServer;
+
+        string strOut = "";
+
+        object obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut);
+
+        if (strOut != "")
+        {
+          MessageBox.Show("新增失败! \n" + strOut);
+          return;
+        }
+        else
+        {
+          if ((int)obj != 1)
+          {
+            MessageBox.Show("新增失败!");
+            return;
+          }
+        }
+      }
+      catch(System.Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+        return;
+      }
+      this.GetDepartmentData();
+      UltraGridRow ugr = this.ultraGrid1.DisplayLayout.Bands[0].AddNew();
+      ugr.Cells["LOGINID"].Value = al[0];
+      ugr.Cells["ROLEID"].Value = al[1];
+      ugr.Cells["USERID"].Value = al[2];
+      ugr.Cells["PASSWD"].Value = al[3];
+
+      foreach (DataRow drow in _userData.Tables[0].Rows)
+      {
+        if (drow["USERID"].ToString() == al[2].ToString())
+        {
+          ugr.Cells["DEPARTMENTID"].Value = drow["DEPARTMENTID"].ToString();
+          ugr.Cells["WORKPOS"].Value = drow["WORKPOS"].ToString();
+          break;
+        }
+      }
+
+      foreach (DataRow drow in _roleData.Tables[0].Rows)
+      {
+        if (drow["ROLEID"].ToString() == al[1].ToString())
+        {
+          ugr.Cells["ROLEMEMO"].Value = drow["MEMO"].ToString();
+          break;
+        }
+      }
+      this.ultraGrid1.Update();
+      //			}
+      //			catch
+      //			{}
+    }
+    private void Del()
+    {
+      int i = 0;
+      UltraGridRow ugr = this.ultraGrid1.ActiveRow;
+      if (ugr == null)
+      {
+        MessageBox.Show("请选择要删除的帐户!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        return;
+      }
+      GetCombo3Dept();
+      if (operDepart != "ROOT")
+      {
+        if (allDept.IndexOf("'" + SelComboDept + "'") < 0)
+        {
+          MessageBox.Show("你没有删除该帐户的权限,请重新选择!");
+          return;
+        }
+      }
+      if (MessageBox.Show("是否确认删除选中的帐户?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
+      {
+        return;
+      }
+      try
+      {
+        i = ugr.Index;
+        string strWhere = " where LOGINID = '" + ugr.Cells[0].Value.ToString() + "'";
+
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "DeleteUAM_AUTHORIZATION";
+        par.args = new object[] { strWhere };
+
+        string strOut = "";
+
+        object obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut);
+
+        if (strOut != "")
+        {
+          MessageBox.Show("删除失败! \n" + strOut);
+          return;
+        }
+        else
+        {
+          if ((int)obj != 1)
+          {
+            MessageBox.Show("删除失败!");
+            return;
+          }
+        }
+      }
+      catch(System.Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+        return;
+      }
+
+      ultraGrid1.ActiveRow.Delete(false);
+      ultraGrid1.UpdateData();
+
+      try
+      {
+        ultraGrid1.Rows[i].Activate();
+      }
+      catch
+      {
+        int count = ultraGrid1.Rows.Count;
+        if (count > 0)
+          ultraGrid1.Rows[count - 1].Activate();
+      }
+    }
+    private void Edit()
+    {
+      try
+      {
+        UltraGridRow ugr = this.ultraGrid1.ActiveRow;
+        if (ugr == null)
+        {
+          MessageBox.Show("请选择要修改的用户!");
+          return;
+        }
+        if (this.ultraTextEditor2.Text.Trim() != ugr.Cells["LOGINID"].Text.Trim())
+        {
+          MessageBox.Show("不能修改登录帐号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+          return;
+        }
+        if (this.ultraComboEditor2.Value == null)
+        {
+          MessageBox.Show("请选择角色!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+          return;
+        }
+        if (this.ultraComboEditor3.Value == null)
+        {
+          MessageBox.Show("请选择用户!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+          return;
+        }
+        if (this.ultraTextEditor4.Text.Trim() == "")
+        {
+          MessageBox.Show("请输入登录密码!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+          return;
+        }
+        GetCombo3Dept();
+        if (allDept.IndexOf("'" + SelComboDept + "'") < 0 && operDepart != "ROOT")
+        {
+          MessageBox.Show("你没有配置这一部门用户的权限,请重新选择!");
+          return;
+        }
+        Roleid();
+        Userid();
+        ArrayList al = new ArrayList();
+        al.Add(this.ultraTextEditor2.Text.Trim());
+        al.Add(ultraComboEditor2.Value.ToString());
+        al.Add(userid.Trim());
+        al.Add(this.ultraTextEditor4.Text.Trim());
+        try
+        {
+          CallingMessage par = new CallingMessage();
+          par.ServerName = "PurviewManager";
+          par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+          par.MethodName = "UpdateUAM_AUTHORIZATION";
+          par.args = new object[] { al };
+
+          string strOut = "";
+          object obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut);
+          if (strOut != "")
+          {
+            MessageBox.Show("修改失败 \n" + strOut);
+            return;
+          }
+          else
+          {
+            int i = (int)obj;
+            if (i != 1)
+            {
+              MessageBox.Show("修改失败");
+              return;
+            }
+          }
+        }
+        catch(System.Exception ex)
+        {
+          System.Diagnostics.Debug.WriteLine(ex.ToString());
+          return;
+        }
+
+        ugr.Cells["LOGINID"].Value = al[0];
+        ugr.Cells["ROLEID"].Value = al[1];
+        ugr.Cells["USERID"].Value = al[2];
+        ugr.Cells["PASSWD"].Value = al[3];
+
+        foreach (DataRow drow in _userData.Tables[0].Rows)
+        {
+          if (drow["USERID"].ToString() == al[2].ToString())
+          {
+            ugr.Cells["DEPARTMENTID"].Value = drow["DEPARTMENTID"].ToString();
+            ugr.Cells["WORKPOS"].Value = drow["WORKPOS"].ToString();
+            break;
+          }
+        }
+
+        foreach (DataRow drow in _roleData.Tables[0].Rows)
+        {
+          if (drow["ROLEID"].ToString() == al[1].ToString())
+          {
+            ugr.Cells["ROLEMEMO"].Value = drow["MEMO"].ToString();
+            break;
+          }
+        }
+
+        ultraGrid1.UpdateData();
+      }
+      catch(System.Exception ex) 
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+      }
+    }
+    private void Query()
+    {
+      if ((this.ultraCheckEditor1.Checked && this.ultraTextEditor1.Text != "") ||
+          (this.ultraCheckEditor2.Checked && this.ultraComboEditor1.Text != "") ||
+          (this.ultLoginID.Text.Trim().Length > 0))
+      {
+        if (this.ultraCheckEditor1.Checked && this.ultraTextEditor1.Text != "")
+        {
+          GetSelDept();
+          if (selDept == "ROOT")
+          {
+            if (operDepart != "ROOT")
+            {
+              MessageBox.Show("你没有查看整个公司的权限,请重新选择!");
+              return;
+            }
+          }
+          if (operDepart != "ROOT" && allDept.IndexOf("'" + selDept + "'") < 0)
+          {
+            MessageBox.Show("你没有查看这一部门的权限,请重新选择!");
+            return;
+          }
+        }
+        RefreshGrid();
+        this.ultraToolbarsManager1.Toolbars[0].Tools["back"].SharedProps.Visible = true;
+      }
+      else
+        MessageBox.Show("请选择要查询的部门、角色或帐号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+
+    }
+    //private void RefreshData1(string str)
+    //{
+    //    try
+    //    {
+    //        CallingMessage par = new CallingMessage();
+    //        par.ServerName    = "PurviewManager";
+    //        par.ClassName     = "Core.Mes.PurviewManager.PurviewManager";
+    //        par.MethodName    = "SelectUAM_AUTHORIZATION";
+    //        par.args          = new object[]{str};
+
+    //        string strOut = "";
+
+    //        _auData = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+
+    //        _selectAuSQL = strOut;
+    //    }
+    //    catch 
+    //    {
+    //    }	
+    //    this.ultraGrid1.DataSource=_auData.Tables[0];
+    //    ultraGrid1.UpdateData();
+    //}
+    private void RefreshGrid()
+    {
+      string str = "";
+      str = GetRefreshWhere();
+      //str = " where " + str + " order by loginID";
+      try
+      {
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "GetUAM_AUTHORIZATION";
+        par.args = new object[] { str };
+
+        string strOut = "";
+
+        _auData = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+
+        _selectAuSQL = strOut;
+      }
+      catch(System.Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+      }
+      /*			try
+                  {
+                      this._auData.Tables[0].DefaultView.RowFilter = GetRefreshWhere();
+                  }
+                  catch 
+                  {
+                      this._auData.Tables[0].DefaultView.RowFilter = "1=2";
+                  }
+      */
+      this.ultraGrid1.DataSource = _auData.Tables[0];
+      ultraGrid1.UpdateData();
+    }
+    private string GetRefreshWhere()
+    {
+      string sqlstr = "";
+      if (this.ultraTextEditor1.Enabled && this.ultraCheckEditor1.Checked && this.ultraTextEditor1.Text != "" && ultraTextEditor1.Tag.ToString().Length>0)
+      {
+        sqlstr += "AND B.DEPARTMENTID IN (" + this.ultraTextEditor1.Tag + ")";
+        //ArrayList al = this.GetUserID();
+        //if (al == null || al.Count == 0)
+        //{
+        //  sqlstr = "1=2";
+        //}
+        //else
+        //{
+        //  sqlstr += " USERID in ('" + al[0].ToString() + "'";
+        //  for (int i = 1; i < al.Count; i++)
+        //  {
+        //    sqlstr += ", '" + al[i].ToString() + "' ";
+        //  }
+        //  sqlstr += ")";
+
+        //}
+      }
+      if (this.ultraComboEditor1.Enabled && this.ultraCheckEditor2.Checked && this.ultraComboEditor1.Text != "")
+      {
+        sqlstr += " AND A.ROLEID = '" + this.ultraComboEditor1.Value.ToString() + "'";
+      }
+      if (this.ultLoginID.Text.Trim().Length > 0)
+      {
+        sqlstr += " AND A.LOGINID = '" + this.ultLoginID.Text.Trim() + "'";
+      }
+      return sqlstr;
+    }
+    private void roling_c1()
+    {
+
+      if (_roleData != null && _roleData.Tables.Count > 0)
+      {
+        for (int i = 0; i < _roleData.Tables[0].Rows.Count; i++)
+        {
+          if (_roleData.Tables[0].Rows[i]["ROLENAME"].ToString() == this.ultraComboEditor1.Value.ToString())
+          {
+            this.ultraComboEditor1.Value = (_roleData).Tables[0].Rows[i]["ROLEID"];
+            return;
+          }
+        }
+      }
+    }
+    private ArrayList GetUserID()
+    {
+      ArrayList al = new ArrayList();
+      DataTable dt = null;
+      if (this._userData == null && this.GetUserData() == null)
+        dt = null;
+      else
+        dt = this._userData.Tables[0];
+
+      if (dt != null)
+      {
+        if (this.ultraTextEditor1.Enabled && this.ultraTextEditor1.Tag != null)
+        {
+          string partid = this.ultraTextEditor1.Tag.ToString();
+
+          string strFilter = "DEPARTMENTID in (" + partid + ")";
+
+          dt.DefaultView.RowFilter = strFilter;
+        }
+
+        for (int i = 0; i < dt.DefaultView.Count; i++)
+        {
+          al.Add(dt.DefaultView[i]["USERID"].ToString());
+        }
+
+        return al;
+      }
+      else
+        return null;
+    }
+    #endregion
+
+
+    private bool CheckRoleID()
+    {
+      try
+      {
+        string userid = Core.Mes.ClientFrameWork.ClientCommon._UserInfo.LoginID;
+        DataRow[] drs = this._auData.Tables[0].Select("LOGINID = '" + userid + "'");
+        if (drs.Length > 0)
+        {
+          if (drs[0]["ROLEID"].ToString() == "001")
+          {
+            return true;
+          }
+        }
+      }
+      catch(System.Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+      }
+      return false;
+    }
+    private Point GetChildWindowLocation(Size ChildWindowSize)
+    {
+      int width = Cursor.Position.X + ChildWindowSize.Width - Screen.PrimaryScreen.Bounds.Width;
+      int height = Cursor.Position.Y + ChildWindowSize.Height - Screen.PrimaryScreen.Bounds.Height + 30;
+
+      if (width > 0)
+        width = Cursor.Position.X - width;
+      else
+        width = Cursor.Position.X;
+      if (height > 0)
+        height = Cursor.Position.Y - height + 10;
+      else
+        height = Cursor.Position.Y + 10;
+
+      return new Point(width, height);
+    }
+
+    private void ultraComboEditor3_EditorButtonClick_1(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e)
+    {
+      FrmSelUserID frm = new FrmSelUserID();
+      frm._departmentData = this._departmentData;
+      frm._userData = this._userData;
+      frm.Location = this.GetChildWindowLocation(frm.Size);
+      frm.ShowDialog();
+
+      if (frm._changFlag)
+      {
+        this.ultraComboEditor3.Value = frm._currSelectID;
+      }
+
+      //			if (_userData != null && _userData.Tables.Count > 0)
+      //			{
+      //				DataTable dt = this._userData.Tables[0].Copy();
+      //			
+      //				foreach (DataRow dr in dt.Rows)
+      //				{
+      //					if(dr["NAME"].ToString ()==this.ultraComboEditor3.Text .ToString ())
+      //					{
+      //						SelComboDept=dr["DEPARTMENTID"];
+      //					}
+      //				}
+      //			}
+
+      GetCombo3Dept();
+      if (operDepart != "ROOT")
+      {
+        if (allDept.IndexOf("'" + SelComboDept + "'") < 0)
+        {
+          this.ultraComboEditor3.Text = "";
+          MessageBox.Show("你没有配置该用户的权限,请重新选择!");
+          return;
+        }
+      }
+    }
+
+    private void ultraTextEditor1_EditorButtonClick_1(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e)
+    {
+      FrmSetDepart frm = new FrmSetDepart();
+      frm.Location = GetChildWindowLocation(frm.Size);
+      frm.ShowDialog();
+      if (frm.SelectedID != "" && frm.SelectedName != "")
+      {
+        this.ultraTextEditor1.Text = frm.SelectedName;
+        this.ultraTextEditor1.Tag = frm.SelectedID;
+
+        if (this.ultraTextEditor1.Text != "" && this.ultraCheckEditor1.Checked)
+        {
+          GetSelDept();
+          if (operDepart != "ROOT" && allDept.IndexOf("'" + selDept + "'") < 0)
+          {
+            MessageBox.Show("你没有查看这一部门的权限,请重新选择!");
+          }
+        }
+      }
+    }
+
+    private void ultraButton1_Click(object sender, System.EventArgs e)
+    {
+      foreach (Form mdiChild in this.MdiParent.MdiChildren)
+      {
+        if (mdiChild.Text == "部门维护")
+        {
+          mdiChild.Activate();
+          return;
+        }
+      }
+
+      FrmDepartment frmpart = new FrmDepartment();
+
+      //frmpart.Location = GetChildWindowLocation(frmpart.Size);
+      frmpart.MdiParent = this.ParentForm;
+      frmpart.Show();
+    }
+
+    private void ultraButton2_Click(object sender, System.EventArgs e)
+    {
+      FrmRole frmRole = new FrmRole();
+      frmRole._roleData = this._roleData;
+      frmRole._selectSQL = this._selectRoleSQL;
+      frmRole.IsAdminFlag = IsAdminFlag;
+      //frmRole.ShowDialog(this);
+
+      frmRole.Location = GetChildWindowLocation(frmRole.Size);
+      frmRole.ShowDialog(this);
+      GetFitRole();
+      InitCombo();
+      //this._roleData = frmRole._roleData ;
+      //this.InitRoleCombo();	
+    }
+
+    private void ultraCheckEditor1_CheckedChanged(object sender, System.EventArgs e)
+    {
+      ultraTextEditor1.Enabled = ultraCheckEditor1.Checked;
+    }
+
+    private void ultraCheckEditor2_CheckedChanged(object sender, System.EventArgs e)
+    {
+      ultraComboEditor1.Enabled = ultraCheckEditor2.Checked;
+    }
+
+    private void GetChildDept()
+    {
+      try
+      {
+        string strOut = "";
+        DataSet ds = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod("PurviewManager", "Core.Mes.PurviewManager.UAM_USER", "SelectChildDept", new object[] { operDepart }, out strOut) as DataSet;
+        if (ds.Tables[0].Rows[0][0].ToString() != "")
+        {
+          allDept = "'" + ds.Tables[0].Rows[0][0].ToString() + "'" + operDepart + "'";
+        }
+        else
+          allDept = "'" + operDepart + "'";
+      }
+      catch(System.Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+      }
+    }
+
+    private void GetSelDept()
+    {
+      try
+      {
+        if (this.ultraTextEditor1.Text != "" && ultraCheckEditor1.Checked)
+        {
+          DataTable dt = this._departmentData.Tables[0].Copy();
+          foreach (DataRow dr in dt.Rows)
+          {
+            if (dr["DEPARTMENTNAME"].ToString() == this.ultraTextEditor1.Text)
+            {
+              selDept = dr["DEPARTMENTID"].ToString();
+              return;
+            }
+          }
+        }
+      }
+      catch(System.Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+      }
+    }
+    private void ultraComboEditor3_SelectionChanged(object sender, System.EventArgs e)
+    {
+      GetCombo3Dept();
+      if (operDepart != "ROOT")
+      {
+        if (allDept.IndexOf("'" + SelComboDept + "'") < 0)
+        {
+          this.ultraComboEditor3.Text = "";
+          MessageBox.Show("你没有配置该用户的权限,请重新选择!");
+          return;
+        }
+      }
+    }
+
+    private void ultLoginID_EditorButtonClick(object sender, EditorButtonEventArgs e)
+    {
+      try
+      {
+        if (e.Button.Key == "SET")
+        {
+          if (ultLoginID.Text.Trim().Length > 0)
+          {
+            ultLoginID.Tag = ultLoginID.Text.Trim();
+            ultLoginID.Text = "";
+          }
+          else
+          {
+            if (ultLoginID.Tag != null)
+              ultLoginID.Text = ultLoginID.Tag.ToString();
+          }
+        }
+      }
+      catch(System.Exception ex) 
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+      }
+    }
+
+  }
+}

+ 426 - 0
.svn/pristine/34/34b6e7e50df1338f6d40a24fd39d8f2b4167738d.svn-base

@@ -0,0 +1,426 @@
+using System;
+using System.IO;
+using System.Data;
+using System.Reflection;
+using System.Collections;
+using System.Runtime.Remoting;
+using System.Runtime.Remoting.Channels;
+using System.Windows.Forms;
+
+using STMes;
+using Core.Mes.ServerFrameWork;
+using System.Configuration;
+using System.Net.Sockets;
+using System.Collections.Specialized;
+using System.Net;
+using Core.Mes.IBaseInterface;
+using System.Diagnostics;
+
+namespace Core.Mes.ServerManager
+{
+    /// <summary>
+    /// ClsServerMain 的摘要说明。
+    /// </summary>
+    public class ClsServerMain : IDisposable
+    {
+        public bool _isLogging = false;
+
+<<<<<<< .mine
+        private CoreWriteLogFile cwl_sql;
+=======
+        private CoreWriteLogFile cwl_sql = null;
+>>>>>>> .r1338
+
+        private ServerConfigure _serverConf;
+
+        public ClsServerMain() { }
+
+        public delegate void ShowLogDelegate(string log);
+
+        public event ShowLogDelegate ShowLogEvent;
+
+        private void ShowLog(string log)
+        {
+            if (ShowLogEvent != null)
+            {
+                ShowLogEvent(log);
+            }
+        }
+
+        #region "	Property	"
+        private Hashtable _dbManagerList = new Hashtable();
+        public Hashtable DBManagerList
+        {
+            //set { _dbManagerList = value; }
+            get { return _dbManagerList; }
+        }
+        private Hashtable _htAssemblyService = new Hashtable();
+        public Hashtable HtAssemblyService
+        {
+            //set { _htAssemblyServer = value; }
+            get { return _htAssemblyService; }
+        }
+        private Hashtable _htServiceKeys = new Hashtable();
+        public Hashtable HTServiceKeys
+        {
+            get { return _htServiceKeys; }
+        }
+
+        private Hashtable _htExternServer = new Hashtable();
+        public Hashtable HtExternServer
+        {
+            get { return _htExternServer; }
+        }
+
+        private Hashtable _htDispatcher = new Hashtable();
+        public Hashtable HtDispatcher
+        {
+            get { return _htDispatcher; }
+        }
+
+        private DataSet _dsServerList = new DataSet();
+        #endregion
+
+        public void InitServerMain(Object[] objs)
+        {
+            if (objs != null)
+            {
+                if (objs.GetLength(0) >= 1)
+                {
+                    _serverConf = (ServerConfigure)(objs[0]);
+                }
+            }
+            try
+            {
+                RemotingGate _rg = new RemotingGate(_serverConf);
+                ShowLog("初始化数据库连接......");
+                InitDBManager();
+                ShowLog("数据库连接初始化完毕!");
+                GetServerListDataSet();
+                ShowLog("读取应用服务配置......");
+                foreach (DataRow dr in this._dsServerList.Tables[0].Rows)
+                {
+                    LoadAssemblyServer(dr["ServerName"].ToString(), dr["AssemblyName"].ToString(), dr["DBName"].ToString(), dr["Url"].ToString(), dr["Description"].ToString());
+                }
+                ShowLog("读取扩展服务器配置......");
+                InitExternServer();
+            }
+            catch (SocketException sEx)
+            {
+                ShowLog("只能运行一个服务端!");
+
+                if (sEx.ErrorCode == 10048)
+                {
+                    long start_time = DateTime.Now.Ticks;
+                    int T_Count = 10;
+                    do
+                    {
+                        int vSec = (int)(T_Count - (DateTime.Now.Ticks - start_time) / 10000000);
+                        if (vSec != T_Count)
+                        {
+                            ShowLog(string.Format("退出倒计时:{0} 秒", vSec));
+                            T_Count = vSec;
+                        }
+                        Application.DoEvents();
+                    } while (DateTime.Now.Ticks - start_time <= T_Count * 10000000);
+                    Application.Exit();
+                }
+            }
+            catch (Exception ex)
+            {
+                ShowLog(ex.Message);
+            }
+        }
+
+        private void InitDBManager()
+        {
+            ShowLog(string.Format("读取配置文件: {0}", _serverConf.ConfigFilePath));
+            string _strDB = _serverConf.MESDB;
+            string[] strDBs = _strDB.Split('|');
+
+            for (int i = 0; i < strDBs.Length; i++)
+            {
+                try
+                {
+                    string str = strDBs[i];
+
+                    ShowLog(string.Format("[{0}/{1}]初始化DBManager: {2} {3}", i + 1, strDBs.Length, str, "A"));
+                    DBManager dbm = new STMes.DBManager(str, "A");
+                    dbm.SetLogHandle(this._isLogging ? new DBManager.ShowLogDelegate(ShowLog) : null);
+                    dbm.IsLogging = this._isLogging;
+                    DBManagerList.Add(str, dbm);
+
+                    ShowLog(string.Format("[{0}/{1}]初始化DBManager: {2} {3}", i + 1, strDBs.Length, str, "B"));
+                    dbm = new STMes.DBManager(str, "B");
+                    dbm.SetLogHandle(this._isLogging ? new DBManager.ShowLogDelegate(ShowLog) : null);
+                    dbm.IsLogging = this._isLogging;
+                    DBManagerList.Add(str + "B", dbm);
+
+                    ShowLog(string.Format("[{0}/{1}]初始化DBManager: {2} {3}", i + 1, strDBs.Length, str, "C"));
+                    dbm = new STMes.DBManager(str, "C");
+                    dbm.SetLogHandle(this._isLogging ? new DBManager.ShowLogDelegate(ShowLog) : null);
+                    dbm.IsLogging = this._isLogging;
+                    DBManagerList.Add(str + "C", dbm);
+                }
+                catch (Exception ex)
+                {
+                    Console.WriteLine(ex.Message);
+                }
+            }
+        }
+
+
+        //获得服务端配置信息列表
+        private DataTable GetServerConfigInfo()
+        {
+            return null;
+        }
+        //==========================================================
+        // 加载应用服务
+        //==========================================================
+        private void LoadAssemblyServer(string ServiceName, string assName, string dbName, string ServiceURL, string ServiceDescrption)
+        {
+            try
+            {
+                string file = Path.Combine(Application.StartupPath, assName + ".dll");
+
+                IServerPool obj = new IServerPool();
+                obj.DBManagerList = DBManagerList;
+                obj.ServerName = ServiceName;
+                obj.AssemblyName = assName;
+                obj.HTServiceKeys = this._htServiceKeys;
+                obj.HtExtServer = this._htExternServer;
+                obj.ServerConfig = this._serverConf;
+                obj.OwnObjects = new ArrayList() { this };
+
+                obj.LoadAllClass(file, dbName);
+
+                string md5key;
+                string sha256key;
+                obj.GetFileKey(file, out md5key, out sha256key);
+                if (HTServiceKeys.ContainsKey(ServiceName))
+                {
+                    HTServiceKeys.Remove(ServiceName);
+                }
+
+                ServiceObject mso = new ServiceObject();
+                mso.MD5_KEY = md5key;
+                mso.SHA256_KEY = sha256key;
+                mso.URL = ServiceURL;
+                mso.Valid = ServiceObjectStatus.Normal;
+                mso.Enable = true;
+                mso.Description = ServiceDescrption;
+                mso.DLL_FileName = assName + ".dll";
+
+                HTServiceKeys.Add(ServiceName, mso);
+
+                //== 以服务名键值,加入本地服务列表
+                if (HtAssemblyService.ContainsKey(ServiceName))
+                {
+                    IServerPool isp = (IServerPool)HtAssemblyService[ServiceName];
+                    isp.Dispose();
+                    HtAssemblyService.Remove(ServiceName);
+                }
+                HtAssemblyService.Add(ServiceName, obj);
+
+
+                if (_htDispatcher.ContainsKey(ServiceName))
+                {
+                    Dispatcher dp = (Dispatcher)(_htDispatcher[ServiceName]);
+                    RemotingServices.Disconnect(dp);
+                    dp.MemoryDispose();
+                    _htDispatcher.Remove(ServiceName);
+                }
+
+<<<<<<< .mine
+                Dispatcher myDisp = new Dispatcher(obj, _serverConf, null);
+                _htDispatcher.Add(ServiceName, myDisp);
+
+=======
+                Dispatcher myDisp = new Dispatcher(obj, _serverConf, obj.OwnObjects);
+                _htDispatcher.Add(ServiceName, myDisp);
+
+>>>>>>> .r1338
+                RemotingServices.Marshal(myDisp, ServiceName);
+
+                this.ShowLog(" 加载" + ServiceName + "成功!");
+            }
+            catch (Exception ex)
+            {
+                this.ShowLog(" 加载" + ServiceName + "失败!\n" + ex.Message);
+                throw ex;
+            }
+        }
+
+        private void UnLoadAssemblyServer(string ServiceName)
+        {
+            try
+            {
+                if (_htDispatcher.ContainsKey(ServiceName))
+                {
+                    Dispatcher dp = (Dispatcher)(_htDispatcher[ServiceName]);
+                    RemotingServices.Disconnect(dp);
+                    dp.MemoryDispose();
+                    _htDispatcher.Remove(ServiceName);
+                }
+
+
+                //== 以服务名键值,加入本地服务列表
+                string AssemblyName = "";
+                if (HtAssemblyService.ContainsKey(ServiceName))
+                {
+                    IServerPool isp = (IServerPool)HtAssemblyService[ServiceName];
+                    AssemblyName = isp.AssemblyName;
+                    isp.Dispose();
+                    HtAssemblyService.Remove(ServiceName);
+                }
+
+                if (HTServiceKeys.ContainsKey(ServiceName))
+                {
+                    HTServiceKeys.Remove(ServiceName);
+                }
+
+                this.ShowLog(" 卸载" + ServiceName + "成功!");
+            }
+            catch (Exception ex)
+            {
+                this.ShowLog(" 卸载" + ServiceName + "失败!\n" + ex.Message);
+                throw ex;
+            }
+        }
+
+        private void InitExternServer()
+        {
+            try
+            {
+                string[] exServers = _serverConf.ExtServers.Split(new string[] { "|", ",", ";" }, StringSplitOptions.RemoveEmptyEntries);
+                if (exServers.GetLength(0) == 0) return;
+
+                foreach (string _serv in exServers)
+                {
+                    bool same_server = false;
+                    string serv = _serv.Trim();
+                    UriBuilder ub = new UriBuilder(serv);
+
+                    System.Net.IPAddress[] ips = Dns.GetHostEntry(Dns.GetHostName()).AddressList;
+                    if (ips.Length > 0)
+                    {
+                        foreach (IPAddress cip in ips)
+                        {
+                            if (cip.AddressFamily == AddressFamily.InterNetwork)
+                            {
+                                string ip = cip.ToString().Trim();
+                                if (string.IsNullOrEmpty(ip) || ip.Length < 7 || ip.Length > 15) continue;
+
+                                if (ub.Host == ip)
+                                {
+                                    same_server = true;
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                    if (same_server) continue;
+
+                    if (!_htExternServer.ContainsKey(serv))
+                    {
+                        UriBuilder ubr = new UriBuilder(serv);
+                        RemotingServer rs = new RemotingServer(serv, HTServiceKeys);
+                        rs.InitServiceUrlList("ServerCommon", serv);
+                        rs.InitServiceUrlList("ServerListener", string.Format("Tcp://{0}:{1}/ServerListener", ubr.Host, ubr.Port - 2));
+                        _htExternServer.Add(serv, rs);
+                        this.ShowLog(string.Format(" 获取扩展服务器 [{0}:{1}]资源!", ub.Host, ub.Port));
+                        rs.SetChangeEvent(_serverConf.ssc_event);
+                        rs.LoadExternServices();
+                        if (_serverConf.ssc_event != null) _serverConf.ssc_event();
+                        rs.CheckHeartBeat();
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                Debug.Print(ex.Message);
+            }
+        }
+
+
+        public void SetServerFlag(string ServerName, bool Enable)
+        {
+            foreach (string FullServerName in this.HtExternServer.Keys)
+            {
+                UriBuilder ub = new UriBuilder(FullServerName);
+                string sn = string.Format("{0}:{1}", ub.Host, ub.Port);
+                if (ServerName == sn)
+                {
+                    ((RemotingServer)(this.HtExternServer[FullServerName])).Enable = Enable;
+                    break;
+                }
+            }
+        }
+
+        public void SetServiceFlag(string ServerName, string ServiceName, bool Enable)
+        {
+            foreach (string FullServerName in this.HtExternServer.Keys)
+            {
+                UriBuilder ub = new UriBuilder(FullServerName);
+                string sn = string.Format("{0}:{1}", ub.Host, ub.Port);
+                Hashtable ht_srv = ((RemotingServer)(this.HtExternServer[FullServerName])).HTServices;
+                if (ServerName == sn && ht_srv.ContainsKey(ServiceName))
+                {
+                    ((ServiceObject)(ht_srv[ServiceName])).Enable = Enable;
+                }
+            }
+        }
+
+        private void GetServerListDataSet()
+        {
+            if (!File.Exists("MesServer.xml"))
+            {
+                throw new Exception("未找到服务配置文件!");
+            }
+
+            _dsServerList.ReadXml("MesServer.xml");
+
+            if (_dsServerList == null || _dsServerList.Tables.Count == 0)
+                throw new Exception("配置文件设置错误!");
+
+            _dsServerList.AcceptChanges();
+        }
+
+        #region IDisposable 成员
+
+        public void Dispose()
+        {
+            if (this.DBManagerList != null)
+            {
+                IEnumerator ie = this.DBManagerList.GetEnumerator();
+
+                while (ie.MoveNext())
+                {
+                    try
+                    {
+                        System.Collections.DictionaryEntry id = (System.Collections.DictionaryEntry)ie.Current;
+
+                        STMes.DBManager myDbManager = (STMes.DBManager)id.Value;
+
+                        myDbManager.Dispose();
+                        myDbManager = null;
+                    }
+                    catch { }
+
+                }
+                this.DBManagerList.Clear();
+            }
+            if (STMes.DBManager._dbProxy != null)
+            {
+                try
+                {
+                    STMes.DBManager._dbProxy.Dispose();
+                }
+                catch { }
+            }
+        }
+
+        #endregion
+    }
+}

+ 156 - 0
.svn/pristine/34/34d11c214403af8c5d2843a95b4ff32c984580a9.svn-base

@@ -0,0 +1,156 @@
+using System;
+using System.Net;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using Core.Mes.ClientFrameWork;
+
+namespace Core.Mes.ClientPurviewManager
+{
+    public partial class frmReply : Form
+    {
+        string _ID = "", _Creator = "", _Principal = "", _Complete = "";
+
+        public frmReply(string sID, string sComplete, string sCreator, string sPrincipal, string sQuestion)
+        {
+            _ID = sID;
+            _Complete = sComplete;
+            _Creator = sCreator;
+            _Principal = sPrincipal;
+
+            InitializeComponent();
+
+            txtQuestion.Text = sQuestion;
+        }
+
+        void doReply()
+        {
+            if (chbxComplete.Checked == false && txtReplyInfo.Text.Trim() == "")
+            {
+                txtReplyInfo.Focus();
+                MessageBox.Show("请输入回复内容!");
+                return;
+            }
+            string[] sArgs = new string[6];
+            sArgs[0] = _ID;
+            sArgs[1] = ClientCommon._UserInfo.UserName;
+            sArgs[2] = ClientCommon._UserInfo.UserDepName;
+            sArgs[3] = txtReplyInfo.Text.Trim();
+            sArgs[4] = (chbxComplete.Enabled) ? ((chbxComplete.Checked) ? "1" : "0") : "0";
+            sArgs[5] = Dns.Resolve(Dns.GetHostName()).AddressList[0].ToString();
+            string err = "";
+            object obj = ClientCommon._RemotingHelp.ExecuteMethod("PurviewManager", "Core.Mes.PurviewManager.QuestionReply", "addReply",
+                new object[] { sArgs },
+                out err);
+            if ((int)obj > 0)
+            {
+                DataSet dset = (DataSet)ultraGrid1.DataSource;
+                dset.Tables[0].Rows.Add(new object[] { _ID, int.Parse(err), sArgs[1], sArgs[3], DateTime.Now, sArgs[5], sArgs[4], sArgs[2] });
+                ultraGrid1.Rows[ultraGrid1.Rows.Count - 1].Activate();
+                foreach (Infragistics.Win.UltraWinGrid.UltraGridRow arow in ultraGrid1.Selected.Rows)
+                    arow.Selected = false;
+
+                _Complete = sArgs[4];
+                ultraToolbarsManager1.Tools["tlbtnReply"].SharedProps.Visible = (_Complete == "0");
+                ultraToolbarsManager1.Tools["tlbtnDelete"].SharedProps.Visible = (_Complete == "0");
+            }
+            else
+                MessageBox.Show(err);
+        }
+
+        void doEdit()
+        {
+        }
+
+        void doDelete()
+        { 
+            Infragistics.Win.UltraWinGrid.UltraGridRow arow = ultraGrid1.ActiveRow;
+            if (arow == null)
+                return;
+            if (MessageBox.Show("您确定要删除?", "选择", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) ==
+                DialogResult.No)
+                return;
+            string[] sArgs = new string[2];
+            sArgs[0] = _ID;
+            sArgs[1] = arow.Cells["XH"].Value.ToString();
+            string err = "";
+            object obj = ClientCommon._RemotingHelp.ExecuteMethod("PurviewManager", "Core.Mes.PurviewManager.QuestionReply", "delReply",
+                new object[] { sArgs },
+                out err);
+            if ((int)obj > 0)
+            {
+                int idx = arow.Index;
+                arow.Delete(false);
+                if (idx < ultraGrid1.Rows.Count)
+                {
+                    ultraGrid1.Rows[idx].Activate();
+                }
+                else if (idx == ultraGrid1.Rows.Count && ultraGrid1.Rows.Count > 0)
+                {
+                    ultraGrid1.Rows[idx - 1].Activate();
+                }
+            }
+            else
+                MessageBox.Show(err);
+        }
+
+        private void ultraToolbarsManager1_ToolClick(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
+        {
+            switch (e.Tool.Key)
+            {
+                case "tlbtnReply":    // ButtonTool
+                    doReply();
+                    break;
+
+                case "tlbtnEdit":    // ButtonTool
+                    break;
+
+                case "tlbtnDelete":    // ButtonTool
+                    doDelete();
+                    break;
+
+                case "tlbtnClose":    // ButtonTool
+                    Close();
+                    break;
+
+            }
+        }
+
+        private void frmReply_Load(object sender, EventArgs e)
+        {
+            string err = "";
+            object obj = ClientCommon._RemotingHelp.ExecuteMethod("PurviewManager", "Core.Mes.PurviewManager.QuestionReply", "getReplyData",
+                new object[] { _ID },
+                out err);
+            if (obj != null)
+            {
+                ultraGrid1.DataSource = (DataSet)obj;
+            }
+            ultraToolbarsManager1.Tools["tlbtnReply"].SharedProps.Visible = (_Complete == "0");
+            //ultraToolbarsManager1.Tools["tlbtnEdit"].SharedProps.Visible = (_Complete == "0");
+            ultraToolbarsManager1.Tools["tlbtnDelete"].SharedProps.Visible = (_Complete == "0");
+            chbxComplete.Enabled = (ClientCommon._UserInfo.UserName == _Creator || ClientCommon._UserInfo.UserName == _Principal);
+        }
+
+        private void ultraGrid1_AfterRowActivate(object sender, EventArgs e)
+        {
+            Infragistics.Win.UltraWinGrid.UltraGridRow arow = ultraGrid1.ActiveRow;
+            //ultraToolbarsManager1.Tools["tlbtnEdit"].SharedProps.Enabled = (ClientCommon._UserInfo.UserName == arow.Cells["ANSWERER"].Text.Trim() &&
+            //    arow.Index == ultraGrid1.Rows.Count-1);
+            ultraToolbarsManager1.Tools["tlbtnDelete"].SharedProps.Enabled = (ClientCommon._UserInfo.UserName == arow.Cells["ANSWERER"].Text.Trim() &&
+                arow.Index == ultraGrid1.Rows.Count - 1);
+
+            txtReplyInfo.Text = "";
+            chbxComplete.Checked = false;
+        }
+
+        private void ultraGrid1_DoubleClickRow(object sender, Infragistics.Win.UltraWinGrid.DoubleClickRowEventArgs e)
+        {
+            //txtReplyInfo.Text = e.Row.Cells["REPLYINFO"].Text;
+            //chbxComplete.Checked = (e.Row.Cells["REPLYINFO"].Value.ToString() == "1");
+        }
+    }//class
+}

BIN
.svn/pristine/35/35eb9881f90e47fa4f84c3e683e088c098f739a9.svn-base


+ 773 - 0
.svn/pristine/36/360e6eb0d0bed18e0c8822bc3b2d9b16621283d1.svn-base

@@ -0,0 +1,773 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 1.3
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">1.3</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1">this is my long string</data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        [base64 mime encoded serialized .NET Framework object]
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        [base64 mime encoded string representing a byte array form of the .NET Framework object]
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used forserialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>1.3</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="pictureBox1.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </data>
+  <data name="pictureBox1.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="pictureBox1.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="pictureBox1.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        AAAAAAAOAAAAAAAAAAAAAD+AAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAA
+        AAAACQAAAAAAAAAAAQA4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgABAAAAAAAAAAI4QklNA/UAAAAA
+        AEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAA
+        AAEALQAAAAYAAAAAAAE4QklNA/gAAAAAAHAAAP////////////////////////////8D6AAAAAD/////
+        ////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP//////////
+        //////////////////8D6AAAOEJJTQQAAAAAAAACAAQ4QklNBAIAAAAAAAoAAAAAAAAAAAAAOEJJTQQI
+        AAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAAz0AAAAGAAAAAAAA
+        AAAAAABGAAAA4wAAAAQAbABvAGcAbwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAA4wAA
+        AEYAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAA
+        BmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAA
+        AAAAAABCdG9tbG9uZwAAAEYAAAAAUmdodGxvbmcAAADjAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEA
+        AAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAAAAZvcmln
+        aW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVlbnVtAAAACkVTbGlj
+        ZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAA
+        AAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAABGAAAAAFJnaHRsb25nAAAA4wAAAAN1cmxURVhU
+        AAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAAB
+        AAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWdu
+        ZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGlj
+        ZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlw
+        ZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0
+        b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91dHNldGxvbmcAAAAAADhCSU0EKAAAAAAADAAAAAE/8AAA
+        AAAAADhCSU0EEQAAAAAAAQEAOEJJTQQUAAAAAAAEAAAAEzhCSU0EDAAAAAALjAAAAAEAAACgAAAAMQAA
+        AeAAAFvgAAALcAAYAAH/2P/gABBKRklGAAECAQBIAEgAAP/tAAxBZG9iZV9DTQAC/+4ADkFkb2JlAGSA
+        AAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwM
+        DAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwM
+        DAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAMQCgAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEFAQEBAQEBAAAA
+        AAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUD
+        DDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKj
+        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
+        vOUkSgb/AGvpKr5PLfh/Erz5JJOP5nu0iuESTmd7pJcKkkp7pJcKkkp7pOuESQU92mXCpIqe6SXCpJKf
+        /9k4QklNBCEAAAAAAFMAAAABAQAAAA8AQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAAAASAEEA
+        ZABvAGIAZQAgAFAAaABvAHQAbwBzAGgAbwBwACAAQwBTAAAAAQA4QklNBAYAAAAAAAcACAABAAEBAP/h
+        GAJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVN
+        ME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0nYWRvYmU6bnM6bWV0YS8n
+        IHg6eG1wdGs9J1hNUCB0b29sa2l0IDMuMC0yOCwgZnJhbWV3b3JrIDEuNic+CjxyZGY6UkRGIHhtbG5z
+        OnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIycgeG1sbnM6aVg9
+        J2h0dHA6Ly9ucy5hZG9iZS5jb20vaVgvMS4wLyc+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9
+        J3V1aWQ6NDg2MzZkMTgtMjliMS0xMWRhLThjMTAtY2Y2YTBjM2Q2YWIxJwogIHhtbG5zOmV4aWY9J2h0
+        dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvJz4KICA8ZXhpZjpDb2xvclNwYWNlPjQyOTQ5NjcyOTU8
+        L2V4aWY6Q29sb3JTcGFjZT4KICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MjI3PC9leGlmOlBpeGVsWERp
+        bWVuc2lvbj4KICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+NzA8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgog
+        PC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9J3V1aWQ6NDg2MzZk
+        MTgtMjliMS0xMWRhLThjMTAtY2Y2YTBjM2Q2YWIxJwogIHhtbG5zOnBkZj0naHR0cDovL25zLmFkb2Jl
+        LmNvbS9wZGYvMS4zLyc+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjph
+        Ym91dD0ndXVpZDo0ODYzNmQxOC0yOWIxLTExZGEtOGMxMC1jZjZhMGMzZDZhYjEnCiAgeG1sbnM6cGhv
+        dG9zaG9wPSdodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvJz4KICA8cGhvdG9zaG9wOkhp
+        c3Rvcnk+PC9waG90b3Nob3A6SGlzdG9yeT4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3Jp
+        cHRpb24gcmRmOmFib3V0PSd1dWlkOjQ4NjM2ZDE4LTI5YjEtMTFkYS04YzEwLWNmNmEwYzNkNmFiMScK
+        ICB4bWxuczp0aWZmPSdodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyc+CiAgPHRpZmY6T3JpZW50
+        YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICA8dGlmZjpYUmVzb2x1dGlvbj43Mi8xPC90aWZmOlhS
+        ZXNvbHV0aW9uPgogIDx0aWZmOllSZXNvbHV0aW9uPjcyLzE8L3RpZmY6WVJlc29sdXRpb24+CiAgPHRp
+        ZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KIDwvcmRmOkRlc2NyaXB0aW9u
+        PgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSd1dWlkOjQ4NjM2ZDE4LTI5YjEtMTFkYS04YzEw
+        LWNmNmEwYzNkNmFiMScKICB4bWxuczp4YXA9J2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8nPgog
+        IDx4YXA6Q3JlYXRlRGF0ZT4yMDA1LTA5LTIwVDAxOjM0OjM5KzA4OjAwPC94YXA6Q3JlYXRlRGF0ZT4K
+        ICA8eGFwOk1vZGlmeURhdGU+MjAwNS0wOS0yMFQxNjozNjozMCswODowMDwveGFwOk1vZGlmeURhdGU+
+        CiAgPHhhcDpNZXRhZGF0YURhdGU+MjAwNS0wOS0yMFQxNjozNjozMCswODowMDwveGFwOk1ldGFkYXRh
+        RGF0ZT4KICA8eGFwOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDUyBXaW5kb3dzPC94YXA6Q3Jl
+        YXRvclRvb2w+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0n
+        dXVpZDo0ODYzNmQxOC0yOWIxLTExZGEtOGMxMC1jZjZhMGMzZDZhYjEnCiAgeG1sbnM6eGFwTU09J2h0
+        dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8nPgogIDx4YXBNTTpEb2N1bWVudElEPmFkb2JlOmRv
+        Y2lkOnBob3Rvc2hvcDphZjBjMGYzMi0yOTlkLTExZGEtYjYwMy1mOTA3NDI3MDhmNTY8L3hhcE1NOkRv
+        Y3VtZW50SUQ+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0n
+        dXVpZDo0ODYzNmQxOC0yOWIxLTExZGEtOGMxMC1jZjZhMGMzZDZhYjEnCiAgeG1sbnM6ZGM9J2h0dHA6
+        Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJz4KICA8ZGM6Zm9ybWF0PmltYWdlL2pwZWc8L2RjOmZv
+        cm1hdD4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+        ICAgICAgCjw/eHBhY2tldCBlbmQ9J3cnPz7/7gAOQWRvYmUAZEAAAAAB/9sAQwABAQEBAQEBAQEBAQEB
+        AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgIDAwMDAwMDAwMD/9sAQwEBAQEB
+        AQEBAQEBAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD
+        /8AAEQgARgDjAwERAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIB
+        AwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYn
+        KCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
+        o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8B
+        AAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYS
+        QVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZX
+        WFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG
+        x8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A/v4oAKACgAoAKACgAoAK
+        ACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgD8QP+C53/BTX4p/8Eu/2e/hJ8XPh
+        R4K8KeN9Y8f/ABqsfhvqtr4xuri203TdEm8F+MfFFzf2ptpomk1Iz+G44o1YmMB2LCv6v+iT4FcP+PHG
+        HFORcRSx31PAZTLFRWFlShUc1XoUknKraPJ+8d0mpN2sz8w8RM04lw/1PLOGc6p5djq1KrP21TDPFRTg
+        kow9nFp3cpJ82qSi7qzbP5e5P+Dv79rxXZT8BPg9Dz/qri81YTRjHCyAHBbHPHrX98Q/Z2eFUqcJTxWd
+        U6kl8E8Vg1JeUrTaT9Gz8shQ8clGKqeMmVudtf8AhFnv949f+Dv79roxlh8A/hC7g/fSfXJoVGB9/wAk
+        Fg+T+VbR/Z0eDyi5V8/zenL+X2+Flp3upHRRwXj3Vm/ZeK+W1MMt5LJZ6Pt8RPp3/B3j+2Pq08Vlp37P
+        3wf1LULhxDaWOk3OtXV9eXEhCQ29tYbjdzyGRvmCKzAc4xzXP/xT38EXOao5/nVSMI80n7fCRUY31k3K
+        UdOlu5z4rEeMGW06+KxvjJlMcLCOrnlEoRjbVuUnLliraXk0m9FqfpR8F/8AgrZ/wX4+P8th/wAK/wD+
+        CWGs2kF9pkV5aa18QfDniL4WeDNQ+1Jvs7nT/FHj630bTry3kU7mKTlQhHIJFfi/Fn0efoacFxrzznxi
+        U40ptTpYfH4XFYqNtHD2OHlUamnupRWl93ofPRzPx1r47Kcbg/FehiMmxUo+y+q8O1cXRqRbV5TxdGUq
+        dFNO8ak6kabta7PCP21/+DhD/gq3/wAE+/Hml/C39qL9kj4NeB/HGteDLXxrpKaT4jbxZ4c1CwvbnULC
+        KNdd0W/mtCLW901451RxIhPXBUn2PD76Kn0XfE3hLMOLeEuLc6rZfSxLoWqVqFGSmuV2caijOLtOMr8j
+        i1td3R7tHE+OdbOcXlUfEHCRqYHF81ZTyjl9rhuSlO9Jqbi4Wm4urGXuzvCTi1Y/sL/Zj+KOt/G39mT9
+        n340eIrHTtK8R/Fr4I/Cz4l65pmlSXB0nTtZ8deBdD8UajYaZLcn7W2n2l7qjxwtIfMMagtzmv8ANXjj
+        h+hwrxzxdwzh60qmFy3M8VhYylZylHD150lJ2SXM1C7sreR/S+UYipjMsy/F1V+9qUITa85RUnv09T3t
+        Purnrgev9ea+UvfU7o7IdQMKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgD+Q3/g8Rulg
+        /Ye/ZwjMcchl/ak0xtroHD+T8KvifKoYEgMm9Rkd+lf6N/s3KVOr4i+JNOtTjOm+GMRpLa6rYeS/FK/d
+        adT8p43oupxLkNVL+Fhq1/Sc6cX+enZn+fV8Pvh74q+J/i3w34G8DeGfEfjLx34u1C20/wAN+CfCejax
+        r/ifxDfyxXMv9n6JoXh+z1S/uIZEi4lCh48FnURhnH+sOJ4gyPhjJatfN6lHA5Thad3XrStBxja8pTna
+        MY3lbmk/d7nNXq0ce6lZY5UpyvGUnC/LNL4IUoXc9o225nof2G/8E7P+DTD4g/EGx0L4mf8ABQLxnqvw
+        c8O3q2V+P2fPAOraZq/xHvLZb3UBdab488b6dcah4a8KLdWKWzwrpE+qTmGQic2s6tGv+dvjB+0Hy/Lo
+        Y7IPCbL5YvEtyTxtTmoYeN4xS9nRX7yq4u65pSox0XL7SD5n24Th/Pczo0bVP7Oox5Yym/31TEJT55VF
+        Slyww6qU2oJT9pKDTbhfQ/sf/ZS/4JzfsU/sTaHa6R+zb+zx8O/h9eQ6ZHpV74vh0O01Tx9r1qknnn/h
+        IfG+qR3fiLWHef5z5s5UN0UAAV/nDx14yeJfiRUk+L+L8XicJz88aCm4YeErWvChDlpxlbeXLzPW7bbP
+        qcr4NyDKqlDExwft8ypp2r137Wt7yadpy+FNNpxgoxSdlFLQ+2VUKoVQFVRhQoAUDHQADAFfmerd27s+
+        oSUVZKyP85j/AIPA7iS3/bp+DKJtK6h+zBpVtcLIpf8AdW3j7x5JGYQeIpC10+4jlgF9K/2X/Z/UcNU8
+        DeJo18JSqKpxBWg3KPM7PCYd6dmrXXmfjTq1aPiNxrWpzam8soUvLllzOWndtLXsf2cfAD4o6x8FP+CU
+        P7MnxL0Lw1deNdU8IfsYfs9aja6VFBfMLhovhF4OQ3+oW+k2upat/Z9mp865W0t7m5Eat5cbnAP+YvGO
+        T4XOvG3jnK8VjVh8LUz/ADC85vVJYms+W70cntd9dz6DPOJ8Xwh4dT4kw2UTxeJw+DpyVGndt+7FdFe0
+        VvprZmD8W/2rvjr4H/Yf1v4/fDvxL+zj8U/il4f1bwkLiGy1/wARxfDltM8aeJ9E8N29nq8+k6LqPinQ
+        dZ0ZddWaSGWwEheAo6pliqynhHh/NPEPLeHq2Ax+GyWu6kLys5OVKEpScZpOMovlvdXtfzPmcy8SMXw1
+        4Z43jrNMVhsZKlKlNwoL3oUq84U6cJQTuqkZVI3767G34a/ay+M2vfHj4u+B54Pgrp3gn4GfCPSvFviH
+        Sp/FOqj4reMvE1/4IvfE1xqWgeFZNNSO3+H9tqUEdul+0hZ42ZioddlYZpwTlOX8N8PYyjHG1swzPGyj
+        GooRVGlRVdU0r39+q0npdatWPpMt4yr41Y2rODjSwmGhUqxlTcZylKlOralG7c2ko3S26nmOmftgfte6
+        58E/gT4u8GaH+y78RviZ8ffEmpatoGn+GviF4pvPhtongHQPCmk+JtY0G+8Vad4avNQk8eQtdz20qm2F
+        pbSxDzJRyR6dXgrg+lxPxJl+NrZngslwNOEE61Je1lWnUlTjLlTf7uTWmnRnFV4zzuhkuV4ilhsPXzLH
+        Sk6fvKEYRjThNKau/wB5eTvG6sQfET/gqNqvg34Dan+0Hofwhk8X+HNI8JfAPxxe+FdK1Yz+K30X4ra1
+        4d07xfDpsMEMlnqt14KtNXmlj8qQrdNAEyGYCu/LfBmjmOcT4cjnUln1Otj4Tg6doxWDhUkpczf23DVK
+        9u/U8TiDxaxOQ4b+1sdgMPh8llh8PKM51U26tWcbQ0/5+RfJDa0mnrseoePf+CiVj4K1L4gPZeCJfGOk
+        R+AfgXrHwR07w1efavFvxa+IfxutPFt3pngK0sGVdOsW0m08Ly3d9dNcCO1s4J3bLoqN81gvDXEYvC5J
+        Wli+T2+LxUK7a0oUsM6d6j8pc7UP5pWWh9JX8Rcvw8K2KxFaMcHiMNTnhHBOp7Sq43nRbj9pOye3Krs+
+        g/2XPGnxl8ZeHfE2vfGbxv8ABfxFr11riC38HfBPVIvEmk/C+L7LF9q8I+IfE5uFudb17TbtmS5ke3t9
+        rjChlwx+X4ww+R4LEYHA8PZXmFNRT9pWxK5VWs7XhGy5FZX3b1Wh7+QV89ccTis6zHD1aNSNN04Uocsq
+        POrtTfM3Kz0u0tj6yjYuiOQVLIpweo3DOCOmRmvlnbofXSXLJxvez37klIQUAFABQAUAFABQAUAFABQA
+        UAFABQAUAFAH8e//AAeJyh/2Pv2YLDkyXX7Sts0AAGTKPht8Qo+5GCEc/XpX+kP7OCMo8beJVeFrrIKk
+        bd1OrRj+F+b5HwmfYf61xHgMJZ+0r4VU4O17S+s0X3W6T0O6/wCDTf8AZV+BGh/sNT/tVw/D3Qr74/eO
+        Pit8S/B2ofE/U7FLzxDYeD/DFzpVhp/hvw7cXPmjQ9MErTNObbbJcux8x2VUVfnfp+8bcYvxNo+HtbiO
+        pU4Pw2X4evSw8E6cHKr7RqVVXftJxikouWkV8MU3KTx4QyrDTxOYZnisL/t+HryoU222lDkpSlKMb8vN
+        Obd525rJRvZNP+qnxf4x8J/D7wzrXjPx14l0Pwf4S8OWFxquv+JfEmqWei6Ho+nWkbTXN7qOp380FpaW
+        8MaEszuBX8G5ZlmY5zj8JleUYCticyrzUKdKlCU6k5S0UYxim5N9Ekz7rFYrD4KhUxWLrxp4eCvKUnZL
+        5s/lw/bR/wCDsH9jT4Fazf8Agv8AZi8B+J/2sPENi2ow3fjHTdUTwN8Kbf7HEzHU9H8SX2k6vqHjDT4H
+        VvMNta20bbMJMc5H9ycA/QN49zvK3nPH+dUsig6SqU8KqbxOLqRWrUoxnTp0XbvOpJX1grWPg8fxnmFW
+        WKp5HlLdBU5cuIr3hB1U0oxVFJVJRs3Jtum20opWlzx/of8A2N/jvf8A7UX7KP7O37R2qeG4PB+o/HH4
+        PeAvijd+Fra+bU7fQJvGnh6x11tLg1B4LZ72K0F7sWQxoXAyQK/kfxP4Rw/APiJxrwThMfLFYbKszxGF
+        jWlDklUVGpKCm4Xlyt2u1d2fU+yyjE1sbleBxWIlB16lKLk4JqLbWvKm20r7JttbXe5/BR/weBCGb9vP
+        4IwM8qG2/Zg0i8mZIhIqW0/xA8fxF+Zo9zRSWy5TqVfP8OD/AKtfQAxFOj4F8TVKlkocST3vZqWGw0Hr
+        2jzcz+7S5+VYzCZk/EDi+WDwaq0/7Mw1Vv2ijZc1WElZp3soc3ndK3U/tm/ZC+IHhf4Y/wDBNT9jbxr4
+        tmntfC2mfsk/s0tqN3pmlX2rw2Vpd/CTwZD9qfTrUXN7NpcCy5cDzHEQ53Hr/mN4qZNisV43+J+UYOdO
+        WIhxJmcE3PkjLkxtZNxm1u7Xina/dH3+OzXB8P8ADdPGVHVlhFThBP2XNK00oqU6SkrLX3lf3fM/Lz9p
+        W7+H3xrtf2g/iN+x54X1LVvhte+A/hJ4W+KXiPwT4a1vTPCnxI+KUPx9+Gd14csPCnhy9g05b/XfC/hi
+        K+bVb2C0iSGP/WmbBr9D8PZV8qxfC+Vcb5j7HEVKmJnh25x5sNTVGpFuq7Nw9vKSUE29766H8w+KeDpZ
+        rR4urcCYB0+G8PQwUcXyUpfv6lTG4bERnRjop+zjTcJ2StzN9Hf6A0/xN8G/Cf7Wn7Z/grxJaSW37Rvx
+        A/Z90J/AkVz4M1+XV9f8E6d8L9YTUNL8PeKorCbw+9rb36FZLRpYpPNIwOcV4GIo43FcM+HlfK6sZcP4
+        TMqkcTGWIi/ejiFJPk92VJe9F89pp3b6H6dSeZUsXx7GrgsX9axFKLwVaSVoyWFjGcYNL3bqS1aa0aTu
+        jwOx8I/Dv9sP9g/9mD4M/sk+KfEHw3u9A0zWfDvia78CeGNa8Avo/j3QPA+haj4z+GXi+XW9GtNU03S/
+        H93M9nqF7YskkzZ8q4U5A+hrY/FcLce8d5pxnGNanioReGSrwqp0nUk1LmXMp+yTulywl5HzufRq5vw9
+        wJgOG8HP+26c6kJwcJfxY0IKrUk9Erx96+qd7Kx0nxX0LxJ4q+Fd0fht8FPF3ge10mT9ifS7b4bWvh6V
+        5fB2m+DPiL4BXxX4R8t5AL6y0JLOUTtucz26M79Sa6OFc3o4PP8AC18fxJCdVxzWt7SUknU9thq7h7SV
+        naVVySta0ZNb7HyXGOF/1lhh6mF4ddXL8Li8sg8PUpy5eahjaEpNu+yjFxXuvuznvFv7Knxx+E37S/x5
+        +Jvwt8O+JPin4Q+DHjP9nL48/Bn4PRQLpFv/AMIhdeF/ij4b+Jnwq8F6zdNef2rqukHX11Gwibyyro1s
+        W23G5OHKuM+HcdwrleVZlXjhsxx2BxeBxNR1NVOdSnUoV9IWguamo36uV3orP7peHuEy/HOhg6NeNPLs
+        yWOglJuCjXilUpKDjtCLf2umiW59Zf8ABOjxJ8KPiD+0D+2l4/8Agn4a1jwp4J8T+L/BNzreiap4S1vw
+        XNYeO18L6c3irT9a0PVEWzg8TWV6Sl3JYvJau46sRuPyPing82y/g/gbKs2zSjiMxw6mm6dWNZtJ94xi
+        9Y8t7t638z6jgLGYfHcYcafVqOIeW1lHl5otRja6Vr9Hd2SP2GSVEjXLr8qA53Egqi5Zs7TwAM1+Kzdp
+        Xejb2eh+yezcIpQg+VaK/boKZwM5UYChshuoJABHA49anmjz+zbswpqc58jjZifaCd2EztyNpYZOADlR
+        nkH3wahybnyU7St8Wu3b79fuCSaukr23HmfGBtxuAxlsHJ7EYOMfjVzahHmlsNJ2vLRCrLubbheemGzx
+        jOfuimnGSvCVyXOlzKCnefaxNQMKACgAoAKACgAoAKACgAoAZHIkqCSN1dGztdCGU4JBwRwcEYoA/D7/
+        AILn/s3fDn9pP4BfCTw38Q/Dmn+ILTRPi6uracl9qd5pP2O9l8D+MLBZ4bmxurScki82kB/lzuHKiv7V
+        +hBxnj+DeO+L8Rgq8oKtlDjJKmqqklicO37soyS0T1/7dejP4Z+nLxjxvwFwlwNxFwFxLhsszj+2qVKp
+        Ur1IU4yoOFSrKKc9L81KL09+yag7s+b/APgnl/wSy8R+Ff2avDk3wT/ax+M/7PngbxLrGteJ4Phl8NPF
+        Wt3/AIVsdWu5oLe+1JW8RapqM0N9qElkDcJatDbPgfLuya/SvHv6S3D8fETGZdxH4OZHnmY4GhTw/wBb
+        xlCEK0qaTlGNqMYJxjzvkc+aau9bWPgfBHw68UvHTw/w/H3EvjpmWAxFbEVqVGOUV6lKhONCo6arVXRq
+        06dadRpuTUdYKCc5NO3Kf8FJ/wBgXX7D4W+DdP8Ajf8AH/4l/tSeBdX8SFNW+Hvxf+JHi/w34Hhu9MiT
+        ULXxJe6T4b8QaZous/2VJyEvobiWEYNu0bFy3r/R18a8gz/iTOKPDXhnlPDea08NeGJwGDoV8RKMnyui
+        pV6c6kOfvTlGMn/EUklb4n6RnC3jF4C5Dw1mmQ+P2b4761jKnN9eVLE+ynCmnzwhivbuUOW8XCMlJOTa
+        0nI/L34Q/wDBG34b/Ha9jsPhf+x58Pde0rU7q11N/Gt38T/iLZ/DXTtGu2+xajeWuuHXLltW/s7UQ839
+        l6cYmulTc+JDvr+juLfpMYHw9l/aPE3iTiaeZUVOCw6wGDnjZVEuZRdJ07Uo1I2TrVrxjN6J7H5R4YR+
+        mF4vZxlcsFxjjp5O5TcseqWXUcM4p2cZ01QUoyi3eEopzkk4qMldr+grwP8A8Ec7z4ceCvCXw/8AAX7a
+        H7VngTwX4N0q00vw94O8IfGv4qaV4Y8O2Vlbvb2ejeHrCPxsGsPD9iJW8m1LMqgLnhcV/CGb/TDo57m2
+        bZ5nfgjwhjs4xdRyqYivluDnWqNu8p1ZPD+9VlZc00k9+5/fVL6OXiS8LSpV/pN8TQq3jKSo0MDSpqaf
+        NJ04RorljJ3vG7Tvdps/JD/gop/wSt+GOmfE7R5/i5d6x+1N4t1jwOmq2nj/AON3xR+JF14s0i20nU7q
+        H+wbAXXi2fSp9KMWZVhjjQI+5nBL5r+p/Ab6QmJ4s4Qx2Cy/J8Jw7klHHqMsJl+Awf1epKcYyVSVqCqR
+        ndWbcnzRsltY/hz6SuceOng14pUuDOG/G3HY3E59lSxNKdbC4CnWg6VSdOVN1PYKMlKMVZqzXRRbTf7f
+        /tO/to/D3/gmB/wTU+HHxq1T4e+JvGOh+C/hf8Hfh34H8EeBbK51K3m1q/8ACWjaF4Q0q81K1WVNO8OL
+        LFHG1yTho1Cp8zCv868Rw/V8QfF/jlY/OaeG582xtevVqL33z4mbnyUt5TcpXaStC95aJn+mvCOfZllf
+        hN4XPiKnUr8RYnJMD7acpfu/rEcHTqV3Xr/ClKSnZt/vX7sdz8FvgH/wdmeGfG/7Ofx48SfEH9l/VND/
+        AGj/AIKaBqvjW08B+En1KP4c6j4RbxnoPhmxN7rOqTXep+HNWtbXXxJfea6pPIhCdcD7Kt9H/wDtLNss
+        oZZxhKGEqxlKcKyTq1IwUvfckkkp8q5IN3p397ZHtVOLM4wkMqwDwGHrYfG1JRp4ijaNOheDlCDpX5px
+        0klUjJJJptR2O+8c/wDBwh/wUw+GnwOtv2l/Hv8AwR/8X+GPgEuhaR4n1D4k6h4vvzox0DX/ACzperLD
+        DM11Z6ZdrMhMsymMblPRq8DA+FHBOY5jjMh/1gxMcwTcJU26bm3eygrpXl3mnbllFdDsp8T4zFf2e6VX
+        DtqbjJunWjGaT5XySulutHJO78keqf8ABTj/AIOUvDX7EHw6+BVh8O/g8fGn7Rnxd+F/wo+MOteEfGdt
+        r1n8N/CHgj4ieFtK8UraQeLNMntF17VUh1Foo44ZSI5Ey4+YArh/wSjiXmONzXH1MPltPEVMLQUUpzlK
+        hUcKsptLTltp/O0+XY1x3EWdVs9rZHlGFjCGGa9tXqcqVKcoRkqNOKSlUTulOqnypbaouftZf8HDPxu+
+        APwU+C37Ufw//wCCfnjr4j/sufFL4SfD74hz/HPUdZutF8MeHvFHjXTbW4n8H32+OSSyutP1G7+zedM2
+        Jj0zmuTLfCLLsdmWZ5cuJ4r6qnflnBT9imlTcoTad5S5Yy0vG+uh52XcW5xm0szgsvo4XE08R7KCqwmq
+        dSpF3lOEotKUdLpx+bezT9lv/guF/wAFLf2odX+B+veFf+CPHxNHwG+MXinwzZx/GW11nVB4a07wdrGr
+        Q2OoeMob+aJLNrHRbEzXLlsK6RED7wpZv4a8I5fhMVHGcX8uIjRnJ0/aUfaxlytwTpq82nJJadztoZvx
+        RUlDEUp5fOE6vs5tQxFm18STc2klG/vtcum7OV/b9/4OUvi5+xB8XfiB8FfEP/BN34rWmt/8JNrHhT4F
+        +NvGPiCHTvB3xaurO+/s7SvEmmpZ2MV1rOharKFZI7GczKGCswbIHRlvgvk2d5Jk2c1M4xeIpqpCM/Yp
+        QtUlBS5Y3kndX1542T6W1OiPEVd1MbUwdXBU6VJN1G2+aMU2uZpL3l7ujTSf4Huunf8ABbD9p34E/CH/
+        AIJ++M/29P2R9E+DPiL9tj466h8I9c0jSdc1HRV+Eeh3Wvf2d4Y8VeINH8Q3uo6lD/aukTxXrwyyIY4C
+        ScHArzMV4ccO5zjcfh+Hsyrzr4WbjOFVcrhKzcVzWiql2lF8ifvuyMqOf5tFYqvJRlhoRc1OScJTin7z
+        UW7pJXcW/iS03RH+xv8A8F7rj4na1/wUo8V/tT+B/CPw++An7CXiHw/a6f4z+Fun+L/FfifxHousa5da
+        PZXGpeHPt+pzapc6i6QTQyWccUcSuRIMDdRxN4ZYbCVcty3KMTOWPlVak6zVOnpCM+ZSaVlduKV3zNXW
+        uh10OJL0sFi5O9OvBOPLFt3bsovVWfRt25eux4Z/wTX/AODnLwJ+1X41/bAh/aF8D6V8Lvh58CfCuv8A
+        xa+HXiHwJ4b8Ya9rfib4U6DrD6fd3Xiqwlur9YvFgtbqzkjtbaOIytM6hcxE16fFPgy8HQy15Fi4zxVV
+        041VOpGN/aL93KnKyc1dT51ryLlb+I4pcTV8sx2Gw2OhJ1MZdU1CPM1KF3KMrPRJOPvu0W3bor+MfFX/
+        AIO9P2ftH/a0+EfhD4UeDbnxL+x7qVjFL8YPij4p8C+OdI+KmgaheCQg+EvCD3cKanZWB2+aDbyNMCRE
+        wxz3YTwKxNLJq0szx1OlmjUuSMqiUHy6rWUby0102elmdVXOs7hUlOhhYSs4pQcknJO/M207Ll0aXVdu
+        v9N37Dv7ef7O/wDwUI+Ds3x4/Zt1vxHrHw5tfE2r+EJL/wAV+FdW8G3x1XRXEV0I9L1qKG7NoxdTHIRh
+        wexBA/FuIOG8dwtjY4LH+zdSorrkmprRtPbbZ2utVqtGj6fA4uWMpzdTDclSL7q/R9G+nmfZv2+y/wCf
+        qD/v4v8AjXiHW2k7PcBf2R6XUH/fxfr61KmnLks+b0H59BVvLeQZjkWQZAyhLAEhiBlQcH5aHOMVFykl
+        cUXz35U3ZX2JRNEf4u5HII6HHcVCqU5K6qR3fVdNDTkn/Kw86P8AvD9f/iar2lP/AJ+L70Lkl/K/uE+0
+        Q/3/APx1v/iafND+eP3r/MOWf8j+5h9oh/v/APjrf/E0c0P54/ev8w5Z/wAj+5h9oh/vj8m/wpe0p/zr
+        7xcs/wCSX3MPtEP98fk3+FHtKf8AOvvDln/JL7mL58X979D649KPaU/+fi+8OWX8j+5mboQxpVqMKuPP
+        4T7o/wBIm+77U4/CrRaXZu7+8lJpWk7v+ux+Kf8AwXGfXJ/gt8E9L8PatDpOpah8X7nE1zpWnazGUg+H
+        njeeJTZalPBDve5jRQwyxJxjBNf3V9BGGAjx1xvisywrq4anky0VSVN64zDR+KCb+G77fgf52/tDMTku
+        H4N4Eef1aiwEMzlNuNWvRtajUipOWHhUqbyUfgdua/Rn1b/wSgtdZs/2B/2frfxDf2uqa2nhu8/tK+s9
+        M0/R7a4uTq16WaLTtLmnsLVUGF2xsy8V+S/S2qYKp9IHxDll1CVPBfWY8kZTnUaj7OO85pSl3vJXP2z6
+        G0stqeBmT1cmi45VPMce6Sc6lRqP1qpo6lWMas3e/vVIqXRqyR9gfFT4G/Bz45WGkaX8Yvhl4I+Jum+H
+        9QOraLYeN/DumeI7PS9SKLG19ZW+p29xFBctGgUuoBIFfjXCvHXGXA2IxWL4M4nx2V4qvT9nUnha06Mp
+        w35ZSpyi3HyZ++8TcDcH8aLBrizhrB5gsO5+y9vSjU5PaJKoo8ydlUUUpraSSveyPRtL0nTND0+z0nRt
+        Ps9K0vTraGzsNP0+2htLOztLdFigtra3gVIoYYo1CqqgAAYFfO4rF4nG4iti8biZ1cVVm5TnOTlKUm7t
+        yb1bb1be59BgsDgstwmHwOXYSnQwVGChCnTioQhCKtGMYxSUYxWiSVktjwD45fta/s8fs62Mlx8Wfit4
+        N8L36vHDDoFzrdjL4imuJ4ZprRDodvNLqcENyISFmliSAHGXGRX6BwL4R+IviRXhR4Q4SxuLotNurGlP
+        2KSaUn7VpQbV78qk5dkfl/iN43+Gvhdha8uJuJaH9qR0jhKL9vi5S5JTjH6vS56sVJRsqk4xp3aTmm43
+        /md/bL/bD8G/tO+LNU8Z6h8RPhH4L8P6F4cfw74d0rVLfw34yNnbxX9zcHWr29uZI729vdVTUEX7JDGY
+        4SnyZbcT/p14KeC+f+GGT0Mmo8OZxjcyxGJVWrOm62Hu3GK9nGKXLGMHBv2kmnK+tlZH+DfjF9JbxK8e
+        /FbDZ7T8FVhMrwmGqYbDe1p1p1Xh26id6zorkqyc3NOEbQvFJNLnf6S/8FNf2zPil+wT/wAElfDvx6+E
+        Hwh0v44eKtI+HXwh8PwT3Fgt94P8FLrfhjS7C3+J+qaMIbq5utG0C4ZLmNPL8mM7fPaOPc1f54YTh6jx
+        N4u8d0ZY2phq0Myxk40byVWt/tM+akpL7UU7zV+aSTUE2f7j+HdOVHwN8HsmdL93U4ay2k6ztVjScMvo
+        2k7253JxajK2snrq0fxGfs4+NPgvff8ABL3/AIKpz+M9A8ceI/25fjt+z74K/aB8a/GnXDpt54RvPhJr
+        Hx3+HVnp/hLw632w6tpGrf2vq0b37PbJFLsRA/yKp/dMwyXMY8UcEcQYXMksnxNOrKac3BQcqcuWk2/d
+        i4xVuR2knebV7ns5PxJhsyzDNcNLL5OOBx88HTfLpzQhJSqJW0jJ/C9rKxyPxZ+InjnUPFP/AAVE0HV/
+        GninU/CNt+xR8GrWx8O3mu3E3h3Tw+m/CZdPWy03UJo7a1ihKyCJIlLlmZgDur7bH08NDNMHRhU9jSpy
+        ozqXjFRk5yqfFUlZ3ko6Lqk7dT5jJa0muE8NL3ZSni7y253Tqwat3vzNK3Z9j9Gv+Dg/9rf9nY/8E+f+
+        Cf37FdhNBr/7Ufhb4S/s0fEDW4LLSklXwp4Ov/hJ4On0bTtW12aJLuN9YsWiWG1jLsUXeyhSCfxvgvh/
+        HU88434ir1VDLMXmVeFKCm23KOKqNySf2dleN97H6hOtVq5hha9ChKlOcXOpUaaT56UIxdrXm04+dkvM
+        8L/4LA/t6/GH9qP9mL/gnX/wTDs/2Y/G3wP+LtzoXwg8R+KtI1uz0/w94I8Xa5r/AIcsvDngfQPAJgu3
+        g1Dw6k2oie9knESw3AEbDepr1eG+CcBw/wAR8X5n9chiYY74HGo3GmklKvGcoXUZwSb5f5VrZux8thc+
+        /tHBYrMMRSlTw+VSnCUVD95iJtpQrQp/HCM7JwbSTk3Z2tf9Pfgx/wAFS/8AgrX+yD+1j+wr/wAE4v2n
+        f2ZPgD8HPBvxcHgfwH4W07whcWtzdQfD+Syk0NtR0zUPDF7qFjp+sW0kIlkQ4kSY/OoLE18xmnCXhjnU
+        c1zjJ8VXr1qSqyqYmVStNKdOnKahyunZpyilvyuOt7F4/ib6pkeNwWB/dYynTot06kVGcVi6ipxc05c0
+        HLnla6V2mk3Zo/Cn/gp7+z/+zZ4v/bW8O+B/hD4w/ahtJb39sPxz8Hfi3f8Axo8XWHjM2esLq0Otan4i
+        +E88es381hpwiuzHbxXQtijqpIGa/VOHsJnmA4VyPNsViKDpZpiaXLBS0jzUYtWXTU/PMVxzHh3PONeG
+        VlVCdbKeH3iG1ytzlGrOCjK27dpd+297fr74c8U+FPhH+y1+wvqH7OvwF+KX7VH7DOtf8FBfGHw7/at8
+        BftHfDhf2i/ijpXijwb4wn8Mx/EHQptB/wCErl8EW0NhYedprWzYaYIrDeSD8JmmWYyjnObZDj8wp0eM
+        qlGh7CrGqo040ZWlSbbaV4VlF3lrCDb0TPbynEZlj8twfHOf4uFHIMwy3D16WHlKMfsQn7NJtSfNC6st
+        XLSN0V/+CG3x++C37OHxG/4LbftI/HaK40/9nfwZ4y8JS+JItd8OzXkgsda8T6zaeH/Dd34Yltpk+1lZ
+        Y4RBIgkQqAVGDjyvFHIc5zPMco4XwuKi83hWhW9rGSaUKdCDk+aN9L35raq93ofoOAx+U1sswOaYLBTW
+        AqR9ylKPv3lJ6OLs/i2uvQ+Sf+CA37T/AIjb9pP/AIKeeG/2W/gLovjzxd8b/C3xC+Jvwd8beNdHFv8A
+        CrwTp2jeJb7WNO8N/Ema6txp+h+H9Z0zVg6wylQzWhUAgV6nG2V5biMqyWtm+OmsJhMTCXNTnZ1lWjye
+        zjO6tKEoXfLdxTu0ua5GLzTE5XisBKngadSlKMvaRtetTjup04JNuOjUn/h7Hg37YXj/APbf0T4rfDz/
+        AIK3+PLH/gm/4oH7POraX8PE8C/Bvxl8M/FOha5r8lxLC1r4j+Gem6pLq+o6hBcSndutSYYlVzhCGr0K
+        WU5XisDg+F1lmY0KlGOIqSqOdSpzKUVyuGIjzQjqrR1u9Djy3PcBmeKnDDUa0XOpGV60PZtuPve5CajK
+        Ue7jG1nd7n9tn/BHX47fHP8AbP8A+CdWl/GD9o74TaB8Ddb+KeoeKY9E034W6fc/DOLVfAt/cCz0bxfo
+        q+H5dM1bw9q15ayloL63eC5SQLNE6uAw/njxAoYHIuKsoq5ViXip4aMKnLiHHEx54y5oxqQqqcKkLpe0
+        ozjKEo3jJNNo+rwVGeZ4XP8AA4hVaeHrXp81KUqE+WUOWTpVaUoVISje8KtOUZxlacJKSTX2F/wyx4B/
+        6Hv9pH/xKr9ov/55dL/iKOf/APQh4Z/8MWU//Mh8x/xCnIP+h/xN/wCH7Ov/AJuF/wCGWfAX/Q+ftJf+
+        JVftF/X/AKKXT/4ijxBa39g8M2/7EeU//Mg/+IU5D/0UHE3/AIfs6/8Am4if9lT4eTFTL43/AGjZSoIU
+        yftTftFOVBOSFL/Ek4BNEfFPiGN+XI+GFftkeVf/ADITLwn4el8Wf8SP/uu53+uNsR/8MmfDb/ocf2iP
+        /Eo/2hv/AJ5NX/xFbiT/AKE3Df8A4Y8q/wDmUj/iEfDev/C1xJ/4fc5/+bg/4ZM+Gw6eMf2iB/3dH+0N
+        /wDPJpvxX4le+TcN/wDhkyr/AOZQ/wCIRcNf9DriP/w+5z/83C/8Mm/Dfr/wmX7ROfX/AIaj/aG/+eTS
+        /wCIrcSf9Cbhv/wx5V/8yh/xCPhr/odcSf8Ah9zn/wCbhP8Ahkz4bf8AQ4/tE/8AiUf7Q3/zyaP+Ir8S
+        f9Cbhv8A8MeVf/Mof8Qj4b/6HfEn/h9zn/5uD/hk34b/APQ4/tE/+JR/tDf/ADyaP+Ir8Sf9Cbhv/wAM
+        eVf/ADKH/EI+G/8Aod8Sf+H3Of8A5uEP7Jvw2H/M4/tE/wDiUf7Q/wDT4kGj/iK/Ev8A0JuGvnkmVf8A
+        zIH/ABCPhv8A6HnEf/h9zr9Maw/4ZO+G3/Q5ftE/+JRftEf/ADx6X/EV+Jf+hPwz/wCGTKv/AJkH/wAQ
+        j4a/6HvEf/h9zv8A+bD7f0P/AJBdr/23/wDSiavzY/UD8WP+CxXibxR4fn/ZStPD2ieMtTg1/wCK2u6f
+        qt/4X8Iaz4wttEig+Gnj6+sbvWLbSdF1YWUM+o20USSytEDI4UE1/af0OsJk+JxPic81zDCUalPKabpx
+        rV4UPaN4zDKUYSnUhe0OaTWu3e1/4L+nlwFnPG/AmRf2NOpCthMZRm5QjzNXxFGCtHlfNL33ZLW3M0mk
+        +X2H9hP9pz4TeAv2R/hZpfxJ1vXfBPifSbbVtP1/w94g8AeObHVdL1OLU7maa3ewtvDEjNCYp0eORAY3
+        DYBJBA+a8ffDPirPfGHivE8M4XDY/LKsqdSlWo4vCzp1KbhFKXO6y1umnFu6tdq2pl9GLxS8PPCPwN4a
+        4S42z/E4PPMFicVTrwqYPGzaqTr1Kq5XSw9RTpyhJOM07bxk1JOK9D8X/wDBTv4AeGryex0Xwb+0H4/a
+        OEtb33gv4F+O7zSby4+bbaQ32p6dpREuAGJZAoVhyelfP5L9F7xAzSjDEY3O+Hcui5axxOaYSM4rT3nG
+        E6mnTR3utj9Vx/0t/DenTxVTI8k4izSNN8qdDLq0VOdk1GP1h0Ju9173JbXdn5wfGr/gpX+1F8SrXUdK
+        +FngLx/8FdHS6t5YtctPhP428R+N4Y4Z/wDSNPvBqXh0aXam4tCXPk28rI+FDnBr+l+B/oyeFHDNXDYv
+        izibLc8xvK06Tx+GoYZtrScXCtzytLT3pxTWrifxd4h/Sz+kFxt/amUcKcFZhwtl1JKcMRDDzxGJnZuL
+        oynOnyQvfnvCnGaskp2vf8+NYX4q6lruo+KNYuviDdeIdavV1/UfFWufs7+LfGmv+I76R4oPsmqXN5pt
+        jLY20MblligiKrjjaOa/ovB1OEsNgcLlWAWVwyuhD2MMPSzfD4alRik3zU1GclKTdrylK78z+IsRkHiZ
+        js2zipm2TZ5i84zCp7WWKlh5urVqS9736tS8ktNbKX8rKHimLxzr3hzWbjWdI8U3Ma2ltax2Nj+yr4mh
+        nuWk1S1iDbXsZTHuDctg7B838NdGUVchy/NMHTweYYOMueUnOWfUGlanJ9JK/p1enU8nCeG/ibjf7XrV
+        +Fc7jVpUJ8ijF07u2j5lGPL5+Wh+0v8AwVt0rVV/4Io/tB6HaaZrGo6on7MGj6Z/ZWj6ReXmq3E8fh/S
+        7eS1h0izt5boSCSPDRrHlMcgYr/LPhLE0KnjbisZ9ZUaMszxc4yvfRzqNWfW99H1P+gfw8wmOwvgl4XY
+        HNU1mlLIsrhVUo8j9rHC0IzvH7L507x+y9D+Q74dfAf4AfAP/gnx/wAE9/2//jv4S+M3ixb3wN8SPgB8
+        Tf2R/D/wt8ReIPDf7S9z4ctr/Vvh9pnxUu0utE1TwX4Q8NeIdIs9RlZrS7jvLm0j8s45P6llPGXEONo/
+        2FLMZ0Mpy6isRTqx5HOMcVde05JQcpSlfRNN073ktLHn1uF4YbNc/wAVgMqnOvmeJ5rOryKEqNoVa0Xz
+        KykpO8Vromj8+/hlpX7Uf7MP7QHwm/a7/a6+A/jDUf2UP29YdXvviz8KdI+HGu+OLjWP2fdJ16zFr4Pu
+        /DTQaZLo15oSaVYDTFmvbaY28QbG3OftcTndLMMqxODqZ/ReMpwk589pzpuFPmoQbgnqpVG+az+Jxtey
+        NXwhk2IwNDhqjh8Vh/7PrJ0azk7tOUZ1ZKW7u5Wa3uulj9l/+DjD4pfsufHz9mn9iaw/ZX/Za+JR+KPx
+        5tPAvxK8HeKovgrq+keJNK+EHhG6T4a+G/B3ii5ii1HUrHWbZfCK20WmSsPIs4oZd7LJX5HwHTzzLaud
+        YPiDPVOhDF4eEI025qNWdR4icr20i4VFzSdrvmPtKtOjDFYV4GE1h8PCXNOTdpQ5HGKi29bVFLZdn1LP
+        /BwLc6v8Nf2mP+CKPxL1z4f/ABA1rTfhF8O/h/4v+Ilt4O8Haxrut6dpnhXxZ4R1DVLGW50+zZX1SGCx
+        kEVrNLGzSdMZJr6Pw8xeH+r8T045gkp5zjIxesotPC1U5NRT038m/M+XxWWY3HYvGxy7SpVyrCeT5oz5
+        vJv3eu0dE7Gb8av22PAX/BTf/guv/wAEvPid+z/8MP2g7H4f/C/xLpWmeKdW+JXwj13wbNBqFhaaxrUn
+        lxvLqNpFY5tQhmkmiUsRn1rx+H8JV4c4Az/L546gqlepWvbm5VGVOcV7ziullbdNo8jiDhvGzrcU8Q4i
+        k3PE4XLFbSTc8JVdSWib3lfl111t1Pzy/az+H/xluv2tfCHxM1/4FfFrwgvjX/gpX8bfE2gadrPhDXL+
+        e78MwXGnaPa64G03Tri2j07Vbu3zblpSpAJBKgmv2/A53lFbhTw8yv8AtXC8+HxVBPVO3LRWsrbKy3dt
+        11dj88xmQZpX4r8SM/ll91mPDMbWTs5Tr1pKOqTum2n5p7rU/dD9g7/gl7+17+0n+xF4Gh8M/tW/Hv8A
+        YA1fwZ8fv2iNW8ReDNN8JwiTxqNc+J3iLX/Dviy+tb+9s5XuFsbyJYZCPujIGcV+WeJPidwzknG+Nnh8
+        shjJujQi6seWSukk4rdcvVW8rn6Bwdw1mOM4NySm3RrU6GDoQdOuptQcKUE1C1mpQa5e19rn51f8EH/g
+        Y/wl+L//AAVX+Jv7VH/Czviv8DPgn4V1i0+Jnwo134Wa9rCftDajaeLLm5s/HB0DVTbRatr+lT6O0kEU
+        Rncpdsw+UqTzcZ59iq88pp5BjIYbM8fieX27sp0oKnCVSSdtpKSi2tHy2Vmmj75U4U6OHqSwlsHDDS9x
+        tr31bkj3Sbvbr1ue8/8ABvp8YvCn7Ifws/4Km/tsfEX9n/4v6D+zpdfFDS4/DPhPw78LL/U/GNz4T1/W
+        vEtzYeF9A8L6hLpr6rp+jWGpRJeqJhDFvVS52nHgccYLF8SZVwtlWHz/AA6xir4mq4O8P3dKNJU6vLyu
+        X7xupyrlvKzsjgWY/Us3xvtaPtazwOEpONk71ZuspJzvaK0jd3Sa7WP5+vjz4J0X4nftn+Lv25vhH+wF
+        8frb/gnhb/tE6Bqviv4bXPhXxDZ6frT3U1pqGsaLLpUFkj6HJ4gJkmEUKXcFu0xhNwcZP6bgJ045VltH
+        EcTQl7TDcsnFtSlKEUlL2ekrc2vNy/NWIo06ywEsE6MaGaU0uRN+05IuWqdXVLmirKN9FbyP9Nj9gH9s
+        T4K/ts/sy6Z8TfgD4B+Inwx+HfhjUB8PbDwd8QvAj/D2+0q48MR21nJYabob3Nzu0KyQhIJRsEhAOAQR
+        X8e8UZPWyvNq8q2N9vKtKTU2pJy5ZNNuMknFuzutuzasfd5T7dYXkxEFGoraXv8Ajdn19Xzx6YUAJgeg
+        /KlZLoF33FpgFABQAUAFABgHqKTSe6ATA9B+Qo5Y9kO77lmO8uo0CRXVxHGucJHPIqLuOeFVwBuJz7k1
+        fJP/AJ9y+5/5GbqU1vUj96Ee7mlBW4lE6jDbbrZcBe3AuBJtJDYOOtOE6lPWnJxb3adv1RM4UasXGpGM
+        o+dmu601W4zf28i0AIwFFna4x6f8e+MdDj1FP63UbcvrTv8A4nf77gsJhlHkWFhyf4V+QhbJz5Frk+tj
+        aH6ZPk0/rdX/AKC3/wCB/wDBE8Hhm7vCwb7uKuL5uefLtegbIs7T7p6HPk9DVutiktalS3rIl0MLdXoU
+        7+aj/kKJyTwltn/r1tc9faHNRLEVV8VeS9ZMf1bCy2oU3/26mG88jybbnqDZWpB9j+55FSsXUun9aaf+
+        JiWBwi/5g6eu/uR1/ArapDBrdhdaTrNtBqmk31u1reaVqFvDd6ZeWxQK9tc6fOj2lxAyLyjRkEDpiqw2
+        Kr0K8MRg8TOGLi21OnJqd3o3zJ81+7uXOhSlTjTnSj7JW0aTSttZWsrdLbdDlp/AXgS80Gz8LXPgvwld
+        +GNOdpNP8Oz+HNHn0GwkdGjZ7PSJLN9PtZGjkKkpGpKsR0NbRzHHUakprH1Y1XFRb55JuK2i9buK6LZA
+        qFBzjVVGDnHms7K65/js91zfa79bkur+BvBevafp+la94O8L63pWkxGDS9M1fw/pOp6fp0DKqGHT7O7t
+        JraziKoAVjVRgD0qKWY4qh7T2OYVIc6tLlm1zLzs9fmH1WgkoLDw5VfTlXXfp169+pDd+APAl+dH+3eC
+        fCN6fDkMUHh83XhvRrj+wbeN2khg0cy2b/2ZCj5KpDsUHJArelm2aQ9pUo5liFzyUpONSfvSSSTk09Wk
+        kk3qkkth+xoKlGh7GCpJWUbLlS7JbWLHiPwX4O8YS20/i3wn4a8Uz2cXkWc3iPQtL1uW0h81Z/JtpNTt
+        bl4IvOQPtUgbgD1pYXM8ywUJ08FmFejTlJyap1JQTk005NRaTbTab3abTFChRpzVSnRhGpyqN0knyraN
+        1ryrotjO0f4Z/Djw9qEGraB8P/BGh6rbFmttT0fwpoOmahbs6NG7QXtlYQXMTNG7KSrAlWI6E055rmdS
+        jLDzzGu6D3i6k3H7r2CVCjOHs50Yunpo0re7fl020u7druxrar4S8Ka8+nSa54Z8P6zJo85utJk1XRtO
+        1F9LuWkaVrnT2vLaZrOdpWLF49rFjnOazp4/HUreyxtaNmnpOS1Ssno90tL9tCHhMK+e+Gp+9TUH7q1g
+        m2oPTWKbbUdrtu2p00c80KeXDNLFHvaTZHI6J5jMXZ9qkLuZiST1zXNOc6j5qk5SlZatt7bF0qFChT9l
+        QoxhS7RSS+5WRy2n+DfCGkHWm0rwr4b0w+JGL+Ijp+h6ZZHX3YMrNrX2a1j/ALVZg7AmfzMgn1rrq5lm
+        Nd0pV8fXnKmrR5pyfKn0jd6L0sFSjRrR5atKMo6bpPbb7unYZaeCfBmn6FeeF7Dwj4YsvDWosX1Dw9aa
+        BpVtod+7Mrs15pMNolhdMXUHLxscipnmGPqV4YqeNrPFRjyqbnJzUdfdUr8yWr0vYx+oYFyqS+pUuadu
+        Z8kfe5b8t9NeW7tfa7sNi8D+CoNBn8KweEPC8Phi6me4uvDcXh/SY9BubiRi8k8+jpaDT5pnY5LNGWJ7
+        045jmEasa0cdWVaKaUueV0m7tJ3uk3q0tDZYegua1GHvWvotbbX01t0vsauh6HonhiwfSvDWj6V4e0uS
+        Z7iTTdD0+00mwe4lcSSTvZ2ENvbtNI4yzFdxPJNZ4nF4vGzjUxmKqVaiVk5ylJpf9vNlxjGCtGKSNSuc
+        oKACgAoAKACgAoAKACgAoA/PrRf2k/26L6KRtX/4JuXWhSx/ZPIjT9qb4NailwOMB2tNcZYwB/ewc1+w
+        f6jeCNl/xvGp/wCGrMv/AJWfilXjnxsX/Nj6bf8A2Ncu/wDlh0tt8ff2xpB+/wD2Brm3+n7R/wAJ5u3b
+        /ibDnFdv+ongp08dKH/hpzH/AOVnjy8RfHq3v/R2pW/7HeXf/Jk3/C+f2wf+jELj/wASJ+F//wAuK6f+
+        If8Ag5/0f/Df+GbG/wDyBH/ER/HX/pHOp/4e8v8A/lgf8L5/bB/6MQuP/Eifhf8A/Lij/iH/AIOf9H/w
+        3/hmxv8A8gH/ABEfx1/6Rzqf+HvL/wD5YZ3/AA0L+2qZbqM/8E9pks4711trj/hpn4RtLcKsaqZGhGrb
+        oI5IFRlXLKCx5BBFcsuBPA5VJRo+OqcbbyynMeW2my9nv/wQpeIfj86bnV+jzSVbmj7v9tZf53d+forK
+        3W/kaK/Hr9sIxqX/AGDbtG5yp/aL+FLY+hj1UPmtafAXgvKTjDx4oRlbd5Rj38rSp2KfiN48dfo6Qt/d
+        zvL7/hPb/gB/wvn9sH/oxC4/8SJ+F/8A8uK1/wCIf+Dn/R/8N/4Zsb/8gT/xEfx1/wCkc6n/AIe8v/8A
+        lhXvfj9+2NDZXElv+wNcXk6x4jth+0f8LLfzNzokh859WJjEcLM/ALHbgDmplwD4KRg5Yjx8pSj0UMnx
+        yd/WML2tczl4jePfu+x+jnrfXmzvL7cvX/l56E//AAvv9sd0R7n9guaC5dA9xAn7RnwpkSC4ZcywxSQa
+        t5ckaOSFYdcZ6VNLgHwZlBSp+PdCMe0snxzfzbgnfv5mv/ERvHdJKX0dG3/dzvL7fO1TcX/hfP7YP/Ri
+        Fx/4kT8L/wD5cVp/xD/wc/6P/hv/AAzY3/5AX/ER/HX/AKRzqf8Ah7y//wCWFG+/aD/bKtTafZ/+CfWp
+        aqjSzfaFtP2mfg/p00QWHFuI5NQ1G4gfzC7k702hUIB3Fah+H/gpKShLx/pxxT+0smzFwS/vRhHVvVb3
+        u4vYS8R/HpVE39HJvD21SzvLlPm8nKo19/S9iv8A8NIftm/9I3vFf/iWX7Pf/wAVVf8AEOfBv/pIzC/+
+        GLNTb/iJPjj/ANI2Yn/w+5T/APJCf8NIftn/APSN3xV/4lp+z5R/xDnwb/6SMwv/AIYs1D/iJPjh/wBI
+        24n/AMPuU/8AyQ0/tI/tof8ASNrxWfcfta/s9f1YGn/xDnwa/wCkjcL/AOGLNR/8RI8cP+kbsR/4fcq/
+        +SD/AIaS/bQ/6RteK/8AxLX9nr/4qj/iHPg1/wBJG4X/AMMWaj/4iR43/wDSN+I/8PuVf/JB/wANJfto
+        f9I2vFf/AIlr+z1/8VR/xDnwa/6SNwv/AIYs1D/iJHjf/wBI34j/AMPuVf8AyQf8NJftof8ASNrxX/4l
+        r+z1/wDFUf8AEOfBr/pI3C/+GLNQ/wCIkeN//SN+I/8AD7lX/wAkH/DSX7aH/SNrxX/4lr+z1/8AFUf8
+        Q58Gv+kjcL/4Ys1D/iJHjf8A9I34j/w+5V/8kH/DSX7aH/SNrxX/AOJa/s9f/FUf8Q58Gv8ApI3C/wDh
+        izUP+IkeN/8A0jfiP/D7lX/yQf8ADSX7aH/SNrxX/wCJa/s9f/FUf8Q58Gv+kjcL/wCGLNQ/4iR43/8A
+        SN+I/wDD7lX/AMkH/DSX7aH/AEja8V/+Ja/s9f8AxVH/ABDnwa/6SNwv/hizUP8AiJHjf/0jfiP/AA+5
+        V/8AJCj9pH9s8nB/4Jt+KwPX/hrT9no4/ANml/xDnwa/6SNwv/hizUT8SPHC3/KN2I/8PuVf/JDv+GkP
+        2zf+kb3iv/xLL9nv/wCKo/4hz4N/9JGYX/wxZqL/AIiT44/9I2Yn/wAPuU//ACQ3/hpD9s//AKRueKv/
+        ABLT9nyj/iHPg1/0kZhf/DFmof8AESfHD/pG3E/+H3Kf/khP+Gkv20P+kbXiv/xLX9nr/wCKp/8AEOfB
+        r/pI3C/+GLNR/wDESPHD/pG7Ef8Ah9yr/wCSD/hpL9tD/pG14r/8S1/Z6/8AiqP+Ic+DX/SRuF/8MWaj
+        /wCIkeN//SN+I/8AD7lX/wAkH/DSX7aH/SNrxX/4lr+z1/8AFUf8Q58Gv+kjcL/4Ys1D/iJHjf8A9I34
+        j/w+5V/8kH/DSX7aH/SNrxX/AOJa/s9f/FUf8Q58Gv8ApI3C/wDhizUP+IkeN/8A0jfiP/D7lX/yQf8A
+        DSX7aH/SNrxX/wCJa/s9f/FUf8Q58Gv+kjcL/wCGLNQ/4iR43/8ASN+I/wDD7lX/AMkf/9k=
+</value>
+  </data>
+  <data name="linkLabel1.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="linkLabel1.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="linkLabel1.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </data>
+  <data name="label1.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </data>
+  <data name="label1.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label1.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label2.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </data>
+  <data name="label2.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label2.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label3.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </data>
+  <data name="label3.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label3.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label4.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </data>
+  <data name="label4.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label4.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label5.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </data>
+  <data name="label5.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label5.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="button1.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </data>
+  <data name="button1.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="button1.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label6.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </data>
+  <data name="label6.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label6.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label7.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </data>
+  <data name="label7.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label7.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label8.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </data>
+  <data name="label8.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label8.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label9.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </data>
+  <data name="label9.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label9.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label10.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </data>
+  <data name="label10.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label10.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label11.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </data>
+  <data name="label11.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="label11.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+  <data name="$this.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </data>
+  <data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>(Default)</value>
+  </data>
+  <data name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </data>
+  <data name="$this.Localizable" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </data>
+  <data name="$this.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>8, 8</value>
+  </data>
+  <data name="$this.Name">
+    <value>FrmAbout</value>
+  </data>
+  <data name="$this.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </data>
+  <data name="$this.TrayHeight" type="System.Int32, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>80</value>
+  </data>
+  <data name="$this.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </data>
+  <data name="$this.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>Private</value>
+  </data>
+</root>

+ 348 - 0
.svn/pristine/36/361adc44292cfb279f55a326365117f8a6542b2e.svn-base

@@ -0,0 +1,348 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using System.Configuration;
+using System.Collections;
+using System.Diagnostics;
+using System.Net;
+using System.IO;
+
+namespace Mes.AutoUpdate
+{
+    public partial class AutoUpdate : Form
+    {
+        private DataSet ServerSet;
+        private DataSet LocalSet;
+
+        public AutoUpdate()
+        {
+            InitializeComponent();
+        }
+
+        private void AutoUpdater_Load(object sender, EventArgs e)
+        {
+            Text += string.Format("  [{0}]", Application.ProductVersion.ToString());
+            base.Visible = false;
+            string hTTP_Address;
+            try
+            {
+                hTTP_Address = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["downloadUrl"].Value.ToString();
+                UriBuilder httpUb = new UriBuilder(hTTP_Address);
+                if (httpUb.Scheme.ToUpper() != "HTTP") httpUb.Scheme = "HTTP";
+                hTTP_Address = httpUb.ToString();
+            }
+            catch
+            {
+                hTTP_Address = "http://172.16.0.108:9998/";
+            }
+            string fTP_Address;
+            try
+            {
+                fTP_Address = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["downloadFtpUrl"].Value.ToString();
+                UriBuilder ftpUb = new UriBuilder(fTP_Address);
+                if (ftpUb.Scheme.ToUpper() != "FTP") ftpUb.Scheme = "Ftp";
+                fTP_Address = ftpUb.ToString();
+            }
+            catch
+            {
+                fTP_Address = "ftp://172.16.0.108:21/";
+            }
+            string value;
+            try
+            {
+                value = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["downloadUrlfile"].Value.ToString();
+            }
+            catch
+            {
+                value = "filelist.xml";
+            }
+            ArrayList arrayList = new ArrayList();
+            ArrayList arrayList2 = new ArrayList();
+            WebRequest.DefaultWebProxy = null;
+            try
+            {
+                try
+                {
+                    ArrayList Finished = new ArrayList();
+                    ArrayList arrayList3 = new ArrayList();
+                    arrayList3.Add(value);
+                    DownManager.DownLoad(arrayList3, hTTP_Address, fTP_Address, null, null, 1, out Finished);
+                }
+                catch (Exception ex)
+                {
+                    throw new Exception("下载服务器更新列表失败!\n" + ex.Message);
+                }
+                ServerSet = new DataSet();
+                ServerSet.ReadXml(Application.StartupPath + "\\filelist.xml");
+                DataTable dataTable = ServerSet.Tables["file"];
+                Hashtable hashtable = new Hashtable();
+                LocalSet = new DataSet();
+                foreach (DataRow row in dataTable.Rows)
+                {
+                    string key = row["filename"].ToString().ToUpper();
+                    int result = 0;
+                    int.TryParse(row["var"].ToString(), out result);
+                    if (hashtable.ContainsKey(key))
+                    {
+                        if ((int)hashtable[key] < result)
+                        {
+                            hashtable[key] = result;
+                        }
+                    }
+                    else
+                    {
+                        hashtable.Add(key, result);
+                    }
+                }
+                if (File.Exists(Application.StartupPath + "\\myfilelist.xml"))
+                {
+                    LocalSet.ReadXml(Application.StartupPath + "\\myfilelist.xml");
+                    DataTable dataTable2 = CreateFileDataTable();
+                    if (LocalSet.Tables.Contains("file"))
+                    {
+                        foreach (DataRow row2 in LocalSet.Tables["file"].Rows)
+                        {
+                            row2["filename"] = row2["filename"].ToString().ToUpper();
+                        }
+                        LocalSet.Tables["file"].AcceptChanges();
+                        dataTable2 = LocalSet.Tables["file"];
+                    }
+                    else
+                    {
+                        LocalSet.Tables.Add(dataTable2);
+                    }
+                    foreach (string key2 in hashtable.Keys)
+                    {
+                        int result2 = 0;
+                        int.TryParse(hashtable[key2].ToString(), out result2);
+                        string text2 = Path.Combine(Application.StartupPath, key2).ToUpper();
+                        string text3 = Path.GetFullPath(text2).ToUpper();
+                        string text4 = Path.GetFileName(text2).ToUpper();
+                        if (result2 > 0 && !File.Exists(text2))
+                        {
+                            arrayList.Add(key2);
+                        }
+                        else if (result2 <= 0)
+                        {
+                            if (File.Exists(text2))
+                            {
+                                File.Move(text2, text2 + "." + DateTime.Now.ToString("yyyyMMddHHmmssfff"));
+                            }
+                        }
+                        else
+                        {
+                            DataRow[] array = new DataRow[0];
+                            if (dataTable2.Columns.Contains("filename"))
+                            {
+                                array = dataTable2.Select("filename='" + key2 + "'");
+                            }
+                            if (array != null && array.Length > 0)
+                            {
+                                int num = 0;
+                                for (int i = 0; i < array.Length; i++)
+                                {
+                                    int result = 0;
+                                    int.TryParse(array[0]["var"].ToString(), out result);
+                                    if (i == 0 || result > num)
+                                    {
+                                        num = result;
+                                    }
+                                }
+                                if ((int)hashtable[key2] != num && !arrayList.Contains(key2))
+                                {
+                                    arrayList.Add(key2);
+                                }
+                            }
+                            else if (!arrayList.Contains(key2))
+                            {
+                                arrayList.Add(key2);
+                            }
+                        }
+                    }
+                }
+                else
+                {
+                    foreach (string key3 in hashtable.Keys)
+                    {
+                        if (!arrayList.Contains(key3))
+                        {
+                            arrayList.Add(key3);
+                        }
+                    }
+                }
+                foreach (DataTable table in ServerSet.Tables)
+                {
+                    if (!(table.TableName.ToUpper() == "FILE") && !LocalSet.Tables.Contains(table.TableName))
+                    {
+                        LocalSet.Tables.Add(table.Copy());
+                    }
+                }
+                if (arrayList.Count > 0)
+                {
+                    StopProcess("Core.Mes.ClientManager");
+                    base.Visible = true;
+                    ArrayList arrayList4 = new ArrayList();
+                    string str = Convert.ToString(ServerSet.Tables["path"].Rows[0][0]).ToUpper();
+                    foreach (string item in arrayList)
+                    {
+                        arrayList4.Add(str + item);
+                    }
+                    arrayList2 = Updater(arrayList4, hTTP_Address, fTP_Address);
+                    DataTable dataTable4 = CreateFileDataTable();
+                    Hashtable hashtable2 = new Hashtable();
+                    if (LocalSet.Tables.Contains("file"))
+                    {
+                        foreach (DataRow row3 in LocalSet.Tables["file"].Rows)
+                        {
+                            string text6 = row3["filename"].ToString().ToUpper();
+                            int result3 = 0;
+                            int.TryParse(row3["var"].ToString(), out result3);
+                            if (!hashtable2.ContainsKey(text6))
+                            {
+                                if (File.Exists(Path.Combine(Application.StartupPath, text6).ToUpper()))
+                                {
+                                    hashtable2.Add(text6, result3);
+                                }
+                            }
+                            else if ((int)hashtable2[text6] > result3)
+                            {
+                                hashtable2[text6] = result3;
+                            }
+                        }
+                    }
+                    foreach (string item2 in arrayList2)
+                    {
+                        string text8 = item2.ToUpper();
+                        int num2 = (int)hashtable[text8];
+                        if (!hashtable2.ContainsKey(text8))
+                        {
+                            if (File.Exists(Path.Combine(Application.StartupPath, text8)))
+                            {
+                                hashtable2.Add(text8, num2);
+                            }
+                        }
+                        else
+                        {
+                            hashtable2[text8] = num2;
+                        }
+                    }
+                    foreach (string key4 in hashtable2.Keys)
+                    {
+                        DataRow dataRow2 = dataTable4.NewRow();
+                        dataRow2["filename"] = key4.ToUpper();
+                        dataRow2["var"] = hashtable2[key4.ToUpper()].ToString();
+                        dataTable4.Rows.Add(dataRow2);
+                    }
+                    dataTable4.AcceptChanges();
+                    if (LocalSet.Tables.Contains("file"))
+                    {
+                        LocalSet.Tables.Remove("file");
+                    }
+                    LocalSet.Tables.Add(dataTable4);
+                    LocalSet.AcceptChanges();
+                    File.Delete(Application.StartupPath + "\\myfilelist.xml");
+                    LocalSet.WriteXml(Application.StartupPath + "\\myfilelist.xml");
+                }
+                Process.Start(Application.StartupPath + "\\Core.Mes.ClientManager.exe");
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(ex.Message);
+            }
+            finally
+            {
+                Close();
+                Application.Exit();
+            }
+        }
+
+        private DataTable CreateFileDataTable()
+        {
+            DataTable dataTable = new DataTable("file");
+            dataTable.Columns.AddRange(new DataColumn[2]
+		{
+			new DataColumn("filename", typeof(string)),
+			new DataColumn("var", typeof(string))
+		});
+            dataTable.AcceptChanges();
+            return dataTable;
+        }
+
+        private ArrayList Updater(ArrayList files, string HTTP_Address, string FTP_Address)
+        {
+            ArrayList Finished = null;
+            lock (files)
+            {
+                try
+                {
+                    DownManager.DownLoad(files, HTTP_Address, FTP_Address, Main_Progress, Show_Progress, 1, out Finished);
+                }
+                catch (Exception ex)
+                {
+                    MessageBox.Show(ex.Message, "更新出错!", MessageBoxButtons.OK, MessageBoxIcon.Hand);
+                }
+            }
+            return Finished;
+        }
+
+        private void Main_Progress(int _A, int _B)
+        {
+            Application.DoEvents();
+            progressBar1.Maximum = _B;
+            progressBar1.Value = _A;
+        }
+
+        private void Show_Progress(string main_progress, string sub_progress)
+        {
+            Application.DoEvents();
+            lblfile.Text = string.Format("{0} [{1}]", main_progress, sub_progress);
+        }
+
+        private void StopProcess(string processName)
+        {
+            try
+            {
+                Process[] processesByName = Process.GetProcessesByName(processName);
+                Process[] array = processesByName;
+                foreach (Process process in array)
+                {
+                    try
+                    {
+                        if (processName.Length >= 4 && processName.Substring(processName.Length - 4, 4).ToUpper() != ".EXE")
+                        {
+                            processName += ".EXE";
+                        }
+                        string path = Path.Combine(Application.StartupPath, processName);
+                        if (Path.GetFullPath(process.MainModule.FileName).ToUpper() == Path.GetFullPath(path).ToUpper())
+                        {
+                            if (MessageBox.Show("检测到客户端正在运行,是否强制关闭?", "警告", MessageBoxButtons.OKCancel) == DialogResult.OK)
+                            {
+                                process.Kill();
+                            }
+                            else
+                            {
+                                Close();
+                                Application.Exit();
+                            }
+                        }
+                    }
+                    catch { }
+                }
+            }
+            catch (InvalidOperationException ex)
+            {
+                Debug.Print(ex.Message);
+            }
+            catch (Exception ex2)
+            {
+                throw ex2;
+            }
+        }
+
+
+    }
+}

+ 140 - 0
.svn/pristine/36/366b63e8e97093d80fe03658a90238e8180d138b.svn-base

@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="ultraListBar1.DefaultIcon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAEAEBAAMDU3MDFoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAQAMAAEdGbGVtaW5nAAAAAAAA
+        AAAAAAATExMTExMTExMTExMTExN4eHinp6enp6enp6enp6enp6enp6cAAAAAAAAAAAAAAAATExN90v8A
+        LEMAhcsTExNmZmZ4eHinp6enp6enp6cAAAAAAAAAAAAAAAAAAAAAAAATExN/1P8ALEMfq/ITExMAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATExOd2f8ANFMzqPMTExOJiYmJiYmvr6+vr6+qqqqq
+        qqqkpKRMTExMTEwAAAAPDw8VFRXA5vlHsPI1qfIVFRUPDw+/v79aWlpOTk5DQ0MqKip/f39/f39MTEwA
+        AAAPDw/A5vlHsPJKsfFKvfEfsPMPDw////////////////////////+/v79aWloAAAAPDw/e8PxKsfFK
+        vfFvwfRYuPUPDw9/f39/f39/f39/f39/f39/f39/f39iYmIAAAAPDw////9KvfFvwfR6xv9mvf8PDw8A
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPDw8DMU9VwO////8OqtwASGwPDw+/v7+/v7+/v7+/v7+/
+        v7+/v78AAAAAAAAAAAAAAAAAAAAPDw8PDw8PDw/Y2NhAQEB/AAB/AAB/AAB/AAB/AAC/v79aWloAAAAA
+        AAAAAAAPDw9tbW1aWlpJSUkPDw9ra2v/g4P/UVH/UVH/UVF/AAC/v79ra2sAAAAAAAAAAAAPDw+wsLCP
+        j49aWloPDw9ra2v/vLz/g4P/UVH/UVF/AAC/v79/f38AAAAAAAAAAAAPDw/o6OiwsLBtbW0PDw9ra2v/
+        /wD/vLz/g4P/UVF/AAC/v79/f38AAAAAAAAAAAAAAAAPDw8PDw8PDw/Y2NgAAAAAAAAAAAAAAAAAAAAA
+        AAC/v79/f38AAAAAAAAAAAAAAAAAAAAAAAAAAAD////Y2NjY2NjY2NjY2NjY2NjY2NiioqJra2sAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACABwAAgB8AAIAB
+        AACAAAAAAAAAAAAAAAAAAAAAAAEAAAADAADAAQAAgAEAAIABAACAAQAAwAEAAPABAAD4AwAA
+</value>
+  </data>
+</root>

+ 54 - 0
.svn/pristine/38/385edb4f0268422f030e26fec1a3ee547117b28e.svn-base

@@ -0,0 +1,54 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <LastOpenVersion>7.10.3077</LastOpenVersion>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ReferencePath>E:\code\server\</ReferencePath>
+    <CopyProjectDestinationFolder>
+    </CopyProjectDestinationFolder>
+    <CopyProjectUncPath>
+    </CopyProjectUncPath>
+    <CopyProjectOption>0</CopyProjectOption>
+    <ProjectView>ProjectFiles</ProjectView>
+    <ProjectTrust>0</ProjectTrust>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <EnableASPDebugging>false</EnableASPDebugging>
+    <EnableASPXDebugging>false</EnableASPXDebugging>
+    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
+    <EnableSQLServerDebugging>false</EnableSQLServerDebugging>
+    <RemoteDebugEnabled>false</RemoteDebugEnabled>
+    <RemoteDebugMachine>
+    </RemoteDebugMachine>
+    <StartAction>Program</StartAction>
+    <StartArguments>log</StartArguments>
+    <StartPage>
+    </StartPage>
+    <StartProgram>e:\code\Server\Core.Mes.ServerManager.exe</StartProgram>
+    <StartURL>
+    </StartURL>
+    <StartWorkingDirectory>
+    </StartWorkingDirectory>
+    <StartWithIE>true</StartWithIE>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <EnableASPDebugging>false</EnableASPDebugging>
+    <EnableASPXDebugging>false</EnableASPXDebugging>
+    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
+    <EnableSQLServerDebugging>false</EnableSQLServerDebugging>
+    <RemoteDebugEnabled>false</RemoteDebugEnabled>
+    <RemoteDebugMachine>
+    </RemoteDebugMachine>
+    <StartAction>Program</StartAction>
+    <StartArguments>
+    </StartArguments>
+    <StartPage>
+    </StartPage>
+    <StartProgram>E:\code\Server\Core.Mes.ServerManager.exe</StartProgram>
+    <StartURL>
+    </StartURL>
+    <StartWorkingDirectory>
+    </StartWorkingDirectory>
+    <StartWithIE>true</StartWithIE>
+  </PropertyGroup>
+</Project>

+ 2555 - 0
.svn/pristine/38/38b2caf5685d21b1d911a1d2c4b4d34fa94fd71b.svn-base

@@ -0,0 +1,2555 @@
+using System;
+using System.Collections;
+using System.Data;
+using System.Data.SqlClient;
+using System.Data.OleDb;
+using System.Data.OracleClient;
+using System.Xml;
+using System.IO;
+using System.Text;
+using System.Threading;
+using System.Runtime.Remoting.Lifetime;
+using System.Data.Common;
+using System.Configuration;
+
+namespace STMes
+{
+    /// <summary>
+    /// DBProxy 的摘要说明。
+    /// </summary>
+    public class DBProxy : MarshalByRefObject, IDisposable
+    {
+        private static Hashtable _dataProviderNameList = Hashtable.Synchronized(new Hashtable(5));
+        private static Hashtable _dataProviderTypeList = Hashtable.Synchronized(new Hashtable(5));
+
+        private CoreWriteLogFile cwl = new CoreWriteLogFile();
+
+        public DBProxy()
+        {
+            AddDataProvider(new DataProvider.SqlDataProvider());
+            AddDataProvider(new DataProvider.OleDbDataProvider());
+            AddDataProvider(new DataProvider.OdbcDataProvider());
+            AddDataProvider(new DataProvider.OracleDataProvider());
+            AddDataProvider(new DataProvider.ODPDataProvider());
+
+            Console.WriteLine("创建数据库代理DBProxy...\n");
+
+            //从数据库配置文件中读取数据库连接信息
+            ReadDbConnectionInfo(@"MesDB.cfg");
+
+            //预先创建所有连接...
+            CreateAllConnections();
+
+            _connLifeTimeA = int.Parse(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["connLifeTimeA"].Value.ToString().ToLower());
+            _connLifeTimeB = int.Parse(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["connLifeTimeB"].Value.ToString().ToLower());
+            _connLifeTimeC = int.Parse(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["connLifeTimeC"].Value.ToString().ToLower());
+
+            //创建一个线程,用来定时清除已经断开连接的DBManager
+            #region 原来代码 maliang 2011-10-19
+            /*
+            _checkConnThread = new Thread(new ThreadStart(CheckConnActive));
+            _checkConnThread.Start();
+            _fixConnThread = new Thread(new ThreadStart(FixConnections));
+            _fixConnThread.Start();
+             */
+            #endregion
+            #region 变更代码 maliang 2011-10-19
+            _ConnectionsListenerThread = new Thread(new ThreadStart(ConnectionsListener));
+            _ConnectionsListenerThread.Start();
+            #endregion
+            _init = true;
+            _reference++;
+        }
+
+        //没有显示调用Dispose()时调用
+        ~DBProxy()
+        {
+            Dispose(false);
+        }
+
+        #region IDisposable 成员
+
+        public void Dispose()
+        {
+            Dispose(true);
+
+            GC.Collect();
+        }
+
+        protected virtual void Dispose(bool disposing)
+        {
+            _reference--;
+
+            if (disposing == true)
+            {
+                //释放受控资源
+            }
+
+            //释放未受控资源
+            //回滚所有DBManager事务
+            foreach (DictionaryEntry it in _transList)
+            {
+                TransInfo info = (TransInfo)it.Value;
+                IDbConnection conn = info.dbConnection;
+
+                try
+                {
+                    info.dbTransaction.Rollback();
+                }
+                catch (Exception)
+                {
+
+                }
+
+
+                if (_reference == 0)
+                {
+                    //关闭数据库连接
+                    foreach (DictionaryEntry it1 in _connList)
+                    {
+                        Hashtable ht1 = (Hashtable)it1.Value;
+                        foreach (DictionaryEntry it2 in ht1)
+                        {
+                            Hashtable ht2 = (Hashtable)it2.Value;
+                            foreach (DictionaryEntry it3 in ht2)
+                            {
+                                ArrayList arr = it3.Value as ArrayList;
+                                foreach (object obj in arr)
+                                {
+                                    IDbConnection db = (IDbConnection)obj;
+                                    db.Close();
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            // 关闭线程
+
+            try
+            {
+                if (_checkConnThread != null)
+                    _checkConnThread.Abort();
+            }
+            catch (Exception) { }
+
+            try
+            {
+                if (_fixConnThread != null)
+                    _fixConnThread.Abort();
+            }
+            catch (Exception) { }
+        }
+        #endregion
+
+        //返回由DBProxy为每个DBManager对象分配的ID
+        public long GetDBManagerID()
+        {
+            lock (_dbManagerID)
+            {
+                ++_dbManagerID[0];
+                if (_dbManagerID[0] > 3000000)
+                    _dbManagerID[0] = 1;
+                return _dbManagerID[0];
+            }
+        }
+
+
+        //设置DBManager对应的数据库信息
+        public void SetDbInfo(long dbManagerID, string dbName, string priority)
+        {
+            if (_dbList.Contains(dbManagerID))
+            {
+                _dbList.Remove(dbManagerID);
+            }
+            ArrayList arr = new ArrayList();
+            arr.Add(dbName);
+            arr.Add(priority);
+            _dbList.Add(dbManagerID, arr);
+
+        }
+
+        //获取数据库类型,用字符串"SQLServer","Oracle", "OleDb"分别表示不同类型的数据库
+        public string GetDbType(string name, out string err)
+        {
+            err = "";
+
+            //未找到该数据库对应的配置信息
+            if (_dbConfigInfo.Contains(name) == false)
+            {
+                err = "未找到指定的数据库";
+                return "";
+            }
+
+            //获取该数据库对应优先级的配置信息
+            DBConnectionInfo dbInfo = (DBConnectionInfo)_dbConfigInfo[name];
+
+            return dbInfo.dbType;
+        }
+
+
+
+        #region"数据操作"
+        //执行带参数的SQL语句,返回DataSet
+        //事务处理
+        public DataSet ExecuteQuery(string dbName, string priority, Guid guid, string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, out string err)
+        {
+            return ExecuteQueryBase(dbName, priority, guid, Sql, cmdType, Params, Values, out err);
+        }
+
+        private DataSet ExecuteQueryBase(string dbName, string priority, Guid guid, string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, out string err)
+        {
+            err = "";
+            DataSet ds = new DataSet();
+
+            //获取数据库连接...
+            IDbConnection conn = null;
+            IDbTransaction trans = null;
+            if (guid != null)
+            {
+
+                //如果是事务
+                if (_transList.Contains(guid))
+                {
+                    TransInfo info = (TransInfo)_transList[guid];
+                    conn = info.dbConnection;
+                    trans = info.dbTransaction;
+
+                    //如果事务已经失效,则返回
+                    if (trans.Connection == null)
+                    {
+                        err = "事务已经失效!";
+                        return ds;
+                    }
+                }
+                else
+                {
+                    err = "未找到请求的事务!";
+                    cwl.WriteLog("未找到请求的事务", LogInfoLevel.Error, "ExecuteQuery", "ExecuteQueryBase");
+                    return ds;
+                }
+            }
+            if (conn == null)
+            {
+                err = "获取数据库连接失败!";
+                cwl.WriteLog("获取数据库连接失败", LogInfoLevel.Error, "ExecuteQuery", "ExecuteQueryBase");
+                return ds;
+            }
+            try
+            {
+                DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
+                IDbCommand command = conn.CreateCommand();
+                DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
+                ((IDbDataAdapter)adapter).SelectCommand = command;
+
+                command.CommandText = Sql;
+                command.CommandType = cmdType;
+                //设置事务
+                if (trans != null)
+                {
+                    command.Transaction = trans;
+                }
+
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        command.Parameters.Add(Params[i]);
+                        ((IDbDataParameter)command.Parameters[i]).Value = Values[i];
+                    }
+                }
+
+                adapter.Fill(ds);
+            }
+            catch (Exception ex)
+            {
+                err = ex.Message;
+                cwl.WriteLog(err, LogInfoLevel.Error, "ExecuteQuery", "ExecuteQueryBase");
+            }
+            return ds;
+        }
+
+        public DataSet ExecuteQuery(string dbName, string priority, string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, out string err)
+        {
+            return this.ExecuteQuery(dbName, priority, Sql, cmdType, Params, Values, out err, false);
+        }
+        //非事务处理
+        public DataSet ExecuteQuery(string dbName, string priority, string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, out string err, bool ifDBLink)
+        {
+            if (ifDBLink)
+            {
+                return ExecuteQueryDBLink(dbName, priority, Sql, cmdType, Params, Values, out err);
+            }
+            else
+            {
+                err = "";
+                DataSet ds = new DataSet();
+
+                //获取数据库连接...
+                IDbConnection conn = GetDbConnection(dbName, priority, Sql);
+
+                if (conn == null)
+                {
+                    err = "获取数据库连接失败!";
+                    return ds;
+                }
+                try
+                {
+                    DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
+                    IDbCommand command = conn.CreateCommand();
+                    DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
+                    ((IDbDataAdapter)adapter).SelectCommand = command;
+
+                    command.CommandText = Sql;
+                    command.CommandType = cmdType;
+
+                    //给所有的参数赋值
+                    if (Params != null && Values != null)
+                    {
+                        for (int i = 0; i < Params.Length; i++)
+                        {
+                            command.Parameters.Add(Params[i]);
+                            ((IDbDataParameter)command.Parameters[i]).Value = Values[i];
+                        }
+                    }
+                    adapter.Fill(ds);
+                }
+                catch (Exception ex)
+                {
+                    err = ex.Message;
+                }
+                finally
+                {
+                    ReleaseDbConnection(dbName, priority, conn, Sql);
+                }
+                return ds;
+            }
+        }
+        //非事务处理
+        private DataSet ExecuteQueryDBLink(string dbName, string priority, string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, out string err)
+        {
+            err = "";
+            DataSet ds = new DataSet();
+
+            //获取数据库连接...
+            IDbConnection conn = null;
+            IDbTransaction trans = null;
+
+            conn = GetDbConnection(dbName, priority, Sql);
+
+            if (conn == null)
+            {
+                err = "获取数据库连接失败!";
+                return ds;
+            }
+            try
+            {
+                DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
+                IDbCommand command = conn.CreateCommand();
+                DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
+                ((IDbDataAdapter)adapter).SelectCommand = command;
+
+                trans = conn.BeginTransaction();
+
+                command.CommandText = Sql;
+                command.CommandType = cmdType;
+                command.Transaction = trans;
+
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        command.Parameters.Add(Params[i]);
+                        ((IDbDataParameter)command.Parameters[i]).Value = Values[i];
+                    }
+                }
+
+                adapter.Fill(ds);
+
+                command.Transaction.Commit();
+                command.CommandText = "begin dbms_session.close_database_link('XGCX');end;";
+                command.ExecuteNonQuery();
+
+            }
+            catch (Exception ex)
+            {
+                err = ex.Message;
+                if (trans != null)
+                {
+                    trans.Rollback();
+                }
+            }
+            finally
+            {
+                ReleaseDbConnection(dbName, priority, conn, Sql);
+            }
+            return ds;
+        }
+
+
+        //执行带参数的SQL语句,返回DataSet
+        //事务处理
+        public DataSet ExecuteQuery(string dbName, string priority, Guid guid, string Sql, CommandType cmdType, string[] ParameterNames, DbType[] DbTypes, ParameterDirection[] Directions, bool[] IsNullables, string[] SourceColumns, DataRowVersion[] SourceVersions, object[] Values, ref ArrayList OutputValues, out string err)
+        {
+            err = "";
+            DataSet ds = null;
+            ds = new DataSet();
+
+            //获取数据库连接...
+            IDbConnection conn = null;
+            IDbTransaction trans = null;
+
+            //如果是事务
+            if (_transList.Contains(guid))
+            {
+                //Console.WriteLine("事务:执行数据库操作{0}...\n", Sql);
+                TransInfo info = (TransInfo)_transList[guid];
+                conn = info.dbConnection;
+                trans = info.dbTransaction;
+
+                //如果事务已经失效,则返回
+                if (trans.Connection == null)
+                {
+                    err = "事务已经失效!";
+                    return ds;
+                }
+            }
+            else
+            {
+                err = "未找到请求的事务!";
+                return ds;
+            }
+
+            if (conn == null)
+            {
+                err = "获取数据库连接失败!";
+                return ds;
+            }
+            try
+            {
+                DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
+                IDbCommand command = conn.CreateCommand();
+                DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
+                ((IDbDataAdapter)adapter).SelectCommand = command;
+
+                command.CommandText = Sql;
+                command.CommandType = cmdType;
+                //设置事务
+                if (trans != null)
+                {
+                    command.Transaction = trans;
+                }
+
+                //给所有的参数赋值
+                if (ParameterNames != null)
+                {
+                    for (int i = 0; i < ParameterNames.Length; i++)
+                    {
+                        IDbDataParameter parameter = dataProvider.CreateDataParameter();
+
+
+                        parameter.ParameterName = ParameterNames[i];
+                        if (conn is System.Data.OracleClient.OracleConnection)
+                        {
+                            try
+                            {
+                                ((System.Data.OracleClient.OracleParameter)parameter).OracleType = (System.Data.OracleClient.OracleType)DbTypes[i];
+                            }
+                            catch
+                            {
+                                parameter.DbType = DbTypes[i];
+                            }
+                        }
+                        else
+                        {
+                            parameter.DbType = DbTypes[i];
+                        }
+                        if (parameter.Direction != System.Data.ParameterDirection.Input)
+                            parameter.Size = 200;
+                        parameter.Value = Values[i];
+                        parameter.Direction = Directions[i];
+                        //							parameter.IsNullable = IsNullables[i];
+                        //							parameter.SourceColumn = SourceColumns[i];
+                        //							parameter.SourceVersion = SourceVersions[i];						
+                        command.Parameters.Add(parameter);
+                    }
+                }
+
+                adapter.Fill(ds);
+
+                //返回输出参数值
+                if (OutputValues != null)
+                {
+                    for (int k = 0; k < command.Parameters.Count; k++)
+                    {
+                        if (((IDbDataParameter)command.Parameters[k]).Direction != ParameterDirection.Input)
+                        {
+                            OutputValues.Add(((IDbDataParameter)command.Parameters[k]).Value);
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                err = ex.Message;
+                trans.Rollback();
+            }
+
+            return ds;
+        }
+
+        public DataSet ExecuteQuery(string dbName, string priority, string Sql, CommandType cmdType, string[] ParameterNames, DbType[] DbTypes, ParameterDirection[] Directions, bool[] IsNullables, string[] SourceColumns, DataRowVersion[] SourceVersions, object[] Values, ref ArrayList OutputValues, out string err)
+        {
+            return ExecuteQuery(dbName, priority, Sql, cmdType, ParameterNames, DbTypes, Directions, IsNullables, SourceColumns, SourceVersions, Values, ref OutputValues, out err, false);
+        }
+        //非事务处理
+        public DataSet ExecuteQuery(string dbName, string priority, string Sql, CommandType cmdType, string[] ParameterNames, DbType[] DbTypes, ParameterDirection[] Directions, bool[] IsNullables, string[] SourceColumns, DataRowVersion[] SourceVersions, object[] Values, ref ArrayList OutputValues, out string err, bool ifDBLink)
+        {
+            err = "";
+            DataSet ds = null;
+            ds = new DataSet();
+
+            //获取数据库连接...
+            IDbConnection conn = null;
+            //获取数据库连接
+            conn = GetDbConnection(dbName, priority, Sql);
+
+            if (conn == null)
+            {
+                err = "获取数据库连接失败!";
+                return ds;
+            }
+            try
+            {
+                DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
+                IDbCommand command = conn.CreateCommand();
+                DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
+                ((IDbDataAdapter)adapter).SelectCommand = command;
+
+                command.CommandText = Sql;
+                command.CommandType = cmdType;
+
+                //给所有的参数赋值
+                if (ParameterNames != null)
+                {
+                    for (int i = 0; i < ParameterNames.Length; i++)
+                    {
+                        IDbDataParameter parameter = dataProvider.CreateDataParameter();
+
+
+                        parameter.ParameterName = ParameterNames[i];
+                        if (conn is System.Data.OracleClient.OracleConnection)
+                        {
+                            try
+                            {
+                                ((System.Data.OracleClient.OracleParameter)parameter).OracleType = (System.Data.OracleClient.OracleType)DbTypes[i];
+                            }
+                            catch
+                            {
+                                parameter.DbType = DbTypes[i];
+                            }
+                        }
+                        else
+                        {
+                            parameter.DbType = DbTypes[i];
+                        }
+                        if (parameter.Direction != System.Data.ParameterDirection.Input)
+                            parameter.Size = 200; parameter.Value = Values[i];
+                        parameter.Direction = Directions[i];
+                        //							parameter.IsNullable = IsNullables[i];
+                        //							parameter.SourceColumn = SourceColumns[i];
+                        //							parameter.SourceVersion = SourceVersions[i];						
+                        command.Parameters.Add(parameter);
+                    }
+                }
+
+                adapter.Fill(ds);
+
+                //返回输出参数值
+                if (OutputValues != null)
+                {
+                    for (int k = 0; k < command.Parameters.Count; k++)
+                    {
+                        if (((IDbDataParameter)command.Parameters[k]).Direction != ParameterDirection.Input)
+                        {
+                            OutputValues.Add(((IDbDataParameter)command.Parameters[k]).Value);
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                err = ex.Message;
+            }
+            finally
+            {
+                //释放连接
+                ReleaseDbConnection(dbName, priority, conn, Sql);
+            }
+            return ds;
+        }
+
+
+        //不通过DBServer时使用
+        //事务处理
+        public int ExecuteNonQuery_NoDBSever(string dbName, string priority, Guid guid, string Sql, CommandType cmdType, IDataParameter[] Params, out string err)
+        {
+            err = "";
+            int lines = -1;//受影响的行数
+
+            //获取数据库连接...
+            IDbConnection conn = null;
+            IDbTransaction trans = null;
+
+            //如果是事务
+
+            if (_transList.Contains(guid))
+            {
+                //Console.WriteLine("事务:执行数据库操作{0}...\n", Sql);
+                TransInfo info = (TransInfo)_transList[guid];
+                conn = info.dbConnection;
+                trans = info.dbTransaction;
+
+                //如果事务已经失效,则返回
+                if (trans.Connection == null)
+                {
+                    err = "事务已经失效!";
+                    return lines;
+                }
+            }
+            else
+            {
+                err = "未找到请求的事务!";
+                return lines;
+            }
+
+            if (conn == null)
+            {
+                err = "获取数据库连接失败!";
+                return lines;
+            }
+            try
+            {
+                DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
+                IDbCommand command = conn.CreateCommand();
+                command.CommandText = Sql;
+                command.CommandType = cmdType;
+                command.Transaction = trans;
+
+                //给所有的参数赋值
+                if (Params != null)
+                {
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        command.Parameters.Add(Params[i]);
+                    }
+                }
+
+                lines = command.ExecuteNonQuery();
+            }
+            catch (Exception ex)
+            {
+                trans.Rollback();
+                err = ex.Message;
+            }
+            return lines;
+        }
+        //非事务处理
+        public int ExecuteNonQuery_NoDBSever(string dbName, string priority, string Sql, CommandType cmdType, IDataParameter[] Params, out string err)
+        {
+            err = "";
+            int lines = -1;//受影响的行数
+
+            //获取数据库连接...
+            IDbConnection conn = null;
+            //获取数据库连接
+            conn = GetDbConnection(dbName, priority, Sql);
+
+            if (conn == null)
+            {
+                err = "获取数据库连接失败!";
+                return lines;
+            }
+            try
+            {
+                DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
+                IDbCommand command = conn.CreateCommand();
+                command.CommandText = Sql;
+                command.CommandType = cmdType;
+                //给所有的参数赋值
+                if (Params != null)
+                {
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        command.Parameters.Add(Params[i]);
+                    }
+                }
+
+                lines = command.ExecuteNonQuery();
+            }
+            catch (Exception ex)
+            {
+                err = ex.Message;
+            }
+            finally
+            {
+                ReleaseDbConnection(dbName, priority, conn, Sql);
+            }
+            return lines;
+        }
+
+        //执行带参数的SQL语句,返回受影响的行数
+        //事务处理
+        public int ExecuteNonQuery(string dbName, string priority, Guid guid, string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, out string err)
+        {
+            err = "";
+            int lines = -1;//受影响的行数
+
+            //获取数据库连接...
+            IDbConnection conn = null;
+            IDbTransaction trans = null;
+
+            //如果是事务
+
+            if (_transList.Contains(guid))
+            {
+                //Console.WriteLine("事务:执行数据库操作{0}...\n", Sql);
+                TransInfo info = (TransInfo)_transList[guid];
+                conn = info.dbConnection;
+                trans = info.dbTransaction;
+
+                //如果事务已经失效,则返回
+                if (trans.Connection == null)
+                {
+                    err = "事务已经失效!";
+                    return lines;
+                }
+            }
+            else
+            {
+                err = "未找到请求的事务!";
+                return lines;
+            }
+
+            if (conn == null)
+            {
+                err = "获取数据库连接失败!";
+                return lines;
+            }
+            try
+            {
+                DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
+                IDbCommand command = conn.CreateCommand();
+                command.CommandText = Sql;
+                command.CommandType = cmdType;
+                command.Transaction = trans;
+
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        command.Parameters.Add(Params[i]);
+                        ((IDbDataParameter)command.Parameters[i]).Value = Values[i];
+                    }
+                }
+                lines = command.ExecuteNonQuery();
+            }
+            catch (Exception ex)
+            {
+                err = ex.Message;
+                trans.Rollback();
+            }
+            return lines;
+        }
+        //非事务处理
+        public int ExecuteNonQuery(string dbName, string priority, string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, out string err)
+        {
+            err = "";
+            int lines = -1;//受影响的行数
+
+            //获取数据库连接...
+            IDbConnection conn = null;
+            //获取数据库连接
+            conn = GetDbConnection(dbName, priority, Sql);
+
+            if (conn == null)
+            {
+                err = "获取数据库连接失败!";
+                return lines;
+            }
+            try
+            {
+                DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
+                IDbCommand command = conn.CreateCommand();
+                command.CommandText = Sql;
+                command.CommandType = cmdType;
+
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        command.Parameters.Add(Params[i]);
+                        ((IDbDataParameter)command.Parameters[i]).Value = Values[i];
+                    }
+                }
+
+                lines = command.ExecuteNonQuery();
+            }
+            catch (Exception ex)
+            {
+                err = ex.Message;
+            }
+            finally
+            {
+                //释放连接
+                ReleaseDbConnection(dbName, priority, conn, Sql);
+            }
+            return lines;
+        }
+
+        //执行带参数的SQL语句,返回受影响的行数
+        // 事务操作
+        public int ExecuteNonQuery(string dbName, string priority, Guid guid, string Sql, CommandType cmdType, string[] ParameterNames, DbType[] DbTypes, ParameterDirection[] Directions, bool[] IsNullables, string[] SourceColumns, DataRowVersion[] SourceVersions, object[] Values, ref ArrayList OutputValues, out string err)
+        {
+            err = "";
+            int lines = -1;//受影响的行数
+
+            //获取数据库连接...
+            IDbConnection conn = null;
+            IDbTransaction trans = null;
+
+            //如果是事务
+            if (_transList.Contains(guid))
+            {
+                TransInfo info = (TransInfo)_transList[guid];
+                conn = info.dbConnection;
+                trans = info.dbTransaction;
+
+                //如果事务已经失效,则返回
+                if (trans.Connection == null)
+                {
+                    err = "事务已经失效!";
+                    return lines;
+                }
+            }
+            else
+            {
+                err = "未找到请求的事务!";
+                return lines;
+            }
+
+            if (conn == null)
+            {
+                err = "获取数据库连接失败!";
+                return lines;
+            }
+            showsql(Sql);
+            try
+            {
+                DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
+                IDbCommand command = conn.CreateCommand();
+                command.CommandText = Sql;
+                command.CommandType = cmdType;
+                //设置事务
+                command.Transaction = trans;
+
+                if (ParameterNames != null)
+                {
+                    for (int i = 0; i < ParameterNames.Length; i++)
+                    {
+                        IDbDataParameter parameter = dataProvider.CreateDataParameter();
+                        parameter.ParameterName = ParameterNames[i];
+                        parameter.Value = Values[i];
+                        parameter.Direction = Directions[i];
+                        if (conn is System.Data.OracleClient.OracleConnection)
+                        {
+                            try
+                            {
+                                ((System.Data.OracleClient.OracleParameter)parameter).OracleType = (System.Data.OracleClient.OracleType)DbTypes[i];
+                            }
+                            catch
+                            {
+                                parameter.DbType = DbTypes[i];
+                            }
+                        }
+                        else
+                        {
+                            parameter.DbType = DbTypes[i];
+                        }
+                        if (parameter.Direction != System.Data.ParameterDirection.Input)
+                            parameter.Size = 200;
+                        parameter.Direction = Directions[i];
+                        command.Parameters.Add(parameter);
+                    }
+                }
+                lines = command.ExecuteNonQuery();
+                //返回输出参数值
+                if (OutputValues != null)
+                {
+                    for (int k = 0; k < command.Parameters.Count; k++)
+                    {
+                        if (((IDbDataParameter)command.Parameters[k]).Direction != ParameterDirection.Input)
+                        {
+                            OutputValues.Add(((IDbDataParameter)command.Parameters[k]).Value);
+                        }
+                    }
+                }
+            }
+            catch (System.Exception ex)
+            {
+                err = ex.Message;
+                trans.Rollback();
+            }
+            return lines;
+        }
+        //非事务处理
+        public int ExecuteNonQuery(string dbName, string priority, string Sql, CommandType cmdType, string[] ParameterNames, DbType[] DbTypes, ParameterDirection[] Directions, bool[] IsNullables, string[] SourceColumns, DataRowVersion[] SourceVersions, object[] Values, ref ArrayList OutputValues, out string err)
+        {
+            err = "";
+            int lines = -1;//受影响的行数
+
+            //获取数据库连接...
+            IDbConnection conn = null;
+
+            //获取数据库连接
+            conn = GetDbConnection(dbName, priority, Sql);
+
+            if (conn == null)
+            {
+                err = "获取数据库连接失败!";
+                return lines;
+            }
+            try
+            {
+                DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
+                IDbCommand command = conn.CreateCommand();
+                command.CommandText = Sql;
+                command.CommandType = cmdType;
+
+                //给所有的参数赋值
+                if (ParameterNames != null)
+                {
+                    for (int i = 0; i < ParameterNames.Length; i++)
+                    {
+                        IDbDataParameter parameter = dataProvider.CreateDataParameter();
+                        parameter.ParameterName = ParameterNames[i];
+                        parameter.Value = Values[i];
+                        parameter.Direction = Directions[i];
+                        if (conn is System.Data.OracleClient.OracleConnection)
+                        {
+                            try
+                            {
+                                ((System.Data.OracleClient.OracleParameter)parameter).OracleType = (System.Data.OracleClient.OracleType)DbTypes[i];
+                            }
+                            catch
+                            {
+                                parameter.DbType = DbTypes[i];
+                            }
+                        }
+                        else
+                        {
+                            parameter.DbType = DbTypes[i];
+                        }
+                        if (parameter.Direction != System.Data.ParameterDirection.Input)
+                            parameter.Size = 200;
+                        parameter.Direction = Directions[i];
+                        command.Parameters.Add(parameter);
+                    }
+                }
+
+                lines = command.ExecuteNonQuery();
+
+                //返回输出参数值
+                if (OutputValues != null)
+                {
+                    for (int k = 0; k < command.Parameters.Count; k++)
+                    {
+                        if (((IDbDataParameter)command.Parameters[k]).Direction != ParameterDirection.Input)
+                        {
+                            OutputValues.Add(((IDbDataParameter)command.Parameters[k]).Value);
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                err = ex.Message;
+            }
+            finally
+            {
+                //释放连接
+                ReleaseDbConnection(dbName, priority, conn, Sql);
+            }
+            return lines;
+        }
+        //事务处理
+        public int ExecuteNonQuery(string dbName, string priority, Guid guid, string Sql, CommandType cmdType, string[] ParameterNames, DbType[] DbTypes, ParameterDirection[] Directions, bool[] IsNullables, string[] SourceColumns, DataRowVersion[] SourceVersions, int[] Sizes, object[] Values, ref ArrayList OutputValues, out string err)
+        {
+            err = "";
+            int lines = -1;//受影响的行数
+
+            //获取数据库连接...
+            IDbConnection conn = null;
+            IDbTransaction trans = null;
+
+            //如果是事务
+            if (_transList.Contains(guid))
+            {
+                //Console.WriteLine("事务:执行数据库操作{0}...\n", Sql);
+                TransInfo info = (TransInfo)_transList[guid];
+                conn = info.dbConnection;
+                trans = info.dbTransaction;
+
+                //如果事务已经失效,则返回
+                if (trans.Connection == null)
+                {
+                    err = "事务已经失效!";
+                    return lines;
+                }
+            }
+            else
+            {
+                err = "未找到请求的事务!";
+                return lines;
+            }
+
+            if (conn == null)
+            {
+                err = "获取数据库连接失败!";
+                return lines;
+            }
+            try
+            {
+                DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
+                DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
+
+                IDbCommand command = conn.CreateCommand();
+                command.CommandText = Sql;
+                command.CommandType = cmdType;
+                command.Transaction = trans;
+
+
+                //给所有的参数赋值
+                if (ParameterNames != null && DbTypes != null && Values != null)
+                {
+                    for (int i = 0; i < ParameterNames.Length; i++)
+                    {
+                        IDbDataParameter parameter = dataProvider.CreateDataParameter();
+                        parameter.ParameterName = ParameterNames[i];
+                        if (conn is System.Data.OracleClient.OracleConnection)
+                        {
+                            try
+                            {
+                                ((System.Data.OracleClient.OracleParameter)parameter).OracleType = (System.Data.OracleClient.OracleType)DbTypes[i];
+                            }
+                            catch
+                            {
+                                parameter.DbType = DbTypes[i];
+                            }
+                        }
+                        else
+                        {
+                            parameter.DbType = DbTypes[i];
+                        }
+                        parameter.Direction = Directions[i];
+
+                        if (parameter.Direction != System.Data.ParameterDirection.Input)
+                            parameter.Size = 200;
+                        parameter.Direction = Directions[i];
+                        parameter.Value = Values[i];
+                        command.Parameters.Add(parameter);
+                    }
+                }
+                lines = command.ExecuteNonQuery();
+
+                //返回输出参数值
+                if (OutputValues != null)
+                {
+                    for (int k = 0; k < command.Parameters.Count; k++)
+                    {
+                        if (((IDbDataParameter)command.Parameters[k]).Direction != ParameterDirection.Input)
+                        {
+                            OutputValues.Add(((IDbDataParameter)command.Parameters[k]).Value);
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                err = ex.Message;
+                trans.Rollback();
+            }
+            return lines;
+        }
+        //非事务处理
+        public int ExecuteNonQuery(string dbName, string priority, string Sql, CommandType cmdType, string[] ParameterNames, DbType[] DbTypes, ParameterDirection[] Directions, bool[] IsNullables, string[] SourceColumns, DataRowVersion[] SourceVersions, int[] Sizes, object[] Values, ref ArrayList OutputValues, out string err)
+        {
+            err = "";
+            int lines = -1;//受影响的行数
+
+            //获取数据库连接...
+            IDbConnection conn = null;
+
+            //获取数据库连接
+            conn = GetDbConnection(dbName, priority, Sql);
+
+            if (conn == null)
+            {
+                err = "获取数据库连接失败!";
+                return lines;
+            }
+            showsql(Sql);
+            try
+            {
+                DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
+                DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
+
+                IDbCommand command = conn.CreateCommand();
+                command.CommandText = Sql;
+                command.CommandType = cmdType;
+
+                //给所有的参数赋值
+                if (ParameterNames != null && DbTypes != null && Values != null)
+                {
+                    for (int i = 0; i < ParameterNames.Length; i++)
+                    {
+                        IDbDataParameter parameter = dataProvider.CreateDataParameter();
+                        parameter.ParameterName = ParameterNames[i];
+                        if (conn is System.Data.OracleClient.OracleConnection)
+                        {
+                            try
+                            {
+                                ((System.Data.OracleClient.OracleParameter)parameter).OracleType = (System.Data.OracleClient.OracleType)DbTypes[i];
+                            }
+                            catch
+                            {
+                                parameter.DbType = DbTypes[i];
+                            }
+                        }
+                        else
+                        {
+                            parameter.DbType = DbTypes[i];
+                        }
+                        parameter.Direction = Directions[i];
+                        parameter.Size = Sizes[i];
+                        parameter.Value = Values[i];
+                        command.Parameters.Add(parameter);
+                    }
+                }
+                lines = command.ExecuteNonQuery();
+
+                //返回输出参数值
+                if (OutputValues != null)
+                {
+                    for (int k = 0; k < command.Parameters.Count; k++)
+                    {
+                        if (((IDbDataParameter)command.Parameters[k]).Direction != ParameterDirection.Input)
+                        {
+                            OutputValues.Add(((IDbDataParameter)command.Parameters[k]).Value);
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                err = ex.Message;
+            }
+            finally
+            {
+                ReleaseDbConnection(dbName, priority, conn, Sql);
+            }
+            return lines;
+        }
+
+        public bool UpdateTable(string dbName, string priority, Guid guid, string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, DataTable dt, out string err)
+        {
+            err = "";
+            bool result = true;
+            //获取数据库连接...
+            IDbConnection conn = null;
+            IDbTransaction trans = null;
+
+            //如果是事务
+            if (_transList.Contains(guid))
+            {
+                //Console.WriteLine("事务:更新DataSet<{0}>...\n", Sql);
+                TransInfo info = (TransInfo)_transList[guid];
+                conn = info.dbConnection;
+                trans = info.dbTransaction;
+
+                //如果事务已经失效,则返回
+                if (trans.Connection == null)
+                {
+                    err = "事务已经失效!";
+                    return false;
+                }
+            }
+            else
+            {
+                err = "未找到请求的事务!";
+                return false;
+            }
+
+            if (conn == null)
+            {
+                err = "获取数据库连接失败!";
+                return false;
+            }
+
+            try
+            {
+                DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
+                DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
+
+                IDbCommand command = conn.CreateCommand();
+                command.CommandText = Sql;
+                command.CommandType = cmdType;
+                command.Transaction = trans;
+
+                ((IDbDataAdapter)adapter).SelectCommand = command;
+
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        command.Parameters.Add(Params[i]);
+
+                    }
+                }
+                //自动生成SqlCommand命令
+                object CB = dataProvider.CreateCommandBuilder(adapter);
+
+                //提交数据更改
+                adapter.Update(dt);
+            }
+            catch (Exception ex)
+            {
+                err = ex.Message;
+                trans.Rollback();
+                result = false;
+            }
+            return result;
+        }
+
+        //非事务处理
+        public bool UpdateTable(string dbName, string priority, string Sql, CommandType cmdType, IDataParameter[] Params, object[] Values, DataTable dt, out string err)
+        {
+            err = "";
+            bool result = false;
+            //获取数据库连接...
+            IDbConnection conn = null;
+
+            //获取数据库连接
+            conn = GetDbConnection(dbName, priority, Sql);
+
+            if (conn == null)
+            {
+                err = "获取数据库连接失败!";
+                return false;
+            }
+
+            try
+            {
+                DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
+                DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
+
+                IDbCommand command = conn.CreateCommand();
+                command.CommandText = Sql;
+                command.CommandType = cmdType;
+
+                ((IDbDataAdapter)adapter).SelectCommand = command;
+
+                //给所有的参数赋值
+                if (Params != null && Values != null)
+                {
+                    for (int i = 0; i < Params.Length; i++)
+                    {
+                        command.Parameters.Add(Params[i]);
+                        ((IDbDataParameter)command.Parameters[i]).Value = Values[i];
+                    }
+                }
+
+                //自动生成SqlCommand命令
+                object CB = dataProvider.CreateCommandBuilder(adapter);
+
+                //提交数据更改
+                adapter.Update(dt);
+
+            }
+            catch (Exception ex)
+            {
+                err = ex.Message;
+                result = false;
+            }
+            finally
+            {
+                ReleaseDbConnection(dbName, priority, conn, Sql);
+            }
+            return result;
+        }
+        //事务处理
+        public bool UpdateTable(string dbName, string priority, Guid guid, string Sql, CommandType cmdType, string[] ParameterNames, DbType[] DbTypes, object[] Values, DataTable dt, out string err)
+        {
+            err = "";
+            bool result = true;
+            //获取数据库连接...
+            IDbConnection conn = null;
+            IDbTransaction trans = null;
+
+            //如果是事务
+            if (_transList.Contains(guid))
+            {
+                //Console.WriteLine("事务:更新DataSet<{0}>...\n", Sql);
+                TransInfo info = (TransInfo)_transList[guid];
+                conn = info.dbConnection;
+                trans = info.dbTransaction;
+
+                //如果事务已经失效,则返回
+                if (trans.Connection == null)
+                {
+                    err = "事务已经失效!";
+                    cwl.WriteLog(err, LogInfoLevel.Error, "UpdateTable", "事务1");
+                    return false;
+                }
+            }
+            else
+            {
+                err = "未找到请求的事务!";
+                return false;
+            }
+
+            if (conn == null)
+            {
+                err = "获取数据库连接失败!";
+                return false;
+            }
+            try
+            {
+                DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
+                DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
+                IDbCommand command = conn.CreateCommand();
+                command.CommandText = Sql;
+                command.CommandType = cmdType;
+                command.Transaction = trans;
+
+                //给所有的参数赋值
+                if (ParameterNames != null && DbTypes != null && Values != null)
+                {
+                    for (int i = 0; i < ParameterNames.Length; i++)
+                    {
+                        IDbDataParameter parameter = dataProvider.CreateDataParameter();
+                        parameter.ParameterName = ParameterNames[i];
+                        if (conn is System.Data.OracleClient.OracleConnection)
+                        {
+                            try
+                            {
+                                ((System.Data.OracleClient.OracleParameter)parameter).OracleType = (System.Data.OracleClient.OracleType)DbTypes[i];
+                            }
+                            catch
+                            {
+                                parameter.DbType = DbTypes[i];
+                            }
+                        }
+                        else
+                        {
+                            parameter.DbType = DbTypes[i];
+                        }
+                        parameter.Value = Values[i];
+
+                        command.Parameters.Add(parameter);
+                    }
+                }
+
+                ((IDbDataAdapter)adapter).SelectCommand = command;
+
+                //自动生成SqlCommand命令
+                object CB = dataProvider.CreateCommandBuilder(adapter);
+
+                //提交数据更改
+                adapter.Update(dt);
+            }
+            catch (Exception ex)
+            {
+                err = ex.Message;
+                trans.Rollback();
+
+                result = false;
+            }
+
+            return result;
+        }
+
+        //非事务处理
+        public bool UpdateTable(string dbName, string priority, string Sql, CommandType cmdType, string[] ParameterNames, DbType[] DbTypes, object[] Values, DataTable dt, out string err)
+        {
+            err = "";
+            bool result = true;
+            //获取数据库连接...
+            IDbConnection conn = null;
+
+            //获取数据库连接
+            conn = GetDbConnection(dbName, priority, Sql);
+
+            if (conn == null)
+            {
+                err = "获取数据库连接失败!";
+                return false;
+            }
+            try
+            {
+
+                DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
+                DbDataAdapter adapter = dataProvider.CreateDataAdapterObject();
+                IDbCommand command = conn.CreateCommand();
+                command.CommandText = Sql;
+                command.CommandType = cmdType;
+
+                //给所有的参数赋值
+                if (ParameterNames != null && DbTypes != null && Values != null)
+                {
+                    for (int i = 0; i < ParameterNames.Length; i++)
+                    {
+                        IDbDataParameter parameter = dataProvider.CreateDataParameter();
+                        parameter.ParameterName = ParameterNames[i];
+                        if (conn is System.Data.OracleClient.OracleConnection)
+                        {
+                            try
+                            {
+                                ((System.Data.OracleClient.OracleParameter)parameter).OracleType = (System.Data.OracleClient.OracleType)DbTypes[i];
+                            }
+                            catch
+                            {
+                                parameter.DbType = DbTypes[i];
+                            }
+                        }
+                        else
+                        {
+                            parameter.DbType = DbTypes[i];
+                        }
+                        parameter.Value = Values[i];
+
+                        command.Parameters.Add(parameter);
+                    }
+                }
+
+                ((IDbDataAdapter)adapter).SelectCommand = command;
+
+                //自动生成SqlCommand命令
+                object CB = dataProvider.CreateCommandBuilder(adapter);
+
+                //提交数据更改
+                adapter.Update(dt);
+            }
+            catch (Exception ex)
+            {
+                err = ex.Message;
+                result = false;
+            }
+            finally
+            {
+                //释放连接
+                ReleaseDbConnection(dbName, priority, conn, Sql);
+            }
+            return result;
+        }
+
+
+        #endregion
+
+        #region"基础操作"
+        public IDbCommand GetCommand(string dbName, string priority, Guid guid, out string err)
+        {
+            err = "";
+
+            //获取数据库连接...
+            IDbConnection conn = null;
+            IDbTransaction trans = null;
+
+            //如果是事务
+            if (_transList.Contains(guid))
+            {
+                //Console.WriteLine("事务:更新DataSet<{0}>...\n", Sql);
+                TransInfo info = (TransInfo)_transList[guid];
+                conn = info.dbConnection;
+                trans = info.dbTransaction;
+
+                //如果事务已经失效,则返回
+                if (trans.Connection == null)
+                {
+                    err = "事务已经失效";
+                    return null;
+                }
+            }
+            else
+            {
+                //Console.WriteLine("更新DataSet<{0}>...\n", Sql);
+                //获取数据库连接
+                conn = GetDbConnection(dbName, priority, "GetCommand");
+            }
+
+            if (conn == null)
+            {
+                err = "获取数据库连接失败!";
+                return null;
+            }
+            IDbCommand command = conn.CreateCommand();
+            return command;
+        }
+
+        public IDbTransaction GetTransaction(string dbName, string priority, Guid guid, out string err)
+        {
+            err = "";
+            IDbConnection conn = null;
+
+            IDbTransaction trans = null;
+
+            //如果是事务
+            if (_transList.Contains(guid))
+            {
+                //Console.WriteLine("事务:更新DataSet<{0}>...\n", Sql);
+                TransInfo info = (TransInfo)_transList[guid];
+                trans = info.dbTransaction;
+                conn = info.dbConnection;
+
+                //如果事务已经失效,则返回
+                if (trans.Connection == null)
+                {
+                    err = "事务已经失效";
+                    return null;
+                }
+
+            }
+            else
+            {
+                err = "没有事务!";
+                return null;
+            }
+
+            if (conn == null)
+            {
+                err = "获取数据库连接失败!";
+                return null;
+            }
+            return trans;
+        }
+        /// <summary>
+        /// 获取连接提供者
+        /// </summary>
+        /// <param name="configurationString"></param>
+        /// <returns></returns>
+        private static DataProvider.IDataProvider GetDataProvider(string dbType)
+        {
+
+
+            DataProvider.IDataProvider dataProvider =
+                (DataProvider.IDataProvider)_dataProviderNameList[dbType.ToUpper()];
+
+
+            return dataProvider;
+        }
+
+        public DataProvider.IDataProvider GetDataProvider(string dbName, out string err)
+        {
+            err = "";
+
+            return GetDataProvider(this.GetDbType(dbName, out err));
+        }
+        public DataProvider.IDataProvider GetDataProvider(Guid guid, out string err)
+        {
+            err = "";
+            IDbConnection conn = null;
+
+
+            //如果是事务
+            if (_transList.Contains(guid))
+            {
+                //Console.WriteLine("事务:更新DataSet<{0}>...\n", Sql);
+                TransInfo info = (TransInfo)_transList[guid];
+                conn = info.dbConnection;
+
+            }
+            if (conn == null)
+            {
+                err = "获取数据库连接失败!";
+                return null;
+            }
+
+            return GetDataProvider(conn.GetType());
+        }
+        private static DataProvider.IDataProvider GetDataProvider(System.Type dbType)
+        {
+
+
+            DataProvider.IDataProvider dataProvider =
+                (DataProvider.IDataProvider)_dataProviderTypeList[dbType];
+
+
+            return dataProvider;
+        }
+
+        public System.Guid BeginTransaction(string dbName, string priority, long dbManagerID, double minutes, out string err)
+        {
+            return BeginTransaction("", dbName, priority, dbManagerID, minutes, out err);
+        }
+        /// <summary>
+        /// 开始处理事务,同时指定该事务最长处理时间,单位为分钟,返回结果表示是否成功
+        /// 不支持嵌套事务
+        /// </summary>
+        /// <param name="dbName"></param>
+        /// <param name="priority"></param>
+        /// <param name="dbManagerID"></param>
+        /// <param name="minutes"></param>
+        /// <param name="err"></param>
+        /// <returns></returns>
+        public System.Guid BeginTransaction(string methodName, string dbName, string priority, long dbManagerID, double minutes, out string err)
+        {
+            lock (_transList)
+            {
+                err = "";
+                Guid guid = Guid.NewGuid();
+
+
+                //获取数据库连接
+                IDbConnection conn = GetDbConnection(dbName, priority, methodName);
+
+                if (conn == null)
+                {
+                    err = "获取数据库连接失败!";
+                    return guid;
+                }
+
+                //设置事务信息,包括数据库连接、事务、事务开始时间等
+                TransInfo info = new TransInfo();
+                info.dbConnection = conn;
+                info.beginTime = DateTime.Now;
+                info.dbManagerID = dbManagerID;
+                try
+                {
+                    info.dbTransaction = conn.BeginTransaction(); ;
+                    _transList.Add(guid, info);
+                }
+                catch (Exception ex)
+                {
+                    err = ex.Message;
+                    ReleaseDbConnection(dbName, priority, conn, err);
+                }
+                return guid;
+            }
+        }
+
+        //提交当前事务,返回结果表示是否成功
+        public bool Commit(string dbName, string priority, Guid guid, out string err)
+        {
+            lock (_transList)
+            {
+                bool result = true;
+                err = "";
+
+                if (!_transList.Contains(guid))
+                {
+                    err = "不存在要提交的事务";
+                    return false;
+                }
+
+                TransInfo info = (TransInfo)_transList[guid];
+
+                IDbConnection conn = info.dbConnection;
+                IDbTransaction trans = info.dbTransaction;
+                try
+                {
+                    trans.Commit();
+                }
+                catch (Exception ex)
+                {
+                    err = ex.Message;
+                    result = false;
+                    cwl.WriteLog(err, LogInfoLevel.Error, "Rollback", "");
+                }
+                finally
+                {
+                    //删除事务
+                    ReleaseDbConnection(dbName, priority, conn, "Commit:" + guid.ToString());
+                    _transList.Remove(guid);
+                }
+                return result;
+            }
+        }
+
+        //回滚当前事务,返回结果表示是否成功
+        public bool Rollback(string dbName, string priority, Guid guid, out string err)
+        {
+            lock (_transList)
+            {
+                bool result = true;
+                err = "";
+
+                if (!_transList.Contains(guid))
+                {
+                    err = "不存在要回滚的事务";
+                    return false;
+                }
+
+                TransInfo info = (TransInfo)_transList[guid];
+                IDbConnection conn = info.dbConnection;
+                IDbTransaction trans = info.dbTransaction;
+
+                try
+                {
+                    trans.Rollback();
+                }
+                catch (Exception ex)
+                {
+                    err = ex.Message;
+                    result = false;
+                    cwl.WriteLog(err, LogInfoLevel.Error, "Rollback", "");
+                }
+                finally
+                {
+                    //删除事务
+                    ReleaseDbConnection(dbName, priority, conn, "Rollback:" + guid.ToString());
+                    _transList.Remove(guid);
+                }
+                return result;
+            }
+        }
+
+        /// <summary>
+        /// 从数据库配置文件中读取数据库连接信息
+        /// </summary>
+        /// <param name="fileName">文件名称</param>
+        /// <returns>是否成功</returns>
+        private bool ReadDbConnectionInfo(string fileName)
+        {
+            _dbConfigInfo = new Hashtable();
+
+            //如果文件存在则读取配置文件
+            if (File.Exists(fileName) == true)
+            {
+                try
+                {
+                    XmlTextReader reader = null;
+
+                    try
+                    {
+                        //打开数据库配置文件,并忽略所有的空格
+                        reader = new XmlTextReader(fileName);
+                        reader.WhitespaceHandling = WhitespaceHandling.None;
+
+                        string dbName = "";
+                        DBConnectionInfo dbConnectionInfo = new DBConnectionInfo();
+                        dbConnectionInfo.connectionPool = new Hashtable();
+
+                        string type = "";
+                        string priority = "";
+                        string maxNum = "";
+
+                        //解释XML文件
+                        while (reader.Read())
+                        {
+                            //bool bFlag = false;
+
+                            switch (reader.NodeType)
+                            {
+                                case XmlNodeType.Element:
+                                    type = reader.Name;
+
+                                    break;
+                                case XmlNodeType.Text:
+                                    if (type.Equals("name"))
+                                    {
+                                        dbName = reader.Value;
+                                        dbConnectionInfo.dbName = dbName;
+                                    }
+                                    else
+                                    {
+                                        if (type.Equals("type"))
+                                        {
+                                            dbConnectionInfo.dbType = reader.Value;
+                                        }
+                                        else
+                                        {
+                                            if (type.Equals("connectionString"))
+                                            {
+                                                dbConnectionInfo.connectionString = reader.Value;
+                                            }
+                                            else
+                                            {
+                                                if (type.Equals("connectionPool"))
+                                                {
+                                                    //dbConnectionInfo.connectionPool = new Hashtable();
+                                                }
+                                                else
+                                                {
+                                                    if (type.Equals("priority"))
+                                                    {
+                                                        priority = reader.Value;
+                                                    }
+                                                    else
+                                                    {
+                                                        if (type.Equals("maxConnectionNum"))
+                                                        {
+                                                            maxNum = reader.Value;
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                    type = "";
+                                    break;
+                                case XmlNodeType.EndElement:
+                                    if (reader.Name.Equals("connectionPool"))
+                                    {
+                                        dbConnectionInfo.connectionPool.Add(priority, maxNum);
+                                        priority = "";
+                                        maxNum = "";
+                                    }
+                                    else
+                                    {
+                                        if (reader.Name.Equals("database"))
+                                        {
+                                            _dbConfigInfo.Add(dbName, dbConnectionInfo);
+                                            dbName = "";
+                                            dbConnectionInfo = new DBConnectionInfo();
+                                            dbConnectionInfo.connectionPool = new Hashtable();
+                                        }
+                                    }
+                                    break;
+                            }
+                        }
+                    }
+
+                    finally
+                    {
+                        if (reader != null)
+                            reader.Close();
+                    }
+
+
+                }
+                catch (Exception ex)
+                {
+                    return false;
+                }
+            }
+            else//读取默认设置
+            {
+                return false;
+            }
+
+            return true;
+        }
+
+        //  获取数据库连接
+        private IDbConnection GetDbConnection(string dbName, string priority, string sqlstr)
+        {
+            IDbConnection conn = null;
+            //直接从数据库连接池中取连接,无连接则直接返回
+            Hashtable ht1 = (Hashtable)_connList[dbName];
+            if (ht1 == null)
+            {
+                cwl.WriteLog("获取数据库连接失败!", LogInfoLevel.Message, "ht1:" + dbName, "GetDbConnection");
+                return conn;
+            }
+            Hashtable ht2 = (Hashtable)ht1[priority];
+            if (ht2 == null)
+            {
+                cwl.WriteLog("获取数据库连接失败!", LogInfoLevel.Message, "ht2:" + dbName + "/" + priority, "GetDbConnection");
+                return conn;
+            }
+            lock (ht2)
+            {
+                ArrayList freeList = ht2[0] as ArrayList;
+                //排队,最长时间1秒
+                //{
+                //    for (int i = 0; i < 10; i++)
+                //    {
+                //        Thread.Sleep(100);
+                //        if (freeList.Count > 0)
+                //        {
+                //            i = 10;
+                //        }
+                //    }
+                //}
+                if (freeList.Count <= 0)
+                {
+                    ArrayList al = ht2[1] as ArrayList;
+                    if (al == null) al = new ArrayList();
+                    cwl.WriteLog("数据库忙,请稍后再试!", LogInfoLevel.Message, "<<<>>> " + dbName + " <<<>>>  freeList||" + al.Count.ToString(), "GetDbConnection");
+                    return null;
+                }
+
+                conn = (IDbConnection)freeList[0];
+
+                freeList.Remove(conn);
+                Hashtable busyList = (Hashtable)ht2[1];
+                if (busyList == null)
+                {
+                    busyList = new Hashtable();
+                    ht2.Add(1, busyList);
+                }
+
+                DataProvider.IDataProvider dataProvider = GetDataProvider(conn.GetType());
+                try
+                {
+                    if (conn.State != ConnectionState.Open)
+                    {
+                        string strConnState = conn.State.ToString();
+
+
+                        conn.Close();
+                        conn.Dispose();
+                        conn = null;
+                        GC.Collect();
+
+                        foreach (DictionaryEntry it in _dbConfigInfo)
+                        {
+                            DBConnectionInfo info = (DBConnectionInfo)it.Value;
+                            if (info.dbName == dbName)
+                            {
+                                conn = dataProvider.CreateConnectionObject(info.connectionString);
+                                conn.Open();
+                                cwl.WriteLog("重连成功!||连接状态:" + strConnState, LogInfoLevel.Message, info.dbName, "GetDbConnection");
+                                break;
+                            }
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    cwl.WriteLog(ex.Message, LogInfoLevel.Error, "", "GetDbConnection");
+                    return null;
+                }
+
+                CurrConnOperateInfo cco = new CurrConnOperateInfo();
+                cco.dt = DateTime.Now;
+                cco.sqlstr = sqlstr;
+                cco.SID = dataProvider.GetSID(ref conn);
+                busyList.Add(conn, cco);
+                return conn;
+            }
+        }
+
+        private void ReleaseDbConnection(string dbName, string priority, IDbConnection conn, string SqlText)
+        {
+            if (conn == null) { return; }
+
+            Hashtable ht1 = (Hashtable)_connList[dbName];
+            if (ht1 == null) { return; }
+
+            Hashtable ht2 = (Hashtable)ht1[priority];
+            if (ht2 == null) { return; }
+
+            lock (ht2)
+            {
+                Hashtable busyList = (Hashtable)ht2[1];
+                if (busyList != null)
+                {
+                    if (!busyList.Contains(conn))
+                    {
+                        // 连接已被检验线程处理,此处不在处理
+
+                        //cwl.WriteLog(SqlText, LogInfoLevel.Message, "", "ReleaseDbConnection");
+                        return;
+                    }
+                    busyList.Remove(conn);
+                }
+
+                ArrayList freeList = ht2[0] as ArrayList;
+                if (freeList == null)
+                {
+                    freeList = new ArrayList();
+                    ht2.Add(0, freeList);
+                }
+                freeList.Add(conn);
+            }
+        }
+
+        /// <summary>
+        /// 初始化数据提供接口
+        /// </summary>
+        /// <param name="dataProvider"></param>
+        public static void AddDataProvider(DataProvider.IDataProvider dataProvider)
+        {
+            _dataProviderNameList[dataProvider.Name.ToUpper()] = dataProvider;
+            _dataProviderTypeList[dataProvider.ConnectionType] = dataProvider;
+        }
+
+        private void CreateAllConnections()
+        {
+            //如果连接已经创建,则返回
+            if (_connList.Count > 0)
+            {
+                return;
+            }
+
+            foreach (DictionaryEntry it in _dbConfigInfo)
+            {
+                DBConnectionInfo info = (DBConnectionInfo)it.Value;
+                DataProvider.IDataProvider dataProvider = GetDataProvider(info.dbType);
+                Hashtable ht1 = new Hashtable();
+                foreach (DictionaryEntry pool in info.connectionPool)
+                {
+                    Hashtable ht2 = new Hashtable();
+                    ArrayList connList = new ArrayList();
+                    for (int i = 0; i < Convert.ToInt32(pool.Value); i++)
+                    {
+                        try
+                        {
+                            IDbConnection conn = dataProvider.CreateConnectionObject(info.connectionString);
+
+                            conn.Open();
+
+                            connList.Add(conn);
+                        }
+                        catch (Exception ex)
+                        {
+                            cwl.WriteLog("创建数据库连接" + info.dbName + " " + pool.Key + " " + i.ToString() + "失败!", LogInfoLevel.Error, info.dbName, "CreateAllConnections");
+                            break;
+                        }
+                    }
+                    ht2.Add(0, connList);
+                    ht1.Add(pool.Key, ht2);
+                }
+                _connList.Add(info.dbName, ht1);
+            }
+            cwl.WriteLog("启动成功!数据库连接池创建成功!");
+        }
+
+        #region 原来代码 maliang 2011-10-19
+        /*
+        private void FixConnections()
+        {
+            while (true)
+            {
+                try
+                {
+                    foreach (DictionaryEntry it in _dbConfigInfo)
+                    {
+                        DBConnectionInfo info = (DBConnectionInfo)it.Value;
+                        DataProvider.IDataProvider dataProvider = GetDataProvider(info.dbType);
+                        Hashtable ht1 = (Hashtable)_connList[info.dbName];
+                        foreach (DictionaryEntry pool in info.connectionPool)
+                        {
+                            Hashtable ht2 = (Hashtable)ht1[pool.Key];
+                            lock (ht2)
+                            {
+                                ArrayList connList = ht2[0] as ArrayList;
+                                Hashtable busyConnList = (Hashtable)ht2[1];
+                                int connNumber = 0;
+                                if (connList != null)
+                                {
+                                    connNumber = connList.Count;
+                                }
+                                else
+                                {
+                                    connList = new ArrayList();
+                                    ht2.Remove(0);
+                                    ht2.Add(0, connList);
+                                }
+                                if (busyConnList != null)
+                                {
+                                    connNumber += busyConnList.Count;
+                                }
+                                if (connNumber < Convert.ToInt32(pool.Value))
+                                {
+                                    cwl.WriteLog("有数据库连接意外销毁,增加数据库连接!", LogInfoLevel.Message, info.dbName, "FixConnections");
+
+                                    for (int i = connNumber; i < Convert.ToInt32(pool.Value); i++)
+                                    {
+                                        try
+                                        {
+                                            IDbConnection conn = dataProvider.CreateConnectionObject(info.connectionString);
+                                            conn.Open();
+                                            connList.Add(conn);
+                                            cwl.WriteLog("增加数据库连接" + info.dbName + " " + pool.Key + " " + i.ToString() + "成功!", LogInfoLevel.Message, info.dbName, "FixConnections");
+                                        }
+                                        catch (Exception ex)
+                                        {
+                                            cwl.WriteLog("增加数据库连接" + info.dbName + " " + pool.Key + " " + i.ToString() + "失败!", LogInfoLevel.Error, info.dbName, "FixConnections");
+                                            Console.WriteLine("增加数据库连接" + info.dbName + " " + pool.Key + " " + "失败!" + ex.Message + "\n");
+                                            break;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    cwl.WriteLog(ex.Message, LogInfoLevel.Error, "", "FixConnections");
+                }
+
+                Thread.Sleep(3 * 60 * 1000);
+            }
+
+        }
+        private void CheckConnActive()
+        {
+            while (true)
+            {
+                try
+                {
+                    if (_init)
+                    {
+                        foreach (DictionaryEntry it in _connList)
+                        {
+                            Hashtable ht1 = (Hashtable)it.Value;
+                            string dbName = it.Key as string;
+                            DBConnectionInfo info = (DBConnectionInfo)_dbConfigInfo[dbName];
+                            DataProvider.IDataProvider dataProvider = GetDataProvider(info.dbType);
+
+                            foreach (DictionaryEntry it2 in ht1)
+                            {
+                                ArrayList connList = ((Hashtable)it2.Value)[0] as ArrayList;
+                                #region // 检查闲列表
+                                //for ( int l = 0 ; l< connList.Count ;l++)
+                                //{
+                                //    IDbConnection conn = connList[l] as IDbConnection ; 
+                                //    if(conn!=null)
+                                //    {
+                                //        if(!dataProvider.Ping(ref conn)  )
+                                //        {
+                                //            //Thread.Sleep( 1000);
+                                //            //if(!dataProvider.Ping(ref conn)  )
+                                //            //{
+                                //                cwl.WriteLog("连接失效,重新连接中......", LogInfoLevel.Message, info.dbName, "CheckConnActive");
+                                //                Console.WriteLine(info.dbName + "连接失效,重新连接中......\n");
+                                //                //connList.Remove(conn);
+                                //                if (conn != null )
+                                //                {
+                                //                    conn.Close();
+                                //                    conn.Dispose();
+                                //                    conn = null;
+                                //                    GC.Collect();
+                                //                }
+                                //                try
+                                //                {
+                                //                    conn = dataProvider.CreateConnectionObject(info.connectionString);
+                                //                    conn.Open();
+                                //                    connList[l] = conn;
+                                //                    cwl.WriteLog("重连成功!", LogInfoLevel.Message, info.dbName, "CheckConnActive");
+                                //                    Console.WriteLine(info.dbName + "重连成功!\n");
+
+                                //                }
+                                //                catch(Exception ex)
+                                //                {
+                                //                    cwl.WriteLog("重连失败!", LogInfoLevel.Error, info.dbName, "CheckConnActive");
+                                //                    Console.WriteLine(info.dbName + "重连失败!" +ex.Message + "\n");
+
+                                //                }
+
+                                //            //}
+
+                                //        }
+                                //    }
+                                //    else
+                                //    {
+                                //        try
+                                //        {
+                                //            conn = dataProvider.CreateConnectionObject(info.connectionString);
+                                //            conn.Open();
+                                //            connList[l]= conn;
+                                //            Console.WriteLine(info.dbName + "重连成功!\n");
+                                //            cwl.WriteLog("重连成功!", LogInfoLevel.Message, info.dbName, "CheckConnActive");
+
+                                //        }
+                                //        catch(Exception ex)
+                                //        {
+                                //            Console.WriteLine("重连失败!" + ex.Message + "\n");
+                                //            cwl.WriteLog("重连失败!", LogInfoLevel.Error, info.dbName, "CheckConnActive");
+
+                                //        }
+                                //    }
+                                //}
+                                #endregion
+
+                                #region // 检查忙列表
+                                if (((Hashtable)it2.Value).Count < 2) continue;
+
+                                Hashtable busyConnList = ((Hashtable)it2.Value)[1] as Hashtable;
+                                if (busyConnList != null)
+                                {
+                                    Hashtable m_busyConnList = busyConnList.Clone() as Hashtable;
+                                    foreach (DictionaryEntry busyConn in m_busyConnList)
+                                    {
+                                        DateTime dt = ((CurrConnOperateInfo)busyConn.Value).dt;
+
+                                        DateTime t = DateTime.Now;
+                                        if ((string)it2.Key == "A")
+                                        {
+                                            t = dt.AddSeconds(_connLifeTimeA);
+                                        }
+                                        else if ((string)it2.Key == "B")
+                                        {
+                                            t = dt.AddSeconds(_connLifeTimeB);
+                                        }
+                                        else if ((string)it2.Key == "C")
+                                        {
+                                            t = dt.AddSeconds(_connLifeTimeC);
+                                        }
+
+                                        #region //判断是否已经超时
+                                        if (t.CompareTo(DateTime.Now) < 0)
+                                        {
+
+                                            IDbConnection conn = busyConn.Key as IDbConnection;
+                                            if (conn != null)
+                                            {
+                                                try
+                                                {
+                                                    cwl.WriteLog("有连接超时,将关闭重连!||忙连接数:" + busyConnList.Count.ToString() + "||闲连接数:" + connList.Count.ToString()
+                                                        + " SID:" + ((CurrConnOperateInfo)busyConn.Value).SID.ToString()
+                                                        + " SQL:" + ((CurrConnOperateInfo)busyConn.Value).sqlstr
+                                                        + " 执行开始时间:" + ((CurrConnOperateInfo)busyConn.Value).dt.ToLongTimeString()
+                                                        + " 当前时间:" + DateTime.Now.ToLongTimeString(),
+                                                        LogInfoLevel.Error, info.dbName, "CheckConnActive");
+                                                    busyConnList.Remove(conn);
+
+                                                    conn.Close();
+                                                    conn.Dispose();
+                                                    conn = null;
+                                                    GC.Collect();
+                                                    conn = dataProvider.CreateConnectionObject(info.connectionString);
+                                                    conn.Open();
+                                                    if (connList == null)
+                                                    {
+                                                        connList = new ArrayList();
+                                                        ht1.Remove(0);
+                                                        ht1.Add(0, connList);
+                                                    }
+                                                    connList.Add(conn);
+                                                    cwl.WriteLog("超时连接重连成功!||忙连接数:" + busyConnList.Count.ToString() + "||闲连接数:" + connList.Count.ToString(),
+                                                        LogInfoLevel.Message, info.dbName, "CheckConnActive");
+                                                }
+                                                catch (Exception ex)
+                                                {
+                                                    cwl.WriteLog("重连失败,丢失一个连接!", LogInfoLevel.Error, info.dbName, "CheckConnActive");
+                                                    Console.WriteLine("重连失败,丢失一个连接!" + ex.Message + "\n");
+
+                                                }
+                                            }
+                                            else
+                                            {
+                                                try
+                                                {
+                                                    cwl.WriteLog("有连接失效,将关闭重连!", LogInfoLevel.Error, info.dbName, "CheckConnActive");
+                                                    Console.WriteLine(info.dbName + "有连接失效,将关闭重连!\n");
+                                                    busyConnList.Remove(conn);
+                                                    conn = dataProvider.CreateConnectionObject(info.connectionString);
+                                                    conn.Open();
+                                                    if (connList == null)
+                                                    {
+                                                        connList = new ArrayList();
+                                                        ht1.Remove(0);
+                                                        ht1.Add(0, connList);
+                                                    }
+                                                    connList.Add(conn);
+                                                }
+                                                catch (Exception ex)
+                                                {
+                                                    cwl.WriteLog("重连失败,丢失一个连接!", LogInfoLevel.Error, info.dbName, "CheckConnActive");
+                                                    Console.WriteLine("重连失败,丢失一个连接!" + ex.Message + "\n");
+                                                }
+                                            }
+                                        }
+                                        #endregion
+                                    }
+                                }
+                                #endregion
+                            }
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    cwl.WriteLog(ex.Message, LogInfoLevel.Error, "", "CheckConnActive");
+                    // Console.WriteLine(ex.Message);
+                }
+
+                Thread.Sleep(1 * 60 * 1000);
+
+            }
+        }
+        */
+        #endregion
+
+        #region 变更代码 maliang 2011-10-19
+        private static object lockObj = new object();
+
+        private void ConnectionsListener()
+        {
+            while (true)
+            {
+                lock (lockObj)
+                {
+                    CheckConnActive();
+                    FixConnections();
+                    Thread.Sleep(1 * 60 * 1000);
+                }
+            }
+        }
+
+        private void FixConnections()
+        {
+
+            try
+            {
+                foreach (DictionaryEntry it in _dbConfigInfo)
+                {
+                    DBConnectionInfo info = (DBConnectionInfo)it.Value;
+                    DataProvider.IDataProvider dataProvider = GetDataProvider(info.dbType);
+                    Hashtable ht1 = (Hashtable)_connList[info.dbName];
+                    foreach (DictionaryEntry pool in info.connectionPool)
+                    {
+                        Hashtable ht2 = (Hashtable)ht1[pool.Key];
+                        lock (ht2)
+                        {
+                            ArrayList connList = ht2[0] as ArrayList;
+                            Hashtable busyConnList = (Hashtable)ht2[1];
+                            int connNumber = 0;
+                            if (connList != null)
+                            {
+                                connNumber = connList.Count;
+                            }
+                            else
+                            {
+                                connList = new ArrayList();
+                                ht2.Remove(0);
+                                ht2.Add(0, connList);
+                            }
+                            if (busyConnList != null)
+                            {
+                                connNumber += busyConnList.Count;
+                            }
+                            if (connNumber < Convert.ToInt32(pool.Value))
+                            {
+                                cwl.WriteLog("有数据库连接意外销毁,增加数据库连接!", LogInfoLevel.Message, info.dbName, "FixConnections");
+
+                                for (int i = connNumber; i < Convert.ToInt32(pool.Value); i++)
+                                {
+                                    try
+                                    {
+                                        IDbConnection conn = dataProvider.CreateConnectionObject(info.connectionString);
+                                        conn.Open();
+                                        connList.Add(conn);
+                                        cwl.WriteLog("增加数据库连接" + info.dbName + " " + pool.Key + " " + i.ToString() + "成功!", LogInfoLevel.Message, info.dbName, "FixConnections");
+                                    }
+                                    catch (Exception ex)
+                                    {
+                                        cwl.WriteLog("增加数据库连接" + info.dbName + " " + pool.Key + " " + i.ToString() + "失败!", LogInfoLevel.Error, info.dbName, "FixConnections");
+                                        Console.WriteLine("增加数据库连接" + info.dbName + " " + pool.Key + " " + "失败!" + ex.Message + "\n");
+                                        break;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                cwl.WriteLog(ex.Message, LogInfoLevel.Error, "", "FixConnections");
+            }
+
+
+
+        }
+        private void CheckConnActive()
+        {
+
+            try
+            {
+                if (_init)
+                {
+                    foreach (DictionaryEntry it in _connList)
+                    {
+                        Hashtable ht1 = (Hashtable)it.Value;
+                        string dbName = it.Key as string;
+                        DBConnectionInfo info = (DBConnectionInfo)_dbConfigInfo[dbName];
+                        DataProvider.IDataProvider dataProvider = GetDataProvider(info.dbType);
+
+                        foreach (DictionaryEntry it2 in ht1)
+                        {
+                            ArrayList connList = ((Hashtable)it2.Value)[0] as ArrayList;
+
+
+                            #region // 检查忙列表
+                            if (((Hashtable)it2.Value).Count < 2) continue;
+
+                            Hashtable busyConnList = ((Hashtable)it2.Value)[1] as Hashtable;
+                            if (busyConnList != null)
+                            {
+                                Hashtable m_busyConnList = busyConnList.Clone() as Hashtable;
+                                foreach (DictionaryEntry busyConn in m_busyConnList)
+                                {
+                                    DateTime dt = ((CurrConnOperateInfo)busyConn.Value).dt;
+
+                                    DateTime t = DateTime.Now;
+                                    if ((string)it2.Key == "A")
+                                    {
+                                        t = dt.AddSeconds(_connLifeTimeA);
+                                    }
+                                    else if ((string)it2.Key == "B")
+                                    {
+                                        t = dt.AddSeconds(_connLifeTimeB);
+                                    }
+                                    else if ((string)it2.Key == "C")
+                                    {
+                                        t = dt.AddSeconds(_connLifeTimeC);
+                                    }
+
+                                    #region //判断是否已经超时
+                                    if (t.CompareTo(DateTime.Now) < 0)
+                                    {
+
+                                        IDbConnection conn = busyConn.Key as IDbConnection;
+                                        if (conn != null)
+                                        {
+                                            try
+                                            {
+                                                cwl.WriteLog("有连接超时,将关闭重连!||忙连接数:" + busyConnList.Count.ToString() + "||闲连接数:" + connList.Count.ToString()
+                                                    + " SID:" + ((CurrConnOperateInfo)busyConn.Value).SID.ToString()
+                                                    + " SQL:" + ((CurrConnOperateInfo)busyConn.Value).sqlstr
+                                                    + " 执行开始时间:" + ((CurrConnOperateInfo)busyConn.Value).dt.ToLongTimeString()
+                                                    + " 当前时间:" + DateTime.Now.ToLongTimeString(),
+                                                    LogInfoLevel.Error, info.dbName, "CheckConnActive");
+                                                busyConnList.Remove(conn);
+
+                                                conn.Close();
+                                                conn.Dispose();
+                                                conn = null;
+                                                GC.Collect();
+                                                conn = dataProvider.CreateConnectionObject(info.connectionString);
+                                                conn.Open();
+                                                if (connList == null)
+                                                {
+                                                    connList = new ArrayList();
+                                                    ht1.Remove(0);
+                                                    ht1.Add(0, connList);
+                                                }
+                                                connList.Add(conn);
+                                                cwl.WriteLog("超时连接重连成功!||忙连接数:" + busyConnList.Count.ToString() + "||闲连接数:" + connList.Count.ToString(),
+                                                    LogInfoLevel.Message, info.dbName, "CheckConnActive");
+                                            }
+                                            catch (Exception ex)
+                                            {
+                                                cwl.WriteLog("重连失败,丢失一个连接!", LogInfoLevel.Error, info.dbName, "CheckConnActive");
+                                                Console.WriteLine("重连失败,丢失一个连接!" + ex.Message + "\n");
+
+                                            }
+                                        }
+                                        else
+                                        {
+                                            try
+                                            {
+                                                cwl.WriteLog("有连接失效,将关闭重连!", LogInfoLevel.Error, info.dbName, "CheckConnActive");
+                                                Console.WriteLine(info.dbName + "有连接失效,将关闭重连!\n");
+                                                busyConnList.Remove(conn);
+                                                conn = dataProvider.CreateConnectionObject(info.connectionString);
+                                                conn.Open();
+                                                if (connList == null)
+                                                {
+                                                    connList = new ArrayList();
+                                                    ht1.Remove(0);
+                                                    ht1.Add(0, connList);
+                                                }
+                                                connList.Add(conn);
+                                            }
+                                            catch (Exception ex)
+                                            {
+                                                cwl.WriteLog("重连失败,丢失一个连接!", LogInfoLevel.Error, info.dbName, "CheckConnActive");
+                                                Console.WriteLine("重连失败,丢失一个连接!" + ex.Message + "\n");
+                                            }
+                                        }
+                                    }
+                                    #endregion
+                                }
+                            }
+                            #endregion
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                cwl.WriteLog(ex.Message, LogInfoLevel.Error, "", "CheckConnActive");
+                // Console.WriteLine(ex.Message);
+            }
+
+
+
+
+        }
+        #endregion
+
+
+
+        ///////////////////////////////////////////////////////////////////////////////
+        ///私有数据成员
+        //////////////////////////////////////////////////////////////////////////////
+        //定义数据库连接信息
+        private struct DBConnectionInfo
+        {
+            public string dbName;
+            public string dbType;
+            public string connectionString;
+            // <Key = priority Value = maxConnectionNum/>
+            public Hashtable connectionPool;
+        };
+        // 存储当前连接的操作信息
+        private struct CurrConnOperateInfo
+        {
+            public DateTime dt;
+            public string sqlstr;
+            public int SID;
+        }
+
+        /// <summary>
+        /// 事务信息
+        /// </summary>
+        private struct TransInfo
+        {
+            public long dbManagerID;
+            public IDbConnection dbConnection;
+            public IDbTransaction dbTransaction;
+            public DateTime beginTime;
+        };
+        private void showsql(string sql)
+        {
+            //Console.WriteLine(sql+"\n");
+        }
+        #endregion
+        private static long[] _dbManagerID = new long[1] { 0 };//由DBProxy为每个DBManager对象分配的ID		
+
+        //<Key = name Value DBConnectionInfo>
+        private Hashtable _dbConfigInfo;//数据库配置信息
+
+
+        private static Hashtable _connList = new Hashtable();
+
+        private Hashtable _transList = new Hashtable();
+
+        private Hashtable _dbList = new Hashtable();//每个DBManager对应的数据库信息
+
+        private double _connLifeTimeA;//数据库连接允许的最长无反应时间A级
+        private double _connLifeTimeB;//数据库连接允许的最长无反应时间B级
+        private double _connLifeTimeC;//数据库连接允许的最长无反应时间C级
+
+        private Thread _checkConnThread;//检查Conn是否有效
+        private Thread _fixConnThread;//检查Conn是否有足够数量
+
+        private Thread _ConnectionsListenerThread;//检查Conn是否有效和是否有足够数量
+
+
+        private long _reference = 0;//DBProxy对象实例数
+        private bool _init = false;
+
+    }
+}

+ 263 - 0
.svn/pristine/39/39eee7587dc8bb9e96ce86fb8fbdba0857a69c52.svn-base

@@ -0,0 +1,263 @@
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+
+namespace Core.Mes.ClientManager
+{
+	/// <summary>
+	/// FrmAbout 的摘要说明。
+	/// </summary>
+	public class FrmAbout : System.Windows.Forms.Form
+	{
+		private System.Windows.Forms.PictureBox pictureBox1;
+		private System.Windows.Forms.LinkLabel linkLabel1;
+		private System.Windows.Forms.Label label1;
+		private System.Windows.Forms.Label label2;
+		private System.Windows.Forms.Label label3;
+		private System.Windows.Forms.Label label4;
+		private System.Windows.Forms.Label label5;
+		private System.Windows.Forms.Button button1;
+		private System.Windows.Forms.Label label6;
+		private System.Windows.Forms.Label label7;
+		private System.Windows.Forms.Label label8;
+		private System.Windows.Forms.Label label9;
+		private System.Windows.Forms.Label label10;
+		private System.Windows.Forms.Label label11;
+		/// <summary>
+		/// 必需的设计器变量。
+		/// </summary>
+		private System.ComponentModel.Container components = null;
+
+		public FrmAbout()
+		{
+			//
+			// Windows 窗体设计器支持所必需的
+			//
+			InitializeComponent();
+
+			//
+			// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
+			//
+		}
+
+		/// <summary>
+		/// 清理所有正在使用的资源。
+		/// </summary>
+		protected override void Dispose( bool disposing )
+		{
+			if( disposing )
+			{
+				if(components != null)
+				{
+					components.Dispose();
+				}
+			}
+			base.Dispose( disposing );
+		}
+
+		#region Windows 窗体设计器生成的代码
+		/// <summary>
+		/// 设计器支持所需的方法 - 不要使用代码编辑器修改
+		/// 此方法的内容。
+		/// </summary>
+		private void InitializeComponent()
+		{
+			System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(FrmAbout));
+			this.pictureBox1 = new System.Windows.Forms.PictureBox();
+			this.linkLabel1 = new System.Windows.Forms.LinkLabel();
+			this.label1 = new System.Windows.Forms.Label();
+			this.label2 = new System.Windows.Forms.Label();
+			this.label3 = new System.Windows.Forms.Label();
+			this.label4 = new System.Windows.Forms.Label();
+			this.label5 = new System.Windows.Forms.Label();
+			this.button1 = new System.Windows.Forms.Button();
+			this.label6 = new System.Windows.Forms.Label();
+			this.label7 = new System.Windows.Forms.Label();
+			this.label8 = new System.Windows.Forms.Label();
+			this.label9 = new System.Windows.Forms.Label();
+			this.label10 = new System.Windows.Forms.Label();
+			this.label11 = new System.Windows.Forms.Label();
+			this.SuspendLayout();
+			// 
+			// pictureBox1
+			// 
+			this.pictureBox1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureBox1.BackgroundImage")));
+			this.pictureBox1.Location = new System.Drawing.Point(0, 0);
+			this.pictureBox1.Name = "pictureBox1";
+			this.pictureBox1.Size = new System.Drawing.Size(232, 64);
+			this.pictureBox1.TabIndex = 0;
+			this.pictureBox1.TabStop = false;
+			// 
+			// linkLabel1
+			// 
+			this.linkLabel1.AutoSize = true;
+			this.linkLabel1.Location = new System.Drawing.Point(64, 160);
+			this.linkLabel1.Name = "linkLabel1";
+			this.linkLabel1.Size = new System.Drawing.Size(147, 17);
+			this.linkLabel1.TabIndex = 1;
+			this.linkLabel1.TabStop = true;
+			this.linkLabel1.Text = "Http://www.hnshituo.com";
+			this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
+			// 
+			// label1
+			// 
+			this.label1.AutoSize = true;
+			this.label1.Location = new System.Drawing.Point(8, 160);
+			this.label1.Name = "label1";
+			this.label1.Size = new System.Drawing.Size(54, 17);
+			this.label1.TabIndex = 2;
+			this.label1.Text = "公司主页";
+			// 
+			// label2
+			// 
+			this.label2.AutoSize = true;
+			this.label2.Location = new System.Drawing.Point(8, 184);
+			this.label2.Name = "label2";
+			this.label2.Size = new System.Drawing.Size(54, 17);
+			this.label2.TabIndex = 3;
+			this.label2.Text = "技术支持";
+			// 
+			// label3
+			// 
+			this.label3.AutoSize = true;
+			this.label3.Location = new System.Drawing.Point(16, 208);
+			this.label3.Name = "label3";
+			this.label3.Size = new System.Drawing.Size(29, 17);
+			this.label3.TabIndex = 5;
+			this.label3.Text = "电话";
+			// 
+			// label4
+			// 
+			this.label4.AutoSize = true;
+			this.label4.BackColor = System.Drawing.Color.Transparent;
+			this.label4.Location = new System.Drawing.Point(16, 232);
+			this.label4.Name = "label4";
+			this.label4.Size = new System.Drawing.Size(29, 17);
+			this.label4.TabIndex = 6;
+			this.label4.Text = "传真";
+			// 
+			// label5
+			// 
+			this.label5.Font = new System.Drawing.Font("宋体", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(134)));
+			this.label5.Location = new System.Drawing.Point(8, 88);
+			this.label5.Name = "label5";
+			this.label5.Size = new System.Drawing.Size(432, 27);
+			this.label5.TabIndex = 7;
+			this.label5.Text = "新余钢铁有限责任公司产销及MES系统V1.0";
+			this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+			// 
+			// button1
+			// 
+			this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+			this.button1.Location = new System.Drawing.Point(272, 192);
+			this.button1.Name = "button1";
+			this.button1.Size = new System.Drawing.Size(75, 32);
+			this.button1.TabIndex = 8;
+			this.button1.Text = "确定";
+			this.button1.Click += new System.EventHandler(this.button1_Click);
+			// 
+			// label6
+			// 
+			this.label6.AutoSize = true;
+			this.label6.Location = new System.Drawing.Point(64, 184);
+			this.label6.Name = "label6";
+			this.label6.Size = new System.Drawing.Size(134, 17);
+			this.label6.TabIndex = 9;
+			this.label6.Text = "servicet@hnshituo.com";
+			// 
+			// label7
+			// 
+			this.label7.AutoSize = true;
+			this.label7.Location = new System.Drawing.Point(64, 208);
+			this.label7.Name = "label7";
+			this.label7.Size = new System.Drawing.Size(128, 17);
+			this.label7.TabIndex = 10;
+			this.label7.Text = "0731-5532871 5382837";
+			// 
+			// label8
+			// 
+			this.label8.AutoSize = true;
+			this.label8.Location = new System.Drawing.Point(64, 232);
+			this.label8.Name = "label8";
+			this.label8.Size = new System.Drawing.Size(79, 17);
+			this.label8.TabIndex = 11;
+			this.label8.Text = "0731-5536491";
+			// 
+			// label9
+			// 
+			this.label9.AutoSize = true;
+			this.label9.Location = new System.Drawing.Point(192, 232);
+			this.label9.Name = "label9";
+			this.label9.Size = new System.Drawing.Size(42, 17);
+			this.label9.TabIndex = 13;
+			this.label9.Text = "410007";
+			// 
+			// label10
+			// 
+			this.label10.AutoSize = true;
+			this.label10.BackColor = System.Drawing.Color.Transparent;
+			this.label10.Location = new System.Drawing.Point(160, 232);
+			this.label10.Name = "label10";
+			this.label10.Size = new System.Drawing.Size(29, 17);
+			this.label10.TabIndex = 12;
+			this.label10.Text = "邮编";
+			// 
+			// label11
+			// 
+			this.label11.AutoSize = true;
+			this.label11.Font = new System.Drawing.Font("宋体", 7.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(134)));
+			this.label11.Location = new System.Drawing.Point(78, 128);
+			this.label11.Name = "label11";
+			this.label11.Size = new System.Drawing.Size(205, 15);
+			this.label11.TabIndex = 14;
+			this.label11.Text = "Copyright◎2003-2004 All Right Reserved";
+			// 
+			// FrmAbout
+			// 
+			this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
+			this.BackColor = System.Drawing.Color.Gainsboro;
+			this.ClientSize = new System.Drawing.Size(440, 256);
+			this.Controls.Add(this.label11);
+			this.Controls.Add(this.label9);
+			this.Controls.Add(this.label10);
+			this.Controls.Add(this.label8);
+			this.Controls.Add(this.label7);
+			this.Controls.Add(this.label6);
+			this.Controls.Add(this.label4);
+			this.Controls.Add(this.label3);
+			this.Controls.Add(this.label2);
+			this.Controls.Add(this.label1);
+			this.Controls.Add(this.linkLabel1);
+			this.Controls.Add(this.button1);
+			this.Controls.Add(this.label5);
+			this.Controls.Add(this.pictureBox1);
+			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+			this.MaximizeBox = false;
+			this.MinimizeBox = false;
+			this.Name = "FrmAbout";
+			this.ShowInTaskbar = false;
+			this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+			this.Text = "FrmAbout";
+			this.ResumeLayout(false);
+
+		}
+		#endregion
+
+		private void button1_Click(object sender, System.EventArgs e)
+		{
+			this.Close();
+		}
+
+		private void linkLabel1_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e)
+		{
+			System.Diagnostics.Process.Start("Http://www.hnshituo.com");
+
+		}
+		public void InitPic(string strTitle)
+		{
+			this.label5.Text = strTitle;
+		}
+	}
+}

+ 128 - 0
.svn/pristine/39/39f127d1a1b33435652a2849767d46ba7df28289.svn-base

@@ -0,0 +1,128 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <ProjectType>Local</ProjectType>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{860513AD-2743-4EB8-9406-01FEEA175348}</ProjectGuid>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ApplicationIcon>
+    </ApplicationIcon>
+    <AssemblyKeyContainerName>
+    </AssemblyKeyContainerName>
+    <AssemblyName>DBManager</AssemblyName>
+    <AssemblyOriginatorKeyFile>
+    </AssemblyOriginatorKeyFile>
+    <DefaultClientScript>JScript</DefaultClientScript>
+    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
+    <DefaultTargetSchema>IE50</DefaultTargetSchema>
+    <DelaySign>false</DelaySign>
+    <OutputType>Library</OutputType>
+    <RootNamespace>DBManager</RootNamespace>
+    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
+    <StartupObject>
+    </StartupObject>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <OutputPath>..\..\..\Server\</OutputPath>
+    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+    <BaseAddress>285212672</BaseAddress>
+    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
+    <ConfigurationOverrideFile>
+    </ConfigurationOverrideFile>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <DebugSymbols>true</DebugSymbols>
+    <FileAlignment>4096</FileAlignment>
+    <NoStdLib>false</NoStdLib>
+    <NoWarn>
+    </NoWarn>
+    <Optimize>false</Optimize>
+    <RegisterForComInterop>false</RegisterForComInterop>
+    <RemoveIntegerChecks>false</RemoveIntegerChecks>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+    <WarningLevel>4</WarningLevel>
+    <DebugType>full</DebugType>
+    <ErrorReport>prompt</ErrorReport>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <OutputPath>bin\Release\</OutputPath>
+    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+    <BaseAddress>285212672</BaseAddress>
+    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
+    <ConfigurationOverrideFile>
+    </ConfigurationOverrideFile>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+    <DebugSymbols>false</DebugSymbols>
+    <FileAlignment>4096</FileAlignment>
+    <NoStdLib>false</NoStdLib>
+    <NoWarn>
+    </NoWarn>
+    <Optimize>true</Optimize>
+    <RegisterForComInterop>false</RegisterForComInterop>
+    <RemoveIntegerChecks>false</RemoveIntegerChecks>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+    <WarningLevel>4</WarningLevel>
+    <DebugType>none</DebugType>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Core.Mes.IBaseInterface, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>D:\Code\Core.Mes.IBaseInterface.dll</HintPath>
+    </Reference>
+    <Reference Include="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\Output2005\System.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\Output2005\System.Data.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\Output2005\System.Data.OracleClient.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\Output2005\System.Runtime.Remoting.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\Output2005\System.Xml.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AssemblyInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="DataPage.cs" />
+    <Compile Include="DBManager.cs">
+      <SubType>Code</SubType>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\DBProxy\DBProxy.csproj">
+      <Project>{F6CD9B3C-806A-4009-ACAB-935FF453A13C}</Project>
+      <Name>DBProxy</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>
+    </PreBuildEvent>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+</Project>

+ 1722 - 0
.svn/pristine/3a/3a18b21c56a27eecd0a9590a199f17347bb1e42c.svn-base

@@ -0,0 +1,1722 @@
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using Core.Mes.ClientFrameWork;
+using Core.Mes.IBaseInterface;
+using Infragistics.Win.UltraWinGrid;
+using Infragistics.Win.UltraWinEditors ;
+using System.Data;
+using System.Diagnostics;
+using System.IO;
+
+namespace Core.Mes.ClientPurviewManager
+{
+
+  /// <summary>
+  /// FrmUserManager 的摘要说明。
+  /// </summary>
+  public class FrmUserManager : Core.Mes.ClientFrameWork.FrmBase
+  {
+    #region "Varible"
+    private System.Windows.Forms.Panel panel1;
+    private Infragistics.Win.UltraWinToolbars.UltraToolbarsManager ultraToolbarsManager1;
+    private System.Windows.Forms.Panel FrmUserManager_Fill_Panel;
+    private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Left;
+    private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Right;
+    private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Top;
+    private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Bottom;
+    private System.Windows.Forms.Panel panel2;
+    private Infragistics.Win.UltraWinGrid.UltraGrid ultraGrid1;
+    private Infragistics.Win.Misc.UltraExpandableGroupBox ultraExpandableGroupBox1;
+    private Infragistics.Win.Misc.UltraExpandableGroupBoxPanel ultraExpandableGroupBoxPanel1;
+    private System.Windows.Forms.Panel panel3;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel2;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel3;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel4;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel5;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel6;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel7;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel8;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel9;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel10;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel11;
+    private Infragistics.Win.UltraWinEditors.UltraComboEditor ulcmeSex;
+    private Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit ulmskedtIP;
+    private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtUserNo;
+    private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtUserName;
+    private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtAge;
+    private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtGW;
+    private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtZW;
+    private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtPhono;
+    private Infragistics.Win.UltraWinEditors.UltraTextEditor ultxtMemo;
+    private Infragistics.Win.Misc.UltraButton ultraButton1;
+    private System.ComponentModel.IContainer components;
+    private DataSet _departmentData;
+    public TreeView _departmentTree;
+    private string _selectPartSQL;
+    public string StrUser = "";
+    public string operDepart = "";
+    public string operDepartname = "";
+    public string allDept = "";
+    public string selDept = "";
+
+    private DataSet _userData;
+    private Infragistics.Win.UltraWinEditors.UltraComboEditor ulcmeDepartment;
+    private System.Windows.Forms.ToolTip toolTip1;
+    private Infragistics.Win.UltraWinEditors.UltraCheckEditor ultraCheckEditor1;
+    private Infragistics.Win.UltraWinEditors.UltraTextEditor ultraTextEditor8;
+    private Infragistics.Win.UltraWinGrid.ExcelExport.UltraGridExcelExporter ultraGridExcelExporter1;
+    private UltraTextEditor ultxtEmail;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel1;
+    private UltraTextEditor ultLoginID;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel12;
+    private string _selectUserSQL;
+    #endregion
+
+    #region "头部"
+    public FrmUserManager()
+    {
+      //
+      // Windows 窗体设计器支持所必需的
+      //
+      InitializeComponent();
+
+      //
+      // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
+      //
+    }
+
+    /// <summary>
+    /// 清理所有正在使用的资源。
+    /// </summary>
+    protected override void Dispose(bool disposing)
+    {
+      if (disposing)
+      {
+        if (components != null)
+        {
+          components.Dispose();
+        }
+      }
+      base.Dispose(disposing);
+    }
+    #endregion
+
+    #region Windows 窗体设计器生成的代码
+    /// <summary>
+    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
+    /// 此方法的内容。
+    /// </summary>
+    private void InitializeComponent()
+    {
+      this.components = new System.ComponentModel.Container();
+      Infragistics.Win.UltraWinToolbars.UltraToolbar ultraToolbar1 = new Infragistics.Win.UltraWinToolbars.UltraToolbar("Toolbar1");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool1 = new Infragistics.Win.UltraWinToolbars.ButtonTool("query");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool2 = new Infragistics.Win.UltraWinToolbars.ButtonTool("add");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool3 = new Infragistics.Win.UltraWinToolbars.ButtonTool("edit");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool4 = new Infragistics.Win.UltraWinToolbars.ButtonTool("del");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool5 = new Infragistics.Win.UltraWinToolbars.ButtonTool("exit");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool6 = new Infragistics.Win.UltraWinToolbars.ButtonTool("back");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool7 = new Infragistics.Win.UltraWinToolbars.ButtonTool("leadin");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool8 = new Infragistics.Win.UltraWinToolbars.ButtonTool("add");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool9 = new Infragistics.Win.UltraWinToolbars.ButtonTool("edit");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool10 = new Infragistics.Win.UltraWinToolbars.ButtonTool("del");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool11 = new Infragistics.Win.UltraWinToolbars.ButtonTool("query");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool12 = new Infragistics.Win.UltraWinToolbars.ButtonTool("exit");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool13 = new Infragistics.Win.UltraWinToolbars.ButtonTool("back");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool14 = new Infragistics.Win.UltraWinToolbars.ButtonTool("leadin");
+      Infragistics.Win.Appearance appearance1 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance2 = new Infragistics.Win.Appearance();
+      Infragistics.Win.UltraWinGrid.UltraGridBand ultraGridBand1 = new Infragistics.Win.UltraWinGrid.UltraGridBand("Band 0", -1);
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn1 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("USERID");
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn2 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("DEPARTMENTID", -1, null, 1, Infragistics.Win.UltraWinGrid.SortIndicator.Ascending, false);
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn3 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("NAME");
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn4 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("SEX");
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn5 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("AGE");
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn6 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("COMPUTERIP");
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn7 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("HOMEPHONE");
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn8 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("WORKPOS");
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn9 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("WORKJOB");
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn10 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("MEMO");
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn11 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("EMAIL");
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn12 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("PD", -1, null, 0, Infragistics.Win.UltraWinGrid.SortIndicator.Ascending, false);
+      Infragistics.Win.Appearance appearance3 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance4 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance5 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance6 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance7 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance8 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance9 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance10 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance11 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance12 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance13 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance14 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance15 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance16 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance17 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance18 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance19 = new Infragistics.Win.Appearance();
+      Infragistics.Win.UltraWinEditors.EditorButton editorButton1 = new Infragistics.Win.UltraWinEditors.EditorButton();
+      Infragistics.Win.Appearance appearance20 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance21 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance22 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance23 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance24 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance25 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance26 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance27 = new Infragistics.Win.Appearance();
+      Infragistics.Win.ValueListItem valueListItem1 = new Infragistics.Win.ValueListItem();
+      Infragistics.Win.ValueListItem valueListItem2 = new Infragistics.Win.ValueListItem();
+      Infragistics.Win.Appearance appearance28 = new Infragistics.Win.Appearance();
+      Infragistics.Win.UltraWinEditors.EditorButton editorButton2 = new Infragistics.Win.UltraWinEditors.EditorButton("SET");
+      Infragistics.Win.Appearance appearance29 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance30 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance31 = new Infragistics.Win.Appearance();
+      Infragistics.Win.UltraWinEditors.EditorButton editorButton3 = new Infragistics.Win.UltraWinEditors.EditorButton("part");
+      this.panel1 = new System.Windows.Forms.Panel();
+      this._panel1_Toolbars_Dock_Area_Left = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+      this.ultraToolbarsManager1 = new Infragistics.Win.UltraWinToolbars.UltraToolbarsManager(this.components);
+      this._panel1_Toolbars_Dock_Area_Right = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+      this._panel1_Toolbars_Dock_Area_Top = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+      this._panel1_Toolbars_Dock_Area_Bottom = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+      this.FrmUserManager_Fill_Panel = new System.Windows.Forms.Panel();
+      this.ultraGrid1 = new Infragistics.Win.UltraWinGrid.UltraGrid();
+      this.ultraExpandableGroupBox1 = new Infragistics.Win.Misc.UltraExpandableGroupBox();
+      this.ultraExpandableGroupBoxPanel1 = new Infragistics.Win.Misc.UltraExpandableGroupBoxPanel();
+      this.panel3 = new System.Windows.Forms.Panel();
+      this.ultxtEmail = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+      this.ultraLabel1 = new Infragistics.Win.Misc.UltraLabel();
+      this.ulmskedtIP = new Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit();
+      this.ulcmeDepartment = new Infragistics.Win.UltraWinEditors.UltraComboEditor();
+      this.ultxtMemo = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+      this.ultxtPhono = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+      this.ultxtZW = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+      this.ultxtGW = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+      this.ultxtAge = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+      this.ultxtUserName = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+      this.ultxtUserNo = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+      this.ulcmeSex = new Infragistics.Win.UltraWinEditors.UltraComboEditor();
+      this.ultraLabel11 = new Infragistics.Win.Misc.UltraLabel();
+      this.ultraLabel10 = new Infragistics.Win.Misc.UltraLabel();
+      this.ultraLabel9 = new Infragistics.Win.Misc.UltraLabel();
+      this.ultraLabel8 = new Infragistics.Win.Misc.UltraLabel();
+      this.ultraLabel7 = new Infragistics.Win.Misc.UltraLabel();
+      this.ultraLabel6 = new Infragistics.Win.Misc.UltraLabel();
+      this.ultraLabel5 = new Infragistics.Win.Misc.UltraLabel();
+      this.ultraLabel4 = new Infragistics.Win.Misc.UltraLabel();
+      this.ultraLabel3 = new Infragistics.Win.Misc.UltraLabel();
+      this.ultraLabel2 = new Infragistics.Win.Misc.UltraLabel();
+      this.panel2 = new System.Windows.Forms.Panel();
+      this.ultLoginID = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+      this.ultraLabel12 = new Infragistics.Win.Misc.UltraLabel();
+      this.ultraTextEditor8 = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+      this.ultraCheckEditor1 = new Infragistics.Win.UltraWinEditors.UltraCheckEditor();
+      this.ultraButton1 = new Infragistics.Win.Misc.UltraButton();
+      this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+      this.ultraGridExcelExporter1 = new Infragistics.Win.UltraWinGrid.ExcelExport.UltraGridExcelExporter();
+      this.panel1.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraToolbarsManager1)).BeginInit();
+      this.FrmUserManager_Fill_Panel.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraGrid1)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraExpandableGroupBox1)).BeginInit();
+      this.ultraExpandableGroupBox1.SuspendLayout();
+      this.ultraExpandableGroupBoxPanel1.SuspendLayout();
+      this.panel3.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.ultxtEmail)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ulcmeDepartment)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultxtMemo)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultxtPhono)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultxtZW)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultxtGW)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultxtAge)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultxtUserName)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultxtUserNo)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ulcmeSex)).BeginInit();
+      this.panel2.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.ultLoginID)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor8)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // panel1
+      // 
+      this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Left);
+      this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Right);
+      this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Top);
+      this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Bottom);
+      this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
+      this.panel1.Location = new System.Drawing.Point(0, 0);
+      this.panel1.Name = "panel1";
+      this.panel1.Size = new System.Drawing.Size(1012, 32);
+      this.panel1.TabIndex = 0;
+      // 
+      // _panel1_Toolbars_Dock_Area_Left
+      // 
+      this._panel1_Toolbars_Dock_Area_Left.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+      this._panel1_Toolbars_Dock_Area_Left.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(229)))), ((int)(((byte)(229)))), ((int)(((byte)(215)))));
+      this._panel1_Toolbars_Dock_Area_Left.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Left;
+      this._panel1_Toolbars_Dock_Area_Left.ForeColor = System.Drawing.SystemColors.ControlText;
+      this._panel1_Toolbars_Dock_Area_Left.Location = new System.Drawing.Point(0, 26);
+      this._panel1_Toolbars_Dock_Area_Left.Name = "_panel1_Toolbars_Dock_Area_Left";
+      this._panel1_Toolbars_Dock_Area_Left.Size = new System.Drawing.Size(0, 6);
+      this._panel1_Toolbars_Dock_Area_Left.ToolbarsManager = this.ultraToolbarsManager1;
+      // 
+      // ultraToolbarsManager1
+      // 
+      this.ultraToolbarsManager1.DesignerFlags = 1;
+      this.ultraToolbarsManager1.DockWithinContainer = this.panel1;
+      this.ultraToolbarsManager1.ShowQuickCustomizeButton = false;
+      this.ultraToolbarsManager1.Style = Infragistics.Win.UltraWinToolbars.ToolbarStyle.VisualStudio2005;
+      ultraToolbar1.DockedColumn = 0;
+      ultraToolbar1.DockedRow = 0;
+      ultraToolbar1.Text = "Toolbar1";
+      buttonTool1.InstanceProps.IsFirstInGroup = true;
+      buttonTool2.InstanceProps.IsFirstInGroup = true;
+      buttonTool3.InstanceProps.IsFirstInGroup = true;
+      buttonTool4.InstanceProps.IsFirstInGroup = true;
+      buttonTool5.InstanceProps.IsFirstInGroup = true;
+      buttonTool6.InstanceProps.IsFirstInGroup = true;
+      buttonTool7.InstanceProps.IsFirstInGroup = true;
+      ultraToolbar1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] {
+            buttonTool1,
+            buttonTool2,
+            buttonTool3,
+            buttonTool4,
+            buttonTool5,
+            buttonTool6,
+            buttonTool7});
+      this.ultraToolbarsManager1.Toolbars.AddRange(new Infragistics.Win.UltraWinToolbars.UltraToolbar[] {
+            ultraToolbar1});
+      buttonTool8.SharedProps.Caption = "新增(&A)";
+      buttonTool8.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      buttonTool8.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlA;
+      buttonTool9.SharedProps.Caption = "修改(&U)";
+      buttonTool9.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      buttonTool9.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlU;
+      buttonTool10.SharedProps.Caption = "删除(&D)";
+      buttonTool10.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      buttonTool10.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlD;
+      buttonTool11.SharedProps.Caption = "查询(&Q)";
+      buttonTool11.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      buttonTool11.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlQ;
+      buttonTool12.SharedProps.Caption = "关闭(&E)";
+      buttonTool12.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      buttonTool12.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlE;
+      buttonTool13.SharedProps.Caption = "返回(&B)";
+      buttonTool13.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      buttonTool13.SharedProps.Visible = false;
+      buttonTool14.SharedProps.Caption = "导入EXCEL";
+      buttonTool14.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      this.ultraToolbarsManager1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] {
+            buttonTool8,
+            buttonTool9,
+            buttonTool10,
+            buttonTool11,
+            buttonTool12,
+            buttonTool13,
+            buttonTool14});
+      this.ultraToolbarsManager1.ToolClick += new Infragistics.Win.UltraWinToolbars.ToolClickEventHandler(this.ultraToolbarsManager1_ToolClick);
+      // 
+      // _panel1_Toolbars_Dock_Area_Right
+      // 
+      this._panel1_Toolbars_Dock_Area_Right.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+      this._panel1_Toolbars_Dock_Area_Right.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(229)))), ((int)(((byte)(229)))), ((int)(((byte)(215)))));
+      this._panel1_Toolbars_Dock_Area_Right.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Right;
+      this._panel1_Toolbars_Dock_Area_Right.ForeColor = System.Drawing.SystemColors.ControlText;
+      this._panel1_Toolbars_Dock_Area_Right.Location = new System.Drawing.Point(1012, 26);
+      this._panel1_Toolbars_Dock_Area_Right.Name = "_panel1_Toolbars_Dock_Area_Right";
+      this._panel1_Toolbars_Dock_Area_Right.Size = new System.Drawing.Size(0, 6);
+      this._panel1_Toolbars_Dock_Area_Right.ToolbarsManager = this.ultraToolbarsManager1;
+      // 
+      // _panel1_Toolbars_Dock_Area_Top
+      // 
+      this._panel1_Toolbars_Dock_Area_Top.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+      this._panel1_Toolbars_Dock_Area_Top.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(229)))), ((int)(((byte)(229)))), ((int)(((byte)(215)))));
+      this._panel1_Toolbars_Dock_Area_Top.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Top;
+      this._panel1_Toolbars_Dock_Area_Top.ForeColor = System.Drawing.SystemColors.ControlText;
+      this._panel1_Toolbars_Dock_Area_Top.Location = new System.Drawing.Point(0, 0);
+      this._panel1_Toolbars_Dock_Area_Top.Name = "_panel1_Toolbars_Dock_Area_Top";
+      this._panel1_Toolbars_Dock_Area_Top.Size = new System.Drawing.Size(1012, 26);
+      this._panel1_Toolbars_Dock_Area_Top.ToolbarsManager = this.ultraToolbarsManager1;
+      // 
+      // _panel1_Toolbars_Dock_Area_Bottom
+      // 
+      this._panel1_Toolbars_Dock_Area_Bottom.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+      this._panel1_Toolbars_Dock_Area_Bottom.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(229)))), ((int)(((byte)(229)))), ((int)(((byte)(215)))));
+      this._panel1_Toolbars_Dock_Area_Bottom.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Bottom;
+      this._panel1_Toolbars_Dock_Area_Bottom.ForeColor = System.Drawing.SystemColors.ControlText;
+      this._panel1_Toolbars_Dock_Area_Bottom.Location = new System.Drawing.Point(0, 32);
+      this._panel1_Toolbars_Dock_Area_Bottom.Name = "_panel1_Toolbars_Dock_Area_Bottom";
+      this._panel1_Toolbars_Dock_Area_Bottom.Size = new System.Drawing.Size(1012, 0);
+      this._panel1_Toolbars_Dock_Area_Bottom.ToolbarsManager = this.ultraToolbarsManager1;
+      // 
+      // FrmUserManager_Fill_Panel
+      // 
+      this.FrmUserManager_Fill_Panel.Controls.Add(this.ultraGrid1);
+      this.FrmUserManager_Fill_Panel.Controls.Add(this.ultraExpandableGroupBox1);
+      this.FrmUserManager_Fill_Panel.Controls.Add(this.panel2);
+      this.FrmUserManager_Fill_Panel.Controls.Add(this.panel1);
+      this.FrmUserManager_Fill_Panel.Cursor = System.Windows.Forms.Cursors.Default;
+      this.FrmUserManager_Fill_Panel.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.FrmUserManager_Fill_Panel.Location = new System.Drawing.Point(0, 0);
+      this.FrmUserManager_Fill_Panel.Name = "FrmUserManager_Fill_Panel";
+      this.FrmUserManager_Fill_Panel.Size = new System.Drawing.Size(1012, 733);
+      this.FrmUserManager_Fill_Panel.TabIndex = 0;
+      // 
+      // ultraGrid1
+      // 
+      this.ultraGrid1.Cursor = System.Windows.Forms.Cursors.Hand;
+      appearance1.BackColor = System.Drawing.Color.LightSteelBlue;
+      this.ultraGrid1.DisplayLayout.AddNewBox.ButtonAppearance = appearance1;
+      appearance2.BackColor = System.Drawing.SystemColors.Window;
+      appearance2.BorderColor = System.Drawing.SystemColors.InactiveCaption;
+      this.ultraGrid1.DisplayLayout.Appearance = appearance2;
+      ultraGridColumn1.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+      ultraGridColumn1.Header.Caption = "员工编号";
+      ultraGridColumn1.Header.VisiblePosition = 0;
+      ultraGridColumn1.Width = 80;
+      ultraGridColumn2.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+      ultraGridColumn2.Header.Caption = "部门";
+      ultraGridColumn2.Header.VisiblePosition = 2;
+      ultraGridColumn2.Width = 100;
+      ultraGridColumn3.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+      ultraGridColumn3.Header.Caption = "姓名";
+      ultraGridColumn3.Header.VisiblePosition = 5;
+      ultraGridColumn3.Width = 80;
+      ultraGridColumn4.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+      ultraGridColumn4.Header.Caption = "性别";
+      ultraGridColumn4.Header.VisiblePosition = 6;
+      ultraGridColumn4.Width = 60;
+      ultraGridColumn5.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+      ultraGridColumn5.Header.Caption = "年龄";
+      ultraGridColumn5.Header.VisiblePosition = 7;
+      ultraGridColumn5.Hidden = true;
+      ultraGridColumn6.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+      ultraGridColumn6.Header.Caption = "机器地址";
+      ultraGridColumn6.Header.VisiblePosition = 8;
+      ultraGridColumn6.Width = 80;
+      ultraGridColumn7.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+      ultraGridColumn7.Header.Caption = "联系电话";
+      ultraGridColumn7.Header.VisiblePosition = 9;
+      ultraGridColumn7.Width = 100;
+      ultraGridColumn8.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+      ultraGridColumn8.Header.Caption = "岗位";
+      ultraGridColumn8.Header.VisiblePosition = 3;
+      ultraGridColumn8.Width = 100;
+      ultraGridColumn9.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+      ultraGridColumn9.Header.Caption = "职务";
+      ultraGridColumn9.Header.VisiblePosition = 4;
+      ultraGridColumn9.Width = 100;
+      ultraGridColumn10.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+      ultraGridColumn10.Header.Caption = "备注";
+      ultraGridColumn10.Header.VisiblePosition = 11;
+      ultraGridColumn10.Width = 100;
+      ultraGridColumn11.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+      ultraGridColumn11.Header.Caption = "邮件地址";
+      ultraGridColumn11.Header.VisiblePosition = 10;
+      ultraGridColumn11.Width = 100;
+      ultraGridColumn12.CellActivation = Infragistics.Win.UltraWinGrid.Activation.NoEdit;
+      ultraGridColumn12.Header.Caption = "上级部门";
+      ultraGridColumn12.Header.VisiblePosition = 1;
+      ultraGridColumn12.Width = 100;
+      ultraGridBand1.Columns.AddRange(new object[] {
+            ultraGridColumn1,
+            ultraGridColumn2,
+            ultraGridColumn3,
+            ultraGridColumn4,
+            ultraGridColumn5,
+            ultraGridColumn6,
+            ultraGridColumn7,
+            ultraGridColumn8,
+            ultraGridColumn9,
+            ultraGridColumn10,
+            ultraGridColumn11,
+            ultraGridColumn12});
+      appearance3.BackColor = System.Drawing.Color.LightSteelBlue;
+      ultraGridBand1.Override.RowSelectorAppearance = appearance3;
+      appearance4.BackColor = System.Drawing.Color.White;
+      ultraGridBand1.Override.RowSelectorHeaderAppearance = appearance4;
+      ultraGridBand1.Override.RowSelectorHeaderStyle = Infragistics.Win.UltraWinGrid.RowSelectorHeaderStyle.SeparateElement;
+      ultraGridBand1.Override.RowSelectorNumberStyle = Infragistics.Win.UltraWinGrid.RowSelectorNumberStyle.RowIndex;
+      ultraGridBand1.Override.RowSelectors = Infragistics.Win.DefaultableBoolean.True;
+      this.ultraGrid1.DisplayLayout.BandsSerializer.Add(ultraGridBand1);
+      this.ultraGrid1.DisplayLayout.BorderStyle = Infragistics.Win.UIElementBorderStyle.RaisedSoft;
+      this.ultraGrid1.DisplayLayout.CaptionVisible = Infragistics.Win.DefaultableBoolean.False;
+      appearance5.BackColor = System.Drawing.SystemColors.ActiveBorder;
+      appearance5.BackColor2 = System.Drawing.SystemColors.ControlDark;
+      appearance5.BackGradientStyle = Infragistics.Win.GradientStyle.Vertical;
+      appearance5.BorderColor = System.Drawing.SystemColors.Window;
+      this.ultraGrid1.DisplayLayout.GroupByBox.Appearance = appearance5;
+      appearance6.ForeColor = System.Drawing.SystemColors.GrayText;
+      this.ultraGrid1.DisplayLayout.GroupByBox.BandLabelAppearance = appearance6;
+      this.ultraGrid1.DisplayLayout.GroupByBox.BorderStyle = Infragistics.Win.UIElementBorderStyle.Solid;
+      this.ultraGrid1.DisplayLayout.GroupByBox.Hidden = true;
+      appearance7.BackColor = System.Drawing.SystemColors.ControlLightLight;
+      appearance7.BackColor2 = System.Drawing.SystemColors.Control;
+      appearance7.BackGradientStyle = Infragistics.Win.GradientStyle.Horizontal;
+      appearance7.ForeColor = System.Drawing.SystemColors.GrayText;
+      this.ultraGrid1.DisplayLayout.GroupByBox.PromptAppearance = appearance7;
+      this.ultraGrid1.DisplayLayout.MaxColScrollRegions = 1;
+      this.ultraGrid1.DisplayLayout.MaxRowScrollRegions = 1;
+      appearance8.BackColor = System.Drawing.SystemColors.Window;
+      appearance8.ForeColor = System.Drawing.SystemColors.ControlText;
+      this.ultraGrid1.DisplayLayout.Override.ActiveCellAppearance = appearance8;
+      appearance9.BackColor = System.Drawing.SystemColors.Highlight;
+      appearance9.ForeColor = System.Drawing.SystemColors.HighlightText;
+      this.ultraGrid1.DisplayLayout.Override.ActiveRowAppearance = appearance9;
+      this.ultraGrid1.DisplayLayout.Override.BorderStyleCell = Infragistics.Win.UIElementBorderStyle.RaisedSoft;
+      this.ultraGrid1.DisplayLayout.Override.BorderStyleRow = Infragistics.Win.UIElementBorderStyle.Dotted;
+      appearance10.BackColor = System.Drawing.SystemColors.Window;
+      this.ultraGrid1.DisplayLayout.Override.CardAreaAppearance = appearance10;
+      appearance11.BorderColor = System.Drawing.Color.Silver;
+      appearance11.TextTrimming = Infragistics.Win.TextTrimming.EllipsisCharacter;
+      this.ultraGrid1.DisplayLayout.Override.CellAppearance = appearance11;
+      this.ultraGrid1.DisplayLayout.Override.CellClickAction = Infragistics.Win.UltraWinGrid.CellClickAction.EditAndSelectText;
+      this.ultraGrid1.DisplayLayout.Override.CellPadding = 0;
+      appearance12.BackColor = System.Drawing.SystemColors.Control;
+      appearance12.BackColor2 = System.Drawing.SystemColors.ControlDark;
+      appearance12.BackGradientAlignment = Infragistics.Win.GradientAlignment.Element;
+      appearance12.BackGradientStyle = Infragistics.Win.GradientStyle.Horizontal;
+      appearance12.BorderColor = System.Drawing.SystemColors.Window;
+      this.ultraGrid1.DisplayLayout.Override.GroupByRowAppearance = appearance12;
+      appearance13.BackColor = System.Drawing.Color.LightSteelBlue;
+      appearance13.ImageHAlign = Infragistics.Win.HAlign.Center;
+      appearance13.TextHAlign = Infragistics.Win.HAlign.Center;
+      this.ultraGrid1.DisplayLayout.Override.HeaderAppearance = appearance13;
+      this.ultraGrid1.DisplayLayout.Override.HeaderClickAction = Infragistics.Win.UltraWinGrid.HeaderClickAction.SortMulti;
+      this.ultraGrid1.DisplayLayout.Override.HeaderStyle = Infragistics.Win.HeaderStyle.Standard;
+      this.ultraGrid1.DisplayLayout.Override.MinRowHeight = 21;
+      appearance14.BackColor = System.Drawing.SystemColors.Window;
+      appearance14.BorderColor = System.Drawing.Color.Silver;
+      this.ultraGrid1.DisplayLayout.Override.RowAppearance = appearance14;
+      appearance15.BackColor = System.Drawing.Color.LightSteelBlue;
+      this.ultraGrid1.DisplayLayout.Override.RowSelectorAppearance = appearance15;
+      this.ultraGrid1.DisplayLayout.Override.RowSelectorHeaderStyle = Infragistics.Win.UltraWinGrid.RowSelectorHeaderStyle.SeparateElement;
+      this.ultraGrid1.DisplayLayout.Override.RowSelectorNumberStyle = Infragistics.Win.UltraWinGrid.RowSelectorNumberStyle.RowIndex;
+      this.ultraGrid1.DisplayLayout.Override.RowSelectors = Infragistics.Win.DefaultableBoolean.True;
+      appearance16.BackColor = System.Drawing.SystemColors.ControlLight;
+      this.ultraGrid1.DisplayLayout.Override.TemplateAddRowAppearance = appearance16;
+      this.ultraGrid1.DisplayLayout.ScrollBounds = Infragistics.Win.UltraWinGrid.ScrollBounds.ScrollToFill;
+      this.ultraGrid1.DisplayLayout.ScrollStyle = Infragistics.Win.UltraWinGrid.ScrollStyle.Immediate;
+      this.ultraGrid1.DisplayLayout.ViewStyleBand = Infragistics.Win.UltraWinGrid.ViewStyleBand.OutlookGroupBy;
+      this.ultraGrid1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.ultraGrid1.Location = new System.Drawing.Point(0, 88);
+      this.ultraGrid1.Name = "ultraGrid1";
+      this.ultraGrid1.Size = new System.Drawing.Size(1012, 477);
+      this.ultraGrid1.TabIndex = 2;
+      this.ultraGrid1.Text = "ultraGrid1";
+      // 
+      // ultraExpandableGroupBox1
+      // 
+      this.ultraExpandableGroupBox1.Controls.Add(this.ultraExpandableGroupBoxPanel1);
+      this.ultraExpandableGroupBox1.Dock = System.Windows.Forms.DockStyle.Bottom;
+      this.ultraExpandableGroupBox1.ExpandedSize = new System.Drawing.Size(1012, 168);
+      this.ultraExpandableGroupBox1.Location = new System.Drawing.Point(0, 565);
+      this.ultraExpandableGroupBox1.Name = "ultraExpandableGroupBox1";
+      this.ultraExpandableGroupBox1.Size = new System.Drawing.Size(1012, 168);
+      this.ultraExpandableGroupBox1.SupportThemes = false;
+      this.ultraExpandableGroupBox1.TabIndex = 3;
+      this.ultraExpandableGroupBox1.Text = "编辑区域";
+      this.ultraExpandableGroupBox1.ViewStyle = Infragistics.Win.Misc.GroupBoxViewStyle.Office2003;
+      // 
+      // ultraExpandableGroupBoxPanel1
+      // 
+      this.ultraExpandableGroupBoxPanel1.Controls.Add(this.panel3);
+      this.ultraExpandableGroupBoxPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.ultraExpandableGroupBoxPanel1.Location = new System.Drawing.Point(2, 22);
+      this.ultraExpandableGroupBoxPanel1.Name = "ultraExpandableGroupBoxPanel1";
+      this.ultraExpandableGroupBoxPanel1.Size = new System.Drawing.Size(1008, 144);
+      this.ultraExpandableGroupBoxPanel1.TabIndex = 0;
+      // 
+      // panel3
+      // 
+      this.panel3.BackColor = System.Drawing.Color.Gainsboro;
+      this.panel3.Controls.Add(this.ultxtEmail);
+      this.panel3.Controls.Add(this.ultraLabel1);
+      this.panel3.Controls.Add(this.ulmskedtIP);
+      this.panel3.Controls.Add(this.ulcmeDepartment);
+      this.panel3.Controls.Add(this.ultxtMemo);
+      this.panel3.Controls.Add(this.ultxtPhono);
+      this.panel3.Controls.Add(this.ultxtZW);
+      this.panel3.Controls.Add(this.ultxtGW);
+      this.panel3.Controls.Add(this.ultxtAge);
+      this.panel3.Controls.Add(this.ultxtUserName);
+      this.panel3.Controls.Add(this.ultxtUserNo);
+      this.panel3.Controls.Add(this.ulcmeSex);
+      this.panel3.Controls.Add(this.ultraLabel11);
+      this.panel3.Controls.Add(this.ultraLabel10);
+      this.panel3.Controls.Add(this.ultraLabel9);
+      this.panel3.Controls.Add(this.ultraLabel8);
+      this.panel3.Controls.Add(this.ultraLabel7);
+      this.panel3.Controls.Add(this.ultraLabel6);
+      this.panel3.Controls.Add(this.ultraLabel5);
+      this.panel3.Controls.Add(this.ultraLabel4);
+      this.panel3.Controls.Add(this.ultraLabel3);
+      this.panel3.Controls.Add(this.ultraLabel2);
+      this.panel3.Dock = System.Windows.Forms.DockStyle.Bottom;
+      this.panel3.Location = new System.Drawing.Point(0, -8);
+      this.panel3.Name = "panel3";
+      this.panel3.Size = new System.Drawing.Size(1008, 152);
+      this.panel3.TabIndex = 0;
+      // 
+      // ultxtEmail
+      // 
+      appearance17.BackColor = System.Drawing.Color.LightCyan;
+      this.ultxtEmail.Appearance = appearance17;
+      this.ultxtEmail.AutoSize = true;
+      this.ultxtEmail.BackColor = System.Drawing.Color.LightCyan;
+      this.ultxtEmail.Location = new System.Drawing.Point(560, 85);
+      this.ultxtEmail.Name = "ultxtEmail";
+      this.ultxtEmail.Size = new System.Drawing.Size(160, 21);
+      this.ultxtEmail.TabIndex = 23;
+      // 
+      // ultraLabel1
+      // 
+      this.ultraLabel1.Location = new System.Drawing.Point(503, 86);
+      this.ultraLabel1.Name = "ultraLabel1";
+      this.ultraLabel1.Size = new System.Drawing.Size(54, 16);
+      this.ultraLabel1.TabIndex = 22;
+      this.ultraLabel1.Text = "邮件地址";
+      // 
+      // ulmskedtIP
+      // 
+      appearance18.BackColor = System.Drawing.Color.LightCyan;
+      this.ulmskedtIP.Appearance = appearance18;
+      this.ulmskedtIP.EditAs = Infragistics.Win.UltraWinMaskedEdit.EditAsType.UseSpecifiedMask;
+      this.ulmskedtIP.InputMask = "nnn\\.nnn\\.nnn\\.nnn";
+      this.ulmskedtIP.Location = new System.Drawing.Point(313, 85);
+      this.ulmskedtIP.Name = "ulmskedtIP";
+      this.ulmskedtIP.Size = new System.Drawing.Size(136, 21);
+      this.ulmskedtIP.TabIndex = 12;
+      this.ulmskedtIP.Text = "...";
+      // 
+      // ulcmeDepartment
+      // 
+      appearance19.BackColor = System.Drawing.Color.LightCyan;
+      this.ulcmeDepartment.Appearance = appearance19;
+      this.ulcmeDepartment.AutoSize = true;
+      this.ulcmeDepartment.ButtonsRight.Add(editorButton1);
+      this.ulcmeDepartment.DropDownButtonDisplayStyle = Infragistics.Win.ButtonDisplayStyle.Never;
+      this.ulcmeDepartment.DropDownStyle = Infragistics.Win.DropDownStyle.DropDownList;
+      this.ulcmeDepartment.Location = new System.Drawing.Point(560, 17);
+      this.ulcmeDepartment.Name = "ulcmeDepartment";
+      this.ulcmeDepartment.Size = new System.Drawing.Size(160, 21);
+      this.ulcmeDepartment.TabIndex = 21;
+      this.ulcmeDepartment.SelectionChanged += new System.EventHandler(this.ultraComboEditor2_SelectionChanged);
+      this.ulcmeDepartment.EditorButtonClick += new Infragistics.Win.UltraWinEditors.EditorButtonEventHandler(this.ultraComboEditor2_EditorButtonClick);
+      // 
+      // ultxtMemo
+      // 
+      appearance20.BackColor = System.Drawing.Color.LightCyan;
+      this.ultxtMemo.Appearance = appearance20;
+      this.ultxtMemo.AutoSize = true;
+      this.ultxtMemo.BackColor = System.Drawing.Color.LightCyan;
+      this.ultxtMemo.Location = new System.Drawing.Point(81, 119);
+      this.ultxtMemo.Name = "ultxtMemo";
+      this.ultxtMemo.Size = new System.Drawing.Size(640, 21);
+      this.ultxtMemo.TabIndex = 19;
+      // 
+      // ultxtPhono
+      // 
+      appearance21.BackColor = System.Drawing.Color.LightCyan;
+      this.ultxtPhono.Appearance = appearance21;
+      this.ultxtPhono.AutoSize = true;
+      this.ultxtPhono.BackColor = System.Drawing.Color.LightCyan;
+      this.ultxtPhono.Location = new System.Drawing.Point(560, 51);
+      this.ultxtPhono.Name = "ultxtPhono";
+      this.ultxtPhono.Size = new System.Drawing.Size(160, 21);
+      this.ultxtPhono.TabIndex = 18;
+      // 
+      // ultxtZW
+      // 
+      appearance22.BackColor = System.Drawing.Color.LightCyan;
+      this.ultxtZW.Appearance = appearance22;
+      this.ultxtZW.AutoSize = true;
+      this.ultxtZW.BackColor = System.Drawing.Color.LightCyan;
+      this.ultxtZW.Location = new System.Drawing.Point(313, 51);
+      this.ultxtZW.Name = "ultxtZW";
+      this.ultxtZW.Size = new System.Drawing.Size(136, 21);
+      this.ultxtZW.TabIndex = 17;
+      // 
+      // ultxtGW
+      // 
+      appearance23.BackColor = System.Drawing.Color.LightCyan;
+      this.ultxtGW.Appearance = appearance23;
+      this.ultxtGW.AutoSize = true;
+      this.ultxtGW.BackColor = System.Drawing.Color.LightCyan;
+      this.ultxtGW.Location = new System.Drawing.Point(81, 51);
+      this.ultxtGW.Name = "ultxtGW";
+      this.ultxtGW.Size = new System.Drawing.Size(136, 21);
+      this.ultxtGW.TabIndex = 16;
+      // 
+      // ultxtAge
+      // 
+      appearance24.BackColor = System.Drawing.Color.LightCyan;
+      this.ultxtAge.Appearance = appearance24;
+      this.ultxtAge.AutoSize = true;
+      this.ultxtAge.BackColor = System.Drawing.Color.LightCyan;
+      this.ultxtAge.Location = new System.Drawing.Point(323, 63);
+      this.ultxtAge.Name = "ultxtAge";
+      this.ultxtAge.Size = new System.Drawing.Size(100, 21);
+      this.ultxtAge.TabIndex = 15;
+      this.ultxtAge.Visible = false;
+      // 
+      // ultxtUserName
+      // 
+      appearance25.BackColor = System.Drawing.Color.LightCyan;
+      this.ultxtUserName.Appearance = appearance25;
+      this.ultxtUserName.AutoSize = true;
+      this.ultxtUserName.BackColor = System.Drawing.Color.LightCyan;
+      this.ultxtUserName.Location = new System.Drawing.Point(313, 17);
+      this.ultxtUserName.Name = "ultxtUserName";
+      this.ultxtUserName.Size = new System.Drawing.Size(136, 21);
+      this.ultxtUserName.TabIndex = 14;
+      // 
+      // ultxtUserNo
+      // 
+      appearance26.BackColor = System.Drawing.Color.LavenderBlush;
+      this.ultxtUserNo.Appearance = appearance26;
+      this.ultxtUserNo.AutoSize = true;
+      this.ultxtUserNo.BackColor = System.Drawing.Color.LavenderBlush;
+      this.ultxtUserNo.Location = new System.Drawing.Point(81, 17);
+      this.ultxtUserNo.Name = "ultxtUserNo";
+      this.ultxtUserNo.Size = new System.Drawing.Size(136, 21);
+      this.ultxtUserNo.TabIndex = 13;
+      // 
+      // ulcmeSex
+      // 
+      appearance27.BackColor = System.Drawing.Color.LightCyan;
+      this.ulcmeSex.Appearance = appearance27;
+      this.ulcmeSex.AutoSize = true;
+      this.ulcmeSex.DropDownStyle = Infragistics.Win.DropDownStyle.DropDownList;
+      valueListItem1.DataValue = "男";
+      valueListItem1.DisplayText = "男";
+      valueListItem2.DataValue = "女";
+      valueListItem2.DisplayText = "女";
+      this.ulcmeSex.Items.Add(valueListItem1);
+      this.ulcmeSex.Items.Add(valueListItem2);
+      this.ulcmeSex.Location = new System.Drawing.Point(81, 85);
+      this.ulcmeSex.Name = "ulcmeSex";
+      this.ulcmeSex.Size = new System.Drawing.Size(136, 21);
+      this.ulcmeSex.TabIndex = 11;
+      // 
+      // ultraLabel11
+      // 
+      this.ultraLabel11.Location = new System.Drawing.Point(36, 120);
+      this.ultraLabel11.Name = "ultraLabel11";
+      this.ultraLabel11.Size = new System.Drawing.Size(42, 16);
+      this.ultraLabel11.TabIndex = 9;
+      this.ultraLabel11.Text = "备  注";
+      // 
+      // ultraLabel10
+      // 
+      this.ultraLabel10.Location = new System.Drawing.Point(503, 52);
+      this.ultraLabel10.Name = "ultraLabel10";
+      this.ultraLabel10.Size = new System.Drawing.Size(54, 16);
+      this.ultraLabel10.TabIndex = 8;
+      this.ultraLabel10.Text = "联系电话";
+      // 
+      // ultraLabel9
+      // 
+      this.ultraLabel9.Location = new System.Drawing.Point(244, 86);
+      this.ultraLabel9.Name = "ultraLabel9";
+      this.ultraLabel9.Size = new System.Drawing.Size(66, 16);
+      this.ultraLabel9.TabIndex = 7;
+      this.ultraLabel9.Text = "机器IP地址";
+      // 
+      // ultraLabel8
+      // 
+      this.ultraLabel8.Location = new System.Drawing.Point(528, 18);
+      this.ultraLabel8.Name = "ultraLabel8";
+      this.ultraLabel8.Size = new System.Drawing.Size(29, 16);
+      this.ultraLabel8.TabIndex = 6;
+      this.ultraLabel8.Text = "部门";
+      // 
+      // ultraLabel7
+      // 
+      this.ultraLabel7.Location = new System.Drawing.Point(281, 52);
+      this.ultraLabel7.Name = "ultraLabel7";
+      this.ultraLabel7.Size = new System.Drawing.Size(29, 16);
+      this.ultraLabel7.TabIndex = 5;
+      this.ultraLabel7.Text = "职务";
+      // 
+      // ultraLabel6
+      // 
+      this.ultraLabel6.Location = new System.Drawing.Point(290, 66);
+      this.ultraLabel6.Name = "ultraLabel6";
+      this.ultraLabel6.Size = new System.Drawing.Size(32, 16);
+      this.ultraLabel6.TabIndex = 4;
+      this.ultraLabel6.Text = "年龄";
+      this.ultraLabel6.Visible = false;
+      // 
+      // ultraLabel5
+      // 
+      this.ultraLabel5.Location = new System.Drawing.Point(281, 18);
+      this.ultraLabel5.Name = "ultraLabel5";
+      this.ultraLabel5.Size = new System.Drawing.Size(29, 16);
+      this.ultraLabel5.TabIndex = 3;
+      this.ultraLabel5.Text = "姓名";
+      // 
+      // ultraLabel4
+      // 
+      this.ultraLabel4.Location = new System.Drawing.Point(49, 52);
+      this.ultraLabel4.Name = "ultraLabel4";
+      this.ultraLabel4.Size = new System.Drawing.Size(29, 16);
+      this.ultraLabel4.TabIndex = 2;
+      this.ultraLabel4.Text = "岗位";
+      // 
+      // ultraLabel3
+      // 
+      this.ultraLabel3.Location = new System.Drawing.Point(49, 86);
+      this.ultraLabel3.Name = "ultraLabel3";
+      this.ultraLabel3.Size = new System.Drawing.Size(29, 16);
+      this.ultraLabel3.TabIndex = 1;
+      this.ultraLabel3.Text = "性别";
+      // 
+      // ultraLabel2
+      // 
+      this.ultraLabel2.Location = new System.Drawing.Point(24, 18);
+      this.ultraLabel2.Name = "ultraLabel2";
+      this.ultraLabel2.Size = new System.Drawing.Size(54, 16);
+      this.ultraLabel2.TabIndex = 0;
+      this.ultraLabel2.Text = "员工编号";
+      // 
+      // panel2
+      // 
+      this.panel2.BackColor = System.Drawing.Color.Gainsboro;
+      this.panel2.Controls.Add(this.ultLoginID);
+      this.panel2.Controls.Add(this.ultraLabel12);
+      this.panel2.Controls.Add(this.ultraTextEditor8);
+      this.panel2.Controls.Add(this.ultraCheckEditor1);
+      this.panel2.Controls.Add(this.ultraButton1);
+      this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
+      this.panel2.Location = new System.Drawing.Point(0, 32);
+      this.panel2.Name = "panel2";
+      this.panel2.Size = new System.Drawing.Size(1012, 56);
+      this.panel2.TabIndex = 1;
+      // 
+      // ultLoginID
+      // 
+      appearance28.BackColor = System.Drawing.Color.LightCyan;
+      this.ultLoginID.Appearance = appearance28;
+      this.ultLoginID.AutoSize = true;
+      this.ultLoginID.BackColor = System.Drawing.Color.LightCyan;
+      appearance29.TextHAlign = Infragistics.Win.HAlign.Center;
+      appearance29.TextVAlign = Infragistics.Win.VAlign.Middle;
+      editorButton2.Appearance = appearance29;
+      editorButton2.ButtonStyle = Infragistics.Win.UIElementButtonStyle.VisualStudio2005Button;
+      editorButton2.Key = "SET";
+      editorButton2.Text = "";
+      this.ultLoginID.ButtonsRight.Add(editorButton2);
+      this.ultLoginID.FlatMode = true;
+      this.ultLoginID.Location = new System.Drawing.Point(371, 18);
+      this.ultLoginID.Name = "ultLoginID";
+      this.ultLoginID.Size = new System.Drawing.Size(152, 19);
+      this.ultLoginID.TabIndex = 3;
+      this.ultLoginID.Visible = false;
+      this.ultLoginID.EditorButtonClick += new Infragistics.Win.UltraWinEditors.EditorButtonEventHandler(this.ultLoginID_EditorButtonClick);
+      // 
+      // ultraLabel12
+      // 
+      appearance30.BackColor = System.Drawing.Color.Gainsboro;
+      this.ultraLabel12.Appearance = appearance30;
+      this.ultraLabel12.Location = new System.Drawing.Point(313, 22);
+      this.ultraLabel12.Name = "ultraLabel12";
+      this.ultraLabel12.Size = new System.Drawing.Size(54, 16);
+      this.ultraLabel12.TabIndex = 0;
+      this.ultraLabel12.Text = "员工编号";
+      this.ultraLabel12.Visible = false;
+      // 
+      // ultraTextEditor8
+      // 
+      appearance31.BackColor = System.Drawing.Color.Gainsboro;
+      this.ultraTextEditor8.Appearance = appearance31;
+      this.ultraTextEditor8.AutoSize = true;
+      this.ultraTextEditor8.BackColor = System.Drawing.Color.Gainsboro;
+      editorButton3.ButtonStyle = Infragistics.Win.UIElementButtonStyle.VisualStudio2005Button;
+      editorButton3.Key = "part";
+      editorButton3.Text = "…";
+      this.ultraTextEditor8.ButtonsRight.Add(editorButton3);
+      this.ultraTextEditor8.Enabled = false;
+      this.ultraTextEditor8.FlatMode = true;
+      this.ultraTextEditor8.Location = new System.Drawing.Point(86, 18);
+      this.ultraTextEditor8.Name = "ultraTextEditor8";
+      this.ultraTextEditor8.ReadOnly = true;
+      this.ultraTextEditor8.Size = new System.Drawing.Size(149, 19);
+      this.ultraTextEditor8.TabIndex = 1;
+      this.ultraTextEditor8.EditorButtonClick += new Infragistics.Win.UltraWinEditors.EditorButtonEventHandler(this.ultraTextEditor8_EditorButtonClick);
+      // 
+      // ultraCheckEditor1
+      // 
+      this.ultraCheckEditor1.Location = new System.Drawing.Point(31, 18);
+      this.ultraCheckEditor1.Name = "ultraCheckEditor1";
+      this.ultraCheckEditor1.Size = new System.Drawing.Size(48, 20);
+      this.ultraCheckEditor1.TabIndex = 0;
+      this.ultraCheckEditor1.Text = "部门";
+      this.ultraCheckEditor1.CheckedChanged += new System.EventHandler(this.ultraCheckEditor1_CheckedChanged);
+      // 
+      // ultraButton1
+      // 
+      this.ultraButton1.Location = new System.Drawing.Point(237, 17);
+      this.ultraButton1.Name = "ultraButton1";
+      this.ultraButton1.Size = new System.Drawing.Size(27, 21);
+      this.ultraButton1.TabIndex = 2;
+      this.ultraButton1.Text = ">>";
+      this.toolTip1.SetToolTip(this.ultraButton1, "部门维护");
+      this.ultraButton1.Visible = false;
+      this.ultraButton1.Click += new System.EventHandler(this.ultraButton1_Click);
+      // 
+      // FrmUserManager
+      // 
+      this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
+      this.ClientSize = new System.Drawing.Size(1012, 733);
+      this.Controls.Add(this.FrmUserManager_Fill_Panel);
+      this.Name = "FrmUserManager";
+      this.Text = "系统用户管理";
+      this.Load += new System.EventHandler(this.FrmUserManager_Load);
+      this.panel1.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.ultraToolbarsManager1)).EndInit();
+      this.FrmUserManager_Fill_Panel.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.ultraGrid1)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraExpandableGroupBox1)).EndInit();
+      this.ultraExpandableGroupBox1.ResumeLayout(false);
+      this.ultraExpandableGroupBoxPanel1.ResumeLayout(false);
+      this.panel3.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.ultxtEmail)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ulcmeDepartment)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultxtMemo)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultxtPhono)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultxtZW)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultxtGW)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultxtAge)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultxtUserName)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultxtUserNo)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ulcmeSex)).EndInit();
+      this.panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.ultLoginID)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor8)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+    #endregion
+
+    #region "显示窗体"
+
+    private void FrmUserManager_Load(object sender, System.EventArgs e)
+    {
+      StrUser = Core.Mes.ClientFrameWork.ClientCommon._UserInfo.UserName;
+
+      GetDepartmentData();
+      GetUserData("", true);
+      GetOperDepart();
+      GetChildDept();
+      InitComboBox();
+      InitGrid();
+      if (operDepart == "ROOT")
+      {
+        ultraButton1.Visible = true;
+      }
+
+    }
+    private void GetDepartmentData()
+    {
+      try
+      {
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "SelectUAM_DEPARTMENT";
+        par.args = new object[] { " order by DEPARTMENTID " };
+
+        string strOut = "";
+
+        _departmentData = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+
+        _selectPartSQL = strOut;
+      }
+      catch
+      { }
+    }
+
+    private void InitComboBox()
+    {
+      if (_departmentData != null && _departmentData.Tables.Count > 0)
+      {
+        DataTable dt = this._departmentData.Tables[0].Copy();
+
+        this.ulcmeDepartment.Items.Clear();
+        foreach (DataRow dr in dt.Rows)
+        {
+          if (dr["DEPARTMENTID"].ToString() == "ROOT" && operDepart != "ROOT") continue;
+          try
+          {
+            this.ulcmeDepartment.Items.Add(dr["DEPARTMENTID"], dr["DEPARTMENTNAME"].ToString());
+          }
+          catch
+          { }
+        }
+      }
+    }
+    private void GetUserData(string strWhere, bool flag)
+    {
+      try
+      {
+        if (!flag)
+        {
+          _userData.Tables[0].DefaultView.RowFilter = strWhere;
+          return;
+        }
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "SelectUAM_USER";
+        par.args = new object[] { strWhere };
+
+        string strOut = "";
+
+        _userData = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+
+        _selectUserSQL = strOut;
+      }
+      catch
+      { }
+    }
+    private void GetOperDepart()
+    {
+      try
+      {
+        if (_userData != null && _userData.Tables.Count > 0)
+        {
+          DataTable dt = this._userData.Tables[0].Copy();
+
+          foreach (DataRow dr in dt.Rows)
+          {
+            if (dr["NAME"].ToString() == StrUser)
+            {
+              operDepart = dr["DEPARTMENTID"].ToString();
+              //operDepart=operDepart.Substring(0,3);
+              //if(operDepart=="xg0")
+              //{
+              //    operDepart="xg";
+              //}
+              DataTable dn = this._departmentData.Tables[0].Copy();
+              foreach (DataRow dm in dn.Rows)
+              {
+                if (dm["DEPARTMENTID"].ToString() == operDepart)
+                {
+                  operDepartname = dm["DEPARTMENTNAME"].ToString();
+                }
+              }
+            }
+          }
+        }
+      }
+      catch
+      { }
+    }
+    private void InitGrid()
+    {
+      #region "	ValueList	"
+      GetPartData();
+      ultraGrid1.DisplayLayout.Bands[0].Columns["DEPARTMENTID"].ValueList = ultraGrid1.DisplayLayout.ValueLists["part"];
+      ultraGrid1.DisplayLayout.Bands[0].Columns["PD"].ValueList = ultraGrid1.DisplayLayout.ValueLists["part"];
+      #endregion
+
+      this.ultraCheckEditor1.CheckedValue = true;
+      this.ultraTextEditor8.Enabled = true;
+      this.ultraTextEditor8.Text = operDepartname;
+      this.ultraTextEditor8.Tag = allDept;
+      Query();
+      //			this.ultraGrid1.DataSource = this._userData.Tables[0];
+
+      this.ultraGrid1.AfterRowActivate += new EventHandler(ultraGrid1_AfterRowActivate);
+    }
+    private void ultraGrid1_AfterRowActivate(object sender, System.EventArgs e)
+    {
+      try
+      {
+        if (this.ultraGrid1.ActiveRow == null) return;
+        UltraGridRow ugr = this.ultraGrid1.ActiveRow;
+
+        this.ultxtUserNo.Text = ugr.Cells["USERID"].Value.ToString();
+        this.ulcmeDepartment.Value = ugr.Cells["DEPARTMENTID"].Value;
+        this.ultxtUserName.Text = ugr.Cells["NAME"].Value.ToString();
+        this.ulcmeSex.Text = ugr.Cells["SEX"].Value.ToString();
+        this.ultxtAge.Text = ugr.Cells["AGE"].Value.ToString();
+        this.ulmskedtIP.Text = ugr.Cells["COMPUTERIP"].Value.ToString();
+        this.ultxtPhono.Text = ugr.Cells["HOMEPHONE"].Value.ToString();
+        this.ultxtGW.Text = ugr.Cells["WORKPOS"].Value.ToString();
+        this.ultxtZW.Text = ugr.Cells["WORKJOB"].Value.ToString();
+        this.ultxtMemo.Text = ugr.Cells["MEMO"].Value.ToString();
+        this.ultxtEmail.Text = ugr.Cells["EMAIL"].Value.ToString();
+      }
+      catch (Exception ex)
+      {
+        Console.WriteLine(ex.Message);
+      }
+    }
+    private void GetPartData()
+    {
+      if (ultraGrid1.DisplayLayout.ValueLists.Exists("part"))
+        ultraGrid1.DisplayLayout.ValueLists["part"].ValueListItems.Clear();
+      else
+        ultraGrid1.DisplayLayout.ValueLists.Add("part");
+      //try
+      //{
+      //    ultraGrid1.DisplayLayout.ValueLists["part"].ValueListItems.Clear();
+      //}
+      //catch
+      //{
+      //    ultraGrid1.DisplayLayout.ValueLists.Add("part");
+      //}
+      DataTable dt = this._departmentData.Tables[0].Copy();
+      foreach (DataRow dr in dt.Rows)
+      {
+        Infragistics.Win.ValueListItem vli = new Infragistics.Win.ValueListItem();
+        vli.DisplayText = dr["DEPARTMENTNAME"].ToString();
+        vli.DataValue = dr["DEPARTMENTID"];
+        ultraGrid1.DisplayLayout.ValueLists["part"].ValueListItems.Add(vli);
+      }
+    }
+    #endregion
+
+    #region "工具栏操作"
+    private void ultraToolbarsManager1_ToolClick(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
+    {
+      switch (e.Tool.Key)
+      {
+        case "add":
+          Add();
+          GetUserData("", true);
+          break;
+        case "del":
+          Del();
+          break;
+        case "edit":
+          Edit();
+          break;
+        case "query":
+          Query();
+          break;
+        case "exit":
+          this.Close();
+          break;
+        case "back":
+          //                  this.ultraToolbarsManager1.Toolbars[0].Tools["back"].SharedProps.Visible=false;
+          //				    RefreshGrid("");
+          //					ultraCheckEditor1.Checked = false;
+          //					ultraTextEditor8.Text = "";
+          this.ultraCheckEditor1.CheckedValue = true;
+          if (ultLoginID.Text.Trim().Length > 0)
+          {
+            ultLoginID.Tag = ultLoginID.Text.Trim();
+            ultLoginID.Text = "";
+          }
+          this.ultraTextEditor8.Enabled = true;
+          this.ultraTextEditor8.Text = operDepartname;
+          this.ultraTextEditor8.Tag = allDept;
+          Query();
+          break;
+        case "leadin":
+          try
+          {
+            string StrfileName = string.Format("c:\\{0}.xls", this.Text);
+            this.ultraGridExcelExporter1.Export(this.ultraGrid1, StrfileName);
+
+            ProcessStartInfo p = new ProcessStartInfo(StrfileName);
+            p.WorkingDirectory = Path.GetDirectoryName(StrfileName);
+            Process.Start(p);
+          }
+          catch (Exception ex)
+          {
+            MessageBox.Show(ex.Message);
+          }
+          break;
+      }
+    }
+    private void Add()
+    {
+      if (this.ultxtUserNo.Text.Trim() == "")
+      {
+        MessageBox.Show("请录入员工编号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        return;
+      }
+      if (this.ultxtUserName.Text.Trim() == "")
+      {
+        MessageBox.Show("请录入员工姓名!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        return;
+      }
+      if (this.ulcmeDepartment.Value == null)
+      {
+        MessageBox.Show("请选择员工所在部门!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        return;
+      }
+      if (this.ulcmeDepartment.Value.ToString() == "ROOT")
+      {
+        this.ulcmeDepartment.Value = null;
+        MessageBox.Show("必须选择下属部门!");
+        return;
+      }
+      if (!(RightsComm.CheckRole(ulcmeDepartment.Value.ToString())))
+      {
+        return;
+      }
+      //if (allDept.IndexOf("'" + ulcmeDepartment.Value.ToString() + "'") < 0 && operDepart != "ROOT")
+      //{
+      //  this.ulcmeDepartment.Value = null;
+      //  MessageBox.Show("你没有配置这一部门用户的权限,请重新选择部门!");
+      //  return;
+      //}
+      ArrayList al = new ArrayList();
+
+      al.Add(this.ultxtUserNo.Text.Trim());
+      al.Add(this.ulcmeDepartment.Value);
+      al.Add(this.ultxtUserName.Text.Trim());
+      if (this.ulcmeSex.SelectedIndex != -1)
+      {
+        al.Add(this.ulcmeSex.Text.Trim());
+      }
+      else
+      {
+        al.Add("");
+      }
+
+      if (this.ultxtAge.Text == "")
+        al.Add(0);
+      else
+        al.Add(this.ultxtAge.Text.Trim());
+
+      al.Add(this.ulmskedtIP.Text.Trim());
+      al.Add(this.ultxtPhono.Text.Trim());
+      al.Add(this.ultxtGW.Text.Trim());
+      al.Add(this.ultxtZW.Text.Trim());
+      al.Add(this.ultxtMemo.Text.Trim());
+      al.Add(this.ultxtEmail.Text.Trim());
+
+      try
+      {
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "InsertUAM_USER";
+        par.args = new object[] { al };
+
+        string strOut = "";
+
+        object obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut);
+
+        if (strOut != "")
+        {
+          MessageBox.Show("新增失败! \n" + strOut);
+          return;
+        }
+        else
+        {
+          if ((int)obj != 1)
+          {
+            MessageBox.Show("新增失败!");
+            return;
+          }
+        }
+      }
+      catch
+      {
+        return;
+      }
+      this.GetDepartmentData();
+      UltraGridRow ugr = this.ultraGrid1.DisplayLayout.Bands[0].AddNew();
+      ugr.Cells["USERID"].Value = al[0];
+      ugr.Cells["DEPARTMENTID"].Value = al[1];
+      ugr.Cells["NAME"].Value = al[2];
+      ugr.Cells["SEX"].Value = al[3];
+      ugr.Cells["AGE"].Value = al[4];
+      ugr.Cells["COMPUTERIP"].Value = al[5];
+      ugr.Cells["HOMEPHONE"].Value = al[6];
+      ugr.Cells["WORKPOS"].Value = al[7];
+      ugr.Cells["WORKJOB"].Value = al[8];
+      ugr.Cells["MEMO"].Value = al[9];
+      ugr.Cells["EMAIL"].Value = al[10];
+      for (int i = 0; i < _departmentData.Tables[0].Rows.Count; i++)
+      {
+        if (_departmentData.Tables[0].Rows[i]["DEPARTMENTID"].ToString() == al[1].ToString())
+        {
+          ugr.Cells["PD"].Value = _departmentData.Tables[0].Rows[i]["DEPARTMENTPID"].ToString();
+          break;
+        }
+      }
+
+      this.ultraGrid1.UpdateData();
+    }
+    private void Del()
+    {
+      int i = 0;
+      UltraGridRow ugr = this.ultraGrid1.ActiveRow;
+      if (ugr == null)
+      {
+        MessageBox.Show("请选择要删除的员工!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        return;
+      }
+      if (MessageBox.Show("是否确认删除选中的员工?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
+      {
+        return;
+      }
+      try
+      {
+        string OpDptID = "";
+        if(!(RightsComm.CheckRole(OpDptID)))
+          return;
+        i = ugr.Index;
+
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "DeleteUAM_USER";
+        par.args = new object[] { ugr.Cells[0].Value.ToString() };
+
+        string strOut = "";
+
+        object obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut);
+
+        if (strOut != "")
+        {
+          MessageBox.Show("删除失败! \n" + strOut);
+          return;
+        }
+        else
+        {
+          if ((int)obj != 1)
+          {
+            MessageBox.Show("删除失败!");
+            return;
+          }
+        }
+      }
+      catch //(Exception ex)
+      {
+        //			CoreMesLogger.log(this.GetType()).Error(ex.Message);
+        return;
+      }
+
+      this.ultraGrid1.ActiveRow.Delete(false);
+      this.ultraGrid1.UpdateData();
+
+      try
+      {
+        this.ultraGrid1.Rows[i].Activate();
+      }
+      catch
+      {
+        int count = this.ultraGrid1.Rows.Count;
+        if (count > 0)
+          this.ultraGrid1.Rows[count - 1].Activate();
+      }
+    }
+    private void Edit()
+    {
+      UltraGridRow ugr = this.ultraGrid1.ActiveRow;
+      if (ugr == null)
+      {
+        MessageBox.Show("请选择要修改的员工!");
+        return;
+      }
+      if (this.ultxtUserNo.Text.Trim() != ugr.Cells["USERID"].Text.Trim())
+      {
+        MessageBox.Show("不能修改员工编号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        return;
+      }
+      if (this.ultxtUserName.Text.Trim() == "")
+      {
+        MessageBox.Show("请录入员工姓名!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        return;
+      }
+      if (this.ulcmeDepartment.Value == null)
+      {
+        MessageBox.Show("请选择员工所在部门!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        return;
+      }
+      if (this.ulcmeDepartment.Value.ToString() == "ROOT")
+      {
+        this.ulcmeDepartment.Value = null;
+        MessageBox.Show("必须选择下属部门!");
+        return;
+      }
+      if (allDept.IndexOf("'" + ulcmeDepartment.Value.ToString() + "'") < 0 && operDepart != "ROOT")
+      {
+        this.ulcmeDepartment.Value = null;
+        MessageBox.Show("你没有修改该用户的权限,请重新选择部门!");
+        return;
+      }
+      ArrayList al = new ArrayList();
+
+      al.Add(this.ultxtUserNo.Text.Trim());
+
+      al.Add(this.ulcmeDepartment.Value);
+
+      al.Add(this.ultxtUserName.Text.Trim());
+      al.Add(this.ulcmeSex.Text.Trim());
+      al.Add((ultxtAge.Text.Trim() != "") ? ultxtAge.Text.Trim() : "0");
+      al.Add(this.ulmskedtIP.Text.Trim());
+
+      al.Add(this.ultxtPhono.Text.Trim());
+      al.Add(this.ultxtGW.Text.Trim());
+      al.Add(this.ultxtZW.Text.Trim());
+      al.Add(this.ultxtMemo.Text.Trim());
+      al.Add(this.ultxtEmail.Text.Trim());
+
+      try
+      {
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "UpdateUAM_USER";
+        par.args = new object[] { al };
+
+        string strOut = "";
+
+        object obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut);
+
+        if (strOut != "")
+        {
+          MessageBox.Show("修改失败 \n" + strOut);
+          return;
+        }
+        else
+        {
+          int i = (int)obj;
+          if (i != 1)
+          {
+            MessageBox.Show("修改失败");
+            return;
+          }
+        }
+      }
+      catch //(Exception ex)
+      {
+        //			CoreMesLogger.log(this.GetType()).Error(ex.Message);
+        return;
+      }
+      ugr.Cells["DEPARTMENTID"].Value = al[1];
+      ugr.Cells["NAME"].Value = al[2];
+      ugr.Cells["SEX"].Value = al[3];
+      ugr.Cells["AGE"].Value = al[4];
+      ugr.Cells["COMPUTERIP"].Value = al[5];
+      ugr.Cells["HOMEPHONE"].Value = al[6];
+      ugr.Cells["WORKPOS"].Value = al[7];
+      ugr.Cells["WORKJOB"].Value = al[8];
+      ugr.Cells["MEMO"].Value = al[9];
+      ugr.Cells["EMAIL"].Value = al[10];
+      for (int i = 0; i < _departmentData.Tables[0].Rows.Count; i++)
+      {
+        if (_departmentData.Tables[0].Rows[i]["DEPARTMENTID"].ToString() == al[1].ToString())
+        {
+          ugr.Cells["PD"].Value = _departmentData.Tables[0].Rows[i]["DEPARTMENTPID"].ToString();
+          break;
+        }
+      }
+
+      this.ultraGrid1.UpdateData();
+    }
+    private void Query()
+    {
+      try
+      {
+        if ((this.ultraTextEditor8.Text == null || !this.ultraCheckEditor1.Checked) &&
+            (this.ultLoginID.Text.Trim().Length == 0))
+        {
+          MessageBox.Show("请选择要查询的部门或员工编号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+          return;
+        }
+        if (this.ultraCheckEditor1.Checked && this.ultraTextEditor8.Text != "")
+        {
+          GetSelDept();
+          if (operDepart != "ROOT" && allDept.IndexOf("'" + selDept + "'") < 0)
+          {
+            MessageBox.Show("你没有查看这一部门的权限,请重新选择!");
+            return;
+          }
+        }
+        this.ultraToolbarsManager1.Toolbars[0].Tools["back"].SharedProps.Visible = true;
+        string strWhere = "";
+        if (this.ultraTextEditor8.Tag.ToString().Length > 0)
+          strWhere = " WHERE DEPARTMENTID in (" + this.ultraTextEditor8.Tag.ToString() + ")";
+        //strWhere = GetRefreshWhere();
+        //strWhere = " where " + strWhere;
+
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "GetUAM_USER";
+        par.args = new object[] { strWhere };
+
+        string strOut = "";
+
+        DataSet obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+        this.ultraGrid1.DataSource = obj.Tables[0];
+        this.ultraGrid1.Refresh();
+      }
+      catch (System.Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+      }
+    }
+    private string GetRefreshWhere()
+    {
+      string sqlstr = "";
+      if (this.ultraTextEditor8.Enabled && this.ultraCheckEditor1.Checked && this.ultraTextEditor8.Text != "")
+      {
+        ArrayList al = this.GetUserID();
+        if (al == null || al.Count == 0)
+        {
+          sqlstr = "1=2";
+        }
+        else
+        {
+          sqlstr += " USERID in ('" + al[0].ToString() + "'";
+          for (int i = 1; i < al.Count; i++)
+          {
+            sqlstr += ", '" + al[i].ToString() + "' ";
+          }
+          sqlstr += ")";
+
+        }
+      }
+      if (this.ultLoginID.Text.Trim().Length > 0)
+      {
+        if (sqlstr != "")
+          sqlstr += " and ";
+        sqlstr += " USERID = '" + this.ultLoginID.Text.Trim() + "'";
+      }
+      return sqlstr;
+    }
+    private ArrayList GetUserID()
+    {
+      ArrayList al = new ArrayList();
+      DataTable dt = null;
+      if (this._userData == null)
+        dt = null;
+      else
+        dt = this._userData.Tables[0];
+
+      if (dt != null)
+      {
+        if (this.ultraTextEditor8.Enabled && this.ultraTextEditor8.Tag != null)
+        {
+          string partid = this.ultraTextEditor8.Tag.ToString();
+
+          string strFilter = "DEPARTMENTID in (" + partid + ")";
+
+          dt.DefaultView.RowFilter = strFilter;
+        }
+
+        for (int i = 0; i < dt.DefaultView.Count; i++)
+        {
+          al.Add(dt.DefaultView[i]["USERID"].ToString());
+        }
+
+        return al;
+      }
+      else
+        return null;
+    }
+    private void RefreshGrid(string strWhere)
+    {
+      CallingMessage par = new CallingMessage();
+      par.ServerName = "PurviewManager";
+      par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+      par.MethodName = "SelectUAM_USER";
+      par.args = new object[] { strWhere };
+
+      string strOut = "";
+
+      DataSet obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+      this.ultraGrid1.DataSource = obj.Tables[0];
+      this.ultraGrid1.Refresh();
+    }
+    #endregion
+
+    #region "Button"
+    private void ultraButton1_Click(object sender, System.EventArgs e)
+    {
+      foreach (Form mdiChild in this.MdiParent.MdiChildren)
+      {
+        if (mdiChild.Text == "部门管理")
+        {
+          mdiChild.Activate();
+          return;
+        }
+      }
+
+      FrmDepartment frmpart = new FrmDepartment();
+
+      //			frmpart.RemotingHelp = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp;
+      frmpart.MdiParent = this.ParentForm;
+      frmpart.Show();
+    }
+    #endregion
+
+    #region "TextBox"
+    private void ultraTextEditor8_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e)
+    {
+      try
+      {
+        FrmSetDepart frm = new FrmSetDepart();
+        frm.Location = GetChildWindowLocation(frm.Size);
+        frm.ShowDialog();
+        if (frm.SelectedID != "" && frm.SelectedName != "")
+        {
+          this.ultraTextEditor8.Text = frm.SelectedName;
+          this.ultraTextEditor8.Tag = frm.SelectedID;
+        }
+        if (this.ultraTextEditor8.Text != "" && this.ultraCheckEditor1.Checked)
+        {
+          GetSelDept();
+          if (operDepart != "ROOT" && allDept.IndexOf("'" + selDept + "'") < 0)
+          {
+            MessageBox.Show("你没有查看这一部门的权限,请重新选择!");
+          }
+        }
+      }
+      catch
+      { }
+    }
+    private void ultLoginID_EditorButtonClick(object sender, EditorButtonEventArgs e)
+    {
+      try
+      {
+        if (e.Button.Key == "SET")
+        {
+          if (ultLoginID.Text.Trim().Length > 0)
+          {
+            ultLoginID.Tag = ultLoginID.Text.Trim();
+            ultLoginID.Text = "";
+          }
+          else
+          {
+            if (ultLoginID.Tag != null)
+              ultLoginID.Text = ultLoginID.Tag.ToString();
+          }
+        }
+      }
+      catch { }
+    }
+    #endregion
+
+    #region "Custom Method"
+    private Point GetChildWindowLocation(Size ChildWindowSize)
+    {
+      int width = Cursor.Position.X + ChildWindowSize.Width - Screen.PrimaryScreen.Bounds.Width;
+      int height = Cursor.Position.Y + ChildWindowSize.Height - Screen.PrimaryScreen.Bounds.Height + 30;
+
+      if (width > 0)
+        width = Cursor.Position.X - width;
+      else
+        width = Cursor.Position.X;
+      if (height > 0)
+        height = Cursor.Position.Y - height + 10;
+      else
+        height = Cursor.Position.Y + 10;
+
+      return new Point(width, height);
+    }
+    private void GetChildDept()
+    {
+      try
+      {
+        string strOut = "";
+        DataSet ds = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod("PurviewManager", "Core.Mes.PurviewManager.UAM_USER", "SelectChildDept", new object[] { operDepart }, out strOut) as DataSet;
+        if (ds.Tables[0].Rows[0][0].ToString() != "")
+        {
+          allDept = "'" + ds.Tables[0].Rows[0][0].ToString() + "'" + operDepart + "'";
+        }
+        else
+          allDept = "'" + operDepart + "'";
+      }
+      catch
+      { }
+    }
+    private void GetSelDept()
+    {
+      try
+      {
+        if (this.ultraTextEditor8.Text != "" && this.ultraCheckEditor1.Checked)
+        {
+          DataTable dt = this._departmentData.Tables[0].Copy();
+          foreach (DataRow dr in dt.Rows)
+          {
+            if (dr["DEPARTMENTNAME"].ToString() == this.ultraTextEditor8.Text)
+            {
+              selDept = dr["DEPARTMENTID"].ToString();
+              return;
+            }
+          }
+        }
+      }
+      catch
+      { }
+    }
+    #endregion
+
+    #region "ComboBox"
+    private void ultraComboEditor2_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e)
+    {
+      try
+      {
+        FrmSetDepart frm = new FrmSetDepart();
+        frm.GetChildIDFlag = false;
+        frm.Location = GetChildWindowLocation(frm.Size);
+        frm.ShowDialog();
+
+        InitComboBox();
+
+        if (frm.SelectedID != "" && frm.SelectedName != "")
+        {
+          this.ulcmeDepartment.Value = frm.SelectedID;
+          if (operDepart != "ROOT" && this.ulcmeDepartment.Value.ToString() == "ROOT")
+          {
+            this.ulcmeDepartment.Value = null;
+            MessageBox.Show("所属权限不允许选择选择整个公司!");
+            return;
+          }
+          if (allDept.IndexOf("'" + ulcmeDepartment.Value.ToString() + "'") < 0 && operDepart != "ROOT")
+          {
+            this.ulcmeDepartment.Value = null;
+            MessageBox.Show("你没有配置这一部门用户的权限,请重新选择部门!");
+            return;
+          }
+        }
+      }
+      catch
+      { }
+    }
+    private void ultraComboEditor2_SelectionChanged(object sender, System.EventArgs e)
+    {
+      try
+      {
+        if (operDepart != "ROOT" && ulcmeDepartment.Value.ToString() == "ROOT")
+        {
+          this.ulcmeDepartment.Value = null;
+          MessageBox.Show("所属权限不允许选择选择整个公司!");
+          return;
+        }
+        if (ulcmeDepartment.Value != null && allDept.IndexOf("'" + ulcmeDepartment.Value.ToString() + "'") < 0 && operDepart != "ROOT")
+        {
+          this.ulcmeDepartment.Value = null;
+          MessageBox.Show("你没有配置这一部门用户的权限,请重新选择部门!");
+          return;
+        }
+      }
+      catch
+      { }
+    }
+    #endregion
+
+    #region "CheckBox"
+    private void ultraCheckEditor1_CheckedChanged(object sender, System.EventArgs e)
+    {
+      this.ultraTextEditor8.Enabled = this.ultraCheckEditor1.Checked;
+    }
+    #endregion
+  }
+}

+ 393 - 0
.svn/pristine/3b/3b56d57df3aee29be8c42864d2fbfc2bc1a38cb3.svn-base

@@ -0,0 +1,393 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="timerAutoRun.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>118, 17</value>
+  </metadata>
+  <metadata name="timer_checkSem.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>244, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.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>
+        AAABAAEARkUAAAEAGACIPAAAFgAAACgAAABGAAAAigAAAAEAGAAAAAAAYDwAAAAAAAAAAAAAAAAAAAAA
+        AAALALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsL
+        ALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsL
+        ALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsL
+        ALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsAAAsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsA
+        uwsAuwAACwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7
+        CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7
+        CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7
+        CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7AAA3MsMCALkJAL0LAbkKALoJALsLALoN
+        ALoJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJ
+        ALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJ
+        ALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJAboOALwMAbsM
+        ALgLALsLALsAADw0wQQBuw0AuwsAugwBvAkAuwkBugsAvQsAugsAugsAugsAugsAugsAugsAugsAugsA
+        ugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsA
+        ugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsA
+        ugsAugsAugsAugsAugsAugsAugsAug4AuwkBugoBvAwAvgsAuwsAuwAAPDTBAwG5DQC7DAG8BwC7DAG7
+        BAC4BQG4CAC6AAG3AAC4CwC6CwC6CwC7DAG7CwC6CwC7DAG7CwC9DAG8CwC6CwC7CQC7DQC7CwC7CwC7
+        CwC6CwC9CwC7DQC6DQC7CQG6CwC6CwG5CgC8DAG7DQG5CQC7DAG7DQC7CwC6CQG6CgK7CwC7DgG7CQG6
+        CQG6DAC+DAG7DQC7CwC7DgG7CQC7DQC6CwC6CwC7DQC9CwC6CwC9CwC6DgK6BwC7CwC7DQC6CwC7CwC7
+        CwC6CwC6CwC7CwC7AAA8NMEAAboLAL0LALsOALoDALpBPMe4uObExOiVktpBOsMEALgAALgJALsGALkN
+        ALsOAbsIALwKArsLArcNALsLAL0LALsOAroJALsLALsLALoLALsMAL4JAL0JALsNALsLAL0MALkKAbwK
+        ALoJALsNALsMALoHALsKALkOAbsLAL0MAL4LAbkNAL0LALsIALoJALsLALoMAbwJALsOALwNALoLALsL
+        ALsHAboNALoLALoJALsLALsLALsKAbwNALoLALoLALsLALoLALoLALsLALsAADw0wQAAuwsAvQcAvQsA
+        ugwGuc3Q7P///P///v/+//r6+rm65ktHyAAAuAMBuQkBugsAug4AugsAuwsAuw0AugkBugkBugoBvAwB
+        vAwAuQwAvgkAuwsBuQsAuwsAug0AugsAug4CugkAuw8BuwkAvQsAug4AvAoCuwcAuwwAvAwBuwsAugkB
+        ugsAuwkBugwBuwsAuw0BuQ0AvQwBvAwAugkAuwsAuw0Auw0AuwsAugkAvQ4BuwkAuw0Aug0AugkAuwsA
+        ugsAuwsAugsAuwsAuwsAuwAAOTPAAwG5CwG5CQC7BwG6FA654uPx/f///f78/f78/////v/7/v/6qabd
+        JiS+AAC2CQG6CQG6CwC7CwC7CwC7CgC5CQG6CwC9CwG5DAG8CgC5DgC8DQC7CwC7CwC7DAG8CwC7DQC7
+        CgG8DQC6CQC9CAG8DAC6DQC6CwC6DAK6CwC9CwG5DQC9DQC9DAG8CwC6DQC7CwC9CwG5CwC6CQC7DQC6
+        DAC+CwC6DAG7DwC8CwC7CgC6CQG5DAK6CwC9CAC5CwC6CwC7CwC6CwC7CwC7CwC7AAA7NL8CAL4LALsO
+        ALwJALsJBLvIzOj8/v/9/P77/vz9/P/5/v3///z9///i4vJcW8kCAbUGALoNAbkLAL0JAbkNALoNALsJ
+        ALsLAL0OAbsOALwIALoHAb4JAbkLAbkKAL4MAbwLALsHAL0NALsJAboHAL0KAL4JALsOALsLALoKALgG
+        ALkKAbwKAbwKALkKAbwJAboKAbwJAL4GALoMAbsJALsKAL4JALsKAroJAboJAboHAboLAL4KALoJAboJ
+        AL0LALoLALsLALoLALsLALsLALsAADw0wQEAugwBvAoAuQkBugIAt3x40f////39/f3+/P/9/f/+//z+
+        ///+/v/+///9/JGT2QwKuAUAuQsAvQkAuwsAvQsAugwBuwkBugsAugwBvAgBtgQAtAUAtQkBugkBuQUA
+        uQEAtwMAtgwCugcAtQUAsggBtgwBuwkBugAAtgkEuxULuwUAtwIAuQkAuwwBvA0BuQAAtwgAuhALugcA
+        twABugkBugsAugoCuwMAtwMAtg4JuAwEtQABtwkBug8BuwsAuwsAuwsAugsAuwsAuwsAuwAANzS/AwC6
+        DQC9CwC7DQG5AwC9Hhm87Ov1//7//f78/v7+yMfp1tjw/f/+/v/9/v7+//7/wsLmHR+5AQC8CwC7CQG6
+        DgC8CwC6DQC7BwK8BgG4aGXMw7/irq7eHBO9AAK7RT/Gvb3lwLzgNzG+g4DVwb/je3fQAAC7DAS8gHzO
+        zc/u29jxv7/nUk3GAAC5CgK7AAC5Yl/NwsHo2tryxsXlUlLEBQC5BwC7AAC5Qz/Atbff19vu0c/sfnrT
+        EAi5CAC4CwC7CwC7CwC6CwC7CwC7CwC7AAA5M8ADALwJAboNALoLALsMAL4AALeDgtL//v/8//v///9z
+        d9ANDbOend38//3///77/f7////Y3O81Nb8CALcKALkJALsLALoLALoLAL0GAbo6M8T9/////v9vbtAB
+        ALGxt+L///7b2PELCLvCwOr///+oquQAALZ/gNH///////7///r9///3+/VEP8QAALRnYs/9//f//v//
+        //7////8/PxNScYAALhDQsf49vb7/////////f/9//yhn9sCALcLALsLALsLALoLALsLALsLALsAADw0
+        wQEAvAsAuwsAuwwBvAsAugkBuQwKutHS7P79/////97h8BIPuQIAuH5/0Pr9+/////v9/f/+/+Xl80BF
+        wAABtw0AvQsAugkAvQsAugwBvAUCtpea3v3//9TT7VtYxvj7+f///F1ZygAAuLu76f///6Cf4w4IufDx
+        9f3//JWT2Skpvaqr3v///qSn3gsIstbT7f///sDA6G5tzc/R6f3//MG95gcFs7e54v///+Lf7m1szKSl
+        3//+/vz89j00wAQCugsAuwkBugsAugsAuwsAuwAAOzS/AgG7DAG8CwC7CwC7CwC7CAC5BQK2Uk/D+P75
+        /v/7///+gX7UAQC0AAG3ZmLJ9fb0/////f78+///6OvzPTvDAwG4CQG6DQC7DAG7CQC7BQC5LyfB+ff3
+        /v/66e/2////0M7sDgS8AgC4vbrr//7/np7kDgy6lJHZoJzeFhG6BAS0pqXd/f//vb/nOzjD//34+/z6
+        PDjAAACwTkrH6+z2mpjaKie57/H5///7YVvKAACyEQu42d3v/f//gnzVAAC4CwC7CwC6CwC6CwC7CwC7
+        AAA8NcABALoLALoLALoLALsLALsLAL0HAboEALiQjNf///7+//329/tGQ8EAALkCALhMTcXu7fb//v3/
+        /fz////c4fAqKb8DAbkMAbwLALoLALsNAL0FAbiPjtj+//3///74+f1VU8sAALgBALq7vOj///6fo+QB
+        ArgAALYkILyIhtjU1u7//////v2RkddTU8n9//7p6vQcFb4DAr4OCbgkIL8BALQ+Osn///v6+vo1K8UA
+        ALgBALezs+H///+goOAAALgLALsLALsLALsLALsLALsAADw1wAEAugsAugwBuwsAuwsAuwsAvQoCuwYA
+        vRIRu8nO5////////N/e8iYjvAIBvQAAu0VHxO3w9f3///78+//+/8jO6xAMuQcBugsAuwoAug0CvAAA
+        t0lHw/39/f3//+rs9B8YvAUAuQQAubm86f3+/6Kk5QIAuDw5xevs8P/+/f3////+/tfU7hsZuV5bzv/+
+        /+Xm9BoTvAIAuwcAuwIBvQACuD88x////vf5+jIpvwIBuwAAuK+t4f///6Sl3wABuQwBvAsAuwsAuwsA
+        uwsAuwAAOzPAAQC8CwC6CwC6CwC6CwC6DAC+CwC6CAO6AAC7NzDB8fX2/f78+///y8joEhG7BQC6AAC5
+        SkjD8PT1/v7+//79/v7+nZzcAAC7BwC9DgC8CQG5CgK6urri//79///+/f//iIjUAQC0BQC6vLzq/v/7
+        o6LkAgC3ubLl///+8fb0wcPlcHHLGhS5AAG3UEzJ/v/98/j3KyjBAAC4Hhi5UUjHFhO8My3C9/v8////
+        TkTGAAG0BwC1ys7r/v7+jo/ZAAC4CQC7CwC7CQC7CwC7CwC7AAA8NMECAb0LALsLALoLALoLALoLALsL
+        ALoNALsLAb8CALljYcv///7//v76//6us+AIBbkKALkAArhWV8n8+fv+//v+//v//fxbV8gEALcKAbwB
+        ALpGQcT//v329fesqdr//v/n6u8ZFrkCALm6u+f///+goOYAALfNzev+/v5tbMwAALKanN3PzOxbXMoa
+        Ernu7fb9//ygntosKbqkqN39//60seIMCLXP0en////CwuY0NL52ddH5/Pr///9UTMgEALgJALsLALsJ
+        ALsLALsLALsAADs0vwEAvAsAuwwBuwsAugkBugsAuwsAug4AuwwBuwsAugABtZiX2f///v/+/f7+/paV
+        2QAAuAkAvQAAuHJw0P////7//f3//+Xl8ygivQQAvgkFvL++6v///rS04hkTuODg8P///4iI1gIAs8HA
+        6v/+/qWk5AABt5CR1f/9/87O7LSz3/3//v//+0dEwgAAtJSU2v3///////n6+P/9/P3//29o0AAAs2pn
+        zv7//f3//vz6+v///v///8vM6BMJuQkBugsAuwsAugsAugsAuwsAuwAAOTS/AQC6CwC7CwC7CQG6CQG6
+        CwC7CwC6CwC6BwC7DAG7BQC6DAa3vb3l/v3//v/9/v/7dHHUAAC4CgC+BAC3oJ/f///+/f78/f/+o6Xf
+        BAC3PDnF6ez05+j2TUjDAAC2f3vU6e340tDtEQ64qqfl6+z6lpfbAQC8GBa8rq/h+/z6////6ur2h4fV
+        CgS3BwG+GBG6oZ/a7fD1////6+31j4vXCga5CQG6CQS5f33W4uX0/P/78vX5tLjhKiq8AwC6DQC6CwC7
+        CwC6CwC6CwC7CwC7AAA8NMEBALoLALoLALsLALsLALoLALsLALoLALoNAbkHALsJAbkAALgjIbvX2+7/
+        ///+//3//fxhW8wAALkGAbsYEr3Oz+v///7+/f///vpXVcwICrwhG7wdGLsKAbwJA7wOCLsfGrsfG7oP
+        CsEZErsfGboUErgOALwGAboIALktJ8I5NsIgG74EALcHAboOAroEAroJALkpH787NsEgG7wGAbYHAboN
+        ALsJALsDALwVFro4NcEuJsAFArUCALsMAbsLALsLALsLALoLALsLALsLALsAADw0wQEAugsAugsAuwsA
+        uwsAugsAuwsAugsAuwkAvg4AvA0AuwoAugMBuSoovdjZ7v/+//7//fL09FpWzQAAuAABtzc2wvn39v3/
+        //3//trY7BINtgIBvQUAug0BuQsAvQwAvgIAuQcCvAkBugYBuwMBuQkBug0AuwoBvAgAugUAuQIAuAcA
+        uw0AvQ0AvQkBuQ4BuwsAuwUAugMAugcAuwoAugsAugoAvgoCugsAvQcAuwIAtwEAugUAvAkAuwsAugsA
+        uwsAuwsAugsAuwsAuwsAuwAAPDTBAQC6CwC6CwC7CwC7CwC6CwC7CwC6CwC7DAG7DQG5CQC7DgG7CwC7
+        BQC6KiK8y83s////wsbiv8PfY2DNAQG5AAC4hILU/v/9//7+///8h4nXAAC2CwC6CQG6CwC6CQC7DgG7
+        CwC9DAK6DAC6DQC9DQC2CgK7CQC7CwC7CwC7CwC6CgC5CwC7CwC7CQC7CwC9DAG7DAG7CQC7CgK7CwC6
+        CwC6CQG5DAK6CwC6DAG8CwC7DAG7CwG5CwG5DAG7CwC7CwC7CwC6CwC7CwC7CwC7AAA8NMEBALoLALoL
+        ALsLALsLALoLALsLALoNALoJALsLALoLAL0JALsLAbkNALsCALcfHL+pr9x7g8mPltWlqdpTVMYEALgN
+        BrvS1+z+/v7//v/u8fYsJL4GALoJALsOAbsLALsLALsLALsLALsKArsJALsLALoHAboLALsLAbkNAL0L
+        ALsMAbsLALsLALoLALsOAbsKALoLALsOAbsOALwLAL0LALsNALoNALsLALsLALsLALsLALoJAboNAr0M
+        ALkLALsLALsLALoLALsLALsLALsAADw0wQEAugsAugsAuwsAuwsAugsAuwsAug0AugYAuQwAvg0BuQoA
+        ugsAuwsAvQsAugEAvBgUuYuL0Z2n1lJYw297yVZXxwAAsFRUyv7/+//9/P///6Gh3QIAuAkBuQsAuwsA
+        uwgAuQsAuwwBvAgAugsAugsAuw0AvQsAugsBuQwBvAsAugkBuQgAugoBvAsAuw0AugkAuwkBugsAugwB
+        vAwBuwsAugsAvQkAvQsBuQsBuQsAuwsAugsAugkAuwkAuwsAuwsAuwsAugsAuwsAuwsAuwAAPDTBAQC6
+        CwC6CwC7CwC7CwC6CwC7CwC6CQC+DgG7DQC6CAC6DAG7DQC6CwC7DAG7CwC6AwC9Ew3AlpTahYXRT1W+
+        hpHPY2TGBwK5vrvs///+/f398vX5My3CAAC5DAC+CgC5AgG7AAC4AQC3BAG1AQC2AAC5BQC5CQC7CAG8
+        BgC6DAG8DQC7CwC7CwC6CwC6CAG+CwC7DQC6DAG8CwC7CwC7DAG7CQG6DgC8DAK6CwC7DAC8DQC7DAG8
+        CwC7DQC7CwC7CwC7CwC6CwC7CwC7CwC7AAA8NMEBALoLALoLALsLALsLALoLALsLALoJAboNALsLALsL
+        ALsLALsIALgMAL4LAbkLALoOALwHArsCA7l9fNKgo9o0OLx1ecg1Ob1iZ83/+vv+/f/9//+lpt4BALYJ
+        ALsBAbkhHL9xbtGprd61uOSend1oZM4pKL4DAbkGALoKAbwLALsLALoMAbsKALoMAbsNALsNALsLALsJ
+        AboLAbkNAbkNALoLALoLALoLALoKALoLALoLAbkKALkMAbwJAboLALsLALsLALoLALsLALsLALsAADw0
+        wQEAugsAugsAuwsAuwsAugsAuwsAug4AugkAuwcAuwwBuw0AuwwBvAsAuw0AugkAuw0AugkBuQYBuwQB
+        tVpczKOe3EJDu1dcwlRbwtzf7v///P/+//j59yspvwAAtlhSyeTo8////v/////+/v7+/v////T1+aqs
+        4jk4vgAAuAYAvQwBvAsAuwoBvAsAvQsAugwBvAsAuwsAuwsAvQkAuwsAug0AuwsAuwsAuwkAuwkBugsA
+        uwwBvAsAuwsAugsAuwsAuwsAugsAuwsAuwsAuwAAPDTBAQC6CwC6CwC7CwC7CwC6CwC7CwC6CwC7CwC7
+        CwC7CwC7CwC7CwC7CwC7CwC7CwC9DAG7CQG6CwC6CwC9BAG1Pj3DoqnbY2jDQEW4l5/U/f/+/v/9///+
+        enTTPT2/9fb6/v/7/f39/fz+/P37+/78+/3+//7///7/9/r4naHcJCC8AAC4CQC7CwC7CwC6CQC7CwC6
+        CwG5CQC7DAG8DQC9CgG8DQC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC6CwC7CwC7CwC7
+        AAA8NMEBALoLALoLALsLALsLALoLALsLALoLALsLALsLALsLALsLALsLALsLALsLALsLALsNAbkMAbsL
+        ALsLAL0KAbwAAbogGr+Dg9GJh9NgYcPk5u7//v/+/v7W1OrOzOr//v79//7//v/8/v////7+/v79//75
+        //r8/fv+//39//7j4/FsadAEALMCALgOAL4LAL0KALkLALsJAboLALoJAboLALoMAbsLALsLALsLALsL
+        ALsLALsLALsLALsLALsLALsLALsLALoLALsLALsLALsAADw0wQEAugsAugsAuwsAuwsAugsAuwsAugsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsBuQsAuwsAvQoBvAoAugsAvQ4AuwYAvQAAuU9Myn6Fyr6/4f//
+        //j//P//+/7+/v7+/vr4+J+f24B62Y6O2sHB6fLz9/////3+//n/+v39/f////7/+6+x4SYguwAAuAsA
+        uwkBugkAuwkBuQkAuwwBuwsAugsAvQsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAugsAuwsA
+        uwsAuwAAPDTBAQC6CwC6CwC7CwC7CwC6CwC7CwC6CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CAC6DgC8
+        CwC6CgC5DQG5CwC6CwC6CwC6CQC7AAG6FhS6QkLE9vX5+////Pv9//7+////envTAACyAAC5AgC3AgC3
+        KCW+dHPTyMrs//////79+P38/v/7//7/2+HuR0bEAAC4DAC+CgC6DwG9CQC9CQC7CwC7DAG8CwC7CwC7
+        CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC6CwC7CwC7CwC7AAA8NMEBALoLALoLALsLALsLALoLALsL
+        ALoLALsLALsLALsLALsLALsLALsLALsLALsIAbwIALoMAbwLALoJAL0NALoLAL0NAL0NAbkLALsFALoC
+        ALi/vuj///z//fz+/v77/f0yMsIAALwGAbgkHr80LsEAALkBAbMOBrd3d9Hw8/j7//7//P3/+/z//v/3
+        +vhmZcwAALYNArwMALkNALsLALsJALsLAbkLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALoL
+        ALsLALsLALsAADw0wQEAugsAugsAuwsAuwsAugsAuwsAugsAuwsAuwsAuwsAuwsAuwsAuwsAuwkAuwsA
+        ugkBugoAuQoBvA0AuwkBugwAvgsAugkAuw4AvAkAuwAAuGdk0fz/+//8/v7+/v///k1LxwAAthkVu93b
+        7/z9+7q94zcywwAAuAIAuDY2vtXY7f////z7/fv8////+/7+/nZ41gAAuAkAuwwBuwsAuggAuQsAuwsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAugsAuwsAuwsAuwAAPDTBAQC6CwC6CwC7CwC7CwC6
+        CwC7CwC6CwC7CwC7CwC7CwC7CwC7CwC7CQC7CQC7DwO7FA+4BgC6DQC6DAG7CwC6CQC9DQC6DgG7CAC5
+        DAG8AwG5LyjF9vf7//79+/78/f//p6TbAAC2Jx+/+Pv5//7///3/9Pb3hIjXEgy5AQC3Hx66vL/l/f/+
+        //3///39///+///+e37TAAGzCwC+CQC7CwC6DQC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7
+        CwC6CwC7CwC7CwC7AAA8NMEBALoLALoLALsLALsLALoLALsLALoLALsLALsLALsLALsLALsJALsJALsH
+        ALtUUczX2fE3M8IAALsNALsJAbkNALsLALsLALoLALsMAbsHAboNBb3OzOn9///9/f3+//vu8fYqKMEE
+        AbSOj9n///v////9//7///7Jx+syKMIAALEODLq3ueL+//3+/f/7/f3///z8/v5rbM4CALcLALsNALsJ
+        AboLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALoLALsLALsLALsAADw0wQEAugsAugsAuwsA
+        uwsAugsAuwsAugsAuwsAuwsAuwsAuwsAuwwBuwgAuQQAuF9azf///9PU7iAbvgAAuQ0AuwsAugsAuw0A
+        uwsAugkBugoAvgAAtImL2f7//f38/v/9/f///62u4AAAtQkCt5SZ2P3///7/+/z//f/+/+nr84OC0iAh
+        vwkJtb+95/////39/f38/v7/+/L1+T05wQIAuQkBuQkBugsBuQkBugsAuw0AuwkAuwoCuwsAugsAuwsA
+        uwsAuwsAugsAuwsAuwsAuwAAPDTBAQC6CwC6CwC7CwC7CwC6CwC7CwC6CwC7CwC7CwC7CwC7CwC7CwC7
+        CQG6BAC4MyzD+Pv5/f//wcLkHRq9AAC4DgG7CgC8CwC7CAC8CAK7CgC5AQG5U1DL/v/7//38/P7+/v3/
+        /P/6XFjJAAC4BQK2hIHX//7+/f/8//v//v/9//7/5u3wYGPLGBK3w8Tq///+/Pv9//7+/v7+vsDpCga5
+        CgC+DQC9DQC+CwC9CQG6DAG8DgC8CwC6CgG8CwC6CwC7CwC7CwC6CwC7CwC7CwC7AAA8NMEBALoLALoL
+        ALsLALsLALoLALsLALoLALsLALsLALsLALsLALsNALsLALsIALkHA7rExuj//////v/EyucdHrwAALkM
+        AbwKArsOALsLALoMAbwDALo0LMb1+vj///719Pj//Pv//v3k6fIlIb0AALgAArRqZ87w8Pb////+//3+
+        +/3//v/5/fiVl9hcW8Pj4fT///z8/fv9//7///s8NsMCALgLALsLAbkMAbwLALsLALoLALoMAbwLALoL
+        ALsLALsLALsLALoLALsLALsLALsAADw0wQEAugsAugsAuwsAuwsAugsAuwsAugsAuwsAuwsAuwsAuwsA
+        uwsAuwsAuwkAuwAAuFxcyP7/+/3+/P/+/tnZ8TQzvwIAuQcAvQkAuwsAuggAuQYAvh0Yuers9v///+Hi
+        8Ofq7v///v///7K25gkHtQgAugAAtisrv7y+5vz//f///v/9/P///vz/+tzh6tDT6PX2+v79//7//f3/
+        /31/0wAAtgwBvAsAuwsAugsAuwwAvgsAuw0Aug4AvAoAugsAuwsAuwsAugsAuwsAuwsAuwAAPDTBAQC6
+        CwC6CwC7CwC7CwC6CwC7CwC6CwC7CwC7CwC7CQC7CwC7CwC7CwC7DAG8CQC7Cge3zcvp//7//P37/v/7
+        7/D0ZGHPAQK4AwG5EQC+CQC7BgC6Fw685efy///+5+ryrrHd////+/78/v/9ioXUAAC3DAC+BAC9CAS3
+        bWzO6+31/////f////39/v/67uzy+PT5/v/7/vv9//7/lZHdAAC3CAK7CwG5CwC7CgK7CAC6DgC8DQG5
+        CwC7CwC7CwC7CwC7CwC6CwC7CwC7CwC7AAA8NMEBALoLALoLALsLALsLALoLALsLALoJAboLALsLALsJ
+        ALsJALsLALsLALsLALsOAL0BAblGQcTy9/b+//37/f3///7///ubmdsdHLgAALQCALcBAbNTT8b4+vr+
+        /f/7/f2Egs7w7Pf9//7+/fn+/PtkYNEAAbcKALkKAbwCALkqKL6cn9z8/v7///7//v7////9/P7//f3/
+        ///y9flNS8YAALgCALgGAL0PAbsNALoHAboLALoLALsJAboNALsLALsLALsLALoLALsLALsLALsAADw0
+        wQEAugsAugsAuwsAuwsAugsAuwsAugkBugsAugsAuwsAuwkAuwsAuwsAuwsAuwkBugkBugAAuHd20v//
+        +/z+/v7+/v7/+//+/9/d8Xd50VBOynZ40Ovp9f/+///9/P///3t20ZCS2P3//vr9+////vPx90lFxgIA
+        twsDvA4AvAUAuQICtEtJxbm25/L09P7/+v3///78+/3+9dPa6YOFzHZ21D88xwUAuQ4Buw4AugkAuwcB
+        ugoBvAsAvQ0AugsAuwsAuwsAugsAuwsAuwsAuwAAPDTBAQC6CwC6CwC7CwC7CwC6CwC7CwC6CQG6CwC6
+        CwC6CwC7CgG8CwC7CwC7CwC7CwC9DQC6CwC7AAC0g4DV///+/////fz+/f76//////7////7/P/9////
+        /Pz8+/39/f/+ionZGxi76+31/////P35/P/76uv1ODK/AAC5CQC7DgK6CQC9AAK5BQC6REHGpKjZ8vP3
+        ////0tDmr7Xg6Ojuzs/j1dzrREnDAAC4BAC9DgC6DQC7CQG5DAC/CQG6CwC7CwC7CwC6CwC7CwC7CwC7
+        AAA8NMEBALoLALoLALsLALsLALoLALsLALoLALsLALsLALsLALsLALsLALsLALsLALsLALoLALoPAbsG
+        ALoAAbdhYsrt7vj//////v39/f38/fv//vr//f37/f7+/v7//P3///6CgtYAALRjXsv+//3//v///fz9
+        ///k5vAyLb4AAbcMAbwNALoKArsJALsCALgEAbU6PMCjpN7w9fP1+Pb6+vrv8fHd5OegqNBQTcEEAbQD
+        ALoHALsMAbwKALkJALsLALsLAL0LALoLALsLALsLALsAADw0wQEAugsAugsAuwsAuwsAugsAuwsAugsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAvQ4AvgkBugoAvwgAugAAuSopv6qq4P/+/f3////+//39/fz+
+        /vv+/P7//f////b4+TIywgMBuQEAt4yN1////v7+/v3+/P3//+Dk7zUxwAEAtgkAuwsAuwsAug4AugkA
+        uwIAuAgAszMwwZeX0+vs9tDX6OXh7Zec04+R0ra8319fyR8dvQUAtwkAvQsAuw0AugsAuwsAugsAugsA
+        uwsAuwAAPDTBAQC6CwC6CwC7CwC7CwC6CwC7CwC6CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CQC7CwG5
+        DAG7CwC6DgC7DgC8BQC5AAG1QD7Go6Hc7Or2/f/8//7+//7//v/70tLqVFHEAAG3CAG+CQC7BAG1oZza
+        +/////39//3///7/6eb1RETGBAC4DgC8CQG6CwC7CwC6DQC7DAG7AwC6AgC3KSi+fYHQ4uXt+Pb26+vx
+        4eTpen3OY2XJVlrLCgW8DAC5DAC5CwC7CwC6CQC7CwC7CwC7AAA8NMEBALoLALoLALsLALsLALoLALsL
+        ALoLALsLALsLALsLALsLALsLALsLALsLALsLALsNAL0LALoLAbkMAbwKALkMAbsIALkAALgCALgiHr1O
+        SMthX9BdXsxBPskOCbgCALcIAbwLALoNALoIALwLCrihoeH///7//v79//n////u7vRaXs4AALYJAboO
+        AbsLAL0LAbkMAbwKALoMAbwCALgDArYuKMNoasi2wN7v8/S6wt8tJb8lIMMKAbwHAboLALoKArsLALsL
+        ALsLALsLALsAADw0wQEAugsAugsAuwsAuwsAugsAuwsAugsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwoC
+        uwsAugsAvQoBvA0Aug4AvgsAuwwBvA4AvA0AugQAuQABugACuAAAuAIAuQcCuQoAvgsAuwwAuAsAvQsA
+        uwUAugsKuKSl3//+/fz//fz7/f////79+Xt81AQAtwYAvgsAuwsAuw0AvQsAugsAuwwCugkAuwMBuQIA
+        uBYNuFxcyLG04MDF5IKG1T89xQ4IuwkAuwgAuQsAuwsAuwsAuwsAuwAAPDTBAQC6CwC6CwC7CwC7CwC6
+        CwC7CwC6CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CgG8DAG8CwC6CQG5CQC7DQC7DAG7CQG6DAG8
+        DQC7DQC6CQC+DAC/DQC6CQG6DQC6CwC7DQC6CwC6CwG5CwC6BgG7CgO4lpXZ/v/9///+/Pz8///7////
+        oaLcFxC3AQC3CQG6DQC6DQC7CwC6CwC6DAC6DAG7CgC+CwC4AQC6AAC0OTXEjJLTwsvfc33LFRO5CgC+
+        CgC4CwC6CwC7CwC7AAA8NMEBALoLALoLALsLALsLALoLALsLALoLALsLALsLALsLALsLALsLALsLALsL
+        ALsLALsNALoKALkKAbwJAboNALoNALsLALsLAL0NALoKALkMAbsLALsLALoMA7gLALsLALsKArsLALoL
+        ALsLALoKAbwJAL0JALsAAbNwbs70+vX9///+/f///f39///M0OkyM78CALcKALoLAbkGALwNALsOAL4H
+        ALsIALwMAbsLAL0IALoHAboCALkpJr9ERcUQBr4JAboLALsLALoLALsLALsAADw0wQEAugsAugsAuwsA
+        uwsAugsAuwsAugsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuw0AugkBugwBuw4AugsAuggAuQkAvQsAugsA
+        ugkBugoAvgsAuwwBvA4AvAsAugwAvgkAuw0AuwsAugoAvgsAug0AugsAuwsAugkAvQAAtkA9wtDR7fz/
+        /f///P38/v////Dv+GZozgABtwUAvA0AuwkBugsAuw4AvAsAugsBuQsAuwwBvAkAuwsAuwYBuAYAug0A
+        ugsAugsAvQkAuwsAuwsAuwAAPDTBAQC6CwC6CwC7CwC7CwC6CwC7CwC6CwC7CwC7CwC7CwC7CwC7CwC7
+        CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CQC7CwC7DQC7DAG8CwG5CQG6CgC+DQC7BwC7AQC2
+        AQG5BgC6DAG8CwC6CAC5CQC7CwC9DAG7AgC5FRO5hIXV9vf1/////////f///v/9paPfGxy6AAC4BwG6
+        CQC7DQC6CgC6CAG+CgC5DgC8CAC5DAK6DQC7CQC7CwC7CwC7CwC6CwC7CwC7CwC7AAA8NMEBALoLALoL
+        ALsLALsLALoLALsLALoLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsL
+        ALsMAbwMALkIArsKALoMAbwLAbkLALoBAbkXDrhEQcY+N8IQCbgAALYMAroOALwLALoJALsJAboOALwH
+        ALsAALQ2MMWkpd35//r///////v///7a2+9YVckDALQAALgMAbsMAbwKALkMAbwIALkMAbsLALoLALsJ
+        AboLALsLALsLALoLALsLALsLALsAADw0wQEAugsAugsAuwsAuwsAugsAuwsAugsAuwsAuwsAuwsAuwsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuw0AugwBvAgAvA4Avg0BuQsBuQMAvSYivsnI
+        6v3///j9/MzQ7U5KxwAAuAwBvAsAuwkBugwBvAwBvAsAvQ0AuwIAuAICtEZDyKyt3/r3+f/+/v/+////
+        +5qZ3SAcuwAAtwcBug0BuQoBvAkBugoBvAkBug8AvgsAuwsAuwsAuwsAugsAuwsAuwsAuwAAPDTBAQC6
+        CwC6CwC7CwC7CwC6CwC7CwC6CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7
+        CwC7CwC7DAG8CwC6DAG7CwC6CwC7CQC7AgK0npvZ///////7///+/f/+9/n5RkbIAAC5DAK6DgG7CgC6
+        CwC6BwG6DgG7CwG5CQC9AAC4AgG1NDXDm5re3+Hz/f/7//794uPxWlvLAwG5AAC7CAC6DQC7CQG6DAG8
+        CgC8DgK4CwC7CwC7CwC6CwC7CwC7CwC7AAA8NMEBALoLALoLALsLALsLALoLALsLALoLALsLALsLALsL
+        ALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALoJALsKALoIALjL
+        yOj///79/f39/f39/f3///7JyuQODLkHAL4JALsLAr0IALwKAL4MALoKAbwLALsLALoKAL4BAL0AALgW
+        EL1VVcmsqt7s7/P+/v68veM0MsEGAbgLALoLALsKALoKAroLALsLALsLALsLALoLALsLALsLALsAADw0
+        wQEAugsAugsAuwsAuwsAugsAuwsAugsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsA
+        uwsAuwsAuwsAuwsAvQwBuw0AugkAuwsAuwsAuwQAuLe45P///vv/+v/8///8/vz+/v7+/puj2BMKtQQB
+        uwoAuQwBvAkAuwwBuwkAuwsAuwsBuQsAug4Buw0AuwcBugAAuAEAthkavkdEyYmK2q+v31tgxwcAuw8B
+        uwsAugYAuQsAuwsAuwsAuwsAugsAuwsAuwsAuwAAPDTBAQC6CwC6CwC7CwC7CwC6CwC7CwC6CwC7CwC7
+        CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7DAG8CgK6DQC6CQC7DQC6CgK7
+        AAC4aGfP///+//7+//z9/f39//3+//z+4ujvfX7PDAq4EgW7CQG6CwC7DQC9DQC9CwC9CQC7DQC9BwC7
+        CwC6CwC6DgG7CgK7BwC5BAK6AgC3DQS5HRTCCgG8CQG6CwC6CQG6DQC7CwC7CwC7CwC6CwC7CwC7CwC7
+        AAA8NMEBALoLALoLALsLALsLALoLALsLALoLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsL
+        ALsLALsLALsLALsLALsJAboMALoLALsLALsMAbwLALoLALoIBbWUk9X9//7+/v77/f37/vz+/v7//vrC
+        xuKhqNplbcsBALcJAboLALsJAboJALsOALwIALkNALsKALkLAL0JAboLALsOALwJArcNALsJAboIALgM
+        AL4LALoMAbsLAL0MAbsLALsLALsLALoLALsLALsLALsAADo1wAAAuQ0AuwkBugkAuwwBuwsAug4BuwsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAugsAugsAugsAugsA
+        ugsAugsAugsAugUAtWRizODk7//+//z//f////v8+MXJ5aes2ZCV1FhdyhAJuAkAvQsAuwoAugkBugsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwkBugsAugwBuwsAuwsA
+        uwsAuwAAOzS/AQC6CwC7CwC6DAG7CwC+DgK6CwC9CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7
+        CwC7CwC7CwC7CwC7CwC7CwC7CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CQG5AAC1LCq/eXfRtrnm19bq
+        6+zw0dLsvsLfbnPIOkK7DwO7CwC6CwG5DQC7CwC9CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7
+        CwC7CwC7CwC7CwC7CwC7CwC7DQC6DQC9DQC6CQG6CwC7CwC7AAA6NcABALoLALoHAboJALsNALoLALoM
+        AL4LALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoL
+        ALoLALoLALoLALoLALoLAbkLAr0GAL0AALQFALoWDLomHLwSC7ocG7kyLL8aE7oIAbwLAL0NALoJALsL
+        ALsLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoMALoIAb4LALoP
+        AbsLALsLALsAAD8zwQABugkBugsAvQsAuwkAuwkBugsAugsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwoCugsAugkAuwsAugsA
+        uwcAuwQCugYAvAkAuwUAugkAuw4AvAkAuwcBugoAugwBvAsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwwBuwkAuwsBuQ0AuwsAuwsAuwAAOzS/AQG5DAG8DQC6DQC9CwC6
+        CwC9CQC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7
+        CwC7CwC7CwC7CwC7CwC7CwC7DgC+CQC7CgK7CwC9CwG5CwC7CgC8DgG7DAC6DgC8CQC7BwC9CwC6DgC8
+        DAG7CwC6CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CgC6DQC7
+        CwC7CwC7CwC7CwC7AAALALsLALsLAL0KArsJAboOALsNALsJAboLALoLALoLALoLALoLALoLALoLALoL
+        ALoLALoLALoLALoLALoLALoLALoLALoLALoLALsLALsLALsLALsLALsLALsLALsLALsLALoLALoLALsN
+        ALsNALoMAbsJAboJALsIAbwJAboMAbwLALoMAbwKALoKALwOALwLALoLALoLALoLALoLALoLALoLALoL
+        ALoLALoLALoLALoLALoLALoLALoLALoLALoMAbsJAboJALsKALgLALsLALsAAAsAuwsAuwgBvAsAugoC
+        ugkBug0BuQsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsA
+        ugsAugsAugsAugsAugsAugsAugsAugsBuQsBuQkAuwkCtwwAuQ4AuwwAuAsAuwsAuwsBuQsBuQ0AugsB
+        uQsBuQsBuQsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAuwsAuwsAuwsAuwsAuwsA
+        uwsAuwsAuwsAuwsAuwsAuwAACwC7CwC7Hx68BwK8DwC8BwG6DQG5CgG8CwC6CwC6CwC6CwC6CwC6CwC6
+        CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CgK7
+        DQC6DgK6BwG6CQC9CwG5CwG5DAK6DAG8CQG5CQC7DAG8CwC6CwC6CgK7CwC6CwC6CwC6CwC6CwC6CwC6
+        CwC6CwC6CwC6CwC6CwC6CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7AAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+</value>
+  </data>
+</root>

+ 1315 - 0
.svn/pristine/3b/3bb78abfdf06c37c978c3fd27d87d5926b2bb1d5.svn-base

@@ -0,0 +1,1315 @@
+using System;
+using System.Data;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+
+using Core.Mes.ClientFrameWork;
+using Core.Mes.IBaseInterface;
+//using Core.Mes.ServerFrameWork;
+
+using Infragistics.Win.UltraWinGrid;
+
+namespace Core.Mes.ClientPurviewManager
+{
+	/// <summary>
+	/// FrmRole 的摘要说明。
+	/// </summary>
+  public class FrmRole : Core.Mes.ClientFrameWork.FrmBase
+  {
+    private Infragistics.Win.UltraWinToolbars.UltraToolbarsManager ultraToolbarsManager1;
+    private System.Windows.Forms.Panel FrmRole_Fill_Panel;
+    private System.Windows.Forms.Panel panel1;
+    private Infragistics.Win.Misc.UltraExpandableGroupBox ultraExpandableGroupBox1;
+    private Infragistics.Win.Misc.UltraExpandableGroupBoxPanel ultraExpandableGroupBoxPanel1;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel1;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel2;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel3;
+    private Infragistics.Win.UltraWinEditors.UltraTextEditor ultraTextEditor1;
+    private Infragistics.Win.UltraWinEditors.UltraTextEditor ultraTextEditor2;
+    private Infragistics.Win.UltraWinEditors.UltraComboEditor ultraComboEditor1;
+    //		private Infragistics.Win.UltraWinEditors.UltraTextEditor ultraTextEditor3;
+    private System.ComponentModel.IContainer components;
+    public DataSet _roleData;
+    public string _selectSQL;
+    public bool _saveFlag = false;
+    public bool IsAdminFlag = false;
+    private System.Windows.Forms.Panel panel2;
+    private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Left;
+    private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Right;
+    private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Top;
+    private Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea _panel1_Toolbars_Dock_Area_Bottom;
+    private System.Windows.Forms.Panel panel3;
+    private Infragistics.Win.UltraWinEditors.UltraCheckEditor ultraCheckEditor1;
+    private Infragistics.Win.UltraWinGrid.UltraGrid ultraGrid1;
+    private Infragistics.Win.UltraWinEditors.UltraComboEditor ultraComboEditor4;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel8;
+    private string[] _fileNames;
+    private DataSet _departmentData;
+    private Infragistics.Win.UltraWinEditors.UltraTextEditor ultraTextEditor3;
+    string operDepart = "";
+    string allDept = "";
+    private Infragistics.Win.UltraWinEditors.UltraTextEditor ultraTextEditor4;
+    private Infragistics.Win.Misc.UltraLabel ultraLabel4;
+    string selDept = "";
+
+    public FrmRole()
+    {
+      //
+      // Windows 窗体设计器支持所必需的
+      //
+      InitializeComponent();
+
+      //
+      // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
+      //
+    }
+
+    /// <summary>
+    /// 清理所有正在使用的资源。
+    /// </summary>
+    protected override void Dispose(bool disposing)
+    {
+      if (disposing)
+      {
+        if (components != null)
+        {
+          components.Dispose();
+        }
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows 窗体设计器生成的代码
+    /// <summary>
+    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
+    /// 此方法的内容。
+    /// </summary>
+    private void InitializeComponent()
+    {
+      this.components = new System.ComponentModel.Container();
+      Infragistics.Win.UltraWinToolbars.UltraToolbar ultraToolbar1 = new Infragistics.Win.UltraWinToolbars.UltraToolbar("Toolbar1");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool1 = new Infragistics.Win.UltraWinToolbars.ButtonTool("query");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool2 = new Infragistics.Win.UltraWinToolbars.ButtonTool("add");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool3 = new Infragistics.Win.UltraWinToolbars.ButtonTool("edit");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool4 = new Infragistics.Win.UltraWinToolbars.ButtonTool("del");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool5 = new Infragistics.Win.UltraWinToolbars.ButtonTool("close");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool6 = new Infragistics.Win.UltraWinToolbars.ButtonTool("back");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool7 = new Infragistics.Win.UltraWinToolbars.ButtonTool("add");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool8 = new Infragistics.Win.UltraWinToolbars.ButtonTool("edit");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool9 = new Infragistics.Win.UltraWinToolbars.ButtonTool("del");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool10 = new Infragistics.Win.UltraWinToolbars.ButtonTool("query");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool11 = new Infragistics.Win.UltraWinToolbars.ButtonTool("close");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool12 = new Infragistics.Win.UltraWinToolbars.ButtonTool("purset");
+      Infragistics.Win.UltraWinToolbars.ButtonTool buttonTool13 = new Infragistics.Win.UltraWinToolbars.ButtonTool("back");
+      Infragistics.Win.Appearance appearance1 = new Infragistics.Win.Appearance();
+      Infragistics.Win.UltraWinGrid.UltraGridBand ultraGridBand1 = new Infragistics.Win.UltraWinGrid.UltraGridBand("Band 0", -1);
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn1 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("Column 0");
+      Infragistics.Win.Appearance appearance2 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance3 = new Infragistics.Win.Appearance();
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn2 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("Column 1");
+      Infragistics.Win.UltraWinGrid.UltraGridColumn ultraGridColumn3 = new Infragistics.Win.UltraWinGrid.UltraGridColumn("Column 2");
+      Infragistics.Win.Appearance appearance4 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance5 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance6 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance7 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance8 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance9 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance10 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance11 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance12 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance13 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance14 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance15 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance16 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance17 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance18 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance19 = new Infragistics.Win.Appearance();
+      Infragistics.Win.UltraWinEditors.EditorButton editorButton1 = new Infragistics.Win.UltraWinEditors.EditorButton();
+      Infragistics.Win.Appearance appearance20 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance21 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance22 = new Infragistics.Win.Appearance();
+      Infragistics.Win.Appearance appearance23 = new Infragistics.Win.Appearance();
+      Infragistics.Win.UltraWinEditors.EditorButton editorButton2 = new Infragistics.Win.UltraWinEditors.EditorButton("part");
+      this.ultraToolbarsManager1 = new Infragistics.Win.UltraWinToolbars.UltraToolbarsManager(this.components);
+      this.panel1 = new System.Windows.Forms.Panel();
+      this._panel1_Toolbars_Dock_Area_Left = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+      this._panel1_Toolbars_Dock_Area_Right = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+      this._panel1_Toolbars_Dock_Area_Top = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+      this._panel1_Toolbars_Dock_Area_Bottom = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+      this.FrmRole_Fill_Panel = new System.Windows.Forms.Panel();
+      this.ultraGrid1 = new Infragistics.Win.UltraWinGrid.UltraGrid();
+      this.ultraExpandableGroupBox1 = new Infragistics.Win.Misc.UltraExpandableGroupBox();
+      this.ultraExpandableGroupBoxPanel1 = new Infragistics.Win.Misc.UltraExpandableGroupBoxPanel();
+      this.panel3 = new System.Windows.Forms.Panel();
+      this.ultraTextEditor4 = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+      this.ultraLabel4 = new Infragistics.Win.Misc.UltraLabel();
+      this.ultraComboEditor4 = new Infragistics.Win.UltraWinEditors.UltraComboEditor();
+      this.ultraLabel8 = new Infragistics.Win.Misc.UltraLabel();
+      this.ultraTextEditor2 = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+      this.ultraLabel2 = new Infragistics.Win.Misc.UltraLabel();
+      this.ultraTextEditor1 = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+      this.ultraLabel1 = new Infragistics.Win.Misc.UltraLabel();
+      this.ultraLabel3 = new Infragistics.Win.Misc.UltraLabel();
+      this.ultraComboEditor1 = new Infragistics.Win.UltraWinEditors.UltraComboEditor();
+      this.panel2 = new System.Windows.Forms.Panel();
+      this.ultraTextEditor3 = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
+      this.ultraCheckEditor1 = new Infragistics.Win.UltraWinEditors.UltraCheckEditor();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraToolbarsManager1)).BeginInit();
+      this.panel1.SuspendLayout();
+      this.FrmRole_Fill_Panel.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraGrid1)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraExpandableGroupBox1)).BeginInit();
+      this.ultraExpandableGroupBox1.SuspendLayout();
+      this.ultraExpandableGroupBoxPanel1.SuspendLayout();
+      this.panel3.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor4)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraComboEditor4)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor2)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor1)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraComboEditor1)).BeginInit();
+      this.panel2.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor3)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // ultraToolbarsManager1
+      // 
+      this.ultraToolbarsManager1.DesignerFlags = 1;
+      this.ultraToolbarsManager1.DockWithinContainer = this.panel1;
+      this.ultraToolbarsManager1.ShowFullMenusDelay = 500;
+      this.ultraToolbarsManager1.ShowQuickCustomizeButton = false;
+      this.ultraToolbarsManager1.Style = Infragistics.Win.UltraWinToolbars.ToolbarStyle.VisualStudio2005;
+      ultraToolbar1.DockedColumn = 0;
+      ultraToolbar1.DockedRow = 0;
+      ultraToolbar1.Text = "Toolbar1";
+      buttonTool1.InstanceProps.IsFirstInGroup = true;
+      buttonTool2.InstanceProps.IsFirstInGroup = true;
+      buttonTool3.InstanceProps.IsFirstInGroup = true;
+      buttonTool4.InstanceProps.IsFirstInGroup = true;
+      buttonTool5.InstanceProps.IsFirstInGroup = true;
+      buttonTool6.InstanceProps.IsFirstInGroup = true;
+      ultraToolbar1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] {
+            buttonTool1,
+            buttonTool2,
+            buttonTool3,
+            buttonTool4,
+            buttonTool5,
+            buttonTool6});
+      this.ultraToolbarsManager1.Toolbars.AddRange(new Infragistics.Win.UltraWinToolbars.UltraToolbar[] {
+            ultraToolbar1});
+      buttonTool7.SharedProps.Caption = "新增(&A)";
+      buttonTool7.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      buttonTool8.SharedProps.Caption = "修改(&U)";
+      buttonTool8.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      buttonTool8.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlU;
+      buttonTool9.SharedProps.Caption = "删除(&D)";
+      buttonTool9.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      buttonTool10.SharedProps.Caption = "查询(&Q)";
+      buttonTool10.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      buttonTool11.SharedProps.Caption = "关闭(&E)";
+      buttonTool11.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      buttonTool11.SharedProps.Shortcut = System.Windows.Forms.Shortcut.CtrlE;
+      buttonTool12.SharedProps.Caption = "权限设置(&P)";
+      buttonTool12.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      buttonTool13.SharedProps.Caption = "返回(&B)";
+      buttonTool13.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+      buttonTool13.SharedProps.Visible = false;
+      this.ultraToolbarsManager1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] {
+            buttonTool7,
+            buttonTool8,
+            buttonTool9,
+            buttonTool10,
+            buttonTool11,
+            buttonTool12,
+            buttonTool13});
+      this.ultraToolbarsManager1.ToolClick += new Infragistics.Win.UltraWinToolbars.ToolClickEventHandler(this.ultraToolbarsManager1_ToolClick);
+      // 
+      // panel1
+      // 
+      this.panel1.BackColor = System.Drawing.Color.Gainsboro;
+      this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Left);
+      this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Right);
+      this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Top);
+      this.panel1.Controls.Add(this._panel1_Toolbars_Dock_Area_Bottom);
+      this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
+      this.panel1.Location = new System.Drawing.Point(0, 0);
+      this.panel1.Name = "panel1";
+      this.panel1.Size = new System.Drawing.Size(656, 32);
+      this.panel1.TabIndex = 1;
+      // 
+      // _panel1_Toolbars_Dock_Area_Left
+      // 
+      this._panel1_Toolbars_Dock_Area_Left.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+      this._panel1_Toolbars_Dock_Area_Left.BackColor = System.Drawing.SystemColors.Control;
+      this._panel1_Toolbars_Dock_Area_Left.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Left;
+      this._panel1_Toolbars_Dock_Area_Left.ForeColor = System.Drawing.SystemColors.ControlText;
+      this._panel1_Toolbars_Dock_Area_Left.Location = new System.Drawing.Point(0, 27);
+      this._panel1_Toolbars_Dock_Area_Left.Name = "_panel1_Toolbars_Dock_Area_Left";
+      this._panel1_Toolbars_Dock_Area_Left.Size = new System.Drawing.Size(0, 5);
+      this._panel1_Toolbars_Dock_Area_Left.ToolbarsManager = this.ultraToolbarsManager1;
+      // 
+      // _panel1_Toolbars_Dock_Area_Right
+      // 
+      this._panel1_Toolbars_Dock_Area_Right.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+      this._panel1_Toolbars_Dock_Area_Right.BackColor = System.Drawing.SystemColors.Control;
+      this._panel1_Toolbars_Dock_Area_Right.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Right;
+      this._panel1_Toolbars_Dock_Area_Right.ForeColor = System.Drawing.SystemColors.ControlText;
+      this._panel1_Toolbars_Dock_Area_Right.Location = new System.Drawing.Point(656, 27);
+      this._panel1_Toolbars_Dock_Area_Right.Name = "_panel1_Toolbars_Dock_Area_Right";
+      this._panel1_Toolbars_Dock_Area_Right.Size = new System.Drawing.Size(0, 5);
+      this._panel1_Toolbars_Dock_Area_Right.ToolbarsManager = this.ultraToolbarsManager1;
+      // 
+      // _panel1_Toolbars_Dock_Area_Top
+      // 
+      this._panel1_Toolbars_Dock_Area_Top.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+      this._panel1_Toolbars_Dock_Area_Top.BackColor = System.Drawing.SystemColors.Control;
+      this._panel1_Toolbars_Dock_Area_Top.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Top;
+      this._panel1_Toolbars_Dock_Area_Top.ForeColor = System.Drawing.SystemColors.ControlText;
+      this._panel1_Toolbars_Dock_Area_Top.Location = new System.Drawing.Point(0, 0);
+      this._panel1_Toolbars_Dock_Area_Top.Name = "_panel1_Toolbars_Dock_Area_Top";
+      this._panel1_Toolbars_Dock_Area_Top.Size = new System.Drawing.Size(656, 27);
+      this._panel1_Toolbars_Dock_Area_Top.ToolbarsManager = this.ultraToolbarsManager1;
+      // 
+      // _panel1_Toolbars_Dock_Area_Bottom
+      // 
+      this._panel1_Toolbars_Dock_Area_Bottom.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+      this._panel1_Toolbars_Dock_Area_Bottom.BackColor = System.Drawing.SystemColors.Control;
+      this._panel1_Toolbars_Dock_Area_Bottom.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Bottom;
+      this._panel1_Toolbars_Dock_Area_Bottom.ForeColor = System.Drawing.SystemColors.ControlText;
+      this._panel1_Toolbars_Dock_Area_Bottom.Location = new System.Drawing.Point(0, 32);
+      this._panel1_Toolbars_Dock_Area_Bottom.Name = "_panel1_Toolbars_Dock_Area_Bottom";
+      this._panel1_Toolbars_Dock_Area_Bottom.Size = new System.Drawing.Size(656, 0);
+      this._panel1_Toolbars_Dock_Area_Bottom.ToolbarsManager = this.ultraToolbarsManager1;
+      // 
+      // FrmRole_Fill_Panel
+      // 
+      this.FrmRole_Fill_Panel.Controls.Add(this.ultraGrid1);
+      this.FrmRole_Fill_Panel.Controls.Add(this.ultraExpandableGroupBox1);
+      this.FrmRole_Fill_Panel.Controls.Add(this.panel2);
+      this.FrmRole_Fill_Panel.Controls.Add(this.panel1);
+      this.FrmRole_Fill_Panel.Cursor = System.Windows.Forms.Cursors.Default;
+      this.FrmRole_Fill_Panel.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.FrmRole_Fill_Panel.Location = new System.Drawing.Point(0, 0);
+      this.FrmRole_Fill_Panel.Name = "FrmRole_Fill_Panel";
+      this.FrmRole_Fill_Panel.Size = new System.Drawing.Size(656, 470);
+      this.FrmRole_Fill_Panel.TabIndex = 0;
+      // 
+      // ultraGrid1
+      // 
+      appearance1.BackColor = System.Drawing.SystemColors.Window;
+      appearance1.BorderColor = System.Drawing.SystemColors.InactiveCaption;
+      this.ultraGrid1.DisplayLayout.Appearance = appearance1;
+      appearance2.BackColor = System.Drawing.Color.LightGoldenrodYellow;
+      ultraGridColumn1.CellAppearance = appearance2;
+      appearance3.BackColor = System.Drawing.Color.LightSteelBlue;
+      ultraGridColumn1.Header.Appearance = appearance3;
+      ultraGridColumn1.Header.VisiblePosition = 0;
+      ultraGridColumn2.Header.VisiblePosition = 1;
+      appearance4.BackColor = System.Drawing.Color.LightGoldenrodYellow;
+      ultraGridColumn3.CellAppearance = appearance4;
+      appearance5.BackColor = System.Drawing.Color.LightSteelBlue;
+      ultraGridColumn3.Header.Appearance = appearance5;
+      ultraGridColumn3.Header.VisiblePosition = 2;
+      ultraGridBand1.Columns.AddRange(new object[] {
+            ultraGridColumn1,
+            ultraGridColumn2,
+            ultraGridColumn3});
+      this.ultraGrid1.DisplayLayout.BandsSerializer.Add(ultraGridBand1);
+      this.ultraGrid1.DisplayLayout.BorderStyle = Infragistics.Win.UIElementBorderStyle.Solid;
+      this.ultraGrid1.DisplayLayout.CaptionVisible = Infragistics.Win.DefaultableBoolean.False;
+      appearance6.BackColor = System.Drawing.SystemColors.ActiveBorder;
+      appearance6.BackColor2 = System.Drawing.SystemColors.ControlDark;
+      appearance6.BackGradientStyle = Infragistics.Win.GradientStyle.Vertical;
+      appearance6.BorderColor = System.Drawing.SystemColors.Window;
+      this.ultraGrid1.DisplayLayout.GroupByBox.Appearance = appearance6;
+      appearance7.ForeColor = System.Drawing.SystemColors.GrayText;
+      this.ultraGrid1.DisplayLayout.GroupByBox.BandLabelAppearance = appearance7;
+      this.ultraGrid1.DisplayLayout.GroupByBox.BorderStyle = Infragistics.Win.UIElementBorderStyle.Solid;
+      this.ultraGrid1.DisplayLayout.GroupByBox.Hidden = true;
+      appearance8.BackColor = System.Drawing.SystemColors.ControlLightLight;
+      appearance8.BackColor2 = System.Drawing.SystemColors.Control;
+      appearance8.BackGradientStyle = Infragistics.Win.GradientStyle.Horizontal;
+      appearance8.ForeColor = System.Drawing.SystemColors.GrayText;
+      this.ultraGrid1.DisplayLayout.GroupByBox.PromptAppearance = appearance8;
+      this.ultraGrid1.DisplayLayout.MaxColScrollRegions = 1;
+      this.ultraGrid1.DisplayLayout.MaxRowScrollRegions = 1;
+      appearance9.BackColor = System.Drawing.SystemColors.Window;
+      appearance9.ForeColor = System.Drawing.SystemColors.ControlText;
+      this.ultraGrid1.DisplayLayout.Override.ActiveCellAppearance = appearance9;
+      appearance10.BackColor = System.Drawing.SystemColors.Highlight;
+      appearance10.ForeColor = System.Drawing.SystemColors.HighlightText;
+      this.ultraGrid1.DisplayLayout.Override.ActiveRowAppearance = appearance10;
+      this.ultraGrid1.DisplayLayout.Override.BorderStyleCell = Infragistics.Win.UIElementBorderStyle.RaisedSoft;
+      this.ultraGrid1.DisplayLayout.Override.BorderStyleRow = Infragistics.Win.UIElementBorderStyle.Dotted;
+      appearance11.BackColor = System.Drawing.SystemColors.Window;
+      this.ultraGrid1.DisplayLayout.Override.CardAreaAppearance = appearance11;
+      appearance12.BorderColor = System.Drawing.Color.Silver;
+      appearance12.TextTrimming = Infragistics.Win.TextTrimming.EllipsisCharacter;
+      this.ultraGrid1.DisplayLayout.Override.CellAppearance = appearance12;
+      this.ultraGrid1.DisplayLayout.Override.CellClickAction = Infragistics.Win.UltraWinGrid.CellClickAction.EditAndSelectText;
+      this.ultraGrid1.DisplayLayout.Override.CellPadding = 0;
+      appearance13.BackColor = System.Drawing.SystemColors.Control;
+      appearance13.BackColor2 = System.Drawing.SystemColors.ControlDark;
+      appearance13.BackGradientAlignment = Infragistics.Win.GradientAlignment.Element;
+      appearance13.BackGradientStyle = Infragistics.Win.GradientStyle.Horizontal;
+      appearance13.BorderColor = System.Drawing.SystemColors.Window;
+      this.ultraGrid1.DisplayLayout.Override.GroupByRowAppearance = appearance13;
+      appearance14.BackColor = System.Drawing.Color.LightSteelBlue;
+      appearance14.ImageHAlign = Infragistics.Win.HAlign.Center;
+      appearance14.TextHAlign = Infragistics.Win.HAlign.Center;
+      this.ultraGrid1.DisplayLayout.Override.HeaderAppearance = appearance14;
+      this.ultraGrid1.DisplayLayout.Override.HeaderClickAction = Infragistics.Win.UltraWinGrid.HeaderClickAction.SortMulti;
+      this.ultraGrid1.DisplayLayout.Override.HeaderStyle = Infragistics.Win.HeaderStyle.Standard;
+      this.ultraGrid1.DisplayLayout.Override.MinRowHeight = 21;
+      appearance15.BackColor = System.Drawing.SystemColors.Window;
+      appearance15.BorderColor = System.Drawing.Color.Silver;
+      this.ultraGrid1.DisplayLayout.Override.RowAppearance = appearance15;
+      appearance16.BackColor = System.Drawing.Color.LightSteelBlue;
+      this.ultraGrid1.DisplayLayout.Override.RowSelectorAppearance = appearance16;
+      this.ultraGrid1.DisplayLayout.Override.RowSelectorHeaderStyle = Infragistics.Win.UltraWinGrid.RowSelectorHeaderStyle.SeparateElement;
+      this.ultraGrid1.DisplayLayout.Override.RowSelectorNumberStyle = Infragistics.Win.UltraWinGrid.RowSelectorNumberStyle.RowIndex;
+      this.ultraGrid1.DisplayLayout.Override.RowSelectors = Infragistics.Win.DefaultableBoolean.True;
+      appearance17.BackColor = System.Drawing.SystemColors.ControlLight;
+      this.ultraGrid1.DisplayLayout.Override.TemplateAddRowAppearance = appearance17;
+      this.ultraGrid1.DisplayLayout.ScrollBounds = Infragistics.Win.UltraWinGrid.ScrollBounds.ScrollToFill;
+      this.ultraGrid1.DisplayLayout.ScrollStyle = Infragistics.Win.UltraWinGrid.ScrollStyle.Immediate;
+      this.ultraGrid1.DisplayLayout.ViewStyleBand = Infragistics.Win.UltraWinGrid.ViewStyleBand.OutlookGroupBy;
+      this.ultraGrid1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.ultraGrid1.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+      this.ultraGrid1.Location = new System.Drawing.Point(0, 80);
+      this.ultraGrid1.Name = "ultraGrid1";
+      this.ultraGrid1.Size = new System.Drawing.Size(656, 278);
+      this.ultraGrid1.TabIndex = 4;
+      this.ultraGrid1.Text = "ultraGrid1";
+      this.ultraGrid1.AfterRowActivate += new System.EventHandler(this.ultraGrid1_AfterRowActivate);
+      // 
+      // ultraExpandableGroupBox1
+      // 
+      this.ultraExpandableGroupBox1.Controls.Add(this.ultraExpandableGroupBoxPanel1);
+      this.ultraExpandableGroupBox1.Dock = System.Windows.Forms.DockStyle.Bottom;
+      this.ultraExpandableGroupBox1.ExpandedSize = new System.Drawing.Size(648, 80);
+      this.ultraExpandableGroupBox1.Location = new System.Drawing.Point(0, 358);
+      this.ultraExpandableGroupBox1.Name = "ultraExpandableGroupBox1";
+      this.ultraExpandableGroupBox1.Size = new System.Drawing.Size(656, 112);
+      this.ultraExpandableGroupBox1.SupportThemes = false;
+      this.ultraExpandableGroupBox1.TabIndex = 2;
+      this.ultraExpandableGroupBox1.Text = " 编辑区域";
+      this.ultraExpandableGroupBox1.ViewStyle = Infragistics.Win.Misc.GroupBoxViewStyle.Office2003;
+      // 
+      // ultraExpandableGroupBoxPanel1
+      // 
+      this.ultraExpandableGroupBoxPanel1.Controls.Add(this.panel3);
+      this.ultraExpandableGroupBoxPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.ultraExpandableGroupBoxPanel1.Location = new System.Drawing.Point(2, 22);
+      this.ultraExpandableGroupBoxPanel1.Name = "ultraExpandableGroupBoxPanel1";
+      this.ultraExpandableGroupBoxPanel1.Size = new System.Drawing.Size(652, 88);
+      this.ultraExpandableGroupBoxPanel1.TabIndex = 0;
+      // 
+      // panel3
+      // 
+      this.panel3.BackColor = System.Drawing.Color.Gainsboro;
+      this.panel3.Controls.Add(this.ultraTextEditor4);
+      this.panel3.Controls.Add(this.ultraLabel4);
+      this.panel3.Controls.Add(this.ultraComboEditor4);
+      this.panel3.Controls.Add(this.ultraLabel8);
+      this.panel3.Controls.Add(this.ultraTextEditor2);
+      this.panel3.Controls.Add(this.ultraLabel2);
+      this.panel3.Controls.Add(this.ultraTextEditor1);
+      this.panel3.Controls.Add(this.ultraLabel1);
+      this.panel3.Controls.Add(this.ultraLabel3);
+      this.panel3.Controls.Add(this.ultraComboEditor1);
+      this.panel3.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.panel3.Location = new System.Drawing.Point(0, 0);
+      this.panel3.Name = "panel3";
+      this.panel3.Size = new System.Drawing.Size(652, 88);
+      this.panel3.TabIndex = 6;
+      // 
+      // ultraTextEditor4
+      // 
+      appearance18.BackColor = System.Drawing.Color.LightCyan;
+      this.ultraTextEditor4.Appearance = appearance18;
+      this.ultraTextEditor4.AutoSize = true;
+      this.ultraTextEditor4.BackColor = System.Drawing.Color.LightCyan;
+      this.ultraTextEditor4.Location = new System.Drawing.Point(73, 56);
+      this.ultraTextEditor4.Name = "ultraTextEditor4";
+      this.ultraTextEditor4.Size = new System.Drawing.Size(569, 21);
+      this.ultraTextEditor4.TabIndex = 25;
+      // 
+      // ultraLabel4
+      // 
+      this.ultraLabel4.Location = new System.Drawing.Point(16, 59);
+      this.ultraLabel4.Name = "ultraLabel4";
+      this.ultraLabel4.Size = new System.Drawing.Size(54, 16);
+      this.ultraLabel4.TabIndex = 24;
+      this.ultraLabel4.Text = "角色描述";
+      // 
+      // ultraComboEditor4
+      // 
+      appearance19.BackColor = System.Drawing.Color.LightCyan;
+      this.ultraComboEditor4.Appearance = appearance19;
+      this.ultraComboEditor4.AutoSize = true;
+      this.ultraComboEditor4.ButtonsRight.Add(editorButton1);
+      this.ultraComboEditor4.DropDownButtonDisplayStyle = Infragistics.Win.ButtonDisplayStyle.Never;
+      this.ultraComboEditor4.DropDownStyle = Infragistics.Win.DropDownStyle.DropDownList;
+      this.ultraComboEditor4.Location = new System.Drawing.Point(482, 16);
+      this.ultraComboEditor4.Name = "ultraComboEditor4";
+      this.ultraComboEditor4.Size = new System.Drawing.Size(160, 21);
+      this.ultraComboEditor4.TabIndex = 23;
+      this.ultraComboEditor4.SelectionChanged += new System.EventHandler(this.ultraComboEditor4_SelectionChanged);
+      this.ultraComboEditor4.EditorButtonClick += new Infragistics.Win.UltraWinEditors.EditorButtonEventHandler(this.ultraComboEditor4_EditorButtonClick);
+      // 
+      // ultraLabel8
+      // 
+      this.ultraLabel8.Location = new System.Drawing.Point(450, 16);
+      this.ultraLabel8.Name = "ultraLabel8";
+      this.ultraLabel8.Size = new System.Drawing.Size(29, 16);
+      this.ultraLabel8.TabIndex = 22;
+      this.ultraLabel8.Text = "部门";
+      // 
+      // ultraTextEditor2
+      // 
+      appearance20.BackColor = System.Drawing.Color.LightCyan;
+      this.ultraTextEditor2.Appearance = appearance20;
+      this.ultraTextEditor2.AutoSize = true;
+      this.ultraTextEditor2.BackColor = System.Drawing.Color.LightCyan;
+      this.ultraTextEditor2.Location = new System.Drawing.Point(259, 16);
+      this.ultraTextEditor2.Name = "ultraTextEditor2";
+      this.ultraTextEditor2.Size = new System.Drawing.Size(160, 21);
+      this.ultraTextEditor2.TabIndex = 4;
+      // 
+      // ultraLabel2
+      // 
+      this.ultraLabel2.Location = new System.Drawing.Point(202, 16);
+      this.ultraLabel2.Name = "ultraLabel2";
+      this.ultraLabel2.Size = new System.Drawing.Size(54, 16);
+      this.ultraLabel2.TabIndex = 1;
+      this.ultraLabel2.Text = "角色名称";
+      // 
+      // ultraTextEditor1
+      // 
+      appearance21.BackColor = System.Drawing.Color.LightCyan;
+      this.ultraTextEditor1.Appearance = appearance21;
+      this.ultraTextEditor1.AutoSize = true;
+      this.ultraTextEditor1.BackColor = System.Drawing.Color.LightCyan;
+      this.ultraTextEditor1.Location = new System.Drawing.Point(73, 16);
+      this.ultraTextEditor1.Name = "ultraTextEditor1";
+      this.ultraTextEditor1.Size = new System.Drawing.Size(92, 21);
+      this.ultraTextEditor1.TabIndex = 3;
+      // 
+      // ultraLabel1
+      // 
+      this.ultraLabel1.Location = new System.Drawing.Point(16, 16);
+      this.ultraLabel1.Name = "ultraLabel1";
+      this.ultraLabel1.Size = new System.Drawing.Size(54, 16);
+      this.ultraLabel1.TabIndex = 0;
+      this.ultraLabel1.Text = "角色编码";
+      // 
+      // ultraLabel3
+      // 
+      this.ultraLabel3.Location = new System.Drawing.Point(16, 41);
+      this.ultraLabel3.Name = "ultraLabel3";
+      this.ultraLabel3.Size = new System.Drawing.Size(54, 16);
+      this.ultraLabel3.TabIndex = 2;
+      this.ultraLabel3.Text = "权限文件";
+      this.ultraLabel3.Visible = false;
+      // 
+      // ultraComboEditor1
+      // 
+      appearance22.BackColor = System.Drawing.Color.LightCyan;
+      this.ultraComboEditor1.Appearance = appearance22;
+      this.ultraComboEditor1.AutoSize = true;
+      this.ultraComboEditor1.Location = new System.Drawing.Point(73, 41);
+      this.ultraComboEditor1.Name = "ultraComboEditor1";
+      this.ultraComboEditor1.Size = new System.Drawing.Size(109, 21);
+      this.ultraComboEditor1.TabIndex = 5;
+      this.ultraComboEditor1.Visible = false;
+      // 
+      // panel2
+      // 
+      this.panel2.Controls.Add(this.ultraTextEditor3);
+      this.panel2.Controls.Add(this.ultraCheckEditor1);
+      this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
+      this.panel2.Location = new System.Drawing.Point(0, 32);
+      this.panel2.Name = "panel2";
+      this.panel2.Size = new System.Drawing.Size(656, 48);
+      this.panel2.TabIndex = 3;
+      // 
+      // ultraTextEditor3
+      // 
+      appearance23.BackColor = System.Drawing.Color.LightCyan;
+      this.ultraTextEditor3.Appearance = appearance23;
+      this.ultraTextEditor3.AutoSize = true;
+      this.ultraTextEditor3.BackColor = System.Drawing.Color.LightCyan;
+      editorButton2.Key = "part";
+      editorButton2.Text = "...";
+      this.ultraTextEditor3.ButtonsRight.Add(editorButton2);
+      this.ultraTextEditor3.Enabled = false;
+      this.ultraTextEditor3.Location = new System.Drawing.Point(88, 8);
+      this.ultraTextEditor3.Name = "ultraTextEditor3";
+      this.ultraTextEditor3.ReadOnly = true;
+      this.ultraTextEditor3.Size = new System.Drawing.Size(168, 21);
+      this.ultraTextEditor3.TabIndex = 5;
+      this.ultraTextEditor3.EditorButtonClick += new Infragistics.Win.UltraWinEditors.EditorButtonEventHandler(this.ultraTextEditor3_EditorButtonClick);
+      // 
+      // ultraCheckEditor1
+      // 
+      this.ultraCheckEditor1.Location = new System.Drawing.Point(40, 8);
+      this.ultraCheckEditor1.Name = "ultraCheckEditor1";
+      this.ultraCheckEditor1.Size = new System.Drawing.Size(48, 20);
+      this.ultraCheckEditor1.TabIndex = 4;
+      this.ultraCheckEditor1.Text = "部门";
+      this.ultraCheckEditor1.CheckedChanged += new System.EventHandler(this.ultraCheckEditor1_CheckedChanged);
+      // 
+      // FrmRole
+      // 
+      this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
+      this.ClientSize = new System.Drawing.Size(656, 470);
+      this.Controls.Add(this.FrmRole_Fill_Panel);
+      this.Name = "FrmRole";
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
+      this.Text = "角色管理";
+      this.WindowState = System.Windows.Forms.FormWindowState.Normal;
+      this.Load += new System.EventHandler(this.FrmRole_Load);
+      ((System.ComponentModel.ISupportInitialize)(this.ultraToolbarsManager1)).EndInit();
+      this.panel1.ResumeLayout(false);
+      this.FrmRole_Fill_Panel.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.ultraGrid1)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraExpandableGroupBox1)).EndInit();
+      this.ultraExpandableGroupBox1.ResumeLayout(false);
+      this.ultraExpandableGroupBoxPanel1.ResumeLayout(false);
+      this.panel3.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor4)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraComboEditor4)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor2)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor1)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.ultraComboEditor1)).EndInit();
+      this.panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.ultraTextEditor3)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+    #endregion
+    #region "显示窗体"
+    private void GetChildDept()
+    {
+      try
+      {
+        string strOut = "";
+        DataSet ds = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod("PurviewManager", "Core.Mes.PurviewManager.UAM_USER", "SelectChildDept", new object[] { operDepart }, out strOut) as DataSet;
+        if (ds.Tables[0].Rows[0][0].ToString() != "")
+        {
+          allDept = "'" + ds.Tables[0].Rows[0][0].ToString() + "'" + operDepart + "'";
+        }
+        else
+          allDept = "'" + operDepart + "'";
+      }
+      catch(System.Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+      }
+    }
+
+    private void FrmRole_Load(object sender, System.EventArgs e)
+    {
+      try
+      {
+        operDepart = ClientCommon._UserInfo.UserDepID;
+        GetChildDept();
+        ultraCheckEditor1.Checked = true;
+        ultraTextEditor3.Text = ClientCommon._UserInfo.UserDepName;
+        ultraTextEditor3.Tag = allDept;
+
+        if (!IsAdminFlag)
+          this.ultraToolbarsManager1.Tools["purset"].SharedProps.Visible = false;
+        GetDepartmentData();
+        Getroledata("");
+        Query();
+        GetFileNames();
+        InitGrid();
+        InitCombo();
+
+        this.ultraGrid1.DisplayLayout.Bands[0].Override.AllowRowFiltering = Infragistics.Win.DefaultableBoolean.True;
+      }
+      catch //(Exception ex)
+      {
+        //	Core.Mes.ServerFrameWork.CoreMesLogger.log(this.GetType()).Error(ex.Message);
+      }
+    }
+    private void InitCombo()
+    {
+      //			if (_roleData != null && _roleData.Tables.Count >0)
+      //			{
+      //				foreach(DataRow arow in (_roleData).Tables[0].Rows)
+      //					this.ultraComboEditor3.Items.Add(arow[1]);
+      //				if(!this.ultraComboEditor3.Items.Contains(System.DBNull.Value)) this.ultraComboEditor3.Items.Add(System.DBNull.Value);
+      //			}
+      if (_departmentData != null && _departmentData.Tables.Count > 0)
+      {
+        DataTable dt = this._departmentData.Tables[0].Copy();
+
+        this.ultraComboEditor4.Items.Clear();
+        foreach (DataRow dr in dt.Rows)
+        {
+          if (dr["DEPARTMENTID"].ToString() == "ROOT" && operDepart != "ROOT") continue;
+          try
+          {
+            this.ultraComboEditor4.Items.Add(dr["DEPARTMENTID"], dr["DEPARTMENTNAME"].ToString());
+          }
+          catch
+          { }
+        }
+      }
+    }
+    private void InitGrid()
+    {
+
+
+      //SetFileValueList();
+      GetPartData();
+
+      //this.ultraGrid1.DataSource = _roleData.Tables[0];
+
+      this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].Header.Caption = "角色编码";
+      this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].Width = 100;
+      this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].CellActivation = Activation.NoEdit;
+      this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].CellAppearance.BackColor = Color.LightGoldenrodYellow;
+      this.ultraGrid1.DisplayLayout.Bands[0].Columns[1].Header.Caption = "角色名称";
+      this.ultraGrid1.DisplayLayout.Bands[0].Columns[1].Width = 200;
+      this.ultraGrid1.DisplayLayout.Bands[0].Columns[1].CellActivation = Activation.NoEdit;
+      this.ultraGrid1.DisplayLayout.Bands[0].Columns[2].Header.Caption = "角色描述";
+      this.ultraGrid1.DisplayLayout.Bands[0].Columns[2].Width = 300;
+      this.ultraGrid1.DisplayLayout.Bands[0].Columns[2].CellActivation = Activation.NoEdit;
+      //this.ultraGrid1.DisplayLayout.Bands[0].Columns[2].ValueList = ultraGrid1.DisplayLayout.ValueLists["file"];
+      this.ultraGrid1.DisplayLayout.Bands[0].Columns[2].CellAppearance.BackColor = Color.LightGoldenrodYellow;
+      this.ultraGrid1.DisplayLayout.Bands[0].Columns[3].Header.Caption = "部门";
+      this.ultraGrid1.DisplayLayout.Bands[0].Columns[3].Width = 200;
+      this.ultraGrid1.DisplayLayout.Bands[0].Columns[3].CellActivation = Activation.NoEdit;
+      this.ultraGrid1.DisplayLayout.Bands[0].Columns[3].ValueList = ultraGrid1.DisplayLayout.ValueLists["part"];
+
+
+    }
+    private void Getroledata(string str)
+    {
+      try
+      {
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "SelectUAM_ROLE";
+        par.args = new object[] { str };
+
+        string strOut = "";
+
+        _roleData = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+
+      }
+      catch (Exception ex)
+      {
+        Console.WriteLine(ex.Message);
+      }
+    }
+
+    private void SetFileValueList()
+    {
+      if (ultraGrid1.DisplayLayout.ValueLists.Exists("file"))
+        ultraGrid1.DisplayLayout.ValueLists["file"].ValueListItems.Clear();
+      else
+        ultraGrid1.DisplayLayout.ValueLists.Add("file");
+      //try
+      //{
+      //    ultraGrid1.DisplayLayout.ValueLists["file"].ValueListItems.Clear();
+      //}
+      //catch
+      //{
+      //    ultraGrid1.DisplayLayout.ValueLists.Add("file");
+      //}
+      foreach (string str in this._fileNames)
+      {
+        Infragistics.Win.ValueListItem vli = new Infragistics.Win.ValueListItem();
+        vli.DisplayText = str.Split((char)92)[1];
+        vli.DataValue = str.Split((char)92)[1];
+        ultraGrid1.DisplayLayout.ValueLists["file"].ValueListItems.Add(vli);
+        this.ultraComboEditor1.Items.Add(vli.DataValue, vli.DisplayText);
+        //				this.ultraComboEditor2.Items.Add(vli);
+      }
+
+    }
+    private void GetFileNames()
+    {
+      try
+      {
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        //par.AssemblyName  = "Core.Mes.PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "GetFiles";
+        par.args = null;
+        par.ServerType = MesServerType.MesSystemBaseServer;
+
+        string strOut = "";
+
+        _fileNames = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as string[];
+
+      }
+      catch //(Exception ex)
+      {
+        //	CoreMesLogger.log(this.GetType()).Error(ex.Message);
+      }
+    }
+    private void GetPartData()
+    {
+      if (ultraGrid1.DisplayLayout.ValueLists.Exists("part"))
+        ultraGrid1.DisplayLayout.ValueLists["part"].ValueListItems.Clear();
+      else
+        ultraGrid1.DisplayLayout.ValueLists.Add("part");
+      //try
+      //{
+      //    ultraGrid1.DisplayLayout.ValueLists["part"].ValueListItems.Clear();
+      //}
+      //catch
+      //{
+      //    ultraGrid1.DisplayLayout.ValueLists.Add("part");
+      //}
+      DataTable dt = this._departmentData.Tables[0].Copy();
+      foreach (DataRow dr in dt.Rows)
+      {
+        Infragistics.Win.ValueListItem vli = new Infragistics.Win.ValueListItem();
+        vli.DisplayText = dr["DEPARTMENTNAME"].ToString();
+        vli.DataValue = dr["DEPARTMENTID"];
+        ultraGrid1.DisplayLayout.ValueLists["part"].ValueListItems.Add(vli);
+      }
+    }
+
+    #endregion
+    private void ultraToolbarsManager1_ToolClick(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
+    {
+      switch (e.Tool.Key)
+      {
+        case "purset":
+          FrmFunction frmFunc = new FrmFunction();
+          frmFunc.ShowDialog();
+          break;
+        case "add":
+          Add();
+          break;
+        case "edit":
+          Edit();
+          break;
+        case "del":
+          Del();
+          break;
+        case "query":
+          Query();
+          break;
+        case "close":
+          this.Close();
+          break;
+        case "back":
+          this.ultraToolbarsManager1.Toolbars[0].Tools["back"].SharedProps.Visible = false;
+          ultraCheckEditor1.Checked = true;
+          ultraTextEditor3.Text = ClientCommon._UserInfo.UserDepName;
+          ultraTextEditor3.Tag = allDept;
+          Query();
+          this.ultraGrid1.DataSource = _roleData.Tables[0];
+          break;
+      }
+    }
+    private void Add()
+    {
+      if (this.ultraTextEditor1.Text.Trim() == "")
+      {
+        MessageBox.Show("请录入角色编码!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        return;
+      }
+      if (this.ultraTextEditor2.Text.Trim() == "")
+      {
+        MessageBox.Show("请录入角色姓名!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        return;
+      }
+      //if (this.ultraComboEditor1.Value == null)
+      //{
+      //    MessageBox.Show("请选择权限文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+      //    return;
+      //}
+      if (this.ultraComboEditor4.Value == null)
+      {
+        MessageBox.Show("请选择角色所属的部门!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        return;
+      }
+      if (this.ultraComboEditor4.Value.ToString() == "ROOT")
+      {
+        this.ultraComboEditor4.Value = null;
+        MessageBox.Show("必须选择下属部门!");
+        return;
+      }
+      if (allDept.IndexOf("'" + ultraComboEditor4.Value.ToString() + "'") < 0 && operDepart != "ROOT")
+      {
+        this.ultraComboEditor4.Value = null;
+        MessageBox.Show("你没有配置这一部门角色的权限,请重新选择部门!");
+        return;
+      }
+      ArrayList al = new ArrayList();
+
+      al.Add(this.ultraTextEditor1.Text.Trim());
+      al.Add(this.ultraTextEditor2.Text.Trim());
+      al.Add(ultraTextEditor4.Text.Trim());
+      al.Add(this.ultraComboEditor4.Value);
+
+      try
+      {
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        //par.AssemblyName  = "Core.Mes.PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "InsertUAM_ROLE";
+        par.args = new object[] { al };
+        par.ServerType = MesServerType.MesSystemBaseServer;
+
+        string strOut = "";
+
+        object obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut);
+
+        if (strOut != "")
+        {
+          MessageBox.Show("新增失败! \n" + strOut);
+          return;
+        }
+        else
+        {
+          if ((int)obj != 1)
+          {
+            MessageBox.Show("新增失败!");
+            return;
+          }
+        }
+      }
+      catch //(Exception ex)
+      {
+        //	CoreMesLogger.log(this.GetType()).Error(ex.Message);
+        return;
+      }
+      UltraGridRow ugr = this.ultraGrid1.DisplayLayout.Bands[0].AddNew();
+      ugr.Cells[0].Value = al[0];
+      ugr.Cells[1].Value = al[1];
+      ugr.Cells[2].Value = al[2];
+
+      this.ultraGrid1.UpdateData();
+      Query();
+    }
+
+    private void Del()
+    {
+      int i = 0;
+      UltraGridRow ugr = this.ultraGrid1.ActiveRow;
+      if (ugr == null)
+      {
+        MessageBox.Show("请选择要删除的角色!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        return;
+      }
+      if (MessageBox.Show("是否确认删除选中的角色?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
+      {
+        return;
+      }
+      try
+      {
+        i = ugr.Index;
+
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        //par.AssemblyName  = "Core.Mes.PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "DeleteUAM_ROLE";
+        par.args = new object[] { ugr.Cells[0].Value.ToString() };
+        par.ServerType = MesServerType.MesSystemBaseServer;
+
+        string strOut = "";
+
+        object obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut);
+
+        if (strOut != "")
+        {
+          MessageBox.Show("删除失败! \n" + strOut);
+          return;
+        }
+        else
+        {
+          if ((int)obj != 1)
+          {
+            MessageBox.Show("删除失败!");
+            return;
+          }
+        }
+      }
+      catch //(Exception ex)
+      {
+        //	CoreMesLogger.log(this.GetType()).Error(ex.Message);
+        return;
+      }
+
+      ultraGrid1.ActiveRow.Delete(false);
+      ultraGrid1.UpdateData();
+
+      try
+      {
+        ultraGrid1.Rows[i].Activate();
+      }
+      catch
+      {
+        int count = ultraGrid1.Rows.Count;
+        if (count > 0)
+          ultraGrid1.Rows[count - 1].Activate();
+      }
+    }
+    private void Edit()
+    {
+      UltraGridRow ugr = this.ultraGrid1.ActiveRow;
+      if (ugr == null)
+      {
+        MessageBox.Show("请选择要修改的角色!");
+        return;
+      }
+      if (ultraTextEditor1.Text.Trim() != ugr.Cells["ROLEID"].Text.Trim())
+      {
+        MessageBox.Show("不能修改角色编码!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        return;
+      }
+      //if (this.ultraComboEditor1.Value == null)
+      //{
+      //    MessageBox.Show("请选择要修改的权限!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+      //    return;
+      //}
+      if (this.ultraTextEditor2.Text.Trim() == "")
+      {
+        MessageBox.Show("请选择要修改的角色名称!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        return;
+      }
+      if (this.ultraComboEditor4.Value == null)
+      {
+        MessageBox.Show("请选择修改的角色所属部门!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        return;
+      }
+      if (this.ultraComboEditor4.Value.ToString() == "ROOT")
+      {
+        this.ultraComboEditor4.Value = null;
+        MessageBox.Show("必须选择下属部门!");
+        return;
+      }
+      if (allDept.IndexOf("'" + ultraComboEditor4.Value.ToString() + "'") < 0 && operDepart != "ROOT")
+      {
+        this.ultraComboEditor4.Value = null;
+        MessageBox.Show("你没有配置这一部门角色的权限,请重新选择部门!");
+        return;
+      }
+      ArrayList al = new ArrayList();
+
+      al.Add(this.ultraTextEditor1.Text.Trim());
+      al.Add(this.ultraTextEditor2.Text.Trim());
+      al.Add(ultraTextEditor4.Text.Trim());
+      al.Add(this.ultraComboEditor4.Value);
+
+      try
+      {
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        //par.AssemblyName  = "Core.Mes.PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "UpdateUAM_ROLE";
+        par.args = new object[] { al };
+        par.ServerType = MesServerType.MesSystemBaseServer;
+
+        string strOut = "";
+
+        object obj = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut);
+
+        if (strOut != "")
+        {
+          MessageBox.Show("修改失败 \n" + strOut);
+          return;
+        }
+        else
+        {
+          int i = (int)obj;
+          if (i != 1)
+          {
+            MessageBox.Show("修改失败");
+            return;
+          }
+        }
+      }
+      catch //(Exception ex)
+      {
+        //	CoreMesLogger.log(this.GetType()).Error(ex.Message);
+        return;
+      }
+      ugr.Cells[0].Value = al[0];
+      ugr.Cells[1].Value = al[1];
+      ugr.Cells[2].Value = al[2];
+
+      ultraGrid1.UpdateData();
+      Query();
+    }
+    private void Query()
+    {
+      if (this.ultraTextEditor3.Text == null || !this.ultraCheckEditor1.Checked)
+      {
+        MessageBox.Show("请选择要查询的部门!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        return;
+      }
+      GetSelDept();
+      if (this.ultraCheckEditor1.Checked && this.ultraTextEditor3.Text != "")
+      {
+        if (operDepart != "ROOT" && allDept.IndexOf("'" + selDept + "'") < 0)
+        {
+          MessageBox.Show("你没有查看这一部门的权限,请重新选择!");
+          return;
+        }
+      }
+      Getroledata("");
+      string sqlExt = " where 1=1 ";
+      sqlExt += GetRefreshWhere() + "order by ROLEID";
+
+      try
+      {
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "SelectUAM_ROLE";
+        par.args = new object[] { sqlExt };
+
+        string strOut = "";
+
+        DataSet dset = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+        this.ultraGrid1.DataSource = dset.Tables[0];
+        ultraGrid1.UpdateData();
+        this.ultraToolbarsManager1.Toolbars[0].Tools["back"].SharedProps.Visible = true;
+
+      }
+      catch (Exception ex)
+      {
+        Console.WriteLine(ex.Message);
+      }
+
+    }
+    private string GetRefreshWhere()
+    {
+      string sqlstr = "";
+      if (this.ultraTextEditor3.Enabled && this.ultraCheckEditor1.Checked && this.ultraTextEditor3.Text != "")
+      {
+        ArrayList al = this.GetRoleID();
+        if (al == null || al.Count == 0)
+        {
+          sqlstr = "1=2";
+        }
+        else
+        {
+          sqlstr += "and ROLEID in ('" + al[0].ToString() + "'";
+          for (int i = 1; i < al.Count; i++)
+          {
+            sqlstr += ", '" + al[i].ToString() + "' ";
+          }
+          sqlstr += ")";
+
+        }
+      }
+      return sqlstr;
+    }
+    private ArrayList GetRoleID()
+    {
+      ArrayList al = new ArrayList();
+      DataTable dt = null;
+      if (this._roleData == null)
+        dt = null;
+      else
+        dt = this._roleData.Tables[0];
+
+      if (dt != null)
+      {
+        if (this.ultraTextEditor3.Enabled && this.ultraTextEditor3.Tag != null)
+        {
+          string partid = this.ultraTextEditor3.Tag.ToString();
+
+          string strFilter = "DEPARTMENTID in (" + partid + ")";
+
+          dt.DefaultView.RowFilter = strFilter;
+        }
+
+        for (int i = 0; i < dt.DefaultView.Count; i++)
+        {
+          al.Add(dt.DefaultView[i]["ROLEID"].ToString());
+        }
+
+        return al;
+      }
+      else
+        return null;
+    }
+    private void ultraGrid1_AfterRowActivate(object sender, System.EventArgs e)
+    {
+      try
+      {
+        if (this.ultraGrid1.ActiveRow == null) return;
+        UltraGridRow ugr = this.ultraGrid1.ActiveRow;
+        this.ultraTextEditor1.Text = ugr.Cells[0].Value.ToString();
+        this.ultraTextEditor2.Text = ugr.Cells[1].Value.ToString();
+        //this.ultraComboEditor1.Value=ugr.Cells[2].Value;
+        ultraTextEditor4.Text = ugr.Cells[2].Value.ToString();
+        this.ultraComboEditor4.Value = ugr.Cells[3].Value;
+      }
+      catch (Exception ex)
+      {
+        Console.WriteLine(ex.Message);
+      }
+    }
+
+    private void ultraCheckEditor1_CheckedChanged(object sender, System.EventArgs e)
+    {
+      this.ultraTextEditor3.Enabled = this.ultraCheckEditor1.Checked;
+    }
+
+    /*		private void ultraComboEditor2_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e)
+        {
+          GetFileNames();
+          if (_fileNames != null)
+          {
+              foreach(string fileNames in _fileNames)
+              this.ultraComboEditor2 .Items .Add (fileNames);
+            if(!this.ultraComboEditor2.Items.Contains(System.DBNull.Value)) this.ultraComboEditor2.Items.Add(System.DBNull.Value);
+          }
+        }
+    */
+    private void ultraComboEditor4_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e)
+    {
+      try
+      {
+        FrmSetDepart frm = new FrmSetDepart();
+        frm.GetChildIDFlag = false;
+        frm.Location = GetChildWindowLocation(frm.Size);
+        frm.ShowDialog();
+
+        InitCombo();
+
+        if (frm.SelectedID != "" && frm.SelectedName != "")
+        {
+          this.ultraComboEditor4.Value = frm.SelectedID;
+          if (operDepart != "ROOT" && this.ultraComboEditor4.Value.ToString() == "ROOT")
+          {
+            this.ultraComboEditor4.Value = null;
+            MessageBox.Show("所属权限不允许选择选择整个公司!");
+            return;
+          }
+          if (allDept.IndexOf("'" + ultraComboEditor4.Value.ToString() + "'") < 0 && operDepart != "ROOT")
+          {
+            this.ultraComboEditor4.Value = null;
+            MessageBox.Show("你没有配置这一部门用户的权限,请重新选择部门!");
+            return;
+          }
+        }
+      }
+      catch
+      { }
+    }
+    private Point GetChildWindowLocation(Size ChildWindowSize)
+    {
+      int width = Cursor.Position.X + ChildWindowSize.Width - Screen.PrimaryScreen.Bounds.Width;
+      int height = Cursor.Position.Y + ChildWindowSize.Height - Screen.PrimaryScreen.Bounds.Height + 30;
+
+      if (width > 0)
+        width = Cursor.Position.X - width;
+      else
+        width = Cursor.Position.X;
+      if (height > 0)
+        height = Cursor.Position.Y - height + 10;
+      else
+        height = Cursor.Position.Y + 10;
+
+      return new Point(width, height);
+    }
+    private void GetDepartmentData()
+    {
+      try
+      {
+        CallingMessage par = new CallingMessage();
+        par.ServerName = "PurviewManager";
+        par.ClassName = "Core.Mes.PurviewManager.PurviewManager";
+        par.MethodName = "SelectUAM_DEPARTMENT";
+        par.args = new object[] { " order by DEPARTMENTID " };
+
+        string strOut = "";
+        _departmentData = Core.Mes.ClientFrameWork.ClientCommon._RemotingHelp.ExecuteMethod(par, out strOut) as DataSet;
+      }
+      catch
+      { }
+    }
+
+    private void ultraTextEditor3_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e)
+    {
+      try
+      {
+        FrmSetDepart frm = new FrmSetDepart();
+        frm.Location = GetChildWindowLocation(frm.Size);
+        frm.ShowDialog();
+        if (frm.SelectedID != "" && frm.SelectedName != "")
+        {
+          this.ultraTextEditor3.Text = frm.SelectedName;
+          this.ultraTextEditor3.Tag = frm.SelectedID;
+          GetSelDept();
+          if (this.ultraTextEditor3.Text != "" && this.ultraCheckEditor1.Checked)
+          {
+            if (operDepart != "ROOT" && allDept.IndexOf("'" + selDept + "'") < 0)
+            {
+              MessageBox.Show("你没有查看这一部门的权限,请重新选择!");
+            }
+          }
+        }
+      }
+      catch
+      { }
+
+    }
+
+    private void ultraComboEditor4_SelectionChanged(object sender, EventArgs e)
+    {
+      try
+      {
+        if (operDepart != "ROOT" && ultraComboEditor4.Value.ToString() == "ROOT")
+        {
+          this.ultraComboEditor4.Value = null;
+          MessageBox.Show("所属权限不允许选择选择整个公司!");
+          return;
+        }
+        if (ultraComboEditor4.Value != null && allDept.IndexOf("'" + ultraComboEditor4.Value.ToString() + "'") < 0 && operDepart != "ROOT")
+        {
+          this.ultraComboEditor4.Value = null;
+          MessageBox.Show("你没有配置这一部门用户的权限,请重新选择部门!");
+          return;
+        }
+      }
+      catch
+      { }
+    }
+
+    private void GetSelDept()
+    {
+      try
+      {
+        if (this.ultraTextEditor3.Text != "" && this.ultraCheckEditor1.Checked)
+        {
+          DataTable dt = this._departmentData.Tables[0].Copy();
+          foreach (DataRow dr in dt.Rows)
+          {
+            if (dr["DEPARTMENTNAME"].ToString() == this.ultraTextEditor3.Text)
+            {
+              selDept = dr["DEPARTMENTID"].ToString();
+              return;
+            }
+          }
+        }
+      }
+      catch
+      { }
+    }
+
+  }
+}

+ 130 - 0
.svn/pristine/3d/3dcfa78e59e304b0ea7c70fcabc85870259fb05b.svn-base

@@ -0,0 +1,130 @@
+using System;
+using System.Data;
+using System.Collections;
+using Core.Mes.IBaseInterface;
+
+using Core.Mes.ServerFrameWork;
+
+namespace Core.Mes.PurviewManager
+{
+  /// <summary>
+  /// UserValidate 的摘要说明。
+  /// </summary>
+  public class UserValidate : IComponent
+  {
+
+    public static Hashtable _htUserInfo;
+
+    public UserValidate()
+    {
+    }
+
+    public bool ValidateRequest(ValidateInfo info)
+    {
+      bool flag = false;
+      try
+      {
+        if (_htUserInfo == null)
+          InitValidateInfo();
+
+        string loginID = info.LoginID;
+        string validateGuid = info.ValidateGuid;
+
+        if (_htUserInfo.Contains(loginID))
+        {
+          UserInfo userInfo = (UserInfo)_htUserInfo[loginID];
+
+          if (validateGuid == userInfo.ValidateGuid)
+            flag = true;
+        }
+      }
+      catch (Exception ex)
+      {
+        Console.WriteLine(ex.Message);
+        flag = false;
+      }
+      if (!flag) flag = true;
+      return flag;
+    }
+
+    private void LoadAllValidate()
+    {
+      string sqlstr = "SELECT * FROM UAMV_AUTHORROLE";
+      string ErrorInfo = "";
+
+      DataSet ds = new DataSet();
+
+      try
+      {
+        ds = _dbManager.ExecuteQuery(sqlstr, out ErrorInfo);
+
+        if (ds == null || ds.Tables.Count < 1)
+          return;
+
+        foreach (DataRow dr in ds.Tables[0].Rows)
+        {
+          string loginID = dr["LoginID"].ToString();
+
+          UserInfo userInfo = SetUserInfo(dr);
+
+          _htUserInfo.Add(loginID, userInfo);
+        }
+      }
+      catch (Exception ex)
+      {
+        throw ex;
+      }
+    }
+
+    private UserInfo SetUserInfo(DataRow dr)
+    {
+      UserInfo info;
+
+      try
+      {
+        info = new UserInfo();
+        info.LoginID = dr["LOGINID"].ToString();
+        info.UserID = dr["USERID"].ToString();
+        info.UserName = dr["NAME"].ToString();
+        info.ValidateGuid = Guid.NewGuid().ToString();
+
+        return info;
+      }
+      catch (Exception ex)
+      {
+        throw ex;
+      }
+    }
+
+    private void InitValidateInfo()
+    {
+      try
+      {
+        _htUserInfo = new Hashtable();
+        LoadAllValidate();
+      }
+      catch (Exception ex)
+      {
+        throw ex;
+      }
+    }
+
+    #region "	Realization Interface	"
+
+    public void Dispose()
+    {
+
+    }
+    public string Description
+    {
+      get { return "用户验证服务"; }
+    }
+    public STMes.DBManager DBManager
+    {
+      set { _dbManager = value; }
+      get { return _dbManager; }
+    }
+    private STMes.DBManager _dbManager;
+    #endregion
+  }
+}

+ 471 - 0
.svn/pristine/3e/3e654e1ec02c122c2fbbea343c5c93973bdb8ad2.svn-base

@@ -0,0 +1,471 @@
+using System.Collections;
+using System.Diagnostics;
+using System.IO;
+using System.Threading;
+using System.Windows.Forms;
+using System.Net;
+using System;
+using System.Text;
+using System.Net.Sockets;
+
+namespace Mes.AutoUpdate
+{
+    public delegate void Action<T1, T2>(T1 _t1, T2 _t2);
+
+    public static class DownManager
+    {
+        private static string main_progress = "";
+        private static string sub_progress = "";
+        private static int total_updated = 0;
+        private static int total_files = 0;
+
+        private static Action<string, string> _sProgress = null;
+
+        public static void DownLoad(ArrayList files, string HTTP_Address, string FTP_Address, Action<int, int> m_Progress, Action<string, string> s_Progress, int retry, out ArrayList Finished)
+        {
+            string fileName = "";
+            string errMsg = "";
+            _sProgress = s_Progress;
+            total_updated = 0;
+            Finished = new ArrayList();
+            total_files = files.Count;
+            try
+            {
+                fileName = Process.GetCurrentProcess().MainModule.FileName;
+
+                foreach (object file in files)
+                {
+                    if (m_Progress != null)
+                        m_Progress(total_updated, files.Count);
+
+                    string startupPath = Application.StartupPath;
+                    string fileName2 = Path.GetFileName(file.ToString());
+                    string text = startupPath + "\\" + fileName2;
+                    if (Path.GetFullPath(text).ToUpper() == Path.GetFullPath(fileName).ToUpper())
+                    {
+                        total_updated++;
+                    }
+                    else
+                    {
+                        bool flag = false;
+                        main_progress = fileName2;
+                        for (int i = 0; i < retry; i++)
+                        {
+                            if (i > 0)
+                            {
+                                main_progress = string.Format("{0} 更新出错,尝试重新下载[{1}/2]", fileName2, i);
+                                sub_progress = "";
+                                inner_Progress(0, 1);
+                                Thread.Sleep(1500);
+                            }
+
+                            if (HTTP_Helper.DownFile(Path.Combine(HTTP_Address, file.ToString()), text, out errMsg, inner_Progress))
+                            {
+                                flag = true;
+                                Finished.Add(fileName2);
+                                total_updated++;
+                                break;
+                            }
+                        }
+                        if (!flag)
+                        {
+                            for (int i = 0; i < retry; i++)
+                            {
+                                main_progress = string.Format("{0} 更新出错,按FTP方式重新下载[{1}/2]", fileName2, i + 1);
+                                sub_progress = "";
+                                inner_Progress(0, 1);
+                                Thread.Sleep(100);
+
+                                if (FTP_Helper.FtpDownload(Path.Combine(FTP_Address, file.ToString()), text, false, out errMsg, inner_Progress))
+                                {
+                                    flag = true;
+                                    Finished.Add(fileName2);
+                                    total_updated++;
+                                    break;
+                                }
+                            }
+                        }
+                        if (!flag)
+                        {
+                            throw new Exception(errMsg);
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                throw new Exception(ex.Message);
+            }
+        }
+
+
+        private static void inner_Progress(int a, int b)
+        {
+            sub_progress = string.Format("{0,4}/{1,-4} {2,3}% ", total_updated + 1, total_files, a * 100 / b);
+            if (_sProgress != null)
+            {
+                _sProgress(sub_progress, main_progress);
+            }
+        }
+    }
+
+    public static class FTP_Helper
+    {
+        public static string FtpUserID = string.Empty;
+
+        public static string FtpPassword = string.Empty;
+
+        public static bool FtpDownload(string remoteFileName, string localFileName, bool ifCredential, out string errMsg, Action<int, int> updateProgress)
+        {
+            errMsg = "";
+            Stream stream = null;
+            FtpWebResponse ftpResponse = null;
+            FileStream fileStream = null;
+            try
+            { 
+                fileStream = new FileStream(localFileName, FileMode.Create);
+                Uri requestUri = new Uri(remoteFileName);
+                FtpWebRequest ftpWebRequest = (FtpWebRequest.Create(requestUri)) as FtpWebRequest;
+                ftpWebRequest.UseBinary = true;
+                FtpWebRequest ftpWebRequest2 = (FtpWebRequest.Create(requestUri)) as FtpWebRequest;
+                ftpWebRequest2.UseBinary = true;
+                ftpWebRequest2.KeepAlive = false; 
+                if (ifCredential)
+                {
+                    ftpWebRequest.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
+                    ftpWebRequest2.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
+                }
+                ftpWebRequest.Method = "SIZE";
+                FtpWebResponse ftpWebResponse2 = (FtpWebResponse)ftpWebRequest.GetResponse(); 
+                long contentLength = ftpWebResponse2.ContentLength;
+                ftpWebResponse2.Close();
+                ftpWebRequest2.Method = "RETR";
+                ftpResponse = (FtpWebResponse)ftpWebRequest2.GetResponse();
+                stream = ftpResponse.GetResponseStream();
+
+
+                if (updateProgress != null)
+                    updateProgress.Invoke(0, (int)contentLength);
+                long num = 0L;
+                int num2 = 2048;
+                byte[] buffer = new byte[num2];
+                for (int num3 = stream.Read(buffer, 0, num2); num3 > 0; num3 = stream.Read(buffer, 0, num2))
+                {
+                    num = num3 + num;
+                    fileStream.Write(buffer, 0, num3);
+
+                    if (updateProgress != null)
+                        updateProgress.Invoke((int)num, (int)contentLength);
+                }
+                return true;
+            }
+            catch (Exception ex)
+            { 
+                errMsg = ex.Message;
+            }
+            finally
+            {
+                if (stream != null) stream.Close();
+                if (fileStream != null) fileStream.Close();
+                if (ftpResponse != null) ftpResponse.Close();
+            }
+            return false;
+        }
+
+        public static bool FtpBrokenDownload(string remoteFileName, string localFileName, bool ifCredential, long size, Action<int, int> updateProgress)
+        {
+            Stream stream = null;
+            FtpWebResponse ftpWebResponse = null;
+            FileStream fileStream = null;
+            try
+            {
+                fileStream = new FileStream(localFileName, FileMode.Append);
+                Uri requestUri = new Uri(remoteFileName);
+                FtpWebRequest ftpWebRequest = (FtpWebRequest.Create(requestUri)) as FtpWebRequest;
+                ftpWebRequest.UseBinary = true;
+                ftpWebRequest.ContentOffset = size;
+                FtpWebRequest ftpWebRequest2 = (FtpWebRequest.Create(requestUri)) as FtpWebRequest;
+                ftpWebRequest2.UseBinary = true;
+                ftpWebRequest2.KeepAlive = false;
+                ftpWebRequest2.ContentOffset = size;
+                if (ifCredential)
+                {
+                    ftpWebRequest.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
+                    ftpWebRequest2.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
+                }
+                ftpWebRequest.Method = "SIZE";
+                FtpWebResponse ftpWebResponse2 = (FtpWebResponse)ftpWebRequest.GetResponse();
+                long contentLength = ftpWebResponse2.ContentLength;
+                ftpWebResponse2.Close();
+                ftpWebRequest2.Method = "RETR";
+                ftpWebResponse = (FtpWebResponse)ftpWebRequest2.GetResponse();
+                stream = ftpWebResponse.GetResponseStream();
+
+
+                if (updateProgress != null)
+                    updateProgress.Invoke(0, (int)contentLength);
+                long num = 0L;
+                int num2 = 2048;
+                byte[] buffer = new byte[num2];
+                for (int num3 = stream.Read(buffer, 0, num2); num3 > 0; num3 = stream.Read(buffer, 0, num2))
+                {
+                    num = num3 + num;
+                    fileStream.Write(buffer, 0, num3);
+
+
+                    if (updateProgress != null)
+                        updateProgress.Invoke((int)num, (int)contentLength);
+                }
+                return true;
+            }
+            catch (Exception)
+            {
+                return false;
+            }
+            finally
+            {
+                if (stream != null) stream.Close();
+                if (fileStream != null) fileStream.Close();
+                if (ftpWebResponse != null) ftpWebResponse.Close();
+            }
+        }
+
+        public static bool FtpDownload(string remoteFileName, string localFileName, bool ifCredential, bool brokenOpen, Action<int, int> updateProgress)
+        {
+            string errMsg = "";
+            if (brokenOpen)
+            {
+                try
+                {
+                    long size = 0L;
+                    if (File.Exists(localFileName))
+                    {
+                        using (FileStream fileStream = new FileStream(localFileName, FileMode.Open))
+                        {
+                            size = fileStream.Length;
+                        }
+                    }
+                    return FtpBrokenDownload(remoteFileName, localFileName, ifCredential, size, updateProgress);
+                }
+                catch
+                {
+                    throw;
+                }
+            }
+            return FtpDownload(remoteFileName, localFileName, ifCredential, out errMsg, updateProgress);
+        }
+
+        public static bool FtpUploadFile(string localFullPathName, string remotePath, Action<int, int> updateProgress)
+        {
+            Stream stream = null;
+            FtpWebResponse ftpWebResponse = null;
+            FileStream fileStream = null;
+            try
+            {
+                FileInfo fileInfo = new FileInfo(localFullPathName);
+                Uri requestUri = new Uri(remotePath);
+                FtpWebRequest ftpWebRequest = (FtpWebRequest.Create(requestUri)) as FtpWebRequest;
+                ftpWebRequest.KeepAlive = false;
+                ftpWebRequest.UseBinary = true;
+                ftpWebRequest.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
+                ftpWebRequest.Method = "STOR";
+                ftpWebRequest.ContentLength = fileInfo.Length;
+                ftpWebResponse = (ftpWebRequest.GetResponse() as FtpWebResponse);
+                ftpWebRequest.ContentLength = fileInfo.Length;
+                int num = 1024;
+                byte[] buffer = new byte[num];
+                fileStream = fileInfo.OpenRead();
+                stream = ftpWebRequest.GetRequestStream();
+                int num2 = fileStream.Read(buffer, 0, num);
+                int t = (int)fileInfo.Length;
+
+                if (updateProgress != null)
+                    updateProgress.Invoke(0, t);
+                int num3 = 0;
+                while (num2 != 0)
+                {
+                    num3 = num2 + num3;
+                    stream.Write(buffer, 0, num2);
+
+                    if (updateProgress != null)
+                        updateProgress.Invoke(num3, t);
+                    num2 = fileStream.Read(buffer, 0, num);
+                }
+                return true;
+            }
+            catch (Exception)
+            {
+                return false;
+            }
+            finally
+            {
+                if (stream != null) stream.Close();
+                if (fileStream != null) fileStream.Close();
+                if (ftpWebResponse != null) ftpWebResponse.Close();
+            }
+        }
+
+        public static bool FtpUploadBroken(string localFullPath, string remoteFilepath, Action<int, int> updateProgress)
+        {
+            if (remoteFilepath == null)
+            {
+                remoteFilepath = "";
+            }
+            string empty = string.Empty;
+            bool result = true;
+            FileInfo fileInfo = new FileInfo(localFullPath);
+            long length = fileInfo.Length;
+            if (fileInfo.Name.IndexOf("#") == -1)
+            {
+                empty = RemoveSpaces(fileInfo.Name);
+            }
+            else
+            {
+                empty = fileInfo.Name.Replace("#", "#");
+                empty = RemoveSpaces(empty);
+            }
+            long fileSize = GetFileSize(empty, remoteFilepath);
+            if (fileSize >= length)
+            {
+                return false;
+            }
+            long num = fileSize;
+
+            if (updateProgress != null)
+                updateProgress.Invoke((int)fileSize, (int)length);
+            string uriString = (remoteFilepath.Length != 0) ? (remoteFilepath + "/" + remoteFilepath + "/" + empty) : (remoteFilepath + "/" + empty);
+            FtpWebRequest ftpWebRequest = (FtpWebRequest.Create(new Uri(uriString))) as FtpWebRequest;
+            ftpWebRequest.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
+            ftpWebRequest.KeepAlive = false;
+            ftpWebRequest.Method = "APPE";
+            ftpWebRequest.UseBinary = true;
+            ftpWebRequest.ContentLength = fileInfo.Length;
+            int num2 = 2048;
+            byte[] buffer = new byte[num2];
+            FileStream fileStream = fileInfo.OpenRead();
+            Stream stream = null;
+            try
+            {
+                stream = ftpWebRequest.GetRequestStream();
+                fileStream.Seek(fileSize, SeekOrigin.Begin);
+                int num3 = fileStream.Read(buffer, 0, num2);
+                while (num3 != 0)
+                {
+                    stream.Write(buffer, 0, num3);
+                    num3 = fileStream.Read(buffer, 0, num2);
+                    num += num3;
+                    if (updateProgress != null)
+                        updateProgress.Invoke((int)num, (int)length);
+                }
+            }
+            catch
+            {
+                result = false;
+                throw;
+            }
+            finally
+            {
+                if (stream != null) stream.Close();
+                if (fileStream != null) fileStream.Close();
+            }
+            return result;
+        }
+
+        private static string RemoveSpaces(string str)
+        {
+            string text = "";
+            CharEnumerator enumerator = str.GetEnumerator();
+            while (enumerator.MoveNext())
+            {
+                byte[] array = new byte[1];
+                array = Encoding.ASCII.GetBytes(enumerator.Current.ToString());
+                int num = array[0];
+                if (num != 32)
+                {
+                    text += enumerator.Current.ToString();
+                }
+            }
+            string text2 = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString();
+            return text.Split('.')[text.Split('.').Length - 2] + "." + text.Split('.')[text.Split('.').Length - 1];
+        }
+
+        public static long GetFileSize(string filename, string remoteFilepath)
+        {
+            try
+            {
+                if (remoteFilepath.Length == 0)
+                {
+                    return 0L;
+                }
+                FtpWebRequest ftpWebRequest = (FtpWebRequest.Create(remoteFilepath)) as FtpWebRequest;
+                ftpWebRequest.KeepAlive = false;
+                ftpWebRequest.UseBinary = true;
+                ftpWebRequest.Credentials = new NetworkCredential(FtpUserID, FtpPassword);
+                ftpWebRequest.Method = "SIZE";
+                FtpWebResponse ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse();
+                return ftpWebResponse.ContentLength;
+            }
+            catch
+            {
+                return 0L;
+            }
+        }
+    }
+
+    public static class HTTP_Helper
+    {
+        public static bool DownFile(string URLAddress, string LocalAddress, out string errMsg, Action<int, int> updateProgress)
+        {
+            errMsg = "";
+            FileStream fileStream = null;
+            Stream stream = null;
+            bool result = false;
+            try
+            {
+                string startupPath = Application.StartupPath;
+                string fileName = Path.GetFileName(URLAddress);
+                string path = startupPath + "\\" + fileName;
+                string fileName2 = Process.GetCurrentProcess().MainModule.FileName;
+                if (Path.GetFullPath(path).ToUpper() == Path.GetFullPath(fileName2).ToUpper())
+                {
+                    return true;
+                }
+                fileStream = File.Open(path, FileMode.Create, FileAccess.Write, FileShare.None);
+                WebClient webClient = new WebClient();
+                stream = webClient.OpenRead(URLAddress);
+                int t = Convert.ToInt32(webClient.ResponseHeaders["Content-Length"]);
+                byte[] array = new byte[10240];
+                int count = array.Length;
+                int num = 0;
+                int num2 = 0;
+                do
+                {
+                    num = stream.Read(array, 0, count);
+                    num2 += num;
+                    if (num != 0)
+                    {
+                        fileStream.Write(array, 0, num);
+                    }
+                    if (updateProgress != null)
+                        updateProgress.Invoke(num2, t);
+                }
+                while (num != 0);
+                fileStream.Flush();
+                result = true;
+                return result;
+            }
+            catch (Exception ex)
+            {
+                errMsg = ex.Message;
+            }
+            finally
+            {
+                if (fileStream != null) fileStream.Close();
+                if (stream != null) stream.Dispose();
+            }
+            return result;
+        }
+    }
+
+
+}

+ 109 - 0
.svn/pristine/3f/3f50355a2bc5705d0c5ca28034aad110b4c320a9.svn-base

@@ -0,0 +1,109 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{276BAEDE-B4B5-4BAE-9ECE-2911D506D4EE}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Core.Mes.ClientFrameWork</RootNamespace>
+    <AssemblyName>Core.Mes.ClientFrameWork</AssemblyName>
+
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>D:\Code\Client\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget>x86</PlatformTarget>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Core.Mes.IBaseInterface, Version=1.0.2741.16142, Culture=neutral">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>d:\我的文档\桌面\产销平台DLL\Client\Core.Mes.IBaseInterface.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ClientCommon.cs" />
+    <Compile Include="FrmBase.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="RemotingHelp.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="FrmBase.resx">
+      <DependentUpon>FrmBase.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 48 - 0
.svn/pristine/40/40ad37b44991270e5fb7ff4cfe0c328ff166503b.svn-base

@@ -0,0 +1,48 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DBProxy", "DBProxy\DBProxy.csproj", "{F6CD9B3C-806A-4009-ACAB-935FF453A13C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DBManager", "DBManager\DBManager.csproj", "{860513AD-2743-4EB8-9406-01FEEA175348}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.Mes.ServerManager", "Core.Mes.ServerManager\Core.Mes.ServerManager.csproj", "{B724E4EE-31DB-420F-B417-C54470FCFEBA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.Mes.ServerFrameWork", "Core.Mes.ServerFrameWork\Core.Mes.ServerFrameWork.csproj", "{300F90A7-7F06-402E-9104-9E23799E76B1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.Mes.ServerCommon", "Core.Mes.ServerCommon\Core.Mes.ServerCommon.csproj", "{6A96B64B-879F-463B-9360-ED5B7AFAAAE5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.Mes.IBaseInterface", "Core.Mes.IBaseInterface\Core.Mes.IBaseInterface.csproj", "{ED2F98A3-DF8A-4097-A916-A7268F8D2CD0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.Mes.PurviewManager", "Core.Mes.PurviewManager\Core.Mes.PurviewManager.csproj", "{CF2CBB34-C907-40E0-8C83-D81A234482E7}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{F6CD9B3C-806A-4009-ACAB-935FF453A13C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F6CD9B3C-806A-4009-ACAB-935FF453A13C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F6CD9B3C-806A-4009-ACAB-935FF453A13C}.Release|Any CPU.Build.0 = Release|Any CPU
+		{860513AD-2743-4EB8-9406-01FEEA175348}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{860513AD-2743-4EB8-9406-01FEEA175348}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{860513AD-2743-4EB8-9406-01FEEA175348}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B724E4EE-31DB-420F-B417-C54470FCFEBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B724E4EE-31DB-420F-B417-C54470FCFEBA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B724E4EE-31DB-420F-B417-C54470FCFEBA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{300F90A7-7F06-402E-9104-9E23799E76B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{300F90A7-7F06-402E-9104-9E23799E76B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{300F90A7-7F06-402E-9104-9E23799E76B1}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6A96B64B-879F-463B-9360-ED5B7AFAAAE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6A96B64B-879F-463B-9360-ED5B7AFAAAE5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6A96B64B-879F-463B-9360-ED5B7AFAAAE5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{ED2F98A3-DF8A-4097-A916-A7268F8D2CD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{ED2F98A3-DF8A-4097-A916-A7268F8D2CD0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{ED2F98A3-DF8A-4097-A916-A7268F8D2CD0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{CF2CBB34-C907-40E0-8C83-D81A234482E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{CF2CBB34-C907-40E0-8C83-D81A234482E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{CF2CBB34-C907-40E0-8C83-D81A234482E7}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

+ 73 - 0
.svn/pristine/40/40ed6a2a1ee5d619ec24ac517a60ef2ea88fcbc6.svn-base

@@ -0,0 +1,73 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{300F90A7-7F06-402E-9104-9E23799E76B1}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Core.Mes.ServerFrameWork</RootNamespace>
+    <AssemblyName>Core.Mes.ServerFrameWork</AssemblyName>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\Server\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Core.Mes.IBaseInterface, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\Server\Core.Mes.IBaseInterface.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="DBManager, Version=1.0.3206.14966, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <Private>False</Private>
+      <HintPath>..\..\..\Server\DBManager.dll</HintPath>
+    </Reference>
+    <Reference Include="log4net, Version=1.2.0.30714, Culture=neutral">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\Output\log4net.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.configuration" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ClsComponentBase.cs" />
+    <Compile Include="ClsServerPoolBase.cs" />
+    <Compile Include="Dispatcher.cs" />
+    <Compile Include="IServerBase.cs" />
+    <Compile Include="LogCommon.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 26 - 0
.svn/pristine/40/40f836ffec16681a0bcd5a7f0726eb1358135210.svn-base

@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     此代码由工具生成。
+//     运行时版本:2.0.50727.8800
+//
+//     对此文件的更改可能会导致不正确的行为,并且如果
+//     重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ConService.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+    }
+}

+ 132 - 0
.svn/pristine/41/4144fc5a2dcbfbbab9b6a43f6ac5ac0f63cfa2e9.svn-base

@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="ultraToolbarsManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>198, 17</value>
+  </metadata>
+  <metadata name="ultraGridExcelExporter1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>299, 17</value>
+  </metadata>
+  <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>40</value>
+  </metadata>
+</root>

+ 10 - 0
.svn/pristine/41/41db367a510ee4cefe2d03d8b605036c58f4a6ce.svn-base

@@ -0,0 +1,10 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ProjectView>ProjectFiles</ProjectView>
+    <ReferencePath>D:\Code\SERVER\</ReferencePath>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <StartAction>Program</StartAction>
+    <StartProgram>D:\Code\SERVER\Core.Mes.ServerManager.exe</StartProgram>
+  </PropertyGroup>
+</Project>

+ 145 - 0
.svn/pristine/42/42ca92c32615e6bb4037bfaa6497b7cfc8a1a9ed.svn-base

@@ -0,0 +1,145 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{B724E4EE-31DB-420F-B417-C54470FCFEBA}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Core.Mes.ServerManager</RootNamespace>
+    <AssemblyName>Core.Mes.ServerManager</AssemblyName>
+    <StartupObject>Core.Mes.ServerManager.Program</StartupObject>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <IsWebBootstrapper>true</IsWebBootstrapper>
+    <ApplicationIcon>XG.ico</ApplicationIcon>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+    <PublishUrl>http://localhost/Core.Mes.ServerManager/</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Web</InstallFrom>
+    <UpdateEnabled>true</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\Server\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget>x86</PlatformTarget>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\Output\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Core.Mes.IBaseInterface, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\产销平台DLL\Server\Core.Mes.IBaseInterface.dll</HintPath>
+    </Reference>
+    <Reference Include="Core.Mes.ServerFrameWork, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System">
+      <HintPath>C:\Windows\assembly\GAC_MSIL\System\2.0.0.0__b77a5c561934e089\System.dll</HintPath>
+    </Reference>
+    <Reference Include="System.configuration" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Remoting" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ClsServerMain.cs" />
+    <Compile Include="ExitMessageFilter.cs" />
+    <Compile Include="FrmSeverMain.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <Compile Include="RemotingGate.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\DBManager\DBManager.csproj">
+      <Project>{860513AD-2743-4EB8-9406-01FEEA175348}</Project>
+      <Name>DBManager</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\DBProxy\DBProxy.csproj">
+      <Project>{F6CD9B3C-806A-4009-ACAB-935FF453A13C}</Project>
+      <Name>DBProxy</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="XG.ico" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="FrmSeverMain.resx">
+      <DependentUpon>FrmSeverMain.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 53 - 0
.svn/pristine/42/42d4c4ffe069660480c7e6fe029824ccb8fe596f.svn-base

@@ -0,0 +1,53 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{ED2F98A3-DF8A-4097-A916-A7268F8D2CD0}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Core.Mes.IBaseInterface</RootNamespace>
+    <AssemblyName>Core.Mes.IBaseInterface</AssemblyName>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\Server\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\Output\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ICommon.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 1131 - 0
.svn/pristine/43/43d5d0412f569ade21d16f13b82cce13a03d11f7.svn-base

@@ -0,0 +1,1131 @@
+using System;
+using System.Data;
+using System.Drawing;
+using System.Collections;
+using System.Configuration;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.IO;
+using System.Text;
+using System.Threading;
+using System.Windows.Forms.DataVisualization.Charting;
+using System.Diagnostics;
+using System.Collections.Generic;
+using Core.Mes.ServerFrameWork;
+using Infragistics.Win;
+using Infragistics.Win.UltraWinGrid;
+
+namespace Core.Mes.ServerManager
+{
+    /// <summary>
+    /// FrmSeverMain 的摘要说明。
+    /// </summary>
+    public class FrmSeverMain : System.Windows.Forms.Form
+    {
+        #region 变量定义
+        private IContainer components = null;
+        private string[] _args;
+        private TabControl tabControl1;
+        private TabPage tabPage1;
+        private TabPage tabPage2;
+        private TabPage tabPage3;
+        private SplitContainer splitContainer1;
+        private System.Windows.Forms.DataVisualization.Charting.Chart Chart1;
+        private System.Windows.Forms.DataVisualization.Charting.Chart Chart2;
+        private System.Windows.Forms.PictureBox pictureBox1;
+        private System.Windows.Forms.ListBox listBox1;
+        private ResDaemon resDaemon;
+        private SrvDaemon srvDaemon;
+        private ExtSrvDaemon extSrvDaemon;
+        private ClsServerMain cMain;
+        private TabPage tabPage4;
+        private Infragistics.Win.UltraWinGrid.UltraGrid ugServers;
+        private DataSet dataSet1;
+        private DataTable dataTable1;
+
+        private ServerConfigure _serverConf;
+
+        private bool IsLogging = false;
+        #endregion
+
+        public FrmSeverMain(string[] args)
+        {
+            _args = args;
+
+            if (_args != null)
+            {
+                foreach (string arg in _args)
+                {
+                    if (arg.Trim().ToUpper() == "LOG")
+                    {
+                        IsLogging = true;
+                    }
+                }
+            }
+
+            //
+            // Windows 窗体设计器支持所必需的
+            //
+            InitializeComponent();
+            //
+            // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
+            //
+
+
+            this.tabControl1.Controls.Remove(this.tabPage2);
+            this.tabControl1.Controls.Remove(this.tabPage3);
+            this.tabControl1.Controls.Remove(this.tabPage4);
+        }
+
+        /// <summary>
+        /// 清理所有正在使用的资源。
+        /// </summary>
+        protected override void Dispose(bool disposing)
+        {
+            try
+            {
+                if (disposing)
+                {
+                    if (cMain != null)
+                    {
+                        cMain.Dispose();
+                    }
+                    if (components != null)
+                    {
+                        components.Dispose();
+                    }
+                }
+
+
+                System.GC.Collect();
+                base.Dispose(disposing);
+            }
+            catch
+            {
+
+            }
+
+        }
+
+        #region Windows 窗体设计器生成的代码
+        /// <summary>
+        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
+        /// 此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmSeverMain));
+            System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+            System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
+            System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
+            System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series();
+            System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+            System.Windows.Forms.DataVisualization.Charting.Legend legend2 = new System.Windows.Forms.DataVisualization.Charting.Legend();
+            System.Windows.Forms.DataVisualization.Charting.LegendItem legendItem1 = new System.Windows.Forms.DataVisualization.Charting.LegendItem();
+            System.Windows.Forms.DataVisualization.Charting.LegendCell legendCell1 = new System.Windows.Forms.DataVisualization.Charting.LegendCell();
+            System.Windows.Forms.DataVisualization.Charting.LegendCell legendCell2 = new System.Windows.Forms.DataVisualization.Charting.LegendCell();
+            System.Windows.Forms.DataVisualization.Charting.Series series3 = new System.Windows.Forms.DataVisualization.Charting.Series();
+            System.Windows.Forms.DataVisualization.Charting.Series series4 = new System.Windows.Forms.DataVisualization.Charting.Series();
+            Infragistics.Win.Appearance appearance1 = new Infragistics.Win.Appearance("1", 65116440);
+            Infragistics.Win.Appearance appearance2 = new Infragistics.Win.Appearance("2", 65174161);
+            Infragistics.Win.Appearance appearance3 = new Infragistics.Win.Appearance("3", 65316418);
+            Infragistics.Win.Appearance appearance4 = new Infragistics.Win.Appearance("11", 65318540);
+            Infragistics.Win.Appearance appearance5 = new Infragistics.Win.Appearance("12", 65321145);
+            Infragistics.Win.Appearance appearance6 = new Infragistics.Win.Appearance("13", 65325154);
+            Infragistics.Win.Appearance appearance7 = new Infragistics.Win.Appearance("24", 65327806);
+            Infragistics.Win.Appearance appearance8 = new Infragistics.Win.Appearance("25", 65329756);
+            Infragistics.Win.Appearance appearance9 = new Infragistics.Win.Appearance("4", 22929605);
+            Infragistics.Win.Appearance appearance10 = new Infragistics.Win.Appearance("14", 23236973);
+            Infragistics.Win.Appearance appearance11 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance12 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance13 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance14 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance15 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance16 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance17 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance18 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance19 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance20 = new Infragistics.Win.Appearance();
+            Infragistics.Win.Appearance appearance21 = new Infragistics.Win.Appearance();
+            this.pictureBox1 = new System.Windows.Forms.PictureBox();
+            this.listBox1 = new System.Windows.Forms.ListBox();
+            this.tabControl1 = new System.Windows.Forms.TabControl();
+            this.tabPage1 = new System.Windows.Forms.TabPage();
+            this.tabPage2 = new System.Windows.Forms.TabPage();
+            this.Chart1 = new System.Windows.Forms.DataVisualization.Charting.Chart();
+            this.tabPage3 = new System.Windows.Forms.TabPage();
+            this.Chart2 = new System.Windows.Forms.DataVisualization.Charting.Chart();
+            this.tabPage4 = new System.Windows.Forms.TabPage();
+            this.ugServers = new Infragistics.Win.UltraWinGrid.UltraGrid();
+            this.dataSet1 = new System.Data.DataSet();
+            this.dataTable1 = new System.Data.DataTable();
+            this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
+            this.tabControl1.SuspendLayout();
+            this.tabPage1.SuspendLayout();
+            this.tabPage2.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.Chart1)).BeginInit();
+            this.tabPage3.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.Chart2)).BeginInit();
+            this.tabPage4.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.ugServers)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.dataSet1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.dataTable1)).BeginInit();
+            this.splitContainer1.Panel1.SuspendLayout();
+            this.splitContainer1.Panel2.SuspendLayout();
+            this.splitContainer1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // pictureBox1
+            // 
+            this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+            this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
+            this.pictureBox1.Location = new System.Drawing.Point(0, 0);
+            this.pictureBox1.Name = "pictureBox1";
+            this.pictureBox1.Size = new System.Drawing.Size(862, 116);
+            this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
+            this.pictureBox1.TabIndex = 0;
+            this.pictureBox1.TabStop = false;
+            // 
+            // listBox1
+            // 
+            this.listBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+            this.listBox1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.listBox1.ItemHeight = 12;
+            this.listBox1.Location = new System.Drawing.Point(3, 3);
+            this.listBox1.Name = "listBox1";
+            this.listBox1.Size = new System.Drawing.Size(848, 362);
+            this.listBox1.TabIndex = 1;
+            // 
+            // tabControl1
+            // 
+            this.tabControl1.Controls.Add(this.tabPage1);
+            this.tabControl1.Controls.Add(this.tabPage2);
+            this.tabControl1.Controls.Add(this.tabPage3);
+            this.tabControl1.Controls.Add(this.tabPage4);
+            this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.tabControl1.Location = new System.Drawing.Point(0, 0);
+            this.tabControl1.Name = "tabControl1";
+            this.tabControl1.SelectedIndex = 0;
+            this.tabControl1.Size = new System.Drawing.Size(862, 396);
+            this.tabControl1.TabIndex = 2;
+            // 
+            // tabPage1
+            // 
+            this.tabPage1.Controls.Add(this.listBox1);
+            this.tabPage1.Location = new System.Drawing.Point(4, 22);
+            this.tabPage1.Name = "tabPage1";
+            this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
+            this.tabPage1.Size = new System.Drawing.Size(854, 370);
+            this.tabPage1.TabIndex = 0;
+            this.tabPage1.Text = "消息列表";
+            this.tabPage1.UseVisualStyleBackColor = true;
+            // 
+            // tabPage2
+            // 
+            this.tabPage2.AutoScroll = true;
+            this.tabPage2.Controls.Add(this.Chart1);
+            this.tabPage2.Location = new System.Drawing.Point(4, 22);
+            this.tabPage2.Name = "tabPage2";
+            this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
+            this.tabPage2.Size = new System.Drawing.Size(854, 370);
+            this.tabPage2.TabIndex = 1;
+            this.tabPage2.Text = "服务使用";
+            this.tabPage2.UseVisualStyleBackColor = true;
+            // 
+            // Chart1
+            // 
+            chartArea1.AxisX.Enabled = System.Windows.Forms.DataVisualization.Charting.AxisEnabled.False;
+            chartArea1.AxisX.MajorGrid.Enabled = false;
+            chartArea1.AxisX.MajorTickMark.Enabled = false;
+            chartArea1.AxisX.ScaleBreakStyle.Spacing = 1;
+            chartArea1.AxisX.ScaleView.MinSizeType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Number;
+            chartArea1.AxisX.ScaleView.SizeType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Number;
+            chartArea1.AxisX.ScaleView.Zoomable = false;
+            chartArea1.InnerPlotPosition.Auto = false;
+            chartArea1.InnerPlotPosition.Height = 76.16758F;
+            chartArea1.InnerPlotPosition.Width = 91.96336F;
+            chartArea1.InnerPlotPosition.X = 6.68718F;
+            chartArea1.InnerPlotPosition.Y = 5.76923F;
+            chartArea1.Name = "ChartArea1";
+            this.Chart1.ChartAreas.Add(chartArea1);
+            this.Chart1.Dock = System.Windows.Forms.DockStyle.Fill;
+            legend1.Name = "Legend1";
+            this.Chart1.Legends.Add(legend1);
+            this.Chart1.Location = new System.Drawing.Point(3, 3);
+            this.Chart1.Margin = new System.Windows.Forms.Padding(0);
+            this.Chart1.Name = "Chart1";
+            series1.ChartArea = "ChartArea1";
+            series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StackedColumn;
+            series1.Legend = "Legend1";
+            series1.LegendText = "服务已使用数";
+            series1.Name = "Series1";
+            series2.ChartArea = "ChartArea1";
+            series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StackedColumn;
+            series2.Legend = "Legend1";
+            series2.LegendText = "服务实例上限";
+            series2.Name = "Series2";
+            this.Chart1.Series.Add(series1);
+            this.Chart1.Series.Add(series2);
+            this.Chart1.Size = new System.Drawing.Size(848, 364);
+            this.Chart1.TabIndex = 0;
+            // 
+            // tabPage3
+            // 
+            this.tabPage3.Controls.Add(this.Chart2);
+            this.tabPage3.Location = new System.Drawing.Point(4, 22);
+            this.tabPage3.Name = "tabPage3";
+            this.tabPage3.Padding = new System.Windows.Forms.Padding(3);
+            this.tabPage3.Size = new System.Drawing.Size(854, 370);
+            this.tabPage3.TabIndex = 2;
+            this.tabPage3.Text = "资源使用";
+            this.tabPage3.UseVisualStyleBackColor = true;
+            // 
+            // Chart2
+            // 
+            chartArea2.AxisX.IsMarginVisible = false;
+            chartArea2.AxisX.IsStartedFromZero = false;
+            chartArea2.AxisX.LineColor = System.Drawing.Color.Empty;
+            chartArea2.AxisX.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.NotSet;
+            chartArea2.AxisX.LineWidth = 0;
+            chartArea2.AxisX.MajorGrid.Enabled = false;
+            chartArea2.AxisX.MajorGrid.Interval = 0;
+            chartArea2.AxisX.MajorGrid.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash;
+            chartArea2.AxisX.ScaleBreakStyle.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.NotSet;
+            chartArea2.AxisY.LineColor = System.Drawing.Color.Red;
+            chartArea2.AxisY.MajorGrid.Enabled = false;
+            chartArea2.AxisY.MajorGrid.LineColor = System.Drawing.Color.DarkOrange;
+            chartArea2.AxisY.MajorGrid.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash;
+            chartArea2.AxisY.MajorTickMark.TickMarkStyle = System.Windows.Forms.DataVisualization.Charting.TickMarkStyle.InsideArea;
+            chartArea2.AxisY2.LineColor = System.Drawing.Color.DodgerBlue;
+            chartArea2.AxisY2.MajorGrid.LineColor = System.Drawing.Color.DodgerBlue;
+            chartArea2.AxisY2.MajorGrid.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash;
+            chartArea2.AxisY2.MajorTickMark.TickMarkStyle = System.Windows.Forms.DataVisualization.Charting.TickMarkStyle.InsideArea;
+            chartArea2.BorderWidth = 2;
+            chartArea2.Name = "ChartArea1";
+            this.Chart2.ChartAreas.Add(chartArea2);
+            this.Chart2.Dock = System.Windows.Forms.DockStyle.Fill;
+            legend2.BorderWidth = 0;
+            legendCell1.ForeColor = System.Drawing.Color.OrangeRed;
+            legendCell1.Name = "cell_Content";
+            legendCell1.Text = "0";
+            legendCell2.Name = "Cell_Label";
+            legendCell2.Text = "空闲内存(MB)";
+            legendItem1.Cells.Add(legendCell1);
+            legendItem1.Cells.Add(legendCell2);
+            legend2.CustomItems.Add(legendItem1);
+            legend2.LegendItemOrder = System.Windows.Forms.DataVisualization.Charting.LegendItemOrder.SameAsSeriesOrder;
+            legend2.LegendStyle = System.Windows.Forms.DataVisualization.Charting.LegendStyle.Column;
+            legend2.Name = "Legend1";
+            legend2.TableStyle = System.Windows.Forms.DataVisualization.Charting.LegendTableStyle.Tall;
+            this.Chart2.Legends.Add(legend2);
+            this.Chart2.Location = new System.Drawing.Point(3, 3);
+            this.Chart2.Margin = new System.Windows.Forms.Padding(0);
+            this.Chart2.Name = "Chart2";
+            series3.BorderWidth = 2;
+            series3.ChartArea = "ChartArea1";
+            series3.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
+            series3.Color = System.Drawing.Color.OrangeRed;
+            series3.LabelBorderDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash;
+            series3.LabelBorderWidth = 2;
+            series3.LabelForeColor = System.Drawing.Color.Red;
+            series3.Legend = "Legend1";
+            series3.LegendText = "内存(MB)";
+            series3.MarkerBorderWidth = 2;
+            series3.Name = "Series1";
+            series3.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Time;
+            series3.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Double;
+            series4.BorderDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash;
+            series4.BorderWidth = 2;
+            series4.ChartArea = "ChartArea1";
+            series4.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
+            series4.Color = System.Drawing.Color.DodgerBlue;
+            series4.Legend = "Legend1";
+            series4.LegendText = "CPU (%)";
+            series4.MarkerBorderWidth = 2;
+            series4.Name = "Series2";
+            series4.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Time;
+            series4.YAxisType = System.Windows.Forms.DataVisualization.Charting.AxisType.Secondary;
+            series4.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Double;
+            this.Chart2.Series.Add(series3);
+            this.Chart2.Series.Add(series4);
+            this.Chart2.Size = new System.Drawing.Size(848, 364);
+            this.Chart2.TabIndex = 0;
+            // 
+            // tabPage4
+            // 
+            this.tabPage4.Controls.Add(this.ugServers);
+            this.tabPage4.Location = new System.Drawing.Point(4, 22);
+            this.tabPage4.Name = "tabPage4";
+            this.tabPage4.Padding = new System.Windows.Forms.Padding(3);
+            this.tabPage4.Size = new System.Drawing.Size(854, 370);
+            this.tabPage4.TabIndex = 3;
+            this.tabPage4.Text = "扩展服务器";
+            this.tabPage4.UseVisualStyleBackColor = true;
+            // 
+            // ugServers
+            // 
+            this.ugServers.DataMember = "Table1";
+            this.ugServers.DataSource = this.dataSet1;
+            appearance1.BackColor = System.Drawing.Color.PaleGreen;
+            appearance1.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0)))));
+            appearance1.BackGradientStyle = Infragistics.Win.GradientStyle.VerticalBump;
+            appearance1.TextHAlign = Infragistics.Win.HAlign.Center;
+            appearance2.BackColor = System.Drawing.Color.Silver;
+            appearance2.BackColor2 = System.Drawing.Color.Gray;
+            appearance2.BackHatchStyle = Infragistics.Win.BackHatchStyle.BackwardDiagonal;
+            appearance2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
+            appearance2.TextHAlign = Infragistics.Win.HAlign.Center;
+            appearance3.BackColor = System.Drawing.Color.Silver;
+            appearance3.BackColor2 = System.Drawing.Color.Gray;
+            appearance3.BackGradientStyle = Infragistics.Win.GradientStyle.Vertical;
+            appearance3.TextHAlign = Infragistics.Win.HAlign.Center;
+            appearance4.BackColor = System.Drawing.Color.PaleGreen;
+            appearance4.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0)))));
+            appearance4.BackGradientStyle = Infragistics.Win.GradientStyle.VerticalBump;
+            appearance4.TextHAlign = Infragistics.Win.HAlign.Center;
+            appearance5.BackColor = System.Drawing.Color.Silver;
+            appearance5.BackColor2 = System.Drawing.Color.Gray;
+            appearance5.BackHatchStyle = Infragistics.Win.BackHatchStyle.BackwardDiagonal;
+            appearance5.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
+            appearance5.TextHAlign = Infragistics.Win.HAlign.Center;
+            appearance6.BackColor = System.Drawing.Color.Silver;
+            appearance6.BackColor2 = System.Drawing.Color.Gray;
+            appearance6.BackGradientStyle = Infragistics.Win.GradientStyle.Vertical;
+            appearance6.TextHAlign = Infragistics.Win.HAlign.Center;
+            appearance7.BackColor = System.Drawing.Color.Brown;
+            appearance7.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(64)))), ((int)(((byte)(0)))));
+            appearance7.BackGradientStyle = Infragistics.Win.GradientStyle.VerticalBump;
+            appearance7.ForeColor = System.Drawing.Color.Lime;
+            appearance7.TextHAlign = Infragistics.Win.HAlign.Center;
+            appearance8.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(108)))), ((int)(((byte)(108)))), ((int)(((byte)(108)))));
+            appearance8.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
+            appearance8.TextHAlign = Infragistics.Win.HAlign.Center;
+            appearance9.BackColor = System.Drawing.Color.LemonChiffon;
+            appearance9.BackColor2 = System.Drawing.Color.Gold;
+            appearance9.BackGradientStyle = Infragistics.Win.GradientStyle.VerticalBump;
+            appearance9.ForeColor = System.Drawing.Color.Blue;
+            appearance9.TextHAlign = Infragistics.Win.HAlign.Center;
+            appearance10.BackColor = System.Drawing.Color.LemonChiffon;
+            appearance10.BackColor2 = System.Drawing.Color.Gold;
+            appearance10.BackGradientStyle = Infragistics.Win.GradientStyle.VerticalBump;
+            appearance10.ForeColor = System.Drawing.Color.Blue;
+            appearance10.TextHAlign = Infragistics.Win.HAlign.Center;
+            this.ugServers.DisplayLayout.Appearances.Add(appearance1);
+            this.ugServers.DisplayLayout.Appearances.Add(appearance2);
+            this.ugServers.DisplayLayout.Appearances.Add(appearance3);
+            this.ugServers.DisplayLayout.Appearances.Add(appearance4);
+            this.ugServers.DisplayLayout.Appearances.Add(appearance5);
+            this.ugServers.DisplayLayout.Appearances.Add(appearance6);
+            this.ugServers.DisplayLayout.Appearances.Add(appearance7);
+            this.ugServers.DisplayLayout.Appearances.Add(appearance8);
+            this.ugServers.DisplayLayout.Appearances.Add(appearance9);
+            this.ugServers.DisplayLayout.Appearances.Add(appearance10);
+            this.ugServers.DisplayLayout.BorderStyle = Infragistics.Win.UIElementBorderStyle.Solid;
+            this.ugServers.DisplayLayout.BorderStyleCaption = Infragistics.Win.UIElementBorderStyle.None;
+            appearance11.BackColor = System.Drawing.SystemColors.ActiveBorder;
+            appearance11.BackColor2 = System.Drawing.SystemColors.ControlDark;
+            appearance11.BackGradientStyle = Infragistics.Win.GradientStyle.Vertical;
+            appearance11.BorderColor = System.Drawing.SystemColors.Window;
+            this.ugServers.DisplayLayout.GroupByBox.Appearance = appearance11;
+            appearance12.ForeColor = System.Drawing.SystemColors.GrayText;
+            this.ugServers.DisplayLayout.GroupByBox.BandLabelAppearance = appearance12;
+            this.ugServers.DisplayLayout.GroupByBox.BorderStyle = Infragistics.Win.UIElementBorderStyle.Solid;
+            appearance13.BackColor = System.Drawing.SystemColors.ControlLightLight;
+            appearance13.BackColor2 = System.Drawing.SystemColors.Control;
+            appearance13.BackGradientStyle = Infragistics.Win.GradientStyle.Horizontal;
+            appearance13.ForeColor = System.Drawing.SystemColors.GrayText;
+            this.ugServers.DisplayLayout.GroupByBox.PromptAppearance = appearance13;
+            this.ugServers.DisplayLayout.MaxColScrollRegions = 1;
+            this.ugServers.DisplayLayout.MaxRowScrollRegions = 1;
+            appearance14.BackColor = System.Drawing.SystemColors.Window;
+            appearance14.ForeColor = System.Drawing.SystemColors.ControlText;
+            this.ugServers.DisplayLayout.Override.ActiveCellAppearance = appearance14;
+            appearance15.BackColor = System.Drawing.SystemColors.Highlight;
+            appearance15.ForeColor = System.Drawing.SystemColors.HighlightText;
+            this.ugServers.DisplayLayout.Override.ActiveRowAppearance = appearance15;
+            this.ugServers.DisplayLayout.Override.AllowAddNew = Infragistics.Win.UltraWinGrid.AllowAddNew.No;
+            this.ugServers.DisplayLayout.Override.AllowDelete = Infragistics.Win.DefaultableBoolean.False;
+            this.ugServers.DisplayLayout.Override.AllowGroupBy = Infragistics.Win.DefaultableBoolean.False;
+            this.ugServers.DisplayLayout.Override.AllowGroupMoving = Infragistics.Win.UltraWinGrid.AllowGroupMoving.NotAllowed;
+            this.ugServers.DisplayLayout.Override.AllowGroupSwapping = Infragistics.Win.UltraWinGrid.AllowGroupSwapping.NotAllowed;
+            this.ugServers.DisplayLayout.Override.AllowRowLayoutCellSpanSizing = Infragistics.Win.Layout.GridBagLayoutAllowSpanSizing.None;
+            this.ugServers.DisplayLayout.Override.AllowRowLayoutLabelSpanSizing = Infragistics.Win.Layout.GridBagLayoutAllowSpanSizing.None;
+            this.ugServers.DisplayLayout.Override.AllowUpdate = Infragistics.Win.DefaultableBoolean.False;
+            appearance16.BackColor = System.Drawing.SystemColors.Window;
+            this.ugServers.DisplayLayout.Override.CardAreaAppearance = appearance16;
+            appearance17.BorderColor = System.Drawing.Color.Silver;
+            appearance17.TextTrimming = Infragistics.Win.TextTrimming.EllipsisCharacter;
+            this.ugServers.DisplayLayout.Override.CellAppearance = appearance17;
+            this.ugServers.DisplayLayout.Override.CellClickAction = Infragistics.Win.UltraWinGrid.CellClickAction.CellSelect;
+            this.ugServers.DisplayLayout.Override.CellMultiLine = Infragistics.Win.DefaultableBoolean.False;
+            this.ugServers.DisplayLayout.Override.CellPadding = 0;
+            this.ugServers.DisplayLayout.Override.ExpansionIndicator = Infragistics.Win.UltraWinGrid.ShowExpansionIndicator.Never;
+            this.ugServers.DisplayLayout.Override.FixedRowIndicator = Infragistics.Win.UltraWinGrid.FixedRowIndicator.None;
+            appearance18.BackColor = System.Drawing.SystemColors.Control;
+            appearance18.BackColor2 = System.Drawing.SystemColors.ControlDark;
+            appearance18.BackGradientAlignment = Infragistics.Win.GradientAlignment.Element;
+            appearance18.BackGradientStyle = Infragistics.Win.GradientStyle.Horizontal;
+            appearance18.BorderColor = System.Drawing.SystemColors.Window;
+            this.ugServers.DisplayLayout.Override.GroupByRowAppearance = appearance18;
+            appearance19.TextHAlign = Infragistics.Win.HAlign.Left;
+            this.ugServers.DisplayLayout.Override.HeaderAppearance = appearance19;
+            this.ugServers.DisplayLayout.Override.HeaderStyle = Infragistics.Win.HeaderStyle.WindowsXPCommand;
+            appearance20.BackColor = System.Drawing.SystemColors.Window;
+            appearance20.BorderColor = System.Drawing.Color.Silver;
+            this.ugServers.DisplayLayout.Override.RowAppearance = appearance20;
+            this.ugServers.DisplayLayout.Override.RowSelectorNumberStyle = Infragistics.Win.UltraWinGrid.RowSelectorNumberStyle.RowIndex;
+            this.ugServers.DisplayLayout.Override.RowSelectors = Infragistics.Win.DefaultableBoolean.True;
+            this.ugServers.DisplayLayout.Override.RowSelectorStyle = Infragistics.Win.HeaderStyle.WindowsXPCommand;
+            this.ugServers.DisplayLayout.Override.ShowInkButton = Infragistics.Win.ShowInkButton.Never;
+            appearance21.BackColor = System.Drawing.SystemColors.ControlLight;
+            this.ugServers.DisplayLayout.Override.TemplateAddRowAppearance = appearance21;
+            this.ugServers.DisplayLayout.PriorityScrolling = true;
+            this.ugServers.DisplayLayout.ScrollBounds = Infragistics.Win.UltraWinGrid.ScrollBounds.ScrollToFill;
+            this.ugServers.DisplayLayout.ScrollStyle = Infragistics.Win.UltraWinGrid.ScrollStyle.Immediate;
+            this.ugServers.DisplayLayout.ViewStyle = Infragistics.Win.UltraWinGrid.ViewStyle.SingleBand;
+            this.ugServers.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.ugServers.FlatMode = true;
+            this.ugServers.Location = new System.Drawing.Point(3, 3);
+            this.ugServers.Margin = new System.Windows.Forms.Padding(0);
+            this.ugServers.Name = "ugServers";
+            this.ugServers.Size = new System.Drawing.Size(848, 364);
+            this.ugServers.TabIndex = 0;
+            this.ugServers.Text = "独立运行";
+            this.ugServers.ClickCellButton += new Infragistics.Win.UltraWinGrid.CellEventHandler(this.ugServers_ClickCellButton);
+            this.ugServers.AfterCellUpdate += new Infragistics.Win.UltraWinGrid.CellEventHandler(this.ugServers_AfterCellUpdate);
+            this.ugServers.InitializeRow += new Infragistics.Win.UltraWinGrid.InitializeRowEventHandler(this.ugServers_InitializeRow);
+            // 
+            // dataSet1
+            // 
+            this.dataSet1.DataSetName = "NewDataSet";
+            this.dataSet1.Tables.AddRange(new System.Data.DataTable[] {
+            this.dataTable1});
+            // 
+            // dataTable1
+            // 
+            this.dataTable1.TableName = "Table1";
+            // 
+            // splitContainer1
+            // 
+            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.splitContainer1.IsSplitterFixed = true;
+            this.splitContainer1.Location = new System.Drawing.Point(0, 0);
+            this.splitContainer1.Margin = new System.Windows.Forms.Padding(0);
+            this.splitContainer1.Name = "splitContainer1";
+            this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
+            // 
+            // splitContainer1.Panel1
+            // 
+            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);
+            this.splitContainer1.Panel1MinSize = 100;
+            // 
+            // splitContainer1.Panel2
+            // 
+            this.splitContainer1.Panel2.Controls.Add(this.tabControl1);
+            this.splitContainer1.Size = new System.Drawing.Size(862, 513);
+            this.splitContainer1.SplitterDistance = 116;
+            this.splitContainer1.SplitterWidth = 1;
+            this.splitContainer1.TabIndex = 3;
+            // 
+            // FrmSeverMain
+            // 
+            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
+            this.ClientSize = new System.Drawing.Size(862, 513);
+            this.Controls.Add(this.splitContainer1);
+            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+            this.MaximizeBox = false;
+            this.Name = "FrmSeverMain";
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+            this.Text = "应用服务";
+            this.Load += new System.EventHandler(this.FrmSeverMain_Load);
+            this.Closing += new System.ComponentModel.CancelEventHandler(this.FrmSeverMain_Closing);
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
+            this.tabControl1.ResumeLayout(false);
+            this.tabPage1.ResumeLayout(false);
+            this.tabPage2.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.Chart1)).EndInit();
+            this.tabPage3.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.Chart2)).EndInit();
+            this.tabPage4.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.ugServers)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.dataSet1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.dataTable1)).EndInit();
+            this.splitContainer1.Panel1.ResumeLayout(false);
+            this.splitContainer1.Panel2.ResumeLayout(false);
+            this.splitContainer1.ResumeLayout(false);
+            this.ResumeLayout(false);
+
+        }
+        #endregion
+
+        private void FrmSeverMain_Load(object sender, System.EventArgs e)
+        {
+            ugValueList = GetServerVL();
+            //==>
+            //if (System.DateTime.Today > new System.DateTime(2007,1,1))	return;
+
+            ApplicationStart();
+            this.pictureBox1.Image = System.Drawing.Image.FromFile(@"Image\登录框.jpg");
+            cMain = new ClsServerMain();
+
+            cMain.ShowLogEvent += new Core.Mes.ServerManager.ClsServerMain.ShowLogDelegate(cMain_ShowLog);
+
+            cMain._isLogging = IsLogging;
+            Application.DoEvents();
+            this.Show();
+
+            InitConfigure();
+
+            cMain.InitServerMain(new object[] { _serverConf });
+
+            resDaemon = new ResDaemon();
+            resDaemon.StartDaemon();
+
+            srvDaemon = new SrvDaemon(cMain.HtAssemblyService);
+            srvDaemon.StartDaemon();
+            InitChart();
+
+            extSrvDaemon = new ExtSrvDaemon();
+            ///////////////服务启动后,方可进行资源监控/////////////////
+            this.tabControl1.Controls.Add(this.tabPage2);
+            this.tabControl1.Controls.Add(this.tabPage3);
+            this.tabControl1.Controls.Add(this.tabPage4);
+            this.tabControl1.Selected += new System.Windows.Forms.TabControlEventHandler(this.tabControl1_Selected);
+        }
+
+        private void InitConfigure()
+        {
+            _serverConf = new ServerConfigure();
+            _serverConf.ssc_event = new Core.Mes.ServerFrameWork.ExtSrvDaemon.ShowExtSrvEvent(CallBackShowExtSrv);
+            _serverConf.OnMasterServerChanged = new InvokeCallback(MasterChanged);
+        }
+
+        private void MasterChanged(string _mName)
+        {
+            if (ugServers.InvokeRequired)
+            {
+                InvokeCallback method = new InvokeCallback(MasterChanged);
+                ugServers.Invoke(method, _mName);
+                return;
+            }
+
+            if (string.IsNullOrEmpty(_mName))
+            {
+                ugServers.Text = "独立运行";
+            }
+            else
+            {
+                UriBuilder ub = new UriBuilder(_mName);
+                ugServers.Text = string.Format("本机受控于服务器[{0}:{1}]", ub.Host, ub.Port);
+            }
+        }
+
+        Thread t_ShowRes = null;
+        Thread t_ShowSrv = null;
+        Thread t_ShowExt = null;
+        private void InitChart()
+        {
+            Chart1.ChartAreas[0].AxisY.Minimum = 0;
+            Chart1.ChartAreas[0].AxisX.Minimum = 0;
+
+            Chart2.ChartAreas[0].AxisY.Minimum = 0;
+            Chart2.ChartAreas[0].AxisY2.Minimum = 0;
+            Chart2.ChartAreas[0].AxisY2.Maximum = 100;
+
+            StopShowResData();
+            StopShowSrvData();
+        }
+
+        private void StartShowResData()
+        {
+            if (t_ShowRes == null ||
+                t_ShowRes.ThreadState == System.Threading.ThreadState.Stopped ||
+                t_ShowRes.ThreadState == System.Threading.ThreadState.Aborted)
+            {
+                t_ShowRes = new Thread(ShowResData);
+                t_ShowRes.Name = "资源数据读取";
+                t_ShowRes.Start();
+                resDaemon.ResumeMe();
+            }
+            else
+            {
+                resDaemon.ResumeMe();
+            }
+        }
+        private void StartShowSrvData()
+        {
+            if (t_ShowSrv == null ||
+                t_ShowSrv.ThreadState == System.Threading.ThreadState.Stopped ||
+                t_ShowSrv.ThreadState == System.Threading.ThreadState.Aborted)
+            {
+                t_ShowSrv = new Thread(ShowSrvData);
+                t_ShowSrv.Name = "服务数据读取";
+                t_ShowSrv.Start();
+                srvDaemon.ResumeMe();
+            }
+            else
+            {
+                srvDaemon.ResumeMe();
+            }
+        }
+
+        private void StartShowExtServer()
+        {
+            if (t_ShowExt == null ||
+                t_ShowExt.ThreadState == System.Threading.ThreadState.Stopped ||
+                t_ShowExt.ThreadState == System.Threading.ThreadState.Aborted)
+            {
+                t_ShowExt = new Thread(ShowExtServer);
+                t_ShowExt.Name = "扩展服务器读取";
+                t_ShowExt.Start();
+                extSrvDaemon.ResumeMe();
+            }
+            else
+            {
+                extSrvDaemon.ResumeMe();
+            }
+        }
+
+        private void StopShowResData()
+        {
+            if (t_ShowRes != null)
+            {
+                resDaemon.SuspendMe();
+            }
+        }
+        private void StopShowSrvData()
+        {
+            if (t_ShowSrv != null)
+            {
+                srvDaemon.SuspendMe();
+            }
+        }
+        private void StopShowExtServer()
+        {
+            if (t_ShowSrv != null)
+            {
+                extSrvDaemon.SuspendMe();
+            }
+        }
+        private void ShowResData()
+        {
+            try
+            {
+                resDaemon.ShowResData(this.Chart2, new ResDaemon.ShowResDataEvent(CallBackShowResData));
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(ex.Message, "资源显示线程错误");
+            }
+        }
+
+        private void ShowSrvData()
+        {
+            try
+            {
+                srvDaemon.ShowSrvData(new SrvDaemon.ShowSrvDataEvent(CallBackShowSrvData));
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(ex.Message, "服务显示线程错误");
+            }
+        }
+
+        private void ShowExtServer()
+        {
+            try
+            {
+                extSrvDaemon.ShowExtServer(new ExtSrvDaemon.ShowExtSrvEvent(CallBackShowExtSrv));
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(ex.Message, "扩展服务器显示线程错误");
+            }
+        }
+
+        private void CallBackShowResData(List<DataPoint> ps1, List<DataPoint> ps2)
+        {
+            if (Chart2.InvokeRequired)
+            {
+                ResDaemon.ShowResDataEvent srde = new ResDaemon.ShowResDataEvent(CallBackShowResData);
+                this.Invoke(srde, new object[] { ps1, ps2 });
+                return;
+            }
+            Series s1 = Chart2.Series[0];
+            Series s2 = Chart2.Series[1];
+
+            s1.Points.Invalidate();
+            s2.Points.Invalidate();
+
+            s1.Points.Clear();
+            s2.Points.Clear();
+
+            foreach (DataPoint dp in ps1)
+            {
+                s1.Points.Add(dp);
+            }
+            foreach (DataPoint dp in ps2)
+            {
+                s2.Points.Add(dp);
+            }
+
+            Chart2.ChartAreas[0].AxisX.Minimum = s1.Points[0].XValue;
+            Chart2.ChartAreas[0].AxisX.Maximum = s1.Points[s1.Points.Count - 1].XValue;
+
+            SystemInfo si = new SystemInfo();
+            Chart2.Legends[0].CustomItems[0].Cells[0].Text = (si.MemoryAvailable / 1024 / 1024).ToString();
+
+            s1.Points.ResumeUpdates();
+            s2.Points.ResumeUpdates();
+        }
+
+        private void CallBackShowSrvData(List<DataPoint> ps1, List<DataPoint> ps2)
+        {
+            if (Chart1.InvokeRequired)
+            {
+                SrvDaemon.ShowSrvDataEvent ssde = new SrvDaemon.ShowSrvDataEvent(CallBackShowSrvData);
+                this.Invoke(ssde, new object[] { ps1, ps2 });
+                return;
+            }
+            Series s1 = Chart1.Series[0];
+            Series s2 = Chart1.Series[1];
+
+            s1.Points.Invalidate();
+            s2.Points.Invalidate();
+
+            s1.Points.Clear();
+            s2.Points.Clear();
+
+            foreach (DataPoint dp in ps1)
+            {
+                s1.Points.Add(dp);
+            }
+            foreach (DataPoint dp in ps2)
+            {
+                s2.Points.Add(dp);
+            }
+
+            s1.Points.ResumeUpdates();
+        }
+
+        private void CallBackShowExtSrv()
+        {
+            if (ugServers.InvokeRequired)
+            {
+                ExtSrvDaemon.ShowExtSrvEvent sese = new ExtSrvDaemon.ShowExtSrvEvent(CallBackShowExtSrv);
+                this.Invoke(sese);
+                return;
+            }
+            ugServers.SuspendLayout();
+            ugServers.SuspendRowSynchronization();
+
+            Hashtable extServers = this.cMain.HtExternServer;
+            DataTable dt = this.dataSet1.Tables[0];
+
+            if (dt.Columns.Count == 0)
+            {
+                dt.Columns.Add("本地服务", typeof(string));
+            }
+            if (dt.Rows.Count == 0)
+            {
+                DataRow dr = dt.NewRow();
+                dr[0] = "1";
+                dt.Rows.Add(dr);
+            }
+            dt.AcceptChanges();
+
+            //去除无效服务器
+            foreach (DataColumn dc in dt.Columns)
+            {
+                if (dc.ColumnName == "本地服务") continue;
+                bool keep_it = false;
+                foreach (string ServerName in extServers.Keys)
+                {
+                    UriBuilder ub = new UriBuilder(ServerName);
+                    string sn = string.Format("{0}:{1}", ub.Host, ub.Port);
+
+                    if (sn == dc.ColumnName)
+                    {
+                        keep_it = true;
+                    }
+                }
+                if (!keep_it)
+                {
+                    dt.Columns.Remove(dc);
+                }
+            }
+            dt.AcceptChanges();
+
+            //新增服务器
+            foreach (string ServerName in extServers.Keys)
+            {
+                UriBuilder ub = new UriBuilder(ServerName);
+                string sn = string.Format("{0}:{1}", ub.Host, ub.Port);
+                if (!dt.Columns.Contains(sn))
+                {
+                    dt.Columns.Add(sn, typeof(string));
+                }
+                RemotingServer rs = (RemotingServer)(extServers[ServerName]);
+
+                string status = (rs.Valid != RemoteServerStatus.Normal) ? ((int)(rs.Valid)).ToString() : (rs.Enable ? "1" : "3");
+                dt.Rows[0][sn] = status;
+            }
+
+            //去除无效服务
+            for (int idx = 1; idx < dt.Rows.Count; idx++)
+            {
+                DataRow dr = dt.Rows[idx];
+                if (cMain.HTServiceKeys.ContainsKey(dr["本地服务"].ToString())) continue;
+
+                dr.Delete();
+            }
+            dt.AcceptChanges();
+            //新增服务项
+            foreach (string serviceName in this.cMain.HTServiceKeys.Keys)
+            {
+                DataRow[] drs = dt.Select(string.Format("本地服务='{0}'", serviceName));
+                DataRow dr = null;
+                if (drs.GetLength(0) == 0)
+                {
+                    dr = dt.NewRow();
+                    dr[0] = serviceName;
+                    dt.Rows.Add(dr);
+                }
+                else
+                {
+                    dr = drs[0];
+                }
+                foreach (string serverName in extServers.Keys)
+                {
+                    UriBuilder ub = new UriBuilder(serverName);
+                    string sn = string.Format("{0}:{1}", ub.Host, ub.Port);
+                    RemotingServer rs = (RemotingServer)(extServers[serverName]);
+
+                    string server_status = dt.Rows[0][sn].ToString();
+                    if (server_status != "1")
+                    {
+                        dr[sn] = "1" + server_status;
+                        continue;
+                    }
+
+                    string status = "1";
+                    if (!rs.HTServices.ContainsKey(serviceName))
+                    {
+                        status = "25";
+                    }
+                    else
+                    {
+                        ServiceObject so = (ServiceObject)(rs.HTServices[serviceName]);
+                        switch (so.Valid)
+                        {
+                            case ServiceObjectStatus.Normal:
+                                status = (so.Enable ? "11" : "13");
+                                break;
+                            case ServiceObjectStatus.Unable:
+                                status = "12";
+                                break;
+                            case ServiceObjectStatus.UnMatch:
+                                status = "24";
+                                break;
+                        }
+                    }
+
+                    dr[sn] = status;
+                }
+            }
+            dt.AcceptChanges();
+
+            for (int idx = 0; idx < ugServers.DisplayLayout.Bands[0].Columns.Count; idx++)
+            {
+                ugServers.DisplayLayout.Bands[0].Columns[idx].ValueList = ugValueList;
+
+            }
+
+            ugServers.ResumeRowSynchronization();
+            ugServers.ResumeLayout();
+        }
+
+        private static ValueList ugValueList = null;
+        private ValueList GetServerVL()
+        {
+            ValueList vl = new ValueList();
+            vl.ValueListItems.Add("1", "[正常运行]");
+            vl.ValueListItems.Add("2", "[不可用]");
+            vl.ValueListItems.Add("3", "[暂停服务]");
+            vl.ValueListItems.Add("4", "[受控于其他主机]");
+            vl.ValueListItems.Add("11", "功能正常");
+            vl.ValueListItems.Add("12", "不可用");
+            vl.ValueListItems.Add("13", "暂停服务");
+            vl.ValueListItems.Add("14", "受控其他主机");
+            vl.ValueListItems.Add("24", "版本不一致");
+            vl.ValueListItems.Add("25", "缺少服务");
+            return vl;
+        }
+
+        private void cMain_ShowLog(string log)
+        {
+            lock (this.listBox1)
+            {
+                this.listBox1.Invalidate();
+                this.listBox1.Items.Add(log);
+                this.listBox1.SelectedIndex = this.listBox1.Items.Count - 1;
+                Application.DoEvents();
+                this.listBox1.Update();
+            }
+        }
+
+        private void FrmSeverMain_Closing(object sender, System.ComponentModel.CancelEventArgs e)
+        {
+            if (MessageBox.Show("是否确认退出服务端程序?", "提示", MessageBoxButtons.YesNo,
+                MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.No)
+            {
+                e.Cancel = true;
+            }
+            else
+            {
+                ApplicationExit();
+                Application.Exit();
+                System.Diagnostics.Process.GetCurrentProcess().Kill();
+
+            }
+        }
+
+        private static void ApplicationExit()
+        {
+
+            string path = string.Format(@"{0}/log/Application/{1}.txt", Application.StartupPath, System.DateTime.Now.ToString("yyyy_MM_dd"));
+
+            using (StreamWriter sw = new StreamWriter(path, true, Encoding.UTF8))
+            {
+
+                StringBuilder sbtxt = new StringBuilder();
+                sbtxt.AppendLine("==============================================");
+                sbtxt.AppendLine(string.Format("服务关闭时间:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm::ss")));
+                sbtxt.AppendLine("==============================================");
+                sw.WriteLine(sbtxt.ToString());
+
+            }
+
+
+        }
+        private static void ApplicationStart()
+        {
+            string path = string.Format(@"{0}/log/Application/{1}.txt", Application.StartupPath, System.DateTime.Now.ToString("yyyy_MM_dd"));
+
+            using (StreamWriter sw = new StreamWriter(path, true, Encoding.UTF8))
+            {
+
+                StringBuilder sbtxt = new StringBuilder();
+                sbtxt.AppendLine("==============================================");
+                sbtxt.AppendLine(string.Format("服务开启时间:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm::ss")));
+                sbtxt.AppendLine("==============================================");
+                sw.WriteLine(sbtxt.ToString());
+
+            }
+        }
+
+        private void tabControl1_Selected(object sender, TabControlEventArgs e)
+        {
+            if (e.TabPageIndex == 1)
+            {
+                StartShowSrvData();
+            }
+            else
+            {
+                StopShowSrvData();
+            }
+
+            if (e.TabPageIndex == 2)
+            {
+                StartShowResData();
+            }
+            else
+            {
+                StopShowResData();
+            }
+
+            if (e.TabPageIndex == 3)
+            {
+                StartShowExtServer();
+            }
+            else
+            {
+                StopShowExtServer();
+            }
+
+        }
+
+        private void ugServers_AfterCellUpdate(object sender, CellEventArgs e)
+        {
+            UltraGridColumn uc = e.Cell.Column;
+
+            try
+            {
+                if (uc.Index > 0 || e.Cell.Row.Index == 0)
+                {
+                    e.Cell.Appearance = ugServers.DisplayLayout.Appearances[e.Cell.Row.GetCellValue(uc).ToString()];
+                }
+            }
+            catch { }
+        }
+
+        private void ugServers_InitializeRow(object sender, InitializeRowEventArgs e)
+        {
+            for (int idx = 0; idx < e.Row.Band.Columns.Count; idx++)
+            {
+                UltraGridColumn uc = e.Row.Band.Columns[idx];
+
+                try
+                {
+                    if (uc.Index > 0 || e.Row.Index == 0)
+                    {
+                        e.Row.Cells[idx].Appearance = ugServers.DisplayLayout.Appearances[e.Row.GetCellValue(uc).ToString()];
+                        string cell_value = e.Row.GetCellValue(uc).ToString();
+
+                        if (cell_value == "1" || cell_value == "3" || cell_value == "11" || cell_value == "13")
+                        {
+                            e.Row.Cells[idx].Style = Infragistics.Win.UltraWinGrid.ColumnStyle.Button;
+                        }
+                        else
+                        {
+                            e.Row.Cells[idx].Style = Infragistics.Win.UltraWinGrid.ColumnStyle.Default;
+                        }
+                    }
+                }
+                catch { }
+            }
+        }
+
+        private void ugServers_ClickCellButton(object sender, CellEventArgs e)
+        {
+            ugServers.SuspendRowSynchronization();
+            UltraGridColumn uc = e.Cell.Column;
+            string cell_value = e.Cell.Row.GetCellValue(uc).ToString();
+            string ServerName = uc.Header.Caption;
+            string ServiceName = e.Cell.Row.GetCellValue(e.Cell.Row.Band.Columns[0]).ToString();
+
+
+            if (cell_value == "1")
+            {
+                cMain.SetServerFlag(ServerName, false);
+            }
+            else if (cell_value == "3")
+            {
+                cMain.SetServerFlag(ServerName, true);
+            }
+            else if (cell_value == "11")
+            {
+                cMain.SetServiceFlag(ServerName, ServiceName, false);
+            }
+            else if (cell_value == "13")
+            {
+                cMain.SetServiceFlag(ServerName, ServiceName, true);
+            }
+            ugServers.ResumeRowSynchronization();
+            ugServers.Update();
+        }
+    }
+}

+ 210 - 0
.svn/pristine/44/442deaa0d7b09759a9a073ae45b7c5e5a0370e95.svn-base

@@ -0,0 +1,210 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{6C9E9C77-8752-4C8C-9355-E35BC1382746}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Core.Mes.ClientPurviewManager</RootNamespace>
+    <AssemblyName>Core.Mes.ClientPurviewManager</AssemblyName>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\Client\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\..\Client\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Core.Mes.IBaseInterface, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\CXMES\Server\Core.Mes.IBaseInterface.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="Infragistics.Excel.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Shared.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.Misc.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinDataSource.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinEditors.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinGrid.ExcelExport.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinGrid.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinListBar.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinMaskedEdit.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinToolbars.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.UltraWinTree.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="Infragistics.Win.v5.2, Version=5.2.20052.27, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" />
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="FrmAuthorization.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="FrmDepartment.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="FrmFunction.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="FrmPurviewSet.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="frmQuestionFeedback.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="frmQuestionFeedback.Designer.cs">
+      <DependentUpon>frmQuestionFeedback.cs</DependentUpon>
+    </Compile>
+    <Compile Include="frmReply.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="frmReply.Designer.cs">
+      <DependentUpon>frmReply.cs</DependentUpon>
+    </Compile>
+    <Compile Include="FrmRole.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="FrmSelUserID.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="FrmSetDepart.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="FrmUserManager.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="RightsComm.cs" />
+    <Compile Include="UcDepartment.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="UltraTree DropHightLight DrawFilter.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="FrmAuthorization.resx">
+      <DependentUpon>FrmAuthorization.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FrmDepartment.resx">
+      <DependentUpon>FrmDepartment.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FrmFunction.resx">
+      <DependentUpon>FrmFunction.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FrmPurviewSet.resx">
+      <DependentUpon>FrmPurviewSet.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="frmQuestionFeedback.resx">
+      <SubType>Designer</SubType>
+      <DependentUpon>frmQuestionFeedback.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="frmReply.resx">
+      <SubType>Designer</SubType>
+      <DependentUpon>frmReply.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FrmRole.resx">
+      <DependentUpon>FrmRole.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FrmSelUserID.resx">
+      <DependentUpon>FrmSelUserID.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FrmSetDepart.resx">
+      <DependentUpon>FrmSetDepart.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FrmUserManager.resx">
+      <DependentUpon>FrmUserManager.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\licenses.licx" />
+    <EmbeddedResource Include="UcDepartment.resx">
+      <DependentUpon>UcDepartment.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="ClassDiagram1.cd" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Core.Mes.ClientFrameWork\Core.Mes.ClientFrameWork.csproj">
+      <Project>{276BAEDE-B4B5-4BAE-9ECE-2911D506D4EE}</Project>
+      <Name>Core.Mes.ClientFrameWork</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 40 - 0
.svn/pristine/44/448976e1922602faabf54d539fcd144ff18da77f.svn-base

@@ -0,0 +1,40 @@
+using System;
+using System.Collections;
+using System.Runtime.Remoting;
+using System.Runtime.Remoting.Channels;
+using System.Runtime.Remoting.Channels.Tcp;
+using System.Configuration;
+using System.Runtime.Serialization.Formatters;
+using Core.Mes.ServerFrameWork;
+
+namespace Core.Mes.ServerManager
+{
+
+    public class RemotingGate
+    {
+        ServerConfigure _servConf = null;
+        public RemotingGate(ServerConfigure _servCfg)
+        {
+            _servConf = _servCfg;
+            StartServer();
+        }
+
+        public void StartServer()
+        {
+            //try
+            {
+                IDictionary props = new Hashtable();
+                props["port"] = _servConf.ServerPort;
+                RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.Off;
+                ChannelServices.RegisterChannel(new TcpChannel(Convert.ToInt32(props["port"])), false);
+
+            }
+            /*catch (Exception ex)
+            {
+                throw new  Exception(ex.Message, ex);
+            }*/
+        }
+
+    }
+}
+

+ 198 - 0
.svn/pristine/44/44b535859372c22e3f8cca4f64188f55155897bc.svn-base

@@ -0,0 +1,198 @@
+using System;
+using System.Data;
+using System.Drawing;
+using System.Collections;
+using System.Configuration;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.IO;
+using System.Text;
+
+namespace Core.Mes.ServerManager
+{
+    /// <summary>
+    /// FrmSeverMain 的摘要说明。
+    /// </summary>
+    public class FrmSeverMain : System.Windows.Forms.Form
+    {
+        /// <summary>
+        /// 必需的设计器变量。
+        /// </summary>
+        private System.ComponentModel.Container components = null;
+
+        public FrmSeverMain()
+        {
+            //
+            // Windows 窗体设计器支持所必需的
+            //
+            InitializeComponent();
+
+            //
+            // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
+            //
+        }
+
+        /// <summary>
+        /// 清理所有正在使用的资源。
+        /// </summary>
+        protected override void Dispose(bool disposing)
+        {
+            try
+            {
+                if (disposing)
+                {
+                    if (cMain != null)
+                    {
+                        cMain.Dispose();
+                    }
+                    if (components != null)
+                    {
+                        components.Dispose();
+                    }
+                }
+
+
+                System.GC.Collect();
+                base.Dispose(disposing);
+            }
+            catch
+            {
+
+            }
+
+        }
+
+        #region Windows 窗体设计器生成的代码
+        /// <summary>
+        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
+        /// 此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.pictureBox1 = new System.Windows.Forms.PictureBox();
+            this.listBox1 = new System.Windows.Forms.ListBox();
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // pictureBox1
+            // 
+            this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+            this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.pictureBox1.Location = new System.Drawing.Point(0, 0);
+            this.pictureBox1.Name = "pictureBox1";
+            this.pictureBox1.Size = new System.Drawing.Size(480, 112);
+            this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
+            this.pictureBox1.TabIndex = 0;
+            this.pictureBox1.TabStop = false;
+            // 
+            // listBox1
+            // 
+            this.listBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+            this.listBox1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.listBox1.ItemHeight = 12;
+            this.listBox1.Location = new System.Drawing.Point(0, 112);
+            this.listBox1.Name = "listBox1";
+            this.listBox1.Size = new System.Drawing.Size(480, 98);
+            this.listBox1.TabIndex = 1;
+            // 
+            // FrmSeverMain
+            // 
+            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
+            this.ClientSize = new System.Drawing.Size(480, 215);
+            this.Controls.Add(this.listBox1);
+            this.Controls.Add(this.pictureBox1);
+            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+            this.MaximizeBox = false;
+            this.Name = "FrmSeverMain";
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+            this.Text = "应用服务";
+            this.Load += new System.EventHandler(this.FrmSeverMain_Load);
+            this.Closing += new System.ComponentModel.CancelEventHandler(this.FrmSeverMain_Closing);
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+        #endregion
+
+        //[STAThread]
+        //static void Main()
+        //{			
+        //    Application.Run(new FrmSeverMain());
+        //}
+        public static Configuration config;
+        private System.Windows.Forms.PictureBox pictureBox1;
+        private System.Windows.Forms.ListBox listBox1;
+        private ClsServerMain cMain;
+
+        private void FrmSeverMain_Load(object sender, System.EventArgs e)
+        {
+            //==>
+            //if (System.DateTime.Today > new System.DateTime(2007,1,1))	return;
+
+            ApplicationStart();
+            config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
+            this.pictureBox1.Image = System.Drawing.Image.FromFile(@"Image\登录框.jpg");
+            cMain = new ClsServerMain();
+
+            cMain.ShowLogEvent += new Core.Mes.ServerManager.ClsServerMain.ShowLogDelegate(cMain_ShowLog);
+
+            cMain.InitServerMain();
+        }
+
+        private void cMain_ShowLog(string log)
+        {
+            this.listBox1.Items.Add(log);
+            this.listBox1.SelectedIndex = this.listBox1.Items.Count - 1;
+        }
+
+        private void FrmSeverMain_Closing(object sender, System.ComponentModel.CancelEventArgs e)
+        {
+            if (MessageBox.Show("是否确认退出服务端程序?", "提示", MessageBoxButtons.YesNo,
+                MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.No)
+            {
+                e.Cancel = true;
+            }
+            else
+            {
+                ApplicationExit();
+                Application.Exit();
+                System.Diagnostics.Process.GetCurrentProcess().Kill();
+
+            }
+        }
+
+        private static void ApplicationExit()
+        {
+
+            string path = string.Format(@"{0}/log/Application/{1}.txt", Application.StartupPath, System.DateTime.Now.ToString("yyyy_MM_dd"));
+
+            using (StreamWriter sw = new StreamWriter(path, true, Encoding.UTF8))
+            {
+
+                StringBuilder sbtxt = new StringBuilder();
+                sbtxt.AppendLine("==============================================");
+                sbtxt.AppendLine(string.Format("服务关闭时间:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm::ss")));
+                sbtxt.AppendLine("==============================================");
+                sw.WriteLine(sbtxt.ToString());
+
+            }
+
+
+        }
+        private static void ApplicationStart()
+        {
+            string path = string.Format(@"{0}/log/Application/{1}.txt", Application.StartupPath, System.DateTime.Now.ToString("yyyy_MM_dd"));
+
+            using (StreamWriter sw = new StreamWriter(path, true, Encoding.UTF8))
+            {
+
+                StringBuilder sbtxt = new StringBuilder();
+                sbtxt.AppendLine("==============================================");
+                sbtxt.AppendLine(string.Format("服务开启时间:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm::ss")));
+                sbtxt.AppendLine("==============================================");
+                sw.WriteLine(sbtxt.ToString());
+
+            }
+        }
+    }
+}

+ 135 - 0
.svn/pristine/45/453449698defd6e2a89b89e082bbbd15c059b970.svn-base

@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="ultraToolbarsManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>348, 17</value>
+  </metadata>
+  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>348, 17</value>
+  </metadata>
+  <metadata name="ultraGridExcelExporter1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>449, 17</value>
+  </metadata>
+  <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>44</value>
+  </metadata>
+</root>

+ 138 - 0
.svn/pristine/45/458163ea80b65a848f6480d17b81cd21fe1a3517.svn-base

@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="ultraToolbarsManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>198, 17</value>
+  </metadata>
+  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>198, 17</value>
+  </metadata>
+  <metadata name="ultraGridExcelExporter1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>299, 17</value>
+  </metadata>
+  <metadata name="CHK_GL.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>40</value>
+  </metadata>
+</root>

+ 195 - 0
.svn/pristine/45/45ed176c139ba4ae2e4a6a7358ef8432ba3f75ad.svn-base

@@ -0,0 +1,195 @@
+using System;
+using System.Data;
+using System.Collections;
+using Core.Mes.ServerFrameWork;
+using Core.Mes.IBaseInterface;
+
+namespace Core.Mes.PurviewManager
+{
+  public class UAM_DEPARTMENT : IComponent
+  {
+    public UAM_DEPARTMENT() { }
+
+    private System.String _DEPARTMENTID;
+    private System.String _DEPARTMENTNAME;
+    private System.String _DESCRIPTION;
+    private string AChildDpt = "";
+
+    public System.String DEPARTMENTID
+    {
+      get { return _DEPARTMENTID; }
+      set { _DEPARTMENTID = value; }
+    }
+
+    public System.String DEPARTMENTNAME
+    {
+      get { return _DEPARTMENTNAME; }
+      set { _DEPARTMENTNAME = value; }
+    }
+
+    public System.String DESCRIPTION
+    {
+      get { return _DESCRIPTION; }
+      set { _DESCRIPTION = value; }
+    }
+
+
+    public ReturnObject SelectUAM_DEPARTMENT(string strWhere)
+    {
+      string sqlstr = "SELECT DEPARTMENTID"
+         + ", DEPARTMENTNAME"
+         + ", DESCRIPTION, DEPARTMENTPID"
+         + " FROM CXUSER.UAM_DEPARTMENT " + strWhere;
+      string err = "";
+      DataSet ds = null;
+      try
+      {
+        ds = DBManager.ExecuteQuery(sqlstr, out err);
+      }
+      catch (Exception ex)
+      {
+        Console.Write(ex.Message);
+      }
+      if (err == "") err = sqlstr;
+      return new ReturnObject(ds, err);
+    }
+
+    public ReturnObject SelectAndCopy(string strWhere)
+    {
+      string sqlstr = "SELECT DEPARTMENTID"
+         + ", DEPARTMENTNAME"
+         + ", DESCRIPTION"
+         + " FROM CXUSER.UAM_DEPARTMENT " + strWhere;
+      string err = "";
+      DataSet ds = DBManager.ExecuteQuery(sqlstr, out err);
+      if (err == "" && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
+      {
+        DataRow dr = ds.Tables[0].Rows[0];
+        Type type = this.GetType();
+        foreach (System.Reflection.PropertyInfo pro in type.GetProperties())
+        {
+          if (pro.GetType().ToString() == "System.Single")
+          {
+            pro.SetValue(this, (Single)dr[pro.Name], null);
+            continue;
+          }
+          pro.SetValue(this, dr[pro.Name], null);
+        }
+      }
+      if (err == "") err = sqlstr;
+      return new ReturnObject(ds, err);
+    }
+
+    public ReturnObject InsertUAM_DEPARTMENT(ArrayList ar)
+    {
+      string sqlstr = "INSERT INTO CXUSER.UAM_DEPARTMENT"
+         + " (DEPARTMENTID"
+         + ", DEPARTMENTNAME"
+         + ", DESCRIPTION"
+         + ", DEPARTMENTPID"
+         + ") VALUES ('" + ar[0]
+         + "', '" + ar[1]
+         + "', '" + ar[2]
+         + "', '" + ar[3] + "')";
+      string err = "";
+      int i = DBManager.ExecuteNonQuery(sqlstr, out err);
+      return new ReturnObject(i, err);
+    }
+
+    public ReturnObject UpdateUAM_DEPARTMENT(ArrayList ar)
+    {
+      string sqlstr = "UPDATE CXUSER.UAM_DEPARTMENT SET "
+         + "DEPARTMENTPID = '" + ar[3]
+         + "', DEPARTMENTNAME = '" + ar[1]
+         + "', DESCRIPTION = '" + ar[2]
+         + "' WHERE DEPARTMENTID = '" + ar[0] + "'";
+
+      string err = "";
+      int i = DBManager.ExecuteNonQuery(sqlstr, out err);
+      return new ReturnObject(i, err);
+    }
+
+    public ReturnObject DeleteUAM_DEPARTMENT(string DID)
+    {
+      string sqlstr = "SELECT COUNT(1) FROM CXUSER.UAM_DEPARTMENT WHERe DEPARTMENTPID='" + DID + "'";
+      DataSet dset = DBManager.ExecuteQuery(sqlstr);
+      if (int.Parse(dset.Tables[0].Rows[0][0].ToString()) > 0)
+      {
+        return new ReturnObject(0, "所选部门其下还有子部门,不允许直接删除!");
+      }
+      sqlstr = "SELECT COUNT(1) FROM CXUSER.UAM_USER where DEPARTMENTID='" + DID + "'";
+      dset = DBManager.ExecuteQuery(sqlstr);
+      if (int.Parse(dset.Tables[0].Rows[0][0].ToString()) > 0)
+      {
+        return new ReturnObject(0, "该部门其下还有用户,不允许直接删除!");
+      }
+      sqlstr = "SELECT COUNT(1) FROM CXUSER.UAM_ROLE where DEPARTMENTID='" + DID + "'";
+      dset = DBManager.ExecuteQuery(sqlstr);
+      if (int.Parse(dset.Tables[0].Rows[0][0].ToString()) > 0)
+      {
+        return new ReturnObject(0, "该部门其下还有角色,不允许直接删除!");
+      }
+
+      sqlstr = "DELETE FROM CXUSER.UAM_DEPARTMENT where DEPARTMENTID='" + DID + "'";
+      string err = "";
+      int i = DBManager.ExecuteNonQuery(sqlstr, out err);
+      return new ReturnObject(i, err);
+    }
+
+    public ReturnObject UpdateDataSet(DataSet ds, string sqlstr)
+    {
+      string err = "";
+      bool flag = DBManager.UpdateTable(ds.Tables[0], sqlstr, out err);
+      return new ReturnObject(flag, err);
+    }
+
+    public void Copy(UAM_DEPARTMENT par)
+    {
+      DEPARTMENTID = par.DEPARTMENTID;
+      DEPARTMENTNAME = par.DEPARTMENTNAME;
+      DESCRIPTION = par.DESCRIPTION;
+    }
+
+    public ReturnObject GetAllChildDpt(string DptID)
+    {
+      try
+      {
+        AChildDpt = "'" + DptID + "'";
+        string Dpt = "'" + DptID + "'";
+        string err = "";
+        string sql = "SELECT * FROM CXUSER.UAM_DEPARTMENT";
+        System.Data.DataSet dst = this.DBManager.ExecuteQuery(sql, out err);
+        if (dst != null && dst.Tables[0].Rows.Count > 0)
+        {
+          GetChildDpt(dst.Tables[0], Dpt);
+        }
+        return new ReturnObject(AChildDpt);
+      }
+      catch (System.Exception ex)
+      {
+        System.Diagnostics.Debug.WriteLine(ex.ToString());
+        return new ReturnObject(null);
+      }
+    }
+    private void GetChildDpt(System.Data.DataTable tab, string Dpt)
+    {
+      string RowFilter = "DEPARTMENTPID IN(" + Dpt + ")";
+      tab.DefaultView.RowFilter = RowFilter;
+      if (tab.DefaultView.Count > 0)
+      {
+        Dpt = "";
+        for (int i = 0; i < tab.DefaultView.Count; i++)
+        {
+          AChildDpt = AChildDpt + ",'" + tab.DefaultView[i]["DEPARTMENTID"].ToString() + "'";
+          Dpt = Dpt + ",'" + tab.DefaultView[i]["DEPARTMENTID"].ToString() + "'";
+        }
+        Dpt = Dpt.Substring(1, Dpt.Length - 1);
+        GetChildDpt(tab, Dpt);
+      }
+      else
+      {
+        return;
+      }
+    }
+  }
+}

+ 1611 - 0
.svn/pristine/46/46d74b6c8751cf8c7461b1b4b104558e99063ad8.svn-base

@@ -0,0 +1,1611 @@
+#define forCG
+
+extern alias global1;
+
+using System;
+using System.Net;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.Configuration;
+using System.Data;
+using System.Reflection;
+using System.Xml;
+using System.Diagnostics;
+using Microsoft.VisualBasic;
+
+using global::Infragistics.Win.UltraWinExplorerBar;
+using global::Infragistics.Win.UltraWinTree;
+using global::Infragistics.Win.UltraWinToolbars;
+using G = global::Infragistics.Win;
+using G1 = global1::Infragistics.Win;
+
+using Core.Mes.ClientFrameWork;
+using System.Runtime.InteropServices;
+using Core.Mes.IBaseInterface;
+using System.Threading;
+
+
+namespace Core.Mes.ClientManager
+{
+    /// <summary>
+    /// 平台客户端主窗体
+    /// </summary>
+    public class MainForm : System.Windows.Forms.Form
+    {
+
+        #region	"	窗体自动生成	"
+
+        public MainForm()
+        {
+            //
+            // Windows 窗体设计器支持所必需的
+            //
+            InitializeComponent();
+
+            //
+            // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
+            //		
+        }
+
+        /// <summary>
+        /// 清理所有正在使用的资源。
+        /// </summary>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing)
+            {
+                if (components != null)
+                {
+                    components.Dispose();
+                }
+            }
+            base.Dispose(disposing);
+            try
+            {
+                foreach (System.Diagnostics.Process pr in System.Diagnostics.Process.GetProcessesByName("Core.Mes.ClientManager.vshost"))
+                {
+                    try
+                    {
+                        pr.Kill();
+                    }
+                    catch { }
+                }
+            }
+            catch { }
+        }
+
+        #region Windows 窗体设计器生成的代码
+
+        private G.UltraWinToolbars.UltraToolbarsManager ultraToolbarsManager1;
+        private G.UltraWinToolbars.UltraToolbarsDockArea _MainForm_Toolbars_Dock_Area_Left;
+        private G.UltraWinToolbars.UltraToolbarsDockArea _MainForm_Toolbars_Dock_Area_Right;
+        private G.UltraWinToolbars.UltraToolbarsDockArea _MainForm_Toolbars_Dock_Area_Top;
+        private G.UltraWinToolbars.UltraToolbarsDockArea _MainForm_Toolbars_Dock_Area_Bottom;
+        private System.Windows.Forms.Panel panel1;
+        private G.UltraWinMaskedEdit.UltraMaskedEdit ultraMaskedEdit2;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.RichTextBox richTextBox1;
+        private System.Windows.Forms.Timer timer1;
+        private G.UltraWinDock.UltraDockManager ultraDockManager1;
+        private G.UltraWinDock.UnpinnedTabArea _MainFormUnpinnedTabAreaLeft;
+        private G.UltraWinDock.UnpinnedTabArea _MainFormUnpinnedTabAreaRight;
+        private G.UltraWinDock.UnpinnedTabArea _MainFormUnpinnedTabAreaTop;
+        private G.UltraWinDock.UnpinnedTabArea _MainFormUnpinnedTabAreaBottom;
+        private G.UltraWinDock.AutoHideControl _MainFormAutoHideControl;
+        private System.Windows.Forms.Timer timer2;
+        private System.Windows.Forms.ToolTip toolTip1;
+        private System.Windows.Forms.Panel panel2;
+        private System.Windows.Forms.RichTextBox richTextBox2;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Button button2;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label4;
+        private Infragistics.Win.Misc.UltraPopupControlContainer MainPopup;
+        private Infragistics.Win.UltraWinTabbedMdi.UltraTabbedMdiManager ultraTabbedMdiManager1;
+        private Infragistics.Win.UltraWinStatusBar.UltraStatusBar ultraStatusBar1;
+        private System.ComponentModel.IContainer components;
+        /// <summary>
+        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
+        /// 此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            Infragistics.Win.UltraWinToolbars.UltraToolbar ultraToolbar1 = new Infragistics.Win.UltraWinToolbars.UltraToolbar("UltraToolbar1");
+            Infragistics.Win.UltraWinEditors.AutoRepeatEditorButton autoRepeatEditorButton1 = new Infragistics.Win.UltraWinEditors.AutoRepeatEditorButton("First");
+            Infragistics.Win.Appearance appearance1 = new Infragistics.Win.Appearance();
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+            Infragistics.Win.UltraWinEditors.AutoRepeatEditorButton autoRepeatEditorButton2 = new Infragistics.Win.UltraWinEditors.AutoRepeatEditorButton("Previous");
+            Infragistics.Win.Appearance appearance2 = new Infragistics.Win.Appearance();
+            Infragistics.Win.UltraWinEditors.AutoRepeatEditorButton autoRepeatEditorButton3 = new Infragistics.Win.UltraWinEditors.AutoRepeatEditorButton("Next");
+            Infragistics.Win.Appearance appearance3 = new Infragistics.Win.Appearance();
+            Infragistics.Win.UltraWinEditors.AutoRepeatEditorButton autoRepeatEditorButton4 = new Infragistics.Win.UltraWinEditors.AutoRepeatEditorButton("Last");
+            Infragistics.Win.Appearance appearance4 = new Infragistics.Win.Appearance();
+            Infragistics.Win.UltraWinStatusBar.UltraStatusPanel ultraStatusPanel1 = new Infragistics.Win.UltraWinStatusBar.UltraStatusPanel();
+            Infragistics.Win.UltraWinStatusBar.UltraStatusPanel ultraStatusPanel2 = new Infragistics.Win.UltraWinStatusBar.UltraStatusPanel();
+            Infragistics.Win.UltraWinStatusBar.UltraStatusPanel ultraStatusPanel3 = new Infragistics.Win.UltraWinStatusBar.UltraStatusPanel();
+            Infragistics.Win.UltraWinStatusBar.UltraStatusPanel ultraStatusPanel4 = new Infragistics.Win.UltraWinStatusBar.UltraStatusPanel();
+            Infragistics.Win.UltraWinStatusBar.UltraStatusPanel ultraStatusPanel5 = new Infragistics.Win.UltraWinStatusBar.UltraStatusPanel();
+            this.ultraToolbarsManager1 = new Infragistics.Win.UltraWinToolbars.UltraToolbarsManager(this.components);
+            this._MainForm_Toolbars_Dock_Area_Left = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this._MainForm_Toolbars_Dock_Area_Right = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this._MainForm_Toolbars_Dock_Area_Top = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this._MainForm_Toolbars_Dock_Area_Bottom = new Infragistics.Win.UltraWinToolbars.UltraToolbarsDockArea();
+            this.panel1 = new System.Windows.Forms.Panel();
+            this.ultraMaskedEdit2 = new Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit();
+            this.button1 = new System.Windows.Forms.Button();
+            this.richTextBox1 = new System.Windows.Forms.RichTextBox();
+            this.timer1 = new System.Windows.Forms.Timer(this.components);
+            this.ultraDockManager1 = new Infragistics.Win.UltraWinDock.UltraDockManager(this.components);
+            this._MainFormUnpinnedTabAreaLeft = new Infragistics.Win.UltraWinDock.UnpinnedTabArea();
+            this._MainFormUnpinnedTabAreaRight = new Infragistics.Win.UltraWinDock.UnpinnedTabArea();
+            this._MainFormUnpinnedTabAreaTop = new Infragistics.Win.UltraWinDock.UnpinnedTabArea();
+            this._MainFormUnpinnedTabAreaBottom = new Infragistics.Win.UltraWinDock.UnpinnedTabArea();
+            this._MainFormAutoHideControl = new Infragistics.Win.UltraWinDock.AutoHideControl();
+            this.timer2 = new System.Windows.Forms.Timer(this.components);
+            this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+            this.ultraStatusBar1 = new Infragistics.Win.UltraWinStatusBar.UltraStatusBar();
+            this.panel2 = new System.Windows.Forms.Panel();
+            this.richTextBox2 = new System.Windows.Forms.RichTextBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.button2 = new System.Windows.Forms.Button();
+            this.label1 = new System.Windows.Forms.Label();
+            this.MainPopup = new Infragistics.Win.Misc.UltraPopupControlContainer(this.components);
+            this.ultraTabbedMdiManager1 = new Infragistics.Win.UltraWinTabbedMdi.UltraTabbedMdiManager(this.components);
+            ((System.ComponentModel.ISupportInitialize)(this.ultraToolbarsManager1)).BeginInit();
+            this.panel1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraDockManager1)).BeginInit();
+            this.panel2.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.ultraTabbedMdiManager1)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // ultraToolbarsManager1
+            // 
+            this.ultraToolbarsManager1.DesignerFlags = 1;
+            this.ultraToolbarsManager1.DockWithinContainer = this;
+            this.ultraToolbarsManager1.LockToolbars = true;
+            this.ultraToolbarsManager1.ShowFullMenusDelay = 500;
+            this.ultraToolbarsManager1.ShowQuickCustomizeButton = false;
+            ultraToolbar1.DockedColumn = 0;
+            ultraToolbar1.DockedRow = 0;
+            ultraToolbar1.Text = "UltraToolbar1";
+            this.ultraToolbarsManager1.Toolbars.AddRange(new Infragistics.Win.UltraWinToolbars.UltraToolbar[] {
+            ultraToolbar1});
+            this.ultraToolbarsManager1.ToolClick += new Infragistics.Win.UltraWinToolbars.ToolClickEventHandler(this.ultraToolbarsManager1_ToolClick);
+            // 
+            // _MainForm_Toolbars_Dock_Area_Left
+            // 
+            this._MainForm_Toolbars_Dock_Area_Left.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._MainForm_Toolbars_Dock_Area_Left.BackColor = System.Drawing.SystemColors.Control;
+            this._MainForm_Toolbars_Dock_Area_Left.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Left;
+            this._MainForm_Toolbars_Dock_Area_Left.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._MainForm_Toolbars_Dock_Area_Left.Location = new System.Drawing.Point(0, 18);
+            this._MainForm_Toolbars_Dock_Area_Left.Name = "_MainForm_Toolbars_Dock_Area_Left";
+            this._MainForm_Toolbars_Dock_Area_Left.Size = new System.Drawing.Size(0, 357);
+            this._MainForm_Toolbars_Dock_Area_Left.ToolbarsManager = this.ultraToolbarsManager1;
+            // 
+            // _MainForm_Toolbars_Dock_Area_Right
+            // 
+            this._MainForm_Toolbars_Dock_Area_Right.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._MainForm_Toolbars_Dock_Area_Right.BackColor = System.Drawing.SystemColors.Control;
+            this._MainForm_Toolbars_Dock_Area_Right.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Right;
+            this._MainForm_Toolbars_Dock_Area_Right.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._MainForm_Toolbars_Dock_Area_Right.Location = new System.Drawing.Point(1105, 18);
+            this._MainForm_Toolbars_Dock_Area_Right.Name = "_MainForm_Toolbars_Dock_Area_Right";
+            this._MainForm_Toolbars_Dock_Area_Right.Size = new System.Drawing.Size(0, 357);
+            this._MainForm_Toolbars_Dock_Area_Right.ToolbarsManager = this.ultraToolbarsManager1;
+            // 
+            // _MainForm_Toolbars_Dock_Area_Top
+            // 
+            this._MainForm_Toolbars_Dock_Area_Top.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._MainForm_Toolbars_Dock_Area_Top.BackColor = System.Drawing.SystemColors.Control;
+            this._MainForm_Toolbars_Dock_Area_Top.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Top;
+            this._MainForm_Toolbars_Dock_Area_Top.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._MainForm_Toolbars_Dock_Area_Top.Location = new System.Drawing.Point(0, 0);
+            this._MainForm_Toolbars_Dock_Area_Top.Name = "_MainForm_Toolbars_Dock_Area_Top";
+            this._MainForm_Toolbars_Dock_Area_Top.Size = new System.Drawing.Size(1105, 18);
+            this._MainForm_Toolbars_Dock_Area_Top.ToolbarsManager = this.ultraToolbarsManager1;
+            // 
+            // _MainForm_Toolbars_Dock_Area_Bottom
+            // 
+            this._MainForm_Toolbars_Dock_Area_Bottom.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this._MainForm_Toolbars_Dock_Area_Bottom.BackColor = System.Drawing.SystemColors.Control;
+            this._MainForm_Toolbars_Dock_Area_Bottom.DockedPosition = Infragistics.Win.UltraWinToolbars.DockedPosition.Bottom;
+            this._MainForm_Toolbars_Dock_Area_Bottom.ForeColor = System.Drawing.SystemColors.ControlText;
+            this._MainForm_Toolbars_Dock_Area_Bottom.Location = new System.Drawing.Point(0, 375);
+            this._MainForm_Toolbars_Dock_Area_Bottom.Name = "_MainForm_Toolbars_Dock_Area_Bottom";
+            this._MainForm_Toolbars_Dock_Area_Bottom.Size = new System.Drawing.Size(1105, 0);
+            this._MainForm_Toolbars_Dock_Area_Bottom.ToolbarsManager = this.ultraToolbarsManager1;
+            // 
+            // panel1
+            // 
+            this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+            this.panel1.Controls.Add(this.ultraMaskedEdit2);
+            this.panel1.Controls.Add(this.button1);
+            this.panel1.Controls.Add(this.richTextBox1);
+            this.panel1.Location = new System.Drawing.Point(480, 24);
+            this.panel1.Name = "panel1";
+            this.panel1.Size = new System.Drawing.Size(208, 136);
+            this.panel1.TabIndex = 26;
+            this.panel1.Visible = false;
+            // 
+            // ultraMaskedEdit2
+            // 
+            this.ultraMaskedEdit2.BorderStyle = Infragistics.Win.UIElementBorderStyle.InsetSoft;
+            appearance1.Image = ((object)(resources.GetObject("appearance1.Image")));
+            appearance1.ImageHAlign = Infragistics.Win.HAlign.Center;
+            appearance1.ImageVAlign = Infragistics.Win.VAlign.Middle;
+            autoRepeatEditorButton1.Appearance = appearance1;
+            autoRepeatEditorButton1.ButtonStyle = Infragistics.Win.UIElementButtonStyle.ButtonSoftExtended;
+            autoRepeatEditorButton1.Interval = 100;
+            autoRepeatEditorButton1.Key = "First";
+            autoRepeatEditorButton1.Text = "";
+            appearance2.Image = ((object)(resources.GetObject("appearance2.Image")));
+            appearance2.ImageHAlign = Infragistics.Win.HAlign.Center;
+            appearance2.ImageVAlign = Infragistics.Win.VAlign.Middle;
+            autoRepeatEditorButton2.Appearance = appearance2;
+            autoRepeatEditorButton2.ButtonStyle = Infragistics.Win.UIElementButtonStyle.ButtonSoftExtended;
+            autoRepeatEditorButton2.Interval = 100;
+            autoRepeatEditorButton2.Key = "Previous";
+            autoRepeatEditorButton2.Text = "";
+            this.ultraMaskedEdit2.ButtonsLeft.Add(autoRepeatEditorButton1);
+            this.ultraMaskedEdit2.ButtonsLeft.Add(autoRepeatEditorButton2);
+            appearance3.Image = ((object)(resources.GetObject("appearance3.Image")));
+            appearance3.ImageHAlign = Infragistics.Win.HAlign.Center;
+            appearance3.ImageVAlign = Infragistics.Win.VAlign.Middle;
+            autoRepeatEditorButton3.Appearance = appearance3;
+            autoRepeatEditorButton3.ButtonStyle = Infragistics.Win.UIElementButtonStyle.ButtonSoftExtended;
+            autoRepeatEditorButton3.Interval = 100;
+            autoRepeatEditorButton3.Key = "Next";
+            autoRepeatEditorButton3.Text = "";
+            appearance4.Image = ((object)(resources.GetObject("appearance4.Image")));
+            appearance4.ImageHAlign = Infragistics.Win.HAlign.Center;
+            appearance4.ImageVAlign = Infragistics.Win.VAlign.Middle;
+            autoRepeatEditorButton4.Appearance = appearance4;
+            autoRepeatEditorButton4.ButtonStyle = Infragistics.Win.UIElementButtonStyle.ButtonSoftExtended;
+            autoRepeatEditorButton4.Interval = 100;
+            autoRepeatEditorButton4.Key = "Last";
+            this.ultraMaskedEdit2.ButtonsRight.Add(autoRepeatEditorButton3);
+            this.ultraMaskedEdit2.ButtonsRight.Add(autoRepeatEditorButton4);
+            this.ultraMaskedEdit2.EditAs = Infragistics.Win.UltraWinMaskedEdit.EditAsType.UseSpecifiedMask;
+            this.ultraMaskedEdit2.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.ultraMaskedEdit2.InputMask = "nnn \\o\\f\\ \\5\\0\\0";
+            this.ultraMaskedEdit2.Location = new System.Drawing.Point(0, 108);
+            this.ultraMaskedEdit2.MaxValue = 500;
+            this.ultraMaskedEdit2.MinValue = 1;
+            this.ultraMaskedEdit2.Name = "ultraMaskedEdit2";
+            this.ultraMaskedEdit2.PromptChar = ' ';
+            this.ultraMaskedEdit2.ReadOnly = true;
+            this.ultraMaskedEdit2.SelectedTextBackColor = System.Drawing.SystemColors.Window;
+            this.ultraMaskedEdit2.SelectedTextForeColor = System.Drawing.SystemColors.WindowText;
+            this.ultraMaskedEdit2.Size = new System.Drawing.Size(144, 21);
+            this.ultraMaskedEdit2.TabIndex = 102;
+            this.ultraMaskedEdit2.Text = " of 500";
+            this.ultraMaskedEdit2.EditorButtonClick += new Infragistics.Win.UltraWinEditors.EditorButtonEventHandler(this.ultraMaskedEdit2_EditorButtonClick);
+            // 
+            // button1
+            // 
+            this.button1.Location = new System.Drawing.Point(144, 108);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(56, 23);
+            this.button1.TabIndex = 1;
+            this.button1.Text = "确认";
+            this.button1.Click += new System.EventHandler(this.button1_Click);
+            // 
+            // richTextBox1
+            // 
+            this.richTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
+            this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.richTextBox1.Location = new System.Drawing.Point(0, 0);
+            this.richTextBox1.Name = "richTextBox1";
+            this.richTextBox1.ReadOnly = true;
+            this.richTextBox1.Size = new System.Drawing.Size(206, 104);
+            this.richTextBox1.TabIndex = 0;
+            this.richTextBox1.Text = "richTextBox1";
+            // 
+            // timer1
+            // 
+            this.timer1.Interval = 180000;
+            this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
+            // 
+            // ultraDockManager1
+            // 
+            this.ultraDockManager1.HostControl = this;
+            // 
+            // _MainFormUnpinnedTabAreaLeft
+            // 
+            this._MainFormUnpinnedTabAreaLeft.Dock = System.Windows.Forms.DockStyle.Left;
+            this._MainFormUnpinnedTabAreaLeft.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this._MainFormUnpinnedTabAreaLeft.Location = new System.Drawing.Point(0, 18);
+            this._MainFormUnpinnedTabAreaLeft.Name = "_MainFormUnpinnedTabAreaLeft";
+            this._MainFormUnpinnedTabAreaLeft.Owner = this.ultraDockManager1;
+            this._MainFormUnpinnedTabAreaLeft.Size = new System.Drawing.Size(0, 357);
+            this._MainFormUnpinnedTabAreaLeft.TabIndex = 27;
+            // 
+            // _MainFormUnpinnedTabAreaRight
+            // 
+            this._MainFormUnpinnedTabAreaRight.Dock = System.Windows.Forms.DockStyle.Right;
+            this._MainFormUnpinnedTabAreaRight.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this._MainFormUnpinnedTabAreaRight.Location = new System.Drawing.Point(1105, 18);
+            this._MainFormUnpinnedTabAreaRight.Name = "_MainFormUnpinnedTabAreaRight";
+            this._MainFormUnpinnedTabAreaRight.Owner = this.ultraDockManager1;
+            this._MainFormUnpinnedTabAreaRight.Size = new System.Drawing.Size(0, 357);
+            this._MainFormUnpinnedTabAreaRight.TabIndex = 28;
+            // 
+            // _MainFormUnpinnedTabAreaTop
+            // 
+            this._MainFormUnpinnedTabAreaTop.Dock = System.Windows.Forms.DockStyle.Top;
+            this._MainFormUnpinnedTabAreaTop.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this._MainFormUnpinnedTabAreaTop.Location = new System.Drawing.Point(0, 18);
+            this._MainFormUnpinnedTabAreaTop.Name = "_MainFormUnpinnedTabAreaTop";
+            this._MainFormUnpinnedTabAreaTop.Owner = this.ultraDockManager1;
+            this._MainFormUnpinnedTabAreaTop.Size = new System.Drawing.Size(1105, 0);
+            this._MainFormUnpinnedTabAreaTop.TabIndex = 29;
+            // 
+            // _MainFormUnpinnedTabAreaBottom
+            // 
+            this._MainFormUnpinnedTabAreaBottom.Dock = System.Windows.Forms.DockStyle.Bottom;
+            this._MainFormUnpinnedTabAreaBottom.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this._MainFormUnpinnedTabAreaBottom.Location = new System.Drawing.Point(0, 375);
+            this._MainFormUnpinnedTabAreaBottom.Name = "_MainFormUnpinnedTabAreaBottom";
+            this._MainFormUnpinnedTabAreaBottom.Owner = this.ultraDockManager1;
+            this._MainFormUnpinnedTabAreaBottom.Size = new System.Drawing.Size(1105, 0);
+            this._MainFormUnpinnedTabAreaBottom.TabIndex = 30;
+            // 
+            // _MainFormAutoHideControl
+            // 
+            this._MainFormAutoHideControl.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this._MainFormAutoHideControl.Location = new System.Drawing.Point(0, 0);
+            this._MainFormAutoHideControl.Name = "_MainFormAutoHideControl";
+            this._MainFormAutoHideControl.Owner = this.ultraDockManager1;
+            this._MainFormAutoHideControl.Size = new System.Drawing.Size(0, 0);
+            this._MainFormAutoHideControl.TabIndex = 31;
+            // 
+            // timer2
+            // 
+            this.timer2.Interval = 3000;
+            this.timer2.Tick += new System.EventHandler(this.timer2_Tick);
+            // 
+            // ultraStatusBar1
+            // 
+            this.ultraStatusBar1.Location = new System.Drawing.Point(0, 375);
+            this.ultraStatusBar1.Name = "ultraStatusBar1";
+            ultraStatusPanel1.Width = 600;
+            ultraStatusPanel2.MinWidth = 100;
+            ultraStatusPanel4.MinWidth = 400;
+            ultraStatusPanel4.Text = "湖南视拓信息技术股份有限公司";
+            ultraStatusPanel4.Width = 180;
+            ultraStatusPanel5.Width = 150;
+            this.ultraStatusBar1.Panels.AddRange(new Infragistics.Win.UltraWinStatusBar.UltraStatusPanel[] {
+            ultraStatusPanel1,
+            ultraStatusPanel2,
+            ultraStatusPanel3,
+            ultraStatusPanel4,
+            ultraStatusPanel5});
+            this.ultraStatusBar1.Size = new System.Drawing.Size(1105, 22);
+            this.ultraStatusBar1.TabIndex = 43;
+            this.toolTip1.SetToolTip(this.ultraStatusBar1, "双击弹出所要通告");
+            this.ultraStatusBar1.PanelDoubleClick += new Infragistics.Win.UltraWinStatusBar.PanelClickEventHandler(this.ultraStatusBar1_PanelDoubleClick);
+            this.ultraStatusBar1.PanelClick += new Infragistics.Win.UltraWinStatusBar.PanelClickEventHandler(this.ultraStatusBar1_PanelClick);
+            this.ultraStatusBar1.DoubleClick += new System.EventHandler(this.ultraStatusBar1_DoubleClick);
+            // 
+            // panel2
+            // 
+            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+            this.panel2.Controls.Add(this.richTextBox2);
+            this.panel2.Controls.Add(this.label4);
+            this.panel2.Controls.Add(this.label3);
+            this.panel2.Controls.Add(this.label2);
+            this.panel2.Controls.Add(this.button2);
+            this.panel2.Controls.Add(this.label1);
+            this.panel2.Location = new System.Drawing.Point(0, 231);
+            this.panel2.Name = "panel2";
+            this.panel2.Size = new System.Drawing.Size(600, 144);
+            this.panel2.TabIndex = 37;
+            this.panel2.Visible = false;
+            // 
+            // richTextBox2
+            // 
+            this.richTextBox2.Dock = System.Windows.Forms.DockStyle.Bottom;
+            this.richTextBox2.Location = new System.Drawing.Point(0, 24);
+            this.richTextBox2.Name = "richTextBox2";
+            this.richTextBox2.ReadOnly = true;
+            this.richTextBox2.Size = new System.Drawing.Size(600, 120);
+            this.richTextBox2.TabIndex = 0;
+            this.richTextBox2.Text = "";
+            // 
+            // label4
+            // 
+            this.label4.Location = new System.Drawing.Point(360, 8);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(48, 24);
+            this.label4.TabIndex = 5;
+            this.label4.Text = "   普通";
+            // 
+            // label3
+            // 
+            this.label3.ForeColor = System.Drawing.Color.Blue;
+            this.label3.Location = new System.Drawing.Point(304, 8);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(48, 24);
+            this.label3.TabIndex = 4;
+            this.label3.Text = "   重要";
+            // 
+            // label2
+            // 
+            this.label2.ForeColor = System.Drawing.Color.Red;
+            this.label2.Location = new System.Drawing.Point(248, 8);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(48, 24);
+            this.label2.TabIndex = 3;
+            this.label2.Text = "   紧急";
+            // 
+            // button2
+            // 
+            this.button2.Location = new System.Drawing.Point(552, 2);
+            this.button2.Name = "button2";
+            this.button2.Size = new System.Drawing.Size(40, 23);
+            this.button2.TabIndex = 2;
+            this.button2.Text = "关闭";
+            this.button2.Click += new System.EventHandler(this.button2_Click);
+            // 
+            // label1
+            // 
+            this.label1.Location = new System.Drawing.Point(16, 8);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(100, 23);
+            this.label1.TabIndex = 1;
+            this.label1.Text = "通知";
+            // 
+            // ultraTabbedMdiManager1
+            // 
+            this.ultraTabbedMdiManager1.MdiParent = this;
+            this.ultraTabbedMdiManager1.TabActivated += new Infragistics.Win.UltraWinTabbedMdi.MdiTabEventHandler(this.ultraTabbedMdiManager1_TabActivated);
+            // 
+            // MainForm
+            // 
+            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
+            this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
+            this.ClientSize = new System.Drawing.Size(1105, 397);
+            this.Controls.Add(this._MainFormAutoHideControl);
+            this.Controls.Add(this.panel2);
+            this.Controls.Add(this.panel1);
+            this.Controls.Add(this._MainFormUnpinnedTabAreaTop);
+            this.Controls.Add(this._MainFormUnpinnedTabAreaBottom);
+            this.Controls.Add(this._MainFormUnpinnedTabAreaLeft);
+            this.Controls.Add(this._MainFormUnpinnedTabAreaRight);
+            this.Controls.Add(this._MainForm_Toolbars_Dock_Area_Left);
+            this.Controls.Add(this._MainForm_Toolbars_Dock_Area_Right);
+            this.Controls.Add(this._MainForm_Toolbars_Dock_Area_Top);
+            this.Controls.Add(this._MainForm_Toolbars_Dock_Area_Bottom);
+            this.Controls.Add(this.ultraStatusBar1);
+            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+            this.IsMdiContainer = true;
+            this.Name = "MainForm";
+            this.Text = "新钢公司MES系统";
+            this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
+            this.Load += new System.EventHandler(this.MainForm_Load);
+            this.Closing += new System.ComponentModel.CancelEventHandler(this.MainForm_Closing);
+            ((System.ComponentModel.ISupportInitialize)(this.ultraToolbarsManager1)).EndInit();
+            this.panel1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.ultraDockManager1)).EndInit();
+            this.panel2.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.ultraTabbedMdiManager1)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+        /// <summary>
+        /// 应用程序的主入口点。
+        /// </summary>
+        //[STAThread]
+        //static void Main() 
+        //{
+        //    try
+        //    {
+        //        Process[] myProcesses = Process.GetProcessesByName("Core.Mes.ClientManager.vshost");
+        //        if(myProcesses.Length  == 1 )
+        //        {
+        //            Application.Run(new MainForm());
+        //        }
+        //    }
+        //    catch
+        //    {
+        //        Application.Run(new MainForm());
+        //    }
+        //}
+        #endregion
+
+        #endregion
+
+        #region "	Init Form	"
+        int FreeTime = 600;
+
+        private void Update_UPM()
+        {
+            UpdaterManager.Update_UPM();
+            UpdaterManager.Update_Shortcut();
+        }
+
+        private void MainForm_Load(object sender, System.EventArgs e)
+        {
+            //if (System.DateTime.Today > new System.DateTime(2007,1,1))	return;	
+            Thread t_update = new Thread(new ThreadStart(Update_UPM));
+            t_update.Start();
+
+            if (ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["Title"].Value.ToString() != null)
+                this.Text = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["Title"].Value.ToString();
+            this.BackgroundImage = System.Drawing.Image.FromFile(@"MainBackPic.jpg");
+
+            FrmCover frm = new FrmCover();
+            frm._mainForm = this;
+            frm.ReLoginType = 0;
+            frm.ShowDialog(this);
+
+            if (frm._loginFlag > 0)
+            {
+                //正常启动显示登录框
+                InitForm(frm.ReLoginType);
+            }
+            else
+            {
+                Application.Exit();
+            }
+        }
+        private bool keyexit(string key)
+        {
+            for (int i = 0; i < ultraToolbarsManager1.Toolbars[0].Tools.Count; i++)
+            {
+                if (!keyisexist(key, ultraToolbarsManager1.Toolbars[0].Tools[i]))
+                    return false;
+            }
+            return true;
+        }
+        private bool keyisexist(string key, object Menu)
+        {
+            if (Menu.GetType() == typeof(Infragistics.Win.UltraWinToolbars.PopupMenuTool))
+            {
+                Infragistics.Win.UltraWinToolbars.PopupMenuTool tmpPMenu = (Menu as Infragistics.Win.UltraWinToolbars.PopupMenuTool);
+                if (tmpPMenu.Tools.Exists(key))
+                    return false;
+                for (int i = 0; i < tmpPMenu.Tools.Count; i++)
+                {
+                    keyisexist(key, tmpPMenu.Tools[i]);
+                }
+            }
+            else
+            {
+                return true;
+            }
+            return true;
+        }
+        public void InitForm(int ReLoginType)
+        {
+            try
+            {
+                if (ReLoginType == 0)
+                {
+                    CreateMenu();
+                    AjustTime();
+                    //InitMessageBox();
+                    //GetUserMessage();
+                    //timer2_Tick( null, new System.EventArgs() );
+                    //this.timer1.Start();
+                    //this.timer2.Start();
+                }
+                else if (ReLoginType == 1)
+                {
+                    this.ultraToolbarsManager1.Tools.Clear();
+                    this.ultraToolbarsManager1.Toolbars[0].Tools.Clear();
+
+                    CreateMenu();
+
+                    foreach (Form frm in this.MdiChildren)
+                    {
+                        frm.Close();
+                    }
+                }
+                else
+                {
+                    foreach (Form frm in this.MdiChildren)
+                    {
+                        frm.Show();
+                    }
+                    try
+                    {
+                        if (LastActiveForm != null)
+                        {
+                            LastActiveForm.Activate();
+                        }
+                    }
+                    catch { }
+                }
+
+                this.ultraStatusBar1.Panels[1].Text = ClientCommon._UserInfo.UserName;
+
+                string bc = this.GetBc(ClientCommon._UserInfo.UserBc);
+                string bb = this.GetBb(ClientCommon._UserInfo.UserBb);
+
+                if (bc == bb)
+                    this.ultraStatusBar1.Panels[2].Text = bb;
+                else
+                    this.ultraStatusBar1.Panels[2].Text = bc + "  " + bb;
+
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show("权限文件信息错误!请与管理员联系。\n" + ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
+
+            }
+
+            try
+            {
+                ClientCommon.GetServerConfig();
+                DataRow[] dr = ClientCommon.ServerConfig.Select("KEY_NAME='FREETIME'");
+                if (dr != null && dr.GetLength(0) > 0)
+                {
+                    int.TryParse(dr[0]["KEY_VALUE"].ToString(), out FreeTime);
+                }
+            }
+            catch { }
+
+            timer2.Enabled = true;
+            if (_dsMessage != null) _dsMessage.Clear();
+            //GetMessage();
+        }
+
+        #region "	班次、班别	"
+
+        private G.ValueList _vlBc;
+        private string GetBc(string str)
+        {
+            if (_vlBc == null)
+            {
+                _vlBc = new G.ValueList();
+                _vlBc.ValueListItems.Add("300201", "早班");
+                _vlBc.ValueListItems.Add("300202", "中班");
+                _vlBc.ValueListItems.Add("300203", "晚班");
+                _vlBc.ValueListItems.Add("300205", "常白班");
+            }
+            if (_vlBc.FindByDataValue(str) != null)
+                return _vlBc.FindByDataValue(str).DisplayText;
+            return "常白班";
+        }
+        private G.ValueList _vlBb;
+        private string GetBb(string str)
+        {
+            if (_vlBb == null)
+            {
+                _vlBb = new G.ValueList();
+                _vlBb.ValueListItems.Add("300301", "甲班");
+                _vlBb.ValueListItems.Add("300302", "乙班");
+                _vlBb.ValueListItems.Add("300303", "丙班");
+                _vlBb.ValueListItems.Add("300304", "丁班");
+                _vlBb.ValueListItems.Add("300305", "常白班");
+            }
+
+            if (_vlBb.FindByDataValue(str) != null)
+                return _vlBb.FindByDataValue(str).DisplayText;
+            return "常白班";
+        }
+        #endregion
+        private void MainForm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
+        {
+            DialogResult dr = MessageBox.Show(string.Format("是否确认退出{0}?", this.Text), "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
+            if (dr == DialogResult.No)
+            {
+                e.Cancel = true;
+                return;
+            }
+
+            string ipaddress = ClientCommon.GetIp();
+            string strOut = "";
+            ClientCommon._RemotingHelp.ExecuteMethod("ServerCommon", "Core.Mes.ServerCommon.UserInfoManager", "RecodeExitInfo",
+                new object[]{ClientCommon._UserInfo.LoginID, ClientCommon._UserInfo.UserName, 
+								Dns.GetHostName(), ipaddress}, out strOut);
+        }
+
+        #endregion
+
+        #region "	Menu Manager	"
+
+        #region "	Menu Events	"
+
+        private void CreateMenu()
+        {
+            string strOut = "";
+            try
+            {
+                DataSet obj = ClientCommon._RemotingHelp.ExecuteMethod("ServerCommon", "Core.Mes.ServerCommon.UserInfoManager", "GetBuildMenuInfo",
+                    new object[] { ClientCommon._UserInfo.LoginID }, out strOut) as DataSet;
+
+                if (strOut != "")
+                {
+                    MessageBox.Show(strOut); return;
+                }
+                for (int i = 0; i < obj.Tables[0].Rows.Count; i++)
+                {
+                    string strSetInfo = obj.Tables[0].Rows[i]["SETINFO"].ToString();
+                    string strBtName = obj.Tables[0].Rows[i]["CAPTION"].ToString();
+                    string strBtKey = obj.Tables[0].Rows[i]["KEY_"].ToString();
+                    string strBtCat = obj.Tables[0].Rows[i]["CATEGORY"].ToString();
+                    string strType = obj.Tables[0].Rows[i]["TYPE"].ToString();
+
+                    #region old code
+                    //int iCount = 0;
+                    //for (int j = 0; j < obj.Tables[0].Rows.Count; j++)
+                    //{
+                    //    if (obj.Tables[0].Rows[j]["SETINFO"].ToString().StartsWith(strSetInfo))
+                    //    {
+                    //        iCount++;
+                    //    }
+                    //}
+                    //if (iCount > 1)
+                    //{
+                    //    if (strSetInfo.Length == 3)
+                    //    {
+                    //        try
+                    //        {
+                    //            Infragistics.Win.UltraWinToolbars.PopupMenuTool pmt = new Infragistics.Win.UltraWinToolbars.PopupMenuTool(strBtName);
+                    //            Infragistics.Win.UltraWinToolbars.PopupMenuTool pmtb = new Infragistics.Win.UltraWinToolbars.PopupMenuTool(strBtName);
+                    //            pmtb.SharedProps.Caption = strBtName;
+
+                    //            this.ultraToolbarsManager1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { pmtb });
+
+                    //            this.ultraToolbarsManager1.Toolbars[0].Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { pmt });
+
+                    //            pmt.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+                    //        }
+                    //        catch(Exception ex) {
+                    //            MessageBox.Show(ex.Message);
+                    //            return;
+                    //        }
+                    //    }
+                    //    else
+                    //    {
+                    //        try
+                    //        {
+                    //            Infragistics.Win.UltraWinToolbars.PopupMenuTool pmt = new Infragistics.Win.UltraWinToolbars.PopupMenuTool(strBtName);
+                    //            Infragistics.Win.UltraWinToolbars.PopupMenuTool pmtb = new Infragistics.Win.UltraWinToolbars.PopupMenuTool(strBtName);
+                    //            pmtb.SharedProps.Caption = strBtName;
+
+                    //            this.ultraToolbarsManager1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { pmtb });
+
+                    //            this.ultraToolbarsManager1.Toolbars[strSetInfo.Substring(0, strSetInfo.Length - 3)].Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { pmt });
+
+                    //            pmt.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+                    //        }
+                    //        catch { }
+                    //    }
+                    //}
+                    //else
+                    //{
+                    //    try
+                    //    {
+                    //        string strPkey = "";
+                    //        for (int j = 0; j < obj.Tables[0].Rows.Count; j++)
+                    //        {
+                    //            if (obj.Tables[0].Rows[j]["SETINFO"].ToString() == strSetInfo.Substring(0, strSetInfo.Length - 3))
+                    //            {
+                    //                strPkey = obj.Tables[0].Rows[j]["CAPTION"].ToString();
+                    //            }
+                    //        }
+
+                    //        Infragistics.Win.UltraWinToolbars.ButtonTool bt = new Infragistics.Win.UltraWinToolbars.ButtonTool(strBtName);
+                    //        Infragistics.Win.UltraWinToolbars.ButtonTool btb = new Infragistics.Win.UltraWinToolbars.ButtonTool(strBtName);
+                    //        btb.SharedProps.Caption = strBtName;
+                    //        this.ultraToolbarsManager1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { btb });
+
+                    //        Infragistics.Win.UltraWinToolbars.PopupMenuTool pmtb;
+                    //        if (strSetInfo.Length == 3)
+                    //        {
+                    //            this.ultraToolbarsManager1.Toolbars[0].Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { bt });
+                    //            btb.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+                    //        }
+                    //        else
+                    //        {
+                    //            pmtb = this.ultraToolbarsManager1.Tools[strPkey] as PopupMenuTool;
+
+                    //            pmtb.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { bt });
+                    //        }
+
+                    //        bt.Key = strBtKey;
+                    //        bt.SharedProps.Category = strBtCat;
+
+                    //    }
+                    //    catch (Exception ex)
+                    //    {
+                    //        Console.WriteLine(ex.Message);
+                    //    }
+                    //}
+                    #endregion
+
+                    //if (ultraToolbarsManager1.Tools.Exists(strBtKey))
+                    //{
+                    //    for (int extKey = 0; extKey < 5; extKey++)
+                    //    {
+                    //        if (!ultraToolbarsManager1.Tools.Exists(strBtKey + "@" + extKey.ToString()))
+                    //        {
+                    //            strBtKey = strBtKey + "@" + extKey.ToString();
+                    //            break;
+                    //        }
+                    //    }
+                    //}
+                    strBtKey = strBtKey + "@" + System.Guid.NewGuid().ToString();
+                    obj.Tables[0].Rows[i]["KEY_"] = strBtKey;
+                    obj.Tables[0].AcceptChanges();
+                    if (strType == "MENU")
+                    {
+                        PopupMenuTool menu = new PopupMenuTool(strBtKey);
+                        PopupMenuTool menub = new PopupMenuTool(strBtKey);
+                        menub.SharedProps.Caption = strBtName;
+                        ultraToolbarsManager1.Tools.AddRange(new ToolBase[] { menub });
+
+                        if (strSetInfo.Length > 3)
+                        {
+                            string strPKey = "";
+                            for (int j = 0; j < obj.Tables[0].Rows.Count; j++)
+                            {
+                                if (obj.Tables[0].Rows[j]["SETINFO"].ToString() == strSetInfo.Substring(0, strSetInfo.Length - 3))
+                                {
+                                    strPKey = obj.Tables[0].Rows[j]["KEY_"].ToString();
+                                    break;
+                                }
+                            }
+
+                            ((PopupMenuTool)ultraToolbarsManager1.Tools[strPKey]).Tools.AddRange(new ToolBase[] { menu });
+                        }
+                        else
+                        {
+                            ultraToolbarsManager1.Toolbars[0].Tools.AddRange(new ToolBase[] { menu });
+                        }
+                    }
+                    else
+                    {
+                        ButtonTool btn = new ButtonTool(strBtKey);
+                        ButtonTool btnb = new ButtonTool(strBtKey);
+                        btnb.SharedProps.Category = strBtCat;
+                        btnb.SharedProps.Caption = strBtName;
+                        btnb.SharedProps.DisplayStyle = ToolDisplayStyle.ImageAndText;
+                        ultraToolbarsManager1.Tools.AddRange(new ToolBase[] { btnb });
+
+                        if (strSetInfo.Length > 3)
+                        {
+                            string strPKey = "";
+                            for (int j = 0; j < obj.Tables[0].Rows.Count; j++)
+                            {
+                                if (obj.Tables[0].Rows[j]["SETINFO"].ToString() == strSetInfo.Substring(0, strSetInfo.Length - 3))
+                                {
+                                    strPKey = obj.Tables[0].Rows[j]["KEY_"].ToString();
+                                    break;
+                                }
+                            }
+
+                            ((PopupMenuTool)ultraToolbarsManager1.Tools[strPKey]).Tools.AddRange(new ToolBase[] { btn });
+                        }
+                        else
+                        {
+                            ultraToolbarsManager1.Toolbars[0].Tools.AddRange(new ToolBase[] { btn });
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(ex.Message);
+            }
+
+            //this.ultraToolbarsManager1.LoadFromXml(ClientCommon._UserInfo.MenuConfigStream);
+            AddBasePoupToolBarItem("系统", "System");
+        }
+        private void AddBasePoupToolBarItem(string strBtName, string strKey)
+        {
+            try
+            {
+                Infragistics.Win.UltraWinToolbars.PopupMenuTool pmt = new Infragistics.Win.UltraWinToolbars.PopupMenuTool(strBtName);
+                Infragistics.Win.UltraWinToolbars.PopupMenuTool pmtb = new Infragistics.Win.UltraWinToolbars.PopupMenuTool(strBtName);
+                pmtb.SharedProps.Caption = strBtName;
+
+                this.ultraToolbarsManager1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { pmtb });
+
+                this.ultraToolbarsManager1.Toolbars[0].Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { pmt });
+
+                pmt.SharedProps.DisplayStyle = Infragistics.Win.UltraWinToolbars.ToolDisplayStyle.ImageAndText;
+
+                AddBaseButtonToolBarItem("重新登录", "reLogin", pmtb);
+                AddBaseButtonToolBarItem("修改密码", "passwd", pmtb);
+                AddBaseButtonToolBarItem("设置班组", "setBz", pmtb);
+#if forCG
+                AddBaseButtonToolBarItem("我的有效菜单", "mymenu", pmtb);
+#endif
+                AddBaseButtonToolBarItem("帮助", "help", pmtb);
+                AddBaseButtonToolBarItem("关于", "about", pmtb);
+                AddBaseButtonToolBarItem("退出", "close", pmtb);
+
+                this.ultraToolbarsManager1.LockToolbars = true;
+                this.ultraToolbarsManager1.ShowQuickCustomizeButton = false;
+                this.ultraToolbarsManager1.Style = Infragistics.Win.UltraWinToolbars.ToolbarStyle.OfficeXP;
+
+            }
+            catch { }
+        }
+        private void AddBaseButtonToolBarItem(string strBtName, string strBtKey, PopupMenuTool pmt)
+        {
+            try
+            {
+                Infragistics.Win.UltraWinToolbars.ButtonTool bt = new Infragistics.Win.UltraWinToolbars.ButtonTool(strBtName);
+                Infragistics.Win.UltraWinToolbars.ButtonTool btb = new Infragistics.Win.UltraWinToolbars.ButtonTool(strBtName);
+                btb.SharedProps.Caption = strBtName;
+                this.ultraToolbarsManager1.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { btb });
+
+                pmt.Tools.AddRange(new Infragistics.Win.UltraWinToolbars.ToolBase[] { bt });
+
+                bt.Key = strBtKey;
+                if (strBtKey == "reLogin")
+                {
+                    btb.InstanceProps.IsFirstInGroup = true;
+                }
+            }
+            catch { }
+        }
+
+        private void ReLogin()
+        {
+            FrmCover frm = new FrmCover();
+            frm.ReLoginFlag = true;
+            frm._mainForm = this;
+            frm.ReLoginType = 1;
+            frm.ShowDialog();
+            if (frm._loginFlag > 0)
+            {
+                //手动重登陆显示登录框(允许切换用户名)
+                InitForm(frm.ReLoginType);
+            }
+        }
+
+        Form LastActiveForm = null;
+        private void ReLoginWithoutInit()
+        {
+            if (this.MdiChildren.GetLength(0) > 0)
+            {
+                LastActiveForm = this.ActiveMdiChild;
+                foreach (Form frm in this.MdiChildren)
+                {
+                    frm.Hide();
+                }
+            }
+            else
+            {
+                LastActiveForm = null;
+            }
+
+            this.ultraStatusBar1.Panels[0].Text = "闲置时间过长,请重新登录!";
+            this.ShowPopUpMsg("闲置时间过长,请重新登录!               ", this, new Point(this.Width > 1000 ? 1000 : this.Width, this.ultraStatusBar1.Top));
+            do
+            {
+                FrmCover frm = new FrmCover(ClientCommon._UserInfo.LoginID);
+                frm.ReLoginFlag = true;
+                frm._mainForm = this;
+                frm.Text = "闲置时间过长,请重新登录!";
+                frm.ReLoginType = 2;
+                frm.ShowDialog(this);
+                if (frm._loginFlag > 0)
+                {
+                    //锁定重登陆显示登录框(不允许切换用户名)
+                    InitForm(frm.ReLoginType);
+                    break;
+                }
+                else if (frm._loginFlag == -1)
+                {
+                    DialogResult dr = MessageBox.Show(string.Format("是否确认退出{0}?", this.Text), "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
+                    if (dr == DialogResult.Yes)
+                    {
+                        Application.Exit();
+                        break;
+                    }
+                }
+            } while (true);
+        }
+
+        #endregion
+        //未激活的界面将线程开关关闭
+        private void ultraTabbedMdiManager1_TabActivated(object sender, Infragistics.Win.UltraWinTabbedMdi.MdiTabEventArgs e)
+        {
+            foreach (Form frmMdi in this.MdiChildren)
+            {
+                FrmBase frm = frmMdi as FrmBase;
+                frm.On_Off_Thread = false;
+            }
+            ((FrmBase)e.Tab.Form).On_Off_Thread = true;
+        }
+
+        private void ultraToolbarsManager1_ToolClick(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
+        {
+            switch (e.Tool.Key)
+            {
+                case "reLogin":
+                    ReLogin();
+                    break;
+                case "close":
+                    this.Close();
+                    break;
+                case "help":
+                    if (System.IO.File.Exists(@"CoreHelp.chm"))
+                    {
+                        try
+                        {
+                            ProcessStartInfo p = new ProcessStartInfo(@"CoreHelp.chm");
+                            p.WorkingDirectory = @"CoreHelp.chm";
+                            Process.Start(p);
+                        }
+                        catch (Exception ex)
+                        {
+                            Console.WriteLine(ex.Message);
+                        }
+                    }
+                    break;
+                case "about":
+                    FrmAbout frm = new FrmAbout();
+                    if (ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["About"].Value.ToString() != null)
+                        frm.InitPic(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["About"].Value.ToString());
+                    frm.ShowDialog();
+                    break;
+                case "passwd":
+                    FrmPasswd frm1 = new FrmPasswd();
+                    frm1.ShowDialog();
+                    break;
+                case "setBz":
+                    FrmSetBz frm2 = new FrmSetBz();
+                    frm2.ShowDialog();
+                    if (frm2._boFlag)
+                    {
+                        string bc = this.GetBc(ClientCommon._UserInfo.UserBc);
+                        string bb = this.GetBb(ClientCommon._UserInfo.UserBb);
+
+                        if (bc == bb)
+                            this.ultraStatusBar1.Panels[2].Text = bb;
+                        else
+                            this.ultraStatusBar1.Panels[2].Text = bc + "  " + bb;
+                    }
+                    break;
+                case "mymenu":
+                    frmMyMenuInfo frmMyMenuInfo_1 = new frmMyMenuInfo();
+                    frmMyMenuInfo_1.ShowDialog();
+                    break;
+                default:
+                    {
+                        OpenChildForm(e);
+                        break;
+                    }
+            }
+        }
+        #endregion
+
+        #region "	ExplorerBar Manager	"
+
+
+
+        /// <summary>
+        /// 打开子窗体
+        /// </summary>
+        /// <param name="xn">存放子窗体信息的xmlnode</param>
+        private void OpenChildForm(ToolClickEventArgs e)
+        {
+            foreach (Form mdiChild in this.MdiChildren)
+            {
+                if ((mdiChild as FrmBase).Key == e.Tool.Key)
+                {
+                    mdiChild.Activate();
+                    return;
+                }
+            }
+
+            //实例化窗体并打开
+            try
+            {
+                string assemblyName = e.Tool.SharedProps.Category;
+                string className = e.Tool.Key.Split('@')[0];
+                Assembly baseFormAssembly = Assembly.Load(assemblyName);
+                Type type = baseFormAssembly.GetType(className);
+
+                System.Diagnostics.Debug.Assert(type.IsSubclassOf(typeof(FrmBase)));
+
+                FrmBase form = Activator.CreateInstance(type, true) as FrmBase;
+                form.MdiParent = this;
+                form.Text = e.Tool.SharedProps.Caption;
+                form.Key = e.Tool.Key;
+
+                form.Show();
+
+                this.ultraStatusBar1.Panels[0].Text = "打开" + form.Text + "窗体。";
+                ClientCommon.RecodeOperateInfo("打开", form.Text, "");
+            }
+            catch (Exception ex)
+            {
+                this.ultraStatusBar1.Panels[0].Text = ex.Message;
+            }
+        }
+
+        #endregion
+
+        #region "	Message	"
+        private void InitMessageBox()
+        {
+            Infragistics.Win.UltraWinDock.DockAreaPane dockAreaPane1 = new Infragistics.Win.UltraWinDock.DockAreaPane(
+                Infragistics.Win.UltraWinDock.DockedLocation.Floating);
+
+            Infragistics.Win.UltraWinDock.DockableControlPane dockableControlPane1 = new Infragistics.Win.UltraWinDock.DockableControlPane();
+
+            dockAreaPane1.FloatingLocation = new System.Drawing.Point(1024 - 210, 780 - 150 - 50);
+            dockableControlPane1.Control = this.panel1;
+            dockableControlPane1.Text = "消息";
+            dockAreaPane1.Panes.AddRange(new Infragistics.Win.UltraWinDock.DockablePaneBase[] {
+																								  dockableControlPane1});
+            dockAreaPane1.Size = new System.Drawing.Size(200, 150);
+            this.ultraDockManager1.DockAreas.AddRange(new Infragistics.Win.UltraWinDock.DockAreaPane[] {
+																										   dockAreaPane1});
+            this.ultraDockManager1.ControlPanes[0].Closed = true;
+            this.panel1.Visible = true;
+        }
+        private void ShowMessageBox()
+        {
+            _RowCount = _dsMessage.Tables[0].Rows.Count;
+
+            this.ultraMaskedEdit2.InputMask = string.Format(@"nnn \o\f\ \{0}", _RowCount.ToString());
+            this.ultraMaskedEdit2.Text = string.Format("1 of {0}", _RowCount.ToString());
+            SetRichText(1);
+            this.ultraDockManager1.ControlPanes[0].Closed = false;
+        }
+
+        private int _RowCount = 0;
+        private DataSet _dsMessage;
+
+        private void timer1_Tick(object sender, System.EventArgs e)
+        {
+            //GetMessage();
+            GetUserMessage();
+        }
+
+        private void GetUserMessage()
+        {
+            string strOut = "";
+            DataSet ds = ClientCommon._RemotingHelp.ExecuteMethod("ServerCommon", "Core.Mes.ServerCommon.UserInfoManager", "GetUserMessage",
+                null, out strOut) as DataSet;
+
+            if (strOut == "" && ds.Tables[0].Rows.Count > 0)
+            {
+                this.dtUserMessage = ds.Tables[0];
+            }
+            else
+            {
+                this.dtUserMessage = null;
+            }
+
+        }
+
+        private DataTable dtUserMessage;
+        private int _iCount = 0;
+
+        private void timer2_Tick(object sender, System.EventArgs e)
+        {
+            GetLastCall();
+            if (this.dtUserMessage == null) return;
+
+            if (_iCount < this.dtUserMessage.Rows.Count)
+            {
+                string str = this.GetNoNullStr(this.dtUserMessage.Rows[_iCount][0]);
+                str = str + "  " + this.GetNoNullStr(this.dtUserMessage.Rows[_iCount][1]);
+                str = str + "  " + Convert.ToDateTime(this.dtUserMessage.Rows[_iCount][2]).ToString("MM月dd日 HH时mm分");
+
+                this.ultraStatusBar1.Panels[0].Text = str;
+
+                if (this.dtUserMessage.Rows[_iCount]["PRI_"].ToString() == "2")
+                    this.ultraStatusBar1.Panels[0].Appearance.ForeColor = Color.Red;
+                else if (this.dtUserMessage.Rows[_iCount]["PRI_"].ToString() == "1")
+                    this.ultraStatusBar1.Panels[0].Appearance.ForeColor = Color.Blue;
+                else
+                    this.ultraStatusBar1.Panels[0].Appearance.ForeColor = Color.Black;
+
+
+                _iCount++;
+
+            }
+            else
+            {
+                _iCount = 0;
+            }
+        }
+
+        private void GetLastCall()
+        {
+            CallingMessage cm = new CallingMessage();
+            DateTime ldt = ClientCommon._RemotingHelp.GetLastExecute(out cm);
+            TimeSpan ts = (DateTime.Now - ldt);
+
+            ultraStatusBar1.Panels[4].Text = string.Format("空闲时间 {0,3}'{1,2}\"", ts.Minutes, ts.Seconds);
+
+            if (ts.TotalSeconds > FreeTime)
+            {
+                timer2.Stop();
+                ReLoginWithoutInit();
+            }
+        }
+
+        private string GetNoNullStr(object obj)
+        {
+            if (obj == null || obj == DBNull.Value) return "";
+
+            return obj.ToString();
+        }
+
+        private void GetMessage()
+        {
+            string strOut = "";
+            DataSet ds = ClientCommon._RemotingHelp.ExecuteMethod("ServerCommon", "Core.Mes.ServerCommon.UserInfoManager", "GetMessage",
+                new object[] { ClientCommon._UserInfo.UserID }, out strOut) as DataSet;
+
+            if (strOut != "" || ds.Tables[0].Rows.Count == 0)
+            {
+                if (_dsMessage != null) _dsMessage.Clear();
+                this.ultraDockManager1.ControlPanes[0].Closed = true;
+                return;
+            }
+
+            if (!this.ultraDockManager1.ControlPanes[0].Closed) return;
+
+            if (_dsMessage == null)
+                _dsMessage = ds;
+            else
+            {
+                _dsMessage.Clear();
+                _dsMessage.Merge(ds);
+            }
+
+            ShowMessageBox();
+        }
+        private int newValue = 1;
+        private void ultraMaskedEdit2_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e)
+        {
+            int min = (int)this.ultraMaskedEdit2.MinValue;
+            int max = (int)this.ultraMaskedEdit2.MaxValue;
+            newValue = min;
+
+            Infragistics.Win.EditorWithMask maskEdit = e.Button.Editor as Infragistics.Win.EditorWithMask;
+
+            try
+            {
+                string maskText = maskEdit.GetText(Infragistics.Win.UltraWinMaskedEdit.MaskMode.Raw);
+
+                if (!Convert.IsDBNull(maskText))
+                    newValue = int.Parse(maskText);
+            }
+            catch { }
+
+            switch (e.Button.Key)
+            {
+                case "First":
+                    newValue = min;
+                    break;
+                case "Last":
+                    newValue = max;
+                    break;
+                case "Next":
+                    newValue++;
+                    break;
+                case "Previous":
+                    newValue--;
+                    break;
+            }
+
+            if (newValue < 1)
+                newValue = 1;
+            else if (newValue > _RowCount)
+                newValue = _RowCount;
+
+            e.Button.Editor.Value = newValue;
+            SetRichText(newValue);
+        }
+        private void SetRichText(int rowIndex)
+        {
+            try
+            {
+                this.richTextBox1.Text = this._dsMessage.Tables[0].Rows[rowIndex - 1]["INFO"].ToString();
+                this.richTextBox1.Text += "\n----------";
+                this.richTextBox1.Text += this._dsMessage.Tables[0].Rows[rowIndex - 1]["SENDPERSON"].ToString() + Convert.ToDateTime(this._dsMessage.Tables[0].Rows[rowIndex - 1]["SENDTIME"]).ToString("MM-dd HH:mm");
+
+                this.richTextBox1.Tag = this._dsMessage.Tables[0].Rows[rowIndex - 1]["ID_"].ToString();
+            }
+            catch
+            {
+                this.richTextBox1.Text = "错误!";
+            }
+        }
+        private void button1_Click(object sender, System.EventArgs e)
+        {
+            string strOut = "";
+            object obj = ClientCommon._RemotingHelp.ExecuteMethod("ServerCommon", "Core.Mes.ServerCommon.UserInfoManager", "AffirmMessage",
+                new object[] { this.richTextBox1.Tag.ToString() }, out strOut);
+
+            if (strOut != "") { MessageBox.Show(strOut); return; }
+
+            this._dsMessage.Tables[0].Rows.RemoveAt(newValue - 1);
+            this._dsMessage.AcceptChanges();
+            if (this._dsMessage.Tables[0].Rows.Count == 0) this.ultraDockManager1.ControlPanes[0].Closed = true;
+            GetMessage();
+        }
+        #endregion
+
+        private void ultraStatusBar1_DoubleClick(object sender, System.EventArgs e)
+        {
+            if (this.dtUserMessage != null && this.dtUserMessage.Rows.Count > 0)
+            {
+                this.richTextBox2.Clear();
+                for (int i = 0; i < this.dtUserMessage.Rows.Count; i++)
+                {
+                    DataRow dr = this.dtUserMessage.Rows[i];
+                    string str = Convert.ToString(i + 1) + "、 " + this.GetNoNullStr(dr[0]);
+                    str = str + "  " + this.GetNoNullStr(dr[1]);
+                    str = str + "  " + Convert.ToDateTime(dr[2]).ToString("MM月dd日 HH时mm分");
+                    str = str + " \n";
+
+
+                    if (dr["PRI_"].ToString() == "2")
+                        this.richTextBox2.SelectionColor = Color.Red;
+                    else if (dr["PRI_"].ToString() == "1")
+                        this.richTextBox2.SelectionColor = Color.Blue;
+                    else
+                        this.richTextBox2.SelectionColor = Color.Black;
+                    this.richTextBox2.SelectedText = str;
+
+                }
+                this.panel2.Visible = true;
+            }
+        }
+
+        private void ultraStatusBar1_PanelClick(object sender, Infragistics.Win.UltraWinStatusBar.PanelClickEventArgs e)
+        {
+            if (e.Panel.Index == 4)
+            {
+                CallingMessage cm = new CallingMessage();
+                DateTime ldt = ClientCommon._RemotingHelp.GetLastExecute(out cm);
+
+                ShowPopUpMsg(string.Format("{0}\n{1}\n{2}", cm.ServerName, cm.ClassName, cm.MethodName),
+                    string.Format("最后调用:{0}", ldt.ToString("yyyy-MM-dd HH:mm:ss")));
+            }
+        }
+
+        private void ultraStatusBar1_PanelDoubleClick(object sender, Infragistics.Win.UltraWinStatusBar.PanelClickEventArgs e)
+        {
+            try
+            {
+                if (e.Panel.Index == 3)
+                {
+                    ShowPopUpMsg(ultraTabbedMdiManager1.ActiveTab.Form.GetType().FullName);
+                }
+            }
+            catch { }
+        }
+
+        private void button2_Click(object sender, System.EventArgs e)
+        {
+            this.panel2.Visible = false;
+        }
+
+        void AjustTime()
+        {
+            string strOut = "";
+            DateTime time1 = DateTime.Now;
+            try
+            {
+                object obj = ClientCommon._RemotingHelp.ExecuteMethod("ServerCommon", "Core.Mes.ServerCommon.UserInfoManager", "getDBSrvTime",
+                    new object[] { }, out strOut);
+                if (obj != null)
+                {
+                    DateTime srvTime = ((DateTime)obj);
+                    DateTime time2 = DateTime.Now;
+                    srvTime.Add(time2 - time1);
+                    DateAndTime.Today = srvTime.Date;
+                    DateAndTime.TimeOfDay = srvTime;
+                }
+            }
+            catch
+            {
+            }
+        }
+
+        #region 气泡提示函数
+        //////////////////////////////////////////////////////////////////////////
+        private G1.UltraWinToolTip.UltraToolTipManager ToolTipManager1 = new G1.UltraWinToolTip.UltraToolTipManager();
+        public delegate void ShowPopUpMsgDelegate(string strmsg, string prompt);
+        public delegate void ShowPopUpMsgDelegate_1(string strmsg, Control control);
+        public void ShowPopUpMsg(string strMsg)
+        {
+            ShowPopUpMsg(strMsg, "");
+        }
+
+        public void ShowPopUpMsg(string strMsg, string Prompt)
+        {
+            if (this.InvokeRequired)
+            {
+                ShowPopUpMsgDelegate act_Show = new ShowPopUpMsgDelegate(ShowPopUpMsg);
+                this.Invoke(act_Show, strMsg, Prompt);
+            }
+            else
+            {
+                Form frm = this.MdiParent;
+                if (frm == null) frm = this;
+
+                int min_len = 40;
+                string[] lines = strMsg.Trim().Split(new char[] { '\n' });
+                if (lines == null)
+                {
+                    strMsg = "".PadRight(min_len, ' ');
+                }
+                else
+                {
+                    lines[0] = lines[0].PadRight(min_len, ' ');
+                    strMsg = string.Join("\n", lines);
+                }
+                G1.UltraWinToolTip.UltraToolTipInfo toolTipInfo = new G1.UltraWinToolTip.UltraToolTipInfo
+                    (strMsg, G1.ToolTipImage.Info, Prompt, G1.DefaultableBoolean.Default);
+
+                toolTipInfo.Appearance.BackColor = Color.FromArgb(255, 255, 200);
+                //toolTipInfo.Appearance.BackColor2 = Color.Chartreuse;
+                toolTipInfo.Appearance.BackColor2 = Color.LightGoldenrodYellow;
+                toolTipInfo.Appearance.BackGradientStyle = G1.GradientStyle.Circular;
+                toolTipInfo.Appearance.ForeColor = Color.Red;
+                toolTipInfo.Appearance.FontData.Bold = G1.DefaultableBoolean.True;
+                toolTipInfo.Appearance.FontData.SizeInPoints = 11f;
+                toolTipInfo.ToolTipTitleAppearance.ForeColor = Color.Navy;
+
+
+                int delay_time = (strMsg.Length + Prompt.Length) / 3 * 1000;
+                ToolTipManager1.AutoPopDelay = delay_time < 5 ? 5 : delay_time;
+                ToolTipManager1.SetUltraToolTip(this, toolTipInfo);
+                ToolTipManager1.ShowToolTip(this, new Point(frm.ClientSize.Width - 20, frm.ClientSize.Height - 10));
+            }
+        }
+
+
+        public void ShowPopUpMsg(string strMsg, Control control)
+        {
+            if (control == null) return;
+
+            if (control.InvokeRequired)
+            {
+                ShowPopUpMsgDelegate_1 act_Show = new ShowPopUpMsgDelegate_1(ShowPopUpMsg);
+                control.Invoke(act_Show, strMsg);
+            }
+            else
+            {
+                G1.UltraWinToolTip.UltraToolTipManager _ToolTipManager = new G1.UltraWinToolTip.UltraToolTipManager();
+                G1.UltraWinToolTip.UltraToolTipInfo toolTipInfo = new G1.UltraWinToolTip.UltraToolTipInfo
+                    (strMsg, G1.ToolTipImage.None, "", G1.DefaultableBoolean.Default);
+
+                toolTipInfo.Appearance.BackColor = Color.WhiteSmoke;
+                toolTipInfo.Appearance.BackColor2 = Color.Yellow;
+                toolTipInfo.Appearance.BackGradientStyle = G1.GradientStyle.Circular;
+                toolTipInfo.Appearance.ForeColor = Color.Red;
+                toolTipInfo.Appearance.FontData.Bold = G1.DefaultableBoolean.True;
+                toolTipInfo.Appearance.FontData.SizeInPoints = 11f;
+                toolTipInfo.ToolTipTitleAppearance.ForeColor = Color.Navy;
+
+                Rectangle rect = control.RectangleToScreen(control.ClientRectangle);
+                rect.Height -= 15;
+                rect.Width -= 15;
+                Point screen_pos = control.PointToScreen(new Point(control.Location.X + control.Size.Width - 15, control.Location.Y + control.Height - 15));
+
+                int delay_time = strMsg.Length / 3 * 1000;
+                _ToolTipManager.AutoPopDelay = delay_time < 5 ? 5 : delay_time;
+                _ToolTipManager.SetUltraToolTip(this, toolTipInfo);
+                _ToolTipManager.ShowToolTip(this, rect, screen_pos);
+            }
+        }
+
+        public void ShowPopUpMsg(string strMsg, Control control, Point _offset)
+        {
+            if (control == null) return;
+
+            if (control.InvokeRequired)
+            {
+                ShowPopUpMsgDelegate_1 act_Show = new ShowPopUpMsgDelegate_1(ShowPopUpMsg);
+                control.Invoke(act_Show, strMsg);
+            }
+            else
+            {
+                G1.UltraWinToolTip.UltraToolTipManager _ToolTipManager = new G1.UltraWinToolTip.UltraToolTipManager();
+                G1.UltraWinToolTip.UltraToolTipInfo toolTipInfo = new G1.UltraWinToolTip.UltraToolTipInfo
+                    (strMsg, G1.ToolTipImage.None, "", G1.DefaultableBoolean.Default);
+
+                toolTipInfo.Appearance.BackColor = Color.WhiteSmoke;
+                toolTipInfo.Appearance.BackColor2 = Color.Yellow;
+                toolTipInfo.Appearance.BackGradientStyle = G1.GradientStyle.Circular;
+                toolTipInfo.Appearance.ForeColor = Color.Red;
+                toolTipInfo.Appearance.FontData.Bold = G1.DefaultableBoolean.True;
+                toolTipInfo.Appearance.FontData.SizeInPoints = 11f;
+                toolTipInfo.ToolTipTitleAppearance.ForeColor = Color.Navy;
+
+                Rectangle rect = control.RectangleToScreen(control.ClientRectangle);
+                rect.Height -= 15;
+                rect.Width -= 15;
+                Point screen_pos = control.PointToScreen(new Point(control.Location.X, control.Location.Y));
+                screen_pos.Offset(_offset);
+
+                int delay_time = strMsg.Length / 3 * 1000;
+                _ToolTipManager.AutoPopDelay = delay_time < 5 ? 5 : delay_time;
+                _ToolTipManager.SetUltraToolTip(this, toolTipInfo);
+                _ToolTipManager.ShowToolTip(this, screen_pos);
+            }
+        }
+
+        #endregion
+
+        //////////////////////////////////////////////////////////////////////////
+        /*                  拦截窗口消息,检测按钮点击                          */
+        //////////////////////////////////////////////////////////////////////////
+        //  一些定义
+        [DllImport("user32.dll", EntryPoint = "WindowFromPoint")]//指定坐标处窗体句柄
+        public static extern int WindowFromPoint(
+            int xPoint,
+            int yPoint
+        );
+
+        const int WM_PARENTNOTIFY = 0x0210;
+        const int WM_LBUTTONDOWN = 0x0201;
+        const int WM_RBUTTONDOWN = 0x0204;
+        const int WM_MBUTTONDOWN = 0x0207;
+        //////////////////////////////////////////////////////////////////////////
+        protected override void WndProc(ref Message m)
+        {
+            //Debug.Print(string.Format("{0,8:x} -- {1,10},{2,10}", m.Msg, m.WParam, m.LParam));
+            try
+            {
+                if (m.Msg == WM_PARENTNOTIFY)
+                {
+                    int LO_WPARAM = ((int)m.WParam & 0xFFFF);
+                    int HI_WPARAM = ((int)m.WParam >> 16);
+
+                    if (LO_WPARAM == WM_LBUTTONDOWN)
+                    {
+                        int LO_LPARAM = ((int)m.LParam & 0xFFFF);
+                        int HI_LPARAM = ((int)m.LParam >> 16);
+
+                        Point p = new Point(LO_LPARAM, HI_LPARAM);
+                        Point p1 = PointToScreen(p);
+
+                        string p_Text = "";
+                        int hwnd = WindowFromPoint(p1.X, p1.Y);
+                        Control c = Control.FromHandle((IntPtr)hwnd);
+                        Control pc = c;
+
+                        while (pc.Parent != null)
+                        {
+                            pc = pc.Parent;
+                            if (pc.GetType() == typeof(Form) || typeof(Form).IsAssignableFrom(pc.GetType()))
+                            {
+                                p_Text = pc.Text;
+                                break;
+                            }
+                        }
+
+                        if (c.GetType().ToString().ToUpper().Contains("BUTTON"))
+                        {
+                            ClientCommon.RecordUserEvent("点击", "按钮", c.Text.Trim(), p_Text, (string.IsNullOrEmpty(p_Text) ? "" : pc.Name), "");
+                        }
+                    }
+                }
+            }
+            catch
+            {
+
+            }
+            base.WndProc(ref m);
+        }
+
+    }
+
+}

+ 117 - 0
.svn/pristine/47/47b15748ecc8e952c5935170090db7c269ce4b4f.svn-base

@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 434 - 0
.svn/pristine/47/47bf226bb3bcaff1e987861ae885fd14013db70e.svn-base

@@ -0,0 +1,434 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="ultraTabbedMdiManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="ultraDockManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>475, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="appearance2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        Qk3OAAAAAAAAAHYAAAAoAAAACwAAAAsAAAABAAQAAAAAAAAAAAATCwAAEwsAABAAAAAQAAAAAAAA/wAA
+        gP8AgAD/AICA/4AAAP+AAID/gIAA/4CAgP/AwMD/AAD//wD/AP8A/////wAA//8A/////wD//////93d
+        3d3d0AAA3Q3d0N3QAADdDd0ADdAAAN0N0ADd0AAA3Q0ADd3QAADdAADd3dAAAN0NAA3d0AAA3Q3QAN3Q
+        AADdDd0ADdAAAN0N3dDd0AAA3d3d3d3QAAA=
+</value>
+  </data>
+  <data name="appearance3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        Qk3OAAAAAAAAAHYAAAAoAAAACwAAAAsAAAABAAQAAAAAAAAAAAATCwAAEwsAABAAAAAQAAAAAAAA/wAA
+        gP8AgAD/AICA/4AAAP+AAID/gIAA/4CAgP/AwMD/AAD//wD/AP8A/////wAA//8A/////wD//////93d
+        3d3d0AAA3d3dDd3QAADd3dAA3dAAAN3dAA3d0AAA3dAA3d3QAADdAA3d3dAAAN3QAN3d0AAA3d0ADd3Q
+        AADd3dAA3dAAAN3d3Q3d0AAA3d3d3d3QAAA=
+</value>
+  </data>
+  <data name="appearance4.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        Qk3OAAAAAAAAAHYAAAAoAAAACwAAAAsAAAABAAQAAAAAAAAAAAATCwAAEwsAABAAAAAQAAAAAAAA/wAA
+        gP8AgAD/AICA/4AAAP+AAID/gIAA/4CAgP/AwMD/AAD//wD/AP8A/////wAA//8A/////wD//////93d
+        3d3d0AAA3d0N3d3QAADd0ADd3dAAAN3dAA3d0AAA3d3QAN3QAADd3d0ADdAAAN3d0ADd0AAA3d0ADd3Q
+        AADd0ADd3dAAAN3dDd3d0AAA3d3d3d3QAAA=
+</value>
+  </data>
+  <data name="appearance5.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        Qk3OAAAAAAAAAHYAAAAoAAAADAAAAAsAAAABAAQAAAAAAAAAAAATCwAAEwsAABAAAAAQAAAAAAAA/wAA
+        gP8AgAD/AICA/4AAAP+AAID/gIAA/4CAgP/AwMD/AAD//wD/AP8A/////wAA//8A/////wD//////93d
+        3d3d3QAA3dDd3Q3dAADdAA3dDd0AAN3QAN0N3QAA3d0ADQ3dAADd3dAADd0AAN3dAA0N3QAA3dAA3Q3d
+        AADdAA3dDd0AAN3Q3d0N3QAA3d3d3d3dAAA=
+</value>
+  </data>
+  <metadata name="ultraToolbarsManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>205, 17</value>
+  </metadata>
+  <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 54</value>
+  </metadata>
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAEARkUAAAEAGACIPAAAFgAAACgAAABGAAAAigAAAAEAGAAAAAAAYDwAAAAAAAAAAAAAAAAAAAAA
+        AAALALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsL
+        ALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsL
+        ALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsL
+        ALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsAAAsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsA
+        uwsAuwAACwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7
+        CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7
+        CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7
+        CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7AAA3MsMCALkJAL0LAbkKALoJALsLALoN
+        ALoJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJ
+        ALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJ
+        ALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJALsJAboOALwMAbsM
+        ALgLALsLALsAADw0wQQBuw0AuwsAugwBvAkAuwkBugsAvQsAugsAugsAugsAugsAugsAugsAugsAugsA
+        ugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsA
+        ugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsA
+        ugsAugsAugsAugsAugsAugsAugsAug4AuwkBugoBvAwAvgsAuwsAuwAAPDTBAwG5DQC7DAG8BwC7DAG7
+        BAC4BQG4CAC6AAG3AAC4CwC6CwC6CwC7DAG7CwC6CwC7DAG7CwC9DAG8CwC6CwC7CQC7DQC7CwC7CwC7
+        CwC6CwC9CwC7DQC6DQC7CQG6CwC6CwG5CgC8DAG7DQG5CQC7DAG7DQC7CwC6CQG6CgK7CwC7DgG7CQG6
+        CQG6DAC+DAG7DQC7CwC7DgG7CQC7DQC6CwC6CwC7DQC9CwC6CwC9CwC6DgK6BwC7CwC7DQC6CwC7CwC7
+        CwC6CwC6CwC7CwC7AAA8NMEAAboLAL0LALsOALoDALpBPMe4uObExOiVktpBOsMEALgAALgJALsGALkN
+        ALsOAbsIALwKArsLArcNALsLAL0LALsOAroJALsLALsLALoLALsMAL4JAL0JALsNALsLAL0MALkKAbwK
+        ALoJALsNALsMALoHALsKALkOAbsLAL0MAL4LAbkNAL0LALsIALoJALsLALoMAbwJALsOALwNALoLALsL
+        ALsHAboNALoLALoJALsLALsLALsKAbwNALoLALoLALsLALoLALoLALsLALsAADw0wQAAuwsAvQcAvQsA
+        ugwGuc3Q7P///P///v/+//r6+rm65ktHyAAAuAMBuQkBugsAug4AugsAuwsAuw0AugkBugkBugoBvAwB
+        vAwAuQwAvgkAuwsBuQsAuwsAug0AugsAug4CugkAuw8BuwkAvQsAug4AvAoCuwcAuwwAvAwBuwsAugkB
+        ugsAuwkBugwBuwsAuw0BuQ0AvQwBvAwAugkAuwsAuw0Auw0AuwsAugkAvQ4BuwkAuw0Aug0AugkAuwsA
+        ugsAuwsAugsAuwsAuwsAuwAAOTPAAwG5CwG5CQC7BwG6FA654uPx/f///f78/f78/////v/7/v/6qabd
+        JiS+AAC2CQG6CQG6CwC7CwC7CwC7CgC5CQG6CwC9CwG5DAG8CgC5DgC8DQC7CwC7CwC7DAG8CwC7DQC7
+        CgG8DQC6CQC9CAG8DAC6DQC6CwC6DAK6CwC9CwG5DQC9DQC9DAG8CwC6DQC7CwC9CwG5CwC6CQC7DQC6
+        DAC+CwC6DAG7DwC8CwC7CgC6CQG5DAK6CwC9CAC5CwC6CwC7CwC6CwC7CwC7CwC7AAA7NL8CAL4LALsO
+        ALwJALsJBLvIzOj8/v/9/P77/vz9/P/5/v3///z9///i4vJcW8kCAbUGALoNAbkLAL0JAbkNALoNALsJ
+        ALsLAL0OAbsOALwIALoHAb4JAbkLAbkKAL4MAbwLALsHAL0NALsJAboHAL0KAL4JALsOALsLALoKALgG
+        ALkKAbwKAbwKALkKAbwJAboKAbwJAL4GALoMAbsJALsKAL4JALsKAroJAboJAboHAboLAL4KALoJAboJ
+        AL0LALoLALsLALoLALsLALsLALsAADw0wQEAugwBvAoAuQkBugIAt3x40f////39/f3+/P/9/f/+//z+
+        ///+/v/+///9/JGT2QwKuAUAuQsAvQkAuwsAvQsAugwBuwkBugsAugwBvAgBtgQAtAUAtQkBugkBuQUA
+        uQEAtwMAtgwCugcAtQUAsggBtgwBuwkBugAAtgkEuxULuwUAtwIAuQkAuwwBvA0BuQAAtwgAuhALugcA
+        twABugkBugsAugoCuwMAtwMAtg4JuAwEtQABtwkBug8BuwsAuwsAuwsAugsAuwsAuwsAuwAANzS/AwC6
+        DQC9CwC7DQG5AwC9Hhm87Ov1//7//f78/v7+yMfp1tjw/f/+/v/9/v7+//7/wsLmHR+5AQC8CwC7CQG6
+        DgC8CwC6DQC7BwK8BgG4aGXMw7/irq7eHBO9AAK7RT/Gvb3lwLzgNzG+g4DVwb/je3fQAAC7DAS8gHzO
+        zc/u29jxv7/nUk3GAAC5CgK7AAC5Yl/NwsHo2tryxsXlUlLEBQC5BwC7AAC5Qz/Atbff19vu0c/sfnrT
+        EAi5CAC4CwC7CwC7CwC6CwC7CwC7CwC7AAA5M8ADALwJAboNALoLALsMAL4AALeDgtL//v/8//v///9z
+        d9ANDbOend38//3///77/f7////Y3O81Nb8CALcKALkJALsLALoLALoLAL0GAbo6M8T9/////v9vbtAB
+        ALGxt+L///7b2PELCLvCwOr///+oquQAALZ/gNH///////7///r9///3+/VEP8QAALRnYs/9//f//v//
+        //7////8/PxNScYAALhDQsf49vb7/////////f/9//yhn9sCALcLALsLALsLALoLALsLALsLALsAADw0
+        wQEAvAsAuwsAuwwBvAsAugkBuQwKutHS7P79/////97h8BIPuQIAuH5/0Pr9+/////v9/f/+/+Xl80BF
+        wAABtw0AvQsAugkAvQsAugwBvAUCtpea3v3//9TT7VtYxvj7+f///F1ZygAAuLu76f///6Cf4w4IufDx
+        9f3//JWT2Skpvaqr3v///qSn3gsIstbT7f///sDA6G5tzc/R6f3//MG95gcFs7e54v///+Lf7m1szKSl
+        3//+/vz89j00wAQCugsAuwkBugsAugsAuwsAuwAAOzS/AgG7DAG8CwC7CwC7CwC7CAC5BQK2Uk/D+P75
+        /v/7///+gX7UAQC0AAG3ZmLJ9fb0/////f78+///6OvzPTvDAwG4CQG6DQC7DAG7CQC7BQC5LyfB+ff3
+        /v/66e/2////0M7sDgS8AgC4vbrr//7/np7kDgy6lJHZoJzeFhG6BAS0pqXd/f//vb/nOzjD//34+/z6
+        PDjAAACwTkrH6+z2mpjaKie57/H5///7YVvKAACyEQu42d3v/f//gnzVAAC4CwC7CwC6CwC6CwC7CwC7
+        AAA8NcABALoLALoLALoLALsLALsLAL0HAboEALiQjNf///7+//329/tGQ8EAALkCALhMTcXu7fb//v3/
+        /fz////c4fAqKb8DAbkMAbwLALoLALsNAL0FAbiPjtj+//3///74+f1VU8sAALgBALq7vOj///6fo+QB
+        ArgAALYkILyIhtjU1u7//////v2RkddTU8n9//7p6vQcFb4DAr4OCbgkIL8BALQ+Osn///v6+vo1K8UA
+        ALgBALezs+H///+goOAAALgLALsLALsLALsLALsLALsAADw1wAEAugsAugwBuwsAuwsAuwsAvQoCuwYA
+        vRIRu8nO5////////N/e8iYjvAIBvQAAu0VHxO3w9f3///78+//+/8jO6xAMuQcBugsAuwoAug0CvAAA
+        t0lHw/39/f3//+rs9B8YvAUAuQQAubm86f3+/6Kk5QIAuDw5xevs8P/+/f3////+/tfU7hsZuV5bzv/+
+        /+Xm9BoTvAIAuwcAuwIBvQACuD88x////vf5+jIpvwIBuwAAuK+t4f///6Sl3wABuQwBvAsAuwsAuwsA
+        uwsAuwAAOzPAAQC8CwC6CwC6CwC6CwC6DAC+CwC6CAO6AAC7NzDB8fX2/f78+///y8joEhG7BQC6AAC5
+        SkjD8PT1/v7+//79/v7+nZzcAAC7BwC9DgC8CQG5CgK6urri//79///+/f//iIjUAQC0BQC6vLzq/v/7
+        o6LkAgC3ubLl///+8fb0wcPlcHHLGhS5AAG3UEzJ/v/98/j3KyjBAAC4Hhi5UUjHFhO8My3C9/v8////
+        TkTGAAG0BwC1ys7r/v7+jo/ZAAC4CQC7CwC7CQC7CwC7CwC7AAA8NMECAb0LALsLALoLALoLALoLALsL
+        ALoNALsLAb8CALljYcv///7//v76//6us+AIBbkKALkAArhWV8n8+fv+//v+//v//fxbV8gEALcKAbwB
+        ALpGQcT//v329fesqdr//v/n6u8ZFrkCALm6u+f///+goOYAALfNzev+/v5tbMwAALKanN3PzOxbXMoa
+        Ernu7fb9//ygntosKbqkqN39//60seIMCLXP0en////CwuY0NL52ddH5/Pr///9UTMgEALgJALsLALsJ
+        ALsLALsLALsAADs0vwEAvAsAuwwBuwsAugkBugsAuwsAug4AuwwBuwsAugABtZiX2f///v/+/f7+/paV
+        2QAAuAkAvQAAuHJw0P////7//f3//+Xl8ygivQQAvgkFvL++6v///rS04hkTuODg8P///4iI1gIAs8HA
+        6v/+/qWk5AABt5CR1f/9/87O7LSz3/3//v//+0dEwgAAtJSU2v3///////n6+P/9/P3//29o0AAAs2pn
+        zv7//f3//vz6+v///v///8vM6BMJuQkBugsAuwsAugsAugsAuwsAuwAAOTS/AQC6CwC7CwC7CQG6CQG6
+        CwC7CwC6CwC6BwC7DAG7BQC6DAa3vb3l/v3//v/9/v/7dHHUAAC4CgC+BAC3oJ/f///+/f78/f/+o6Xf
+        BAC3PDnF6ez05+j2TUjDAAC2f3vU6e340tDtEQ64qqfl6+z6lpfbAQC8GBa8rq/h+/z6////6ur2h4fV
+        CgS3BwG+GBG6oZ/a7fD1////6+31j4vXCga5CQG6CQS5f33W4uX0/P/78vX5tLjhKiq8AwC6DQC6CwC7
+        CwC6CwC6CwC7CwC7AAA8NMEBALoLALoLALsLALsLALoLALsLALoLALoNAbkHALsJAbkAALgjIbvX2+7/
+        ///+//3//fxhW8wAALkGAbsYEr3Oz+v///7+/f///vpXVcwICrwhG7wdGLsKAbwJA7wOCLsfGrsfG7oP
+        CsEZErsfGboUErgOALwGAboIALktJ8I5NsIgG74EALcHAboOAroEAroJALkpH787NsEgG7wGAbYHAboN
+        ALsJALsDALwVFro4NcEuJsAFArUCALsMAbsLALsLALsLALoLALsLALsLALsAADw0wQEAugsAugsAuwsA
+        uwsAugsAuwsAugsAuwkAvg4AvA0AuwoAugMBuSoovdjZ7v/+//7//fL09FpWzQAAuAABtzc2wvn39v3/
+        //3//trY7BINtgIBvQUAug0BuQsAvQwAvgIAuQcCvAkBugYBuwMBuQkBug0AuwoBvAgAugUAuQIAuAcA
+        uw0AvQ0AvQkBuQ4BuwsAuwUAugMAugcAuwoAugsAugoAvgoCugsAvQcAuwIAtwEAugUAvAkAuwsAugsA
+        uwsAuwsAugsAuwsAuwsAuwAAPDTBAQC6CwC6CwC7CwC7CwC6CwC7CwC6CwC7DAG7DQG5CQC7DgG7CwC7
+        BQC6KiK8y83s////wsbiv8PfY2DNAQG5AAC4hILU/v/9//7+///8h4nXAAC2CwC6CQG6CwC6CQC7DgG7
+        CwC9DAK6DAC6DQC9DQC2CgK7CQC7CwC7CwC7CwC6CgC5CwC7CwC7CQC7CwC9DAG7DAG7CQC7CgK7CwC6
+        CwC6CQG5DAK6CwC6DAG8CwC7DAG7CwG5CwG5DAG7CwC7CwC7CwC6CwC7CwC7CwC7AAA8NMEBALoLALoL
+        ALsLALsLALoLALsLALoNALoJALsLALoLAL0JALsLAbkNALsCALcfHL+pr9x7g8mPltWlqdpTVMYEALgN
+        BrvS1+z+/v7//v/u8fYsJL4GALoJALsOAbsLALsLALsLALsLALsKArsJALsLALoHAboLALsLAbkNAL0L
+        ALsMAbsLALsLALoLALsOAbsKALoLALsOAbsOALwLAL0LALsNALoNALsLALsLALsLALsLALoJAboNAr0M
+        ALkLALsLALsLALoLALsLALsLALsAADw0wQEAugsAugsAuwsAuwsAugsAuwsAug0AugYAuQwAvg0BuQoA
+        ugsAuwsAvQsAugEAvBgUuYuL0Z2n1lJYw297yVZXxwAAsFRUyv7/+//9/P///6Gh3QIAuAkBuQsAuwsA
+        uwgAuQsAuwwBvAgAugsAugsAuw0AvQsAugsBuQwBvAsAugkBuQgAugoBvAsAuw0AugkAuwkBugsAugwB
+        vAwBuwsAugsAvQkAvQsBuQsBuQsAuwsAugsAugkAuwkAuwsAuwsAuwsAugsAuwsAuwsAuwAAPDTBAQC6
+        CwC6CwC7CwC7CwC6CwC7CwC6CQC+DgG7DQC6CAC6DAG7DQC6CwC7DAG7CwC6AwC9Ew3AlpTahYXRT1W+
+        hpHPY2TGBwK5vrvs///+/f398vX5My3CAAC5DAC+CgC5AgG7AAC4AQC3BAG1AQC2AAC5BQC5CQC7CAG8
+        BgC6DAG8DQC7CwC7CwC6CwC6CAG+CwC7DQC6DAG8CwC7CwC7DAG7CQG6DgC8DAK6CwC7DAC8DQC7DAG8
+        CwC7DQC7CwC7CwC7CwC6CwC7CwC7CwC7AAA8NMEBALoLALoLALsLALsLALoLALsLALoJAboNALsLALsL
+        ALsLALsIALgMAL4LAbkLALoOALwHArsCA7l9fNKgo9o0OLx1ecg1Ob1iZ83/+vv+/f/9//+lpt4BALYJ
+        ALsBAbkhHL9xbtGprd61uOSend1oZM4pKL4DAbkGALoKAbwLALsLALoMAbsKALoMAbsNALsNALsLALsJ
+        AboLAbkNAbkNALoLALoLALoLALoKALoLALoLAbkKALkMAbwJAboLALsLALsLALoLALsLALsLALsAADw0
+        wQEAugsAugsAuwsAuwsAugsAuwsAug4AugkAuwcAuwwBuw0AuwwBvAsAuw0AugkAuw0AugkBuQYBuwQB
+        tVpczKOe3EJDu1dcwlRbwtzf7v///P/+//j59yspvwAAtlhSyeTo8////v/////+/v7+/v////T1+aqs
+        4jk4vgAAuAYAvQwBvAsAuwoBvAsAvQsAugwBvAsAuwsAuwsAvQkAuwsAug0AuwsAuwsAuwkAuwkBugsA
+        uwwBvAsAuwsAugsAuwsAuwsAugsAuwsAuwsAuwAAPDTBAQC6CwC6CwC7CwC7CwC6CwC7CwC6CwC7CwC7
+        CwC7CwC7CwC7CwC7CwC7CwC7CwC9DAG7CQG6CwC6CwC9BAG1Pj3DoqnbY2jDQEW4l5/U/f/+/v/9///+
+        enTTPT2/9fb6/v/7/f39/fz+/P37+/78+/3+//7///7/9/r4naHcJCC8AAC4CQC7CwC7CwC6CQC7CwC6
+        CwG5CQC7DAG8DQC9CgG8DQC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC6CwC7CwC7CwC7
+        AAA8NMEBALoLALoLALsLALsLALoLALsLALoLALsLALsLALsLALsLALsLALsLALsLALsLALsNAbkMAbsL
+        ALsLAL0KAbwAAbogGr+Dg9GJh9NgYcPk5u7//v/+/v7W1OrOzOr//v79//7//v/8/v////7+/v79//75
+        //r8/fv+//39//7j4/FsadAEALMCALgOAL4LAL0KALkLALsJAboLALoJAboLALoMAbsLALsLALsLALsL
+        ALsLALsLALsLALsLALsLALsLALsLALoLALsLALsLALsAADw0wQEAugsAugsAuwsAuwsAugsAuwsAugsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsBuQsAuwsAvQoBvAoAugsAvQ4AuwYAvQAAuU9Myn6Fyr6/4f//
+        //j//P//+/7+/v7+/vr4+J+f24B62Y6O2sHB6fLz9/////3+//n/+v39/f////7/+6+x4SYguwAAuAsA
+        uwkBugkAuwkBuQkAuwwBuwsAugsAvQsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAugsAuwsA
+        uwsAuwAAPDTBAQC6CwC6CwC7CwC7CwC6CwC7CwC6CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CAC6DgC8
+        CwC6CgC5DQG5CwC6CwC6CwC6CQC7AAG6FhS6QkLE9vX5+////Pv9//7+////envTAACyAAC5AgC3AgC3
+        KCW+dHPTyMrs//////79+P38/v/7//7/2+HuR0bEAAC4DAC+CgC6DwG9CQC9CQC7CwC7DAG8CwC7CwC7
+        CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC6CwC7CwC7CwC7AAA8NMEBALoLALoLALsLALsLALoLALsL
+        ALoLALsLALsLALsLALsLALsLALsLALsLALsIAbwIALoMAbwLALoJAL0NALoLAL0NAL0NAbkLALsFALoC
+        ALi/vuj///z//fz+/v77/f0yMsIAALwGAbgkHr80LsEAALkBAbMOBrd3d9Hw8/j7//7//P3/+/z//v/3
+        +vhmZcwAALYNArwMALkNALsLALsJALsLAbkLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALoL
+        ALsLALsLALsAADw0wQEAugsAugsAuwsAuwsAugsAuwsAugsAuwsAuwsAuwsAuwsAuwsAuwsAuwkAuwsA
+        ugkBugoAuQoBvA0AuwkBugwAvgsAugkAuw4AvAkAuwAAuGdk0fz/+//8/v7+/v///k1LxwAAthkVu93b
+        7/z9+7q94zcywwAAuAIAuDY2vtXY7f////z7/fv8////+/7+/nZ41gAAuAkAuwwBuwsAuggAuQsAuwsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAugsAuwsAuwsAuwAAPDTBAQC6CwC6CwC7CwC7CwC6
+        CwC7CwC6CwC7CwC7CwC7CwC7CwC7CwC7CQC7CQC7DwO7FA+4BgC6DQC6DAG7CwC6CQC9DQC6DgG7CAC5
+        DAG8AwG5LyjF9vf7//79+/78/f//p6TbAAC2Jx+/+Pv5//7///3/9Pb3hIjXEgy5AQC3Hx66vL/l/f/+
+        //3///39///+///+e37TAAGzCwC+CQC7CwC6DQC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7
+        CwC6CwC7CwC7CwC7AAA8NMEBALoLALoLALsLALsLALoLALsLALoLALsLALsLALsLALsLALsJALsJALsH
+        ALtUUczX2fE3M8IAALsNALsJAbkNALsLALsLALoLALsMAbsHAboNBb3OzOn9///9/f3+//vu8fYqKMEE
+        AbSOj9n///v////9//7///7Jx+syKMIAALEODLq3ueL+//3+/f/7/f3///z8/v5rbM4CALcLALsNALsJ
+        AboLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALoLALsLALsLALsAADw0wQEAugsAugsAuwsA
+        uwsAugsAuwsAugsAuwsAuwsAuwsAuwsAuwwBuwgAuQQAuF9azf///9PU7iAbvgAAuQ0AuwsAugsAuw0A
+        uwsAugkBugoAvgAAtImL2f7//f38/v/9/f///62u4AAAtQkCt5SZ2P3///7/+/z//f/+/+nr84OC0iAh
+        vwkJtb+95/////39/f38/v7/+/L1+T05wQIAuQkBuQkBugsBuQkBugsAuw0AuwkAuwoCuwsAugsAuwsA
+        uwsAuwsAugsAuwsAuwsAuwAAPDTBAQC6CwC6CwC7CwC7CwC6CwC7CwC6CwC7CwC7CwC7CwC7CwC7CwC7
+        CQG6BAC4MyzD+Pv5/f//wcLkHRq9AAC4DgG7CgC8CwC7CAC8CAK7CgC5AQG5U1DL/v/7//38/P7+/v3/
+        /P/6XFjJAAC4BQK2hIHX//7+/f/8//v//v/9//7/5u3wYGPLGBK3w8Tq///+/Pv9//7+/v7+vsDpCga5
+        CgC+DQC9DQC+CwC9CQG6DAG8DgC8CwC6CgG8CwC6CwC7CwC7CwC6CwC7CwC7CwC7AAA8NMEBALoLALoL
+        ALsLALsLALoLALsLALoLALsLALsLALsLALsLALsNALsLALsIALkHA7rExuj//////v/EyucdHrwAALkM
+        AbwKArsOALsLALoMAbwDALo0LMb1+vj///719Pj//Pv//v3k6fIlIb0AALgAArRqZ87w8Pb////+//3+
+        +/3//v/5/fiVl9hcW8Pj4fT///z8/fv9//7///s8NsMCALgLALsLAbkMAbwLALsLALoLALoMAbwLALoL
+        ALsLALsLALsLALoLALsLALsLALsAADw0wQEAugsAugsAuwsAuwsAugsAuwsAugsAuwsAuwsAuwsAuwsA
+        uwsAuwsAuwkAuwAAuFxcyP7/+/3+/P/+/tnZ8TQzvwIAuQcAvQkAuwsAuggAuQYAvh0Yuers9v///+Hi
+        8Ofq7v///v///7K25gkHtQgAugAAtisrv7y+5vz//f///v/9/P///vz/+tzh6tDT6PX2+v79//7//f3/
+        /31/0wAAtgwBvAsAuwsAugsAuwwAvgsAuw0Aug4AvAoAugsAuwsAuwsAugsAuwsAuwsAuwAAPDTBAQC6
+        CwC6CwC7CwC7CwC6CwC7CwC6CwC7CwC7CwC7CQC7CwC7CwC7CwC7DAG8CQC7Cge3zcvp//7//P37/v/7
+        7/D0ZGHPAQK4AwG5EQC+CQC7BgC6Fw685efy///+5+ryrrHd////+/78/v/9ioXUAAC3DAC+BAC9CAS3
+        bWzO6+31/////f////39/v/67uzy+PT5/v/7/vv9//7/lZHdAAC3CAK7CwG5CwC7CgK7CAC6DgC8DQG5
+        CwC7CwC7CwC7CwC7CwC6CwC7CwC7CwC7AAA8NMEBALoLALoLALsLALsLALoLALsLALoJAboLALsLALsJ
+        ALsJALsLALsLALsLALsOAL0BAblGQcTy9/b+//37/f3///7///ubmdsdHLgAALQCALcBAbNTT8b4+vr+
+        /f/7/f2Egs7w7Pf9//7+/fn+/PtkYNEAAbcKALkKAbwCALkqKL6cn9z8/v7///7//v7////9/P7//f3/
+        ///y9flNS8YAALgCALgGAL0PAbsNALoHAboLALoLALsJAboNALsLALsLALsLALoLALsLALsLALsAADw0
+        wQEAugsAugsAuwsAuwsAugsAuwsAugkBugsAugsAuwsAuwkAuwsAuwsAuwsAuwkBugkBugAAuHd20v//
+        +/z+/v7+/v7/+//+/9/d8Xd50VBOynZ40Ovp9f/+///9/P///3t20ZCS2P3//vr9+////vPx90lFxgIA
+        twsDvA4AvAUAuQICtEtJxbm25/L09P7/+v3///78+/3+9dPa6YOFzHZ21D88xwUAuQ4Buw4AugkAuwcB
+        ugoBvAsAvQ0AugsAuwsAuwsAugsAuwsAuwsAuwAAPDTBAQC6CwC6CwC7CwC7CwC6CwC7CwC6CQG6CwC6
+        CwC6CwC7CgG8CwC7CwC7CwC7CwC9DQC6CwC7AAC0g4DV///+/////fz+/f76//////7////7/P/9////
+        /Pz8+/39/f/+ionZGxi76+31/////P35/P/76uv1ODK/AAC5CQC7DgK6CQC9AAK5BQC6REHGpKjZ8vP3
+        ////0tDmr7Xg6Ojuzs/j1dzrREnDAAC4BAC9DgC6DQC7CQG5DAC/CQG6CwC7CwC7CwC6CwC7CwC7CwC7
+        AAA8NMEBALoLALoLALsLALsLALoLALsLALoLALsLALsLALsLALsLALsLALsLALsLALsLALoLALoPAbsG
+        ALoAAbdhYsrt7vj//////v39/f38/fv//vr//f37/f7+/v7//P3///6CgtYAALRjXsv+//3//v///fz9
+        ///k5vAyLb4AAbcMAbwNALoKArsJALsCALgEAbU6PMCjpN7w9fP1+Pb6+vrv8fHd5OegqNBQTcEEAbQD
+        ALoHALsMAbwKALkJALsLALsLAL0LALoLALsLALsLALsAADw0wQEAugsAugsAuwsAuwsAugsAuwsAugsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAvQ4AvgkBugoAvwgAugAAuSopv6qq4P/+/f3////+//39/fz+
+        /vv+/P7//f////b4+TIywgMBuQEAt4yN1////v7+/v3+/P3//+Dk7zUxwAEAtgkAuwsAuwsAug4AugkA
+        uwIAuAgAszMwwZeX0+vs9tDX6OXh7Zec04+R0ra8319fyR8dvQUAtwkAvQsAuw0AugsAuwsAugsAugsA
+        uwsAuwAAPDTBAQC6CwC6CwC7CwC7CwC6CwC7CwC6CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CQC7CwG5
+        DAG7CwC6DgC7DgC8BQC5AAG1QD7Go6Hc7Or2/f/8//7+//7//v/70tLqVFHEAAG3CAG+CQC7BAG1oZza
+        +/////39//3///7/6eb1RETGBAC4DgC8CQG6CwC7CwC6DQC7DAG7AwC6AgC3KSi+fYHQ4uXt+Pb26+vx
+        4eTpen3OY2XJVlrLCgW8DAC5DAC5CwC7CwC6CQC7CwC7CwC7AAA8NMEBALoLALoLALsLALsLALoLALsL
+        ALoLALsLALsLALsLALsLALsLALsLALsLALsLALsNAL0LALoLAbkMAbwKALkMAbsIALkAALgCALgiHr1O
+        SMthX9BdXsxBPskOCbgCALcIAbwLALoNALoIALwLCrihoeH///7//v79//n////u7vRaXs4AALYJAboO
+        AbsLAL0LAbkMAbwKALoMAbwCALgDArYuKMNoasi2wN7v8/S6wt8tJb8lIMMKAbwHAboLALoKArsLALsL
+        ALsLALsLALsAADw0wQEAugsAugsAuwsAuwsAugsAuwsAugsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwoC
+        uwsAugsAvQoBvA0Aug4AvgsAuwwBvA4AvA0AugQAuQABugACuAAAuAIAuQcCuQoAvgsAuwwAuAsAvQsA
+        uwUAugsKuKSl3//+/fz//fz7/f////79+Xt81AQAtwYAvgsAuwsAuw0AvQsAugsAuwwCugkAuwMBuQIA
+        uBYNuFxcyLG04MDF5IKG1T89xQ4IuwkAuwgAuQsAuwsAuwsAuwsAuwAAPDTBAQC6CwC6CwC7CwC7CwC6
+        CwC7CwC6CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CgG8DAG8CwC6CQG5CQC7DQC7DAG7CQG6DAG8
+        DQC7DQC6CQC+DAC/DQC6CQG6DQC6CwC7DQC6CwC6CwG5CwC6BgG7CgO4lpXZ/v/9///+/Pz8///7////
+        oaLcFxC3AQC3CQG6DQC6DQC7CwC6CwC6DAC6DAG7CgC+CwC4AQC6AAC0OTXEjJLTwsvfc33LFRO5CgC+
+        CgC4CwC6CwC7CwC7AAA8NMEBALoLALoLALsLALsLALoLALsLALoLALsLALsLALsLALsLALsLALsLALsL
+        ALsLALsNALoKALkKAbwJAboNALoNALsLALsLAL0NALoKALkMAbsLALsLALoMA7gLALsLALsKArsLALoL
+        ALsLALoKAbwJAL0JALsAAbNwbs70+vX9///+/f///f39///M0OkyM78CALcKALoLAbkGALwNALsOAL4H
+        ALsIALwMAbsLAL0IALoHAboCALkpJr9ERcUQBr4JAboLALsLALoLALsLALsAADw0wQEAugsAugsAuwsA
+        uwsAugsAuwsAugsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuw0AugkBugwBuw4AugsAuggAuQkAvQsAugsA
+        ugkBugoAvgsAuwwBvA4AvAsAugwAvgkAuw0AuwsAugoAvgsAug0AugsAuwsAugkAvQAAtkA9wtDR7fz/
+        /f///P38/v////Dv+GZozgABtwUAvA0AuwkBugsAuw4AvAsAugsBuQsAuwwBvAkAuwsAuwYBuAYAug0A
+        ugsAugsAvQkAuwsAuwsAuwAAPDTBAQC6CwC6CwC7CwC7CwC6CwC7CwC6CwC7CwC7CwC7CwC7CwC7CwC7
+        CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CQC7CwC7DQC7DAG8CwG5CQG6CgC+DQC7BwC7AQC2
+        AQG5BgC6DAG8CwC6CAC5CQC7CwC9DAG7AgC5FRO5hIXV9vf1/////////f///v/9paPfGxy6AAC4BwG6
+        CQC7DQC6CgC6CAG+CgC5DgC8CAC5DAK6DQC7CQC7CwC7CwC7CwC6CwC7CwC7CwC7AAA8NMEBALoLALoL
+        ALsLALsLALoLALsLALoLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsL
+        ALsMAbwMALkIArsKALoMAbwLAbkLALoBAbkXDrhEQcY+N8IQCbgAALYMAroOALwLALoJALsJAboOALwH
+        ALsAALQ2MMWkpd35//r///////v///7a2+9YVckDALQAALgMAbsMAbwKALkMAbwIALkMAbsLALoLALsJ
+        AboLALsLALsLALoLALsLALsLALsAADw0wQEAugsAugsAuwsAuwsAugsAuwsAugsAuwsAuwsAuwsAuwsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuw0AugwBvAgAvA4Avg0BuQsBuQMAvSYivsnI
+        6v3///j9/MzQ7U5KxwAAuAwBvAsAuwkBugwBvAwBvAsAvQ0AuwIAuAICtEZDyKyt3/r3+f/+/v/+////
+        +5qZ3SAcuwAAtwcBug0BuQoBvAkBugoBvAkBug8AvgsAuwsAuwsAuwsAugsAuwsAuwsAuwAAPDTBAQC6
+        CwC6CwC7CwC7CwC6CwC7CwC6CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7
+        CwC7CwC7DAG8CwC6DAG7CwC6CwC7CQC7AgK0npvZ///////7///+/f/+9/n5RkbIAAC5DAK6DgG7CgC6
+        CwC6BwG6DgG7CwG5CQC9AAC4AgG1NDXDm5re3+Hz/f/7//794uPxWlvLAwG5AAC7CAC6DQC7CQG6DAG8
+        CgC8DgK4CwC7CwC7CwC6CwC7CwC7CwC7AAA8NMEBALoLALoLALsLALsLALoLALsLALoLALsLALsLALsL
+        ALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALoJALsKALoIALjL
+        yOj///79/f39/f39/f3///7JyuQODLkHAL4JALsLAr0IALwKAL4MALoKAbwLALsLALoKAL4BAL0AALgW
+        EL1VVcmsqt7s7/P+/v68veM0MsEGAbgLALoLALsKALoKAroLALsLALsLALsLALoLALsLALsLALsAADw0
+        wQEAugsAugsAuwsAuwsAugsAuwsAugsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsA
+        uwsAuwsAuwsAuwsAvQwBuw0AugkAuwsAuwsAuwQAuLe45P///vv/+v/8///8/vz+/v7+/puj2BMKtQQB
+        uwoAuQwBvAkAuwwBuwkAuwsAuwsBuQsAug4Buw0AuwcBugAAuAEAthkavkdEyYmK2q+v31tgxwcAuw8B
+        uwsAugYAuQsAuwsAuwsAuwsAugsAuwsAuwsAuwAAPDTBAQC6CwC6CwC7CwC7CwC6CwC7CwC6CwC7CwC7
+        CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7DAG8CgK6DQC6CQC7DQC6CgK7
+        AAC4aGfP///+//7+//z9/f39//3+//z+4ujvfX7PDAq4EgW7CQG6CwC7DQC9DQC9CwC9CQC7DQC9BwC7
+        CwC6CwC6DgG7CgK7BwC5BAK6AgC3DQS5HRTCCgG8CQG6CwC6CQG6DQC7CwC7CwC7CwC6CwC7CwC7CwC7
+        AAA8NMEBALoLALoLALsLALsLALoLALsLALoLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsLALsL
+        ALsLALsLALsLALsLALsJAboMALoLALsLALsMAbwLALoLALoIBbWUk9X9//7+/v77/f37/vz+/v7//vrC
+        xuKhqNplbcsBALcJAboLALsJAboJALsOALwIALkNALsKALkLAL0JAboLALsOALwJArcNALsJAboIALgM
+        AL4LALoMAbsLAL0MAbsLALsLALsLALoLALsLALsLALsAADo1wAAAuQ0AuwkBugkAuwwBuwsAug4BuwsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAugsAugsAugsAugsA
+        ugsAugsAugsAugUAtWRizODk7//+//z//f////v8+MXJ5aes2ZCV1FhdyhAJuAkAvQsAuwoAugkBugsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwkBugsAugwBuwsAuwsA
+        uwsAuwAAOzS/AQC6CwC7CwC6DAG7CwC+DgK6CwC9CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7
+        CwC7CwC7CwC7CwC7CwC7CwC7CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CQG5AAC1LCq/eXfRtrnm19bq
+        6+zw0dLsvsLfbnPIOkK7DwO7CwC6CwG5DQC7CwC9CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7
+        CwC7CwC7CwC7CwC7CwC7CwC7DQC6DQC9DQC6CQG6CwC7CwC7AAA6NcABALoLALoHAboJALsNALoLALoM
+        AL4LALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoL
+        ALoLALoLALoLALoLALoLAbkLAr0GAL0AALQFALoWDLomHLwSC7ocG7kyLL8aE7oIAbwLAL0NALoJALsL
+        ALsLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoLALoMALoIAb4LALoP
+        AbsLALsLALsAAD8zwQABugkBugsAvQsAuwkAuwkBugsAugsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwoCugsAugkAuwsAugsA
+        uwcAuwQCugYAvAkAuwUAugkAuw4AvAkAuwcBugoAugwBvAsAuwsAuwsAuwsAuwsAuwsAuwsAuwsAuwsA
+        uwsAuwsAuwsAuwsAuwsAuwsAuwsAuwwBuwkAuwsBuQ0AuwsAuwsAuwAAOzS/AQG5DAG8DQC6DQC9CwC6
+        CwC9CQC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7
+        CwC7CwC7CwC7CwC7CwC7CwC7DgC+CQC7CgK7CwC9CwG5CwC7CgC8DgG7DAC6DgC8CQC7BwC9CwC6DgC8
+        DAG7CwC6CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CgC6DQC7
+        CwC7CwC7CwC7CwC7AAALALsLALsLAL0KArsJAboOALsNALsJAboLALoLALoLALoLALoLALoLALoLALoL
+        ALoLALoLALoLALoLALoLALoLALoLALoLALoLALsLALsLALsLALsLALsLALsLALsLALsLALoLALoLALsN
+        ALsNALoMAbsJAboJALsIAbwJAboMAbwLALoMAbwKALoKALwOALwLALoLALoLALoLALoLALoLALoLALoL
+        ALoLALoLALoLALoLALoLALoLALoLALoLALoMAbsJAboJALsKALgLALsLALsAAAsAuwsAuwgBvAsAugoC
+        ugkBug0BuQsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsA
+        ugsAugsAugsAugsAugsAugsAugsAugsBuQsBuQkAuwkCtwwAuQ4AuwwAuAsAuwsAuwsBuQsBuQ0AugsB
+        uQsBuQsBuQsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAugsAuwsAuwsAuwsAuwsAuwsA
+        uwsAuwsAuwsAuwsAuwsAuwAACwC7CwC7Hx68BwK8DwC8BwG6DQG5CgG8CwC6CwC6CwC6CwC6CwC6CwC6
+        CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CwC6CgK7
+        DQC6DgK6BwG6CQC9CwG5CwG5DAK6DAG8CQG5CQC7DAG8CwC6CwC6CgK7CwC6CwC6CwC6CwC6CwC6CwC6
+        CwC6CwC6CwC6CwC6CwC6CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7CwC7AAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+</value>
+  </data>
+  <metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>386, 17</value>
+  </metadata>
+  <metadata name="timer2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>632, 17</value>
+  </metadata>
+</root>

+ 6 - 0
.svn/pristine/48/484650d8c371d8588e7994f634626e4a36fed5f5.svn-base

@@ -0,0 +1,6 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ProjectView>ProjectFiles</ProjectView>
+    <ReferencePath>F:\MyWork\CXMES\Server\</ReferencePath>
+  </PropertyGroup>
+</Project>

Some files were not shown because too many files changed in this diff