Checkpoint micasad code for portable app on windows.

This commit is contained in:
Jim Norman 2006-11-28 06:37:07 +00:00
parent 411e95b4f0
commit 20ae282ddb
20 changed files with 4600 additions and 14 deletions

View File

@ -708,6 +708,30 @@ namespace sscs.cache
{
keyChainList.Remove(id);
return true;
}
internal KeyChain GetKeyChainDefault(bool bCreateIfNotFound)
{
KeyChain kc;
try
{
kc = GetKeyChainDefault();
}
catch (Exception e)
{
if (bCreateIfNotFound)
{
kc = new KeyChain("SSCS_SESSION_KEY_CHAIN_ID\0");
AddKeyChain(kc);
}
else
{
throw e;
}
}
return kc;
}
internal KeyChain GetKeyChainDefault()

View File

@ -66,9 +66,15 @@ namespace sscs.common
{
return sessionManager;
}
}
}
internal static SecretStore CreateUserSession(UserIdentifier userId)
{
return CreateUserSession(userId, null);
}
internal static SecretStore CreateUserSession(UserIdentifier userId)
internal static SecretStore CreateUserSession(UserIdentifier userId, string userHome)
{
CSSSLogger.ExecutionTrace(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
SecretStore ss;
@ -84,7 +90,16 @@ namespace sscs.common
{
// Would create either windows/unix user
// depending on the platform.
User user = User.CreateUser(userId);
User user;
if (userHome != null)
{
user = User.CreateUser(userId, userHome);
}
else
{
user = User.CreateUser(userId);
}
mutex.WaitOne();
sessionTable.Add(userId,user);
mutex.ReleaseMutex();

View File

@ -55,6 +55,20 @@ namespace sscs.common
return secretStore;
}
internal static User CreateUser(UserIdentifier userId, string userHome)
{
User user = null;
#if LINUX
user = new UnixUser(userId);
#endif
#if W32
user = new WinUser(userId, userHome);
#endif
return user;
}
internal static User CreateUser(UserIdentifier userId)
{
User user = null;

View File

@ -39,6 +39,14 @@ namespace sscs.common
{
}
internal WinUser(UserIdentifier winUserId, string userHome)
{
userId = winUserId;
secretStore = new SecretStore(this);
m_sUserHome = userHome;
}
internal WinUser(UserIdentifier winUserId)
{
userId = winUserId;
@ -115,8 +123,5 @@ namespace sscs.common
}
}
}
}
}

View File

@ -0,0 +1,256 @@
// Begin of code sample
using System;
using System.Text;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using System.Security.Principal;
using System.Diagnostics;
// Forward declarations
using LUID = System.Int64;
using HANDLE = System.IntPtr;
namespace sscs.init
{
class UserInfo
{
public const int TOKEN_QUERY = 0X00000008;
const int ERROR_NO_MORE_ITEMS = 259;
enum TOKEN_INFORMATION_CLASS
{
TokenUser = 1,
TokenGroups,
TokenPrivileges,
TokenOwner,
TokenPrimaryGroup,
TokenDefaultDacl,
TokenSource,
TokenType,
TokenImpersonationLevel,
TokenStatistics,
TokenRestrictedSids,
TokenSessionId
}
[StructLayout(LayoutKind.Sequential)]
public struct _LUID
{
public int LowPart;
public int HighPart;
} //LUID, *PLUID;
[StructLayout(LayoutKind.Sequential)]
public struct TOKEN_STATISTICS
{
public _LUID TokenId;
public _LUID AuthenticationId;
public int ExpirationTime;
public int TokenType; // enum ini in 1 TOKEN_TYPE
public int ImpersonationLevel; //SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
public int DynamicCharged; ////DWORD
public int DynamicAvailable; //DWORD
public int GroupCount; //DWORD
public int PrivilegeCount; //DWORD
public _LUID ModifiedId;
}// TOKEN_STATISTICS, *PTOKEN_STATISTICS;
[StructLayout(LayoutKind.Sequential)]
struct TOKEN_USER
{
public _SID_AND_ATTRIBUTES User;
}
[StructLayout(LayoutKind.Sequential)]
public struct _SID_AND_ATTRIBUTES
{
public IntPtr Sid;
public int Attributes;
}
[DllImport("advapi32")]
static extern bool OpenProcessToken(
HANDLE ProcessHandle, // handle to process
int DesiredAccess, // desired access to process
ref IntPtr TokenHandle // handle to open access token
);
[DllImport("kernel32")]
static extern HANDLE GetCurrentProcess();
[DllImport("advapi32", CharSet = CharSet.Auto)]
static extern bool GetTokenInformation(
HANDLE hToken,
TOKEN_INFORMATION_CLASS tokenInfoClass,
IntPtr TokenInformation,
int tokeInfoLength,
ref int reqLength);
[DllImport("kernel32")]
static extern bool CloseHandle(HANDLE handle);
[DllImport("advapi32", CharSet = CharSet.Auto)]
static extern bool LookupAccountSid
(
[In, MarshalAs(UnmanagedType.LPTStr)] string lpSystemName, // name of local or remote computer
IntPtr pSid, // security identifier
StringBuilder Account, // account name buffer
ref int cbName, // size of account name buffer
StringBuilder DomainName, // domain name
ref int cbDomainName, // size of domain name buffer
ref int peUse // SID type
// ref _SID_NAME_USE peUse // SID type
);
[DllImport("advapi32", CharSet = CharSet.Auto)]
static extern bool ConvertSidToStringSid(
IntPtr pSID,
[In, Out, MarshalAs(UnmanagedType.LPTStr)] ref string pStringSid);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern uint GetLastError();
static void DumpUserInfo(HANDLE pToken)
{
int Access = TOKEN_QUERY;
StringBuilder sb = new StringBuilder();
sb.AppendFormat("\nToken dump performed on {0}\n\n", DateTime.Now);
HANDLE procToken = IntPtr.Zero;
if (OpenProcessToken(pToken, Access, ref procToken))
{
sb.Append("Process Token:\n");
sb.Append(PerformDump(procToken));
CloseHandle(procToken);
}
Console.WriteLine(sb.ToString());
}
static StringBuilder PerformDump(HANDLE token)
{
StringBuilder sb = new StringBuilder();
TOKEN_USER tokUser;
const int bufLength = 256;
IntPtr tu = Marshal.AllocHGlobal(bufLength);
int cb = bufLength;
GetTokenInformation(token, TOKEN_INFORMATION_CLASS.TokenUser, tu, cb, ref cb);
tokUser = (TOKEN_USER)Marshal.PtrToStructure(tu, typeof(TOKEN_USER));
sb.Append(DumpAccountSid(tokUser.User.Sid));
Marshal.FreeHGlobal(tu);
return sb;
}
static string GetSID(HANDLE token)
{
TOKEN_USER tokUser;
const int bufLength = 256;
IntPtr tu = Marshal.AllocHGlobal(bufLength);
int cb = bufLength;
if (GetTokenInformation(token, TOKEN_INFORMATION_CLASS.TokenUser, tu, cb, ref cb))
{
tokUser = (TOKEN_USER)Marshal.PtrToStructure(tu, typeof(TOKEN_USER));
Marshal.FreeHGlobal(tu);
string SidString = "";
ConvertSidToStringSid(tokUser.User.Sid, ref SidString);
if (SidString.Length > 0)
{
return SidString;
}
else
{
return DumpAccountSid(tokUser.User.Sid);
}
}
else
{
uint error = GetLastError();
}
Marshal.FreeHGlobal(tu);
return null;
}
internal static void GetLUID(ref int lowPart, ref int highPart, ref string sSID)
{
// first open our process token
int Access = TOKEN_QUERY;
HANDLE procToken = IntPtr.Zero;
Process proc = Process.GetCurrentProcess();
if (OpenProcessToken(proc.Handle, Access, ref procToken))
{
GetLUID(procToken, ref lowPart, ref highPart);
sSID = GetSID(procToken);
CloseHandle(procToken);
}
}
private static void GetLUID(HANDLE token, ref int lowPart, ref int highPart)
{
TOKEN_USER tokUser;
const int bufLength = 256;
IntPtr tu = Marshal.AllocHGlobal(bufLength);
int cb = bufLength;
TOKEN_STATISTICS stats;
if (GetTokenInformation(token, TOKEN_INFORMATION_CLASS.TokenStatistics, tu, cb, ref cb))
{
stats = (TOKEN_STATISTICS)Marshal.PtrToStructure(tu, typeof(TOKEN_STATISTICS));
// copy low and high part
lowPart = stats.AuthenticationId.LowPart;
highPart = stats.AuthenticationId.HighPart;
}
Marshal.FreeHGlobal(tu);
}
static string DumpAccountSid(IntPtr SID)
{
int cchAccount = 0;
int cchDomain = 0;
int snu = 0;
StringBuilder sb = new StringBuilder();
// Caller allocated buffer
StringBuilder Account = null;
StringBuilder Domain = null;
bool ret = LookupAccountSid(null, SID, Account, ref cchAccount, Domain, ref cchDomain, ref snu);
if (ret == true)
if (Marshal.GetLastWin32Error() == ERROR_NO_MORE_ITEMS)
return "Error";
try
{
Account = new StringBuilder(cchAccount);
Domain = new StringBuilder(cchDomain);
ret = LookupAccountSid(null, SID, Account, ref cchAccount, Domain, ref cchDomain, ref snu);
if (ret)
{
sb.Append(Domain);
sb.Append(@"\\");
sb.Append(Account);
}
else
Console.WriteLine("logon account (no name) ");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
}
string SidString = null;
ConvertSidToStringSid(SID, ref SidString);
sb.Append("\nSID: ");
sb.Append(SidString);
return SidString;
}
}
}
// End of code sample

View File

@ -32,6 +32,7 @@ using System.Configuration.Install ;
using sscs.communication;
using sscs.constants;
using sscs.common;
using sscs.winforms;
namespace sscs.init
{
@ -110,9 +111,15 @@ namespace sscs.init
return;
}
if (opt != null && opt.ToLower() == "/standalone")
foreach (string arg in args)
{
System.Diagnostics.Trace.WriteLine("arg: " + arg);
}
if (opt != null
&& (opt.ToLower() == "/standalone" || opt.ToLower() == "/s"))
{
MainInternal(args);
MainInternal(args);
}
else
{
@ -213,7 +220,15 @@ namespace sscs.init
CSSSLogger.DbgLog("Checking service: " + x.DisplayName);
if (x.Status==System.ServiceProcess.ServiceControllerStatus.Stopped)
{
x.Start();
try
{
x.Start();
}
catch (Exception e)
{
System.Diagnostics.Trace.WriteLine(e.ToString());
System.Diagnostics.Trace.WriteLine(e.StackTrace.ToString());
}
}
}
}
@ -276,11 +291,20 @@ namespace sscs.init
CSSSLogger.DbgLog("Client Side SecretStore Service has started.");
server = CommunicationFactory.CreateCommunicationEndPoint();
if (true)
{
System.Windows.Forms.Application.Run(new MiCasaForm(args));
System.Windows.Forms.Application.Exit();
}
else
{
server = CommunicationFactory.CreateCommunicationEndPoint();
listeningThread = new Thread(new ThreadStart(StartServer));
listeningThread.Start();
listeningThread.Join();
}
listeningThread = new Thread(new ThreadStart(StartServer));
listeningThread.Start();
listeningThread.Join();
}
catch(Exception e)
{

View File

@ -17,7 +17,7 @@
<DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
<DefaultTargetSchema>IE50</DefaultTargetSchema>
<DelaySign>false</DelaySign>
<OutputType>Exe</OutputType>
<OutputType>WinExe</OutputType>
<RootNamespace>sscs</RootNamespace>
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
<StartupObject>sscs.init.WinSecretStoreClientService</StartupObject>
@ -208,6 +208,7 @@
<Compile Include="init\ProjectInstaller.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="init\UserInfo.cs" />
<Compile Include="init\WinSecretStoreClientService.cs">
<SubType>Component</SubType>
</Compile>
@ -286,14 +287,56 @@
<Compile Include="verbs\WriteSecret.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="winforms\ChangeMasterPasswordForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="winforms\ChangeMasterPasswordForm.Designer.cs">
<DependentUpon>ChangeMasterPasswordForm.cs</DependentUpon>
</Compile>
<Compile Include="winforms\EditSecretForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="winforms\EditSecretForm.Designer.cs">
<DependentUpon>EditSecretForm.cs</DependentUpon>
</Compile>
<Compile Include="winforms\MasterPasswordForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="winforms\MasterPasswordForm.Designer.cs">
<DependentUpon>MasterPasswordForm.cs</DependentUpon>
</Compile>
<Compile Include="winforms\MiCasaForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="winforms\MiCasaForm.Designer.cs">
<DependentUpon>MiCasaForm.cs</DependentUpon>
</Compile>
<Compile Include="winforms\WinCommon.cs" />
<EmbeddedResource Include="init\ProjectInstaller.resx">
<DependentUpon>ProjectInstaller.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="init\WinSecretStoreClientService.resx">
<DependentUpon>WinSecretStoreClientService.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="winforms\ChangeMasterPasswordForm.resx">
<DependentUpon>ChangeMasterPasswordForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="winforms\EditSecretForm.resx">
<DependentUpon>EditSecretForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="winforms\MasterPasswordForm.resx">
<DependentUpon>MasterPasswordForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="winforms\MiCasaForm.resx">
<DependentUpon>MiCasaForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Folder Include="Properties\" />
<Folder Include="startup\" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

View File

@ -0,0 +1,187 @@
namespace sscs.winforms
{
partial class ChangeMasterPasswordForm
{
/// <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.textBoxMP1 = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.labelError = new System.Windows.Forms.Label();
this.buttonCancel = new System.Windows.Forms.Button();
this.textBoxDescription = new System.Windows.Forms.TextBox();
this.buttonOk = new System.Windows.Forms.Button();
this.textBoxCurMP = new System.Windows.Forms.TextBox();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.textBoxMP2 = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
// textBoxMP1
//
this.textBoxMP1.Location = new System.Drawing.Point(115, 54);
this.textBoxMP1.Name = "textBoxMP1";
this.textBoxMP1.Size = new System.Drawing.Size(161, 20);
this.textBoxMP1.TabIndex = 3;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(28, 58);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(81, 13);
this.label2.TabIndex = 2;
this.label2.Text = "New Password:";
//
// labelError
//
this.labelError.AutoSize = true;
this.labelError.ForeColor = System.Drawing.Color.Red;
this.labelError.Location = new System.Drawing.Point(56, 62);
this.labelError.Name = "labelError";
this.labelError.Size = new System.Drawing.Size(0, 13);
this.labelError.TabIndex = 13;
//
// buttonCancel
//
this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonCancel.Location = new System.Drawing.Point(205, 201);
this.buttonCancel.Name = "buttonCancel";
this.buttonCancel.Size = new System.Drawing.Size(75, 23);
this.buttonCancel.TabIndex = 12;
this.buttonCancel.Text = "Cancel";
this.buttonCancel.UseVisualStyleBackColor = true;
this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click);
//
// textBoxDescription
//
this.textBoxDescription.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.textBoxDescription.Location = new System.Drawing.Point(123, 10);
this.textBoxDescription.Multiline = true;
this.textBoxDescription.Name = "textBoxDescription";
this.textBoxDescription.ReadOnly = true;
this.textBoxDescription.Size = new System.Drawing.Size(167, 33);
this.textBoxDescription.TabIndex = 14;
this.textBoxDescription.Text = "You can change your Master Password using this form";
//
// buttonOk
//
this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonOk.Location = new System.Drawing.Point(119, 201);
this.buttonOk.Name = "buttonOk";
this.buttonOk.Size = new System.Drawing.Size(75, 23);
this.buttonOk.TabIndex = 11;
this.buttonOk.Text = "Ok";
this.buttonOk.UseVisualStyleBackColor = true;
this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click);
//
// textBoxCurMP
//
this.textBoxCurMP.Location = new System.Drawing.Point(115, 24);
this.textBoxCurMP.Name = "textBoxCurMP";
this.textBoxCurMP.PasswordChar = '*';
this.textBoxCurMP.Size = new System.Drawing.Size(161, 20);
this.textBoxCurMP.TabIndex = 1;
//
// groupBox1
//
this.groupBox1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.groupBox1.Controls.Add(this.textBoxMP2);
this.groupBox1.Controls.Add(this.label3);
this.groupBox1.Controls.Add(this.textBoxMP1);
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Controls.Add(this.textBoxCurMP);
this.groupBox1.Controls.Add(this.label1);
this.groupBox1.Location = new System.Drawing.Point(4, 78);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(282, 112);
this.groupBox1.TabIndex = 10;
this.groupBox1.TabStop = false;
//
// textBoxMP2
//
this.textBoxMP2.Location = new System.Drawing.Point(115, 83);
this.textBoxMP2.Name = "textBoxMP2";
this.textBoxMP2.Size = new System.Drawing.Size(161, 20);
this.textBoxMP2.TabIndex = 5;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(6, 87);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(103, 13);
this.label3.TabIndex = 4;
this.label3.Text = "Re-enter Password:";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(18, 27);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(93, 13);
this.label1.TabIndex = 0;
this.label1.Text = "Current Password:";
//
// ChangeMasterPasswordForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(292, 234);
this.Controls.Add(this.labelError);
this.Controls.Add(this.buttonCancel);
this.Controls.Add(this.textBoxDescription);
this.Controls.Add(this.buttonOk);
this.Controls.Add(this.groupBox1);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "ChangeMasterPasswordForm";
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
this.Text = "Change Master Password";
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TextBox textBoxMP1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label labelError;
private System.Windows.Forms.Button buttonCancel;
private System.Windows.Forms.TextBox textBoxDescription;
private System.Windows.Forms.Button buttonOk;
private System.Windows.Forms.TextBox textBoxCurMP;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.TextBox textBoxMP2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label1;
}
}

