diff --git a/Src/SwqlStudio/CrudOperation.cs b/Src/SwqlStudio/CrudOperation.cs
new file mode 100644
index 000000000..b00fa447c
--- /dev/null
+++ b/Src/SwqlStudio/CrudOperation.cs
@@ -0,0 +1,7 @@
+namespace SwqlStudio
+{
+ public enum CrudOperation
+ {
+ Create, Update, Delete
+ }
+}
\ No newline at end of file
diff --git a/Src/SwqlStudio/CrudTab.Designer.cs b/Src/SwqlStudio/CrudTab.Designer.cs
new file mode 100644
index 000000000..7bed77487
--- /dev/null
+++ b/Src/SwqlStudio/CrudTab.Designer.cs
@@ -0,0 +1,57 @@
+namespace SwqlStudio
+{
+ partial class CrudTab
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Component Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.container = new System.Windows.Forms.Panel();
+ this.SuspendLayout();
+ //
+ // container
+ //
+ this.container.AutoScroll = true;
+ this.container.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.container.Location = new System.Drawing.Point(0, 0);
+ this.container.Name = "container";
+ this.container.Size = new System.Drawing.Size(150, 150);
+ this.container.TabIndex = 0;
+ //
+ // CrudTab
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Controls.Add(this.container);
+ this.Name = "CrudTab";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Panel container;
+ }
+}
diff --git a/Src/SwqlStudio/CrudTab.cs b/Src/SwqlStudio/CrudTab.cs
new file mode 100644
index 000000000..3099a0333
--- /dev/null
+++ b/Src/SwqlStudio/CrudTab.cs
@@ -0,0 +1,169 @@
+using System;
+using System.Collections.Generic;
+using System.Windows.Forms;
+using SolarWinds.InformationService.Contract2;
+using SwqlStudio.Metadata;
+
+namespace SwqlStudio
+{
+ public partial class CrudTab : UserControl, IConnectionTab
+ {
+ private const int ControlsMargin = 3;
+ private readonly CrudOperation _operation;
+
+ private readonly Dictionary _textboxes = new Dictionary();
+ private TextBox _uri;
+ private Entity _entity;
+
+ public CrudTab(CrudOperation operation)
+ {
+ _operation = operation;
+ InitializeComponent();
+ }
+
+ public Entity Entity
+ {
+ get => _entity;
+ set
+ {
+ _entity = value;
+ CreateSubComponents();
+ }
+ }
+
+ ///
+ public IApplicationService ApplicationService { get; set; }
+
+ ///
+ public ConnectionInfo ConnectionInfo { get; set; }
+
+ public event EventHandler CloseItself;
+
+ private void CreateSubComponents()
+ {
+ _textboxes.Clear();
+ container.Controls.Clear();
+ container.SuspendLayout();
+ try
+ {
+ var y = 0;
+
+ bool createProperties = true;
+ switch (_operation)
+ {
+ case CrudOperation.Create:
+ break;
+ case CrudOperation.Delete:
+ createProperties = false;
+ goto case CrudOperation.Update;
+ case CrudOperation.Update:
+ _uri = CreateLabelAndTextbox("SwisUri", ref y);
+ y += ControlsMargin * 3;
+ break;
+ default:
+ throw new ArgumentOutOfRangeException();
+ }
+
+ // for delete, uri is enough
+ if (createProperties)
+ {
+ foreach (var property in _entity.Properties)
+ {
+ var textBox = CreateLabelAndTextbox(property.Name, ref y);
+
+ _textboxes[property] = textBox;
+ }
+ }
+
+ var commit = new Button();
+ container.Controls.Add(commit);
+
+ commit.Text = _operation.ToString();
+ commit.Top = y;
+ commit.AutoSize = true;
+ commit.Click += OnCommit;
+ }
+ finally
+ {
+ container.ResumeLayout();
+ }
+ }
+
+ private void OnCommit(object sender, EventArgs e)
+ {
+ var propertyBag = CreatePropertyBag();
+
+ try
+ {
+ var message = "";
+ switch (_operation)
+ {
+ case CrudOperation.Create:
+ var rv = ConnectionInfo.Proxy.Create(_entity.FullName, propertyBag);
+ message = $"Created: {rv}";
+ break;
+ case CrudOperation.Update:
+ ConnectionInfo.Proxy.Update(_uri.Text, propertyBag);
+ message = "OK";
+ break;
+ case CrudOperation.Delete:
+ ConnectionInfo.Proxy.Delete(_uri.Text);
+ message = "OK";
+ break;
+ default:
+ throw new ArgumentOutOfRangeException();
+ }
+
+ MessageBox.Show(message, "SwqlStudio", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ OnCloseItself();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show($"Failed to {_operation}: {ex.Message}",
+ "SwqlStudio",
+ MessageBoxButtons.OK,
+ MessageBoxIcon.Error);
+ }
+ }
+
+ private PropertyBag CreatePropertyBag()
+ {
+ var rv = new PropertyBag();
+ foreach (var property in _textboxes)
+ {
+ if (!string.IsNullOrEmpty(property.Value.Text))
+ {
+ rv[property.Key.Name] = property.Value.Text;
+ }
+ }
+
+ return rv;
+ }
+
+
+ private TextBox CreateLabelAndTextbox(string name, ref int y)
+ {
+ var label = new Label();
+ container.Controls.Add(label);
+
+ label.Text = name;
+ label.AutoSize = true;
+ label.Top = y;
+ y += label.Height + ControlsMargin;
+
+ var textBox = new TextBox();
+ container.Controls.Add(textBox);
+ textBox.Top = y;
+ textBox.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;
+ textBox.Width = container.Width - ControlsMargin * 2;
+ textBox.Left = ControlsMargin;
+ y += textBox.Height + ControlsMargin;
+ return textBox;
+ }
+
+ protected virtual void OnCloseItself()
+ {
+ CloseItself?.Invoke(this, EventArgs.Empty);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Src/SwqlStudio/CrudTab.resx b/Src/SwqlStudio/CrudTab.resx
new file mode 100644
index 000000000..1af7de150
--- /dev/null
+++ b/Src/SwqlStudio/CrudTab.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Src/SwqlStudio/IApplicationService.cs b/Src/SwqlStudio/IApplicationService.cs
index 54b243c61..6adefb733 100644
--- a/Src/SwqlStudio/IApplicationService.cs
+++ b/Src/SwqlStudio/IApplicationService.cs
@@ -13,5 +13,7 @@ public interface IApplicationService
void OpenActivityMonitor(string title, ConnectionInfo connectionInfo);
void OpenInvokeTab(string title, ConnectionInfo connectionInfo, Verb verb);
+
+ void OpenCrudTab(CrudOperation operation, ConnectionInfo connectionInfo, Entity entity);
}
}
diff --git a/Src/SwqlStudio/MainForm.ApplicationService.cs b/Src/SwqlStudio/MainForm.ApplicationService.cs
index 74f96e98d..f5de1497f 100644
--- a/Src/SwqlStudio/MainForm.ApplicationService.cs
+++ b/Src/SwqlStudio/MainForm.ApplicationService.cs
@@ -38,5 +38,28 @@ public void OpenInvokeTab(string title, ConnectionInfo info, Verb verb)
fileTabs.Controls.Add(tab);
fileTabs.SelectedTab = tab;
}
+
+ ///
+ public void OpenCrudTab(CrudOperation operation, ConnectionInfo info, Entity entity)
+ {
+ var tab = new TabPage(entity.FullName + " - " + operation) { BorderStyle = BorderStyle.None, Padding = new Padding(0) };
+ var crudTab = new CrudTab(operation)
+ {
+ ConnectionInfo = info,
+ Dock = DockStyle.Fill,
+ ApplicationService = this,
+ Entity = entity
+ };
+
+ crudTab.CloseItself += (s, e) =>
+ {
+ fileTabs.TabPages.Remove(tab);
+ tab.Dispose();
+ };
+
+ tab.Controls.Add(crudTab);
+ fileTabs.Controls.Add(tab);
+ fileTabs.SelectedTab = tab;
+ }
}
}
diff --git a/Src/SwqlStudio/MainForm.Designer.cs b/Src/SwqlStudio/MainForm.Designer.cs
index 5e8437430..417ecd6ef 100644
--- a/Src/SwqlStudio/MainForm.Designer.cs
+++ b/Src/SwqlStudio/MainForm.Designer.cs
@@ -410,6 +410,7 @@ private void InitializeComponent()
this.ObjectExplorerImageList.Images.SetKeyName(10, "BaseType");
this.ObjectExplorerImageList.Images.SetKeyName(11, "BaseTypeAbstract");
this.ObjectExplorerImageList.Images.SetKeyName(12, "TableAbstract");
+ this.ObjectExplorerImageList.Images.SetKeyName(13, "TableCrud");
//
// startTimer
//
diff --git a/Src/SwqlStudio/MainForm.resx b/Src/SwqlStudio/MainForm.resx
index 948d6b925..bd4b07fcc 100644
--- a/Src/SwqlStudio/MainForm.resx
+++ b/Src/SwqlStudio/MainForm.resx
@@ -139,200 +139,215 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
- ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAC
- LQAAAk1TRnQBSQFMAgEBDQEAAZwBAQGcAQEBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
- AwABQAMAAQEBAAEgBgABQBIAQP/AAAT/A14B/wPAAf8D9AH/A9YB/wNJKf/AAAT/A7QB/wMnAf8DJwH/
- AycB/wOiKf/AAAT/A/IB/wNAAf8D6AH/A0IB/wPoAf8BJAEKAQAB/wEkAQoBAAH/ASQBCgEAAf8BJAEK
- AQAB/wEkAQoBAAH/ASQBCgEAAf8BJAEKAQAB/wEkAQoBAAn/wAAE/wP5Af8DjQH/A2cB/wNxAf8D9wH/
- Ad8BzgHDAf8B3QHIAbsB/wHbAb8BrQH/AdsBuwGnAf8B2wG7AacB/wHbAbsBpwH/Ac8BtAGjAf8BJAEK
- AQAJ/8AABP8D/QH/A9sB/wMnAf8DyQH/A/sB/wH7AewB4wH/AaQBjQE/Af8BmgGDATMB/wH2AdYBwgH/
- AYgBMgEfAf8BgwEsARkB/wHPAbQBowH/ASQBCgEACf/AAAj/AboBpQGWAf8D/gH/A/4B/wP+Af8B/QH7
- AfkB/wH9AfcB8wH/AfsB7AHjAf8B+gHnAdsB/wH4AeEB0gH/AfcB2wHJAf8B0AG5AasB/wEkAQoBAAn/
- wAAI/wG+AakBmgH/A/4B/wG6AaYBmAH/AbQBoAGRAf8D/gH/AaMBjgE/Af8BmgGDATMB/wH7AewB4wH/
- AYkBMgEgAf8BgwEsARkB/wHRAcEBtgH/ASQBCgEACf/AAAj/AcMBrgGeAf8D/gH/A/4B/wP+Af8D/gH/
- A/4B/wH9AfcB8wH/AfwB8gHsAf8B+wHsAeMB/wH6AecB2wH/AdEBwQG2Af8BJAEKAQAJ/8AACP8ByAGy
- AaMB/wP+Af8BugGmAZgB/wG0AaABkQH/A/4B/wGkAY4BPwH/AZkBhAEzAf8B/QH3AfMB/wGIATIBHwH/
- AYMBLAEZAf8B0QHBAbYB/wEkAQoBAAn/wAAI/wHMAbYBpwH/A/4B/wP+Af8D/gH/A/4B/wP+Af8D/gH/
- Af0B+wH5Af8B/QH3AfMB/wH8AfIB7AH/AfsB7AHjAf8BJAEKAQAJ/8AACP8B6gGqAYsB/wHqAaoBiwH/
- AeoBqgGLAf8B6QGlAYQB/wHnAZcBLwH/AeYBjgEjAf8B4wE+AQsB/wHjATcBAQH/AeIBMwEAAf8B4gEz
- AQAB/wHiATMBAAH/AcgBIwEACf/AAAj/AeoBqgGLAv8BwgGiAf8B/gHAAZ8B/wH9Ab0BmgH/AfsBtQGQ
- Af8B+gGwAYsB/wH4AacBPgH/AfYBogE4Af8B9QGdATIB/wH1AZkBKwH/AfMBlQEmAf8BzQEmAQAJ/8AA
- CP8B6gGqAYsB/wHqAaoBiwH/AeoBqgGLAf8B6gGqAYsB/wHpAaEBQAH/AegBmwE3Af8B5gGOASMB/wHl
- AYcBGQH/AeQBgQEPAf8B5AE8AQcB/wHjATcBAAH/AeIBMwEACf/AAED/wABA//8AaQAB0wHfAesB/wHo
- AfQC/wHoAfQC/wHTAd8B6wH/CAAD9AH/A/QB/wP1Bf8D9gH/A/QB/wP0Df8D/gH/A/YB/wP1Af8D/Qn/
- EAAB7wHmAdwB/wHOAbUBkwH/AbgBkwE/Af8BsgGIAS0B/wG4AZIBPgH/Ac4BtAGQAf8B7gHmAdsB/3gA
- A98B/wHoAfQC/wGYAaQBsAH/AZgBpAGwAf8B6AH0Av8D3wH/BAAD9gH/A10B/wPAAf8D9AH/A9YB/wNI
- Af8D9Qn/A/4B/wP2Af8BbgGuAdsB/wFuAa4B2wH/A/UB/wP9Bf8IAAH9AfsB+gH/AcgBrAGEAf8BoQFO
- AQAB/wGdAUgBAAH/AZwBRgEAAf8BpAFUAQAB/wGdAUcBAAH/AZ0BRwEAAf8BnwFNAQAB/wHHAaoBgQH/
- AfwB+wH5Af8cAAOGAf8DGwH/DAADGwH/A4YB/zQAA98B/wP0Af8BSwGoAeYB/wEbAWkBtgH/ARMBaQG+
- Af8BQwGoAe4B/wHoAfQC/wHTAd8B6wH/A/oB/wO0Af8DJgH/AyYB/wMmAf8DogH/A/oF/wP+Af8D9gH/
- AW4BrgHbAf8BDgFsAccB/wEOAWwBxwH/AW4BrgHbAf8D9QH/A/0B/wQAAfwB+wH5Af8BvAGWAUQB/wGg
- AUsBAAH/AaEBTAEAAf8BngFHAQAB/wHKAaoBVQH/AfYB8QHoAf8BzQGvAV8B/wGeAUcBAAH/AaEBTAEA
- Af8BoQFLAQAB/wG6AZQBQAH/AfwB+gH4Af8UAAOGAf8DAAH/FwAB/wOGAf84AAFLAagB5gH/ARsBaQG2
- Af8BEwFpAb4B/wETAWkBvgH/AZgBpAGwAf8B6AH0Av8D/gH/A/IB/wM/Af8D6AH/A0EB/wPoAf8D/gH/
- A/QB/wP0Af8D9AH/AZQBvQHgAf8BDgFsAccB/wEOAWwBxwH/AQ4BbAHHAf8BbgGuAdsB/wP1Af8EAAHM
- Aa8BiAH/AaUBUAEAAf8BpQFQAQAB/wGlAVEBAAH/AaIBSwEAAf8B5gHWAbsF/wHrAd4ByAH/AaMBTQEA
- Af8BpQFQAQAB/wGlAVABAAH/AaUBUAEAAf8BygGtAYQB/xQAAzUB/wMAAf8XAAH/AzUB/zAAASQBaQGu
- Af8BJAFpAa4B/wE8AWUBnQH/ATwBZQGdAf8BGwFpAbYB/wEbAWkBtgH/AZgBpAGwAf8B6AH0Bv8D+QH/
- A40B/wNmAf8DcAH/A/cF/wP0Af8BDgFsAccB/wEOAWwBxwH/AQ4BbAHHAf8BlAG9AeAB/wEOAWwBxwH/
- AQ4BbAHHAf8BlAG9AeAB/wP2Af8B8gHqAeEB/wGpAVcBAAH/AaoBVQEAAf8BqgFVAQAB/wGqAVUBAAH/
- AacBUAEAAf8B5QHTAbYF/wHqAdwBwwH/AagBUgEAAf8BqgFUAQAB/wGqAVUBAAH/AaoBVQEAAf8BqQFW
- AQAB/wHwAekB3gH/EAADNQH/AwAB/xcAAf8DNQH/HAAD3wH/A98B/wwAASQBaQGuAf8BtQH6Av8BzQH2
- Av8BzQH2Av8BSwGoAeYB/wFLAagB5gH/AegB9AL/AdMB3wHrBf8D/QH/A9sB/wMmAf8DyQH/A/sF/wP0
- Af8BDgFsAccB/wP0Af8D9AH/A/QB/wGUAb0B4AH/AZQBvQHgAf8D9gH/A/4B/wHWAb4BnQH/AbABXAEA
- Af8BrgFZAQAB/wGvAVoBAAH/Aa8BWgEAAf8BrAFVAQAB/wHmAdUBtgX/AesB3AHEAf8BrQFXAQAB/wGv
- AVkBAAH/Aa8BWgEAAf8BrgFaAQAB/wGvAVkBAAH/AdMBuQGWAf8TAAH/A8AB/xQAA8AB/wMAAf8YAAHT
- Ad8B6wH/AegB9AL/AegB9AL/AdMB3wHrAf8IAAE8AWUBnQH/Ac0B9gL/AckB9gL/AWgBpAHRAf8BaAGk
- AdEB/wHJAfYC/wPlAf8EAAj/A/YB/wP0Af8D9AH/A/0F/wP0Af8BDgFsAccB/wP0Af8D9gH/AW4BrgHb
- Af8BbgGuAdsB/wP0Af8D/AX/AcoBqQFcAf8BwAGOARgB/wG1AWEBAAH/AbMBXQEAAf8BtAFfAQAB/wGy
- AVsBAAH/AegB1gG4Bf8B7AHeAcUB/wGyAVwBAAH/AbQBXgEAAf8BtAFfAQAB/wG0AV8BAAH/AbUBXwEA
- Af8BxAGfAUkB/w8AAf8DTgH/HAADTgH/AwAB/xAAA98B/wHoAfQC/wGYAaQBsAH/AZgBpAGwAf8B6AH0
- Av8D3wH/BAABPAFlAZ0B/wHNAfYC/wFoAaQB0QH/ATgBZQGhAf8BOAFlAaEB/wFoAaQB0QH/A/QB/wPf
- Bf8D/gH/A/YB/wFuAa4B2wH/AW4BrgHbAf8D9QH/A/0B/wP0Af8BDgFsAccB/wP0Af8BbgGuAdsB/wEO
- AWwBxwH/AQ4BbAHHAf8BbgGuAdsB/wP1Af8D/QH/AckBpgFTAf8ByQGbASoB/wHFAZQBIwH/Ab4BiQEO
- Af8BugGAAQAB/wG3AV8BAAH/AesB2QG7Bf8B7wHhAcgB/wG3AWEBAAH/AbkBYwEAAf8BuQFjAQAB/wG5
- AWMBAAH/AboBYwEAAf8BwwGaAT0B/xAAAxsB/wPAAf8UAAPAAf8DGwH/EAAB0wHfAesB/wHoAfQC/wFD
- AagB7gH/ARMBaQG+Af8BEwFpAb4B/wFDAagB7gH/Ac0B9gL/Ac0B9gL/ASQBaQGuAf8BtQH6Av8BQwGo
- Ae4B/wETAWkBvgH/AQsBaQHHAf8BCwFpAccB/wGMAaQBvQH/AdwB9AL/A/4B/wP2Af8BbgGuAdsB/wEO
- AWwBxwH/AQ4BbAHHAf8BbgGuAdsB/wP0Af8D9AH/AQ4BbAHHAf8D9AH/AZQBvQHgAf8BDgFsAccB/wEO
- AWwBxwH/AQ4BbAHHAf8BbgGuAdsB/wP1Af8B0AGvAYEB/wHOAaABLwH/AcsBnAEuAf8BzAGcAS4B/wHK
- AZkBJgH/AcMBjQESAf8B5QHUAbUF/wHnAdgBvAH/Ab4BgwEAAf8BwAGHAQUB/wHBAYgBCAH/AcIBigEL
- Af8BxgGQAREB/wHMAagBVgH/EAADNQH/AxsB/xQAAxsB/wM1Af8QAAHoAfQC/wGYAaQBsAH/ARMBaQG+
- Af8BEwFpAb4B/wETAWkBvgH/ARMBaQG+Af8BPAFlAZ0B/wE8AWUBnQH/ASQBaQGuAf8BJAFpAa4B/wET
- AWkBvgH/ARMBaQG+Af8BCwFpAccB/wELAWkBxwH/AYwBpAG9Af8B3AH0Av8D9gH/AW4BrgHbAf8BDgFs
- AccB/wEOAWwBxwH/AQ4BbAHHAf8BDgFsAccB/wFuAa4B2wH/AQ4BbAHHAf8BDgFsAccB/wEOAWwBxwH/
- AQ4BbAHHAf8BlAG9AeAB/wEOAWwBxwH/AQ4BbAHHAf8BlAG9AeAB/wP2Af8B3QHHAasB/wHTAaYBOAH/
- AdABogExAf8B0AGhATIB/wHQAaEBMgH/AdABnwEtAf8BywGkAUIB/wHUAcMBpQH/AcoBpAFCAf8BzQGb
- ASUB/wHOAZwBKAH/Ac4BnAEoAf8BzgGcAScB/wHPAZ0BJwH/AdoBwwGiAf8QAAM1Af8DGwH/FAADGwH/
- AzUB/xAAAegB9AL/AZgBpAGwAf8BEwFpAb4B/wETAWkBvgH/AQsBaQHHAf8BCwFpAccB/wETAWkBvgH/
- AUMBqAHuAf8B6gH2Av8B6gH2Av8D9gH/A/YB/wGMAaQBvQH/AYwBpAG9Af8D9AH/A98B/wP3Af8BlAG9
- AeAB/wEOAWwBxwH/AQ4BbAHHAf8BDgFsAccB/wEOAWwBxwH/AQ4BbAHHAf8BbgGuAdsB/wP0Af8D9AH/
- A/QB/wP0Af8BlAG9AeAB/wGUAb0B4AH/A/YB/wP+Af8B9QHvAecB/wHRAagBRgH/AdgBqQE4Af8B1QGm
- ATgB/wHVAaYBNgH/AdQBowExAf8B5QHHAZEB/wHzAeoB2AH/AecBywGZAf8B0wGhAS0B/wHTAaIBMAH/
- AdMBoQEuAf8B1QGjAS0B/wHNAZ0BMQH/AfQB7QHkAf8QAAOGAf8DGwH/FAADGwH/A4YB/xAAAdMB3wHr
- Af8B6AH0Av8BQwGoAe4B/wETAWkBvgH/AQsBaQHHAf8BCwFpAccB/wETAWkBvgH/ARMBaQG+Af8BmAGk
- AbAB/wHoAfQC/wPfAf8D3wH/AdwB9AL/AdwB9AL/A98B/wQAA/4B/wP3Af8BlAG9AeAB/wEOAWwBxwH/
- AQ4BbAHHAf8BDgFsAccB/wEOAWwBxwH/AQ4BbAHHAf8BbgGuAdsB/wP1Af8D/QH/A/4B/wP3Af8D9gH/
- A/4F/wQAAd0ByAGqAf8B3QGyAUcB/wHaAasBOwH/AdkBqwE8Af8B1wGnATUB/wHxAeYB0wX/AfUB7gHh
- Af8B1wGmATUB/wHXAacBNQH/AdgBpwEzAf8B2QGqATgB/wHbAcEBngH/GAADhgH/AxsB/wwAAxsB/wOG
- Af8YAAPfAf8B6AH0Av8BmAGkAbAB/wETAWkBvgH/ARMBaQG+Af8BEwFpAb4B/wETAWkBvgH/AZgBpAGw
- Af8B6AH0Av8D3wH/BAAD3wH/A98B/wgABP8D/gH/A/cB/wGUAb0B4AH/AQ4BbAHHAf8BDgFsAccB/wEO
- AWwBxwH/AQ4BbAHHAf8BlAG9AeAB/wP2Af8D/gX/A/4B/wP+Cf8EAAH+Av0B/wHZAb8BmgH/AeABtgFN
- Af8B3wGxAUAB/wHcAa0BOwH/AdcBtQFeAf8B4gHVAb4B/wHXAbcBgAH/AdsBqgE3Af8B3gGuAToB/wHe
- AbEBQgH/AdYBuAGNAf8B/gH9AfwB/1AAAdMB3wHrAf8B6AH0Av8BQwGoAe4B/wETAWkBvgH/ARMBaQG+
- Af8BQwGoAe4B/wHoAfQC/wHTAd8B6wH/GAAI/wP+Af8D9wH/AZQBvQHgAf8BDgFsAccB/wEOAWwBxwH/
- AZQBvQHgAf8D9gH/A/4Z/wwAAd8BywGxAf8B3AG4AV4B/wHjAbgBTwH/AeMBtAFDAf8B3QGuATsB/wHh
- AbIBPwH/AeIBtgFJAf8B2wGzAVUB/wHeAcgBqgH/Av4B/QH/WAAD3wH/AegB9AL/AZgBpAGwAf8BmAGk
- AbAB/wHoAfQC/wPfAf8cAAz/A/4B/wP3Af8BlAG9AeAB/wGUAb0B4AH/A/YB/wP+Hf8QAAH2AfEB6wH/
- AeQB1AG/Af8B3gHFAaMB/wHeAcQBnAH/Ad4BxAGhAf8B5AHTAbwB/wH1Ae8B6QH/ZAAB0wHfAesB/wHo
- AfQC/wHoAfQC/wHTAd8B6wH/IAAQ/wP+Af8D9wH/A/YB/wP+If9ZAAErAbkB/wEAAR0BTAH/AQ8BGAEu
- Af/1AAFMAccB/wEWAc0B/AH/AQgBLQGHAf+0AAM7AWUBAAEiAQAB/wM6AWA1AAFMAccB/wEPAaAB0gH/
- AQsBIwFDAf8cAAMBAQIDAAEBGwABAQwAASIBIQEiATEDAAEBXAADPgFqAR0BpwEPAf8BAAEmAQAB/wEA
- ASIBAAH/AzYBWDEAAUwBxwH/ARgB0QH8Af8BCAEtAYcB/zMAAQEDAAEBEAAB7AHSAewB/wFDAQABQgH/
- AeYBzAHmAf8DAgEDAxIBGRAAAUABSgFMAf8BNgE+AUEB/wEtATIBNQH/ASMBJgEpAf8CGQEeAf8BEAEO
- ARQB/wEHAQMBCQH/AgABAQH/AwAB/xwAAz4BagEdAacBDwH/AToBuwEuAf8BAAEqAQAB/wEAAScBAAH/
- AQABIgEAAf8DNQFXLQABTAHHAf8BEQGhAdEB/wELASMBQwH/PwABAQQAAe0B2AHtAf8BqQEhAagB/wGA
- AQEBUAH/AUYBAAFGAf8B6wHRAesB/xQAAUkBggGDAf8BlwHbAfUB/wEsAakBygH/ASwBqQHKAf8BKwGn
- AckB/wEjAZ8BwgH/ARoBlgG5Af8BEgGNAbAB/wMAAf8cAAEcAaQBDgH/AToBuwEuAf8BOgG7AS4B/wEA
- ASkBAAH/AQABKgEAAf8BAAEnAQAB/wEAASIBAAH/AzABTCkAAUwBxwH/ASIB4gH9Af8BCQEpAYAB/yMA
- AQEDAAEBAwABAQMAAQEDAAEBAwABAQMAAQEEAAHoAdEB6AH/AaoBIQGpAf8BzAE4AcsB/wFPAQABTwH/
- AZYBCQGVAf8BTAEAAUsB/wHwAdUB8AH/EAABUQKMAf8BoAHgAfcB/wFCAc0B8QH/ATUBxwHuAf8BKQHB
- AesB/wEeAbwB6AH/ARMBtwHmAf8BGAGSAbYB/wEFAQIBBwH/HAABHQGnAQ8B/wE6AbsBLgH/AToBuwEu
- Af8BqgHUAaIB/wEZAaABDAH/AQABKgEAAf8BAAEnAQAB/wEAASEBAAH/KQABTAHHAf8BKQHXAfwB/wEJ
- ASkBgAH/JAABqwHwAfcB/wGrAeIB5QH/AawBzgHMAf8BrQG7AbUB/wGuAacBnAH/BAAB5AHKAeQB/wGp
- ASEBqAH/AdMBPAHSAf8B1AE/AdMB/wFQAQEBTwH/AZ8BDQGfAf8BjgEGAY0B/wFOAQABTQH/EAABhQKU
- Af8BpwHjAfgB/wFNAdMB9AH/AUIBzgHxAf8BNgHIAe4B/wEpAcIB6wH/AR4BvAHoAf8BHQGZAbwB/wEN
- AQoBDwH/GAADAgEDAR8BqwERAf8BOgG7AS4B/wGqAdQBogH/AbcB2gGwAf8BqgHUAaIB/wESAZMBBgH/
- AQABKgEAAf8BAAEiAQAB/yUAATEBkAH/AQABTAHHAf8BPwHeAfwB/wEJASkBgAH/AQABHwFLAf84AAGq
- ASMBqQH/AdIBOwHRAf8B1QFAAdUB/wG9AUEBvAH/Ad4BmAHdAf8BjwEXAY4B/wGdAQ0BnAH/AU8BAAFP
- Af8QAAGMApsB/wGuAeYB+gH/AYYB2AH2Af8BTQHUAfQB/wFCAc0B8QH/ATYBxwHuAf8BKQHCAesB/wEk
- AaABwQH/AhQBGQH/GAADBAEFATQBuAEnAf8BtAHZAa0B/wHFAeIBwAH/AbcB2gGwAf8BtwHaAbAB/wGq
- AdQBogH/AQwBiAEBAf8BAAEiAQAB/yEAAUABoAH/AQIBhwHHAf8BLAHAAfAB/wEhAcsB/gH/ASIBswHd
- Af8BDQEeATcB/wEAAR8BSwH/GAABqwHwAfcB/wGrAeUB6QH/AawC1QH/AawBxAHBAf8BrQG1AawB/wGu
- AaQBmAH/BAABqAEgAacB/wHSAT4B0QH/AbwBQAG7Af8B7wGlAe4B/wH7AZ8B+gH/Ae8BnQHuAf8BlwEj
- AZYB/wFNAQABTQH/EAABkQGiAaEB/wGyAegB/AH/AaAB4gH6Af8BhgHYAfYB/wFOAdMB8wH/AUIBzgHx
- Af8BNQHIAe4B/wEoAaUBxwH/AR0BHgEjAf8YAAMCAQMDRAF6AY4BxgGEAf8BuQHcAbMB/wHDAeEBvgH/
- AcMB4QG+Af8BtwHaAbAB/wGqAdQBogH/AQMBOAEAAf8cAAEJAYABsQH/AQIBhwHIAf8BIwG6AfcB/wEl
- AcIB+QH/ARsBtwH5Af8BOQHWAfsB/wEWAaYB6AH/AQ0BHQE1Af8BAAEiAYMB/zAAAacBIQGmAf8BvAFA
- AbsB/wHvAaUB7gH/AfsBmwH6Af8B+wGYAfoB/wH7AZkB+gH/AecBmAHmAf8BkQEfAZAB/xAAAZQBpgGl
- Af8BvQHsAfwB/wGlAeUB+wH/AZ8B4gH6Af8BhgHYAfYB/wFOAdQB9AH/AUIBzQHxAf8BLAGpAcoB/wEl
- ASkBLAH/IAADRgF+AZABxwGGAf8BvgHeAbgB/wHDAeEBvgH/AbMB2QGsAf8BkAHHAYYB/wM9AWkcAAEG
- AUwBuAH/ASUBwQH5Af8BIQG3AfkB/wGTAe4B/gH/AY8B7AH+Af8BIwG0AfMB/wGNAeMB/gH/ASABugHi
- Af8BBQEfATwB/xwAAasB8AH3Af8BrALVAf8BrgG0AawB/wGuAZkBigH/A/0B/wHPAYgBzwH/AeIBrwHi
- Af8B+wGrAfoB/wH7AZgB+gH/AfsBmAH6Af8B6gGQAekB/wHPAYgBzwH/AfQB5gH0Af8QAAGUAaYBpQH/
- Ab0B7AH8Af8BvQHsAfwB/wGyAegB/AH/Aa4B5gH6Af8BpwHkAfkB/wGgAeAB9wH/AZcB2wH1Af8BLgEz
- ATcB/yQAA0cBgQGUAckBigH/Ab0B3gG3Af8BjgHGAYQB/wMwAUsgAAEKAYMBuwH/ASoBxgH5Af8BOgGK
- AawB/wE6AYoBrAH/AToBigGsAf8BOgGKAawB/wE6AYoBrAH/ATMB1QH6Af8BCAEeATkB/zAAAfAB1AHw
- Af8BzwGIAc8B/wHuAb4B7gH/AfsBrgH6Af8B7AGRAesB/wHPAYgBzwH/AfMB4AHyAf8UAAGUAaYBpQH/
- AZQBpgGlAf8BkwKlAf8BjwGfAZ4B/wGIApcB/wGBAo4B/wFKAoQB/wFAAUoBTAH/ATcBPgFAAf8oAAM8
- AWYBlAHJAYoB/wMlATckAAEKAYMBvAH/AS0B0gH6Af8BGwE1AYQB/wwAAR4BkAHBAf8BJAG7AeEB/wEK
- ARwBNgH/NAAB8gHbAfIB/wHPAYgBzwH/AeMBrAHjAf8BzwGIAc8B/wHzAeMB8wH/YAADAQECBAADAQEC
- KAABEwGIAcEB/wEXAZ0B0AH/AUsB4wH6Af8BGwGFAZ4B/wEiATUBhwH/ASIBRwGcAf8BIwG/AfQB/wEZ
- AYwBqgH/AQIBKQFLAf84AAHyAdsB8gH/Ac8BiAHPAf8B8AHjAfAB/5gAARoBlAHGAf8BFQGKAcEB/wEX
- AZoBzQH/AT8B1QH1Af8BQgHpAf4B/wE+AdQB8wH/ARsBkgGyAf8BCAE1AYwB/wEAAUEBogH/PAAB/gH7
- Af4B/6AAARoBlAHGAf8BFgGNAcMB/wERAYsBugH/AREBiwG6Af8BDgGIAbcB/wEPAUQBoAH/AQoBggGy
- Af//AKkAAzYBWAGZAgAB/wMzAVPwAAM4AV0B1wGaARsB/wGZAgAB/wGZAgAB/wMvAUosAAMeASsDVAGu
- AVkCZAHsAR4BgwGWAf8BCwE3AY0B/wEAAS4BjAH/AU4CXQHwA1YBswMlATeYAAM6AWEB1wGaARsB/wHY
- AZsBHAH/AZkCAAH/AZkCAAH/AZkCAAH/Ay8BSigAAVsCXgHQARIBsAHRAf8BhAHVAegB/wGhAesB9gH/
- ATQB5AL/AQABvgHzAf8BAAGfAd4B/wEAAYsBvgH/AVsCXgHZVAABtwGiAZMB/wEkAQoBAAH/ASQBCgEA
- Af8BJAEKAQAB/wEkAQoBAAH/ASQBCgEAAf8BJAEKAQAB/wEkAQoBAAH/ASQBCgEAAf8BJAEKAQAB/wEk
- AQoBAAH/ASQBCgEAAf8UAAHYAZsBHQH/AdgBmwEcAf8B2AGbARwB/wGZAgAB/wGZAgAB/wGZAgAB/wGZ
- AgAB/wMvAUokAAEUAY8BqgH/AQ4B1wL/AZAB6gH6Af8BoQHrAfYB/wEyAdkB9AH/AQABvAHyAf8BAAGn
- AegB/wEAAZwB2gH/AQABJAGEAf8UAAMxAU0CUgFRAaEBXwJYAeMBXwJYAeMBUgJRAaEBMQIwAU0EAAMx
- AU0CUgFRAaEBXwJYAeMBXwJYAeMBUgJRAaEBMQIwAU0MAAG3AaIBkwH/Af0B+wH5Af8B4QHcAdgB/wHg
- AdcB0gH/Ad8BzgHDAf8B3QHIAbsB/wHbAb8BrQH/AdsBuwGnAf8B2wG7AacB/wHbAbsBpwH/Ac8BtAGj
- Af8BJAEKAQAB/xQAAdgBmwEcAf8B2AGbARwB/wHpAbQBPQH/AfwB1gGvAf8BtQEkAQAB/wGZAgAB/wGZ
- AgAB/wGZAgAB/wMvAUogAAEVAZEBrgH/AQ0B0gH6Af8BjQHkAfYB/wGhAesB9gH/ATEB1wHzAf8BAAG5
- Ae8B/wEAAacB6AH/AQABnAHaAf8BAAEmAYYB/xAAAzUBVQNkAecBzwG4AakB/wHrAdYByAH/AeUBywG7
- Af8BswGVAUAB/wFkAlwB5wNLAY4DZAHnAc8BuAGpAf8B6wHWAcgB/wHlAcsBuwH/AbMBlQFAAf8BZAJc
- AecBNQI0AVUIAAG3AaIBkwH/A/4B/wG6AaYBmAH/AbUBoAGRAf8B+wHsAeMB/wGkAY0BPwH/AZoBgwEz
- Af8B9gHWAcIB/wGIATIBHwH/AYMBLAEZAf8BzwG0AaMB/wEkAQoBAAH/FAAB2AGbARwB/wHqAbcBggH/
- AfsB2AGyAf8B/gHRAaMB/wH7AdgBsgH/Aa8BGAEAAf8BmQIAAf8BmQIAAf8BmQIAAf8DKgFBHAABGAGV
- AbAB/wEPAdIB+gH/AY0B5AH0Af8BoQHrAfYB/wExAdcB8gH/AQABuQHuAf8BAAGnAegB/wEAAZwB2gH/
- AQABKQGIAf8QAANVAbIB5gHWAcsB/wNZAcICYAFcAdQDYAHUAUwBKgEhAfsBCAIAAf8BCAIAAf8BCAIA
- Af8BYQJYAeYCYAFcAdQDYAHUA1kBwgG5AZwBiAH/A1UBsggAAboBpQGWAf8D/gH/A/4B/wP+Af8B/QH7
- AfkB/wH9AfcB8wH/AfsB7AHjAf8B+gHnAdsB/wH4AeEB0gH/AfcB2wHJAf8B0AG5AasB/wEkAQoBAAH/
- FAAB5wGzAT0B/wHxAcMBkQH/Af4BzwGdAv8BzQGZAf8B/gHQAZ8B/wH7AdgBsgH/AakBDwEAAf8BmQIA
- Af8BmQIAAf8BmQIAAf8DBAEFGAABGgGZAbUB/wEQAdEB+wH/AY4B5AH1Af8BoQHrAfYB/wExAdcB8gH/
- AQABuQHuAf8BAAGnAegB/wEAAZwB2gH/AQABLAGKAf8QAANlAfQE/wNXAd8DHQEqA1wBzQX/Af4B9wL/
- AfEB5gH/AfoB4wHUAf8B8wHXAccB/wNKAY0DHQEqA1wB3wHvAdYBxwH/AWQCUgH0CAABvgGpAZoB/wP+
- Af8BugGmAZgB/wG0AaABkQH/A/4B/wGjAY4BPwH/AZoBgwEzAf8B+wHsAeMB/wGJATIBIAH/AYMBLAEZ
- Af8B0QHBAbYB/wEkAQoBAAH/FAADRQF8AeUBsgE8Af8B9AHAAYsC/wHNAZkC/wHNAZkB/wH+AdABoQH/
- AfsB2AGyAf8BqQEPAQAB/wGZAgAB/wGZAgAB/xwAAR0BmwG3Af8BEAHQAfkB/wGNAeMB9QH/AaEB6wH2
- Af8BMwHZAfIB/wEAAbkB7gH/AQABpwHoAf8BAAGcAdoB/wEAAS4BjQH/EAADVQGyAfIB5gHeAf8DWQHC
- A1wB1AFgAlwB1ANhAeIB0wG1AaIB/wFPAk0B+gHaAcABrwH/A18B8wNbAdYBYAJcAdQDWQHCAcsBsQGh
- Af8DVQGyCAABwwGuAZ4B/wP+Af8D/gH/A/4B/wP+Af8D/gH/Af0B9wHzAf8B/AHyAewB/wH7AewB4wH/
- AfoB5wHbAf8B0QHBAbYB/wEkAQoBAAH/GAADRgF/AeQBsAE6Af8B9gHEAZAC/wHNAZkC/wHNAZkB/wH+
- AdABoQH/AfsB2AGyAf8BqQEPAQAB/wGZAgAB/xwAAR8BngG6Af8BDgHQAfkB/wGNAeMB9AH/AaEB6wH2
- Af8BMAHXAfIB/wEAAbcB7gH/AQABpwHoAf8BAAGcAdoB/wEAATABjwH/EAADNQFVA2QB5wHtAeEB1wP/
- Af0C/wH3AfEB/wHYAcQBtwH/A2QB5wNLAY4DZAHnAe0B4QHXA/8B/QL/AfcB8QH/AdgBxAG3Af8DZAHn
- AzUBVQgAAcgBsgGjAf8D/gH/AboBpgGYAf8BtAGgAZEB/wP+Af8BpAGOAT8B/wGZAYQBMwH/Af0B9wHz
- Af8BiAEyAR8B/wGDASwBGQH/AdEBwQG2Af8BJAEKAQAB/xwAA0kBhwHjAa8BOQH/AfYBxAGQAv8BzQGZ
- Av8BzQGZAf8B/gHQAaEB/wHyAckBnQH/AbABGwEAAf8cAAEgAaIBvAH/AQgBzgH3Af8BiwHjAfQB/wGh
- AesB9gH/AS8B1gHyAf8BAAG3Ae4B/wEAAacB6AH/AQABnAHaAf8BAAExAZIB/xQAAzEBTQNSAaEDXwHj
- A18B4wNSAaEDMQFNBAADMQFNA1IBoQNfAeMDXwHjA1IBoQMxAU0MAAHMAbYBpwH/A/4B/wP+Af8D/gH/
- A/4B/wP+Af8D/gH/Af0B+wH5Af8B/QH3AfMB/wH8AfIB7AH/AfsB7AHjAf8BJAEKAQAB/yAAA0kBhwHj
- Aa8BOQH/AfYBxAGQAv8BzQGZAf8B8wHCAY4B/wHjAbABOgH/A0MBeBwAASwBqQHAAf8BFwHUAfoB/wGc
- AewB+gH/AasB7wH6Af8BpgHtAfgB/wGUAecB+AH/ATIB2QH2Af8BAAG9AekB/wEEAT0BlwH/VAAB6gGq
- AYsB/wHqAaoBiwH/AeoBqgGLAf8B6QGlAYQB/wHnAZcBLwH/AeYBjgEjAf8B4wE+AQsB/wHjATcBAQH/
- AeIBMwEAAf8B4gEzAQAB/wHiATMBAAH/AcgBIwEAAf8kAANJAYcB4wGvATkB/wHuAb0BigH/AeMBsAE6
- Af8DNAFUIAABgAGzAcUB/wGbAd4B6wH/AcUB+QH9Af8BxQH5Af0B/wHFAfkB/QH/AcUB+QH9Af8BxQH5
- Af0B/wGgAd8B6gH/AScBkQGiAf9UAAHqAaoBiwL/AcIBogH/Af4BwAGfAf8B/QG9AZoB/wH7AbUBkAH/
- AfoBsAGLAf8B+AGnAT4B/wH2AaIBOAH/AfUBnQEyAf8B9QGZASsB/wHzAZUBJgH/Ac0BJgEAAf8oAANA
- AW4B5QGyAT4B/wMmATgkAAM7AWMDYAHWATcBqwG6Af8BMQGjAbMB/wEtAZ0BrwH/ASwBmwGuAf8BMAGi
- AbQB/wNeAdkDQAFvVAAB6gGqAYsB/wHqAaoBiwH/AeoBqgGLAf8B6gGqAYsB/wHpAaEBQAH/AegBmwE3
- Af8B5gGOASMB/wHlAYcBGQH/AeQBgQEPAf8B5AE8AQcB/wHjATcBAAH/AeIBMwEAAf//AP8ACgABQgFN
- AT4HAAE+AwABKAMAAUADAAFAAwABAQEAAQEGAAECFgAD/4EABf8BwwIAAfABHwP/AYECAAHAAQcB8wGf
- Af8DAAGAAQMB5wHPAf8BwAIAAYABAwHnAc8B/wQAAQEB5wHPAecEAAEBAecBzwHDAQEDAAEBAc8B5wGB
- BAABAQHnAc8FAAEBAecBzwUAAQEB5wHPBQABAQHnAc8BAAEBAgABgAEDAfMBnwGAARMCAAGAAQMC/wHA
- AT8CAAHgAQcC/wHgAX8CAAHwAR8C/wHwAf8CAAL/AfwBfwb/AfwBfwT/AfwBfwH8AX8BPwFzAv8B+AE/
- AfwBfwH5AeAB8AEHAfABHwH8AX8B/wFBAfABBwHwAQ8B/AF/AoAB8AEHAfABDwH8AX8BwQEAAfABBwHg
- AQ8B+AE/Af8BAAHwAQcB4AEPAfABHwGBAQAB8AEHAeABDwHgAQ8B/wEAAfABBwH4AQ8B4AEPAeABAAHw
- AQcB/AEfAeABDwH/AQEB8AEHAf4BPwHjAY8B/wGDAv8B/QF/AeABDwH/AccE/wHgAQ8B/wHvBP8B8AEf
- DP8B+Af/AfABfwHwAQcE/wHgAT8B8AEHAv8BwAEDAeABHwHwAQcBwAGBAcABAwHgAQ8B8AEHAYABAAHA
- AQMB4AEHAfABBwGAAQABwAEDAeABAwHwAQcBgAEAAcABAwHgAQcB8AEHAYABAAHAAQMB8AEHAfABBwGA
- AQABwAEDAfgBBwHwAQcBwAGBAcABAwH8AQcB8AEHAv8BwAEDAf4BDwHwAQcC/wHAAQMB/wEfAfABBwL/
- AcABAxD/Cw==
+ ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACm
+ MAAAAk1TRnQBSQFMAgEBDgEAAaQBAQGkAQEBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
+ AwABQAMAAQEBAAEgBgABQBIAgP+AAAT/A10B/wPAAf8D9AH/A9YB/wNITf8DAAH/AwAB/wFWAXkBuRH/
+ gAAE/wO0Af8DJgH/AyYB/wMmAf8Dok3/AwAB/wMAAf8BVgF5AbkB/wMADf+AAAT/A/IB/wM/Af8D6AH/
+ A0EB/wPoAf8BIwEJAQAB/wEjAQkBAAH/ASMBCQEAAf8BIwEJAQAB/wEjAQkBAAH/ASMBCQEAAf8BIwEJ
+ AQAB/wEjAQkBABH/AbcBogGTAf8BYgFIATQB/wFiAUgBNAH/AWIBSAE0Af8BYgFIATQJ/wMAAf8BVgF5
+ AbkB/wFWAXkBuQH/AWIBSAE0Af8DAAn/gAAE/wP5Af8DjQH/A2YB/wNwAf8D9wH/Ad8BzgHDAf8B3QHI
+ AbsB/wHbAb8BrQH/AdsBuwGnAf8B2wG7AacB/wHbAbsBpwH/Ac8BtAGjAf8BIwEJAQAR/wG3AaIBkwH/
+ Af0B+wH5Af8B4QHcAdgB/wHgAdcB0gH/Ad8BzgHDAf8B3QHIAbsJ/wMAAf8DfgH/AWIBSAE0Af8BYgFI
+ ATQB/wMABf+AAAT/A/0B/wPbAf8DJgH/A8kB/wP7Af8B+wHsAeMB/wGkAY0BPgH/AZoBgwEyAf8B9gHW
+ AcIB/wGIATEBHgH/AYMBKwEYAf8BzwG0AaMB/wEjAQkBABH/AbcBogGTAf8D/gH/AboBpgGYAf8BtQGg
+ AZEB/wH7AewB4wH/AaQBjQF9Af8BmgGDAXEJ/wMAAf8DfgH/AWIBSAE0Af8BYgFIATQB/wMAAf+AAAj/
+ AboBpQGWAf8D/gH/A/4B/wP+Af8B/QH7AfkB/wH9AfcB8wH/AfsB7AHjAf8B+gHnAdsB/wH4AeEB0gH/
+ AfcB2wHJAf8B0AG5AasB/wEjAQkBABH/AboBpQGWAf8D/gH/A/4B/wP+Af8B/QH7AfkB/wH9AfcB8wH/
+ AfsB7AHjAf8B+gHnAdsJ/wMAAf8DfgH/AWIBSAE0Af8BYgFIATQB/4AACP8BvgGpAZoB/wP+Af8BugGm
+ AZgB/wG0AaABkQH/A/4B/wGjAY4BPgH/AZoBgwEyAf8B+wHsAeMB/wGJATEBHwH/AYMBKwEYAf8B0QHB
+ AbYB/wEjAQkBABH/Ab4BqQGaAf8D/gH/AboBpgGYAf8BtAGgAZEB/wP+Af8BowGOAX0B/wGaAYMBcQH/
+ AfsB7AHjAf8BiQFwAV4J/wMAAf8DfgH/AWIBSAE0Af+AAAj/AcMBrgGeAf8D/gH/A/4B/wP+Af8D/gH/
+ A/4B/wH9AfcB8wH/AfwB8gHsAf8B+wHsAeMB/wH6AecB2wH/AdEBwQG2Af8BIwEJAQAR/wHDAa4BngH/
+ A/4B/wP+Af8D/gH/A/4B/wP+Af8B/QH3AfMB/wH8AfIB7AH/AfsB7AHjAf8B+gHnAdsJ/wMAAf8DfgH/
+ gAAI/wHIAbIBowH/A/4B/wG6AaYBmAH/AbQBoAGRAf8D/gH/AaQBjgE+Af8BmQGEATIB/wH9AfcB8wH/
+ AYgBMQEeAf8BgwErARgB/wHRAcEBtgH/ASMBCQEAEf8ByAGyAaMB/wP+Af8BugGmAZgB/wG0AaABkQH/
+ A/4B/wGkAY4BfQH/AZkBhAFxAf8B/QH3AfMB/wGIAXABXQH/AYMBagFXAf8B0QHBAbYJ/wFiAUgBNAH/
+ gAAI/wHMAbYBpwH/A/4B/wP+Af8D/gH/A/4B/wP+Af8D/gH/Af0B+wH5Af8B/QH3AfMB/wH8AfIB7AH/
+ AfsB7AHjAf8BIwEJAQAR/wHMAbYBpwH/A/4B/wP+Af8D/gH/A/4B/wP+Af8D/gH/Af0B+wH5Af8B/QH3
+ AfMB/wH8AfIB7AH/AfsB7AHjAf8BYgFIATQJ/4AACP8B6gGqAYsB/wHqAaoBiwH/AeoBqgGLAf8B6QGl
+ AYQB/wHnAZcBLgH/AeYBjgEiAf8B4wE9AQoB/wHjATYBAAH/AeIBMgEAAf8B4gEyAQAB/wHiATIBAAH/
+ AcgBIgEAEf8B6gGqAYsB/wHqAaoBiwH/AeoBqgGLAf8B6QGlAYQB/wHnAZcBbQH/AeYBjgFhAf8B4wF8
+ AUkB/wHjAXUBPwH/AeIBcQE4Af8B4gFxATgB/wHiAXEBOAH/AcgBYQEuCf+AAAj/AeoBqgGLAv8BwgGi
+ Af8B/gHAAZ8B/wH9Ab0BmgH/AfsBtQGQAf8B+gGwAYsB/wH4AacBPQH/AfYBogE3Af8B9QGdATEB/wH1
+ AZkBKgH/AfMBlQElAf8BzQElAQAR/wHqAaoBiwL/AcIBogH/Af4BwAGfAf8B/QG9AZoB/wH7AbUBkAH/
+ AfoBsAGLAf8B+AGnAXwB/wH2AaIBdgH/AfUBnQFwAf8B9QGZAWkB/wHzAZUBZAH/Ac0BZAEwCf+AAAj/
+ AeoBqgGLAf8B6gGqAYsB/wHqAaoBiwH/AeoBqgGLAf8B6QGhAT8B/wHoAZsBNgH/AeYBjgEiAf8B5QGH
+ ARgB/wHkAYEBDgH/AeQBOwEGAf8B4wE2AQAB/wHiATIBABH/AeoBqgGLAf8B6gGqAYsB/wHqAaoBiwH/
+ AeoBqgGLAf8B6QGhAX4B/wHoAZsBdQH/AeYBjgFhAf8B5QGHAVcB/wHkAYEBTQH/AeQBegFFAf8B4wF1
+ AT0B/wHiAXEBOAn/gACA/4AAgP//ACkAAdMB3wHrAf8B6AH0Av8B6AH0Av8B0wHfAesB/wgAA/QB/wP0
+ Af8D9QX/A/YB/wP0Af8D9A3/A/4B/wP2Af8D9QH/A/0J/xAAAe8B5gHcAf8BzgG1AZMB/wG4AZMBPgH/
+ AbIBiAEsAf8BuAGSAT0B/wHOAbQBkAH/Ae4B5gHbAf94AAPfAf8B6AH0Av8BmAGkAbAB/wGYAaQBsAH/
+ AegB9AL/A98B/wQAA/YB/wNcAf8DwAH/A/QB/wPWAf8DRwH/A/UJ/wP+Af8D9gH/AW0BrgHbAf8BbQGu
+ AdsB/wP1Af8D/QX/CAAB/QH7AfoB/wHIAawBhAH/AaEBTQEAAf8BnQFHAQAB/wGcAUUBAAH/AaQBUwEA
+ Af8BnQFGAQAB/wGdAUYBAAH/AZ8BTAEAAf8BxwGqAYEB/wH8AfsB+QH/HAADhgH/AxoB/wwAAxoB/wOG
+ Af80AAPfAf8D9AH/AUoBqAHmAf8BGgFoAbYB/wESAWgBvgH/AUIBqAHuAf8B6AH0Av8B0wHfAesB/wP6
+ Af8DtAH/AyUB/wMlAf8DJQH/A6IB/wP6Bf8D/gH/A/YB/wFtAa4B2wH/AQ0BawHHAf8BDQFrAccB/wFt
+ Aa4B2wH/A/UB/wP9Af8EAAH8AfsB+QH/AbwBlgFDAf8BoAFKAQAB/wGhAUsBAAH/AZ4BRgEAAf8BygGq
+ AVQB/wH2AfEB6AH/Ac0BrwFeAf8BngFGAQAB/wGhAUsBAAH/AaEBSgEAAf8BugGUAT8B/wH8AfoB+AH/
+ FAADhgH/AwAB/xcAAf8DhgH/OAABSgGoAeYB/wEaAWgBtgH/ARIBaAG+Af8BEgFoAb4B/wGYAaQBsAH/
+ AegB9AL/A/4B/wPyAf8DPgH/A+gB/wNAAf8D6AH/A/4B/wP0Af8D9AH/A/QB/wGUAb0B4AH/AQ0BawHH
+ Af8BDQFrAccB/wENAWsBxwH/AW0BrgHbAf8D9QH/BAABzAGvAYgB/wGlAU8BAAH/AaUBTwEAAf8BpQFQ
+ AQAB/wGiAUoBAAH/AeYB1gG7Bf8B6wHeAcgB/wGjAUwBAAH/AaUBTwEAAf8BpQFPAQAB/wGlAU8BAAH/
+ AcoBrQGEAf8UAAM0Af8DAAH/FwAB/wM0Af8wAAEjAWgBrgH/ASMBaAGuAf8BOwFkAZ0B/wE7AWQBnQH/
+ ARoBaAG2Af8BGgFoAbYB/wGYAaQBsAH/AegB9Ab/A/kB/wONAf8DZQH/A28B/wP3Bf8D9AH/AQ0BawHH
+ Af8BDQFrAccB/wENAWsBxwH/AZQBvQHgAf8BDQFrAccB/wENAWsBxwH/AZQBvQHgAf8D9gH/AfIB6gHh
+ Af8BqQFWAQAB/wGqAVQBAAH/AaoBVAEAAf8BqgFUAQAB/wGnAU8BAAH/AeUB0wG2Bf8B6gHcAcMB/wGo
+ AVEBAAH/AaoBUwEAAf8BqgFUAQAB/wGqAVQBAAH/AakBVQEAAf8B8AHpAd4B/xAAAzQB/wMAAf8XAAH/
+ AzQB/xwAA98B/wPfAf8MAAEjAWgBrgH/AbUB+gL/Ac0B9gL/Ac0B9gL/AUoBqAHmAf8BSgGoAeYB/wHo
+ AfQC/wHTAd8B6wX/A/0B/wPbAf8DJQH/A8kB/wP7Bf8D9AH/AQ0BawHHAf8D9AH/A/QB/wP0Af8BlAG9
+ AeAB/wGUAb0B4AH/A/YB/wP+Af8B1gG+AZ0B/wGwAVsBAAH/Aa4BWAEAAf8BrwFZAQAB/wGvAVkBAAH/
+ AawBVAEAAf8B5gHVAbYF/wHrAdwBxAH/Aa0BVgEAAf8BrwFYAQAB/wGvAVkBAAH/Aa4BWQEAAf8BrwFY
+ AQAB/wHTAbkBlgH/EwAB/wPAAf8UAAPAAf8DAAH/GAAB0wHfAesB/wHoAfQC/wHoAfQC/wHTAd8B6wH/
+ CAABOwFkAZ0B/wHNAfYC/wHJAfYC/wFnAaQB0QH/AWcBpAHRAf8ByQH2Av8D5QH/BAAI/wP2Af8D9AH/
+ A/QB/wP9Bf8D9AH/AQ0BawHHAf8D9AH/A/YB/wFtAa4B2wH/AW0BrgHbAf8D9AH/A/wF/wHKAakBWwH/
+ AcABjgEXAf8BtQFgAQAB/wGzAVwBAAH/AbQBXgEAAf8BsgFaAQAB/wHoAdYBuAX/AewB3gHFAf8BsgFb
+ AQAB/wG0AV0BAAH/AbQBXgEAAf8BtAFeAQAB/wG1AV4BAAH/AcQBnwFIAf8PAAH/A00B/xwAA00B/wMA
+ Af8QAAPfAf8B6AH0Av8BmAGkAbAB/wGYAaQBsAH/AegB9AL/A98B/wQAATsBZAGdAf8BzQH2Av8BZwGk
+ AdEB/wE3AWQBoQH/ATcBZAGhAf8BZwGkAdEB/wP0Af8D3wX/A/4B/wP2Af8BbQGuAdsB/wFtAa4B2wH/
+ A/UB/wP9Af8D9AH/AQ0BawHHAf8D9AH/AW0BrgHbAf8BDQFrAccB/wENAWsBxwH/AW0BrgHbAf8D9QH/
+ A/0B/wHJAaYBUgH/AckBmwEpAf8BxQGUASIB/wG+AYkBDQH/AboBgAEAAf8BtwFeAQAB/wHrAdkBuwX/
+ Ae8B4QHIAf8BtwFgAQAB/wG5AWIBAAH/AbkBYgEAAf8BuQFiAQAB/wG6AWIBAAH/AcMBmgE8Af8QAAMa
+ Af8DwAH/FAADwAH/AxoB/xAAAdMB3wHrAf8B6AH0Av8BQgGoAe4B/wESAWgBvgH/ARIBaAG+Af8BQgGo
+ Ae4B/wHNAfYC/wHNAfYC/wEjAWgBrgH/AbUB+gL/AUIBqAHuAf8BEgFoAb4B/wEKAWgBxwH/AQoBaAHH
+ Af8BjAGkAb0B/wHcAfQC/wP+Af8D9gH/AW0BrgHbAf8BDQFrAccB/wENAWsBxwH/AW0BrgHbAf8D9AH/
+ A/QB/wENAWsBxwH/A/QB/wGUAb0B4AH/AQ0BawHHAf8BDQFrAccB/wENAWsBxwH/AW0BrgHbAf8D9QH/
+ AdABrwGBAf8BzgGgAS4B/wHLAZwBLQH/AcwBnAEtAf8BygGZASUB/wHDAY0BEQH/AeUB1AG1Bf8B5wHY
+ AbwB/wG+AYMBAAH/AcABhwEEAf8BwQGIAQcB/wHCAYoBCgH/AcYBkAEQAf8BzAGoAVUB/xAAAzQB/wMa
+ Af8UAAMaAf8DNAH/EAAB6AH0Av8BmAGkAbAB/wESAWgBvgH/ARIBaAG+Af8BEgFoAb4B/wESAWgBvgH/
+ ATsBZAGdAf8BOwFkAZ0B/wEjAWgBrgH/ASMBaAGuAf8BEgFoAb4B/wESAWgBvgH/AQoBaAHHAf8BCgFo
+ AccB/wGMAaQBvQH/AdwB9AL/A/YB/wFtAa4B2wH/AQ0BawHHAf8BDQFrAccB/wENAWsBxwH/AQ0BawHH
+ Af8BbQGuAdsB/wENAWsBxwH/AQ0BawHHAf8BDQFrAccB/wENAWsBxwH/AZQBvQHgAf8BDQFrAccB/wEN
+ AWsBxwH/AZQBvQHgAf8D9gH/Ad0BxwGrAf8B0wGmATcB/wHQAaIBMAH/AdABoQExAf8B0AGhATEB/wHQ
+ AZ8BLAH/AcsBpAFBAf8B1AHDAaUB/wHKAaQBQQH/Ac0BmwEkAf8BzgGcAScB/wHOAZwBJwH/Ac4BnAEm
+ Af8BzwGdASYB/wHaAcMBogH/EAADNAH/AxoB/xQAAxoB/wM0Af8QAAHoAfQC/wGYAaQBsAH/ARIBaAG+
+ Af8BEgFoAb4B/wEKAWgBxwH/AQoBaAHHAf8BEgFoAb4B/wFCAagB7gH/AeoB9gL/AeoB9gL/A/YB/wP2
+ Af8BjAGkAb0B/wGMAaQBvQH/A/QB/wPfAf8D9wH/AZQBvQHgAf8BDQFrAccB/wENAWsBxwH/AQ0BawHH
+ Af8BDQFrAccB/wENAWsBxwH/AW0BrgHbAf8D9AH/A/QB/wP0Af8D9AH/AZQBvQHgAf8BlAG9AeAB/wP2
+ Af8D/gH/AfUB7wHnAf8B0QGoAUUB/wHYAakBNwH/AdUBpgE3Af8B1QGmATUB/wHUAaMBMAH/AeUBxwGR
+ Af8B8wHqAdgB/wHnAcsBmQH/AdMBoQEsAf8B0wGiAS8B/wHTAaEBLQH/AdUBowEsAf8BzQGdATAB/wH0
+ Ae0B5AH/EAADhgH/AxoB/xQAAxoB/wOGAf8QAAHTAd8B6wH/AegB9AL/AUIBqAHuAf8BEgFoAb4B/wEK
+ AWgBxwH/AQoBaAHHAf8BEgFoAb4B/wESAWgBvgH/AZgBpAGwAf8B6AH0Av8D3wH/A98B/wHcAfQC/wHc
+ AfQC/wPfAf8EAAP+Af8D9wH/AZQBvQHgAf8BDQFrAccB/wENAWsBxwH/AQ0BawHHAf8BDQFrAccB/wEN
+ AWsBxwH/AW0BrgHbAf8D9QH/A/0B/wP+Af8D9wH/A/YB/wP+Bf8EAAHdAcgBqgH/Ad0BsgFGAf8B2gGr
+ AToB/wHZAasBOwH/AdcBpwE0Af8B8QHmAdMF/wH1Ae4B4QH/AdcBpgE0Af8B1wGnATQB/wHYAacBMgH/
+ AdkBqgE3Af8B2wHBAZ4B/xgAA4YB/wMaAf8MAAMaAf8DhgH/GAAD3wH/AegB9AL/AZgBpAGwAf8BEgFo
+ Ab4B/wESAWgBvgH/ARIBaAG+Af8BEgFoAb4B/wGYAaQBsAH/AegB9AL/A98B/wQAA98B/wPfAf8IAAT/
+ A/4B/wP3Af8BlAG9AeAB/wENAWsBxwH/AQ0BawHHAf8BDQFrAccB/wENAWsBxwH/AZQBvQHgAf8D9gH/
+ A/4F/wP+Af8D/gn/BAAB/gL9Af8B2QG/AZoB/wHgAbYBTAH/Ad8BsQE/Af8B3AGtAToB/wHXAbUBXQH/
+ AeIB1QG+Af8B1wG3AYAB/wHbAaoBNgH/Ad4BrgE5Af8B3gGxAUEB/wHWAbgBjQH/Af4B/QH8Af9QAAHT
+ Ad8B6wH/AegB9AL/AUIBqAHuAf8BEgFoAb4B/wESAWgBvgH/AUIBqAHuAf8B6AH0Av8B0wHfAesB/xgA
+ CP8D/gH/A/cB/wGUAb0B4AH/AQ0BawHHAf8BDQFrAccB/wGUAb0B4AH/A/YB/wP+Gf8MAAHfAcsBsQH/
+ AdwBuAFdAf8B4wG4AU4B/wHjAbQBQgH/Ad0BrgE6Af8B4QGyAT4B/wHiAbYBSAH/AdsBswFUAf8B3gHI
+ AaoB/wL+Af0B/1gAA98B/wHoAfQC/wGYAaQBsAH/AZgBpAGwAf8B6AH0Av8D3wH/HAAM/wP+Af8D9wH/
+ AZQBvQHgAf8BlAG9AeAB/wP2Af8D/h3/EAAB9gHxAesB/wHkAdQBvwH/Ad4BxQGjAf8B3gHEAZwB/wHe
+ AcQBoQH/AeQB0wG8Af8B9QHvAekB/2QAAdMB3wHrAf8B6AH0Av8B6AH0Av8B0wHfAesB/yAAEP8D/gH/
+ A/cB/wP2Af8D/iH/WQABKgG5Af8BAAEcAUsB/wEOARcBLQH/9QABSwHHAf8BFQHNAfwB/wEHASwBhwH/
+ tAADOwFlAQABIQEAAf8DOgFgNQABSwHHAf8BDgGgAdIB/wEKASIBQgH/HAADAQECAwABARsAAQEMAAEi
+ ASEBIgExAwABAVwAAz4BagEcAacBDgH/AQABJQEAAf8BAAEhAQAB/wM2AVgxAAFLAccB/wEXAdEB/AH/
+ AQcBLAGHAf8zAAEBAwABARAAAewB0gHsAf8BQgEAAUEB/wHmAcwB5gH/AwIBAwMSARkQAAE/AUkBSwH/
+ ATUBPQFAAf8BLAExATQB/wEiASUBKAH/AhgBHQH/AQ8BDQETAf8BBgECAQgB/wMAAf8DAAH/HAADPgFq
+ ARwBpwEOAf8BOQG7AS0B/wEAASkBAAH/AQABJgEAAf8BAAEhAQAB/wM1AVctAAFLAccB/wEQAaEB0QH/
+ AQoBIgFCAf8/AAEBBAAB7QHYAe0B/wGpASABqAH/AYABAAFPAf8BRQEAAUUB/wHrAdEB6wH/FAABSAGC
+ AYMB/wGXAdsB9QH/ASsBqQHKAf8BKwGpAcoB/wEqAacByQH/ASIBnwHCAf8BGQGWAbkB/wERAY0BsAH/
+ AwAB/xwAARsBpAENAf8BOQG7AS0B/wE5AbsBLQH/AQABKAEAAf8BAAEpAQAB/wEAASYBAAH/AQABIQEA
+ Af8DMAFMKQABSwHHAf8BIQHiAf0B/wEIASgBgAH/IwABAQMAAQEDAAEBAwABAQMAAQEDAAEBAwABAQQA
+ AegB0QHoAf8BqgEgAakB/wHMATcBywH/AU4BAAFOAf8BlgEIAZUB/wFLAQABSgH/AfAB1QHwAf8QAAFQ
+ AowB/wGgAeAB9wH/AUEBzQHxAf8BNAHHAe4B/wEoAcEB6wH/AR0BvAHoAf8BEgG3AeYB/wEXAZIBtgH/
+ AQQBAQEGAf8cAAEcAacBDgH/ATkBuwEtAf8BOQG7AS0B/wGqAdQBogH/ARgBoAELAf8BAAEpAQAB/wEA
+ ASYBAAH/AQABIAEAAf8pAAFLAccB/wEoAdcB/AH/AQgBKAGAAf8kAAGrAfAB9wH/AasB4gHlAf8BrAHO
+ AcwB/wGtAbsBtQH/Aa4BpwGcAf8EAAHkAcoB5AH/AakBIAGoAf8B0wE7AdIB/wHUAT4B0wH/AU8BAAFO
+ Af8BnwEMAZ8B/wGOAQUBjQH/AU0BAAFMAf8QAAGFApQB/wGnAeMB+AH/AUwB0wH0Af8BQQHOAfEB/wE1
+ AcgB7gH/ASgBwgHrAf8BHQG8AegB/wEcAZkBvAH/AQwBCQEOAf8YAAMCAQMBHgGrARAB/wE5AbsBLQH/
+ AaoB1AGiAf8BtwHaAbAB/wGqAdQBogH/AREBkwEFAf8BAAEpAQAB/wEAASEBAAH/JQABMAGQAf8BAAFL
+ AccB/wE+Ad4B/AH/AQgBKAGAAf8BAAEeAUoB/zgAAaoBIgGpAf8B0gE6AdEB/wHVAT8B1QH/Ab0BQAG8
+ Af8B3gGYAd0B/wGPARYBjgH/AZ0BDAGcAf8BTgEAAU4B/xAAAYwCmwH/Aa4B5gH6Af8BhgHYAfYB/wFM
+ AdQB9AH/AUEBzQHxAf8BNQHHAe4B/wEoAcIB6wH/ASMBoAHBAf8CEwEYAf8YAAMEAQUBMwG4ASYB/wG0
+ AdkBrQH/AcUB4gHAAf8BtwHaAbAB/wG3AdoBsAH/AaoB1AGiAf8BCwGIAQAB/wEAASEBAAH/IQABPwGg
+ Af8BAQGHAccB/wErAcAB8AH/ASABywH+Af8BIQGzAd0B/wEMAR0BNgH/AQABHgFKAf8YAAGrAfAB9wH/
+ AasB5QHpAf8BrALVAf8BrAHEAcEB/wGtAbUBrAH/Aa4BpAGYAf8EAAGoAR8BpwH/AdIBPQHRAf8BvAE/
+ AbsB/wHvAaUB7gH/AfsBnwH6Af8B7wGdAe4B/wGXASIBlgH/AUwBAAFMAf8QAAGRAaIBoQH/AbIB6AH8
+ Af8BoAHiAfoB/wGGAdgB9gH/AU0B0wHzAf8BQQHOAfEB/wE0AcgB7gH/AScBpQHHAf8BHAEdASIB/xgA
+ AwIBAwNEAXoBjgHGAYQB/wG5AdwBswH/AcMB4QG+Af8BwwHhAb4B/wG3AdoBsAH/AaoB1AGiAf8BAgE3
+ AQAB/xwAAQgBgAGxAf8BAQGHAcgB/wEiAboB9wH/ASQBwgH5Af8BGgG3AfkB/wE4AdYB+wH/ARUBpgHo
+ Af8BDAEcATQB/wEAASEBgwH/MAABpwEgAaYB/wG8AT8BuwH/Ae8BpQHuAf8B+wGbAfoB/wH7AZgB+gH/
+ AfsBmQH6Af8B5wGYAeYB/wGRAR4BkAH/EAABlAGmAaUB/wG9AewB/AH/AaUB5QH7Af8BnwHiAfoB/wGG
+ AdgB9gH/AU0B1AH0Af8BQQHNAfEB/wErAakBygH/ASQBKAErAf8gAANGAX4BkAHHAYYB/wG+Ad4BuAH/
+ AcMB4QG+Af8BswHZAawB/wGQAccBhgH/Az0BaRwAAQUBSwG4Af8BJAHBAfkB/wEgAbcB+QH/AZMB7gH+
+ Af8BjwHsAf4B/wEiAbQB8wH/AY0B4wH+Af8BHwG6AeIB/wEEAR4BOwH/HAABqwHwAfcB/wGsAtUB/wGu
+ AbQBrAH/Aa4BmQGKAf8D/QH/Ac8BiAHPAf8B4gGvAeIB/wH7AasB+gH/AfsBmAH6Af8B+wGYAfoB/wHq
+ AZAB6QH/Ac8BiAHPAf8B9AHmAfQB/xAAAZQBpgGlAf8BvQHsAfwB/wG9AewB/AH/AbIB6AH8Af8BrgHm
+ AfoB/wGnAeQB+QH/AaAB4AH3Af8BlwHbAfUB/wEtATIBNgH/JAADRwGBAZQByQGKAf8BvQHeAbcB/wGO
+ AcYBhAH/AzABSyAAAQkBgwG7Af8BKQHGAfkB/wE5AYoBrAH/ATkBigGsAf8BOQGKAawB/wE5AYoBrAH/
+ ATkBigGsAf8BMgHVAfoB/wEHAR0BOAH/MAAB8AHUAfAB/wHPAYgBzwH/Ae4BvgHuAf8B+wGuAfoB/wHs
+ AZEB6wH/Ac8BiAHPAf8B8wHgAfIB/xQAAZQBpgGlAf8BlAGmAaUB/wGTAqUB/wGPAZ8BngH/AYgClwH/
+ AYECjgH/AUkChAH/AT8BSQFLAf8BNgE9AT8B/ygAAzwBZgGUAckBigH/AyUBNyQAAQkBgwG8Af8BLAHS
+ AfoB/wEaATQBhAH/DAABHQGQAcEB/wEjAbsB4QH/AQkBGwE1Af80AAHyAdsB8gH/Ac8BiAHPAf8B4wGs
+ AeMB/wHPAYgBzwH/AfMB4wHzAf9gAAMBAQIEAAMBAQIoAAESAYgBwQH/ARYBnQHQAf8BSgHjAfoB/wEa
+ AYUBngH/ASEBNAGHAf8BIQFGAZwB/wEiAb8B9AH/ARgBjAGqAf8BAQEoAUoB/zgAAfIB2wHyAf8BzwGI
+ Ac8B/wHwAeMB8AH/mAABGQGUAcYB/wEUAYoBwQH/ARYBmgHNAf8BPgHVAfUB/wFBAekB/gH/AT0B1AHz
+ Af8BGgGSAbIB/wEHATQBjAH/AQABQAGiAf88AAH+AfsB/gH/oAABGQGUAcYB/wEVAY0BwwH/ARABiwG6
+ Af8BEAGLAboB/wENAYgBtwH/AQ4BQwGgAf8BCQGCAbIB//8AqQADNgFYAZkCAAH/AzMBU/AAAzgBXQHX
+ AZoBGgH/AZkCAAH/AZkCAAH/Ay8BSiwAAx4BKwNUAa4BWQJkAewBHQGDAZYB/wEKATYBjQH/AQABLQGM
+ Af8BTgJdAfADVgGzAyUBN5gAAzoBYQHXAZoBGgH/AdgBmwEbAf8BmQIAAf8BmQIAAf8BmQIAAf8DLwFK
+ KAABWwJeAdABEQGwAdEB/wGEAdUB6AH/AaEB6wH2Af8BMwHkAv8BAAG+AfMB/wEAAZ8B3gH/AQABiwG+
+ Af8BWwJeAdlUAAG3AaIBkwH/ASMBCQEAAf8BIwEJAQAB/wEjAQkBAAH/ASMBCQEAAf8BIwEJAQAB/wEj
+ AQkBAAH/ASMBCQEAAf8BIwEJAQAB/wEjAQkBAAH/ASMBCQEAAf8BIwEJAQAB/xQAAdgBmwEcAf8B2AGb
+ ARsB/wHYAZsBGwH/AZkCAAH/AZkCAAH/AZkCAAH/AZkCAAH/Ay8BSiQAARMBjwGqAf8BDQHXAv8BkAHq
+ AfoB/wGhAesB9gH/ATEB2QH0Af8BAAG8AfIB/wEAAacB6AH/AQABnAHaAf8BAAEjAYQB/xQAAzEBTQJS
+ AVEBoQFfAlgB4wFfAlgB4wFSAlEBoQExAjABTQQAAzEBTQJSAVEBoQFfAlgB4wFfAlgB4wFSAlEBoQEx
+ AjABTQwAAbcBogGTAf8B/QH7AfkB/wHhAdwB2AH/AeAB1wHSAf8B3wHOAcMB/wHdAcgBuwH/AdsBvwGt
+ Af8B2wG7AacB/wHbAbsBpwH/AdsBuwGnAf8BzwG0AaMB/wEjAQkBAAH/FAAB2AGbARsB/wHYAZsBGwH/
+ AekBtAE8Af8B/AHWAa8B/wG1ASMBAAH/AZkCAAH/AZkCAAH/AZkCAAH/Ay8BSiAAARQBkQGuAf8BDAHS
+ AfoB/wGNAeQB9gH/AaEB6wH2Af8BMAHXAfMB/wEAAbkB7wH/AQABpwHoAf8BAAGcAdoB/wEAASUBhgH/
+ EAADNQFVA2QB5wHPAbgBqQH/AesB1gHIAf8B5QHLAbsB/wGzAZUBPwH/AWQCXAHnA0sBjgNkAecBzwG4
+ AakB/wHrAdYByAH/AeUBywG7Af8BswGVAT8B/wFkAlwB5wE1AjQBVQgAAbcBogGTAf8D/gH/AboBpgGY
+ Af8BtQGgAZEB/wH7AewB4wH/AaQBjQE+Af8BmgGDATIB/wH2AdYBwgH/AYgBMQEeAf8BgwErARgB/wHP
+ AbQBowH/ASMBCQEAAf8UAAHYAZsBGwH/AeoBtwGCAf8B+wHYAbIB/wH+AdEBowH/AfsB2AGyAf8BrwEX
+ AQAB/wGZAgAB/wGZAgAB/wGZAgAB/wMqAUEcAAEXAZUBsAH/AQ4B0gH6Af8BjQHkAfQB/wGhAesB9gH/
+ ATAB1wHyAf8BAAG5Ae4B/wEAAacB6AH/AQABnAHaAf8BAAEoAYgB/xAAA1UBsgHmAdYBywH/A1kBwgJg
+ AVwB1ANgAdQBTAEqASEB+wEHAgAB/wEHAgAB/wEHAgAB/wFhAlgB5gJgAVwB1ANgAdQDWQHCAbkBnAGI
+ Af8DVQGyCAABugGlAZYB/wP+Af8D/gH/A/4B/wH9AfsB+QH/Af0B9wHzAf8B+wHsAeMB/wH6AecB2wH/
+ AfgB4QHSAf8B9wHbAckB/wHQAbkBqwH/ASMBCQEAAf8UAAHnAbMBPAH/AfEBwwGRAf8B/gHPAZ0C/wHN
+ AZkB/wH+AdABnwH/AfsB2AGyAf8BqQEOAQAB/wGZAgAB/wGZAgAB/wGZAgAB/wMEAQUYAAEZAZkBtQH/
+ AQ8B0QH7Af8BjgHkAfUB/wGhAesB9gH/ATAB1wHyAf8BAAG5Ae4B/wEAAacB6AH/AQABnAHaAf8BAAEr
+ AYoB/xAAA2UB9AT/A1cB3wMdASoDXAHNBf8B/gH3Av8B8QHmAf8B+gHjAdQB/wHzAdcBxwH/A0oBjQMd
+ ASoDXAHfAe8B1gHHAf8BZAJSAfQIAAG+AakBmgH/A/4B/wG6AaYBmAH/AbQBoAGRAf8D/gH/AaMBjgE+
+ Af8BmgGDATIB/wH7AewB4wH/AYkBMQEfAf8BgwErARgB/wHRAcEBtgH/ASMBCQEAAf8UAANFAXwB5QGy
+ ATsB/wH0AcABiwL/Ac0BmQL/Ac0BmQH/Af4B0AGhAf8B+wHYAbIB/wGpAQ4BAAH/AZkCAAH/AZkCAAH/
+ HAABHAGbAbcB/wEPAdAB+QH/AY0B4wH1Af8BoQHrAfYB/wEyAdkB8gH/AQABuQHuAf8BAAGnAegB/wEA
+ AZwB2gH/AQABLQGNAf8QAANVAbIB8gHmAd4B/wNZAcIDXAHUAWACXAHUA2EB4gHTAbUBogH/AU4CTQH6
+ AdoBwAGvAf8DXwHzA1sB1gFgAlwB1ANZAcIBywGxAaEB/wNVAbIIAAHDAa4BngH/A/4B/wP+Af8D/gH/
+ A/4B/wP+Af8B/QH3AfMB/wH8AfIB7AH/AfsB7AHjAf8B+gHnAdsB/wHRAcEBtgH/ASMBCQEAAf8YAANG
+ AX8B5AGwATkB/wH2AcQBkAL/Ac0BmQL/Ac0BmQH/Af4B0AGhAf8B+wHYAbIB/wGpAQ4BAAH/AZkCAAH/
+ HAABHgGeAboB/wENAdAB+QH/AY0B4wH0Af8BoQHrAfYB/wEvAdcB8gH/AQABtwHuAf8BAAGnAegB/wEA
+ AZwB2gH/AQABLwGPAf8QAAM1AVUDZAHnAe0B4QHXA/8B/QL/AfcB8QH/AdgBxAG3Af8DZAHnA0sBjgNk
+ AecB7QHhAdcD/wH9Av8B9wHxAf8B2AHEAbcB/wNkAecDNQFVCAAByAGyAaMB/wP+Af8BugGmAZgB/wG0
+ AaABkQH/A/4B/wGkAY4BPgH/AZkBhAEyAf8B/QH3AfMB/wGIATEBHgH/AYMBKwEYAf8B0QHBAbYB/wEj
+ AQkBAAH/HAADSQGHAeMBrwE4Af8B9gHEAZAC/wHNAZkC/wHNAZkB/wH+AdABoQH/AfIByQGdAf8BsAEa
+ AQAB/xwAAR8BogG8Af8BBwHOAfcB/wGLAeMB9AH/AaEB6wH2Af8BLgHWAfIB/wEAAbcB7gH/AQABpwHo
+ Af8BAAGcAdoB/wEAATABkgH/FAADMQFNA1IBoQNfAeMDXwHjA1IBoQMxAU0EAAMxAU0DUgGhA18B4wNf
+ AeMDUgGhAzEBTQwAAcwBtgGnAf8D/gH/A/4B/wP+Af8D/gH/A/4B/wP+Af8B/QH7AfkB/wH9AfcB8wH/
+ AfwB8gHsAf8B+wHsAeMB/wEjAQkBAAH/IAADSQGHAeMBrwE4Af8B9gHEAZAC/wHNAZkB/wHzAcIBjgH/
+ AeMBsAE5Af8DQwF4HAABKwGpAcAB/wEWAdQB+gH/AZwB7AH6Af8BqwHvAfoB/wGmAe0B+AH/AZQB5wH4
+ Af8BMQHZAfYB/wEAAb0B6QH/AQMBPAGXAf9UAAHqAaoBiwH/AeoBqgGLAf8B6gGqAYsB/wHpAaUBhAH/
+ AecBlwEuAf8B5gGOASIB/wHjAT0BCgH/AeMBNgEAAf8B4gEyAQAB/wHiATIBAAH/AeIBMgEAAf8ByAEi
+ AQAB/yQAA0kBhwHjAa8BOAH/Ae4BvQGKAf8B4wGwATkB/wM0AVQgAAGAAbMBxQH/AZsB3gHrAf8BxQH5
+ Af0B/wHFAfkB/QH/AcUB+QH9Af8BxQH5Af0B/wHFAfkB/QH/AaAB3wHqAf8BJgGRAaIB/1QAAeoBqgGL
+ Av8BwgGiAf8B/gHAAZ8B/wH9Ab0BmgH/AfsBtQGQAf8B+gGwAYsB/wH4AacBPQH/AfYBogE3Af8B9QGd
+ ATEB/wH1AZkBKgH/AfMBlQElAf8BzQElAQAB/ygAA0ABbgHlAbIBPQH/AyYBOCQAAzsBYwNgAdYBNgGr
+ AboB/wEwAaMBswH/ASwBnQGvAf8BKwGbAa4B/wEvAaIBtAH/A14B2QNAAW9UAAHqAaoBiwH/AeoBqgGL
+ Af8B6gGqAYsB/wHqAaoBiwH/AekBoQE/Af8B6AGbATYB/wHmAY4BIgH/AeUBhwEYAf8B5AGBAQ4B/wHk
+ ATsBBgH/AeMBNgEAAf8B4gEyAQAB//8A/wAKAAFCAU0BPgcAAT4DAAEoAwABQAMAAUADAAEBAQABAQYA
+ AQIWAAP/gQAF/wHDAgAB8AEfA/8BgQIAAcABBwHzAZ8B/wMAAYABAwHnAc8B/wHAAgABgAEDAecBzwH/
+ BAABAQHnAc8B5wQAAQEB5wHPAcMBAQMAAQEBzwHnAYEEAAEBAecBzwUAAQEB5wHPBQABAQHnAc8FAAEB
+ AecBzwEAAQECAAGAAQMB8wGfAYABEwIAAYABAwL/AcABPwIAAeABBwL/AeABfwIAAfABHwL/AfAB/wIA
+ Av8B/AF/Bv8B/AF/BP8B/AF/AfwBfwE/AXMC/wH4AT8B/AF/AfkB4AHwAQcB8AEfAfwBfwH/AUEB8AEH
+ AfABDwH8AX8CgAHwAQcB8AEPAfwBfwHBAQAB8AEHAeABDwH4AT8B/wEAAfABBwHgAQ8B8AEfAYEBAAHw
+ AQcB4AEPAeABDwH/AQAB8AEHAfgBDwHgAQ8B4AEAAfABBwH8AR8B4AEPAf8BAQHwAQcB/gE/AeMBjwH/
+ AYMC/wH9AX8B4AEPAf8BxwT/AeABDwH/Ae8E/wHwAR8M/wH4B/8B8AF/AfABBwT/AeABPwHwAQcC/wHA
+ AQMB4AEfAfABBwHAAYEBwAEDAeABDwHwAQcBgAEAAcABAwHgAQcB8AEHAYABAAHAAQMB4AEDAfABBwGA
+ AQABwAEDAeABBwHwAQcBgAEAAcABAwHwAQcB8AEHAYABAAHAAQMB+AEHAfABBwHAAYEBwAEDAfwBBwHw
+ AQcC/wHAAQMB/gEPAfABBwL/AcABAwH/AR8B8AEHAv8BwAEDEP8L
diff --git a/Src/SwqlStudio/Metadata/Entity.cs b/Src/SwqlStudio/Metadata/Entity.cs
index c79ba6555..f11be6387 100644
--- a/Src/SwqlStudio/Metadata/Entity.cs
+++ b/Src/SwqlStudio/Metadata/Entity.cs
@@ -2,7 +2,7 @@
namespace SwqlStudio.Metadata
{
- class Entity
+ public class Entity
{
private readonly List properties = new List();
private readonly List verbs = new List();
diff --git a/Src/SwqlStudio/Metadata/Property.cs b/Src/SwqlStudio/Metadata/Property.cs
index 431256b5f..4f909e760 100644
--- a/Src/SwqlStudio/Metadata/Property.cs
+++ b/Src/SwqlStudio/Metadata/Property.cs
@@ -1,7 +1,7 @@
namespace SwqlStudio.Metadata
{
- class Property
+ public class Property
{
public string Name { get; set; }
public string Type { get; set; }
diff --git a/Src/SwqlStudio/ObjectExplorer/ObjectExplorer.cs b/Src/SwqlStudio/ObjectExplorer/ObjectExplorer.cs
index af48eb00b..6747c7172 100644
--- a/Src/SwqlStudio/ObjectExplorer/ObjectExplorer.cs
+++ b/Src/SwqlStudio/ObjectExplorer/ObjectExplorer.cs
@@ -8,7 +8,6 @@
using System.ServiceModel.Security;
using System.Text;
using System.Threading;
-using System.Web.UI.WebControls;
using System.Windows.Forms;
using SolarWinds.Logging;
using SwqlStudio.Metadata;
@@ -37,6 +36,7 @@ class ObjectExplorer : Control
private TreeNodeUtils.TreeNodeBindings _treeBindings = new TreeNodeUtils.TreeNodeBindings(); // default value, so this field is never null
private TreeNode _contextMenuNode;
private readonly Dictionary _tableContextMenuItems;
+ private readonly Dictionary _tableCrudContextMenuItems;
private readonly Dictionary _serverContextMenuItems;
private readonly ContextMenu _verbContextMenu;
private bool _isDragging;
@@ -98,6 +98,7 @@ public ObjectExplorer()
_tableContextMenuItems = new Dictionary();
_serverContextMenuItems = new Dictionary();
+ _tableCrudContextMenuItems = new Dictionary();
_verbContextMenu = new ContextMenu();
_verbContextMenu.MenuItems.Add("Invoke...", (s, e) => OpenInvokeTab());
@@ -443,8 +444,27 @@ void _tree_MouseUp(object sender, MouseEventArgs e)
if (_contextMenuNode.Tag is Entity)
{
var treeNodeWithConnectionInfo = _contextMenuNode as TreeNodeWithConnectionInfo;
- if (treeNodeWithConnectionInfo != null)
- _tableContextMenuItems[treeNodeWithConnectionInfo.Connection.Title].Show(_tree, e.Location);
+ if (treeNodeWithConnectionInfo != null && treeNodeWithConnectionInfo.Tag is Entity entity)
+ {
+ // crud does not make sense on indications
+ if (!entity.IsIndication && (entity.CanCreate || entity.CanDelete || entity.CanUpdate))
+ {
+ var menuItem = _tableCrudContextMenuItems[treeNodeWithConnectionInfo.Connection.Title];
+
+ foreach (MenuItem subMenuItem in menuItem.MenuItems)
+ {
+ if (subMenuItem.Name == "create") subMenuItem.Enabled = entity.CanCreate;
+ if (subMenuItem.Name == "update") subMenuItem.Enabled = entity.CanUpdate;
+ if (subMenuItem.Name == "delete") subMenuItem.Enabled = entity.CanDelete;
+ }
+
+ menuItem.Show(_tree, e.Location);
+ }
+ else
+ {
+ _tableContextMenuItems[treeNodeWithConnectionInfo.Connection.Title].Show(_tree, e.Location);
+ }
+ }
}
if (_contextMenuNode.Tag is IMetadataProvider)
@@ -502,14 +522,28 @@ public void AddServer(IMetadataProvider provider, ConnectionInfo connection)
connection.CanCreateSubscription = Convert.ToBoolean(dt.Rows[0][0]);
}
- var tableContextMenu = new ContextMenu();
- tableContextMenu.MenuItems.Add("Generate Select Statement", (s, e) => GenerateSelectStatement(_contextMenuNode.Tag as Entity, false));
- tableContextMenu.MenuItems.Add("Generate Select Statement (with Inherited Properties)", (s, e) => GenerateSelectStatement(_contextMenuNode.Tag as Entity, true));
+ var tableContextMenuWithoutCrud = new ContextMenu();
+ var tableContextMenuWithCrud = new ContextMenu();
+
+ var commonTableContextMenus = new[] { tableContextMenuWithCrud, tableContextMenuWithoutCrud };
+ foreach(var tableContextMenu in commonTableContextMenus)
+ {
+ tableContextMenu.MenuItems.Add("Generate Select Statement", (s, e) => GenerateSelectStatement(_contextMenuNode.Tag as Entity, false));
+ tableContextMenu.MenuItems.Add("Generate Select Statement (with Inherited Properties)", (s, e) => GenerateSelectStatement(_contextMenuNode.Tag as Entity, true));
+
+ if (connection.CanCreateSubscription)
+ tableContextMenu.MenuItems.Add("Subscribe", StartSubscription);
+ }
+
+ tableContextMenuWithCrud.MenuItems.Add("-");
+ // note: the names are crucial for disabling/enabling the menu based on operations allowed
+ tableContextMenuWithCrud.MenuItems.Add("Create", (s, e) => Crud(_contextMenuNode.Tag as Entity, CrudOperation.Create)).Name = "create";
+ tableContextMenuWithCrud.MenuItems.Add("Update", (s, e) => Crud(_contextMenuNode.Tag as Entity, CrudOperation.Update)).Name = "update";
+ tableContextMenuWithCrud.MenuItems.Add("Delete", (s, e) => Crud(_contextMenuNode.Tag as Entity, CrudOperation.Delete)).Name = "delete";
- if (connection.CanCreateSubscription)
- tableContextMenu.MenuItems.Add("Subscribe", StartSubscription);
- _tableContextMenuItems.Add(connection.Title, tableContextMenu);
+ _tableContextMenuItems.Add(connection.Title, tableContextMenuWithoutCrud);
+ _tableCrudContextMenuItems.Add(connection.Title, tableContextMenuWithCrud);
var serverContextMenu = new ContextMenu();
serverContextMenu.MenuItems.Add("Refresh", (s, e) => RefreshServer(_contextMenuNode));
@@ -543,8 +577,11 @@ public void AddServer(IMetadataProvider provider, ConnectionInfo connection)
connection.ConnectionClosed += (o, e) =>
{
_tableContextMenuItems.Remove(connection.Title);
- tableContextMenu.Dispose();
- tableContextMenu = null;
+ tableContextMenuWithCrud.Dispose();
+ tableContextMenuWithCrud = null;
+
+ tableContextMenuWithoutCrud.Dispose();
+ tableContextMenuWithoutCrud = null;
_serverContextMenuItems.Remove(connection.Title);
serverContextMenu.Dispose();
@@ -668,16 +705,31 @@ private static TreeNode[] MakeEntityTreeNodes(IMetadataProvider provider, Connec
private static TreeNodeWithConnectionInfo MakeEntityTreeNode(IMetadataProvider provider, ConnectionInfo connection, Entity table)
{
var node = new TreeNodeWithConnectionInfo(table.FullName, connection);
- node.ImageKey = table.IsIndication ? "Indication" : (!table.IsAbstract ? "Table" : "TableAbstract");
+ node.ImageKey = GetImageKey(table);
node.SelectedImageKey = node.ImageKey;
node.Tag = table;
- node.ToolTipText = string.Format(
- @"{0}
+ if (table.IsIndication)
+ {
+ node.ToolTipText += string.Format(@"{0}
+Base type: {1}
+CanSubscribe: {2}",
+ table.FullName, table.BaseType, connection.CanCreateSubscription);
+ }
+ else
+ {
+
+ node.ToolTipText = string.Format(
+ @"{0}
Base type: {1}
CanCreate: {2}
CanUpdate: {3}
CanDelete: {4}",
- table.FullName, table.BaseType, table.CanCreate, table.CanUpdate, table.CanDelete);
+ table.FullName,
+ table.BaseType,
+ table.CanCreate,
+ table.CanUpdate,
+ table.CanDelete);
+ }
// Add keys
AddPropertiesToNode(node, table.Properties.Where(c => c.IsKey));
@@ -695,6 +747,18 @@ private static TreeNodeWithConnectionInfo MakeEntityTreeNode(IMetadataProvider p
return node;
}
+ private static string GetImageKey(Entity table)
+ {
+ if (table.IsIndication)
+ return "Indication";
+ else if (table.IsAbstract)
+ return "TableAbstract";
+ else if (table.CanCreate || table.CanDelete || table.CanUpdate)
+ return "TableCrud";
+
+ return "Table";
+ }
+
private static void AddVerbsToNode(TreeNode parent, Entity table, IMetadataProvider provider)
{
foreach (var verb in table.Verbs.OrderBy(v => v.Name))
@@ -748,6 +812,12 @@ private static string GetColumnIcon(Property column)
return "Column";
}
+ private void Crud(Entity entity, CrudOperation operation)
+ {
+ var provider = FindProvider(_contextMenuNode);
+ ApplicationService.OpenCrudTab(operation, provider.ConnectionInfo, entity);
+ }
+
private void StartSubscription(object sender, EventArgs e)
{
var table = _contextMenuNode.Tag as Entity;
diff --git a/Src/SwqlStudio/Resources/TableCrud.png b/Src/SwqlStudio/Resources/TableCrud.png
new file mode 100644
index 000000000..6b10b41ec
Binary files /dev/null and b/Src/SwqlStudio/Resources/TableCrud.png differ
diff --git a/Src/SwqlStudio/SwqlStudio.csproj b/Src/SwqlStudio/SwqlStudio.csproj
index b68b3f5ab..35ed34980 100644
--- a/Src/SwqlStudio/SwqlStudio.csproj
+++ b/Src/SwqlStudio/SwqlStudio.csproj
@@ -122,6 +122,13 @@
Component
+
+
+ UserControl
+
+
+ CrudTab.cs
+
@@ -233,6 +240,9 @@
ActivityMonitorTab.cs
+
+ CrudTab.cs
+
EntityClassGraphForm.cs