[mapguide-commits] r5323 - in sandbox/maestro-3.0: Maestro
Maestro.Base Maestro.Base/Commands Maestro.Base/Editor
Maestro.Base/Events Maestro.Base/Properties Maestro.Editors
Maestro.Editors/Diagnostics Maestro.Editors/Properties
Maestro.Login MaestroAPITests OSGeo.MapGuide.MaestroAPI
OSGeo.MapGuide.MaestroAPI/Capability
OSGeo.MapGuide.MaestroAPI/Commands
OSGeo.MapGuide.MaestroAPI/Services OSGeo.MapGuide.MaestroAPI.Http
OSGeo.MapGuide.MaestroAPI.Native
OSGeo.MapGuide.MaestroAPI.Native/Properties
svn_mapguide at osgeo.org
svn_mapguide at osgeo.org
Mon Oct 25 02:57:06 EDT 2010
Author: jng
Date: 2010-10-24 23:57:06 -0700 (Sun, 24 Oct 2010)
New Revision: 5323
Added:
sandbox/maestro-3.0/Maestro.Base/Commands/ServerMonitorCommand.cs
sandbox/maestro-3.0/Maestro.Editors/Diagnostics/
sandbox/maestro-3.0/Maestro.Editors/Diagnostics/ServerStatusMonitor.cs
sandbox/maestro-3.0/Maestro.Editors/Diagnostics/ServerStatusMonitor.designer.cs
sandbox/maestro-3.0/Maestro.Editors/Diagnostics/ServerStatusMonitor.resx
sandbox/maestro-3.0/Maestro/App.config
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/OSGeo.MapGuide.MaestroAPI.Native.csproj
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/Properties/AssemblyInfo.cs
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Services/ISiteService.cs
Removed:
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/Mapping/
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/Properties/AssemblyInfo-2.2.0.cs
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Commands/GetCapabilities.cs
Modified:
sandbox/maestro-3.0/Maestro.Base/Editor/EditorContentBase.cs
sandbox/maestro-3.0/Maestro.Base/Events/EventWatcher.cs
sandbox/maestro-3.0/Maestro.Base/Maestro.Base.addin
sandbox/maestro-3.0/Maestro.Base/Maestro.Base.csproj
sandbox/maestro-3.0/Maestro.Base/Properties/Resources.Designer.cs
sandbox/maestro-3.0/Maestro.Base/Properties/Resources.resx
sandbox/maestro-3.0/Maestro.Editors/Maestro.Editors.csproj
sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.Designer.cs
sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.resx
sandbox/maestro-3.0/Maestro.Login/LoginDialog.cs
sandbox/maestro-3.0/Maestro/Maestro.csproj
sandbox/maestro-3.0/Maestro/Maestro.sln
sandbox/maestro-3.0/MaestroAPITests/CapabilityTests.cs
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Http/HttpCapabilities.cs
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Http/HttpServerConnection.cs
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Http/RequestBuilder.cs
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/LocalNativeCapabilities.cs
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/LocalNativeConnection.cs
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Capability/ConnectionCapabilities.cs
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Commands/CommandType.cs
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ConnectionProviders.xml
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/IConnectionCapabilities.cs
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ServerConnectionBase.cs
sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Services/ServiceType.cs
Log:
3.0 sandbox changes:
- Port over server status monitor from 2.x
- Add new ISiteService interface for site operations
- Change IConnectionCapabilities.SupportsResourcePreviews to IConnectionCapabilities.SupportsResourcePreviewUrls for clarification
- Remove unused commands as these are already implemented at the server connection level
- Re-include official MapGuide API implementation of IServerConnection
- Update Capabilities API so that HTTP and LocalNative implementations inherit from a base capabilities class
- Add additional logic to disable TCP/IP option if (running on Mono -OR- Maestro.LocalNative provider not found)
- Fix incorrect connection parameter being used when using LocalNative mode from Login Dialog
- Add app.config to Maestro project with a sample config for MapGuideDotNetApi binding redirection
- Disable Maestro.LocalNative entry in ConnectionProviders.xml by default as this requires additional setup, documentation will be available for those who wish to utilise this connection provider
Added: sandbox/maestro-3.0/Maestro/App.config
===================================================================
--- sandbox/maestro-3.0/Maestro/App.config (rev 0)
+++ sandbox/maestro-3.0/Maestro/App.config 2010-10-25 06:57:06 UTC (rev 5323)
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+ <!--
+ If you use the Local Native Connection, setup assembly binding redirection by
+ editing this file here. For more information, visit the following links:
+
+ http://trac.osgeo.org/mapguide/wiki/maestro/MaestroAPI/MapGuideDotNetApiVersions
+
+ http://themapguyde.blogspot.com/2010/10/using-maestro-in-native-mode-with.html
+
+ The example below (commented out) sets up MapGuideDotNetApi to redirect to 2.2
+ version of the official MapGuide dlls assuming the instructions in the 2nd link
+ were carried out.
+
+ Note that Local Native Connection is not available for Mono.
+ -->
+ <!--
+ <runtime>
+ <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+ <dependentAssembly>
+ <assemblyIdentity name="MapGuideDotNetApi" publicKeyToken="f526c48929fda856" />
+
+ <codeBase version="1.0.0.1" href="MapGuideDotNetApi-2.2.dll"/>
+
+ <bindingRedirect oldVersion="2.0.0.2308" newVersion="1.0.0.1" />
+
+ </dependentAssembly>
+ </assemblyBinding>
+ </runtime>
+ -->
+</configuration>
\ No newline at end of file
Modified: sandbox/maestro-3.0/Maestro/Maestro.csproj
===================================================================
--- sandbox/maestro-3.0/Maestro/Maestro.csproj 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/Maestro/Maestro.csproj 2010-10-25 06:57:06 UTC (rev 5323)
@@ -58,6 +58,7 @@
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
+ <None Include="App.config" />
<None Include="Maestro.sh">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
@@ -731,6 +732,10 @@
<Project>{6EF1E775-444B-4E5F-87FB-D687C43A68D7}</Project>
<Name>OSGeo.MapGuide.MaestroAPI.Http</Name>
</ProjectReference>
+ <ProjectReference Include="..\OSGeo.MapGuide.MaestroAPI.Native\OSGeo.MapGuide.MaestroAPI.Native.csproj">
+ <Project>{F4420153-9DF3-4407-AD65-E8ABED2B6E25}</Project>
+ <Name>OSGeo.MapGuide.MaestroAPI.Native</Name>
+ </ProjectReference>
<ProjectReference Include="..\OSGeo.MapGuide.MaestroAPI\OSGeo.MapGuide.MaestroAPI.csproj">
<Project>{80FA3158-8B5F-48D1-A393-0378AFE48A7E}</Project>
<Name>OSGeo.MapGuide.MaestroAPI</Name>
Modified: sandbox/maestro-3.0/Maestro/Maestro.sln
===================================================================
--- sandbox/maestro-3.0/Maestro/Maestro.sln 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/Maestro/Maestro.sln 2010-10-25 06:57:06 UTC (rev 5323)
@@ -57,6 +57,8 @@
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MgCooker.Cmd", "..\MgCooker.Cmd\MgCooker.Cmd.csproj", "{0FD82B7B-1264-410F-86D1-47E9CCACD68E}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OSGeo.MapGuide.MaestroAPI.Native", "..\OSGeo.MapGuide.MaestroAPI.Native\OSGeo.MapGuide.MaestroAPI.Native.csproj", "{F4420153-9DF3-4407-AD65-E8ABED2B6E25}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -159,6 +161,10 @@
{0FD82B7B-1264-410F-86D1-47E9CCACD68E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0FD82B7B-1264-410F-86D1-47E9CCACD68E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0FD82B7B-1264-410F-86D1-47E9CCACD68E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F4420153-9DF3-4407-AD65-E8ABED2B6E25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F4420153-9DF3-4407-AD65-E8ABED2B6E25}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F4420153-9DF3-4407-AD65-E8ABED2B6E25}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F4420153-9DF3-4407-AD65-E8ABED2B6E25}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Added: sandbox/maestro-3.0/Maestro.Base/Commands/ServerMonitorCommand.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Commands/ServerMonitorCommand.cs (rev 0)
+++ sandbox/maestro-3.0/Maestro.Base/Commands/ServerMonitorCommand.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -0,0 +1,44 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+//
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Text;
+using ICSharpCode.Core;
+using Maestro.Base.Services;
+using OSGeo.MapGuide.MaestroAPI.Services;
+using Maestro.Editors.Diagnostics;
+
+namespace Maestro.Base.Commands
+{
+ internal class ServerMonitorCommand : AbstractMenuCommand
+ {
+ public override void Run()
+ {
+ try
+ {
+ ServerStatusMonitor.ShowWindow();
+ }
+ catch (Exception ex)
+ {
+ MessageService.ShowError(ex.Message);
+ }
+ }
+ }
+}
Modified: sandbox/maestro-3.0/Maestro.Base/Editor/EditorContentBase.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Editor/EditorContentBase.cs 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/Maestro.Base/Editor/EditorContentBase.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -192,7 +192,7 @@
if (res != null)
{
var rt = res.ResourceType;
- return ResourcePreviewEngine.IsPreviewableType(rt) && res.CurrentConnection.Capabilities.SupportsResourcePreviews;
+ return ResourcePreviewEngine.IsPreviewableType(rt) && res.CurrentConnection.Capabilities.SupportsResourcePreviewUrls;
}
return false;
}
Modified: sandbox/maestro-3.0/Maestro.Base/Events/EventWatcher.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Events/EventWatcher.cs 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/Maestro.Base/Events/EventWatcher.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -23,6 +23,8 @@
using Maestro.Base.Services;
using System.Diagnostics;
using Maestro.Base.UI;
+using Maestro.Editors.Diagnostics;
+using OSGeo.MapGuide.MaestroAPI.Services;
namespace Maestro.Base.Events
{
@@ -44,6 +46,10 @@
Debug.Assert(wb.ActiveSiteExplorer.ConnectionName == name);
wb.ActiveSiteExplorer = null;
+
+ //TODO: Review this API design when we do decide to support multiple
+ //site connections
+ ServerStatusMonitor.Init(null);
}
static void OnConnectionAdded(object sender, string name)
@@ -51,7 +57,19 @@
var exp = new SiteExplorer(name);
var wb = Workbench.Instance;
wb.ShowContent(exp);
+
+ var svc = ServiceRegistry.GetService<ServerConnectionManager>();
+ var conn = svc.GetConnection(name);
+ ISiteService siteSvc = null;
+ var svcTypes = conn.Capabilities.SupportedServices;
+ if (Array.IndexOf(svcTypes, (int)ServiceType.Site) >= 0)
+ {
+ siteSvc = (ISiteService)conn.GetService((int)ServiceType.Site);
+ }
+ //TODO: Review this API design when we do decide to support multiple
+ //site connections
+ ServerStatusMonitor.Init(siteSvc);
}
}
}
Modified: sandbox/maestro-3.0/Maestro.Base/Maestro.Base.addin
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Maestro.Base.addin 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/Maestro.Base/Maestro.Base.addin 2010-10-25 06:57:06 UTC (rev 5323)
@@ -150,6 +150,9 @@
<MenuItem id="LocalFsPreview"
label="${res:LocalFsPreview}"
class="Maestro.Base.Commands.LocalFeatureSourcePreviewCommand"/>
+ <MenuItem id="ServerMonitor"
+ label="${res:ServerMonitor}"
+ class="Maestro.Base.Commands.ServerMonitorCommand"/>
<MenuItem type="Separator" />
<MenuItem id="Menu_Tools_Options"
label="${res:Menu_Tools_Options}"
Modified: sandbox/maestro-3.0/Maestro.Base/Maestro.Base.csproj
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Maestro.Base.csproj 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/Maestro.Base/Maestro.Base.csproj 2010-10-25 06:57:06 UTC (rev 5323)
@@ -72,6 +72,7 @@
<Compile Include="Commands\QuitCommand.cs" />
<Compile Include="Commands\SaveResourceAsCommand.cs" />
<Compile Include="Commands\SaveResourceCommand.cs" />
+ <Compile Include="Commands\ServerMonitorCommand.cs" />
<Compile Include="Commands\SiteExplorer\DeleteSelectedItemsCommand.cs" />
<Compile Include="Commands\SiteExplorer\DisconnectCommand.cs" />
<Compile Include="Commands\SiteExplorer\MigrateSelectedResourcesCommand.cs" />
Modified: sandbox/maestro-3.0/Maestro.Base/Properties/Resources.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Properties/Resources.Designer.cs 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/Maestro.Base/Properties/Resources.Designer.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -1206,6 +1206,15 @@
}
/// <summary>
+ /// Looks up a localized string similar to Server Status Monitor.
+ /// </summary>
+ internal static string ServerMonitor {
+ get {
+ return ResourceManager.GetString("ServerMonitor", resourceCulture);
+ }
+ }
+
+ /// <summary>
/// Looks up a localized string similar to Initialized: Open Resource Manager.
/// </summary>
internal static string Service_Init_Open_Resource_Manager {
Modified: sandbox/maestro-3.0/Maestro.Base/Properties/Resources.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Base/Properties/Resources.resx 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/Maestro.Base/Properties/Resources.resx 2010-10-25 06:57:06 UTC (rev 5323)
@@ -757,4 +757,7 @@
<data name="LocateExecutable" xml:space="preserve">
<value>Locate executable: {0}</value>
</data>
+ <data name="ServerMonitor" xml:space="preserve">
+ <value>Server Status Monitor</value>
+ </data>
</root>
\ No newline at end of file
Copied: sandbox/maestro-3.0/Maestro.Editors/Diagnostics/ServerStatusMonitor.cs (from rev 5244, trunk/Tools/Maestro/Maestro/ServerStatusMonitor.cs)
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Diagnostics/ServerStatusMonitor.cs (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/Diagnostics/ServerStatusMonitor.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -0,0 +1,140 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+//
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using OSGeo.MapGuide.MaestroAPI;
+using System.Globalization;
+using OSGeo.MapGuide.MaestroAPI.Services;
+
+namespace Maestro.Editors.Diagnostics
+{
+ public partial class ServerStatusMonitor : Form
+ {
+ private ServerStatusMonitor()
+ {
+ InitializeComponent();
+ }
+
+ private void ServerStatusMonitor_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ e.Cancel = true;
+ ServerStatusMonitor.HideWindow();
+ }
+
+ private void StartTimer() { pollTimer.Start(); }
+
+ private void StopTimer() { pollTimer.Stop(); }
+
+ public static void Init(ISiteService conn)
+ {
+ _smConn = conn;
+
+ if (_smMonitor != null)
+ _smMonitor.Dispose();
+
+ if (_smConn != null)
+ _smMonitor = new ServerStatusMonitor();
+ }
+
+ private static ISiteService _smConn;
+
+ private static ServerStatusMonitor _smMonitor;
+
+ public static void ShowWindow()
+ {
+ if (_smConn != null)
+ {
+ _smMonitor.DoPoll();
+ _smMonitor.StartTimer();
+ _smMonitor.Show();
+ }
+ else
+ {
+ throw new InvalidOperationException(Properties.Resources.NoSiteService);
+ }
+ }
+
+ public static void HideWindow()
+ {
+ _smMonitor.StopTimer();
+ _smMonitor.Hide();
+ }
+
+ private void pollTimer_Tick(object sender, EventArgs e)
+ {
+ DoPoll();
+ }
+
+ private static string ParseMs(string value)
+ {
+ return value + " " + Properties.Resources.UnitsMs;
+ }
+
+ private static string ParseSeconds(string value)
+ {
+ return value + " " + Properties.Resources.UnitsSeconds;
+ }
+
+ private static string ParseKb(string valueBytes)
+ {
+ double d;
+ if (double.TryParse(valueBytes,
+ NumberStyles.AllowThousands,
+ System.Threading.Thread.CurrentThread.CurrentUICulture,
+ out d))
+ {
+ return (d / 1000.0).ToString(System.Threading.Thread.CurrentThread.CurrentUICulture) + " " + Properties.Resources.UnitsKb;
+ }
+ return valueBytes;
+ }
+
+ private void DoPoll()
+ {
+ var info = _smConn.GetSiteInfo();
+
+ lblActiveConnections.Text = info.Statistics.ActiveConnections;
+ lblAdminQueueCount.Text = info.Statistics.AdminOperationsQueueCount;
+ lblAvailPhysMem.Text = ParseKb(info.SiteServer.OperatingSystem.AvailablePhysicalMemory);
+ lblAvgOpTime.Text = info.Statistics.AverageOperationTime;
+ lblClientQueueCount.Text = info.Statistics.ClientOperationsQueueCount;
+ lblCpuUtil.Text = info.Statistics.CpuUtilization;
+ lblOsVersion.Text = info.SiteServer.OperatingSystem.Version;
+ lblPhysMemTotal.Text = ParseKb(info.SiteServer.OperatingSystem.TotalPhysicalMemory);
+ lblServerDisplayName.Text = info.SiteServer.DisplayName;
+ lblServerStatus.Text = info.SiteServer.Status;
+ lblServerVersion.Text = info.SiteServer.Version;
+ lblSiteQueueCount.Text = info.Statistics.SiteOperationsQueueCount;
+ lblTotalConnections.Text = info.Statistics.TotalConnections;
+ lblTotalOpsProcessed.Text = info.Statistics.TotalOperationsProcessed;
+ lblTotalOpsReceived.Text = info.Statistics.TotalOperationsReceived;
+ lblTotalOpTime.Text = ParseSeconds(info.Statistics.TotalOperationTime);
+ lblUptime.Text = ParseSeconds(info.Statistics.Uptime);
+ lblVirtMemAvail.Text = ParseKb(info.SiteServer.OperatingSystem.AvailableVirtualMemory);
+ lblVirtMemTotal.Text = ParseKb(info.SiteServer.OperatingSystem.TotalVirtualMemory);
+
+ lblLastUpdated.Text = Properties.Resources.LastUpdated + DateTime.Now.ToString(System.Threading.Thread.CurrentThread.CurrentUICulture);
+ }
+ }
+}
Added: sandbox/maestro-3.0/Maestro.Editors/Diagnostics/ServerStatusMonitor.designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Diagnostics/ServerStatusMonitor.designer.cs (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/Diagnostics/ServerStatusMonitor.designer.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -0,0 +1,582 @@
+namespace Maestro.Editors.Diagnostics
+{
+ partial class ServerStatusMonitor
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ServerStatusMonitor));
+ this.pollTimer = new System.Windows.Forms.Timer(this.components);
+ this.label1 = new System.Windows.Forms.Label();
+ this.label2 = new System.Windows.Forms.Label();
+ this.label3 = new System.Windows.Forms.Label();
+ this.statusStrip1 = new System.Windows.Forms.StatusStrip();
+ this.lblLastUpdated = new System.Windows.Forms.ToolStripStatusLabel();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.lblServerDisplayName = new System.Windows.Forms.Label();
+ this.lblServerStatus = new System.Windows.Forms.Label();
+ this.lblServerVersion = new System.Windows.Forms.Label();
+ this.groupBox2 = new System.Windows.Forms.GroupBox();
+ this.lblOsVersion = new System.Windows.Forms.Label();
+ this.lblVirtMemTotal = new System.Windows.Forms.Label();
+ this.label7 = new System.Windows.Forms.Label();
+ this.lblVirtMemAvail = new System.Windows.Forms.Label();
+ this.label6 = new System.Windows.Forms.Label();
+ this.lblPhysMemTotal = new System.Windows.Forms.Label();
+ this.label5 = new System.Windows.Forms.Label();
+ this.lblAvailPhysMem = new System.Windows.Forms.Label();
+ this.label4 = new System.Windows.Forms.Label();
+ this.groupBox3 = new System.Windows.Forms.GroupBox();
+ this.lblUptime = new System.Windows.Forms.Label();
+ this.lblCpuUtil = new System.Windows.Forms.Label();
+ this.label25 = new System.Windows.Forms.Label();
+ this.lblTotalOpsReceived = new System.Windows.Forms.Label();
+ this.lblAvgOpTime = new System.Windows.Forms.Label();
+ this.label14 = new System.Windows.Forms.Label();
+ this.lblSiteQueueCount = new System.Windows.Forms.Label();
+ this.label15 = new System.Windows.Forms.Label();
+ this.lblClientQueueCount = new System.Windows.Forms.Label();
+ this.lblTotalOpsProcessed = new System.Windows.Forms.Label();
+ this.lblAdminQueueCount = new System.Windows.Forms.Label();
+ this.label16 = new System.Windows.Forms.Label();
+ this.label17 = new System.Windows.Forms.Label();
+ this.lblTotalConnections = new System.Windows.Forms.Label();
+ this.label18 = new System.Windows.Forms.Label();
+ this.label9 = new System.Windows.Forms.Label();
+ this.lblActiveConnections = new System.Windows.Forms.Label();
+ this.label10 = new System.Windows.Forms.Label();
+ this.label11 = new System.Windows.Forms.Label();
+ this.lblTotalOpTime = new System.Windows.Forms.Label();
+ this.label12 = new System.Windows.Forms.Label();
+ this.label13 = new System.Windows.Forms.Label();
+ this.statusStrip1.SuspendLayout();
+ this.groupBox1.SuspendLayout();
+ this.groupBox2.SuspendLayout();
+ this.groupBox3.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // pollTimer
+ //
+ this.pollTimer.Interval = 5000;
+ this.pollTimer.Tick += new System.EventHandler(this.pollTimer_Tick);
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label1.Location = new System.Drawing.Point(18, 25);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(84, 13);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "Display Name";
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label2.Location = new System.Drawing.Point(18, 50);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(43, 13);
+ this.label2.TabIndex = 1;
+ this.label2.Text = "Status";
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label3.Location = new System.Drawing.Point(18, 74);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(49, 13);
+ this.label3.TabIndex = 2;
+ this.label3.Text = "Version";
+ //
+ // statusStrip1
+ //
+ this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.lblLastUpdated});
+ this.statusStrip1.Location = new System.Drawing.Point(0, 311);
+ this.statusStrip1.Name = "statusStrip1";
+ this.statusStrip1.Size = new System.Drawing.Size(620, 22);
+ this.statusStrip1.TabIndex = 3;
+ //
+ // lblLastUpdated
+ //
+ this.lblLastUpdated.Name = "lblLastUpdated";
+ this.lblLastUpdated.Size = new System.Drawing.Size(0, 17);
+ //
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.lblServerDisplayName);
+ this.groupBox1.Controls.Add(this.lblServerStatus);
+ this.groupBox1.Controls.Add(this.lblServerVersion);
+ this.groupBox1.Controls.Add(this.label1);
+ this.groupBox1.Controls.Add(this.label2);
+ this.groupBox1.Controls.Add(this.label3);
+ this.groupBox1.Location = new System.Drawing.Point(12, 12);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(288, 97);
+ this.groupBox1.TabIndex = 4;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "Server";
+ //
+ // lblServerDisplayName
+ //
+ this.lblServerDisplayName.AutoSize = true;
+ this.lblServerDisplayName.Location = new System.Drawing.Point(162, 25);
+ this.lblServerDisplayName.Name = "lblServerDisplayName";
+ this.lblServerDisplayName.Size = new System.Drawing.Size(0, 13);
+ this.lblServerDisplayName.TabIndex = 3;
+ //
+ // lblServerStatus
+ //
+ this.lblServerStatus.AutoSize = true;
+ this.lblServerStatus.Location = new System.Drawing.Point(162, 50);
+ this.lblServerStatus.Name = "lblServerStatus";
+ this.lblServerStatus.Size = new System.Drawing.Size(0, 13);
+ this.lblServerStatus.TabIndex = 4;
+ //
+ // lblServerVersion
+ //
+ this.lblServerVersion.AutoSize = true;
+ this.lblServerVersion.Location = new System.Drawing.Point(162, 74);
+ this.lblServerVersion.Name = "lblServerVersion";
+ this.lblServerVersion.Size = new System.Drawing.Size(0, 13);
+ this.lblServerVersion.TabIndex = 5;
+ //
+ // groupBox2
+ //
+ this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)));
+ this.groupBox2.Controls.Add(this.lblOsVersion);
+ this.groupBox2.Controls.Add(this.lblVirtMemTotal);
+ this.groupBox2.Controls.Add(this.label7);
+ this.groupBox2.Controls.Add(this.lblVirtMemAvail);
+ this.groupBox2.Controls.Add(this.label6);
+ this.groupBox2.Controls.Add(this.lblPhysMemTotal);
+ this.groupBox2.Controls.Add(this.label5);
+ this.groupBox2.Controls.Add(this.lblAvailPhysMem);
+ this.groupBox2.Controls.Add(this.label4);
+ this.groupBox2.Location = new System.Drawing.Point(12, 115);
+ this.groupBox2.Name = "groupBox2";
+ this.groupBox2.Size = new System.Drawing.Size(288, 181);
+ this.groupBox2.TabIndex = 5;
+ this.groupBox2.TabStop = false;
+ this.groupBox2.Text = "Operating System";
+ //
+ // lblOsVersion
+ //
+ this.lblOsVersion.AutoSize = true;
+ this.lblOsVersion.Location = new System.Drawing.Point(18, 26);
+ this.lblOsVersion.Name = "lblOsVersion";
+ this.lblOsVersion.Size = new System.Drawing.Size(0, 13);
+ this.lblOsVersion.TabIndex = 21;
+ //
+ // lblVirtMemTotal
+ //
+ this.lblVirtMemTotal.AutoSize = true;
+ this.lblVirtMemTotal.Location = new System.Drawing.Point(182, 133);
+ this.lblVirtMemTotal.Name = "lblVirtMemTotal";
+ this.lblVirtMemTotal.Size = new System.Drawing.Size(0, 13);
+ this.lblVirtMemTotal.TabIndex = 20;
+ this.lblVirtMemTotal.Tag = "";
+ //
+ // label7
+ //
+ this.label7.AutoSize = true;
+ this.label7.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label7.Location = new System.Drawing.Point(18, 133);
+ this.label7.Name = "label7";
+ this.label7.Size = new System.Drawing.Size(123, 13);
+ this.label7.TabIndex = 15;
+ this.label7.Text = "Total Virtual Memory";
+ //
+ // lblVirtMemAvail
+ //
+ this.lblVirtMemAvail.AutoSize = true;
+ this.lblVirtMemAvail.Location = new System.Drawing.Point(182, 110);
+ this.lblVirtMemAvail.Name = "lblVirtMemAvail";
+ this.lblVirtMemAvail.Size = new System.Drawing.Size(0, 13);
+ this.lblVirtMemAvail.TabIndex = 19;
+ this.lblVirtMemAvail.Tag = "";
+ //
+ // label6
+ //
+ this.label6.AutoSize = true;
+ this.label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label6.Location = new System.Drawing.Point(18, 110);
+ this.label6.Name = "label6";
+ this.label6.Size = new System.Drawing.Size(146, 13);
+ this.label6.TabIndex = 14;
+ this.label6.Text = "Available Virtual Memory";
+ //
+ // lblPhysMemTotal
+ //
+ this.lblPhysMemTotal.AutoSize = true;
+ this.lblPhysMemTotal.Location = new System.Drawing.Point(182, 86);
+ this.lblPhysMemTotal.Name = "lblPhysMemTotal";
+ this.lblPhysMemTotal.Size = new System.Drawing.Size(0, 13);
+ this.lblPhysMemTotal.TabIndex = 18;
+ this.lblPhysMemTotal.Tag = "";
+ //
+ // label5
+ //
+ this.label5.AutoSize = true;
+ this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label5.Location = new System.Drawing.Point(18, 86);
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size(134, 13);
+ this.label5.TabIndex = 13;
+ this.label5.Text = "Total Physical Memory";
+ //
+ // lblAvailPhysMem
+ //
+ this.lblAvailPhysMem.AutoSize = true;
+ this.lblAvailPhysMem.Location = new System.Drawing.Point(182, 62);
+ this.lblAvailPhysMem.Name = "lblAvailPhysMem";
+ this.lblAvailPhysMem.Size = new System.Drawing.Size(0, 13);
+ this.lblAvailPhysMem.TabIndex = 17;
+ this.lblAvailPhysMem.Tag = "";
+ //
+ // label4
+ //
+ this.label4.AutoSize = true;
+ this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label4.Location = new System.Drawing.Point(18, 62);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(157, 13);
+ this.label4.TabIndex = 12;
+ this.label4.Text = "Available Physical Memory";
+ //
+ // groupBox3
+ //
+ this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.groupBox3.Controls.Add(this.lblUptime);
+ this.groupBox3.Controls.Add(this.lblCpuUtil);
+ this.groupBox3.Controls.Add(this.label25);
+ this.groupBox3.Controls.Add(this.lblTotalOpsReceived);
+ this.groupBox3.Controls.Add(this.lblAvgOpTime);
+ this.groupBox3.Controls.Add(this.label14);
+ this.groupBox3.Controls.Add(this.lblSiteQueueCount);
+ this.groupBox3.Controls.Add(this.label15);
+ this.groupBox3.Controls.Add(this.lblClientQueueCount);
+ this.groupBox3.Controls.Add(this.lblTotalOpsProcessed);
+ this.groupBox3.Controls.Add(this.lblAdminQueueCount);
+ this.groupBox3.Controls.Add(this.label16);
+ this.groupBox3.Controls.Add(this.label17);
+ this.groupBox3.Controls.Add(this.lblTotalConnections);
+ this.groupBox3.Controls.Add(this.label18);
+ this.groupBox3.Controls.Add(this.label9);
+ this.groupBox3.Controls.Add(this.lblActiveConnections);
+ this.groupBox3.Controls.Add(this.label10);
+ this.groupBox3.Controls.Add(this.label11);
+ this.groupBox3.Controls.Add(this.lblTotalOpTime);
+ this.groupBox3.Controls.Add(this.label12);
+ this.groupBox3.Controls.Add(this.label13);
+ this.groupBox3.Location = new System.Drawing.Point(306, 12);
+ this.groupBox3.Name = "groupBox3";
+ this.groupBox3.Size = new System.Drawing.Size(302, 284);
+ this.groupBox3.TabIndex = 6;
+ this.groupBox3.TabStop = false;
+ this.groupBox3.Text = "Statistics";
+ //
+ // lblUptime
+ //
+ this.lblUptime.AutoSize = true;
+ this.lblUptime.Location = new System.Drawing.Point(220, 254);
+ this.lblUptime.Name = "lblUptime";
+ this.lblUptime.Size = new System.Drawing.Size(0, 13);
+ this.lblUptime.TabIndex = 13;
+ //
+ // lblCpuUtil
+ //
+ this.lblCpuUtil.AutoSize = true;
+ this.lblCpuUtil.Location = new System.Drawing.Point(220, 118);
+ this.lblCpuUtil.Name = "lblCpuUtil";
+ this.lblCpuUtil.Size = new System.Drawing.Size(0, 13);
+ this.lblCpuUtil.TabIndex = 16;
+ //
+ // label25
+ //
+ this.label25.AutoSize = true;
+ this.label25.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label25.Location = new System.Drawing.Point(18, 254);
+ this.label25.Name = "label25";
+ this.label25.Size = new System.Drawing.Size(46, 13);
+ this.label25.TabIndex = 12;
+ this.label25.Text = "Uptime";
+ //
+ // lblTotalOpsReceived
+ //
+ this.lblTotalOpsReceived.AutoSize = true;
+ this.lblTotalOpsReceived.Location = new System.Drawing.Point(220, 234);
+ this.lblTotalOpsReceived.Name = "lblTotalOpsReceived";
+ this.lblTotalOpsReceived.Size = new System.Drawing.Size(0, 13);
+ this.lblTotalOpsReceived.TabIndex = 4;
+ //
+ // lblAvgOpTime
+ //
+ this.lblAvgOpTime.AutoSize = true;
+ this.lblAvgOpTime.Location = new System.Drawing.Point(220, 96);
+ this.lblAvgOpTime.Name = "lblAvgOpTime";
+ this.lblAvgOpTime.Size = new System.Drawing.Size(0, 13);
+ this.lblAvgOpTime.TabIndex = 15;
+ //
+ // label14
+ //
+ this.label14.AutoSize = true;
+ this.label14.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label14.Location = new System.Drawing.Point(18, 234);
+ this.label14.Name = "label14";
+ this.label14.Size = new System.Drawing.Size(159, 13);
+ this.label14.TabIndex = 14;
+ this.label14.Text = "Total Operations Received";
+ //
+ // lblSiteQueueCount
+ //
+ this.lblSiteQueueCount.AutoSize = true;
+ this.lblSiteQueueCount.Location = new System.Drawing.Point(220, 73);
+ this.lblSiteQueueCount.Name = "lblSiteQueueCount";
+ this.lblSiteQueueCount.Size = new System.Drawing.Size(0, 13);
+ this.lblSiteQueueCount.TabIndex = 14;
+ //
+ // label15
+ //
+ this.label15.AutoSize = true;
+ this.label15.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label15.Location = new System.Drawing.Point(18, 212);
+ this.label15.Name = "label15";
+ this.label15.Size = new System.Drawing.Size(164, 13);
+ this.label15.TabIndex = 13;
+ this.label15.Text = "Total Operations Processed";
+ //
+ // lblClientQueueCount
+ //
+ this.lblClientQueueCount.AutoSize = true;
+ this.lblClientQueueCount.Location = new System.Drawing.Point(220, 49);
+ this.lblClientQueueCount.Name = "lblClientQueueCount";
+ this.lblClientQueueCount.Size = new System.Drawing.Size(0, 13);
+ this.lblClientQueueCount.TabIndex = 13;
+ //
+ // lblTotalOpsProcessed
+ //
+ this.lblTotalOpsProcessed.AutoSize = true;
+ this.lblTotalOpsProcessed.Location = new System.Drawing.Point(220, 212);
+ this.lblTotalOpsProcessed.Name = "lblTotalOpsProcessed";
+ this.lblTotalOpsProcessed.Size = new System.Drawing.Size(0, 13);
+ this.lblTotalOpsProcessed.TabIndex = 3;
+ //
+ // lblAdminQueueCount
+ //
+ this.lblAdminQueueCount.AutoSize = true;
+ this.lblAdminQueueCount.Location = new System.Drawing.Point(220, 25);
+ this.lblAdminQueueCount.Name = "lblAdminQueueCount";
+ this.lblAdminQueueCount.Size = new System.Drawing.Size(0, 13);
+ this.lblAdminQueueCount.TabIndex = 12;
+ //
+ // label16
+ //
+ this.label16.AutoSize = true;
+ this.label16.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label16.Location = new System.Drawing.Point(18, 189);
+ this.label16.Name = "label16";
+ this.label16.Size = new System.Drawing.Size(110, 13);
+ this.label16.TabIndex = 12;
+ this.label16.Text = "Total Connections";
+ //
+ // label17
+ //
+ this.label17.AutoSize = true;
+ this.label17.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label17.Location = new System.Drawing.Point(18, 165);
+ this.label17.Name = "label17";
+ this.label17.Size = new System.Drawing.Size(117, 13);
+ this.label17.TabIndex = 11;
+ this.label17.Text = "Active Connections";
+ //
+ // lblTotalConnections
+ //
+ this.lblTotalConnections.AutoSize = true;
+ this.lblTotalConnections.Location = new System.Drawing.Point(220, 189);
+ this.lblTotalConnections.Name = "lblTotalConnections";
+ this.lblTotalConnections.Size = new System.Drawing.Size(0, 13);
+ this.lblTotalConnections.TabIndex = 2;
+ //
+ // label18
+ //
+ this.label18.AutoSize = true;
+ this.label18.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label18.Location = new System.Drawing.Point(18, 141);
+ this.label18.Name = "label18";
+ this.label18.Size = new System.Drawing.Size(126, 13);
+ this.label18.TabIndex = 10;
+ this.label18.Text = "Total Operation Time";
+ //
+ // label9
+ //
+ this.label9.AutoSize = true;
+ this.label9.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label9.Location = new System.Drawing.Point(18, 118);
+ this.label9.Name = "label9";
+ this.label9.Size = new System.Drawing.Size(92, 13);
+ this.label9.TabIndex = 9;
+ this.label9.Text = "CPU Utilization";
+ //
+ // lblActiveConnections
+ //
+ this.lblActiveConnections.AutoSize = true;
+ this.lblActiveConnections.Location = new System.Drawing.Point(220, 165);
+ this.lblActiveConnections.Name = "lblActiveConnections";
+ this.lblActiveConnections.Size = new System.Drawing.Size(0, 13);
+ this.lblActiveConnections.TabIndex = 1;
+ //
+ // label10
+ //
+ this.label10.AutoSize = true;
+ this.label10.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label10.Location = new System.Drawing.Point(18, 96);
+ this.label10.Name = "label10";
+ this.label10.Size = new System.Drawing.Size(123, 13);
+ this.label10.TabIndex = 8;
+ this.label10.Text = "Avg. Operation Time";
+ //
+ // label11
+ //
+ this.label11.AutoSize = true;
+ this.label11.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label11.Location = new System.Drawing.Point(18, 73);
+ this.label11.Name = "label11";
+ this.label11.Size = new System.Drawing.Size(166, 13);
+ this.label11.TabIndex = 7;
+ this.label11.Text = "Site Operation Queue Count";
+ //
+ // lblTotalOpTime
+ //
+ this.lblTotalOpTime.AutoSize = true;
+ this.lblTotalOpTime.Location = new System.Drawing.Point(220, 141);
+ this.lblTotalOpTime.Name = "lblTotalOpTime";
+ this.lblTotalOpTime.Size = new System.Drawing.Size(0, 13);
+ this.lblTotalOpTime.TabIndex = 0;
+ //
+ // label12
+ //
+ this.label12.AutoSize = true;
+ this.label12.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label12.Location = new System.Drawing.Point(18, 49);
+ this.label12.Name = "label12";
+ this.label12.Size = new System.Drawing.Size(176, 13);
+ this.label12.TabIndex = 6;
+ this.label12.Text = "Client Operation Queue Count";
+ //
+ // label13
+ //
+ this.label13.AutoSize = true;
+ this.label13.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label13.Location = new System.Drawing.Point(18, 25);
+ this.label13.Name = "label13";
+ this.label13.Size = new System.Drawing.Size(178, 13);
+ this.label13.TabIndex = 5;
+ this.label13.Text = "Admin Operation Queue Count";
+ //
+ // ServerStatusMonitor
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(620, 333);
+ this.Controls.Add(this.groupBox3);
+ this.Controls.Add(this.groupBox2);
+ this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.statusStrip1);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "ServerStatusMonitor";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "Server Status";
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ServerStatusMonitor_FormClosing);
+ this.statusStrip1.ResumeLayout(false);
+ this.statusStrip1.PerformLayout();
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.groupBox2.ResumeLayout(false);
+ this.groupBox2.PerformLayout();
+ this.groupBox3.ResumeLayout(false);
+ this.groupBox3.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Timer pollTimer;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.StatusStrip statusStrip1;
+ private System.Windows.Forms.ToolStripStatusLabel lblLastUpdated;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.GroupBox groupBox2;
+ private System.Windows.Forms.Label lblServerDisplayName;
+ private System.Windows.Forms.Label lblServerStatus;
+ private System.Windows.Forms.Label lblServerVersion;
+ private System.Windows.Forms.GroupBox groupBox3;
+ private System.Windows.Forms.Label lblCpuUtil;
+ private System.Windows.Forms.Label lblTotalOpsReceived;
+ private System.Windows.Forms.Label lblAvgOpTime;
+ private System.Windows.Forms.Label label14;
+ private System.Windows.Forms.Label lblSiteQueueCount;
+ private System.Windows.Forms.Label label15;
+ private System.Windows.Forms.Label lblClientQueueCount;
+ private System.Windows.Forms.Label lblTotalOpsProcessed;
+ private System.Windows.Forms.Label lblAdminQueueCount;
+ private System.Windows.Forms.Label label16;
+ private System.Windows.Forms.Label label17;
+ private System.Windows.Forms.Label lblTotalConnections;
+ private System.Windows.Forms.Label label18;
+ private System.Windows.Forms.Label label9;
+ private System.Windows.Forms.Label lblActiveConnections;
+ private System.Windows.Forms.Label label10;
+ private System.Windows.Forms.Label label11;
+ private System.Windows.Forms.Label lblTotalOpTime;
+ private System.Windows.Forms.Label label12;
+ private System.Windows.Forms.Label label13;
+ private System.Windows.Forms.Label lblUptime;
+ private System.Windows.Forms.Label label25;
+ private System.Windows.Forms.Label lblOsVersion;
+ private System.Windows.Forms.Label lblVirtMemTotal;
+ private System.Windows.Forms.Label label7;
+ private System.Windows.Forms.Label lblVirtMemAvail;
+ private System.Windows.Forms.Label label6;
+ private System.Windows.Forms.Label lblPhysMemTotal;
+ private System.Windows.Forms.Label label5;
+ private System.Windows.Forms.Label lblAvailPhysMem;
+ private System.Windows.Forms.Label label4;
+ }
+}
\ No newline at end of file
Added: sandbox/maestro-3.0/Maestro.Editors/Diagnostics/ServerStatusMonitor.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Diagnostics/ServerStatusMonitor.resx (rev 0)
+++ sandbox/maestro-3.0/Maestro.Editors/Diagnostics/ServerStatusMonitor.resx 2010-10-25 06:57:06 UTC (rev 5323)
@@ -0,0 +1,630 @@
+<?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="pollTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>17, 17</value>
+ </metadata>
+ <metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>120, 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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
+ AAAABwAA4AAAAAAHAADgAAAAAAcAAPAAAAAADwAA////////AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/
+ AAAA//8A/wAAAP8A/wD//wAA////AAAAiIiIiIiIiIiIiIiIAAAAiIiIiIiIiIiIiIiIiIgAAIj////4
+ +PiIiIiIiIiHAACPiIh4iIh4iIiIiIV/+AAAiPd3d3d3d3eIiIh3mIcAAI/4/4+IiIiIiIiIiIj4AACI
+ j4/4////j4j4/4+PhwAACIiHiHh4eIeIeHeHh4AAAAAAAAAAAAAAAAAAAAAAAAAIeIeIeIeHiHh4eHh4
+ cAAAiPj4+PiPj4j4+PiI+IgAAH+IiIiIiIiIiIiGeIj3AACPiIeHeH54d3d+d2eIiAAAf4jGzsfIx858
+ jHd8iPcAAIiH6IiIiOiIjofI53iIAACPiMjIzo6OjnfI7HyIiAAAf4jIjoh3eHjI7IyHePcAAI+Hfnd3
+ 5+fojt53x+iIAACI98h3jIyIyMjIyOWIiAAAiIh4d+fI6I6H53yMiIgAAI+IyOfI7IyMjIyHdoiIAAB/
+ iGjIzIeIeOh3yOWIiAAAj4jIfIzsjIyMjoyMiIgAAIj36M7IyI6IeMjIhoiIAACPiMfIx4d4yMjofIyI
+ 9wAAf4jIx+yOh4joyIh2iIgAAI+IaOd4d8jIyIyMjIj3AACI+MfHzHx3Z3x2dnaIiAAAj4//////+Pj4
+ +I+Ij/cAAIj/j4/4+P+P+P/4//iIAACIiIiIiIiIiIiIiIiIiAAAAAAAAAAAAAAAAAAAAAAA8AAAD8AA
+ AAPAAAADwAAAA8AAAAPAAAADwAAAA+AAAAf/////4AAAB8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AA
+ AAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA///
+ //8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAA
+ AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AACIiIiIiIiIiIiIAACP
+ +Pj4iIiIiIiIAAj4iIiIiIiIiIeIgAj4h4d4d4iIiHePgAiP/4/4+IiI+Pj4gACIeIiIiIiIeHh4AAAA
+ AAAAAAAAAAAAAACIiIiIiIiIiIiIAAiPj4j4iIiIh2+IgAj4d3fId3d353eIgAiIyOiOjo53fIz4gAj/
+ aMjId4yMjIaIgAiIeH6Ojojozoz4gAj4yMh8jIyMjIeIgAj/aIfniOh+jIyPgAiId+yM53d8h+eIgAj/
+ yHx8h3eHyMeIgAiPaMjIeMjI6Iz4gAj4fIzneOiMjIb4gAj4eMjIjIeIeHz4gAj/xnZ8d8bGxnePgAiP
+ ////j////4+IgACI+I+PiPiI+Ij4AAAIiIiIiIiIiIiAAMAAAwDAAAMAgAABAIAAAQCAAAEAwAADAP//
+ /wDAAAMAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAA
+ AQDAAAMA4AAHACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA
+ AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8ACIiIiIiI
+ iIAI+IiIiIiIgAiIiIiIiHiACIiIiIiIiIAAj4iIiIiIAAj4j4iIiIiACId8h+d8eIAIjI6Oh+jIgAiI
+ 6HjIyGiACIyMjojIyIAIiHyMjI54gAiOyMiOfIiACIfOiMiIyIAIh3x3fHx4gAj///j///iAAIiIiIiI
+ iACAAQAAgAEAAIABAACAAQAAwAMAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIAB
+ AADAAwAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAABycnIAdHNzAJdV
+ PgCZVj4AnFg/AOdgPgDoYT8AnVhAAKJbQQClYEYAq2JGAKdnTwCsZEgArGlPALBkRwCxZkkAsmtPAK1q
+ UACybFEAtnJXAL91XgCrdWEAr3hlALB5ZQC1fWkA6GZDAOhrRADpbEsA6XFHAOlzSgDqe00A6nNTAOt8
+ VADqdlgA63pcAMZ7YwDLfmQA635iAD2sRwBFq00AWqFaAFiuXQBknWEAXbZkALKCcQDqhFEA64xWAOuD
+ XADsjV4A7JRcAO2aXQDHgGYAyoFmAMqFaADKimwAypBvAMqUcQDsgWQA7YtiAOyEagDti2wA7ZNlAO2f
+ YADtkmwA7ptrAOKMdQDtjHMA4494AO6PeADuk3MA7pp0AOOQeQDuk3oA75x4APCbeQDuo2MA76lmAO6k
+ bgDvrGoA77NsAO+4bgDvo3QA76pxAO+heQDwqnUA8KZ5APCregDvtnAA8LN2APCzewDwuHoAIyKdABkZ
+ rgAjI6kAYV2VAEpKuwBuarIATk7FAHZ20QCBfcEAjoyMAJWIkwCflpMAn56dALSPggColo4At5GEALiR
+ hAC/mIoAoJeUAKmXkACgmJUAqpiRAKyakwCrmpQArJuUAKyclQCim5gAppuYAKOcmgCknZsApJ6cAK2e
+ mACloJ4Ar6CaALCgmgCwop0AsaSfALWmnwCelbYAqp2yAKaioQCvqaYArq6uALKloAC0pqIAsqOlALWo
+ ogC1qaUAuaulALqtqQC9sKsAvbGtALOzswC3srEAubSzAMGajADFnpAA75eAAO6ahADvnogA8JeAAPCa
+ hADwnokAxqCSAMihkgDMqJsA0KmZAO+giwDwpoAA8KyCAPChjADxtIQA8ryJAM2soADBsasAwLOtAMSy
+ rQDBtK4AxL+vAMK1sQDBt7QAx7W2AMO4swDHuLIAwri1AMS5tQDLu7UAxL68AMi+ugDMvroAyb+8ANO/
+ uADWv7gA8cGFAPLCiwDMwLsAysG9AMzCvgDOxL8A1cK6ANnEvQC+t9AAxr3LAMvDwADNw8AAzcXBAM/H
+ xADPyMQA0MbDANvHwADQyMUA28jAANzJwQDYysQA3crEAN7MxgDSy8gA1M3KANXPzADfzsgA1dPHANbQ
+ zQDf0MoA2dLOANvT0ADa1NEA3NXSAN3W1ADe2NYA39nYAODPyQDg0MoA4dLNAOLUzgDj1dAA5NbRAOXY
+ 0wDm2dUA6NvXAOjc1wDo3dgA5+DdAOrg3ADs4t4A7ePgAOnm4wDt5eEA6ubkAO3n5ADs6OYA7enoAPDn
+ 5ADw6eYA8eroAPLs6gDz7uwA9O7tAPTw7gD28vEA9/TyAPj08wD49vQA+fj2AP///wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArIuLi4uLi4iIiIiAgIB9fXt7
+ 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
+ UACwaFAAtm5XAL9wVAC3cFgAuHJZALh1WwC+dVoAuXldAL15XQC6fl8AvXxeAKt8awC9fmAAwHNZAMF0
+ WgDEdVoA6GVCAOlsRQDpakkA6W1NAOpySADqdE8A6nlMAOpxUgDqdVIA6nNUAOp1VQDrflAA639VAOt2
+ WADreFoA639aAOt5XQDse18A635eAOx+XADsfmEASbFSALuAYAC8gGAAsoJwALSDcgC1hHIAs4R1ALeG
+ dAC4h3UAuoh2AL6NegDrhFIA641WAOyAWADsgV4A7IteAOyTWgDtnl8A3INqAMCOewDBj3wA24x1ANyP
+ eADDkX4A3ZB5AOyFYwDsgWYA7IRlAOyJYQDsj2EA7YtlAOyEagDtiWkA7Y1oAO2IbgDtjW0A7ZdmAO2Z
+ YQDunGQA7pFoAO2UaQDukG4A7pVuAO6abgDunW4A7YxzAO6QcQDvlnIA7pJ2AO6VdQDvm3MA7p5yAO+a
+ dgDvnXYA7pF5AO+VeQDvk3wA75V9AO+beADwmXoA7qNiAO6nZQDvrGcA76JtAO+0awDvtm4A7qFyAO+h
+ dwDvp3YA76h0AO+jeADvpHoA8K5zAPCsdQDwp3gA8Kp5APCueQDwrX8A8LNzAPCzdQDxsHkA8LR6APG1
+ fwDwuHkA8b59ACMjqwBhX7wAcW69AGNj0wCBd5sAh4OCAIeEggCIhIMAiYaFAIqIhwCKiIgAjYuKALqP
+ gACpl48AvJKCAKmXkACqmJEAq5qUAKyblACtnJYArp6YAJy4kACvoJoAsaGZALGinACypJ8As7CeAJeN
+ pACdj6cAp6SjAK6opgCypaAAtKaiALSoowC1qaUAtquoALetqgC5raoAuK+sALqxrgC8sq4AuquxALuz
+ sAC9tLEAvbe0AMWUggDBl4gA75aAAO+ZgQDwl4EA8JmDAPCdiADxoY0A8bWDAPG+gQDyvYYAz6+kAMG1
+ rwDVsqQA0basAMK2sgDDuLMAwri1AMa6tgDHvLYAzbu1AMa8uQDJvrkA1761ALfStAC51LYAysC7AMrA
+ vQDMwr4A2sW+AMzDwADOxcEAzsbEANvHwADQycYA28jAANzJwgDdy8QA3szFANLLyADUzMkA387IANrf
+ 1ADgz8kA4dDLAOLSzADj1M8A49XQAOTV0ADi19UA5djTAObZ1QDg3tcA6NzXAOHa2ADk3doA5t7cAOnd
+ 2QDm4N4A6eHeAOzi3gDp4uAA7ePgAOrk4QDt5eIA6ubkAO3m5ADt6OYA7uroAPDp5gDx6ugA8ezqAPDt
+ 7AD07u0A9fDuAAAAAAAAAAAA////AAAAAADS0tLS0tDS0NDIyMjIyMXFxcXFxcXFxcUAAAAAAADQsNnZ
+ 2dnR0dLQ0NDQ0MjQyMjIyMjIyMjIyJ2+AAAAAKf1+PXw8PDw5+fk5OTf39/k3+Tf5N/k5Off6pIAAAAA
+ p/rwxbCwrKyrqKinpaWlpcbFyM/Pz6GFh9bwkgAAAACn+uiQkI+Ojo6OjoqOio6OpaKjz8/PiYiG1u+S
+ AAAAAKf69vX49fDw8Ofn5N/f1tbWz8/Wz9bGoK7W8JIAAAAArNn19fX19fD18PPw8/Dw8+/v6urq6urq
+ 6urFmwAAAAAArKenp6enqKeop6elpJubm5mZmJiYkpKSkp0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAKWbm5mbmZmYmJiYmJiYmJiYlJiSmJKUlJKYAAAAAACl2fD18PD18PDw8PDw8PDz
+ 8PDw8ObKyubw8NKYAAAAAJ3w5Nvf29vW29bW1tbW2c/Pz8/PnzAwms/P8JIAAAAAnfXfyTo6OTo5ODk4
+ NjY1NjU2MzMzFhY2wM/vkgAAAACl8OQ6BxgYGBISMjIyMjISEhIQEAwMDAKRz++SAAAAAJ313zoYZ2Fq
+ d326vLuEvIN7clhOPilKB5HR8JIAAAAApfXkOhhnU1hlcoF/cHGDeG9UPycgHS8IkdPwmAAAAACl9ec6
+ GGdhYWV7e21tf4F4b1Q/PiAdSgiR0++SAAAAAKX150MYtF5hZXdUQW2Be3VvWE4nJSUvCJHT8JgAAAAA
+ pfXnQxi3YWFqVDxAVHt7cltUSj4lJUoIkdbvkgAAAACl9udHGLdnZ1MhJjtvd3JlWFM+PiUlSgqR1u+Y
+ AAAAAKX260cYuGheHB8hJmVqamFYU0opKSleCJHW8JgAAAAApfbrshi5aB0bHBw+a2phYVNKSkovL1IM
+ kdbwlQAAAACn9vBHGLkoAQEBAWFnZ2FeXkpTSkovXgiz1vCYAAAAAKf28EcaYAEBAQEdZ7RnZl5SZlJK
+ UkpmC5Hf85gAAAAAp/rwsholAQEBAUq3trRmaGZdXV5SUmYLs9vwmAAAAACn+vCyGiUbGxscuLi4uLa2
+ tGhoZmZdtAuz3/OYAAAAAKf6+LINQkJCQkJISEhGRkZGRUVFRUVFB7Pf8JgAAAAAp/rwvwkJCQUHBwcH
+ BQcEBQQEBAQDAwIEvd/zmAAAAACn+vj48PDw8PDw8PDr6+vr6+vl5eXk5OTk5PCZAAAAAKfw/Pz8/Pz8
+ +vr6+vr6+vr39/f39/X09PDw6pkAAAAA2ajHx9DFx8fIyMbFxsXFwsTExMTCwsLCwsKb0gAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAPwAAAA8AAAAPAAAADwAAAA8AAAAPAAAAD4AAAB///
+ ///gAAAHwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AA
+ AAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAAD/////ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA
+ AAAAAAAAAAEAAAABAAAAAAAA52A+AOhhPwCmYEYAqmJIAKxjSACqZEoArWVKALFmSgCxaEwAoWVQAKRn
+ UQCmaFIAqGpTAKdzYQCsd2UArnhlALB6ZgC6emEAsnxoALV+aQDoYkAA6GZBAOlsRgDpbEoA6W9NAOlw
+ RwDqd0oA6nFRAOp1VQDqeVIA63pVAOt6WQDreV0A63xfANV/ZwDZfmQA635iAOx9YQDsf2QATq9VAFao
+ WQC5jn8A64BTAOuFUgDsiFsA7IleAOyTWgDskF0A7ZteANqGaADbjm0A3YpxAN2OcQDdlXQA3JhzAN6d
+ eADmgGYA7IVhAOyBZQDtj2cA54NqAOeGbADthWoA7IdtAOeIbwDti2oA7o9pAO2IbADuj2wA7ZlmAO6U
+ aQDtmGgA6IpyAO2KcQDujXIA6I11AO6NdQDukXAA7pF1AO+VdgDumXAA7pxyAO+ZdQDpkHgA75J6AO6V
+ eQDplH4A7pV9AO+ceQDdoXgA36V8AN6sewDeqn0A7qhlAO+2bgDvoXEA76dxAO+hdgDvpXUA76hwAO+l
+ eADwrHYA8KV6APCqeADvsXEA77RwAPCxeQDwtngAX1y6AGBfwwCBeKQAnJWSAJ2XlACemJYAn5qYAKGb
+ mgCinZsAo5+dAKOgngCxoJkAsqKcALOknQC0pZ8AlomtAKShoACtpqQAtaegALappAC4q6YAua2pALyu
+ qAC+sasAu7CsAL2xrQDBk4IA75aAAO+YgQDvm4UA75yHAPCYgwDwnIcA8J6KAPChjQDAs60AwbSvAMG2
+ sQDEuLIAw7m1AMW5tQDLubMAx7a7AMa7uADGvbkAx7+8AMm/ugDIv7wAy8C7AMrAvADMwb0A0cK9ANnF
+ vgDNw8AAzcTBAM/HxADPyMUA0MbCANbFxADbx8AA0sjDANXKwADQyMYA3MnCAN3KxADezMUA0srIANPM
+ yQDYzsoA387IANnOzADW0M4A2tHNANzT0ADb1dMA3NTSAN7W1ADf2NUA4M/IAODQygDh0swA49TOAOHX
+ 0wDk1dAA4dfUAOXY0wDg2NUA5trVAOjb1wDo3NcA4drYAOTb2ADi3NoA5NzZAOPe3ADm39wA6N3ZAOfg
+ 3gDq4NwA7OLeAOji4ADt4+AA7uXiAO/n5ADv6OUA8OnmAPLs6gD07uwA9fDuAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAD///8AAAC0nJyampiYmJKSkZGEhISEhISEpgAAAACk0dHOzMzHx8fHv7+/v7+/
+ v7+/mAAAALDMx5+ampKSkYODg5aYoKGhfG2msZ8AALDMsH13d3dzc3JxcYB+kaGhb26XsZ8AALS32dnZ
+ 19fW1tHRz83Gx8bGv7HNpqYAAACShoaGhIaEhISFhYN/f3t7e3h4fwAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAACFpKSkpKSfpJ+fn5+fn5+cnJycewAAAKu3v729vL28rrG7rq6urq4pKKq7rp8AAKu3vYcU
+ FBMTExMTEBAQEBAODiqhsZ8AAKu/vQc0NDY4W11dXVo3MzIkJAqhsZ8AAKu/vwdWRVFja2pqbGRGLR4X
+ OQqhsZ8AAKvHvwdWT1FlZF5pa2NGLR8XPQqhsZ8AAKvHxgeJT1lRLzFmZmNHOiAdPQqotZ8AAKvHxgiM
+ Vk8rKy9nUVFDOiAdPQqusZ8AAKvHzQmMVh8aHjxZUU9DOiIhQQuusaQAAKvHzwmPOhUVF09ZT05AQCIi
+ TgqusaQAALDMzwlWFQIVHVZWVk5KQEA7TAq8saQAALDH0QkiFQIVToyIVlVVSkpKVQq8t58AALDM0QlK
+ ICIij4+Pj4yMiIiIVgu8t6AAALDM0RIICAgICAcHBQUHBwQEBBS9taQAALDM1dXV1dHR0c/Nzc3NyL+/
+ v7+9t6YAAACazMzMzMzMzMzMzMjIyMi/v7+/kgAAAAAAq6ukpKampKSkpKSkoqSkpKSkAAAAwAADAMAA
+ AwCAAAEAgAABAIAAAQDAAAMA////AMAAAwCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAA
+ AQCAAAEAgAABAIAAAQCAAAEAgAABAMAAAwDgAAcAKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA
+ AAAAAQAAAAEAAAAAAADoYT8AtGtTAK1yXwC/cFQAsndjALV7ZgC2fmcAuXxmALx/aQDFdFgAwXZdAMxz
+ WgDNdlwAw3hfAMR5XwDXdVgA6GNBAOhmRQDpbEUA6nJQAOp1VQDqelAA63peAMV6YADOeWEA0H5mAOx9
+ YAC5gmkA64pVAOyFXQDXhGkA2IVrANmHbgDainIA7IFhAOyCZwDsimEA7YxkAO2FawDtiG0A7YxsAO6T
+ awDum2sA7YpxAO6OdgDulHIA7pB2AO+WdADvknsA75R5AO+WfwDvm3kA7qJnAO6hbwDvrW0A76JyAO+h
+ dgDvpXkA8K53APC6dgDxtnsA8bV+AJKIsgChl74AtKmlALWsqAC3r6wAtae8ALqzsAC8trQAvbm3APCZ
+ gwDKqp8AyqugAMutoQDNrqMAzrCmANGxpQDQs6gA0bSpANW2qgDXuK0A2LuvAMO2sADEt7IAxbmzAMW5
+ tADIu7YAyby3AMe9uQDJvbkAzb65ANW7sgDWvLMA2ryxAJ7ImwClxJ8Ay8C7AMrAvADMwr0A3sW7ANrG
+ vwDFuckAzMPAAM3FwgDOx8QA0MXCANXHwgDQx8QA0cnGANvLxgDezMYA08vIANXNygDUz8wA19DOAOLV
+ 0ADk19IA5djTAOXZ1QDj29kA59zYAOne2QDr4NwA7OLeAO3j4ADt5eIA7+fkAPDp5gDx6+gA8uzpAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAP///wAAdGlpaGhbWlhYWFhYWGkAAHF5cnFoaFxbbGxsQGdYAAByckdGRUNCQlRcZT9E
+ XAAAaW5xcWlxaWhbaFtcWFQAAABpaWlpaWhoaGhbaFsAAABbeXp4eHZ1dXV1YWB2VAAAbF4ICQkJCRwI
+ BgUDUFwAAGlOHy46Pjw8OCUVDElYAABsUCAuODU3OyseFQxJWwAAblAhMiUdODgqIxUMS1sAAHFSIigT
+ FjQuKCMbGUtbAABxUiESEhsyMiwnIxlQWwAAcV8QEgEzSDIyLSwaUFsAAHFlBAoKGBgYDg4LAl5pAABx
+ goKBgYCAgH19fHx5WwAAAGlpaWlpaWloaFtoWwAAgAEAAIABAACAAQAAgAEAAMADAACAAQAAgAEAAIAB
+ AACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAwAMAACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtqqmCLaqplC1qaV3tamlebWppXm0qKR5tKejebOn
+ onmzpqF5sqWgebKkn3mxo555sKKdebChm3mvoJp5rp+Zea2emHmtnZd5rJyVeayblHmrmpN5qpmSeaqY
+ kXmpmJF5qZeQeamXj3mpl495qZePeamXj3mpl495qZePeamXj3mpl495qZePeamXj3mpl495qZePeamX
+ j3epl49PqZePCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2qqYgtaml1LWppf62qqb/taml/rWp
+ pf61qaT/tKik/rSno/+zpqL+s6ah/rKloP6xpJ//saOd/rCinP6voZv/r6Ca/q6fmf6tnpf/rZyW/qyc
+ lf6rm5T/q5qT/qqZkv6qmJH/qZeQ/qmXkP6pl4//qJaP/qmXj/+olo7+qJaO/qmXj/+olo7+qJaO/qmX
+ j/+olo7+qJaO/qmXj/+olo7+qJaO0qmXjx8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2qqa8taml/snB
+ vv7f2dj/39rY/t/a2P7f2tj/39nX/t/Z1//e2db+3tjW/t3Y1v7d19X/3dfV/t3W1P7d1tP/3NXT/tzV
+ 0v7c1dL/29TR/tvU0f7b09D/29PQ/trTz/7a0s//2tLP/trSzv7Z0s7/2dLO/tnSzv/Z0s7+2dLO/tnS
+ zv/Z0s7+2dLO/tnSzv/Z0s7+2dLO/tnRzf+/sqz+qJaO/qmXj7oAAAAAAAAAAAAAAAAAAAAAAAAAALaq
+ phe2qqb/wri0//j29f/z7ev/8uzq//Hr6P/x6uf/8Ojm/+/n5P/u5uP/7eXi/+3j4P/s4t//6+He/+vg
+ 3f/q39v/6d7a/+nd2f/o3dj/6NzY/+jc2P/o3Nj/6NzY/+jc2P/o3Nj/6NzY/+jc2P/o3Nj/6NzY/+jc
+ 2P/o3Nj/6NzY/+jc2P/o3Nj/6NzY/+jd2f/o3Nj/6NzY/+nd2f/08O7/taaf/6mXj/6pl48VAAAAAAAA
+ AAAAAAAAAAAAALWppS+2qqb/y8PA/vf08/7u5eL/7ePf/uvh3f7q39v/6d3Z/ujb1//m2dT+5dfS/uTV
+ 0P7i087/4dHL/uDPyf7fzcf/3cvE/tzKwv7byMD/28e//trFvv7axb7/2cS9/tnEvf7axb7/2sa//trG
+ v/7axr//2sW+/trFvv/ZxL3+2cS9/trFvv/ZxL3+qp2y/oF9wf++t9D+3crE/tvHwP/w6ef+wbSu/qmX
+ j/+olo4sAAAAAAAAAAAAAAAAAAAAALWppS+2qqb/y8PA/vj19P7w5+T/xL68/qejov6no6H/pqKg/qah
+ n/+loJ7+pZ+d/qSenP6knZv/o5ya/qKbmf6im5j/oZqX/qGZlv6gmJX/oJiU/qCXlP6flpP/n5aT/qab
+ mP7Tv7j/r6mm/reysf65tLP/2MrE/trFvv/ZxL3+2cS9/trFvv+zo6f+IyKd/hkZrv8jI6n+xr3L/tvH
+ wP/w6ef+wbSu/qmXj/+olo4tAAAAAAAAAAAAAAAAAAAAALaqpi+2qqb/y8PA//j29f/x6eb/joyM/3Jy
+ cv9ycnL/cnJy/3Jycv9ycnL/cnJy/3Jycv9ycnL/cnJy/3Jycv9ycnL/cnJy/3Jycv9ycnL/cnJy/3Jy
+ cv9ycnL/cnJy/3Rzc//Bsav/n56d/7Ozs/+urq7/zL66/9rFvv/axb7/2sW+/9rFvv+ViJP/Skq7/09P
+ xv9OTsT/npW2/9vHwP/w6ef/wbSv/6mXj/+pl48tAAAAAAAAAAAAAAAAAAAAALWppS+2qqb/y8PA/vj2
+ 9f7x6uf/5+Dd/tfRzv7W0M3/1c/M/tXOy//UzMn+08vI/tLJxv7RyMT/0MbD/s/Fwf7Ow7//zcG9/szA
+ u/7Lvrn/yry4/sm7tv7IubT/x7iy/s28tv7XxLz/taah/rCinf6zpaD/1MG6/trFvv/ZxL3+2cS9/trF
+ vv/Esq3+YV2V/nZ20f9uarL+x7W2/tvHwP/w6ef+wbSu/qmXj/+olo4tAAAAAAAAAAAAAAAAAAAAALWp
+ pSy2qqb/ysK//vj29f7y6+n/8evo/vHr6P7x6uj/8enm/vDo5f/v5+T+7uXi/u3k4P7s4t//6+Dd/urf
+ 2/7p3dj/59vW/ubZ1P7l19L/5NXQ/uLTzv7h0cz/4NDJ/t/Ox/7ezcb/3cvE/t3Kw/7cycL/3MjC/tzI
+ wv/cyML+3MjC/tzIwv/cyML+zbu1/rKjpP/OvLf+28jC/t3LxP/x6+j+wLOt/qmXj/+olo4pAAAAAAAA
+ AAAAAAAAAAAAALaqpge2qqb0uq6r/+/t7P/5+Pb/+ff2//n39v/59/b/+ff2//n39v/59vb/+Pb1//j2
+ 9f/49vT/+PX0//f08//39PP/9/Py//bz8f/28vH/9vHw//Xx7//18O//9O/u//Tv7f/07+3/8+7s//Pu
+ 7P/z7ev/8+3r//Pt6//z7ev/8+3r//Pt6//z7ev/8+3r//Pt6//z7ev/8+3r//Pt6//q5eP/rZyU/6mX
+ j/Opl48GAAAAAAAAAAAAAAAAAAAAAAAAAAC2qqaAtaml/risqf7Durb/xLq3/sS6t/7Eurf/xLq3/sS6
+ t//Eurf+xLq3/sS6t/7Eurf/xLq3/sS6t/7Dubb/w7m1/sK4tf7CuLT/wbez/sG2sv7AtbH/wLSw/r+z
+ r/6/sq7/vrKt/r6xrP69sKv/vK+q/ryuqf+7rqj+u62n/rusp/+6rKb+uqul/rmrpf+5qqT+uaqk/rmq
+ o/+rmpL+qJaO/qmXj3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2qqYDtamld7aqpum2qqb/tqqm/raq
+ pv62qqb/tqqm/raqpv+2qqb+tqqm/raqpv62qqb/tqqm/raqpv61qqX/taml/rWopP60p6P/s6ei/rOm
+ of6ypaD/sqSf/rGjnv6wop3/sKGb/q+gmv6un5n/rZ6Y/q2dl/+snJX+rJuU/quak/+qmZL+qpiR/qqY
+ kf+pl5D+qZeP/qmXj/+pl4/oqZePdqmXjwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALOm
+ ogGzpqISs6ahE7OmoROzpqETs6ahE7KloROypaATsqWgE7KloBOypaATsqWgE7KloBOypKATsqSfE7Gj
+ nxOxo54TsKKdE7CinBOwoZwTr6CbE66fmhOun5kTrZ6YE62dlxOsnJYTrJyVE6ublBOrmpQTq5mTE6qZ
+ khOqmJETqZiRE6mXkBOpl5ATqJaPE6mXjxGolo4BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAsKGcKLChnI+woZu3r6CbuK+gmrivoJq4r5+auK6fmbiun5m4rp6YuK6emLiunpi4rZ2XuK2d
+ l7itnZa4rZyWuKyclrisnJW4rJuVuKyblLism5S4q5qUuKuak7irmpO4q5mTuKuZkriqmZK4qpmSuKqY
+ kbiqmJG4qZiRuKqYkbipl5C4qZeQuKmXkLiolo+4qJaPuKmXj7aolo6PqJaOJwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACwoZxCsKGc9K+hm/6woZv/r6Cb/q+gmv6voJr/rp+Z/q+fmf+unpj+rZ6Y/q2e
+ mP6unpj/rZ2X/q2clv6tnZb/rJyW/qyblf6snJX/q5uU/qualP6sm5T/q5qT/quak/6rmpP/qpmS/qqZ
+ kv6qmZL/qpiR/qqYkf+pmJH+qZeQ/qqYkf+pl5D+qZeQ/qmXkP+olo/+qJaP/qmXj/+olo/+qJaO86mX
+ j0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwop3bsaKd/9bPzP/t6ej/7eno/+3p6P/t6ej/7enn/+3p
+ 5//t6ef/7enn/+3o5//t6Of/7ejn/+3o5//t6Of/7ejm/+3o5v/t6Ob/7Ojm/+zo5v/t6Ob/7Ojl/+zo
+ 5f/s5+X/7Ofl/+zn5f/s5+X/7Ofl/+zn5f/s5+X/6ebj/+nn4//p5+P/6ufk/+zo5f/s5+X/7Ofl/+vm
+ 5P/SycX/qZeP/6mXj9gAAAAAAAAAAAAAAAAAAAAAAAAAALCinSKxo53/wrez/vXw7/7n29f/5tnV/ubZ
+ 1P7m2NT/5djT/uXY0//l19L+5dfR/uTW0f7k1tH/5NXQ/uTV0P7j1c//49XP/uPUz/7j1M7/4tTO/uLT
+ zv7i083/4tPN/uLSzf7i0s3/4tLN/uLSzf7i0s3/4tLN/uLSzf/f0Mr+WqFa/j2sR/89rEf+RatN/tXT
+ x//i0s3+4tLN/uPUzv/z7uz+u62n/qmXj/+olo4fAAAAAAAAAAAAAAAAAAAAALGjnS+xo57/yL66/vLt
+ 6/7h0cz/4M/J/uDPyf7fzsj/387H/t/Nx//ezMb+3szF/t3LxP7dy8T/3crD/tzKwv7cycL/3MnB/tvI
+ wf7cyMD/28jA/tvHv/7bx7//2sa//trGvv7axb7/2cS9/tnEvf7axb7/2cS9/trFvv/Wwbr+ZJ1h/l22
+ ZP9dtmT+WK5d/sS/r//ZxL3+2cS9/tvHwP/w6ef+wbSv/qmXj/+olo8tAAAAAAAAAAAAAAAAAAAAALGj
+ ni+xo57/yL66//Pt6//i0s3/4dDL/93Jwv/MqJv/yKGS/8egkv/HoJH/xp+R/8afkP/FnpD/xZ6P/8Sd
+ j//EnY7/xJ2O/8Ocjv/DnI3/wpyN/8Kbjf/Bm4z/wZqM/8GajP/Bmov/wJmL/8CZi//AmYv/wJiL/8CY
+ i/+/mIr/uJGE/7SPgv+0j4L/t5GE/8Shlf/Wv7j/2sW+/9vHwP/w6ef/wbSv/6mXkP+pl48tAAAAAAAA
+ AAAAAAAAAAAAALGjni+ypJ//yL+7/vPu7P7i087/4dHM/rd+af6lXUL/pFxB/qNcQv+jW0H+oltB/qJb
+ QP6hW0H/oFpA/qBaQP6fWkD/n1lA/p5ZP/6eWUD/nVg//p1YP/6cWED/m1c//ptXP/6bVz//mlc+/ppW
+ Pv6aVz//mVY+/plWP/+YVT7+mFU+/phWP/+XVT7+l1U+/phWP/+ygnH+2cS9/tvHwP/w6ef+wbSv/qmX
+ kP+olo8tAAAAAAAAAAAAAAAAAAAAALGkny+ypJ//yL+7/vPu7P7j1M//4tLN/qxpT/6nX0P/y35k/syA
+ Zv/MgWf+zIRo/syGaf7LiGv/y4ts/syNbf7LkG//y5Jw/suUcf7LlXL/y5Zy/sqWcv7KlHH/ypJw/sqQ
+ b/7Jjm7/yYts/siIav7IhWn/yIJn/seAZv/HfWX+x3xk/sZ6Y//GemP+v3Ve/phWP/+pdGH+2cS9/tvH
+ wP/w6ef+wrWv/qmXkP+olo8tAAAAAAAAAAAAAAAAAAAAALKkny+ypJ//yb+7//Tu7P/k1dD/49PO/6xp
+ T/+qYUX/7piA/++UeP/vl3n/75x7/++hff/wpoD/8KyC//Gxhf/yt4f/8ryK//LBjP/yw4r/8cKF//HB
+ hf/xwIf/8r2I//G3hP/xsYH/8Kp8/++jef/unHT/7pZw/+6PbP/tiWn/7YRm/+yAY//sgGX/4ox0/5hW
+ P/+qdGH/2sW+/9vHwP/w6ef/wrWw/6mXkP+pl5AtAAAAAAAAAAAAAAAAAAAAALKkny+ypaD/yb+8/vTv
+ 7f7k1tH/49TP/qxpUP6qYUX/7pqD/u6NcP/ti2r+7pBs/u6Vbv7unHD/76Jz/vCodv7wrnj/8LR6/vC4
+ e/7vtW7/77hu/u+3bf7wuXj/8LR2/vCtcf7upW3/7Z1o/u2VYv7sjF3/64RY/ut8U//qdU/+6W5L/ulp
+ R//qc1T+4ox0/phWP/+pdGH+2cS9/tvHwP/w6ef+wrWw/qqYkP+pl5AtAAAAAAAAAAAAAAAAAAAAALKl
+ oC+zpaD/yb+8/vTv7f7l19L/5NXQ/q1qUP6rYUb/7puE/u6Pc//tjWz+7pJu/u6XcP7vnXP/76N1/vCp
+ d/7xrnr/8bR7/u+wbv7vsmr/77Vs/u+2cP7xuXv/8LN3/vCtc/7vpW7/7p1p/u2VZP7sjV//7IVa/ut9
+ Vf/qdlD+6W9M/ulqSf/qdFb+4ox1/phWP/+pdGH+2cS9/tvHwP/w6ef+wrWw/qqYkf+pl5AtAAAAAAAA
+ AAAAAAAAAAAAALKloC+zpaH/ycC8//Tv7v/m2NP/5dbR/65qUP+rYkb/7puE/+6Rdf/uj2//7pNx/++Y
+ cv/vnXT/76N2//Coef/wrnv/76tw/++pZv/vrWj/769p//C2dv/xtnv/8LF3//Crc//vpW//7p1q/+2V
+ Zf/tjWD/7IVb/+x+V//qd1L/6nFO/+lsSv/qdlj/4ox1/5lWP/+qdGH/2sW+/9vHwP/w6ef/wrWw/6qY
+ kf+qmJEtAAAAAAAAAAAAAAAAAAAAALKloC+zpqH/ycC9/vXw7v7m2dT/5dfT/q5qUP6sYkb/7puF/u+S
+ d//ukHH+7pRy/u+YdP7vnXb/76J4/vCnef7vp3P/7Z9g/u6kY/7up2X/76pn/vG1fP7xs3r/8K53/u+p
+ c/7uom//7ptr/u2UZv7tjGH/7IVc/ut+WP/qd1T+6nJQ/ultTf/rd1r+4ox1/plWP/+qdGH+2sW+/tvH
+ wP/w6ef+wrax/qqYkf+pl5AtAAAAAAAAAAAAAAAAAAAAALOmoS+zpqH/ycC9/vXw7/7n2tb/5tnU/q9r
+ UP6sYkb/7pyF/u+Uev/ukXP+7pR0/u+Ydv7vnHf/76B5/u+jd/7tlV3/7Zld/u2dX/7uoGH/76ht/vGx
+ fP7xrnr/8Kp3/u+mc/7vn2//7plr/u2SZ/7ti2L/7IRe/ut9Wf/qd1X+6nJS/upuT//reVz+4o11/plW
+ P/+qdGH+2sa+/tvIwf/w6ef+wrax/qqYkf+pmJEtAAAAAAAAAAAAAAAAAAAAALOmoS+zpqL/ycC9//Xx
+ 7//o29f/59rV/69rUP+tYkb/7pyG/++VfP/vkXb/75R2/++Xd//wm3j/7555/+yOXv/sjVb/7JJZ/+yW
+ W//tmV3/8Kl2//Cse//wqnn/76Z2/++ic//unG//7pZr/+6QZ//timP/7INf/+x9W//reFf/6nNT/+pw
+ Uf/re1//4o12/5pXP/+rdWL/28e//9zJwf/x6uf/w7ax/6qZkv+qmJEtAAAAAAAAAAAAAAAAAAAAALOm
+ oi+0p6L/ysG9/vXx7/7o3Nj/59vW/rBrUf6tY0b/7pyH/u+Wfv/uknj+75R4/u+WeP7vmnn/7Yxj/uqB
+ UP7rhlP/64tV/uyOV/7tlV//8Kh7/vCnev7wpXj/76J1/u6dcv7umW//7ZNr/u2OZ/7tiGP/7IJf/ux9
+ XP/reFj+6nRV/upyVP/sfWH+4o12/ppXP/+rdWL+28jA/tzJwv/x6uf+w7ax/qqZkv+qmJEtAAAAAAAA
+ AAAAAAAAAAAAALOmoi+0p6L/ysG9/vXx8P7p3dn/6NzX/rBsUf6uY0b/752I/u+XgP/vknn+75R6/u+W
+ ev7ujm3/6ndL/up7Tf7rf0//6oNR/uuGU/7umGr/76N6/u+ief7voHf/7511/u6acv7ulW//7pBr/u2L
+ aP7thmT/7IFh/ut9Xf/qeFr+6nZY/ut0V//sf2T+4o12/ppXP/+sdWL+28jB/tzKwv/x6uf+w7ax/quZ
+ kv+qmJItAAAAAAAAAAAAAAAAAAAAALSnoi+0p6P/ysG+//by8P/q3tr/6d3Y/7FsUv+uY0f/756I//CZ
+ hP/vk3z/75R7/++Sdv/pcUr/6XFH/+p1Sf/qeUv/63xN/+t/UP/vnXj/8J96/++eeP/vnHf/75l0/+6W
+ cf/ukm//7o5r/+2JaP/thWX/7IBi/+x8X//reVz/63hb/+t3Wf/sgWb/4o52/5tXP/+sdmL/3MnB/93L
+ w//x6+j/w7ax/6uak/+rmZItAAAAAAAAAAAAAAAAAAAAALOnoy+0p6P/ysG+/vby8f7q39v/6d7Z/rFs
+ Uv6uZEf/756J/vCchv/vlX7+75R8/upxUP7oaEP/6WtE/ulvRv7pckj/6nVJ/uyDW/7wnHv/75t5/u+a
+ eP7vmHb/75Z0/u6Tcf7uj2//7Yts/u2Iaf7shGb/7IBj/ux9Yf/re1/+63pe/ut5XP/tg2n+4453/ptY
+ P/+tdmP+3MrC/t3LxP/x6un+w7ay/quak/+qmZItAAAAAAAAAAAAAAAAAAAAALSnoy+0qKP/ysG+//by
+ 8f/r4Nz/6t/a/7FsUv+vZEf/75+K//Ceif/wmIL/63te/+hiP//oZED/6GdC/+lpQ//pbEX/6W5G/+6O
+ bf/wmXr/8Jh5/++XeP/vlXb/75N0/+6Qcv/ujW//7Ypt/+2Hav/tg2f/7IBl/+x/ZP/sfmL/7H1h/+x7
+ X//thWv/4453/5xYQP+td2P/3cvD/97Mxf/x6+n/w7ey/6uak/+rmpMtAAAAAAAAAAAAAAAAAAAAALSn
+ oy+1qKT/ysG+/vby8f7r4d3/6uDc/rJtUv6vZEf/76CL/vGgjP/tiXD+6GE//udgPv7oYT//52M//uhl
+ Qf7oZ0L/6W9L/u+We/7vlnv/75Z6/u6UeP7vk3f/7pF1/u6Oc/7ujHD/7Ylt/u2Ga/7thGr/7INo/u2C
+ Z//sgGX+7H9k/ux+Yv/tiG7+4453/pxYQP+ud2T+3cvE/t7Nxv/x6+n+w7ey/qualP+rmpMtAAAAAAAA
+ AAAAAAAAAAAAALSooy+1qKT/y8G//vbz8v7s4t7/6+Hd/rJtUv6wZEf/76CM/vCchv/oZkX+52A+/udg
+ Pv7oYT//52E+/udhP/7oYj//635g/u+Vff7vlXz/75R7/u+Tef7vkXj/7o92/u6Nc/7ui3L/7Ylw/u2I
+ bv7th23/7YVr/u2Eav/sg2j+7IFn/uyAZf/uinH+4494/p1YQP+ud2T+3szG/t/Nx//y6+n+w7ez/qyb
+ lP+rmpMtAAAAAAAAAAAAAAAAAAAAALWopC+1qaT/y8K///fz8v/t49//7OHe/7NuUv+wZEf/76CL/+t3
+ Wf/oYT//6GE//+hhP//oYT//6GE//+hhP//oYkD/75B4/++Wf//vlX7/75R8/++Se//vkXn/75B4/+6O
+ dv/ujXT/7otz/+6Kcf/uiXD/7ohu/+2Hbf/thWv/7YRq/+2DaP/ujHT/4494/51ZQP+veGX/383H/9/O
+ yP/y7Or/w7iz/6yblP+rmpQtAAAAAAAAAAAAAAAAAAAAALSopC+1qaT/y8K//vf08v7t5OD/7OLf/rNu
+ Uv6wZUf/7ZB4/uloSP/nYD7+52A+/udgPv7oYT//52A+/udgPv7qcVP/8JmE/u+Ygv7wl4D/75V//u+U
+ fv7vk3z/7pJ6/u6Qef7vj3f/7o52/u6NdP7ujHP/7Ypx/u6JcP/tiG7+7Ydt/u2Fa//uj3f+4494/p5Z
+ QP+veWX+387I/uDPyf/y7Or+w7iz/qyblf+rmpQtAAAAAAAAAAAAAAAAAAAAALSopC+1qaX/y8K//vf0
+ 8v7u5OH/7ePg/rNuUv6xZUf/7Y93/uloSP/nYD7+52A+/udgPv7oYT//52A+/udhP/7uiXD/8JuG/vCa
+ hf7wmYP/75iC/u+XgP7vln//75R+/u+TfP7vknr/7pF5/u6PeP7ujnb/7o10/u6Lc//tinH+7Ylw/u6I
+ b//vkXn+45B5/p5ZQP+weWX+4M/J/uDQyv/y7Or+xLi0/qyclf+rm5QtAAAAAAAAAAAAAAAAAAAAALWp
+ pS+1qaX/y8K///f08//u5eL/7eTg/7RuUv+xZUf/7Y93/+lsTP/oZ0b/6GdG/+hnRv/oZ0b/6GdG/+ls
+ Tf/xoo7/8aGN//GgjP/xn4v/8J6J//CdiP/wnIf/8JuF//CZhP/wmYL/75eB/++Wf//vlX7/75R9/++T
+ e//ukXr/7pB4/+6Pd//vlX7/45B5/59aQP+wemX/4dDK/+HRy//y7ev/xLi0/6yclv+sm5UtAAAAAAAA
+ AAAAAAAAAAAAALWppS+1qaX/y8O//vj08/7u5uP/7uXh/rRuU/6xZUf/7ZR9/u2Odv/tjnX+7Y51/u2O
+ df7tjnb/7Y51/u6Vfv7wo4//8KOO/vCijv7woo3/8KGN/vChjP7woYz/8KCL/vCgi/7woIv/75+K/u+f
+ iv7vnon/756J/u+eiP/vnYj+752H/u+ch//vnIb+45B5/p9aQf+xemb+4dHL/uLSzP/z7ev+xLm0/q2c
+ lv+sm5UtAAAAAAAAAAAAAAAAAAAAALWppS+2qqX/y8PA/vj18/7v5+P/7uXi/rZyV/6uYkT/tGdK/rRn
+ Sv+0Z0r+s2dK/rNnSv6zZkr/smZK/rJmSv6yZkr/sWZK/rFlSf6xZkn/sGVJ/rBlSf6vZUn/r2VJ/q5k
+ Sf6uZEn/rWRI/q1jSP6sY0j/rGNI/qtiSP+rYkj+qmJH/qliR/+pYUf+p2BH/qBaQf+zfWr+4tLM/uLT
+ zf/z7ev+xLm0/q2dlv+snJYtAAAAAAAAAAAAAAAAAAAAALWqpS+2qqb/y8PA//j19P/v5+T/7+bj/9Cp
+ mf+ya0//sGZJ/7BmSf+wZkn/sGZJ/69mSf+vZkn/r2VJ/65lSf+uZUn/rWVJ/61lSf+tZEj/rGRI/6xk
+ SP+rY0j/qmNI/6pjSP+pY0j/qWJH/6hiR/+oYkf/p2FH/6dhR/+mYUf/pWBH/6VgRv+kYEb/pF9G/6dn
+ T//NrKD/4tPO/+PUz//z7uz/xbm1/62dl/+tnJYtAAAAAAAAAAAAAAAAAAAAALWppS+2qqb/y8PA/vj1
+ 9P7w6OX/7+fk/u/m4/7v5uP/7ubi/u7l4v/u5eH+7eTh/u3k4P7t4+D/7OPf/uzi3v7s4t7/6+Hd/uvh
+ 3f7r4Nz/6t/b/urf2/7q3tr/6d7Z/und2f7o3Nj/6NzX/ufb1/7n2tb/59rV/ubZ1P/m2dT+5djT/uXX
+ 0v/l19L+5NbR/uTV0P/j1c/+49TP/uPV0P/z7uz+xbq1/q2dl/+tnJYtAAAAAAAAAAAAAAAAAAAAALWp
+ pS62qqb/y8PA/vj29P7w6eb/8Ojl/vDo5P7v5+T/7+fk/u/m4//v5uP+7uXi/u7l4v7u5eH/7eTg/u3k
+ 4P7t49//7OLf/uzi3v7s4d7/6+Hd/uvg3P7r4Nz/6t/b/urf2v7p3tr/6d3Z/und2P7o3Nj/6NvX/ufb
+ 1v/n2tb+59rV/ubZ1P/m2NP+5djT/uXX0v/l19H+5NbR/uXX0v/07+3+xLm0/q6emP+tnZcrAAAAAAAA
+ AAAAAAAAAAAAALaqpg62qqb7vLGu//Xz8//49fT/9/Tz//f08//39PP/9/Tz//f08//39PL/9/Py//fz
+ 8v/38/L/9vPx//bz8f/28/H/9vLx//by8P/28vD/9vHw//bx8P/18e//9fHv//Xw7//18O//9fDu//Tw
+ 7v/08O7/9O/u//Tv7f/07+3/9O7t//Tu7P/z7uz/8+7s//Pu6//z7ev/8+3r//Pt6//z7+7/taah/66e
+ mPqtnZcMAAAAAAAAAAAAAAAAAAAAAAAAAAC2qqaataml/r2yr/7Px8X/0MjG/tDIxv7QyMX/z8jF/s/I
+ xf/PyMX+z8jE/s/HxP7Px8T/z8fE/s7Hw/7Px8T/zsbD/s7Gw/7OxsP/zsXD/s7Fwv7OxcL/zsXC/s7F
+ wv7NxcL/zcTB/s3Ewf7NxMH/zcTA/s3EwP/Nw8D+zcPA/szDv//Mw7/+zMK//szCv//Mwr7+y8K+/srA
+ vP+2qKP+rp6Y/q6emJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2qqYLtamloLWppfm2qqb/taml/rWp
+ pf62qqX/taml/rWppf+0qKT+tKik/rSopP61qKT/tKej/rSno/60p6P/s6ei/rOmov60p6L/s6ah/rKm
+ of6zpqH/sqWg/rKloP6ypaD/saSf/rGkn/6ypJ//saOe/rGjnv+wop3+sKKd/rCinP+woZz+r6Gb/rCh
+ m/+voJv+r6Ca/q+gmv+un5n5rp+Zna6emAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALWp
+ pRm2qqY8tamlP7WppT+1qaU/tamlP7WppT+0qKQ/tKikP7SopD+0qKQ/tKijP7Snoz+0p6M/s6eiP7Om
+ oj+zpqI/s6ahP7OmoT+zpaE/sqWgP7KloD+ypJ8/sqSfP7Gknz+xo54/saOeP7GjnT+wop0/sKKdP7Ci
+ nD+woZw/r6GbP6+hmz+voJs/r6CaP6+fmjyun5kYAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAA8AAOAA
+ AAAABwAA4AAAAAAHAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAAD
+ AADAAAAAAAMAAOAAAAAABwAA4AAAAAAHAAD4AAAAAB8AAPAAAAAADwAA4AAAAAAHAADgAAAAAAcAAMAA
+ AAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAAD
+ AADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAA
+ AAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAAD
+ AADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADgAAAAAAcAAOAA
+ AAAABwAA+AAAAAAfAAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAC2qqYLtqqmerWppaS1qaWltKikpbSnoqWzpqGlsqSfpbGjnqWwoZylr6Capa6emKWtnZalrJuVpaua
+ k6WqmZKlqZeQpamXj6Wpl4+lqZePpamXj6Wpl4+lqZePpamXj6Wpl4+lqZePpKmXj3mpl48LAAAAAAAA
+ AAAAAAAAAAAAALaqpre+tLD/0crH/9HKx//Rycf/0cnG/9DIxf/Px8T/z8bD/87Fwv/NxMH/zcO//8zC
+ vv/Mwb3/y8C8/8rAu//Kv7r/yr66/8m+uf/Jvrn/yb65/8m+uf/Jvrn/yb65/8m+uf/Jvrj/s6Oc/6mX
+ j7UAAAAAAAAAAAAAAAC2qqYVtqqm/+zo5v/x6uf/7+jl/+7l4v/t4+D/6+Hd/+rf2//o3dj/59rW/+bY
+ 1P/l19L/5NXQ/+PUz//j1M//49TP/+PUz//j1M//49TP/+PUz//j1M//49TP/+PVz//i19X/5tnV/+TV
+ 0P/l3tv/qZeP/qmXjxMAAAAAAAAAALaqph+2qqb/8O3s/+ri3//Aurf/vbe0/7y1sv+7s7D/urGu/7iv
+ rP+3rar/tquo/7Wqpf+0qKP/s6ei/7Omof+2qKP/zLu1/8K5tf/LwLz/2sW+/9rFvv/axb7/nY+n/yMj
+ q/9xbr3/3MnC/+ni3/+pl4//qZePHgAAAAAAAAAAtqqmH7aqpv/x7ez/4drY/42Liv+LiYj/ioiI/4qI
+ h/+Kh4f/iYeG/4mGhf+IhYT/iIWE/4iEg/+HhIL/h4OC/4uGhP+1qKP/p6Sj/66opv/axr//2sW+/9rF
+ vv+Bd5v/Y2PT/2FfvP/cycL/6eLf/6mXj/+pl48eAAAAAAAAAAC2qqYetqqm//Dt7P/x6+j/8ern//Hp
+ 5v/v6OT/7ubi/+3j4P/r4d3/6d7Z/+fb1v/l2NP/49XP/+LSzP/gz8n/3s3G/9zKw//Zxr//2sa//9vH
+ wP/bx8D/28fA/867tv+XjaT/uqux/9zJwv/p4d//qZeP/6mXjxwAAAAAAAAAALaqpgO2qqbo0svI/+zo
+ 5//s6Of/7Ojn/+zo5//s6Ob/6+fm/+vn5f/r5uX/6uXk/+rl4//p5OL/6ePh/+ji4P/n4d//5+De/+bg
+ 3f/m39z/5t7c/+Xe2//l3tv/5d7b/+Xd2v/l3dr/5d3a/8m+uP+pl4/mqZePAgAAAAAAAAAAAAAAALaq
+ pkC1qaXgtqqm/7aqpv+2qqb/tqqm/7aqpv+2qqb/tqqm/7aqpv+1qaX/tKik/7Sno/+zpqH/sqSf/7Gj
+ nv+woZz/r6Ca/66emP+tnZf/rJuV/6uak/+qmZL/qZiR/6mXkP+pl4//qZeP4KmXjz8AAAAAAAAAAAAA
+ AAAAAAAAAAAAALKloAmypKAxsqSfM7KknzOxo54zsaOeM7GjnjOxo50zsKKdM7CinTOwoZwzr6CbM6+g
+ mjOun5kzrZ6YM62dlzOsnJYzrJuVM6ualDOqmZMzqpmSM6mYkTOpl5AzqZePM6mXjzGpl48IAAAAAAAA
+ AAAAAAAAAAAAAAAAAACwoZxTsKGc8a+hm/+voJr/r5+a/66fmf+unpj/rp6Y/62dl/+tnZf/rZyW/6yc
+ lf+sm5X/rJuU/6ualP+rmpP/q5qT/6uZkv+qmZL/qpiR/6qYkf+qmJH/qZeQ/6mXkP+pl5D/qZeP/6mX
+ j/Cpl49RAAAAAAAAAAAAAAAAsKKdBbCine/UzMn/7efl/+3n5f/s5uT/7Obk/+zm5P/s5eP/7OXj/+zl
+ 4//s5eL/6+Xi/+vl4v/r5OL/6+Th/+vk4f/r5OH/6+Th/+vk4f/r5OH/4N7X/7fStP+51Lb/2t/U/+vk
+ 4f/r5OH/z8XB/6mXj+6pl48EAAAAAAAAAACxo50fsaOd/+zm5P/h0cz/4M/K/+DPyf/fzsj/3s3G/97M
+ xf/dy8T/3cvD/93Kw//cycL/3MnB/9vIwf/byMD/28e//9rGv//axr//2sa//9rGv/+zsJ7/SbBS/0qz
+ U/+cuJD/2sa//9vHwP/p4t//qZeP/6mXjx0AAAAAAAAAALGjnh+xo57/7Ofl/+LSzP/XvrX/vo17/7uK
+ d/+6iXb/uoh2/7mIdf+4h3X/t4Z0/7eGdP+2hXP/toVz/7WEc/+0hHL/tINy/7ODcf+zgnH/s4Jx/7GB
+ cP+rfGv/q3xr/7OEdf/Rtqz/2sa//+ni3/+pl5D/qZePHgAAAAAAAAAAsaSeH7Kkn//s5+X/49PO/7+O
+ e/+uZUr/v3Ra/751W/++d1v/vXld/718Xv+9fmD/vIBg/7yBYf+7gWH/u4Bg/7p+X/+6e17/uXhc/7h1
+ W/+4cln/t3BY/7duV/+2blf/n1tE/7qPgf/axr//6eLf/6mXkP+pl5AeAAAAAAAAAACypJ8fsqSf/+3o
+ 5f/k1dD/vox6/8BzWf/vlHn/7pR0/++bd//vpHv/8K1///G1g//yvYb/8b+A//G+ff/xvYL/8bV///Cr
+ ef/uoHL/7ZVr/+2LZf/sgV//63la/+yDZ/+sZk//uo+A/9rGv//p4t//qZeQ/6mXkB4AAAAAAAAAALKl
+ oB+ypaD/7ejm/+XW0f+/jXv/wHRa/++TeP/tjmz/7pVv/+6ecv/vp3b/8bB6//Czdf/vtGv/77Zu//C4
+ ef/wrnP/76Ns/+2XZf/si13/639V/+p0T//pa0n/7H1h/6xmT/+6j4D/2sa//+ni3/+qmJH/qZeQHgAA
+ AAAAAAAAsqWgH7OloP/u6Of/5tjT/8COe//BdFr/75Z8/+6QcP/vl3L/7551//CneP/wrHf/7qdl/++s
+ Z//ws3P/8LR6//CsdP/vom7/7Zdn/+2LX//sgFj/6nVS/+ltTP/sf2P/rWZP/7qPgP/axr//6eLf/6qY
+ kf+qmJEeAAAAAAAAAACzpqEfs6ah/+7p5//m2dX/wY98/8J0Wv/vl3//7pFz/++Xdf/vnXf/76N4/+2Z
+ Yf/tnl//7qNi//Gxef/wrnn/76h0/+6fbv/tlGj/7Iph/+t/Wv/qdlT/6m9P/+yBZv+tZ0//upCA/9vH
+ wP/p4t//qpiR/6qYkR4AAAAAAAAAALOmoR+zpqH/7uno/+fb1v/CkH3/wnRa/++Zgf/vknb/75Z3/++c
+ ef/sj2H/641W/+yTWv/unGT/8Kt7//CoeP/vonP/7ppu/+6RaP/tiGL/7H5c/+t2Vv/qcVL/7INo/65n
+ T/+7kYH/28jB/+ni3/+qmZL/qpiRHgAAAAAAAAAAs6aiH7Snov/u6uj/6NzY/8ORfv/CdFr/8JuE/++T
+ ef/vlnn/7Yto/+p7Tf/rglH/64dT/+6cbv/vpHr/76F3/++bc//ulW7/7Y1o/+yFY//rfl7/63dZ/+t0
+ Vv/thmv/rmdP/7yRgf/cycL/6eLg/6uZkv+qmZIeAAAAAAAAAAC0p6IftKei/+/q6f/p3tr/w5J//8N1
+ Wv/wnYj/75R8/+6Ocv/pbkf/6nJI/+p4S//rflD/7515/++deP/vmnb/75Zy/+6Qbv/timn/7IRl/+x9
+ YP/reV3/63hb/+2Ibv+vZ0//vJKC/9zKw//q4+D/q5qT/6uZkh4AAAAAAAAAALSnox+0p6P/7+vp/+rf
+ 2//Ekn//w3Va//GgjP/vlH3/6WpJ/+hmQf/pakT/6W5G/+yCXf/wmXr/75h4/++Vdv/ukXL/7o1v/+2I
+ a//sgmb/7H9j/+x9Yf/se1//7Ypx/69oUP+9k4P/3cvE/+rj4f+rmpP/q5mTHgAAAAAAAAAAtKijH7So
+ o//v6+n/6+Hd/8WTgP/EdVr/8aOP/+t1WP/oYT//6GE//+hjQP/oZkH/7o5y/++We//vlHn/7pJ2/+6O
+ c//ui3D/7Ydt/+2Eav/tgmj/7IFl/+x/Y//ujXT/sGhQ/76ThP/ezMX/6uPh/6ualP+rmpMeAAAAAAAA
+ AAC0qKQftaik/+/r6v/s4t7/xZSA/8R1Wv/ujnb/6GE//+hhP//oYT//6GE//+lsTP/vln//75R9/++T
+ e//vkXj/7o52/+6Mc//uinH/7Yhv/+2GbP/thGr/7YNo/+6Pd/+waFD/v5SF/9/Ox//q5OH/rJuU/6ua
+ lB4AAAAAAAAAALWopB+1qaT/8Ozq/+3j4P/GlYH/xHZa/+pzVP/oYT//6GE//+hhP//oYT//7YNo//CZ
+ g//wl4H/75V//++TfP/vkXr/75B4/+6Odv/ujHP/7opx/+6Ib//thm3/7pJ6/7FoUP+/lYb/4M/J/+rk
+ 4v+sm5X/rJuUHgAAAAAAAAAAtamkH7Wppf/w7Ov/7uXh/8eVgv/Fdlr/6nRW/+hlQ//oZUP/6GVD/+hn
+ Rv/wnYj/8Z+K//CdiP/wm4b/8JqE//CYgv/vloD/75R9/++Te//vkXn/7o93/+6Ndf/vlX7/smlQ/8CW
+ h//h0Mv/6+Xi/6yclf+sm5UeAAAAAAAAAAC1qaUftaml//Ds6//u5uL/x5aC/79wVP/chGr/3INp/9yD
+ af/cg2n/3IZt/92Rev/dkHn/3ZB5/92PeP/cj3j/3I53/9yOd//cjXb/24x2/9uMdf/bi3X/24t0/9qK
+ cv+tZUz/wZeI/+LSzP/r5eP/rZyW/6yclR4AAAAAAAAAALWppR+2qqX/8O3s/+/n5P/VsqT/sGdK/69l
+ R/+vZUf/rmVH/65kR/+tZEf/rWRH/6xjR/+rY0b/q2JG/6piRv+pYkb/qGFG/6dhRf+nYEX/pmBF/6Vf
+ Rf+kX0T/o15E/6RhSP/Pr6T/4tPO/+vl4/+tnZf/rZyWHgAAAAAAAAAAtqqmH7aqpv/w7ez/8Ojl/+/n
+ 5P/v5uP/7uXi/+7l4f/t5OH/7ePg/+zj3//s4t7/6+Hd/+vg3P/q39v/6t7a/+nd2f/o3Nj/6NzX/+fb
+ 1v/n2tX/5tnU/+XY0//l19L/5NbR/+TV0P/j1dD/6+bk/62dl/+tnZceAAAAAAAAAAC2qqYQtqqm/ejk
+ 4//18e//9fDu//Xw7v/07+7/9O/t//Tv7f/07uz/8+7s//Pt6//z7ev/8+zq//Ls6v/y6+n/8evp//Hq
+ 6P/x6uf/8Onn//Dp5v/w6OX/7+jl/+/n5P/v5uT/7ubj/+7m4//k3tv/rp6Y/K2dlw4AAAAAAAAAAAAA
+ AAC2qqabua2q/8e+u//Hvrv/x766/8a9uv/Gvbr/xr25/8a9uf/Gvbn/xry5/8a8uP/Fu7j/xbu3/8W7
+ t//Furb/xLq2/8S5tv/EubX/w7m1/8O4tP/DuLT/w7iz/8O3s//Ct7L/wbax/7Kjnf+unpiXAAAAAAAA
+ AAAAAAAAAAAAALaqpgK2qqZStqqmfrWqpX+1qaV/tamlf7WppH+1qKR/tKijf7Sno3+0p6J/s6eif7Om
+ on+zpqF/s6Wgf7KloH+ypJ9/saSff7Gjnn+xo55/sKKdf7CinH+woZx/r6Gbf6+gmn+voJp+rp+ZUa6e
+ mQEAAAAAAAAAAMAAAAPAAAADgAAAAYAAAAGAAAABgAAAAYAAAAHAAAAD4AAAB8AAAAOAAAABgAAAAYAA
+ AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA
+ AAGAAAABgAAAAcAAAAPAAAADKAAAABgAAAAwAAAAAQAgAAAAAABgCQAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AACpnpoItamli7Wppbu1qaW8tKejvLOmobyypJ+8sKKcvK+gmrytnpi8rJyVvKuak7yqmJG8qZeQvKmX
+ j7ypl4+8qJaOvKmXj7ypl4+8qJaOu6mXj4qikYkHAAAAAAAAAAC2qqZ0zsbD/unj4f/o4uD/5+De/ubf
+ 3P/l3dr/5NzZ/uPa1//i2dX/4djU/+HY1P7h19T/4dfT/uHX0//h19P/4dfT/uHX0//h19P/4dfT/sS4
+ sv+pl49zAAAAAAAAAAC1qaWX4dza/uTb2P7Jwr/+x7+8/sW8uP7DubX+wray/sCzrv6+sav+va+p/ryt
+ qP7LubP+x7q1/tHCvf7ZxL3+2cS9/paJrf5fXLr+1sXE/tnPy/6olo6WAAAAAAAAAAC2qqaX4tzb/tbQ
+ zv+koaD/o6Ce/qOfnf+inZv/oZua/p+amP+emJb/nZeU/5yVkv62qaT/raak/sC0sP/axb7/2cS9/oF4
+ pP9gX8P/x7a7/tnPy/+pl4+WAAAAAAAAAAC2qqaJ29XT/vXx7//18e//9fDu/vTu7P/y7Or/8ern/u/o
+ 5f/u5eL/7OPf/+rg3P7p3tr/6NzY/ufb1v/n29b/59vW/uPX0//Zzsz/6NvX/tLIw/+pl4+IAAAAAAAA
+ AAC1qaUgtqqm172yrv69sq7+vbKu/r2yrv69sq7+vbKu/ryxrf67sKz+uq6q/rmtqP64q6b+tqmk/rWn
+ of60pZ/+s6Od/rKinP6xoZr+saCZ/qmXj9epl48fAAAAAAAAAAAAAAAAsaSfLrGjnmWxo55msaKdZrCi
+ nWawoZxmr6GbZq+gm2auoJpmrp6ZZq2dmGatnJZmrJuVZqualGaqmZJmqpiSZqmXkGapl5BmqJaPZamX
+ jy4AAAAAAAAAAAAAAACwopxHuq2o/M7Fwf/OxMH/zsTA/s3EwP/Nw7//zcO//s3Cvv/Mwr7/zMG9/8zB
+ vf7Lwbz/y8C8/svAu//LwLv/yb+6/sm/uv/Kv7r/yr+6/rOjnPypl49GAAAAAAAAAACxop2U3NTS/uTV
+ 0P7j1M7+4tPN/uHSzP7h0cr+4NDJ/uDPyP7fzsj+383H/t7Nxv7ezMX+3svF/t7Lxf7cysT+VqhZ/k6v
+ Vf7VysD+3szG/tjOyv6olo+SAAAAAAAAAACxo56X3dbT/uLSzP/Bk4L/tn5q/rR+af+zfWj/snxo/rF7
+ Z/+wemb/sHpm/695Zv6ueWX/rXhl/qx3Zf+sd2X/p3Nh/qdzYf+5jn//2sa//tnPy/+pl4+WAAAAAAAA
+ AACypJ+X3tbU/uPUzv+qZEr/3Ypx/t2Ocf/dlXT/3p14/t+lfP/fq37/3qx7/96pfP7doXj/3Jhz/tuO
+ bf/ahmj/2X5k/tV/Z/+gZVD/2sa//tnPy/+pl5CWAAAAAAAAAACypKCX3tfU/uTW0f+sZUv/7pR6/u6P
+ bP/umXD/76V1/vCxev/vtHD/77Zu//C2eP7vqXD/7Zlm/uyIW//qeVL/6WxK/uaAZf+hZVD/2sa//tnP
+ y/+pl5CWAAAAAAAAAACypaCX39jV/uXY0/6tZkv+7pd9/u6Rcf7vmnT+76V4/u+ocP7uqGX+77Fx/vCy
+ ef7vp3H+7Zho/uyJXv7relX+6W9N/uaBZ/6hZVD+2sa//tnPzP6pmJGWAAAAAAAAAACzpqGX39jW/ufa
+ 1f+uZ0v/75iA/u+Sdf/vmnf/7pxy/uyTWv/tm17/8Kx2//CqeP7voXH/7pRp/uyHYP/relj/6nFR/ueD
+ av+iZlD/28fA/tnQzP+qmJGWAAAAAAAAAACzpqKX4NnW/ujc1/6vZ0v+75qD/u+Tef7vlXb+64BT/uuF
+ Uv7skF3+8KV6/u+hdv7umXD+7o9p/uyEYv7relv+6nRW/ueGbP6jZlD+3MnB/trQzP6qmZKWAAAAAAAA
+ AAC0p6KX4NnX/une2v+waEz/75yH/u+UfP/rd1X/6XBH/up3Sv/tj2f/75x5/++Zdf7uknD/7Ytq/uyC
+ ZP/re1//63hc/ueIb/+kZ1H/3crD/trQzf+rmZKWAAAAAAAAAAC0p6OX4NrY/uvg3P+waEz/8J+L/ux/
+ ZP/oYj//6GZB/ulsRv/vlXf/75Z5/++Tdf7ujnH/7Yhs/uyDZ//sgGT/7H1h/uiKcv+lZ1L/3szE/trR
+ zv+rmpOWAAAAAAAAAAC0qKSX4drY/uzi3v6xaU3+7pV+/uhiQP7nYD7+52E//up1Vv7vlX3+75N7/u6Q
+ d/7ujXT+7Ypx/u2Hbf7thWr+7IJn/uiNdf6maFL+383H/trRzv6rmpSWAAAAAAAAAAC1qKSX4dvZ/u3j
+ 4P+yaU3/63xf/uhhP//oYT//52E//u6Mc//wmIP/75aA/++Uff7vkXr/7o93/u6MdP/uinH/7Ydu/umQ
+ eP+naVL/4M/J/tvSz/+sm5WWAAAAAAAAAAC1qaWX4dvZ/u7l4v+yaU3/7Idt/ut6Xv/rel7/635i/vCi
+ jv/woYz/8J+L//Ceif7wnIf/75uF/u+Zg//vmIH/75Z//umUfv+oalP/4dHL/tvTz/+snJWWAAAAAAAA
+ AAC1qaWX4dza/u/m4/66emH+smdK/rJnSv6xZ0r+sGZK/rBmSv6vZUn+rmVJ/q1kSf6sY0j+q2NI/qpi
+ SP6pYkj+p2FH/qZgRv6ye2b+4tPN/tzT0P6tnJaWAAAAAAAAAAC2qqaX4tza/vDo5f/v5+T/7+bj/u7l
+ 4v/t5OH/7ePg/uzi3v/r4d3/6+Dc/+rf2/7p3tn/6NzY/ufb1v/n2tX/5tjU/uXX0v/k1tH/5NXQ/tzU
+ 0f+tnZeVAAAAAAAAAAC2qqZpycC9/uPe3P/j3tz/497c/uPe2//j3dv/493a/uLc2v/i3Nr/4tvZ/+Lb
+ 2f7h29j/4drY/uHa1//g2df/4NnW/uDY1f/f2NX/39fU/sO3s/+tnphnAAAAAAAAAAConZkCtamlbbWp
+ pZ61qaWftamln7SopJ+0qKSftKejn7Onop+zpqKfs6ahn7KloJ+ypaCfsaSfn7Gjnp+xop2fsKKcn7Ch
+ nJ+voJufr6Canq6fmWuklZACAAAAAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAMAAAwCAAAEAgAABAIAA
+ AQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABAIAAAQCAAAEAgAABACgA
+ AAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuKyoj8O5ttLCuLXSwbay0r+0
+ sNK+sa3SvK+q0rutp9K5q6XSuaqk0rmqpNK5qqTSuaqj0quako4AAAAAW1VTDdLKx//j29n/1c3K/9LJ
+ xv/QxcH/zcG8/8y+uf/Mvbn/1cfC/9vLxv/ezMb/oZe+/8W5yf/Iu7b+X1RQDFtVUw/Ty8n/1M/M/725
+ t/+8trT/urOw/7evrP+1rKj/tKml/8S3sv/Pv7n/2sa//5KIsv+1p7z/yby3/19UUA4AAAAAvbKuwtHJ
+ xv/Rycb/0cnG/9DIxf/Px8T/zsXC/83Dv//LwLz/yr66/8i8uP/Hu7b/x7q1/7GgmcEAAAAAAAAAALGj
+ nlOwop2YsKGcma+gm5mvoJqZrp+Zma2emJmsnJaZrJuUmauak5mqmJGZqZeQmamXj5ipl49SAAAAAFhR
+ TgnIvrr759zY/+ba1v/l2dX/5djT/+TX0v/j1tH/49bQ/+LV0P/i1dD/pcSf/57Im//i1dD/wrWv+l9U
+ UAhYUU8Pz8XC/9a8s/+5fGb/vH9p/7uBaf+6g2r/uYNq/7iBaf+2fmf/tXtm/7J3Y/+tcl//0LSr/8m8
+ t/9fVFAPWVJPD9DGw//RsaX/14Rp/+6Vcv/vpXn/8bV+//C6dv/xtnv/7qFv/+yKYf/qdlT/zHNa/8qq
+ n//Jvbj/X1VRD1lSUA/Qx8T/07So/9iFa//ulHL/76F3/+6iZ//vrW3/8K53/+6ba//shV3/6nJQ/8xz
+ Wv/Kq6D/yb24/19VUQ9ZU1AP0cjF/9W2qv/Zh27/75R4/+2MZP/rilX/76Jy/++hdf/uk2v/7IJg/+p1
+ Vv/Ndlz/y62h/8q+uf9fVVIPWlNRD9HJxv/XuK3/2opy/+2Ibf/pbEX/6npQ/++bef/vlnT/7Yxs/+yB
+ Y//rel7/znhg/82uo//Kvrr/YFZSD1pUUQ/Sycf/2Luv/9qHbv/oZkX/6GE//+x9YP/vlHv/7pB2/+2K
+ cP/thWv/7IJn/897Y//OsKb/y7+7/2BWUw9aVFIP0srH/9q8sf/XdVj/6GNB/+hjQv/vln//8JmD/++W
+ f//vknv/7o52/+6Lcv/Qfmb/0LOo/8vAvP9gV1MPWlRSD9PLyP/exbv/v3BU/8V0WP/FdFn/xXpg/8R5
+ X//DeF//wnde/8F2Xf/AdVz/tGtT/9W7sv/Mwb3/YVdUD1tVUwzRycb+8uzp//Hr6P/x6uf/8Onm/+/n
+ 5P/u5uP/7eXh/+3j4P/s4t7/6+Dc/+rf2v/p3dn/y8C7/mFYVQsAAAAAtqqne760sL6+s7C/vbOvv72y
+ rr+8sa2/vLCsv7ywq7+7r6q/uq6pv7qtqL+5rKe/uKumvq+gmnoAAAAAgAEAAAAAAAAAAAAAgAEAAIAB
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAA==
+</value>
+ </data>
+</root>
\ No newline at end of file
Modified: sandbox/maestro-3.0/Maestro.Editors/Maestro.Editors.csproj
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Maestro.Editors.csproj 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/Maestro.Editors/Maestro.Editors.csproj 2010-10-25 06:57:06 UTC (rev 5323)
@@ -112,6 +112,12 @@
<Compile Include="Common\UnmanagedFileBrowser.Designer.cs">
<DependentUpon>UnmanagedFileBrowser.cs</DependentUpon>
</Compile>
+ <Compile Include="Diagnostics\ServerStatusMonitor.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="Diagnostics\ServerStatusMonitor.designer.cs">
+ <DependentUpon>ServerStatusMonitor.cs</DependentUpon>
+ </Compile>
<Compile Include="DrawingSource\DrawingSourceEditorCtrl.cs">
<SubType>UserControl</SubType>
</Compile>
@@ -633,6 +639,9 @@
<DependentUpon>UnmanagedFileBrowser.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
+ <EmbeddedResource Include="Diagnostics\ServerStatusMonitor.resx">
+ <DependentUpon>ServerStatusMonitor.cs</DependentUpon>
+ </EmbeddedResource>
<EmbeddedResource Include="DrawingSource\DrawingSourceEditorCtrl.resx">
<DependentUpon>DrawingSourceEditorCtrl.cs</DependentUpon>
<SubType>Designer</SubType>
Modified: sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.Designer.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.Designer.cs 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.Designer.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -1437,6 +1437,15 @@
}
}
+ /// <summary>
+ /// Looks up a localized string similar to Last Updated: .
+ /// </summary>
+ internal static string LastUpdated {
+ get {
+ return ResourceManager.GetString("LastUpdated", resourceCulture);
+ }
+ }
+
internal static System.Drawing.Bitmap layer {
get {
object obj = ResourceManager.GetObject("layer", resourceCulture);
@@ -1629,6 +1638,15 @@
}
/// <summary>
+ /// Looks up a localized string similar to No site service available.
+ /// </summary>
+ internal static string NoSiteService {
+ get {
+ return ResourceManager.GetString("NoSiteService", resourceCulture);
+ }
+ }
+
+ /// <summary>
/// Looks up a localized string similar to You must select at least one type.
/// </summary>
internal static string NoTypesSelected {
@@ -2117,6 +2135,33 @@
}
/// <summary>
+ /// Looks up a localized string similar to KB.
+ /// </summary>
+ internal static string UnitsKb {
+ get {
+ return ResourceManager.GetString("UnitsKb", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to ms.
+ /// </summary>
+ internal static string UnitsMs {
+ get {
+ return ResourceManager.GetString("UnitsMs", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to s.
+ /// </summary>
+ internal static string UnitsSeconds {
+ get {
+ return ResourceManager.GetString("UnitsSeconds", resourceCulture);
+ }
+ }
+
+ /// <summary>
/// Looks up a localized string similar to Unknown types.
/// </summary>
internal static string UnknownResourceTypes {
Modified: sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.resx
===================================================================
--- sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.resx 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/Maestro.Editors/Properties/Resources.resx 2010-10-25 06:57:06 UTC (rev 5323)
@@ -971,4 +971,19 @@
<data name="SpecifySecondaryFeatureSource" xml:space="preserve">
<value>Please specify the secondary feature source</value>
</data>
+ <data name="LastUpdated" xml:space="preserve">
+ <value>Last Updated: </value>
+ </data>
+ <data name="UnitsKb" xml:space="preserve">
+ <value>KB</value>
+ </data>
+ <data name="UnitsMs" xml:space="preserve">
+ <value>ms</value>
+ </data>
+ <data name="UnitsSeconds" xml:space="preserve">
+ <value>s</value>
+ </data>
+ <data name="NoSiteService" xml:space="preserve">
+ <value>No site service available</value>
+ </data>
</root>
\ No newline at end of file
Modified: sandbox/maestro-3.0/Maestro.Login/LoginDialog.cs
===================================================================
--- sandbox/maestro-3.0/Maestro.Login/LoginDialog.cs 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/Maestro.Login/LoginDialog.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -95,8 +95,18 @@
base.OnLoad(e);
rdHttp.Checked = true;
+ var isNativeApiAvailable = false;
+ var providers = ConnectionProviderRegistry.GetProviders();
+ foreach (var prv in providers)
+ {
+ if (prv.Name.Equals("MAESTRO.LOCALNATIVE"))
+ {
+ isNativeApiAvailable = true;
+ break;
+ }
+ }
//Mono = No LocalNativeConnection for you (for now...)
- if (Platform.IsRunningOnMono)
+ if (Platform.IsRunningOnMono || !isNativeApiAvailable)
{
rdTcpIp.Enabled = false;
}
@@ -217,7 +227,7 @@
else //Native
{
System.Data.Common.DbConnectionStringBuilder builder = new System.Data.Common.DbConnectionStringBuilder();
- builder["WebConfig"] = _local.WebConfigPath;
+ builder["ConfigFile"] = _local.WebConfigPath;
builder["Username"] = _local.Username;
builder["Password"] = _local.Password;
builder["Locale"] = System.Globalization.CultureInfo.CurrentCulture.TwoLetterISOLanguageName;
Modified: sandbox/maestro-3.0/MaestroAPITests/CapabilityTests.cs
===================================================================
--- sandbox/maestro-3.0/MaestroAPITests/CapabilityTests.cs 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/MaestroAPITests/CapabilityTests.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -123,7 +123,7 @@
break;
}
}
- Assert.IsTrue(caps.SupportsResourcePreviews);
+ Assert.IsTrue(caps.SupportsResourcePreviewUrls);
int[] services = caps.SupportedServices;
foreach (ServiceType st in Enum.GetValues(typeof(ServiceType)))
{
@@ -260,7 +260,7 @@
break;
}
}
- Assert.IsTrue(caps.SupportsResourcePreviews);
+ Assert.IsTrue(caps.SupportsResourcePreviewUrls);
int[] services = caps.SupportedServices;
foreach (ServiceType st in Enum.GetValues(typeof(ServiceType)))
{
@@ -390,7 +390,7 @@
break;
}
}
- Assert.IsTrue(caps.SupportsResourcePreviews);
+ Assert.IsTrue(caps.SupportsResourcePreviewUrls);
int[] services = caps.SupportedServices;
foreach (ServiceType st in Enum.GetValues(typeof(ServiceType)))
{
@@ -513,7 +513,7 @@
break;
}
}
- Assert.IsTrue(caps.SupportsResourcePreviews);
+ Assert.IsTrue(caps.SupportsResourcePreviewUrls);
int[] services = caps.SupportedServices;
foreach (ServiceType st in Enum.GetValues(typeof(ServiceType)))
{
@@ -633,7 +633,7 @@
break;
}
}
- Assert.IsTrue(caps.SupportsResourcePreviews);
+ Assert.IsTrue(caps.SupportsResourcePreviewUrls);
int[] services = caps.SupportedServices;
foreach (ServiceType st in Enum.GetValues(typeof(ServiceType)))
{
@@ -753,7 +753,7 @@
break;
}
}
- Assert.IsTrue(caps.SupportsResourcePreviews);
+ Assert.IsTrue(caps.SupportsResourcePreviewUrls);
int[] services = caps.SupportedServices;
foreach (ServiceType st in Enum.GetValues(typeof(ServiceType)))
{
Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Capability/ConnectionCapabilities.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Capability/ConnectionCapabilities.cs 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Capability/ConnectionCapabilities.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -20,40 +20,156 @@
using System;
using System.Collections.Generic;
using System.Text;
+using OSGeo.MapGuide.MaestroAPI.Services;
+using OSGeo.MapGuide.MaestroAPI.Exceptions;
namespace OSGeo.MapGuide.MaestroAPI.Capability
{
public abstract class ConnectionCapabilities : IConnectionCapabilities
{
- private static readonly Version V_1_0_0 = new Version(1, 0, 0);
+ protected IServerConnection _parent;
+ protected ConnectionCapabilities(IServerConnection parent)
+ {
+ _parent = parent;
+ }
+
public virtual Version GetMaxSupportedResourceVersion(ResourceTypes resourceType)
{
- return V_1_0_0;
+ Version ver = new Version(1, 0, 0);
+ switch (resourceType)
+ {
+ case ResourceTypes.ApplicationDefinition:
+ if (!SupportsFusion())
+ throw new UnsupportedResourceTypeException(ResourceTypes.ApplicationDefinition);
+ break;
+ case ResourceTypes.LayerDefinition:
+ ver = GetMaxLayerDefinitionVersion();
+ break;
+ case ResourceTypes.LoadProcedure:
+ ver = GetMaxLoadProcedureVersion();
+ break;
+ case ResourceTypes.WebLayout:
+ ver = GetMaxWebLayoutVersion();
+ break;
+ case ResourceTypes.SymbolDefinition:
+ if (!SupportsAdvancedSymbols())
+ throw new UnsupportedResourceTypeException(ResourceTypes.SymbolDefinition);
+ else
+ ver = GetMaxSymbolDefinitionVersion();
+ break;
+ }
+ return ver;
}
+ protected virtual bool SupportsAdvancedSymbols()
+ {
+ return (_parent.SiteVersion >= new Version(1, 2));
+ }
+
+ protected virtual bool SupportsFusion()
+ {
+ return (_parent.SiteVersion >= new Version(2, 0));
+ }
+
+ protected virtual Version GetMaxLoadProcedureVersion()
+ {
+ if (_parent.SiteVersion >= new Version(2, 2))
+ return new Version(2, 2, 0);
+
+ if (_parent.SiteVersion >= new Version(2, 0))
+ return new Version(1, 1, 0);
+
+ return new Version(1, 0, 0);
+ }
+
+ protected virtual Version GetMaxSymbolDefinitionVersion()
+ {
+ if (_parent.SiteVersion >= new Version(2, 0))
+ return new Version(1, 1, 0);
+
+ return new Version(1, 0, 0);
+ }
+
+ protected virtual Version GetMaxWebLayoutVersion()
+ {
+ if (_parent.SiteVersion >= new Version(2, 2))
+ return new Version(1, 1, 0);
+ return new Version(1, 0, 0);
+ }
+
+ protected virtual Version GetMaxLayerDefinitionVersion()
+ {
+ if (_parent.SiteVersion >= new Version(2, 1))
+ return new Version(1, 3, 0);
+ if (_parent.SiteVersion >= new Version(2, 0))
+ return new Version(1, 2, 0);
+ if (_parent.SiteVersion >= new Version(1, 2))
+ return new Version(1, 1, 0);
+ return new Version(1, 0, 0);
+ }
+
public abstract int[] SupportedCommands
{
get;
}
- public abstract int[] SupportedServices
+ public virtual int[] SupportedServices
{
+ get
+ {
+ if (_parent.SiteVersion >= new Version(2, 0))
+ {
+ return new int[] {
+ (int)ServiceType.Resource,
+ (int)ServiceType.Feature,
+ (int)ServiceType.Fusion,
+ (int)ServiceType.Mapping,
+ (int)ServiceType.Tile,
+ (int)ServiceType.Drawing,
+ (int)ServiceType.Site
+ };
+ }
+ else //Fusion doesn't exist pre-2.0
+ {
+ return new int[] {
+ (int)ServiceType.Resource,
+ (int)ServiceType.Feature,
+ (int)ServiceType.Mapping,
+ (int)ServiceType.Tile,
+ (int)ServiceType.Drawing,
+ (int)ServiceType.Site
+ };
+ }
+ }
+ }
+
+ public abstract bool SupportsResourcePreviewUrls
+ {
get;
}
- public virtual bool SupportsResourcePreviews
+ public abstract bool IsMultithreaded
{
- get { return false; }
+ get;
}
- public virtual bool IsMultithreaded
+ public virtual bool IsSupportedResourceType(string resourceType)
{
- get { return false; }
+ Check.NotEmpty(resourceType, "resourceType");
+ var ver = _parent.SiteVersion;
+ var rt = (ResourceTypes)Enum.Parse(typeof(ResourceTypes), resourceType);
+ switch (rt)
+ {
+ case ResourceTypes.ApplicationDefinition: //Introduced in 2.0.0
+ return (ver >= new Version(2, 0));
+ case ResourceTypes.SymbolDefinition: //Introduced in 1.2.0
+ return (ver >= new Version(1, 2));
+ }
+
+ return true;
}
- public abstract bool IsSupportedResourceType(string resourceType);
-
public bool IsSupportedResourceType(ResourceTypes resType)
{
return IsSupportedResourceType(resType.ToString());
Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Commands/CommandType.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Commands/CommandType.cs 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Commands/CommandType.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -25,13 +25,6 @@
{
public enum CommandType : int
{
- /// <summary>
- /// Get v1.0.0 Capabilites document
- /// </summary>
- GetCapabilities = 1,
- /// <summary>
- /// Get v1.1.0 Capabilites document
- /// </summary>
- GetCapabilities2 = 2,
+
}
}
Deleted: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Commands/GetCapabilities.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Commands/GetCapabilities.cs 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Commands/GetCapabilities.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -1,37 +0,0 @@
-#region Disclaimer / License
-// Copyright (C) 2010, Jackie Ng
-// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-//
-#endregion
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace OSGeo.MapGuide.MaestroAPI.Commands
-{
- public interface IGetCapabilities : ICommand
- {
- }
-
- public class GetCapabilities : IGetCapabilities
- {
- public IServerConnection Parent
- {
- get { throw new NotImplementedException(); }
- }
- }
-}
Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ConnectionProviders.xml
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ConnectionProviders.xml 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ConnectionProviders.xml 2010-10-25 06:57:06 UTC (rev 5323)
@@ -6,10 +6,21 @@
<Assembly>OSGeo.MapGuide.MaestroAPI.Http.dll</Assembly>
<Type>OSGeo.MapGuide.MaestroAPI.HttpServerConnection</Type>
</ConnectionProvider>
+ <!--
+ If you want to use the Maestro.LocalNative provider, you need to set up
+ assembly binding redirection by editing Maestro.exe.config. See these links
+ below for more information:
+
+ http://trac.osgeo.org/mapguide/wiki/maestro/MaestroAPI/MapGuideDotNetApiVersions
+
+ http://themapguyde.blogspot.com/2010/10/using-maestro-in-native-mode-with.html
+ -->
+ <!--
<ConnectionProvider>
<Name>Maestro.LocalNative</Name>
<Description>Connection using the MapGuide Web API</Description>
<Assembly>OSGeo.MapGuide.MaestroAPI.Native.dll</Assembly>
<Type>OSGeo.MapGuide.MaestroAPI.LocalNativeConnection</Type>
</ConnectionProvider>
+ -->
</ConnectionProviderRegistry>
Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/IConnectionCapabilities.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/IConnectionCapabilities.cs 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/IConnectionCapabilities.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -48,9 +48,9 @@
int[] SupportedServices { get; }
/// <summary>
- /// Indicates whether previewing capabilities are possible with this connection
+ /// Indicates whether web-based previewing capabilities are possible with this connection
/// </summary>
- bool SupportsResourcePreviews { get; }
+ bool SupportsResourcePreviewUrls { get; }
/// <summary>
/// Indicates if this current connection supports the specified resource type
Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj 2010-10-25 06:57:06 UTC (rev 5323)
@@ -166,7 +166,6 @@
<Compile Include="Check.cs" />
<Compile Include="Commands\CommandType.cs" />
<Compile Include="Commands\ExecuteLoadProcedure.cs" />
- <Compile Include="Commands\GetCapabilities.cs" />
<Compile Include="Commands\ICommand.cs" />
<Compile Include="Exceptions\CustomPropertyNotFoundException.cs" />
<Compile Include="Exceptions\MaestroException.cs" />
@@ -266,6 +265,7 @@
<Compile Include="Services\IResourceService.cs" />
<Compile Include="IServerConnection.cs" />
<Compile Include="Services\IService.cs" />
+ <Compile Include="Services\ISiteService.cs" />
<Compile Include="Services\ITileService.cs" />
<Compile Include="LengthyOperationCallbackArgs.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ServerConnectionBase.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ServerConnectionBase.cs 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/ServerConnectionBase.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -1650,6 +1650,8 @@
public abstract string[] GetClassNames(string resourceId, string schemaName);
+ public abstract ObjCommon.SiteInformation GetSiteInfo();
+
public abstract IServerConnection Clone();
}
}
Added: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Services/ISiteService.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Services/ISiteService.cs (rev 0)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Services/ISiteService.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -0,0 +1,37 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+//
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Text;
+using OSGeo.MapGuide.ObjectModels.Common;
+
+namespace OSGeo.MapGuide.MaestroAPI.Services
+{
+ public interface ISiteService : IService
+ {
+ UserList EnumerateUsers();
+
+ UserList EnumerateUsers(string group);
+
+ GroupList EnumerateGroups();
+
+ SiteInformation GetSiteInfo();
+ }
+}
Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Services/ServiceType.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Services/ServiceType.cs 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI/Services/ServiceType.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -31,5 +31,6 @@
Mapping,
Tile,
Fusion,
+ Site
}
}
Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Http/HttpCapabilities.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Http/HttpCapabilities.cs 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Http/HttpCapabilities.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -28,88 +28,8 @@
{
internal class HttpCapabilities : ConnectionCapabilities
{
- private IServerConnection _parent;
+ internal HttpCapabilities(IServerConnection parent) : base(parent) { }
- internal HttpCapabilities(IServerConnection parent)
- {
- _parent = parent;
- }
-
- public override Version GetMaxSupportedResourceVersion(ResourceTypes resourceType)
- {
- Version ver = new Version(1, 0, 0);
- switch (resourceType)
- {
- case ResourceTypes.ApplicationDefinition:
- if (!SupportsFusion())
- throw new UnsupportedResourceTypeException(ResourceTypes.ApplicationDefinition);
- break;
- case ResourceTypes.LayerDefinition:
- ver = GetMaxLayerDefinitionVersion();
- break;
- case ResourceTypes.LoadProcedure:
- ver = GetMaxLoadProcedureVersion();
- break;
- case ResourceTypes.WebLayout:
- ver = GetMaxWebLayoutVersion();
- break;
- case ResourceTypes.SymbolDefinition:
- if (!SupportsAdvancedSymbols())
- throw new UnsupportedResourceTypeException(ResourceTypes.SymbolDefinition);
- else
- ver = GetMaxSymbolDefinitionVersion();
- break;
- }
- return ver;
- }
-
- private bool SupportsAdvancedSymbols()
- {
- return (_parent.SiteVersion >= new Version(1, 2));
- }
-
- private bool SupportsFusion()
- {
- return (_parent.SiteVersion >= new Version(2, 0));
- }
-
- private Version GetMaxLoadProcedureVersion()
- {
- if (_parent.SiteVersion >= new Version(2, 2))
- return new Version(2, 2, 0);
-
- if (_parent.SiteVersion >= new Version(2, 0))
- return new Version(1, 1, 0);
-
- return new Version(1, 0, 0);
- }
-
- private Version GetMaxSymbolDefinitionVersion()
- {
- if (_parent.SiteVersion >= new Version(2, 0))
- return new Version(1, 1, 0);
-
- return new Version(1, 0, 0);
- }
-
- private Version GetMaxWebLayoutVersion()
- {
- if (_parent.SiteVersion >= new Version(2, 2))
- return new Version(1, 1, 0);
- return new Version(1, 0, 0);
- }
-
- private Version GetMaxLayerDefinitionVersion()
- {
- if (_parent.SiteVersion >= new Version(2, 1))
- return new Version(1, 3, 0);
- if (_parent.SiteVersion >= new Version(2, 0))
- return new Version(1, 2, 0);
- if (_parent.SiteVersion >= new Version(1, 2))
- return new Version(1, 1, 0);
- return new Version(1, 0, 0);
- }
-
public override int[] SupportedCommands
{
get
@@ -121,36 +41,8 @@
}
}
- public override int[] SupportedServices
+ public override bool SupportsResourcePreviewUrls
{
- get
- {
- if (_parent.SiteVersion >= new Version(2, 0))
- {
- return new int[] {
- (int)ServiceType.Resource,
- (int)ServiceType.Feature,
- (int)ServiceType.Fusion,
- (int)ServiceType.Mapping,
- (int)ServiceType.Tile,
- (int)ServiceType.Drawing
- };
- }
- else //Fusion doesn't exist pre-2.0
- {
- return new int[] {
- (int)ServiceType.Resource,
- (int)ServiceType.Feature,
- (int)ServiceType.Mapping,
- (int)ServiceType.Tile,
- (int)ServiceType.Drawing
- };
- }
- }
- }
-
- public override bool SupportsResourcePreviews
- {
get { return true; }
}
@@ -158,21 +50,5 @@
{
get { return false; }
}
-
- public override bool IsSupportedResourceType(string resourceType)
- {
- Check.NotEmpty(resourceType, "resourceType");
- var ver = _parent.SiteVersion;
- var rt = (ResourceTypes)Enum.Parse(typeof(ResourceTypes), resourceType);
- switch (rt)
- {
- case ResourceTypes.ApplicationDefinition: //Introduced in 2.0.0
- return (ver >= new Version(2, 0));
- case ResourceTypes.SymbolDefinition: //Introduced in 1.2.0
- return (ver >= new Version(1, 2));
- }
-
- return true;
- }
}
}
Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Http/HttpServerConnection.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Http/HttpServerConnection.cs 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Http/HttpServerConnection.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -52,7 +52,8 @@
ITileService,
IMappingService,
IDrawingService,
- IFusionService
+ IFusionService,
+ ISiteService
{
private RequestBuilder m_reqBuilder;
@@ -200,14 +201,14 @@
}
}
- [Obsolete("This will be removed in the future. Use ConnectionProviderRegistry.CreateHttpConnection() instead")]
+ [Obsolete("This will be removed in the future. Use ConnectionProviderRegistry.CreateConnection() instead")]
public HttpServerConnection(Uri hosturl, string sessionid, string locale, bool allowUntestedVersion)
: this()
{
InitConnection(hosturl, sessionid, locale, allowUntestedVersion);
}
- [Obsolete("This will be removed in the future. Use ConnectionProviderRegistry.CreateHttpConnection() instead")]
+ [Obsolete("This will be removed in the future. Use ConnectionProviderRegistry.CreateConnection() instead")]
public HttpServerConnection(Uri hosturl, string username, string password, string locale, bool allowUntestedVersion)
: this()
{
@@ -1668,6 +1669,7 @@
case ServiceType.Mapping:
case ServiceType.Resource:
case ServiceType.Tile:
+ case ServiceType.Site:
return this;
case ServiceType.Fusion:
if (this.SiteVersion >= new Version(2, 0))
@@ -1902,5 +1904,14 @@
else
return new HttpServerConnection(new Uri(this.ServerURI), this.SessionID, null, true);
}
+
+ public override SiteInformation GetSiteInfo()
+ {
+ var req = m_reqBuilder.GetSiteInfo();
+ using (var s = this.OpenRead(req))
+ {
+ return this.DeserializeObject<SiteInformation>(s);
+ }
+ }
}
}
Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Http/RequestBuilder.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Http/RequestBuilder.cs 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Http/RequestBuilder.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -1486,5 +1486,19 @@
return m_hosturi + "?" + EncodeParameters(param);
}
+
+ public string GetSiteInfo()
+ {
+ NameValueCollection param = new NameValueCollection();
+ param.Add("OPERATION", "GETSITEINFO");
+ param.Add("VERSION", "1.0.0");
+ param.Add("SESSION", m_sessionID);
+ param.Add("FORMAT", "text/xml");
+ param.Add("CLIENTAGENT", m_userAgent);
+ if (m_locale != null)
+ param.Add("LOCALE", m_locale);
+
+ return m_hosturi + "?" + EncodeParameters(param);
+ }
}
}
Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/LocalNativeCapabilities.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/LocalNativeCapabilities.cs 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/LocalNativeCapabilities.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -21,41 +21,31 @@
using System.Collections.Generic;
using System.Text;
using OSGeo.MapGuide.MaestroAPI.Services;
+using OSGeo.MapGuide.MaestroAPI.Capability;
namespace OSGeo.MapGuide.MaestroAPI.Native
{
- public class LocalNativeCapabilities : IConnectionCapabilities
+ public class LocalNativeCapabilities : ConnectionCapabilities
{
- public Version GetMaxSupportedResourceVersion(ResourceTypes resourceType)
- {
- throw new NotImplementedException();
- }
+ internal LocalNativeCapabilities(IServerConnection parent) : base(parent) { }
- public bool IsMultithreaded
+ public override int[] SupportedCommands
{
- get { return false; }
- }
-
- public int[] SupportedCommands
- {
get
{
- return new int[0];
+ //TODO: Work out what this can/can't do
+ return new int[]
+ {
+ };
}
}
- public int[] SupportedServices
+ public override bool SupportsResourcePreviewUrls
{
- get
- {
- return new int[] {
- (int)ServiceType.Resource,
- (int)ServiceType.Feature,
- };
- }
+ get { return true; }
}
- public bool SupportsResourcePreviews
+ public override bool IsMultithreaded
{
get { return false; }
}
Modified: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/LocalNativeConnection.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/LocalNativeConnection.cs 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/LocalNativeConnection.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -19,32 +19,41 @@
#endregion
using System;
using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.IO;
using System.Text;
-using OSGeo.MapGuide.ObjectModels.Common;
-using System.Collections.Specialized;
-using OSGeo.MapGuide.ObjectModels.Capabilities;
+using OSGeo.MapGuide.MaestroAPI.CoordinateSystem;
using OSGeo.MapGuide.MaestroAPI.Mapping;
-using OSGeo.MapGuide.MaestroAPI.CoordinateSystem;
-using OSGeo.MapGuide.ObjectModels.MapDefinition;
using OSGeo.MapGuide.MaestroAPI.Resource;
+using OSGeo.MapGuide.MaestroAPI.Serialization;
+using OSGeo.MapGuide.MaestroAPI.Services;
using OSGeo.MapGuide.ObjectModels.ApplicationDefinition;
-using System.IO;
-using OSGeo.MapGuide.MaestroAPI.Services;
-using OSGeo.MapGuide.MaestroAPI.Serialization;
-using OSGeo.MapGuide.MaestroAPI.Native.Mapping;
+using OSGeo.MapGuide.ObjectModels.Capabilities;
+using OSGeo.MapGuide.ObjectModels.Common;
+using OSGeo.MapGuide.ObjectModels.MapDefinition;
+using OSGeo.MapGuide.MaestroAPI.Exceptions;
namespace OSGeo.MapGuide.MaestroAPI.Native
{
public class LocalNativeConnection : ServerConnectionBase,
IServerConnection,
IFeatureService,
- IResourceService
+ IResourceService,
+ ITileService,
+ //IMappingService,
+ IDrawingService,
+ ISiteService
{
private OSGeo.MapGuide.MgSiteConnection m_con;
private string m_locale;
private string m_sessionId;
private Version m_siteVersion = null;
+ /// <summary>
+ /// The web config file
+ /// </summary>
+ protected string m_webconfig;
+
public const string PARAM_SESSION = "SessionId";
public const string PARAM_CONFIG = "ConfigFile";
public const string PARAM_USERNAME = "Username";
@@ -97,6 +106,7 @@
private void InitConnection(string configFile, string username, string password, string locale)
{
+ m_webconfig = configFile;
m_username = username;
m_password = password;
m_locale = locale;
@@ -106,7 +116,7 @@
RestartSession();
}
- // <summary>
+ /// <summary>
/// Returns a working copy of the site connection.
/// </summary>
private MgSiteConnection Connection
@@ -120,7 +130,7 @@
}
}
- public override string SessionID
+ public override string SessionID
{
get
{
@@ -598,7 +608,8 @@
else if (parts.Length != 2)
throw new Exception("Unable to parse classname into class and schema: " + classname);
- foreach(MgClassDefinition cdef in fes.DescribeSchema(resId, parts[0])[0].GetClasses())
+ foreach (MgClassDefinition cdef in fes.DescribeSchema(resId, parts[0])[0].GetClasses())
+ {
if (parts.Length == 1 || cdef.Name.ToLower().Trim().Equals(parts[1].ToLower().Trim()))
{
props = cdef.GetIdentityProperties();
@@ -609,6 +620,7 @@
return res;
}
+ }
throw new Exception("Unable to find class: " + parts[1] + " in schema " + parts[0]);
}
@@ -855,7 +867,7 @@
{
if (_caps == null)
{
- _caps = new LocalNativeCapabilities();
+ _caps = new LocalNativeCapabilities(this);
}
return _caps;
}
@@ -863,7 +875,22 @@
public OSGeo.MapGuide.MaestroAPI.Services.IService GetService(int serviceType)
{
- throw new NotImplementedException();
+ ServiceType st = (ServiceType)serviceType;
+ switch (st)
+ {
+ case ServiceType.Drawing:
+ case ServiceType.Feature:
+ case ServiceType.Mapping:
+ case ServiceType.Resource:
+ case ServiceType.Tile:
+ case ServiceType.Site:
+ return this;
+ case ServiceType.Fusion:
+ if (this.SiteVersion >= new Version(2, 0))
+ return this;
+ break;
+ }
+ throw new UnsupportedServiceTypeException(st);
}
protected override IServerConnection GetInterface()
@@ -904,22 +931,204 @@
public override string[] GetCustomPropertyNames()
{
- throw new NotImplementedException();
+ return new string[] { };
}
public override Type GetCustomPropertyType(string name)
{
- throw new NotImplementedException();
+ throw new CustomPropertyNotFoundException();
}
public override void SetCustomProperty(string name, object value)
{
- throw new NotImplementedException();
+ throw new CustomPropertyNotFoundException();
}
public override object GetCustomProperty(string name)
{
- throw new NotImplementedException();
+ throw new CustomPropertyNotFoundException();
}
+
+ public override DataStoreList EnumerateDataStores(string providerName, string partialConnString)
+ {
+ var fes = (MgFeatureService)this.Connection.CreateService(MgServiceType.FeatureService);
+ return (DataStoreList)base.DeserializeObject(typeof(DataStoreList), Utility.MgStreamToNetStream(fes, fes.GetType().GetMethod("EnumerateDataStores"), new object[] { providerName, partialConnString }));
+ }
+
+ public override string[] GetSchemas(string resourceId)
+ {
+ List<string> names = new List<string>();
+ var fsvc = (MgFeatureService)this.Connection.CreateService(MgServiceType.FeatureService);
+ var schemaNames = fsvc.GetSchemas(new MgResourceIdentifier(resourceId));
+ for (int i = 0; i < schemaNames.GetCount(); i++)
+ {
+ names.Add(schemaNames.GetItem(i));
+ }
+ return names.ToArray();
+ }
+
+ public override string[] GetClassNames(string resourceId, string schemaName)
+ {
+ List<string> names = new List<string>();
+ var fsvc = (MgFeatureService)this.Connection.CreateService(MgServiceType.FeatureService);
+ var classNames = fsvc.GetClasses(new MgResourceIdentifier(resourceId), schemaName);
+ for (int i = 0; i < classNames.GetCount(); i++)
+ {
+ names.Add(classNames.GetItem(i));
+ }
+ return names.ToArray();
+ }
+
+ public override IServerConnection Clone()
+ {
+ var initP = new NameValueCollection();
+ initP[PARAM_SESSION] = this.SessionID;
+ return new LocalNativeConnection(initP);
+ }
+
+ private MgServerAdmin _admin;
+
+ internal MgServerAdmin ServerAdmin
+ {
+ get
+ {
+ if (_admin == null)
+ {
+ _admin = new MgServerAdmin();
+ _admin.Open(new MgUserInformation(this.SessionID));
+ }
+
+ return _admin;
+ }
+ }
+
+ public override SiteInformation GetSiteInfo()
+ {
+ var info = new SiteInformation();
+ info.SiteServer = new SiteInformationSiteServer();
+ info.SiteServer.OperatingSystem = new SiteInformationSiteServerOperatingSystem();
+ info.Statistics = new SiteInformationStatistics();
+
+ var props = this.ServerAdmin.GetInformationProperties();
+
+ var prop = props.GetItem(MgServerInformationProperties.DisplayName);
+ info.SiteServer.DisplayName = ((MgStringProperty)prop).GetValue();
+
+ prop = props.GetItem(MgServerInformationProperties.OperatingSystemVersion);
+ info.SiteServer.OperatingSystem.Version = ((MgStringProperty)prop).GetValue();
+
+ prop = props.GetItem(MgServerInformationProperties.TotalPhysicalMemory);
+ info.SiteServer.OperatingSystem.TotalPhysicalMemory = ((MgInt64Property)prop).GetValue().ToString();
+
+ prop = props.GetItem(MgServerInformationProperties.TotalVirtualMemory);
+ info.SiteServer.OperatingSystem.TotalVirtualMemory = ((MgInt64Property)prop).GetValue().ToString();
+
+ prop = props.GetItem(MgServerInformationProperties.AvailablePhysicalMemory);
+ info.SiteServer.OperatingSystem.AvailablePhysicalMemory = ((MgInt64Property)prop).GetValue().ToString();
+
+ prop = props.GetItem(MgServerInformationProperties.AvailableVirtualMemory);
+ info.SiteServer.OperatingSystem.AvailableVirtualMemory = ((MgInt64Property)prop).GetValue().ToString();
+
+ prop = props.GetItem(MgServerInformationProperties.Status);
+ info.SiteServer.Status = ((MgBooleanProperty)prop).GetValue() ? "Online" : "Offline";
+
+ prop = props.GetItem(MgServerInformationProperties.ServerVersion);
+ info.SiteServer.Version = ((MgStringProperty)prop).GetValue();
+
+ prop = props.GetItem(MgServerInformationProperties.TotalActiveConnections);
+ info.Statistics.ActiveConnections = ((MgInt32Property)prop).GetValue().ToString();
+
+ prop = props.GetItem(MgServerInformationProperties.AdminOperationsQueueCount);
+ info.Statistics.AdminOperationsQueueCount = ((MgInt32Property)prop).GetValue().ToString();
+
+ prop = props.GetItem(MgServerInformationProperties.AverageOperationTime);
+ info.Statistics.AverageOperationTime = ((MgInt64Property)prop).GetValue().ToString();
+
+ prop = props.GetItem(MgServerInformationProperties.ClientOperationsQueueCount);
+ info.Statistics.ClientOperationsQueueCount = ((MgInt32Property)prop).GetValue().ToString();
+
+ prop = props.GetItem(MgServerInformationProperties.CpuUtilization);
+ info.Statistics.CpuUtilization = ((MgInt32Property)prop).GetValue().ToString();
+
+ prop = props.GetItem(MgServerInformationProperties.SiteOperationsQueueCount);
+ info.Statistics.SiteOperationsQueueCount = ((MgInt32Property)prop).GetValue().ToString();
+
+ prop = props.GetItem(MgServerInformationProperties.TotalConnections);
+ info.Statistics.TotalConnections = ((MgInt32Property)prop).GetValue().ToString();
+
+ prop = props.GetItem(MgServerInformationProperties.TotalProcessedOperations);
+ info.Statistics.TotalOperationsProcessed = ((MgInt32Property)prop).GetValue().ToString();
+
+ prop = props.GetItem(MgServerInformationProperties.TotalReceivedOperations);
+ info.Statistics.TotalOperationsReceived = ((MgInt32Property)prop).GetValue().ToString();
+
+ prop = props.GetItem(MgServerInformationProperties.TotalOperationTime);
+ info.Statistics.TotalOperationTime = ((MgInt64Property)prop).GetValue().ToString();
+
+ prop = props.GetItem(MgServerInformationProperties.Uptime);
+ info.Statistics.Uptime = ((MgInt64Property)prop).GetValue().ToString();
+
+ return info;
+ }
+
+ public Stream DescribeDrawing(string resourceID)
+ {
+ var dwSvc = (MgDrawingService)this.Connection.CreateService(MgServiceType.DrawingService);
+ return Utility.MgStreamToNetStream(dwSvc, dwSvc.GetType().GetMethod("DescribeDrawing"), new object[] { new MgResourceIdentifier(resourceID) });
+ }
+
+ public string[] EnumerateDrawingLayers(string resourceID, string sectionName)
+ {
+ var dwSvc = (MgDrawingService)this.Connection.CreateService(MgServiceType.DrawingService);
+ var layers = dwSvc.EnumerateLayers(new MgResourceIdentifier(resourceID), sectionName);
+ var layerNames = new List<string>();
+ for (int i = 0; i < layers.GetCount(); i++)
+ {
+ layerNames.Add(layers.GetItem(i));
+ }
+ return layerNames.ToArray();
+ }
+
+ public DrawingSectionResourceList EnumerateDrawingSectionResources(string resourceID, string sectionName)
+ {
+ var dwSvc = (MgDrawingService)this.Connection.CreateService(MgServiceType.DrawingService);
+ return base.DeserializeObject<DrawingSectionResourceList>(Utility.MgStreamToNetStream(dwSvc, dwSvc.GetType().GetMethod("EnumerateDrawingSectionResources"), new object[] { new MgResourceIdentifier(resourceID), sectionName }));
+ }
+
+ public DrawingSectionList EnumerateDrawingSections(string resourceID)
+ {
+ var dwSvc = (MgDrawingService)this.Connection.CreateService(MgServiceType.DrawingService);
+ return base.DeserializeObject<DrawingSectionList>(Utility.MgStreamToNetStream(dwSvc, dwSvc.GetType().GetMethod("EnumerateDrawingSections"), new object[] { new MgResourceIdentifier(resourceID) }));
+ }
+
+ public string GetDrawingCoordinateSpace(string resourceID)
+ {
+ var dwSvc = (MgDrawingService)this.Connection.CreateService(MgServiceType.DrawingService);
+ return dwSvc.GetCoordinateSpace(new MgResourceIdentifier(resourceID));
+ }
+
+ public Stream GetDrawing(string resourceID)
+ {
+ var dwSvc = (MgDrawingService)this.Connection.CreateService(MgServiceType.DrawingService);
+ return Utility.MgStreamToNetStream(dwSvc, dwSvc.GetType().GetMethod("GetDrawing"), new object[] { new MgResourceIdentifier(resourceID) });
+ }
+
+ public Stream GetLayer(string resourceID, string sectionName, string layerName)
+ {
+ var dwSvc = (MgDrawingService)this.Connection.CreateService(MgServiceType.DrawingService);
+ return Utility.MgStreamToNetStream(dwSvc, dwSvc.GetType().GetMethod("GetLayer"), new object[] { new MgResourceIdentifier(resourceID), sectionName, layerName });
+ }
+
+ public Stream GetSection(string resourceID, string sectionName)
+ {
+ var dwSvc = (MgDrawingService)this.Connection.CreateService(MgServiceType.DrawingService);
+ return Utility.MgStreamToNetStream(dwSvc, dwSvc.GetType().GetMethod("GetSection"), new object[] { new MgResourceIdentifier(resourceID), sectionName });
+ }
+
+ public Stream GetSectionResource(string resourceID, string resourceName)
+ {
+ var dwSvc = (MgDrawingService)this.Connection.CreateService(MgServiceType.DrawingService);
+ return Utility.MgStreamToNetStream(dwSvc, dwSvc.GetType().GetMethod("GetSectionResource"), new object[] { new MgResourceIdentifier(resourceID), resourceName });
+ }
}
}
Copied: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/OSGeo.MapGuide.MaestroAPI.Native.csproj (from rev 5321, sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/OSGeo.MapGuide.MaestroAPI.Native-2.2.0.csproj)
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/OSGeo.MapGuide.MaestroAPI.Native.csproj (rev 0)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/OSGeo.MapGuide.MaestroAPI.Native.csproj 2010-10-25 06:57:06 UTC (rev 5323)
@@ -0,0 +1,81 @@
+<?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>{F4420153-9DF3-4407-AD65-E8ABED2B6E25}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>OSGeo.MapGuide.MaestroAPI.Native</RootNamespace>
+ <AssemblyName>OSGeo.MapGuide.MaestroAPI.Native</AssemblyName>
+ <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</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>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="MapGuideDotNetApi, Version=2.0.0.2308, Culture=neutral, PublicKeyToken=f526c48929fda856, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\Thirdparty\MapGuideDotNetApi\MapGuideDotNetApi.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Drawing" />
+ <Reference Include="System.Xml" />
+ <Reference Include="Topology, Version=1.0.8.24721, Culture=neutral, PublicKeyToken=f526c48929fda856, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\Thirdparty\TF.NET\Topology.dll</HintPath>
+ </Reference>
+ <Reference Include="Topology.IO.MapGuide, Version=1.0.8.40022, Culture=neutral, PublicKeyToken=f526c48929fda856, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\Thirdparty\TF.NET\Topology.IO.MapGuide.dll</HintPath>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="..\Properties\GlobalAssemblyInfo.cs">
+ <Link>GlobalAssemblyInfo.cs</Link>
+ </Compile>
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="LocalNativeCapabilities.cs" />
+ <Compile Include="LocalNativeConnection.cs" />
+ <Compile Include="LocalNativeCoordinateSystem.cs" />
+ <Compile Include="LocalNativeCoordinateSystemCatalog.cs" />
+ <Compile Include="LocalNativeCoordinateSystemCategory.cs" />
+ <Compile Include="LocalNativeFeatureSetReader.cs" />
+ <Compile Include="Utility.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\OSGeo.MapGuide.MaestroAPI\OSGeo.MapGuide.MaestroAPI.csproj">
+ <Project>{80FA3158-8B5F-48D1-A393-0378AFE48A7E}</Project>
+ <Name>OSGeo.MapGuide.MaestroAPI</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Commands\" />
+ </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>
\ No newline at end of file
Deleted: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/Properties/AssemblyInfo-2.2.0.cs
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/Properties/AssemblyInfo-2.2.0.cs 2010-10-25 03:03:23 UTC (rev 5322)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/Properties/AssemblyInfo-2.2.0.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -1,55 +0,0 @@
-#region Disclaimer / License
-// Copyright (C) 2010, Jackie Ng
-// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-//
-#endregion
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("OSGeo.MapGuide.MaestroAPI.Native-2.2.0")]
-[assembly: AssemblyDescription("MaestroAPI implementation wrapper for MapGuide Open Source 2.2")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("OSGeo.MapGuide.MaestroAPI.Native-2.2.0")]
-[assembly: AssemblyCopyright("Copyright © 2010")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("D80991DF-E4D3-43ee-AF2B-C96AD8462C70")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
Copied: sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/Properties/AssemblyInfo.cs (from rev 5321, sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/Properties/AssemblyInfo-2.2.0.cs)
===================================================================
--- sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/Properties/AssemblyInfo.cs (rev 0)
+++ sandbox/maestro-3.0/OSGeo.MapGuide.MaestroAPI.Native/Properties/AssemblyInfo.cs 2010-10-25 06:57:06 UTC (rev 5323)
@@ -0,0 +1,46 @@
+#region Disclaimer / License
+// Copyright (C) 2010, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+//
+#endregion
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using OSGeo.MapGuide.MaestroAPI.Native;
+using OSGeo.MapGuide.MaestroAPI;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("OSGeo.MapGuide.MaestroAPI.Native")]
+[assembly: AssemblyDescription("MaestroAPI implementation wrapper for Official MapGuide API")]
+[assembly: AssemblyProduct("OSGeo.MapGuide.MaestroAPI.Native")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("D80991DF-E4D3-43ee-AF2B-C96AD8462C70")]
+
+[assembly: InternalsVisibleTo("MaestroAPITests")]
+[assembly: InternalsVisibleTo("MaestroBaseTests")]
+
+[assembly: MaestroApiProvider("Maestro.LocalNative", "Maestro wrapper for official MapGuide API", typeof(LocalNativeConnection), true)]
\ No newline at end of file
More information about the mapguide-commits
mailing list