View File

@ -0,0 +1,88 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using sscs.cache;
namespace sscs.winforms
{
public partial class ChangeMasterPasswordForm : Form
{
private SecretStore m_ss;
public ChangeMasterPasswordForm()
{
InitializeComponent();
}
internal void SetSecretStore(SecretStore ss)
{
m_ss = ss;
}
private void buttonOk_Click(object sender, EventArgs e)
{
// check current
if (textBoxCurMP == null)
{
DisplayError("Enter your current Master Password");
return;
}
if (textBoxCurMP.Text.Length < 8)
{
DisplayError("Master Password must be at least 8 characters");
return;
}
if (textBoxMP1.Text == null)
{
DisplayError("Please enter and new Master Password");
return;
}
if (textBoxMP1.Text.Length < 8)
{
DisplayError("New Master Password must be at least 8 characters");
return;
}
// verify match
if (!textBoxMP1.Text.Equals(textBoxMP2.Text))
{
DisplayError("New Master Passwords do not match");
return;
}
if (!m_ss.SetMasterPassword(textBoxCurMP.Text))
{
DisplayError("Current Master Password is not correct");
return;
}
// success
m_ss.ChangeMasterPassword(textBoxCurMP.Text, textBoxMP1.Text);
CloseWindow();
}
private void CloseWindow()
{
this.Dispose();
}
private void DisplayError(string sMessage)
{
labelError.Text = sMessage;
}
private void buttonCancel_Click(object sender, EventArgs e)
{
CloseWindow();
}
}
}

View File

@ -0,0 +1,120 @@
<?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>
</root>

View File

@ -0,0 +1,304 @@
namespace sscs.winforms
{
partial class EditSecretForm
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditSecretForm));
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.tbSecretID = new System.Windows.Forms.TextBox();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.listViewKeyValues = new System.Windows.Forms.ListView();
this.Key = new System.Windows.Forms.ColumnHeader();
this.Value = new System.Windows.Forms.ColumnHeader();
this.Linked = new System.Windows.Forms.ColumnHeader();
this.button2 = new System.Windows.Forms.Button();
this.button1 = new System.Windows.Forms.Button();
this.label6 = new System.Windows.Forms.Label();
this.tbNewValue = new System.Windows.Forms.TextBox();
this.tbNewKey = new System.Windows.Forms.TextBox();
this.label5 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.checkBox1 = new System.Windows.Forms.CheckBox();
this.button3 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
this.label7 = new System.Windows.Forms.Label();
this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
// 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(9, 9);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(216, 13);
this.label1.TabIndex = 0;
this.label1.Text = "Manage Secrets and Key-Value pairs";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(85, 53);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(0, 13);
this.label2.TabIndex = 1;
//
// 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(9, 93);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(65, 13);
this.label3.TabIndex = 2;
this.label3.Text = "Secret ID:";
//
// tbSecretID
//
this.tbSecretID.Enabled = false;
this.tbSecretID.Location = new System.Drawing.Point(13, 110);
this.tbSecretID.Name = "tbSecretID";
this.tbSecretID.Size = new System.Drawing.Size(364, 20);
this.tbSecretID.TabIndex = 3;
//
// groupBox1
//
this.groupBox1.AutoSize = true;
this.groupBox1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.groupBox1.BackColor = System.Drawing.SystemColors.ControlDark;
this.groupBox1.Controls.Add(this.listViewKeyValues);
this.groupBox1.Controls.Add(this.button2);
this.groupBox1.Controls.Add(this.button1);
this.groupBox1.Controls.Add(this.label6);
this.groupBox1.Controls.Add(this.tbNewValue);
this.groupBox1.Controls.Add(this.tbNewKey);
this.groupBox1.Controls.Add(this.label5);
this.groupBox1.Controls.Add(this.label4);
this.groupBox1.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.groupBox1.Location = new System.Drawing.Point(15, 143);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(361, 223);
this.groupBox1.TabIndex = 4;
this.groupBox1.TabStop = false;
//
// listViewKeyValues
//
this.listViewKeyValues.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.listViewKeyValues.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.Key,
this.Value,
this.Linked});
this.listViewKeyValues.FullRowSelect = true;
this.listViewKeyValues.GridLines = true;
this.listViewKeyValues.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
this.listViewKeyValues.LabelEdit = true;
this.listViewKeyValues.Location = new System.Drawing.Point(3, 93);
this.listViewKeyValues.Name = "listViewKeyValues";
this.listViewKeyValues.Size = new System.Drawing.Size(312, 111);
this.listViewKeyValues.Sorting = System.Windows.Forms.SortOrder.Ascending;
this.listViewKeyValues.TabIndex = 12;
this.listViewKeyValues.UseCompatibleStateImageBehavior = false;
this.listViewKeyValues.View = System.Windows.Forms.View.Details;
this.listViewKeyValues.MouseClick += new System.Windows.Forms.MouseEventHandler(this.listViewKeyValues_MouseClick);
//
// Key
//
this.Key.Text = "Key";
//
// Value
//
this.Value.Text = "Value";
//
// Linked
//
this.Linked.Text = "Linked";
//
// button2
//
this.button2.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.button2.Location = new System.Drawing.Point(321, 92);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(34, 31);
this.button2.TabIndex = 11;
this.button2.Text = "-";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// button1
//
this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.button1.Location = new System.Drawing.Point(321, 31);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(34, 31);
this.button1.TabIndex = 10;
this.button1.Text = "+";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// 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(6, 71);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(99, 13);
this.label6.TabIndex = 8;
this.label6.Text = "Key-Value pairs:";
//
// tbNewValue
//
this.tbNewValue.Location = new System.Drawing.Point(163, 33);
this.tbNewValue.Name = "tbNewValue";
this.tbNewValue.Size = new System.Drawing.Size(152, 20);
this.tbNewValue.TabIndex = 7;
//
// tbNewKey
//
this.tbNewKey.Location = new System.Drawing.Point(9, 33);
this.tbNewKey.Name = "tbNewKey";
this.tbNewKey.Size = new System.Drawing.Size(148, 20);
this.tbNewKey.TabIndex = 5;
//
// 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(161, 16);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(43, 13);
this.label5.TabIndex = 6;
this.label5.Text = "Value:";
//
// 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(6, 16);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(32, 13);
this.label4.TabIndex = 5;
this.label4.Text = "Key:";
//
// checkBox1
//
this.checkBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.checkBox1.AutoSize = true;
this.checkBox1.Location = new System.Drawing.Point(21, 385);
this.checkBox1.Name = "checkBox1";
this.checkBox1.Size = new System.Drawing.Size(145, 17);
this.checkBox1.TabIndex = 5;
this.checkBox1.Text = "Show Values in clear text";
this.checkBox1.UseVisualStyleBackColor = true;
this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
//
// button3
//
this.button3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.button3.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.button3.Location = new System.Drawing.Point(209, 400);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(87, 31);
this.button3.TabIndex = 12;
this.button3.Text = "Cancel";
this.button3.UseVisualStyleBackColor = true;
this.button3.Click += new System.EventHandler(this.button3_Click);
//
// button4
//
this.button4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.button4.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.button4.Location = new System.Drawing.Point(302, 400);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(87, 31);
this.button4.TabIndex = 13;
this.button4.Text = "Ok";
this.button4.UseVisualStyleBackColor = true;
//
// 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(10, 40);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(442, 13);
this.label7.TabIndex = 14;
this.label7.Text = "To change a value, click the key you want to change and enter a new value";
//
// EditSecretForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(409, 441);
this.Controls.Add(this.label7);
this.Controls.Add(this.button4);
this.Controls.Add(this.button3);
this.Controls.Add(this.checkBox1);
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.tbSecretID);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "EditSecretForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "EditSecretForm";
this.TopMost = true;
this.Load += new System.EventHandler(this.EditSecretForm_Load);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox tbSecretID;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.TextBox tbNewValue;
private System.Windows.Forms.TextBox tbNewKey;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.CheckBox checkBox1;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.ListView listViewKeyValues;
private System.Windows.Forms.ColumnHeader Key;
private System.Windows.Forms.ColumnHeader Linked;
private System.Windows.Forms.ColumnHeader Value;
private System.Windows.Forms.Label label7;
}
}

View File

@ -0,0 +1,159 @@
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using sscs.cache;
namespace sscs.winforms
{
public partial class EditSecretForm : Form
{
internal SecretStore m_ss = null;
internal string m_keychainId = null;
internal Secret curSecret = null;
public EditSecretForm()
{
InitializeComponent();
}
internal void SetID(SecretStore ss, string sKeyChain, string sSecretID)
{
m_ss = ss;
tbSecretID.Text = sSecretID;
if (sKeyChain != null)
{
m_keychainId = sKeyChain;
}
ShowKeyValues(sSecretID);
}
private void ShowKeyValues(string sSecretID)
{
listViewKeyValues.Items.Clear();
// add current keyvalues
KeyChain kc;
if (m_keychainId == null)
{
kc = m_ss.GetKeyChainDefault(true);
}
else
{
kc = m_ss.GetKeyChain(m_keychainId);
}
Secret secret = kc.GetSecret(sSecretID);
curSecret = secret;
ArrayList al = secret.GetKeyList();
for (int i = 0; i < al.Count; i++)
{
string[] stuff = new string[3];
string sKey = (string)al[i];
stuff[0] = sKey;
KeyValue kv = secret.GetKeyValue(sKey);
if (checkBox1.Checked)
{
stuff[1] = kv.GetValue();
}
else
{
stuff[1] = "************";
}
Hashtable ht = secret.GetLinkedKeys(sKey);
if (ht != null && ht.Count > 0)
{
stuff[2] = "Yes";
}
else
{
stuff[2] = "No";
}
ListViewItem item = new ListViewItem(stuff);
listViewKeyValues.Items.Add(item);
}
}
private void EditSecretForm_Load(object sender, EventArgs e)
{
}
private void button3_Click(object sender, EventArgs e)
{
this.Dispose();
}
private void button1_Click(object sender, EventArgs e)
{
if (tbNewKey.Text != null && tbNewKey.Text.Length > 0
&& tbNewValue.Text != null && tbNewValue.Text.Length > 0)
{
string[] newKeyValue = new string[3];
newKeyValue[0] = tbNewKey.Text;
newKeyValue[1] = tbNewValue.Text;
newKeyValue[2] = "No";
ListViewItem item = new ListViewItem(newKeyValue);
listViewKeyValues.Items.Add(item);
tbNewKey.Text = tbNewValue.Text = "";
}
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked)
{
if (WinCommon.VerifyMasterPassword(m_ss, "Enter your Master Password to view values"))
{
ShowKeyValues(tbSecretID.Text + '\0');
}
else
{
checkBox1.Checked = false;
}
}
else
{
ShowKeyValues(tbSecretID.Text + '\0');
}
}
private void listViewKeyValues_MouseClick(object sender, MouseEventArgs e)
{
ListView.SelectedListViewItemCollection coll = listViewKeyValues.SelectedItems;
ListViewItem item = coll[0];
tbNewKey.Text = item.Text;
KeyValue kv = curSecret.GetKeyValue(item.Text);
if (checkBox1.Checked)
{
tbNewValue.Text = kv.GetValue();
}
}
private void button2_Click(object sender, EventArgs e)
{
ListView.SelectedListViewItemCollection coll = listViewKeyValues.SelectedItems;
if (coll.Count > 0)
{
ListViewItem item = coll[0];
listViewKeyValues.Items.Remove(item);
}
}
}
}

View File

