基线 SVN r240

SVN-Revision: r240
This commit is contained in:
cyf
2025-02-06 06:46:06 +00:00
commit ab56a9bcf7
5317 changed files with 902274 additions and 0 deletions
+185
View File
@@ -0,0 +1,185 @@
/***********************
* 说明:visio 事件处理类
* 创建人:姜棚
* 创建日期:
* 修改人:
* 修改日期:
* 修改备注:
* 版本:1.0.0.0
***********************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Visio;
using System.Runtime.InteropServices;
namespace Lskj.Visio
{
[ComVisible(true)]
public sealed class EventSink : IVisEventProc
{
private int alertResponse;
public Document eventDocument; //Visio文档对象
private Application eventApplication; //Visio应用程序对象
public delegate void VisioEventHandler(object sender, EventArgs e);
public event VisioEventHandler OnTextEdit; //文本编辑事件
private const short visEvtAdd = -32768;
public EventSink()
{
}
[CLSCompliant(false)]
public void AddAdvise(Application callingApplication, Document callingDocument)
{
// 保存应用程序对象,方便设置事件处理
eventApplication = callingApplication;
// 缓存AlertResponse 对象的值
alertResponse = callingApplication.AlertResponse;
// 保存文档对象,方便设置事件处理
eventDocument = callingDocument;
setAddAdvise();
return;
}
/// <summary>
/// 添加事件参数
/// </summary>
/// <param name="eventCode"></param>
/// <param name="description"></param>
private void addEventDescription(
short eventCode,
string description)
{
string key = Convert.ToString(eventCode,
System.Globalization.CultureInfo.InvariantCulture);
eventDescriptions.Add(key, description);
}
private System.Collections.Specialized.StringDictionary eventDescriptions;
/// <summary>
/// 每次事件调用函数
/// </summary>
/// <param name="eventCode"></param>
/// <param name="source"></param>
/// <param name="eventId"></param>
/// <param name="eventSequenceNumber"></param>
/// <param name="subject"></param>
/// <param name="moreInfo"></param>
/// <returns></returns>
public object VisEventProc(short eventCode, object source, int eventId,
int eventSequenceNumber, object subject, object moreInfo)
{
Application eventProcApplication = null;
Document eventProcDocument = null;
Shape eventShape = null;
Selection subjectSelection = null;
object result = null;
// 获得传递过来的应用程序对象或者文档对象
if (source is IVApplication)
{
eventProcApplication = (Microsoft.Office.Interop.Visio.Application)source;
}
else if (source is IVDocument)
{
eventProcDocument = (Document)source;
}
// 检查每个事件代码是否被处理了。事件代码是对象和事件动作的联合对象。
// 仅当事件在SetAddAdvise方法里面增加后,事件会被发送到这里进行处理。
switch (eventCode)
{
case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
visEvtDoc + (short)Microsoft.Office.Interop.Visio.
VisEventCodes.visEvtDel:
break;
case (short)Microsoft.Office.Interop.Visio.VisEventCodes.
visEvtShape + (short)Microsoft.Office.Interop.Visio.
VisEventCodes.visEvtDel:
break;
// 形状Text 改变事件
case (short)Microsoft.Office.Interop.Visio.VisEventCodes.visEvtCodeShapeBeforeTextEdit:
eventShape = (Shape)subject;
handleShapeExitTextEdit(eventShape);
break;
case (short)Microsoft.Office.Interop.Visio.VisEventCodes.visEvtCodeShapeExitTextEdit:
eventShape = (Shape)subject;
handleShapeExitTextEdit(eventShape);
break;
default:
break;
}
return result;
}
/// <summary>
/// 查看是否包含指定的事件
/// </summary>
private bool IsContainEvent(EventList eventList, string eventTargetArgs)
{
foreach (Event oneEvent in eventList)
{
if (oneEvent.TargetArgs == eventTargetArgs)
{
return true;
}
}
return false;
}
/// <summary>
/// 要添加事件就往这里加
/// </summary>
private void setAddAdvise()
{
const string sink = "";
Event newEvent = null;
EventList applicationEvents = eventApplication.EventList;
EventList documentEvents = eventDocument.EventList;
// Add the BeforeShapeDelete event.
//AddAdvise(生成通知的事件,对对象上接收事件通知的 COM 接口的引用,可传参数,可传参数);
documentEvents.AddAdvise(((short)Microsoft.Office.Interop.Visio.
VisEventCodes.visEvtDel + (short)Microsoft.Office.Interop.
Visio.VisEventCodes.visEvtShape),
this, "", "");
// Add the PageAdded event.
documentEvents.AddAdvise((short)Microsoft.Office.Interop.Visio.
VisEventCodes.visEvtPage + visEvtAdd,
this, "", "");
// Add the ShapeAdded event.
documentEvents.AddAdvise((short)Microsoft.Office.Interop.Visio.
VisEventCodes.visEvtShape + visEvtAdd,
this, "", "");
applicationEvents.AddAdvise((short)Microsoft.Office.Interop.Visio.VisEventCodes.visEvtCodeShapeExitTextEdit, this, "", "");
}
/// <summary>
/// 该方法在形状添加后触发调用。
/// 形状对象已经存在,因此可以在后续使用进行引用处理。
/// 形状添加的实际处理过程,是在所有Visio事件处理完毕后进行。
/// </summary>
/// <param name="addedShape">待添加的形状对象</param>
/// <summary>
/// 形状文本退出修改的事件处理
/// </summary>
/// <param name="shape">形状对象</param>
private void handleShapeExitTextEdit(Shape shape)
{
if (OnTextEdit != null)
{
OnTextEdit(shape, new EventArgs());
}
}
}
}
+89
View File
@@ -0,0 +1,89 @@
namespace Lskj.Visio
{
partial class FrmMain
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows
/// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmMain));
this.panel1 = new System.Windows.Forms.Panel();
this.button1 = new System.Windows.Forms.Button();
this.axDrawingControl1 = new AxMicrosoft.Office.Interop.VisOcx.AxDrawingControl();
this.panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.axDrawingControl1)).BeginInit();
this.SuspendLayout();
//
// panel1
//
this.panel1.Controls.Add(this.button1);
this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(793, 100);
this.panel1.TabIndex = 2;
//
// button1
//
this.button1.Location = new System.Drawing.Point(40, 40);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(98, 23);
this.button1.TabIndex = 0;
this.button1.Text = "测试提取shape";
this.button1.UseVisualStyleBackColor = true;
//
// axDrawingControl1
//
this.axDrawingControl1.Dock = System.Windows.Forms.DockStyle.Fill;
this.axDrawingControl1.Enabled = true;
this.axDrawingControl1.Location = new System.Drawing.Point(0, 100);
this.axDrawingControl1.Name = "axDrawingControl1";
this.axDrawingControl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axDrawingControl1.OcxState")));
this.axDrawingControl1.Size = new System.Drawing.Size(793, 459);
this.axDrawingControl1.TabIndex = 3;
//
// FrmMain
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(793, 559);
this.Controls.Add(this.axDrawingControl1);
this.Controls.Add(this.panel1);
this.Name = "FrmMain";
this.Text = "Form1";
this.panel1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.axDrawingControl1)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Button button1;
private AxMicrosoft.Office.Interop.VisOcx.AxDrawingControl axDrawingControl1;
}
}
+182
View File
@@ -0,0 +1,182 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Office.Interop.Visio;
using AxMicrosoft.Office.Interop.VisOcx;
namespace Lskj.Visio
{
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
}
/// <summary>
/// 模块类
/// </summary>
private class MouduleClass
{
public string MouduleId;//模块Id
public string MouduleName;//模块名称
public string MouduleDll; //模块绑定dll
}
/// <summary>
/// 连接形状(暂未用)
/// </summary>
/// <param name="shape1"></param>
/// <param name="shape2"></param>
/// <param name="connector"></param>
private static void ConnectShapes(Microsoft.Office.Interop.Visio.Shape shape1, Microsoft.Office.Interop.Visio.Shape shape2, Microsoft.Office.Interop.Visio.Shape connector)
{
Cell beginXCell = connector.get_CellsSRC(
(short)Microsoft.Office.Interop.Visio.VisSectionIndices.visSectionObject,
(short)Microsoft.Office.Interop.Visio.VisRowIndices.visRowXForm1D,
(short)Microsoft.Office.Interop.Visio.VisCellIndices.vis1DBeginX);
beginXCell.GlueTo(shape1.get_CellsSRC(
(short)Microsoft.Office.Interop.Visio.VisSectionIndices.visSectionObject,
(short)Microsoft.Office.Interop.Visio.VisRowIndices.visRowXFormOut,
(short)Microsoft.Office.Interop.Visio.VisCellIndices.visXFormPinX));
Cell endXCell = connector.get_CellsSRC(
(short)Microsoft.Office.Interop.Visio.VisSectionIndices.visSectionObject,
(short)Microsoft.Office.Interop.Visio.VisRowIndices.visRowXForm1D,
(short)Microsoft.Office.Interop.Visio.VisCellIndices.vis1DEndX);
endXCell.GlueTo(shape2.get_CellsSRC(
(short)Microsoft.Office.Interop.Visio.VisSectionIndices.visSectionObject,
(short)Microsoft.Office.Interop.Visio.VisRowIndices.visRowXFormOut,
(short)Microsoft.Office.Interop.Visio.VisCellIndices.visXFormPinX));
}
protected override void OnLoad(EventArgs e)
{
//axDrawingControl1.Window.Zoom = 0.5; //设置缩放比例
axDrawingControl1.Window.ShowScrollBars = (short)Microsoft.Office.Interop.Visio.VisScrollbarStates.visScrollBarBoth; //滚动条属性
axDrawingControl1.Window.ShowRulers = 100;//标尺
axDrawingControl1.Window.BackgroundColor = (uint)ColorTranslator.ToOle(System.Drawing.Color.White);
axDrawingControl1.Window.BackgroundColorGradient = (uint)ColorTranslator.ToOle(System.Drawing.Color.White);
axDrawingControl1.Window.ZoomBehavior = Microsoft.Office.Interop.Visio.VisZoomBehavior.visZoomVisio;
axDrawingControl1.Window.ShowPageTabs = false;
//visio 的内容是从1开始的
Microsoft.Office.Interop.Visio.Page currentPage = axDrawingControl1.Document.Pages[1];
//通过 openEx打开模板
Microsoft.Office.Interop.Visio.Document currentStencil = axDrawingControl1.Document.Application.Documents.OpenEx("D:\\ERP_CS_New\\插件库\\Lskj.Visio\\系统模块模型.vss",
(short)Microsoft.Office.Interop.Visio.VisOpenSaveArgs.visOpenDocked); //默认模具
Microsoft.Office.Interop.Visio.Shape connector = currentPage.Drop(currentStencil.Masters["连接"], 4.50, 5.50);
connector.Delete();
var targetApplication = (Microsoft.Office.Interop.Visio.Application)axDrawingControl1.Window.Application;
EventSink visioEventSink = new EventSink();
visioEventSink.AddAdvise(targetApplication, currentStencil);
visioEventSink.OnTextEdit += new Lskj.Visio.EventSink.VisioEventHandler(ShapeExitedTextEdit);
//通过实验发现用软件默认能添加箭头,是因为模版,对于没模版只有通过创建一次
}
private void button1_Click(object sender, EventArgs e)
{
Microsoft.Office.Interop.Visio.Page currentPage = axDrawingControl1.Document.Pages[1];
int i = 0;
List<MouduleClass> moudules = new List<MouduleClass>();
//连接组合
List<ConnectShape> shapeConnects = new List<ConnectShape>();
foreach (Shape sp in currentPage.Shapes)
{
string strShapes = ";";
//找连接线
if (sp.FillStyle == "Connector")
{
foreach (Connect connect in sp.Connects)
{
//获取连接组合
strShapes += GetConnectShape(sp, connect.ToSheet);
}
string[] shapes = strShapes.Split(';');
ConnectShape con = new ConnectShape();
//连接线起始图形
con.StartShape = currentPage.Shapes.get_ItemFromID(Convert.ToInt32(shapes[1]));
//连接到的图形
if (!string.IsNullOrEmpty(shapes[2])) con.EndShape = currentPage.Shapes.get_ItemFromID(Convert.ToInt32(shapes[2]));
shapeConnects.Add(con);
}
if (sp.FillStyle == "基本")
{
//sp.ShapeExitedTextEdit += new EShape_ShapeExitedTextEditEventHandler(ShapeExitedTextEdit);
Cell cell1 = sp.get_CellsSRC((short)VisSectionIndices.visSectionProp, (short)0, (short)0);
Cell cell2 = sp.get_CellsSRC((short)VisSectionIndices.visSectionProp, (short)1, (short)0);
//字段属性
Cell cell3 = sp.get_CellsSRC((short)VisSectionIndices.visSectionProp, (short)2, (short)0);
MouduleClass moudule = new MouduleClass();
moudule.MouduleId = FormulaToString(cell1.Formula);
moudule.MouduleName = FormulaToString(cell2.Formula);
moudule.MouduleDll = FormulaToString(cell3.Formula);
moudules.Add(moudule);
}
}
}
/// <summary>
/// 修改模块名称事件
/// </summary>
/// <param name="shape"></param>
private void ShapeExitedTextEdit(object sender, EventArgs e)
{
Shape shapeItem = sender as Shape;
Cell cell = shapeItem.get_CellsSRC((short)VisSectionIndices.visSectionProp, (short)1, (short)0);
cell.FormulaU = "\"" + shapeItem.Text + "\"";
}
//Cell.Formula默认带两个双引号和杠,进行格式化处理
private string FormulaToString(string formula)
{
string Formula = string.Empty;
const string flag = "\"";
if (formula.Contains(flag))
{
Formula = formula.Replace(flag, "");
}
return Formula;
}
/// <summary>
/// 连接组合ID
/// </summary>
/// <param name="shape"></param>
/// <param name="toFromSheet"></param>
/// <returns></returns>
private string GetConnectShape(Shape shape, Shape toFromSheet)
{
string strShapes = string.Empty;
if (toFromSheet != null)
{
if (shape.ID != toFromSheet.ID)
{
strShapes += string.Format("{0};", toFromSheet.ID);
}
}
return strShapes;
}
//连接组合 连接线先后
public class ConnectShape
{
//起始图形
public Shape StartShape;
//连接到的图形
public Shape EndShape;
}
}
}
+446
View File
@@ -0,0 +1,446 @@
<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="axDrawingControl1.OcxState" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACFTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5BeEhvc3QrU3RhdGUBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAt0oAAAIB
AAAAAQAAAAAVAAAAVmlzT2N4LkRyYXdpbmdDb250cm9sAAAAAI1KAAAewP7aHsD+2qNfYeSwI3ZJvT7W
Ed2+Mw4OAAAAAAAAAPobAACIEwAA/UYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0M8R4KGxGuEAAAAAAAAA
AAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAEAAAAwAAAAEAAAD+////AAAA
AAAAAAD/////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////9////AgAAABMAAAD+////BQAAABQAAAD/////////////////////////
/////////////////////////////////////////////v///xUAAAD+////FwAAABgAAAAZAAAAGgAA
ABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAA/v//////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////1IAbwBvAHQAIABF
AG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAUA////
//////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBW1Kg70dMBBAAAAEAGAAAAAAAAVgBp
AHMATwBjAHgALgBEAHIAYQB3AGkAbgBnAEMAbwBuAHQAcgBvAGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ACwAAQEDAAAA/////wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANCjqgk70dMBQFbUqDvR0wEAAAAAAAAA
AAAAAABQAHIAbwBwAGUAcgB0AGkAZQBzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAFgACAf///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAyAgAAAAAAAFYAaQBzAGkAbwAuAEQAcgBhAHcAaQBuAGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAcAAEA//////////8JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQo6oJO9HT
AUBW1Kg70dMBAAAAAAAAAAAAAAAAAgBPAGwAZQBQAHIAZQBzADAAMAAwAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAgEFAAAACgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAXAAAAdgAAAAAAAAABAEMAbwBtAHAATwBiAGoAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgACAP///////////////wAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAABfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////AAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v////0YAAAAAAAABQBTAHUAbQBtAGEAcgB5
AEkAbgBmAG8AcgBtAGEAdABpAG8AbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgH/////CAAA
AP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAA8AAAAAAAAAABAAAAAgAA
AAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAP7///8KAAAA/v///wwAAAANAAAADgAAAP7///8QAAAAEQAA
ABIAAAATAAAAFAAAABUAAAD+/////v///xgAAAD+////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////zwARAByAGEAdwBpAG4AZwBDAG8AbgB0AHIAbwBsAFAAcgBv
AHAAZQByAHQAaQBlAHMAPgANAAoAPABOAGUAZwBvAHQAaQBhAHQAZQBNAGUAbgB1AHMAIABjAGMAaABM
AGUAbgBnAHQAaAA9ACcAMQAnAD4AMQA8AC8ATgBlAGcAbwB0AGkAYQB0AGUATQBlAG4AdQBzAD4ADQAK
ADwATgBlAGcAbwB0AGkAYQB0AGUAVABvAG8AbABiAGEAcgBzACAAYwBjAGgATABlAG4AZwB0AGgAPQAn
ADEAJwA+ADEAPAAvAE4AZQBnAG8AdABpAGEAdABlAFQAbwBvAGwAYgBhAHIAcwA+AA0ACgA8AFAAYQBn
AGUAUwBpAHoAaQBuAGcAQgBlAGgAYQB2AGkAbwByACAAYwBjAGgATABlAG4AZwB0AGgAPQAnADEAJwA+
ADEAPAAvAFAAYQBnAGUAUwBpAHoAaQBuAGcAQgBlAGgAYQB2AGkAbwByAD4ADQAKADwASABvAHMAdABJ
AEQAIABjAGMAaABMAGUAbgBnAHQAaAA9ACcAMAAnAD4APAAvAEgAbwBzAHQASQBEAD4ADQAKADwAUwBy
AGMAIABjAGMAaABMAGUAbgBnAHQAaAA9ACcAMAAnAD4APAAvAFMAcgBjAD4ADQAKADwALwBEAHIAYQB3
AGkAbgBnAEMAbwBuAHQAcgBvAGwAUAByAG8AcABlAHIAdABpAGUAcwA+AA0ACgAAAAAAAAAAAAAAAAAA
AAEA/v8DCgAA/////wAAAAAAAAAAAAAAAAAAAAAVAAAATWljcm9zb2Z0IFZpc2lvILvmzbwAEgAAAFZp
c2lvIDExLjAgU2hhcGVzAAAAAAD0ObJxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAA/v8AAAYCAgAAAAAAAAAAAAAAAAAAAAAAAQAAAOCFn/L5T2gQq5EIACsns9kwAAAAwAAA
AAkAAAABAAAAUAAAAAIAAABYAAAAAwAAAGQAAAAEAAAAcAAAAAUAAACAAAAABgAAAIwAAAAHAAAAmAAA
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
/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAD9GAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////
////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAEA
AOQAAAALAAAAAQAAAGAAAAACAAAAaAAAAA4AAAB0AAAADwAAAIAAAAAXAAAAjAAAAAsAAACUAAAAEAAA
AJwAAAATAAAApAAAABYAAACsAAAADQAAALQAAAAMAAAAyAAAAAIAAACoAwAAHgAAAAQAAAAAAAAAHgAA
AAQAAAAAAAAAHgAAAAQAAAAAAAAAAwAAAAAADgALAAAAAAAAAAsAAAAAAAAACwAAAAAAAAALAAAAAAAA
AB4QAAABAAAACAAAANKzLTEARVJODBAAAAIAAAAeAAAABAAAANKzAAADAAAAAQAAAIAAAAAEAAAAAAAA
ACgAAAABAAAAYAAAAAIAAABoAAAAAwAAAHQAAAACAAAAAgAAAA4AAABfUElEX0xJTktCQVNFAAMAAAAV
AAAAX1ZQSURfQUxURVJOQVRFTkFNRVMAAAIAAACoAwAAQQAAAAIAAAAAAAAAHgAAAAQAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v8AAAQAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8DAAAABAAAAAEAAAD/////AAAAAAAAAAB/NwAACiAA
ADQAAAABAAkAAAMaAAAAAAAFAAAAAAAEAAAAAwEIAAUAAAALAgAAAAAFAAAADALvEfseAwAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAATkFOSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AFZpc2lvIChUTSkgRHJhd2luZw0KAAAAAAAACwD9GAAAAIQBABQAAABU0dNBrxcAAE4BAABSAAAAAAAA
AAAAAAAAAAAAAwAAAAQIAACnE0R2ph4Rdzh7RXb/////BAAAACTBcwAgAAAAAAAAAAIAAADgdmxHf3tF
dnTBcwDTt4y67WTq8QMY6fL///+DAP/28v/z+/AHAfjxAImA6vEWBIAWACAAGQCA/wDAwMAA5ubm/wDN
zc0As7Oz7wCampohAIAAZv9mZgBNTU0AM38zMwAaGhoAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVRrr8P/y8Abr8Bzo86D6
9AcP6/D28eb1Suf0BDrr8ETr8AEAVDUB6POA8vFJD1sP8vHg+zEB5vVo6uf0D+vwVOvwAgBUhRjr8Dzf
/JQBlAHm9QGumQIAAAMuBAUaBAeq6/AI6/AJ6/AK6/ALquvwDOvwDevwDuf0k3rj+C7IAlUBAQHCAX7n
AQIAYgEA/hkS5QEfFgIfEeMBAgNhSwD+6vGFwATq8ZkME1swVVgShT++A0Dm9YrHAQJHExCZAlcWIhUA
5CsZehIDZhYiEwRiAqohFAWQFgaQFgeQFghMtBF6EgkhpRbq8YbEBALq8QPDAA8RbwZIEwckXxMaGylQ
4PvwPxYfjxwZEkUDkBYEHxa9EnoSBuYXinoSB4YsCIYs5RgZEgpSfCYLHiadEwzQLA0wJlqdEw7mFPA/
PxKHyATg6xUPEB4vKj9IEz+5XP8ul8vl4j8gABsA4PLw70ELD7oKeRQq0CwB0CwC0CwD0CdsL0B+JUs2
jyRUNtUVkRUJkBYUxSjmG6B9COAME2Y/wQMAGRSRFY8ZkRVnKZEVvR/PG6j4P8UiGRILkBYMkBYNqpAW
DpAWD5AWEJAWEUqQFhKQFhOQEerxpNAE0urxMwEj4vn9bwIECJA5UzsjPTo3EgA9EDcSAaJgVQJgVTwR
NxIEYFUFCmBVBmBVBz0Qnk+wTtVPnOdE6wECEGCqETcSEapgVRJgVRNgVRRgVRWqYFUWYFUXYFUYn1UZ
XpAWGmIECN1TG+RSKnoSHAA7hBoIETBPSBUDAKPYBCUFDxA5UZ9pbDtS3lIA5FLeUgHDZwLDZwkD5FLq
8afcBGxoOVG7atLq8bfgBOrx9wwTICAYZhYqf2YWCAg8f1l/QSeBICEWfnCdM6QXnh16EgQ6kXwFpBwG
YgiSRtJwVKAjkXwJkXwKkXwLpBfS6vG95ATq8bFxafA/D4gTiBM4T248GReNM6rmFODfNAJzjAOGLASC
hiwFhiyFL6Ubp1Lq8b4U6ATq8VEMFAIdCViPIBeEtRBsXQF9VTuUjFHq8b8A7AQtAidfcZ9HFVpfbF9+
XwCQX6JfsE/CT8Rf5k/4TwpZqhkSFJAWFZAWFhJVwOTwBOrx+mCYwwFATCa/k8lkMrk/iq3JpJuoTDPS
raiLrnNYEuUA0aZzn/OvgZ+Tn6Wft5/Jn4Dbn+2f/5EgFQuvHaR6EhCUwKadExGvvBKcpp0TE1LPvBSu
pp0TFe+8Fq+8TRevvBgg0qWdExkvx1Q7ZJEVG5AWHJAWHZAWZR4SVcj0CBo70D+SzzCkxkVbPyHDAAEJ
j2bDAQJ9OtDfNJI158WiNefFsjWA58WihQcwrYoHMIpEIBUHqjMWCBe1CRe1Che1C7pWtRAfFhFiCTam
BwI+E2nABMMB+vGcBIAJvwUUg2bn9JTj+FRglx5VeBDFJ38VxeGpHlIANb8wIt3+BPFlgmcZFAVWT2hP
AHpDKt+MRZAj89ZN31/fNhNVDBe1DRe1Dhe1Dz0QUKmzFea4tLYsM0DmNJAWJTV8JjYM5iITOUFh6vGh
asQEnN+u39/8leP4OFhglzM/lfYhM6jy8xTnAhXmAThUC+fhr+X/cj+EPyCWP6g4p/aqdOTsBeTnOt4C
21UI5FJjvw1MKfDaLYu3QvVhaw80Qv9U/xjsiPzYQnBpAU1IlGWY0W8RRLhiAVQzEfNjAXBGHwFwEjFY
HUgZ6/gV9WFoWJX2YCjRB6AK0Rvq2AwrFRI1k/zYLgL4hAHGwkQuSyVdIiy29WElhYBoLTCD89SFvcRr
dqI+8QJdiFPi9WGGexhHAPiErG2sY5X/8Ca+x0ssDjkBsBs/zi8b6Us/7P/1/wcPABkPpT+3On1KNvWY
39oP7A9AdPoWIYX/l/+p/+fW/sX/ABtPLU8Pmo9ClGU+9TMfc08gVx9pH6c8ihW8ISSMN1eVAOjVvCGb
SSsVzR/fH/EfAy8AFS8nLzkvSy9dL28v1z+TLwClL5dkXE9uTwZo/FUYaZ9PAIIdPvH+II41KOZlWjBv
/E+gDl8gXzJcuCEx5ZwwgzI3HMdx3mCsP91v72YwMeP1LyhvGT8CAO9mNjQKP3wCP3wDP3ffVbURLx8A
/V+CT5RPdx+JFgCR5OGPNACSMRvpAJEAmcEZtRHm1YVvoJdvqW8yXzDmkVQyqRj/4wAXY183dl47AWIE
AkzmF39fkV+jX7Vfx1+uLwDOhdpv7GD8j9RzB38ifyt/6wIC5OwDWQwEYgIKvgOkshg234PUeQlDM/BQ
JWa8xS/kGrQBvwK/49gAfpHKMM7FNK8FvxOgDaYjtKAUo5TfkT+jP8recgwXBQiPg+3UBRPA+98N7x/v
MeuQv4KG5NKlvwLJ49gLEQEDAFB2oebVtRIUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlWDr8Cjr8Czc/93+Avrn9D/r8HTX00ER7wgAABzr
8FAARArr8KwnADErBkUBFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADd4+vwAQAV4/h3fv/MANwEZjgEAPn/CgDm9fC/nmHV/zOsehBA
XGWgP6sMdBdAAdz/8fC+PAN3AQEACevwImAqD14PcA+CD+L5/z+PDwC0D8YLlU7r8Cjr8Brc/+H6AfQT
BOrxKuvwBJGROV/CCAAAUuvwQwQGVRXr8P/y8AHr8GDo8/z69PHyAAB+EBM4/uD78L+eYdUzrP96EEBc
ZaCrDId0F0De/fLxCQNMDwCpAPbx5vVGWghEXgJUAHkBXQNDBZANBQekB1MP5vXVaOf0A+vwJOvwAgAL
VBjr8Azf/NgB2AG8CdUC5/SS4/iE1QJVP/8ikUgkEokgQP8/WSwWi8ViJ/9AP4/H4/F4PPu+PzgVv0YK
hUIfoVAopD9KFrIP6fLlUBMMP2EJjx8AAf+vAwAEfOnym14IkRggEzIGwR3wP9MdyBhzGY8BzwMQ1QEL
EvbxAdsEFt0BBHULEGAgRub1Bf4GIvsCECIFFiKjBXXYACAp6vHACBiQ/CATXAZATCaTyWTXMrk/ci3J
gyi5XJ8ul8vl0pUocy5zBVW7IeW5Jl0N2S++BzIEAQAAAAQAAAACAAAAAAAAABEAAAIAAAAEAAAAAACl
dOvwNO/06vEC5vUi/5FIJBKJIEBZfywWi8ViJ0Dj+PT+8f71C+vwRMGWQW9+CgAANwAAQS0Cn5TQtT2I
NwD+8UEC6fIB3PQUAAAAFgAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAQAAAAPzY00GKCgAASAAAAFIAAAAA
ABVI6/A83f4E3P8WDygOFAAAABYAAAAAAAAAAAAAAAAAAAABAAAAAAAAAEUAAABs2dNBBAsAAA4AAABS
AAAAAAAUAAAAXAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAFQAAAKTZ00E4CQAANQEAANMAyQAAAEzRNj5t
CgAAEQAAAEAAPwAAAMTY00HSCgAALgAAAFAARAAAADTZ00ESCwAALgAAAFAAAAAAAAAAAABVMevw//Lw
A+vwKOjzFRzr8Azc/wD28fbx5vVVAevwAuf0TyIIRCYCYVVBAejz8vFVD///TgWQagng+ykB5vVoIggB
AQIXAFQY6/AEfQ+LCurx1bzj+CsWAlUsAgQIrHoPfwsfBuwDyYkIHkImAlEtAb8KGQUtAkgqBAA9DygA
WA9pE/bxdx2xD5APqKIPtA/h+pvj+EUWAlEQ+g8ILxovLC8A/Wbr8GUBAABBAP9yAGkAYQBsAN8gAFUA
bvnwYwDfbwBkAGX/8E0AaVPc/9/8/zYD6T8vBfcBP2A0AQILBgQFAlIBBCQB/Wbr8AUBAABTAP95AG0A
YgBvAKFs3P8SDyQPNg+A6vEF/wUBAgEHBgIFAQc3Af1m6/AFAQAAVwB/aQBuAGcAZPf0oXPc/xgPKg/i
+YDq8QUANwr9ZuvwRQEAAEMA/2EAbABpAGIA4XL78AMPFQ/g+/8qAL/geyQAwAkvBQH7ACDq8QIPBQIC
HwIEAwIEJAH9ZuvwpQEAAItbQ1NP3P8LDx0P6PMD6fJ3jygG5/QBAATp8j8CAQYAAwFTASQB/Wbr8EcB
AABQAP9NAGkAbgBnAMVM+fBV3P8WD+H6/y5/AOVbYADAKS8F/wEBIAAAKCACLwsGBAJSAQQkAf1m6/Cl
AQAATQD/UwAgAFAARwD/bwB0AGgAaQDxY9z/Gg/l9v8CAOD/+/3HahIAAAj+6vGfAAJAAADX/98CCwYA
BwIFBwgCBCQB/Wbr8EcBAABEAH9vAHQAdQBt3P/8EA8iDwD/LgDlW+9gAMApLwUBASD/AAAoIAILBgQF
AlIBBCQB/Wbr8EUBAABTAPd5AGzt8GEAZQDxbtz/FA/f/IcGAATe4vmfAAAg6vEBCv8FAgUDBgMDAwAk
Af1m6/BHAQAARQD/cwB0AHIAYQD/bgBnAGUAbABXbwAg9fBkAwBz9/D5Ydz/4fr/LgDlW+9gAMApLwUB
ASD/AAAoIAILBgQFAlIBBCQB/Wbr8EcBAABWAP9yAGkAbgBkAPFh3P8SD93+/y4A5d9bYADAKS8FAQH/
IAAAKCACCwYLBAJSAQQkAf1m6/BHAQAAUwD/aAByAHUAdADxadz/Eg/d/v8uAOXfW2AAwCkvBQEB/yAA
ACggAgsGCwQCUgEEJAH9ZuvwRwEAAE0AX2EAbgBn9/Bs3P/8Eg/d/v8uAOVbYPcAwCkvBQEBIAD/ACgg
AgsGBAICUgEEJAH9ZuvwRwEAAFQAf3UAbgBnAGHc//wQDyIPAP8uAOVb72AAwCkvBQEBIP8AACggAgsG
BAUCUgEEJAH9ZuvwRwEAAFMA32UAbgBk+fB5APFh3P8UD9/8/y4A5d9bYADAKS8FAQH/IAAAKCACCwYL
BAJSAQQkAf1m6/BHAQAAUgAdYffwdgBp3P8QDyIP/wD/LgDlW2AA+8ApLwUBASAAAH8oIAILBgQCUgEB
BCQB/Wbr8EcBAABEAH9oAGUAbgB13P/8EA8iDwD/LgDlW+9gAMApLwUBASD/AAAoIAILBgQFAlIBBCQB
/Wbr8EcBAABMAB9hAHQAaPfw//8RD/4jD/8uAOVbYAD7wCkvBQEBIAAAfyggAgsGBAJSAQEEJAHtZuvw
RwHw8ABhAHd1AHT38G0Aadz//BQP3/z/LgDlW2D3AMApLwUBASAA/wAoIAILBgQCAlIBBCQB/Wbr8EcB
AABDAP9vAHIAZABpAP9hACAATgBlAPF33P8aD+X2/y4A5d9bYADAKS8FAQH/IAAAKCACCwYLBAJSAQQk
Af1m6/BFAQAAQQB/cgBpAGEAbNz//BAPIg8A/y4A4EPveADACS8FAQBAfjQA/wILBgQCUgEBBCQB/Wbr
8KUBAABNAP9hAGwAZwB1AP9uACAARwBvAH90AGgAaQBj3P/8IA/r8C8AAJD7fHfXKRLn9AEACOny3wIL
BQMCTAAABAAkAf1m6/BFAQAAVAD/aQBtAGUAcwDXIABO+/B3//BSAJ1v+fBhAG7c/93+//8uAOBbeADA
Ce4vBQEAQDQA/wIC/wYDBQQFAgMEACQBGAAAABACAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAADXAAAA9Do2PlMMAABFAAAAQgDXAAAAZDs2PpgMAAAuAAAAQgDXAAAA1Ds2PsYM
AAAlAAAAQgDXAAAARDw2PusMAAA8AAAAQgDXAAAAtDw2PicNAAAuAAAAQgDXAAAABHeWQVUNAAA9AAAA
QgDXAAAAlHaWQZINAABKAAAAQgDXAAAAJHaWQdwNAAA5AAAAQgDXAAAAtHWWQRUOAAA3AAAAQgDXAAAA
RHWWQUwOAABNAAAAQgDXAAAA1HSWQZkOAAA6AAAAQgDXAAAAZHSWQdMOAAA6AAAAQgDXAAAA9HOWQQ0P
AAA5AAAAQgDXAAAAhHOWQUYPAAA5AAAAQgDXAAAAFHOWQX8PAAA7AAAAQgDXAAAApHKWQboPAAA4AAAA
QgDXAAAANHKWQfIPAAA5AAAAQgDXAAAAxHGWQSsQAAA4AAAAQgDXAAAAVHGWQWMQAAA6AAAAQgDXAAAA
5HCWQZ0QAABDAAAAQgDXAAAAdHCWQeAQAAA4AAAAQgDXAAAABHCWQRgRAABJAAAAQgDXAAAAVD82PmER
AABKAAAAQgAAAAAAAQAAAEcAdQBpAGQAZQAAAPUS6/AB6/BUAGgAf2UARABvAGPc8PUS6/AB6/BQAGEA
f2cAZQAtADHc8PUi6/AB6/BHAGUAf3MAdAB1AHL38N8gAEYAb//wbQANYfvwAAABAAAAdZgtADEAAAAB
AAAAwlMDgL9+AAAYAAAAnAAAAP////8AAAAAAAAAAAYAAAAGAAAAAAAAADMAAAAYEpZBfxMAABAAAABF
ADMAAAA00TY+jxMAABUAAABHADMAAAAc0TY+pBMAABUAAABHADMAAACs4rs9uRMAACUAAABHADMAAAAk
wZZB3hMAAAwAAABFADMAAAA0wZZB6hMAAAwAAABFAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAAAAAAA
AAAAAAAFAAAAAAAAAAAABQAAAKV06/A07/Tq8QL79AD/IpFIJBKJIED/WSwWi8ViJ0Do4/j+9uvwC+vw
BMGWv0GeFAAACuvwQUotAhQzAKg3BurxAdz0AAABAAAAAwAAAAAAJXTr8DTv9OrxAtz/3f70/vH+9Qvr
8PTAlkFf9hQAAArr8EEtAr9k0LU9ABX880EC6fIBEAQUAAAASgEAAAAAAAAAAAAAAAAAAA8AAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAOzc00GyFAAARAAAAFIAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAQAAAANzC00ECFQAANQAAAFIAAAAAABVI6/A83f4E3P8WDygOFUjr8Dzd/gTc/xYP
KA4UAAAASgEAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
RQAAAJTd00FlFgAADgAAAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAMzd00FzFgAADgAAAFIA
AAAAAHvEAuvwAQAAuPPwjz4IIhPq8fPw8PID1OvwCgUE6/AJ6/B3AQcBACLc/zQPRg9YD9/8PAID6PMC
HAA4hgFoD/8AAAhzUkMoef9Lc7AtGOVAKA+5E8TJqwKnBqcOdA+pAO/x5vUU5/QW6/Akrz02PoDr8FTr
8EL7ABfr8IzR00HUquvwIOvwUAsSxBEQ+HoVFv/r8HTe00Hm9VdgAC7r8Kw1Ghrr8PX8ERAc8/D1BgAA
2dKQD3YfAB3r8DzXf9NBUQgAAC3r8FdSACTr8OSPEH6TEOkcGRKtHyHr8BzY05NBnpMQGBMpAxHFEBSc
GgCcEVIAJw0RxRBErwsAAGgZEjHr8IQv2tNBsO0Qo+vwZB/3AADY6/BE3NNB36sRAADQ8/BQAFUy6/B8
HyD2/fCkAxL1P+vwtB8gNxUAAPUqJyJE6/Bc3dNBAYH6AEojYSEewP7aHsD+2gs=
</value>
</data>
</root>
+114
View File
@@ -0,0 +1,114 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{A7AB3C8A-BB74-4520-9895-E96B836D50A1}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Lskj.Visio</RootNamespace>
<AssemblyName>Lskj.Visio</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="AxInterop.Microsoft.Office.Interop.VisOcx">
<HintPath>..\..\引用DLL\AxInterop.Microsoft.Office.Interop.VisOcx.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Office.Interop.Visio, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<EmbedInteropTypes>True</EmbedInteropTypes>
<HintPath>..\..\引用DLL\Microsoft.Office.Interop.Visio.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Office.Interop.VisOcx, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<EmbedInteropTypes>True</EmbedInteropTypes>
<HintPath>..\..\引用DLL\Microsoft.Office.Interop.VisOcx.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="EventSink.cs" />
<Compile Include="FrmMain.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmMain.Designer.cs">
<DependentUpon>FrmMain.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="FrmMain.resx">
<DependentUpon>FrmMain.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<COMReference Include="stdole">
<Guid>{00020430-0000-0000-C000-000000000046}</Guid>
<VersionMajor>2</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>primary</WrapperTool>
<Isolated>False</Isolated>
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
+21
View File
@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace Lskj.Visio
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FrmMain());
}
}
}
@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的常规信息通过以下
// 特性集控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("Lskj.Visio")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Lskj.Visio")]
[assembly: AssemblyCopyright("Copyright © 2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 使此程序集中的类型
// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
// 则将该类型上的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("b0ef2600-5bc6-42ef-b9af-f7a66ea37f45")]
// 程序集的版本信息由下面四个值组成:
//
// 主版本
// 次版本
// 内部版本号
// 修订号
//
// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值,
// 方法是按如下所示使用“*”:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
+63
View File
@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace Lskj.Visio.Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Lskj.Visio.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 使用此强类型资源类,为所有资源查找
/// 重写当前线程的 CurrentUICulture 属性。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}
@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+26
View File
@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace Lskj.Visio.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}
@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>