@ -0,0 +1,546 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA
CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg
AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA
AAAQAAAAAAAAAAAAAACAAAAAAIAAAICAAAAAAIAAgACAAACAgACAgIAAwMDAAP8AAAAA/wAA//8AAAAA
/wD/AP8AAP//AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAId3eAAAAAAAAAAAAAAAAAAAAAAAAAAA+HeId48AAAAAAAAAAAAAAAAAAAAAAA
D4eO6IiHeAAAAAAAAAAAAAAAAHd3d3d3B36IiIiIhwAAAAAAAAAAAAAAAH////+HfoiIiIiIiId///8A
AAAAAAAAAH////d+6IiIiIiIiHd3j/8AAAAAAAAAAH//+HjuiIiIiIiIh3B3d48AAAAAAAAAAH/4d+7o
iIiIiIiIh3B3fncAAAAAAAAAAHh37uiIiIiIj4iIh3AHeOh4AAAAAAAACHfu7oiIiIiP//+IiHcHd4jn
gAAAAAAAh47uiIiIiIj/////iHcHd4iIeAAAAAAAiO7oiIiIiP///////4dwd4iIdwAAAAAIfuiIiIiI
j/////////iHeIiIdwAAAAh3iIiIiIiI/////////4iIiIiIdwAAAId4iIiIiIj/////////iIiIjoiI
dwAA+HiIiIiIiI//////////iIiHiI7odwAAh4iIeHiIj/////////+IiId3fo53jwAAeIh48HeP////
/////4iIiOiIjocPAAAAd3dwAHh4/////////4iIh4joh4hwAAAAAHeAAH/4eP/////4iIeIh4jneP9w
AAAAAHd/AH//iI////+IiHd4iOd4//9wAAAAcHcHgH///4eP//iIiIh36Hj///9wAAAAh3gAB3////+H
j4iIiIiIeP////9wAAAACAdwAA////hwB4iIiI53j/////9wAAAAAId4cA///4AAAAiIjneP//////9w
AAAAAA+Hd3///4AAd3d3d4////////9wAAAAAAAPh3////h3eIj4j/////////9wAAAAAAAAAH////+I
j/////////////9wAAAAAAAAAH//////+IiIiIiIiIiIj/9wAAAAAAAAAI/4iIiP////////////j/9w
AAAAAAAAAI////////////////////9wAAAAAAAAAI////////////////////9wAAAAAAAAAI//////
+IiIiIiIiIiIj/9wAAAAAAAAAI/4iIiP////////////j/9wAAAAAAAAAI////////////////////9w
AAAAAAAAAI////////////////////9wAAAAAAAAAIMzMzMzMzMzMzMzMzMzMzNwAAAAAAAAAIiIiIiI
iIiId3d3dzMzMzNwAAAAAAAAAIiIiIiIiIiId3d3dzMzMzNwAAAAAAAAAIiIiIiIiIiId3d3dzMzMzNw
AAAAAAAAAIiIiIiIh3d3d3d3d3d3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////9fjf//////////////gf////////4Af///////
+AA//////8AAAAAf////wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAD//A/4AAAAAH
/8D/AAAAAAP/gP8AAAAAA/8A/gAAAAAD/wD4AAAAAAP+APAAAAAAA/gAwAAAAAAD8ADAAAAAAAPAAMBA
AAAAD8AAwcAAAAAfwEDBwAAAAB/BwMDAAAAAH8HAwEAAAAAfwMDAAAAAAB/AQOAAAAAAH8AA8AAAAAAf
4AD4AAAAAB/wAP4AAAAAH/gA/8AAAAAf/gD/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/A
AAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf
/8D/wAAAAB//wP/////////A//////////////////////////////////////////8oAAAAIAAAAEAA
AAABAAQAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAIAAAAAAgAAAgIAAAAAAgACAAIAAAICAAICA
gADAwMAA/wAAAAD/AAD//wAAAAD/AP8A/wAA//8A////AAAAAAAAAAAPh4ePAAAAAAAAAAAAAAAPh47u
h48AAAAAAAABEREREYiOiO5xERERAAAAB///h3iIjoiI6HeP9wAAAAf/+HiIiIiIiIcXeIcAAAAH+HiI
iIiPiIiHB3hxAAAA8XiIiIiIj/+Ihxd454AAAIeIiIiIiP//+OgReO54AAh4iIiIiP/////4h3iOhw+H
iIiIiI///////46IiIf3eIiIiI///////4iIjo7neIh4iIj///////iIiIiOeIiIgY////////iIiIiO
h4B4fweI///////4iIiIh4cAF3AH+Ij///+IiIiOh4/3ABcYB//4iP/4iIiOh4//9wB3EHf///h4iOiI
h4j///cAgXEA//+HAXju6Hj////4AA93d///cRF4iHj/////+AAACIf//4d4j4j///////gAAAAI////
j//////////4AAAACP////iIiIiIiIiP+AAAAAj4iIj/////////j/gAAAAI///////////////4AAAA
CP////iIiIiIiIiP+AAAAAj4iIj/////////j/gAAAAI///////////////4AAAACDMzMzMzMzMzMzMz
OAAAAAiIiIiIiId3d3czMzgAAAAIiIiIiIiHd3d3MzM4AAAACIiIiIiId3d3d3d3eAAAAAAAAAAAAAAA
AAAAAAAA//4D///4AP/4AAAD+AAAA/gAAAP4AAAD8AAAAfAAAADgAAAAgAAAAAAAAAAAAAAAAAAAAQgA
AAMYAAADCAAAAwAAAAMAAAADgAAAA+AAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gA
AAP4AAAD+AAAA/////8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAIAA
AAAAgAAAgIAAAAAAgACAAIAAAICAAICAgADAwMAA/wAAAAD/AAD//wAAAAD/AP8A/wAA//8A////AAAA
AAiIiAAAAHd3eI7nd3AAiIj4jud3cAB4iIj/iAeICI+I////iOeHj/////ju53h4///4iOh/d4+I/4jo
iHB3f/h4iIj/cPh/93iI//9wAI/4/////3AAj///////cACP//////9wAIiIh3dzM3AAiIiHd3MzcACI
iIiId3dw/g///8AB/g/AAcABwADAAYAAwAAAAIAAAAAAAAABAAAAAQABAAEAAcABAAHAAcABwAHAAcAB
wAHAAcABwAHAASgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAACAgIAqp5WAPLK
pgACXlYAVp7WAFbe/gD+vn4AAl5+AP7e1gACPioAgoKCAFb+/gCqfioAVr7WAFZ+fgACPlYAAh4qAMLe
wgCq3tYApqKiAPL6/gBWnqoAqr7WAKqefgBWXlYAVl5+AFY+KgCq/v4Aqn5WAFa+/gBWfqoAVj5WAFYe
KgD+3qoAqt7+AKq+qgD+/v4Aqp6qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJiYmJiYm
JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYm
JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJhYZDhkZ
CCYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYICg4EHR0EDhMUJiYmJiYmJiYm
JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJBMODQUdDR0dHRUZJSYmJiYmJiYmJiYmJiYmJiYmJiYm
JiYmJhgYGBgYGBgYGBgaHxUFIiINDQ0NHR0NHgkgGhoaGhoaGiYmJiYmJiYmJiYmJiYmJhgkJCQkJCQk
EQ4VBSIiIiIdDQ0NDQ0dHQ0OCggkJCQkGiYmJiYmJiYmJiYmJiYmJhgkJCQkJAgKDgUFIiIiIiIiDQ0N
DQ0NDRUOHhkTFCQkGiYmJiYmJiYmJiYmJiYmJhgkJCQUEw4NBQUiIiIiIiIiHQ0NDQ0NBBkQDx4EGSUU
GiYmJiYmJiYmJiYmJiYmJhgkFCMOBAUFBSIiIiIiIiIbIg0NDQ0NBBkQDwMVHR4OICYmJiYmJiYmJiYm
JiYmJhgWChUFBQUiIiIiIiIiIiIbFCIiDQ0NBB4JEBkHDR0NByMmJiYmJiYmJiYmJiYmERoeBQsFBSIi
IiIiIiIiGxsUFBQUIh0NDR4PEBkDFR0dHQ4RJiYmJiYmJiYmJiYIGQ0FBQUiIiIiIiIiIiIbFBQUFBQk
JBQiHQQZJg8DFR0NHQ0ZESYmJiYmJiYmJiYTDQsFBSIiIiIiIiIiIhsUFBQUFCQkFBQUFCIEBw8HBB0N
DR0eCiYmJiYmJiYmJiUYBQUiIiIiIiIiIiIbFBQUFBQkJCQUFBQUFBQiHQQEDQ0NDR0EGSYmJiYmJiYR
GB8KIiIiIiIiIiIiGxsUFBQUFCQkFBQUFBQUGxsbIiIdDQ0NDR0EGSYmJiYmJiMfChMjEiIiIiIiIiIb
FBQUFBQkJCQUFBQUFBQbGxsiDQ0iBQ0NDR0EGSYmJiYkIxgTIxYlEyIbIiIiIhsUFBQUFCQkFBQUFBQU
FBsbIg0iDQQdIiIFHQ0OCiYmJiYjGCMjFhMKCg4bGyIiGxQUFBQUJCQUFBQUFBQUGyINDQ0EBAQEHSIF
FQ4jFCYmJiYKEyMTCgokJh8KGxQUFBQUFCQkJBQUFBQUFCIiDQ0NDR0iDQ0NBQ0OEBQmJiYmJiYYCgoK
GCYmJgojCiMUFBQUJCQUFBQUFBQUFCINDSIiBA0NBRsNDgoIGiYmJiYmJiYaEAofEyYmJgokCBMKESQk
JBQUFBQUFBsWIiIEDSINBA0dBRUKFiQkGiYmJiYmJiYaJgoaHxQmJgokJCQIEwoUJBQUFBQUIg0NDQQE
BA0iIgUVDiMUJCQkGiYmJiYmJiYYEAofEB8RJgokJCQkJBEKExQUFBsiDRYiIiINBAQFDQ4lFCQkJCQk
GiYmJiYmJiYRGB8KEBAQChgkJCQkJCQUEQojGxsNDSIiIh0iIg0OExQkJCQkJCQkGiYmJiYmJiYmCBoZ
ChAQEBAkJCQkJCQRChoQGRYiDQ0NDQ0FFQoIJCQkJCQkJCQkHyYmJiYmJiYmJhEfGAofEBAkJCQkJBEQ
EBAQJhojIiIiBRUOFiQkJCQkJCQkJCQkHyYmJiYmJiYmJiYUChgKChgkJCQkJAgaIBofGAoKChUVDhMk
JCQkJCQkJCQkJCQkHyYmJiYmJiYmJiYmJggTChgkJCQkJBQTGAoKCiUIJBEjFCQkJCQkJCQkJCQkJCQk
HyYmJiYmJiYmJiYmJiYmJgokJCQkJCQUIxMRJCQkJCQkJCQkJCQkJCQkJCQkJCQkHyYmJiYmJiYmJiYm
JiYmJgokJCQkJCQkJCQkFhYWFhYWFhYWFhYWFhYWFhYWJCQkHyYmJiYmJiYmJiYmJiYmJgokJBMWFhMT
FiQkFCQkJCQkJCQkJCQkJCQkJCQWJCQkHyYmJiYmJiYmJiYmJiYmJgokJCQkJCQkJCQkFBQUFBQUFBQU
FBQUFBQUFBQUJCQkGCYmJiYmJiYmJiYmJiYmJgokJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk
GCYmJiYmJiYmJiYmJiYmJgokJCQkJCQkJCQkFhYWFhYWFhYWFhYWFhYWFhYWJCQkGCYmJiYmJiYmJiYm
JiYmJhMkJBMWExMWEyQkFCQkJCQkJCQkJCQkJCQkJCQWJCQkGCYmJiYmJiYmJiYmJiYmJhMkJCQkJCQk
JCQkFBQUFBQUFBQUFBQUFBQUFBQUJCQkGCYmJiYmJiYmJiYmJiYmJhMkJCQkJCQkJCQkJCQkJCQkJCQk
JCQkJCQkJCQkJCQkGCYmJiYmJiYmJiYmJiYmJhMMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
GCYmJiYmJiYmJiYmJiYmJhMhISEhAgICAgICBgYGBgYXFwEBAQEBHBwcHAwMDAwMGCYmJiYmJiYmJiYm
JiYmJhMhISEhAgICAgIGBgYGBhcXFwEBAQEcHBwcHAwMDAwMGCYmJiYmJiYmJiYmJiYmJhMhISEhAgIC
AgIGBgYGBgYXFwEBAQEBHBwcHAwMDAwMGCYmJiYmJiYmJiYmJiYmJhMTExMTExMTCgoKCgoKCgoKCgoK
GBgYGBgYGBgYGBgYGCYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYm
JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYm
JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYm
JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYm
JiYmJiYmJiYmJiYmJiYmJiYm////////X43//////////////4H////////+AH////////gAP//////A
AAAAH////8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAA//wP+AAAAAB//A/wAAAAAD
/4D/AAAAAAP/AP4AAAAAA/8A+AAAAAAD/gDwAAAAAAP4AMAAAAAAA/AAwAAAAAADwADAQAAAAA/AAMHA
AAAAH8BAwcAAAAAfwcDAwAAAAB/BwMBAAAAAH8DAwAAAAAAfwEDgAAAAAB/AAPAAAAAAH+AA+AAAAAAf
8AD+AAAAAB/4AP/AAAAAH/4A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/A
AAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf
/8D/////////wP//////////////////////////////////////////KAAAACAAAABAAAAAAQAIAAAA
AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAICAgCqnlYA8sqmAAJeVgBWntYAVt7+AP6+fgACXn4A/t7WAFY+
KgCCgoIAqn4qAFa+1gCq/v4AVn5+APL6/gACHioAwt7CAKre1gCmoqIAAj5WAFaeqgCqvtYA/p5+AFZe
VgBWXn4A/t7+AKp+VgBWvv4AVn6qAP7+/gBWHioA/t6qAKre/gCqvqoAVj5WAKqeqgAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlJSUlJSUlJSUlJSUlJSUPEw4EDhMIJSUlJSUlJSUlJSUl
JSUlJSUlJSUlJSUeIg4MBRwcBA4THiUlJSUlJSUlJSUlJSUJCQkJCQkJHyMMISEcDAwcHAQUHwkJCQkJ
JSUlJSUlJRgeHh4eEQoVBSEhIRwMDAwMHAQZChEeHhglJSUlJSUlGB4eGhMVBSEhISEhIQwMDAwEGRQd
HRMIGCUlJSUlJSUYDyQdDAUhISEhISENIQwMDAQZEAMVDA4jJSUlJSUlHiMODAUFISEhISEhDQ8PDyEM
DB0QFBkMBR0kJSUlJSUTFQUFISEhISEhIQ0PDw8eHiEcBBQQBwQcHB0iJSUlCB0NBSEhISEhISEPDw8P
Hh4PDw8hFQcODAwcDA4lHiQYFSEhISEhISENDw8PDx4PDw8PDw8NBQwMDAwMHQ8KGCQSISEhISEhDQ8P
Dx4eDw8PDw8NDSEMIRwMHBwOCgoRIgoVDSEhIQ8PDw8eHg8PDw8PISEMDAQMIQUcHRMTIhMKESMWDw8P
Dw8eHg8PDw8PDSEMDAwMDAwFFRgRJQoKCh4lChMTDx4eHh4PDw8PDw0MDCEMDAUhDA4iCiUlCRgKJSUK
HhETIg8eDw8PDyEWDAQMBQwcDB0kDx4KJSUJGRATJQoeHh4RExYPDw0hDCEWDAQcIRUTCB4eHgolJRgK
IyUYGB4eHh4eIgoSDQwcISEhIRUKCB4eHh4eCiUlERgKIxAQHh4eHhYYEBAKEhwcHBUKER4eHh4eHh4K
JSUlCAoKGRgeHh4eGBAJCRgKFQwKIg8eHh4eHh4eHgolJSUlJREKGB4eHh4WGAoKJAgIFg8eHh4eHh4e
Hh4eCiUlJSUlJSUKDx4eHh4PCB4eHh4eHh4eHh4eHh4eHh4KJSUlJSUlJQoeHh4eHh4eERERERERERER
EREREREeHgolJSUlJSUlEx4RIhEiER4ICAgICAgICAgICAgIER4eEyUlJSUlJSUTHh4eHh4eHh4eHh4e
Hh4eHh4eHh4eHh4TJSUlJSUlJRMeHh4eHh4eEREREREREREREREREREeHhMlJSUlJSUlEx4RFiIRFh4I
CAgICAgICAgICAgIER4eEyUlJSUlJSUTHh4eDx4eHh4eHh4eHh4eHh4eHh4PHh4TJSUlJSUlJRMLCwsL
CwsLCwsLCwsLCwsLCwsLCwsLCxMlJSUlJSUlEyAgICAgIAICBgYGBhcBAQEBGxsLCwsLEyUlJSUlJSUT
ICAgICAgAgIGBgYGFwEBAQEbGwsLCwsTJSUlJSUlJRMTExMTEwoKCgoKCgoKCgoKChgYGBgYGBMlJSUl
JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUl//4D///4AP/4AAAD+AAAA/gAAAP4AAAD8AAAAfAA
AADgAAAAgAAAAAAAAAAAAAAAAAAAAQgAAAMYAAADCAAAAwAAAAMAAAADgAAAA+AAAAP4AAAD+AAAA/gA
AAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/////8oAAAAEAAAACAAAAABAAgAAAAAAAAA
AAAAAAAAAAAAAAABAAAAAAAAAh4qAKqeVgBWntYAql4qAFbe/gBWnqoAVn5+AMLewgCmoqIAVj4qAFa+
1gCqfioA8vr+AKq+qgCq/v4AVn6qAAI+VgCqvtYA/r5+AFZeVgCq3v4AgoKCAP7e1gCqnqoAVr7+AKp+
VgD+/v4A8sqmAFY+VgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0dHR0dHR0NBQoIFh0dHR0dHRUVFRMGFAQYGA8TExMdHR0IFggK
DhQUGBgPEAUcHR0dBgoUFBQUDAwUAgAFChcdFwoOFBQODAwaDA4CAhgFCBwRDg4MDBoMDA4UGAQEBRwI
FRcMGhoMDBQKCgQCEwwcFQgaEREMDhQKGAoIFhMdFRwJDAwIExEECgUHGhoTHQwIExoaFRMICA0aGhoa
Ex0dHQgMFhYWFhYWFhYWGhMdHR0IGhoaGhoaGhoaGhoTHR0dCBoWFgwMDAwMDAwaEx0dHQgbGxISEgEB
GQsLAxMdHR0IGxsSEhIBARkLCwMTHR0dCAgICAgICAgVFRUVFR3+D1ybwAH+D8ABwAHAAMABgADAAAAA
gAAAAAAAAAEAAAABAAEAAQABwAEAAcABwAHAAcABwAHAAcABwAHAAcABKAAAADAAAABgAAAAAQAgAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4Eyw2ui9xi/krZXzyDB0jogAAACUAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQ0YG347cIDZT6/U/1DD8v9Rwu7/Qp7C/yJR
Zc0HEhZsAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIECgtlMFtozWa60P984/7/WMn2/026
5/9Qvur/U8f1/1HA7P87jq/5Gj9NvwABAVIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABYV1L/WFdS/1dWUf9XVlH/VlVQ/1VUT/9UU07/U1JN/1JRS/9QUEr/OTk1/yxDSf9Yo7n/e+L1/4ns
//+C3/7/VL3n/0q45P9OuuX/Trrl/1C/6/9Tw/H/Trnj/zd8l/8gMDX/Ly4p/zs5M/86ODL/OTcx/zg2
Mf84NTD/NzUv/zc1L/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABYV1L//////////////////////////////////v7+/9PT0/9lcnb/VJir/3Xb
8/+C6P//huT//43j//+Q4v3/YMXs/0e34/9PuuX/Trrl/0665f9Ou+b/UL7q/1LD8P9Ltt7/PnqT/3F6
ff/i4+T//////////////////////zc1L/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYV1L///////////////////////7+/v/k5OT/fYWI/0uD
lP9u0+z/f+n//4Dh//+H4f//juP//5Xm//+g6P//gdX1/0i35P9MueX/Trrl/0665f9OuuX/Trrl/063
4v9Bk7b/MnKN/zV9mv89a37/kZaX/+vs7P///////////zc1L/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYV1L/////////////////6+vr/5uf
of9MdYL/Y8Pf/33s//9+4///gt///4rh//+R4///meX//6Dn//+r6///qun9/2fH7P9DteL/Tbnk/0+6
5f9OuuX/T73o/0ekyv8uYXn/EB8o/x9FVv87jKz/QZ3B/0tpdf+tr7D/7+/v/zc1L/8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZWFP///////Ly
8v+tsLH/WXR+/1Wqwv946f//fef//37e//+G4P//juP//5Xj//+c5v//o+j//6vq//+z7P//wvL//67n
+v9hw+n/QbTi/0i35P9OuuX/T73p/0WexP8yaoT/Cxcc/x1AT/8lUmX/PpW3/1bN+/84hKP/YHN5/ysq
Jf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABaWVX/wcHB/2t9hP9Gkqb/b9///3vs//983///gt7//4ni//+R5P//mOX//5/m//+n6f//ruv//7bt
//++7///yPH//9f3///E7vr/gM/u/0y55f9AteP/S7vm/0qq0P85fJr/FzE9/xQrNv8vZH3/J1pu/0y1
3/9Xz///Tbji/ylbbv8DBwlQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACYyPD//SoeX/2bR6/968P//euT//33d//+F4P//jeL//5Tk//+b5v//o+j//6rp
//+y6///uu7//8Lw///K8f//0vP//9r2///t/f//8fz//8Lo9v93y+v/Rrfk/0Kz4P8+jK7/JEtd/wkT
GP8wZoD/JVJl/0Gavf9RwO3/UsPw/1PH9v8pYHfmAAAANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAIyJJVstcw9X/de3//3no//973v//gd///4fh//+P4///luX//57n
//+m6f//rev//7Xs//++7///xfH//83z///V9f//3/f//+b5///w+v/////////////t+f3/q+D0/2XG
6/8/p9P/LGeC/wgOEf8hRVf/JVJl/z2Ttf9Rwe7/Trrk/1HC7/9NuOP/FTI/twABADIAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRYcaFazy/9++f//eN///33d//+E4f//jOL//5Lj
//+a5v//oej//6np//+x6///uO3//8Hu///J8f//0vP//9r1///h9///6vr///X8///8/v//+/7///X9
///0/f//7/z//8/x/P+S2/f/TKXJ/yFZc/8cPk7/Jlhs/0es0/9QwOz/Trrl/0675v9TxvT/NX2b8Awa
II8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKDtC2HDQ7P9+6P//gN7//4jh
//+P5P//l+b//53n//+l6P//rOv//7Ts//+87v//xPD//8zx///V9f//3vb//+b4///v+///+P7///z/
///4/f//8fz//+n5///i9///3Pb//9v3///S9f//suv9/3nL6/9EnsH/QKXN/0686P9Ou+b/Trrl/066
5f9SwvD/RKLH/yFPYdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBISEq1JRUP1goyQ/4fZ
8f+B5f//iuH//5Lk//+Z5v//oej//6jp//+w6///t+7//7/w///H8v//0PT//9j1///h9///6/r///P8
///7/v//+/7///T9///u+///5vn//9/2///Y9f//0PP//8vy///G8v//wfH//6nn/v+G2vn/Zsrw/0y5
5P9MuOT/Trrl/0665P9Swu//R6rR/yhgducAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQFOLi0t5HNx
cf+opKL/wr+//6HX6P+L6P//lOT//5zn//+l6P//rOr//7Pr//+77f//w/D//8zy///U9P//3Pb//+T3
///u+///+P3///z+///5/v//8fv//+v6///k+f//3Pf//9T1///O8v//x/L//8Hw/v+88P//s+v7/2y/
4P9avub/k+P+/37Y9/9XwOn/TLjk/0655P9TxvT/R6fO/yRWat8AAAAAAAAAAAAAAAAAAAAAAAAAAwAA
AEZCQUHrmZeW/7y7uv/Ixsf/sayq/4OWnviN2O3/pvP//6bo//+v6///uO3//77u///G8P//z/P//9j1
///g9///6Pn///L7///6/v//+/////b9///u+///5/n//+D4///Z9v//0fP//87z///I8///wPL//5vY
7v92yOf/gNPx/2C52v9Fps7/Z8nv/4/m//+D3/z/Z9H2/1jL9v9QvOj/KmR84gsZIIoAAAAAAAAAAAAA
AAAAAAAABQUFRDw7O8yzsrL/wL+//8C/wP+WlZb8Pj08qwAAAHBScHj/t/v9/774//+67v//wu///8rx
///T8///2/b//+T5///t+///9/3///7+///6/v//8vv//+r6///j+f//3Pb//9X1///P9P//z/X//7/w
/v+W2vL/fcrl/2zA4f9fs9X/Va7R/1Ks0f9WrM3/RKbO/2nL8f+E7v//euX8/1Kkvf8eRFHBAAMESwAA
AAoAAAAAAAAAAAAAAAAAAAAAMzMzsJiYmPewsLD/paSm/3x7fPcSEhJ/AAAAAwAAAABIR0b/b4uT/8Lx
8//Z////0/n//9X0///e9v//6Pn///L8///6/v///f////f+///u+///5/n//+H3///Z9v//0/T//83z
///C7/3/sOj6/3/J5f9csdP/abnZ/0213/97z+3/m+b7/3fL6f9et9r/Wbjd/2nR9P9fu9D/WH+L/ygp
Jv8AAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0pK5HFwcv9zcnT/iIiK/g4ODp8AAAAAAAAAAAAA
AABvbmr/t7e3/3R/gv+hu73/5f////T////t+///9v3///3////7/v//8/z//+v7///l+P//3fb//9f1
///S9P//0Pf//9D5//+z5fT/W7rg/1264P+e3vH/g9Ty/0qv2P9tw+P/bMjn/3ra+P+L9v//bcvp/1KF
lP+EjZD/2tra/0E/Of8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx4g6CEgI/93dnj/TU1P/QAA
AGcAAAAAAAAAAAAAAABxcG3//////+fn5/+anJ3/foSH/8vT0/////////////f+///v+///6Pn//+L3
///a9v//1PT//9b4///G8f//j8/n/4bU7v+G1PD/T6nO/1K23f+R5f//eMvo/1Kr0P9duNv/Ysfu/27T
8v9NkJ7/dIKH/8bGxv///////////0JAO/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQkK1xEQ
E/96eXv/Ozo+/wUFB78AAAANAAAAAAAAAAB0c3D/////////////////3t7e/5CRkf+PkI//5+3v////
///p+///3fX//9f0///S9P//zPT//5nc9P9wvdz/fb/a/2a31v9LqM7/Vq7R/02ozf9St+D/gNf1/4Tk
+P933fz/VqC5/2R6gP+4urv/9vb2/////////////////0RBPf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAgIClwsKDe53d3r/T05R/xUUF/4ICAi2AQICKAAAAAB3dnL///////////////////////v7
+//T09P/foCA/5Wgo//f+fv/4P///87z///J8f//htbz/1Wz2v+MzOP/p+f5/6Lm+P+N1/H/csTh/1So
zP9Vr9T/feD//2m+0/9Vdn7/qayt/+3t7f///////////////////////////0VDPv8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAKwEAAatDQ0b/jIuN/yMiJv8aGR3/EBAS4wQEBIpgYFz//v7+////
////////////////////////9vb2/8rLy/9scXL/mre+/8n5/f/C9f//X7XZ/1S54v+g5/z/p+3//5Di
/f9wyu3/gNj1/4np+v9yyuL/UXuJ/4+Tlf/r6+v//////////////////////////////////////0ZE
P/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMEAwXPbWtu/4OChP8oJiv/Gxof/xoZ
HP4XFhn////////////////////////////+/v7/1dXV/3Rzc/8xMTH/FBUX/1lsc/+eztn/ldjs/1y0
1v9VtNn/Xrjb/1a02P9gvt//dtLq/1qUov90fH//3t7e//7+/v//////////////////////////////
/////////////0dGQP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnBAMFtmFh
Y/iNjI3/S0pO/ygnK/8fHiH////////////////////////////U1NX/GBcb/xoZHf8cGx//GBcb/xMO
Ev81OD7/k7W//5zd6/+E1/X/gNr4/3vW8P9oq7z/YnV6/8PDw///////////////////////////////
/////////////////////////////0lHQv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAACAAAAHM1NTXQfHt8+Ht6fP9gX2L////////////////////////////e3t7/MTA0/y8t
Mv81NDj/R0ZJ/19fYf9zcXL/e3Z1/3N9gP9qlaH/b6e1/2J+hv+lpaX/////////////////////////
/////////////////////////////////////////////0tJQ/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAaTExMaplZWT/////////////////////////
///19fb/lJSW/2VlZ/91dHX/hISE/4mJif+pqan/29vb///////U1NT/v7+///Ly8v//////////////
/////////////////////////////////////////////////////////////0xKRf8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABycW7/////////
////////////////////////8fHx/7i4t/+hoqH/0tLS//r6+v//////////////////////////////
/////////////////////////////////////////////////////////////////////////////0xM
Rv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AACJiIX//////////////////////////////////////////////////////8fHxv/Hx8b/x8fG/8fH
xv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG////
/////////////05NSP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACLiof///////////+Uk5H/x8fG/8fHxv+Uk5H/lJOR/8fHxv///////////+vr
6v//////////////////////////////////////////////////////////////////////////////
////////x8fG/////////////////1BOSf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNjIn/////////////////////////////////////////
/////////////+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr
6v/r6+r/6+vq/+vr6v/r6+r/6+vq/////////////////1BQSv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPjoz/////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////1JRTP8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSkY7/////////
/////////////////////////////////////////////8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fH
xv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/8fHxv/Hx8b/x8fG/////////////////1NS
TP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AACUk5H///////////+Uk5H/x8fG/5STkf+Uk5H/x8fG/5STkf///////////+vr6v//////////////
////////////////////////////////////////////////////////////////////////x8fG////
/////////////1RTTv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACWlZP//////////////////////////////////////////////////////+vr
6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr6v/r6+r/6+vq/+vr
6v/r6+r/6+vq/////////////////1VUT/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXlpT/////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////1ZVUP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZmJb/qnc1/6p3Nf+qdzX/qnc1/6p3
Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3
Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/1dWUf8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACamZf/9dmn//XZ
p//12af/89el//HUov/v0p7/7c+b/+vLl//oyJP/5cSP/+LAiv/eu4X/27iA/9i0fP/Vr3b/0apx/86m
bP/Komb/x5xh/8SZXP/AlFf/vZBS/7qLTf+3iEn/tYRF/7KBQP+vfz3/rXw6/6t5OP+qdzX/qnc1/1dX
Uf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AACcm5n/9dmn//XZp//12af/89ek//HUov/v0p7/7s+b/+vMmP/oyJP/5cSO/+HAiv/fvIX/27eA/9iz
e//Ur3b/0apw/86ma//KoWb/x51h/8OZXP/AlFf/vY9S/7qMTf+3iEn/tIRF/7KBQf+wfj3/rXs7/6x5
N/+qdzX/qnc1/1hXUv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACdnJr/9dmn//XZp//12af/9Nel//LVov/w0Z7/7c+c/+vMl//oyJP/5cSO/+HA
iv/fvIX/3LeA/9ize//Vr3b/0apx/86mbP/KoWb/xp1h/8SYW//AlFb/vZBS/7qMTv+3iEj/tIRF/7KB
QP+wfj3/rnw6/6t5N/+qdzX/qnc1/1hXUv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACdnJr/nZya/5ybmP+amZf/mJiW/5eWlP+Uk5H/kpGP/5CO
jP+NjYn/iomH/4iHhP+FhID/goF9/39+e/98e3j/eXh1/3Z1cv9zc2//cW9s/21saP9qaWb/aGdj/2Vk
YP9jYl7/YWBc/15dWP9cXFf/W1pV/1lYVP9YV1L/WFdS/1hXUv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
/////wAA//////////////+B/////////gB////////4AD//////wAAAAB/////AAAAAH//A/8AAAAAf
/8D/wAAAAB//wP/AAAAAH//A/8AAAAAP/8D/gAAAAAf/wP8AAAAAA/+A/wAAAAAD/wD+AAAAAAP/APgA
AAAAA/4A8AAAAAAD+ADAAAAAAAPwAMAAAAAAA8AAwEAAAAAPwADBwAAAAB/AQMHAAAAAH8HAwMAAAAAf
wcDAQAAAAB/AwMAAAAAAH8BA4AAAAAAfwADwAAAAAB/gAPgAAAAAH/AA/gAAAAAf+AD/wAAAAB/+AP/A
AAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf
/8D/wAAAAB//wP/AAAAAH//A/8AAAAAf/8D/wAAAAB//wP/AAAAAH//A/////////8D/////////////
/////////////////////////////ygAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAASEyUqbzJwiOhCoMb/L3GK7A8iK3oAAQIXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAACBg8RUjdnc8RrxNv+XdD8/1HE8/9Uyvj/SK3V/yZdcsoGERReCRQYAwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4NTD/ODUw/zg1MP84NTD/ODUw/zg1
MP84NTD/Li4r/ytCSP9fssX/huz//4zq//9Ywev/Sbfj/0+75/9SxPH/U8Ty/0Oewv8nRlH/Kywq/zg1
MP84NTD/ODUw/zg1MP84NTD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5dWP/9/f3/////////
////////2NjY/3yNkv9cobL/e+P8/4fq//+N5P//meb//2/M8P9GtuP/T7rl/0665f9Ou+b/U8Px/0mr
0/82b4f/cIaO/9HS0v//////+vr6/15dWP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYWBc//39
/f//////6urr/5Ganf9alqX/dN3x/4Xu//+I5P//j+L//5nm//+p6///oOT7/1O95/9DteP/Trrl/1C9
6P9Lr9j/LF51/xs6Sf81fZr/Romj/4iTmP/g4OD/YWBc/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABjYl7/8vLy/6Ooqv9dipj/aM7j/3/t//+D5f//i+L//5Tj//+f5///qer//7Ps///H8///peL3/1W9
5v8+s+L/Srzp/0yt1f8sXXT/DyAo/yVRZP9Bmrz/T7zn/059kP9ERkT/AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAk1PTf9nho//W7nL/3nt//9/5v//hd7//4/j//+Z5v//ouj//63q//+47v//wvD//87y
///h+v//0fD6/4nR7v9Mu+b/QrPg/zh+nP8TJi//I0te/yxlfP9PvOf/V9D//z6Nrf8JExleAAAAAAAA
AAAAAAAAAAAAAAAAAAANHiRtTJ2q/3Tq/P9+7f//geH//4jg//+S5P//nef//6fq//+x7P//ve7//8fy
///R9P//3fb//+r5/////////f7//8fq9/90zvD/QKLN/xQ3Rv8VKjX/KFtv/0is0/9Swu//Vs///zBy
jeEBAgJBAAAAAAAAAAAAAAAAAAAAJDdyhNWA+v//fuT//4Tg//+O4///l+X//6Ho//+s6v//tu3//8Hv
///M8v//2PX//+L3///v+///+v3///r+///1/f//8/3//9/4//+j4/r/U6C//yRZcP8vdpL/Trvn/0+8
5/9Rwu//SrHa/xo8SbMAAAAAAAAAAgcGBVUyLi3Lc6u8/4Lr//+H4f//kuT//5zn//+m6P//sOz//7ru
///F8f//0PP//9z2///p+f//9fz///v+///3/f//7fv//+P3///Y9P//1PX//9L3//+28P//etHy/1S+
5/9KuOX/Tbnk/1C96f9PvOj/LnCJ5AAAAAkVFBSTY2Fg+rKppv+30tv/kOr//5Tm//+g5///q+r//7Tr
//+/7///yvL//9X1///g9///7vv///r+///7/v//8/v//+n6///e+P//1fX//8/1///E8f7/u/D+/5vc
8/9mwun/h9/9/2vM8P9OueX/UcPw/1LB7v8rZX3jHh4ejJCOjf/JyMj/vrq6/2tsbdt1q7j/s/7//6/s
//+57P//xO///8/z///b9v//5vn///P7///8/v//9/7//+77///k+P//2fb//9P1///M9P//tuz6/5XX
7f9twOD/Yrvd/0mnzP9gwOX/ieb//3rn//9ayPD/Lm+J3AkXHWqMjIzsv76+/56dn/84ODiYAAAAKUdM
TP+ayc3/0////9H6///T8///4Pf//+37///5/v///P////T8///p+f//3/f//9f1///O8///w/H+/5XW
7v9rvNv/XLjd/3DF5f92yeX/XbTX/1W34P9v2vj/Yq28/0JTV/8BAwMtAAAAAHZ1d/eHhoj/Ly8vrQAA
AAMAAAAAeHd0/5yfoP+Lnp//1+/v//r////3////+/////n9///v/P//5Pj//933///Z9///zPT+/8X0
/f96yef/Yr3h/5DY8P9VtNv/aMDi/3zb+v+E7P7/Y7bQ/2mIkf+6vLz/eXh1/wAAAAAAAAAANDM192Vl
aP8JCAmTAAAAAAAAAAB8e3j//v39/9jY2P+Vl5n/r7Ky//j5+f//////6vn//+D2///Z9v//0vb//6/k
9v+Ex+L/ccXj/1Su0v9TtNr/f9b0/27G5P9pzvL/X7na/2KOl/+mqqv/9fX1//v7+v98e3j/AAAAAAAA
AAAsKy3yamls/xUUF+8BAgJhAAAAAH9+e//+/v3////////////Kysr/kpSU/7vCxP/q////2/z//8vz
//+I1PD/ccDe/5bX7P+Czuj/ar3d/0+ozf9myO7/geD3/2GYpv+UnJ7/6Ojo////////////+/v6/39+
e/8AAAAAAAAAAA0MDrNvbnH/SklN/w4NEfwICQqsXVxZ//r6+v/9/f3////////////7+/v/sbKy/3J9
f/+12t//vvb//1a13f93y+r/oOf5/4LW9P+A3Pv/gd30/16dr/+AjZL/39/f////////////////////
///7+/v/goF9/wAAAAAAAAAAAAAAJyIhIsh6eHv/UU9S/x8eI/8bGhz//v7+/////////////////8XF
xv9UU1X/FhMW/yMmK/9xj5j/k9bp/2/K7P9qyOz/aMnq/2Cqv/9zi5H/yMnK////////////////////
//////////////v7+/+FhID/AAAAAAAAAAAAAAAAAAAAGxgYGZJjY2Psa2pt/1RTVf/8/Pz/////////
////////YmFk/yYlKv8yMTX/Pzw//1lUV/9/ioz/dqOw/3K5zf9ri5P/t7y9//n5+f//////////////
////////////////////////+/v7/4iHhP8AAAAAAAAAAAAAAAAAAAAAAAAAAAMDAzIpKSmEZWVl//7+
/v/////////////////Dw8P/YWBj/3V0df+MjIz/rKur/+bm5v/f4OD/wMHB//Dw8P//////////////
///////////////////////////////////7+/v/iomH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AACJiYX/9fX1///////////////////////u7u7/2tra////////////////////////////////////
//////////////////////////////////////////////v7+/+NjYn/AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAJCOjP/8/Pz//f39//7+/v/+/v7//v7+//39/f/7+/v/0NDP/9DQz//Q0M//0NDP/9DQ
z//Q0M//0NDP/9DQz//Q0M//0NDP/9DQz//Q0M//0NDP/9DQz///////+/v7/5COjP8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAkpGP///////U1NP/sbCv/8/Pzv+xsK//19bW///////o6Oj/5OTj/+jo
6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/l5eX/0NDP///////7+/v/kpGP/wAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUk5H//v7+////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////v7
+/+Uk5H/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJeWlP/+/v7/////////////////////////
////////0dHQ/9HR0P/R0dD/0dHQ/9HR0P/R0dD/0dHQ/9HR0P/R0dD/0dHQ/9HR0P/R0dD/0dHQ/9HR
0P//////+/v7/5eWlP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmJiW///////U1NP/yMjI/7Oy
sf/JyMj/xMTC///////p6ej/5eXk/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np
6f/m5ub/0dHQ///////7+/v/mJiW/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACamZf///////7/
///8////+Pz///z////7//////////3////5/f//+v7///r+///6/v//+v7///r+///6/v//+v7///r+
///6/v//+v7///n9///4/P////////////+amZf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyb
mP+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3
Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/6p3Nf+qdzX/qnc1/5ybmP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAnZya///irv//46///+Gs//zeqP/52qP/9tae//LQl//ty5D/6cSK/+S+gv/ft3z/2rFz/9aq
bP/QpGT/zJ5d/8eXVf/DkU7/v4xI/7qHQv+3gjz/tH44/7J7NP+ueTT/nZya/wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACdnJr//+Ku///jr///4az//N6o//nao//21p7/8tCX/+3LkP/pxIr/5L6C/9+3
fP/asXP/1qps/9CkZP/Mnl3/x5dV/8ORTv+/jEj/uodC/7eCPP+0fjj/sns0/655NP+dnJr/AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJybmP+amZf/mJiW/5eWlP+Uk5H/kpGP/5COjP+NjYn/iomH/4iH
hP+FhID/goF9/39+e/98e3j/eXh1/3Z1cv9zc2//cW9s/21saP9qaWb/aGdj/2VkYP9jYl7/YWBc/5yb
mP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA//4D///4AP/4AAAD+AAAA/gAAAP4AAAD8AAAAfAAAADgAAAAgAAAAAAA
AAAAAAAAAAAAAQgAAAMYAAADCAAAAwAAAAMAAAADgAAAA+AAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gA
AAP4AAAD+AAAA/gAAAP4AAAD+AAAA/////8oAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMmKU9DjabLRqvS8CJQY5UGEBMhAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAf357/3x7eP95eHX/YGNi/094gP+A2uv/fuD//0i86/9TxvT/P4ik/0FQ
Vf9bW1j/Xl1Y/wAAAAAAAAAAAAAAAJ2cmv/d3t//haKp/3DI2f+P8P//oOz//7Dr/f9qxur/Qrvs/zmH
qP8jTWD/WZOp/0dOTv8AAAAAAAAAAAAAAABnc3T/a7zJ/4Pt//+U6///pOn//7ru///U9f//6Pn9/6ni
+P9MocT/ES49/z6Ss/9Pvun/ESgxYgAAAAAUEhNacsTT/472//+Z5f//rev//8Lw///c9v//8/v///v+
///1/v//yvT//2iqw/9EpMn/U8r7/zyOruM8OzqGS0pN/4y2wP+q9///ufD//8zy///m+f//+f7///P8
///i+v//xvD9/6Tg8/91yev/c9r+/2HQ9v8tbIa9S0pN/0xLS4+AgH7/l6+v/+D6+//9////+f///+37
///Y9v7/rOP1/3rJ5/9mw+j/cNLx/2WtxP9FUlP/AggKDktKTfoLCwx+nZya//////+/wMD/yMjI/+3/
//++8f//k9Xs/2/E5P9oyu7/bLvV/4egqP/e39//YWBc/wAAAAArKiyhSkpN/z8+P//s7Oz/9vb2/6Ki
ov9cZWf/h8TY/37Z+v91yeT/fKCq/87R0v///////////2FgXP8AAAAAAAAABysrK29fX1//////////
//+Af4H/WldY/5OVl/+UqK3/tr2///////////////////////9hYFz/AAAAAAAAAAAAAAAAm5qY//Pz
8//k5OT/4ODg/+Tk5P/m5ub/6Ojo/+jo6P/o6Oj/6Ojo/+bm5f//////YWBc/wAAAAAAAAAAAAAAAJ2c
mv///////////////////////////////////////////////////////////2FgXP8AAAAAAAAAAAAA
AACdnJr//////+bm5v/m5ub/8vT2/+Xp7v/o7PD/6Ozw/+js8P/o7PH/5enu//////9hYFz/AAAAAAAA
AAAAAAAAnZya/+nMmP/vzZX/6MWM/+C7f//XsHP/z6Rm/8aYWP+9jUr/tYI9/655M/+pbiL/YWBc/wAA
AAAAAAAAAAAAAJ2cmv/pzJj/782V/+jFjP/gu3//17Bz/8+kZv/GmFj/vY1K/7WCPf+ueTP/qW4i/2Fg
XP8AAAAAAAAAAAAAAACdnJr/nZya/5ybmP+amZf/mJiW/5eWlP+Uk5H/kpGP/5COjP+NjYn/iomH/4iH
hP+FhID/AAAAAP4PSbvAAQAAwAF8wMAAwAGAAMAAAACAAAAAAAAAAQAAAAEAAQABAAHAAQABwAHAAcAB
wAHAAcABwAHAAcABAAQ=
</value>
</data>
</root>

View File

@ -0,0 +1,194 @@
namespace sscs.winforms
{
partial class MasterPasswordForm
{
/// <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.groupBox1 = new System.Windows.Forms.GroupBox();
this.numericUpDownRemberFor = new System.Windows.Forms.NumericUpDown();
this.label4 = new System.Windows.Forms.Label();
this.textBoxMP2 = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.textBoxMP1 = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.labelError = new System.Windows.Forms.Label();
this.textBoxDescription = new System.Windows.Forms.TextBox();
this.groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownRemberFor)).BeginInit();
this.SuspendLayout();
//
// groupBox1
//
this.groupBox1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.groupBox1.Controls.Add(this.numericUpDownRemberFor);
this.groupBox1.Controls.Add(this.label4);
this.groupBox1.Controls.Add(this.textBoxMP2);
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Controls.Add(this.textBoxMP1);
this.groupBox1.Controls.Add(this.label1);
this.groupBox1.Location = new System.Drawing.Point(12, 66);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(282, 60);
this.groupBox1.TabIndex = 0;
this.groupBox1.TabStop = false;
//
// numericUpDownRemberFor
//
this.numericUpDownRemberFor.Location = new System.Drawing.Point(115, 93);
this.numericUpDownRemberFor.Name = "numericUpDownRemberFor";
this.numericUpDownRemberFor.Size = new System.Drawing.Size(51, 20);
this.numericUpDownRemberFor.TabIndex = 5;
this.numericUpDownRemberFor.Visible = false;
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(33, 95);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(76, 13);
this.label4.TabIndex = 4;
this.label4.Text = "Remember for:";
this.label4.Visible = false;
//
// textBoxMP2
//
this.textBoxMP2.Location = new System.Drawing.Point(115, 58);
this.textBoxMP2.Name = "textBoxMP2";
this.textBoxMP2.Size = new System.Drawing.Size(161, 20);
this.textBoxMP2.TabIndex = 3;
this.textBoxMP2.Visible = false;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(6, 62);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(103, 13);
this.label2.TabIndex = 2;
this.label2.Text = "Re-enter Password:";
this.label2.Visible = false;
//
// textBoxMP1
//
this.textBoxMP1.Location = new System.Drawing.Point(115, 24);
this.textBoxMP1.Name = "textBoxMP1";
this.textBoxMP1.PasswordChar = '*';
this.textBoxMP1.Size = new System.Drawing.Size(161, 20);
this.textBoxMP1.TabIndex = 1;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(18, 27);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(91, 13);
this.label1.TabIndex = 0;
this.label1.Text = "Master Password:";
//
// button1
//
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.button1.Location = new System.Drawing.Point(127, 138);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 4;
this.button1.Text = "Ok";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// button2
//
this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.button2.Location = new System.Drawing.Point(213, 138);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(75, 23);
this.button2.TabIndex = 5;
this.button2.Text = "Cancel";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// labelError
//
this.labelError.AutoSize = true;
this.labelError.ForeColor = System.Drawing.Color.Red;
this.labelError.Location = new System.Drawing.Point(64, 50);
this.labelError.Name = "labelError";
this.labelError.Size = new System.Drawing.Size(0, 13);
this.labelError.TabIndex = 7;
//
// textBoxDescription
//
this.textBoxDescription.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.textBoxDescription.Location = new System.Drawing.Point(21, 12);
this.textBoxDescription.Multiline = true;
this.textBoxDescription.Name = "textBoxDescription";
this.textBoxDescription.ReadOnly = true;
this.textBoxDescription.Size = new System.Drawing.Size(267, 33);
this.textBoxDescription.TabIndex = 9;
this.textBoxDescription.Text = "Description";
//
// MasterPasswordForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(306, 178);
this.Controls.Add(this.textBoxDescription);
this.Controls.Add(this.labelError);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Controls.Add(this.groupBox1);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "MasterPasswordForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Master Password";
this.TopMost = true;
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownRemberFor)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.TextBox textBoxMP2;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox textBoxMP1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.NumericUpDown numericUpDownRemberFor;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label labelError;
private System.Windows.Forms.TextBox textBoxDescription;
}
}

View File

@ -0,0 +1,58 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using sscs.cache;
namespace sscs.winforms
{
public delegate void MasterPasswordEventHandler(string sMasterPassword, bool bIsValid);
public partial class MasterPasswordForm : Form
{
public event MasterPasswordEventHandler MasterPasswordVerified;
public MasterPasswordForm(string sDescription)
{
InitializeComponent();
if (sDescription != null)
{
textBoxDescription.Text = sDescription;
}
else
{
textBoxDescription.Text = "";
}
}
internal void SetErrorMessage(string sMessage)
{
labelError.Text = sMessage;
}
private void button2_Click(object sender, EventArgs e)
{
// user cancel
MasterPasswordVerified(null, false);
}
private void button1_Click(object sender, EventArgs e)
{
SetErrorMessage("");
if (textBoxMP1.Text != null && textBoxMP1.Text.Length > 0)
{
// signal event handlers
MasterPasswordVerified(textBoxMP1.Text, true);
}
else
{
SetErrorMessage("Please enter your Master Password");
}
}
}
}

View File

@ -0,0 +1,120 @@
<?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>
</root>

View File

@ -0,0 +1,689 @@
namespace sscs.winforms
{
partial class MiCasaForm
{
/// <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 (true)
{
return;
}else{
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(MiCasaForm));
this.button1 = new System.Windows.Forms.Button();
this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);
this.contextMenuStripNotify = new System.Windows.Forms.ContextMenuStrip(this.components);
this.cmOpen = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator();
this.cmLock = new System.Windows.Forms.ToolStripMenuItem();
this.cmUnlock = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator();
this.cmExit = new System.Windows.Forms.ToolStripMenuItem();
this.button2 = new System.Windows.Forms.Button();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.listBox1 = new System.Windows.Forms.ListBox();
this.label2 = new System.Windows.Forms.Label();
this.button3 = new System.Windows.Forms.Button();
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.newSecretToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.newKeyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.refreshStoresToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.lockSecretsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.unlockSecretsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.destroySecretsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.exportSecretsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.importSecretsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.quitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.linkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.changeMasterPasswordToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
this.preferencesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();
this.policyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.contentsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.aboutCasaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.pictureBox2 = new System.Windows.Forms.PictureBox();
this.listViewNative = new System.Windows.Forms.ListView();
this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
this.columnHeader2 = new System.Windows.Forms.ColumnHeader();
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.labelNativeInfo = new System.Windows.Forms.Label();
this.comboBoxProfile = new System.Windows.Forms.ComboBox();
this.comboBoxKeyChains = new System.Windows.Forms.ComboBox();
this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
this.newToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.viewToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();
this.deleteToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
this.profilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.newToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator();
this.contextMenuStripNotify.SuspendLayout();
this.menuStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
this.contextMenuStrip.SuspendLayout();
this.SuspendLayout();
//
// button1
//
this.button1.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.button1.Location = new System.Drawing.Point(12, 84);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 1;
this.button1.Text = "Start";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// notifyIcon1
//
this.notifyIcon1.BalloonTipText = "CASA";
this.notifyIcon1.ContextMenuStrip = this.contextMenuStripNotify;
this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon")));
this.notifyIcon1.Text = "notifyIcon1";
this.notifyIcon1.Visible = true;
this.notifyIcon1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseDoubleClick);
//
// contextMenuStripNotify
//
this.contextMenuStripNotify.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.cmOpen,
this.toolStripSeparator8,
this.cmLock,
this.cmUnlock,
this.toolStripSeparator9,
this.cmExit});
this.contextMenuStripNotify.Name = "contextMenuStripNotify";
this.contextMenuStripNotify.ShowImageMargin = false;
this.contextMenuStripNotify.Size = new System.Drawing.Size(143, 104);
//
// cmOpen
//
this.cmOpen.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold);
this.cmOpen.Name = "cmOpen";
this.cmOpen.Size = new System.Drawing.Size(142, 22);
this.cmOpen.Text = "Open Manager";
this.cmOpen.Click += new System.EventHandler(this.cmOpen_Click);
//
// toolStripSeparator8
//
this.toolStripSeparator8.Name = "toolStripSeparator8";
this.toolStripSeparator8.Size = new System.Drawing.Size(139, 6);
//
// cmLock
//
this.cmLock.Name = "cmLock";
this.cmLock.Size = new System.Drawing.Size(142, 22);
this.cmLock.Text = "Lock Secrets";
this.cmLock.Click += new System.EventHandler(this.cmLock_Click);
//
// cmUnlock
//
this.cmUnlock.Enabled = false;
this.cmUnlock.Name = "cmUnlock";
this.cmUnlock.Size = new System.Drawing.Size(142, 22);
this.cmUnlock.Text = "UnLock Secrets";
//
// toolStripSeparator9
//
this.toolStripSeparator9.Name = "toolStripSeparator9";
this.toolStripSeparator9.Size = new System.Drawing.Size(139, 6);
//
// cmExit
//
this.cmExit.Name = "cmExit";
this.cmExit.Size = new System.Drawing.Size(142, 22);
this.cmExit.Text = "Exit";
this.cmExit.Click += new System.EventHandler(this.cmExit_Click);
//
// button2
//
this.button2.Location = new System.Drawing.Point(373, 84);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(75, 23);
this.button2.TabIndex = 2;
this.button2.Text = ">>";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// listBox1
//
this.listBox1.BackColor = System.Drawing.Color.White;
this.listBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.listBox1.ItemHeight = 16;
this.listBox1.Location = new System.Drawing.Point(12, 119);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(436, 228);
this.listBox1.Sorted = true;
this.listBox1.TabIndex = 3;
this.listBox1.Visible = false;
this.listBox1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.listBox1_MouseDoubleClick);
this.listBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.listBox1_MouseClick);
this.listBox1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listBox1_MouseUp);
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(313, 22);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(10, 13);
this.label2.TabIndex = 4;
this.label2.Text = " ";
//
// button3
//
this.button3.Location = new System.Drawing.Point(145, 469);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(129, 23);
this.button3.TabIndex = 5;
this.button3.Text = "Start Logging";
this.button3.UseVisualStyleBackColor = true;
this.button3.Visible = false;
this.button3.Click += new System.EventHandler(this.button3_Click);
//
// menuStrip1
//
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.fileToolStripMenuItem,
this.editToolStripMenuItem,
this.optionsToolStripMenuItem,
this.profilesToolStripMenuItem,
this.helpToolStripMenuItem});
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1";
this.menuStrip1.Size = new System.Drawing.Size(459, 24);
this.menuStrip1.TabIndex = 6;
this.menuStrip1.Text = "menuStrip1";
//
// fileToolStripMenuItem
//
this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.newToolStripMenuItem,
this.refreshStoresToolStripMenuItem,
this.toolStripSeparator1,
this.lockSecretsToolStripMenuItem,
this.unlockSecretsToolStripMenuItem,
this.destroySecretsToolStripMenuItem,
this.toolStripSeparator2,
this.exportSecretsToolStripMenuItem,
this.importSecretsToolStripMenuItem,
this.toolStripSeparator3,
this.quitToolStripMenuItem});
this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
this.fileToolStripMenuItem.Size = new System.Drawing.Size(35, 20);
this.fileToolStripMenuItem.Text = "File";
//
// newToolStripMenuItem
//
this.newToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.newSecretToolStripMenuItem,
this.newKeyToolStripMenuItem});
this.newToolStripMenuItem.Name = "newToolStripMenuItem";
this.newToolStripMenuItem.Size = new System.Drawing.Size(176, 22);
this.newToolStripMenuItem.Text = "New";
//
// newSecretToolStripMenuItem
//
this.newSecretToolStripMenuItem.Name = "newSecretToolStripMenuItem";
this.newSecretToolStripMenuItem.Size = new System.Drawing.Size(140, 22);
this.newSecretToolStripMenuItem.Text = "New Secret";
//
// newKeyToolStripMenuItem
//
this.newKeyToolStripMenuItem.Name = "newKeyToolStripMenuItem";
this.newKeyToolStripMenuItem.Size = new System.Drawing.Size(140, 22);
this.newKeyToolStripMenuItem.Text = "New Key";
//
// refreshStoresToolStripMenuItem
//
this.refreshStoresToolStripMenuItem.Name = "refreshStoresToolStripMenuItem";
this.refreshStoresToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F5;
this.refreshStoresToolStripMenuItem.Size = new System.Drawing.Size(176, 22);
this.refreshStoresToolStripMenuItem.Text = "Refresh Stores";
this.refreshStoresToolStripMenuItem.Click += new System.EventHandler(this.refreshStoresToolStripMenuItem_Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(173, 6);
//
// lockSecretsToolStripMenuItem
//
this.lockSecretsToolStripMenuItem.Name = "lockSecretsToolStripMenuItem";
this.lockSecretsToolStripMenuItem.Size = new System.Drawing.Size(176, 22);
this.lockSecretsToolStripMenuItem.Text = "Lock Secrets";
this.lockSecretsToolStripMenuItem.Click += new System.EventHandler(this.lockSecretsToolStripMenuItem_Click);
//
// unlockSecretsToolStripMenuItem
//
this.unlockSecretsToolStripMenuItem.Enabled = false;
this.unlockSecretsToolStripMenuItem.Name = "unlockSecretsToolStripMenuItem";
this.unlockSecretsToolStripMenuItem.Size = new System.Drawing.Size(176, 22);
this.unlockSecretsToolStripMenuItem.Text = "Unlock Secrets";
this.unlockSecretsToolStripMenuItem.Click += new System.EventHandler(this.unlockSecretsToolStripMenuItem_Click);
//
// destroySecretsToolStripMenuItem
//
this.destroySecretsToolStripMenuItem.Name = "destroySecretsToolStripMenuItem";
this.destroySecretsToolStripMenuItem.Size = new System.Drawing.Size(176, 22);
this.destroySecretsToolStripMenuItem.Text = "Destroy Secrets";
this.destroySecretsToolStripMenuItem.Click += new System.EventHandler(this.destroySecretsToolStripMenuItem_Click);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(173, 6);
//
// exportSecretsToolStripMenuItem
//
this.exportSecretsToolStripMenuItem.Name = "exportSecretsToolStripMenuItem";
this.exportSecretsToolStripMenuItem.Size = new System.Drawing.Size(176, 22);
this.exportSecretsToolStripMenuItem.Text = "Export Secrets";
this.exportSecretsToolStripMenuItem.Click += new System.EventHandler(this.exportSecretsToolStripMenuItem_Click);
//
// importSecretsToolStripMenuItem
//
this.importSecretsToolStripMenuItem.Name = "importSecretsToolStripMenuItem";
this.importSecretsToolStripMenuItem.Size = new System.Drawing.Size(176, 22);
this.importSecretsToolStripMenuItem.Text = "Import Secrets";
this.importSecretsToolStripMenuItem.Click += new System.EventHandler(this.importSecretsToolStripMenuItem_Click);
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
this.toolStripSeparator3.Size = new System.Drawing.Size(173, 6);
//
// quitToolStripMenuItem
//
this.quitToolStripMenuItem.Name = "quitToolStripMenuItem";
this.quitToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Q)));
this.quitToolStripMenuItem.Size = new System.Drawing.Size(176, 22);
this.quitToolStripMenuItem.Text = "Exit";
this.quitToolStripMenuItem.Click += new System.EventHandler(this.quitToolStripMenuItem_Click);
//
// editToolStripMenuItem
//
this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.viewToolStripMenuItem,
this.linkToolStripMenuItem,
this.copyToolStripMenuItem,
this.toolStripSeparator4,
this.deleteToolStripMenuItem});
this.editToolStripMenuItem.Name = "editToolStripMenuItem";
this.editToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
this.editToolStripMenuItem.Text = "Edit";
//
// viewToolStripMenuItem
//
this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
this.viewToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F2;
this.viewToolStripMenuItem.Size = new System.Drawing.Size(138, 22);
this.viewToolStripMenuItem.Text = "View";
//
// linkToolStripMenuItem
//
this.linkToolStripMenuItem.Name = "linkToolStripMenuItem";
this.linkToolStripMenuItem.Size = new System.Drawing.Size(138, 22);
this.linkToolStripMenuItem.Text = "Link";
//
// copyToolStripMenuItem
//
this.copyToolStripMenuItem.Enabled = false;
this.copyToolStripMenuItem.Name = "copyToolStripMenuItem";
this.copyToolStripMenuItem.Size = new System.Drawing.Size(138, 22);
this.copyToolStripMenuItem.Text = "Copy";
//
// toolStripSeparator4
//
this.toolStripSeparator4.Name = "toolStripSeparator4";
this.toolStripSeparator4.Size = new System.Drawing.Size(135, 6);
//
// deleteToolStripMenuItem
//
this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem";
this.deleteToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Delete;
this.deleteToolStripMenuItem.Size = new System.Drawing.Size(138, 22);
this.deleteToolStripMenuItem.Text = "Delete";
//
// optionsToolStripMenuItem
//
this.optionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.changeMasterPasswordToolStripMenuItem,
this.toolStripSeparator5,
this.preferencesToolStripMenuItem,
this.toolStripSeparator6,
this.policyToolStripMenuItem});
this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem";
this.optionsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.O)));
this.optionsToolStripMenuItem.Size = new System.Drawing.Size(56, 20);
this.optionsToolStripMenuItem.Text = "Options";
//
// changeMasterPasswordToolStripMenuItem
//
this.changeMasterPasswordToolStripMenuItem.Name = "changeMasterPasswordToolStripMenuItem";
this.changeMasterPasswordToolStripMenuItem.Size = new System.Drawing.Size(207, 22);
this.changeMasterPasswordToolStripMenuItem.Text = "Change Master Password";
this.changeMasterPasswordToolStripMenuItem.Click += new System.EventHandler(this.changeMasterPasswordToolStripMenuItem_Click);
//
// toolStripSeparator5
//
this.toolStripSeparator5.Name = "toolStripSeparator5";
this.toolStripSeparator5.Size = new System.Drawing.Size(204, 6);
//
// preferencesToolStripMenuItem
//
this.preferencesToolStripMenuItem.Name = "preferencesToolStripMenuItem";
this.preferencesToolStripMenuItem.Size = new System.Drawing.Size(207, 22);
this.preferencesToolStripMenuItem.Text = "Preferences";
//
// toolStripSeparator6
//
this.toolStripSeparator6.Name = "toolStripSeparator6";
this.toolStripSeparator6.Size = new System.Drawing.Size(204, 6);
//
// policyToolStripMenuItem
//
this.policyToolStripMenuItem.Name = "policyToolStripMenuItem";
this.policyToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F3;
this.policyToolStripMenuItem.Size = new System.Drawing.Size(207, 22);
this.policyToolStripMenuItem.Text = "Policies";
//
// helpToolStripMenuItem
//
this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.contentsToolStripMenuItem,
this.aboutCasaToolStripMenuItem});
this.helpToolStripMenuItem.Enabled = false;
this.helpToolStripMenuItem.Name = "helpToolStripMenuItem";
this.helpToolStripMenuItem.Size = new System.Drawing.Size(40, 20);
this.helpToolStripMenuItem.Text = "Help";
//
// contentsToolStripMenuItem
//
this.contentsToolStripMenuItem.Name = "contentsToolStripMenuItem";
this.contentsToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F1;
this.contentsToolStripMenuItem.Size = new System.Drawing.Size(148, 22);
this.contentsToolStripMenuItem.Text = "Contents";
//
// aboutCasaToolStripMenuItem
//
this.aboutCasaToolStripMenuItem.Name = "aboutCasaToolStripMenuItem";
this.aboutCasaToolStripMenuItem.Size = new System.Drawing.Size(148, 22);
this.aboutCasaToolStripMenuItem.Text = "About Casa";
//
// pictureBox1
//
this.pictureBox1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureBox1.BackgroundImage")));
this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
this.pictureBox1.Location = new System.Drawing.Point(0, 22);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(361, 56);
this.pictureBox1.TabIndex = 7;
this.pictureBox1.TabStop = false;
//
// pictureBox2
//
this.pictureBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.pictureBox2.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureBox2.BackgroundImage")));
this.pictureBox2.Location = new System.Drawing.Point(359, 22);
this.pictureBox2.Name = "pictureBox2";
this.pictureBox2.Size = new System.Drawing.Size(112, 56);
this.pictureBox2.TabIndex = 8;
this.pictureBox2.TabStop = false;
//
// listViewNative
//
this.listViewNative.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1,
this.columnHeader2});
this.listViewNative.Location = new System.Drawing.Point(13, 377);
this.listViewNative.Name = "listViewNative";
this.listViewNative.Size = new System.Drawing.Size(434, 86);
this.listViewNative.TabIndex = 9;
this.listViewNative.UseCompatibleStateImageBehavior = false;
this.listViewNative.View = System.Windows.Forms.View.List;
this.listViewNative.Visible = false;
//
// columnHeader1
//
this.columnHeader1.Text = "";
//
// openFileDialog1
//
this.openFileDialog1.FileName = "openFileDialog1";
this.openFileDialog1.Filter = "*.casa|";
//
// labelNativeInfo
//
this.labelNativeInfo.AutoSize = true;
this.labelNativeInfo.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.labelNativeInfo.Location = new System.Drawing.Point(142, 360);
this.labelNativeInfo.Name = "labelNativeInfo";
this.labelNativeInfo.Size = new System.Drawing.Size(143, 13);
this.labelNativeInfo.TabIndex = 10;
this.labelNativeInfo.Text = ":: Native Information ::";
this.labelNativeInfo.Visible = false;
//
// comboBoxProfile
//
this.comboBoxProfile.FormattingEnabled = true;
this.comboBoxProfile.Location = new System.Drawing.Point(261, 86);
this.comboBoxProfile.Name = "comboBoxProfile";
this.comboBoxProfile.Size = new System.Drawing.Size(107, 21);
this.comboBoxProfile.TabIndex = 11;
this.comboBoxProfile.Visible = false;
this.comboBoxProfile.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);
//
// comboBoxKeyChains
//
this.comboBoxKeyChains.FormattingEnabled = true;
this.comboBoxKeyChains.Location = new System.Drawing.Point(93, 86);
this.comboBoxKeyChains.Name = "comboBoxKeyChains";
this.comboBoxKeyChains.Size = new System.Drawing.Size(161, 21);
this.comboBoxKeyChains.TabIndex = 12;
this.comboBoxKeyChains.SelectedIndexChanged += new System.EventHandler(this.comboBoxKeyChains_SelectedIndexChanged);
//
// contextMenuStrip
//
this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.newToolStripMenuItem1,
this.viewToolStripMenuItem1,
this.toolStripSeparator7,
this.deleteToolStripMenuItem1});
this.contextMenuStrip.Name = "contextMenuStrip";
this.contextMenuStrip.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional;
this.contextMenuStrip.ShowImageMargin = false;
this.contextMenuStrip.Size = new System.Drawing.Size(92, 76);
//
// newToolStripMenuItem1
//
this.newToolStripMenuItem1.Name = "newToolStripMenuItem1";
this.newToolStripMenuItem1.Size = new System.Drawing.Size(91, 22);
this.newToolStripMenuItem1.Text = "New";
//
// viewToolStripMenuItem1
//
this.viewToolStripMenuItem1.Name = "viewToolStripMenuItem1";
this.viewToolStripMenuItem1.Size = new System.Drawing.Size(91, 22);
this.viewToolStripMenuItem1.Text = "View";
//
// toolStripSeparator7
//
this.toolStripSeparator7.Name = "toolStripSeparator7";
this.toolStripSeparator7.Size = new System.Drawing.Size(88, 6);
//
// deleteToolStripMenuItem1
//
this.deleteToolStripMenuItem1.Name = "deleteToolStripMenuItem1";
this.deleteToolStripMenuItem1.Size = new System.Drawing.Size(91, 22);
this.deleteToolStripMenuItem1.Text = "Delete";
//
// saveFileDialog
//
this.saveFileDialog.CheckFileExists = true;
//
// profilesToolStripMenuItem
//
this.profilesToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.newToolStripMenuItem2,
this.toolStripSeparator10});
this.profilesToolStripMenuItem.Name = "profilesToolStripMenuItem";
this.profilesToolStripMenuItem.Size = new System.Drawing.Size(54, 20);
this.profilesToolStripMenuItem.Text = "Profiles";
this.profilesToolStripMenuItem.Visible = false;
//
// newToolStripMenuItem2
//
this.newToolStripMenuItem2.Name = "newToolStripMenuItem2";
this.newToolStripMenuItem2.Size = new System.Drawing.Size(158, 22);
this.newToolStripMenuItem2.Text = "New";
//
// toolStripSeparator10
//
this.toolStripSeparator10.Name = "toolStripSeparator10";
this.toolStripSeparator10.Size = new System.Drawing.Size(149, 6);
//
// MiCasaForm
//
this.AcceptButton = this.button1;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoSize = true;
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.BackColor = System.Drawing.Color.Gainsboro;
this.ClientSize = new System.Drawing.Size(459, 510);
this.Controls.Add(this.comboBoxKeyChains);
this.Controls.Add(this.comboBoxProfile);
this.Controls.Add(this.labelNativeInfo);
this.Controls.Add(this.listViewNative);
this.Controls.Add(this.pictureBox2);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.label2);
this.Controls.Add(this.listBox1);
this.Controls.Add(this.button2);
this.Controls.Add(this.button3);
this.Controls.Add(this.button1);
this.Controls.Add(this.menuStrip1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MainMenuStrip = this.menuStrip1;
this.MaximizeBox = false;
this.Name = "MiCasaForm";
this.Text = "MiCasa";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MiCasaForm_FormClosing);
this.contextMenuStripNotify.ResumeLayout(false);
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
this.contextMenuStrip.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button button1;
private System.Windows.Forms.NotifyIcon notifyIcon1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.ToolTip toolTip1;
private System.Windows.Forms.ListBox listBox1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.MenuStrip menuStrip1;
private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.PictureBox pictureBox2;
private System.Windows.Forms.ListView listViewNative;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.ColumnHeader columnHeader2;
private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem newSecretToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem newKeyToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem refreshStoresToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripMenuItem lockSecretsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem unlockSecretsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem destroySecretsToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
private System.Windows.Forms.ToolStripMenuItem exportSecretsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem importSecretsToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
private System.Windows.Forms.ToolStripMenuItem quitToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem linkToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem changeMasterPasswordToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem preferencesToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem policyToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem contentsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem aboutCasaToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator6;
private System.Windows.Forms.OpenFileDialog openFileDialog1;
private System.Windows.Forms.Label labelNativeInfo;
private System.Windows.Forms.ComboBox comboBoxProfile;
private System.Windows.Forms.ComboBox comboBoxKeyChains;
private System.Windows.Forms.ContextMenuStrip contextMenuStrip;
private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem1;
private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem1;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator7;
private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem1;
private System.Windows.Forms.ContextMenuStrip contextMenuStripNotify;
private System.Windows.Forms.ToolStripMenuItem cmOpen;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator8;
private System.Windows.Forms.ToolStripMenuItem cmLock;
private System.Windows.Forms.ToolStripMenuItem cmUnlock;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator9;
private System.Windows.Forms.ToolStripMenuItem cmExit;
private System.Windows.Forms.SaveFileDialog saveFileDialog;
private System.Windows.Forms.ToolStripMenuItem profilesToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem2;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator10;
}
}

View File

@ -0,0 +1,566 @@
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Diagnostics;
using sscs.cache;
using sscs.common;
using sscs.communication;
using sscs.init;
using sscs.winforms;
namespace sscs.winforms
{
public partial class MiCasaForm : Form
{
System.Threading.Thread listeningThread;
private static Communication server;
private bool bLogging = false;
SecretStore m_ss;
private static string mSelectedKeyChainID = null;
UserIdentifier userId;
string path;
ToolStripMenuItem currSelectedMenuItem = null;
public MiCasaForm(string[] args)
{
InitializeComponent();
// get our LUID
int low = 0;
int high = 0;
string sid = "";
#if W32
UserInfo.GetLUID(ref low, ref high, ref sid);
userId = new WinUserIdentifier(low, high, sid);
#else
userId = new UnixUserIdentifier(0);
#endif
// set home directory to process path
Process proc = Process.GetCurrentProcess();
path = proc.MainModule.FileName;
path = path.Substring(0, path.LastIndexOf("\\"));
string profiledir = null;
// add profile directory if one is specified
for (int i = 0; i < args.Length; i++)
{
if (args[i].ToLower().StartsWith("/p:"))
{
profiledir = args[i].ToLower().Substring(args[i].IndexOf(":") + 1);
profiledir.Trim();
}
}
if (profiledir == null)
{
profiledir = "~home";
m_ss = SessionManager.CreateUserSession(userId);
}
else
{
// create dir for this profile.
System.IO.Directory.CreateDirectory(path + "/profile/" + profiledir);
// start session using this profile
m_ss = SessionManager.CreateUserSession(userId, path + "/profile/" + profiledir);
// enum current profiles
string[] profiles = System.IO.Directory.GetDirectories(path + "/profile");
ToolStripMenuItem[] tsmi = new ToolStripMenuItem[profiles.Length];
for (int i = 0; i < profiles.Length; i++)
{
comboBoxProfile.Items.Add(profiles[i].Substring(profiles[i].LastIndexOf("\\") + 1));
string sProfileName = profiles[i].Substring(profiles[i].LastIndexOf("\\") + 1);
tsmi[i] = new ToolStripMenuItem(sProfileName);
if (sProfileName.Equals(profiledir))
{
tsmi[i].Checked = true;
currSelectedMenuItem = tsmi[i];
//tsmi[i].CheckState = System.Windows.Forms.CheckState.Checked;
}
tsmi[i].Click += new EventHandler(MiCasaForm_Click);
}
profilesToolStripMenuItem.DropDownItems.AddRange(tsmi);
profilesToolStripMenuItem.Visible = true;
// add submenus
//this.profilesToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
//this.defaultToolStripMenuItem,
//this.newToolStripMenuItem2});
}
if (WinCommon.VerifyMasterPassword(m_ss, "Enter your Master Password for:"+profiledir))
{
server = CommunicationFactory.CreateCommunicationEndPoint();
listeningThread = new Thread(new ThreadStart(StartServer));
listeningThread.Start();
button1.Text = "Stop";
EnumKeyChains();
}
}
void MiCasaForm_Click(object sender, EventArgs e)
{
// uncheck cur
if (currSelectedMenuItem != null)
{
currSelectedMenuItem.Checked = false;
}
currSelectedMenuItem = (ToolStripMenuItem)sender;
currSelectedMenuItem.Checked = true;
string profiledir = currSelectedMenuItem.Text;
if (m_ss != null)
{
SessionManager.RemoveUserSession(userId, true);
}
// start session using this profile
m_ss = SessionManager.CreateUserSession(userId, path + "/profile/" + profiledir);
// set master password
string sPassword = WinCommon.GetMasterPasswordFromUser(m_ss, true, "Enter your Master Password for:" + profiledir);
if (sPassword == null)
{
currSelectedMenuItem.Checked = false;
}
mSelectedKeyChainID = null;
RefreshStore();
}
private static void StartServer()
{
server.StartCommunicationEndPoint();
}
private void button1_Click(object sender, EventArgs e)
{
if (server == null)
{
button1.Text = "starting server";
server = CommunicationFactory.CreateCommunicationEndPoint();
listeningThread = new Thread(new ThreadStart(StartServer));
listeningThread.Start();
button1.Text = "Stop";
}
else
{
server.CloseCommunicationEndPoint();
listeningThread.Abort();
StopMicasa();
}
//Application.Exit();
}
private void StopMicasa()
{
// kill all running versions of CASA manager
System.Diagnostics.Process[] proc = System.Diagnostics.Process.GetProcessesByName("CASAManager");
for (int i = 0; i < proc.Length; i++)
{
try
{
proc[i].Kill();
}
catch { }
}
notifyIcon1.Dispose();
System.Diagnostics.Process curProc = System.Diagnostics.Process.GetCurrentProcess();
curProc.Kill();
}
private void MiCasaForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (server != null)
{
server.CloseCommunicationEndPoint();
listeningThread.Abort();
listeningThread = null;
server = null;
}
StopMicasa();
}
private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
if (!listBox1.Visible)
{
listBox1.Visible = true;
listViewNative.Visible = true;
labelNativeInfo.Visible = true;
//button3.Visible = true;
button2.Text = "<<";
RefreshStore();
}
else
{
listBox1.Visible = false;
listViewNative.Visible = false;
labelNativeInfo.Visible = false;
button3.Visible = false;
button2.Text = ">>";
}
}
private void button3_Click(object sender, EventArgs e)
{
listBox1.Items.Add("-----------------------");
if (!bLogging)
{
//DebugStream ds = new DebugStream(listBox1);
//Debug.Listeners.Add(new TextWriterTraceListener(ds));
listBox1.Items.Add("Logging started");
button3.Text = "Stop logging";
}
else
{
listBox1.Items.Add("Logging stopped");
button3.Text = "Start logging";
}
listBox1.Items.Add("-----------------------");
bLogging = !bLogging;
}
private void RefreshStore()
{
listBox1.Items.Clear();
if (!m_ss.IsStoreLocked())
{
KeyChain kc;
if (mSelectedKeyChainID == null)
{
kc = m_ss.GetKeyChainDefault(true);
}
else
{
kc = m_ss.GetKeyChain(mSelectedKeyChainID);
}
EnumKeyChains();
IDictionaryEnumerator etor1 = (IDictionaryEnumerator)kc.GetAllSecrets();
while (etor1.MoveNext())
{
string sID = (string)etor1.Key;
listBox1.Items.Add((sID));
}
}
}
private void EnumKeyChains()
{
// clear current list
comboBoxKeyChains.Items.Clear();
// display keychain IDs
IDictionaryEnumerator etor = (IDictionaryEnumerator)m_ss.GetKeyChainEnumerator();
while (etor.MoveNext())
{
//keyChainIds.Append((string)etor.Key,0,(((string)(etor.Key)).Length)-1);
comboBoxKeyChains.Items.Add((string)etor.Key);
}
}
private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{
Console.WriteLine(listBox1.SelectedItem);
// show the Edit Form
EditSecretForm esf = new EditSecretForm();
esf.SetID(m_ss, mSelectedKeyChainID, listBox1.SelectedItem.ToString());
esf.Show();
}
private void listBox1_MouseClick(object sender, MouseEventArgs e)
{
// show native info
listViewNative.Clear();
string[] info = new string[2];
info[0] = "Created:" + DateTime.Now.ToLongTimeString();
info[1] = DateTime.Now.ToShortTimeString();
ListViewItem item = new ListViewItem(info);
listViewNative.Items.Add(item);
}
private void refreshStoresToolStripMenuItem_Click(object sender, EventArgs e)
{
RefreshStore();
}
private void lockSecretsToolStripMenuItem_Click(object sender, EventArgs e)
{
m_ss.LockStore();
SetupGUI(true);
RefreshStore();
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox cb = (ComboBox)sender;
string profiledir = (string)cb.SelectedItem;
// create dir for this profile.
//System.IO.Directory.CreateDirectory(path + "/profile/" + profiledir);
if (m_ss != null)
{
SessionManager.RemoveUserSession(userId, true);
}
// start session using this profile
m_ss = SessionManager.CreateUserSession(userId, path + "/profile/" + profiledir);
// set master password
WinCommon.GetMasterPasswordFromUser(m_ss, true, "Enter your Master Password for:" + profiledir);
mSelectedKeyChainID = null;
RefreshStore();
}
private void comboBoxKeyChains_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox cb = (ComboBox)sender;
string keychainID = (string)cb.SelectedItem;
if (keychainID != null)
{
mSelectedKeyChainID = keychainID;
RefreshStore();
}
}
private void listBox1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
Point p = this.Location;
p.Offset(e.Location.X + 10, e.Location.Y + 150);
contextMenuStrip.Show(p);
}
}
private void cmLock_Click(object sender, EventArgs e)
{
m_ss.LockStore();
RefreshStore();
}
private void cmExit_Click(object sender, EventArgs e)
{
}
private void cmOpen_Click(object sender, EventArgs e)
{
}
private void exportSecretsToolStripMenuItem_Click(object sender, EventArgs e)
{
// open a verify master password form
byte[] baIV = null;
string sMasterPassword = WinCommon.GetMasterPasswordFromUser(m_ss, true, null);
if (sMasterPassword != null)
{
saveFileDialog.InitialDirectory = @"c:\";
try
{
saveFileDialog.FileName = "";
saveFileDialog.DefaultExt = "casa";
saveFileDialog.ShowDialog();
string sFilePath = saveFileDialog.FileName;
if (sFilePath != null)
{
// save it
byte[] baSecrets = m_ss.GetSecrets(sMasterPassword, ref baIV);
// write em out
FileStream fs = new FileStream(sFilePath, FileMode.Create);
// if a IV was set, write it out.
if (baIV != null)
{
fs.Write(baIV, 0, 16);
}
// write the secrets now
fs.Write(baSecrets, 0, baSecrets.Length);
fs.Flush();
fs.Close();
}
}
catch (Exception e1)
{
}
}
}
private void importSecretsToolStripMenuItem_Click(object sender, EventArgs e)
{
byte[] baIV = new byte[16];
byte[] baXMLSecrets = null;
openFileDialog1.InitialDirectory = @"c:\";
try
{
openFileDialog1.FileName = "";
openFileDialog1.DefaultExt = "casa";
openFileDialog1.ShowDialog();
string sFilePath = openFileDialog1.FileName;
if (sFilePath != null && sFilePath.Length > 0)
{
string sMasterPassword = WinCommon.GetMasterPasswordFromUser(m_ss, false, "Enter Master Password that Encypts this file");
// let's read it
FileStream fs = new FileStream(sFilePath, FileMode.Open);
int iBytes = 0;
// if a master password was sent, read the first 16 bytes as IV.
if (sMasterPassword != null)
{
baXMLSecrets = new byte[fs.Length - 16];
iBytes = fs.Read(baIV, 0, 16);
iBytes = fs.Read(baXMLSecrets, 0, (int)fs.Length - 16);
}
else
{
baXMLSecrets = new byte[fs.Length];
iBytes = fs.Read(baXMLSecrets, 0, (int)fs.Length);
}
fs.Flush();
fs.Close();
m_ss.MergeXMLSecrets(baXMLSecrets, sMasterPassword, baIV);
RefreshStore();
}
}
catch (Exception e1)
{
Console.WriteLine(e1.ToString());
}
}
private void destroySecretsToolStripMenuItem_Click(object sender, EventArgs e)
{
// get the current keychain
KeyChain kc;
if (mSelectedKeyChainID != null)
{
kc = m_ss.GetKeyChain(mSelectedKeyChainID);
}
else
{
kc = m_ss.GetKeyChainDefault();
}
if (kc != null)
{
kc.RemoveAllSecrets();
RefreshStore();
}
}
private void unlockSecretsToolStripMenuItem_Click(object sender, EventArgs e)
{
string sMasterPassword = WinCommon.GetMasterPasswordFromUser(m_ss, true, "Enter your Master Password to unlock your secrets");
if (sMasterPassword != null)
{
m_ss.UnlockStore(null, sMasterPassword);
SetupGUI(false);
RefreshStore();
}
}
private void SetupGUI(bool bLock)
{
newToolStripMenuItem.Enabled = !bLock;
newSecretToolStripMenuItem.Enabled = !bLock;
refreshStoresToolStripMenuItem.Enabled = !bLock;
lockSecretsToolStripMenuItem.Enabled = !bLock;
unlockSecretsToolStripMenuItem.Enabled = bLock;
destroySecretsToolStripMenuItem.Enabled = !bLock;
importSecretsToolStripMenuItem.Enabled = !bLock;
exportSecretsToolStripMenuItem.Enabled = !bLock;
editToolStripMenuItem.Enabled = !bLock;
optionsToolStripMenuItem.Enabled = !bLock;
listBox1.Enabled = !bLock;
comboBoxKeyChains.Enabled = !bLock;
comboBoxProfile.Enabled = !bLock;
}
private void quitToolStripMenuItem_Click(object sender, EventArgs e)
{
server.CloseCommunicationEndPoint();
listeningThread.Abort();
StopMicasa();
}
private void changeMasterPasswordToolStripMenuItem_Click(object sender, EventArgs e)
{
ChangeMasterPasswordForm cmp = new ChangeMasterPasswordForm();
cmp.SetSecretStore(m_ss);
cmp.ShowDialog();
/*
// verify current password
string sCurPassword = WinCommon.GetMasterPasswordFromUser(m_ss, true, "Enter current Master Password");
if (sCurPassword != null && sCurPassword.Length > 0)
{
string sNewPassword = WinCommon.GetMasterPasswordFromUser(m_ss, false, "Enter a new Master Password");
if (sNewPassword != null && sNewPassword.Length > 0)
{
m_ss.ChangeMasterPassword(sCurPassword, sNewPassword);
}
}
*/
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,100 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using sscs.cache;
using sscs.winforms;
namespace sscs.winforms
{
class WinCommon
{
private static bool m_bVerify = true;
private static bool m_bIsVerifing = true;
private static bool m_bIsValid = false;
private static string m_sMasterPassword;
private static SecretStore m_ss;
private static MasterPasswordForm mp;
private static string VerifyAndReturnMasterPassword(SecretStore ss)
{
if (VerifyMasterPassword(ss, null))
{
return m_sMasterPassword;
}
else
{
return null;
}
}
public static string GetMasterPasswordFromUser(SecretStore ss, bool bVerify, string sDecription)
{
m_sMasterPassword = null;
m_bVerify = bVerify;
VerifyMasterPassword(ss, sDecription);
return m_sMasterPassword;
}
public static bool VerifyMasterPassword(SecretStore ss, string sDecription)
{
m_bIsVerifing = true;
m_ss = ss;
// open the form
mp = new MasterPasswordForm(sDecription);
mp.MasterPasswordVerified += new MasterPasswordEventHandler(mp_MasterPasswordVerified);
mp.Show();
Console.WriteLine();
while (m_bIsVerifing)
{
System.Windows.Forms.Application.DoEvents();
System.Threading.Thread.Sleep(100);
}
mp.Dispose();
return m_bIsValid;
}
static void mp_MasterPasswordVerified(string sMasterPassword, bool bIsValid)
{
//Console.WriteLine(sMasterPassword);
if (sMasterPassword != null)
{
if (sMasterPassword.Length < 8)
{
mp.SetErrorMessage("Master Password must be a least 8 characters");
return;
}
if (m_bVerify)
{
if (m_ss.SetMasterPassword(sMasterPassword))
{
m_sMasterPassword = sMasterPassword;
m_bIsValid = true;
m_bIsVerifing = false;
}
else
{
mp.SetErrorMessage("Master Password not correct");
}
}
else
{
m_sMasterPassword = sMasterPassword;
m_bIsVerifing = false;
}
}
else
{
m_bIsValid = false;
m_bIsVerifing = false;
}
}
}
}