AlmToolkit initial checkin

This commit is contained in:
Christian Wade 2023-09-28 08:08:33 -07:00
parent fe417a495d
commit cb495df087
406 changed files with 69572 additions and 1 deletions

3
.gitignore vendored
View File

@ -243,4 +243,5 @@ ModelManifest.xml
.paket/paket.exe
# FAKE - F# Make
.fake/
.fake/
/AlmToolkit/AlmToolkitSetup/Setup

80
AlmToolkit/AlmToolkit.sln Normal file
View File

@ -0,0 +1,80 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29306.81
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AlmToolkit", "AlmToolkit\AlmToolkit.csproj", "{765C0612-BB8F-4261-87AE-B5B842BE3C26}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BismNormalizer", "BismNormalizer\BismNormalizer.csproj", "{8E68FB9B-73DF-4BC3-9C56-760C87078D13}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{399E672C-E8B5-417F-8559-AEA2601FB51B}"
ProjectSection(SolutionItems) = preProject
VersionInfo.cs = VersionInfo.cs
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BismNormalizer.CommandLine", "BismNormalizer.CommandLine\BismNormalizer.CommandLine.csproj", "{4C77E665-FA37-4793-8950-69AABD3DC626}"
EndProject
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "AlmToolkitSetup", "AlmToolkitSetup\AlmToolkitSetup.vdproj", "{DB850BC4-7490-4999-8761-CA8D4B92F98F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Setup|Any CPU = Setup|Any CPU
Setup|x64 = Setup|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{765C0612-BB8F-4261-87AE-B5B842BE3C26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{765C0612-BB8F-4261-87AE-B5B842BE3C26}.Debug|Any CPU.Build.0 = Debug|Any CPU
{765C0612-BB8F-4261-87AE-B5B842BE3C26}.Debug|x64.ActiveCfg = Debug|x64
{765C0612-BB8F-4261-87AE-B5B842BE3C26}.Debug|x64.Build.0 = Debug|x64
{765C0612-BB8F-4261-87AE-B5B842BE3C26}.Release|Any CPU.ActiveCfg = Release|Any CPU
{765C0612-BB8F-4261-87AE-B5B842BE3C26}.Release|Any CPU.Build.0 = Release|Any CPU
{765C0612-BB8F-4261-87AE-B5B842BE3C26}.Release|x64.ActiveCfg = Release|x64
{765C0612-BB8F-4261-87AE-B5B842BE3C26}.Release|x64.Build.0 = Release|x64
{765C0612-BB8F-4261-87AE-B5B842BE3C26}.Setup|Any CPU.ActiveCfg = Setup|Any CPU
{765C0612-BB8F-4261-87AE-B5B842BE3C26}.Setup|Any CPU.Build.0 = Setup|Any CPU
{765C0612-BB8F-4261-87AE-B5B842BE3C26}.Setup|x64.ActiveCfg = Setup|x64
{765C0612-BB8F-4261-87AE-B5B842BE3C26}.Setup|x64.Build.0 = Setup|x64
{8E68FB9B-73DF-4BC3-9C56-760C87078D13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8E68FB9B-73DF-4BC3-9C56-760C87078D13}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8E68FB9B-73DF-4BC3-9C56-760C87078D13}.Debug|x64.ActiveCfg = Debug|Any CPU
{8E68FB9B-73DF-4BC3-9C56-760C87078D13}.Debug|x64.Build.0 = Debug|Any CPU
{8E68FB9B-73DF-4BC3-9C56-760C87078D13}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8E68FB9B-73DF-4BC3-9C56-760C87078D13}.Release|Any CPU.Build.0 = Release|Any CPU
{8E68FB9B-73DF-4BC3-9C56-760C87078D13}.Release|x64.ActiveCfg = Release|Any CPU
{8E68FB9B-73DF-4BC3-9C56-760C87078D13}.Release|x64.Build.0 = Release|Any CPU
{8E68FB9B-73DF-4BC3-9C56-760C87078D13}.Setup|Any CPU.ActiveCfg = Setup|Any CPU
{8E68FB9B-73DF-4BC3-9C56-760C87078D13}.Setup|Any CPU.Build.0 = Setup|Any CPU
{8E68FB9B-73DF-4BC3-9C56-760C87078D13}.Setup|x64.ActiveCfg = Setup|Any CPU
{8E68FB9B-73DF-4BC3-9C56-760C87078D13}.Setup|x64.Build.0 = Setup|Any CPU
{4C77E665-FA37-4793-8950-69AABD3DC626}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4C77E665-FA37-4793-8950-69AABD3DC626}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4C77E665-FA37-4793-8950-69AABD3DC626}.Debug|x64.ActiveCfg = Debug|Any CPU
{4C77E665-FA37-4793-8950-69AABD3DC626}.Debug|x64.Build.0 = Debug|Any CPU
{4C77E665-FA37-4793-8950-69AABD3DC626}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4C77E665-FA37-4793-8950-69AABD3DC626}.Release|Any CPU.Build.0 = Release|Any CPU
{4C77E665-FA37-4793-8950-69AABD3DC626}.Release|x64.ActiveCfg = Release|Any CPU
{4C77E665-FA37-4793-8950-69AABD3DC626}.Release|x64.Build.0 = Release|Any CPU
{4C77E665-FA37-4793-8950-69AABD3DC626}.Setup|Any CPU.ActiveCfg = Setup|Any CPU
{4C77E665-FA37-4793-8950-69AABD3DC626}.Setup|Any CPU.Build.0 = Setup|Any CPU
{4C77E665-FA37-4793-8950-69AABD3DC626}.Setup|x64.ActiveCfg = Setup|Any CPU
{4C77E665-FA37-4793-8950-69AABD3DC626}.Setup|x64.Build.0 = Setup|Any CPU
{DB850BC4-7490-4999-8761-CA8D4B92F98F}.Debug|Any CPU.ActiveCfg = Debug
{DB850BC4-7490-4999-8761-CA8D4B92F98F}.Debug|x64.ActiveCfg = Debug
{DB850BC4-7490-4999-8761-CA8D4B92F98F}.Release|Any CPU.ActiveCfg = Release
{DB850BC4-7490-4999-8761-CA8D4B92F98F}.Release|x64.ActiveCfg = Release
{DB850BC4-7490-4999-8761-CA8D4B92F98F}.Setup|Any CPU.ActiveCfg = Setup
{DB850BC4-7490-4999-8761-CA8D4B92F98F}.Setup|Any CPU.Build.0 = Setup
{DB850BC4-7490-4999-8761-CA8D4B92F98F}.Setup|x64.ActiveCfg = Setup
{DB850BC4-7490-4999-8761-CA8D4B92F98F}.Setup|x64.Build.0 = Setup
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {2B9958CF-DBD0-4DAB-9124-49BBA68C6BD7}
EndGlobalSection
EndGlobal

210
AlmToolkit/AlmToolkit/About.Designer.cs generated Normal file
View File

@ -0,0 +1,210 @@
namespace AlmToolkit
{
partial class About
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
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(About));
this.okButton = new System.Windows.Forms.Button();
this.logoPictureBox = new System.Windows.Forms.PictureBox();
this.lblProductVersion = new System.Windows.Forms.Label();
this.lblProductName = new System.Windows.Forms.Label();
this.linkReportIssue = new System.Windows.Forms.LinkLabel();
this.linkDocumentation = new System.Windows.Forms.LinkLabel();
this.linkALMTWebsite = new System.Windows.Forms.LinkLabel();
this.linkLatestVersion = new System.Windows.Forms.LinkLabel();
this.label1 = new System.Windows.Forms.Label();
this.linkTwitter = new System.Windows.Forms.LinkLabel();
this.linkHowToUse = new System.Windows.Forms.LinkLabel();
((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit();
this.SuspendLayout();
//
// okButton
//
this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.okButton.Location = new System.Drawing.Point(287, 304);
this.okButton.Margin = new System.Windows.Forms.Padding(4);
this.okButton.Name = "okButton";
this.okButton.Size = new System.Drawing.Size(100, 31);
this.okButton.TabIndex = 24;
this.okButton.Text = "&OK";
//
// logoPictureBox
//
this.logoPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("logoPictureBox.Image")));
this.logoPictureBox.Location = new System.Drawing.Point(16, 11);
this.logoPictureBox.Margin = new System.Windows.Forms.Padding(4);
this.logoPictureBox.Name = "logoPictureBox";
this.logoPictureBox.Size = new System.Drawing.Size(84, 82);
this.logoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.logoPictureBox.TabIndex = 12;
this.logoPictureBox.TabStop = false;
//
// lblProductVersion
//
this.lblProductVersion.AutoSize = true;
this.lblProductVersion.Location = new System.Drawing.Point(119, 211);
this.lblProductVersion.Name = "lblProductVersion";
this.lblProductVersion.Size = new System.Drawing.Size(45, 16);
this.lblProductVersion.TabIndex = 26;
this.lblProductVersion.Text = "label1";
//
// lblProductName
//
this.lblProductName.AutoSize = true;
this.lblProductName.Font = new System.Drawing.Font("Microsoft Sans Serif", 13F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblProductName.Location = new System.Drawing.Point(117, 12);
this.lblProductName.Name = "lblProductName";
this.lblProductName.Size = new System.Drawing.Size(64, 22);
this.lblProductName.TabIndex = 27;
this.lblProductName.Text = "label1";
//
// linkReportIssue
//
this.linkReportIssue.AutoSize = true;
this.linkReportIssue.Location = new System.Drawing.Point(119, 149);
this.linkReportIssue.Name = "linkReportIssue";
this.linkReportIssue.Size = new System.Drawing.Size(102, 16);
this.linkReportIssue.TabIndex = 28;
this.linkReportIssue.TabStop = true;
this.linkReportIssue.Text = "Report an issue";
this.linkReportIssue.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkReportIssue_LinkClicked);
//
// linkDocumentation
//
this.linkDocumentation.AutoSize = true;
this.linkDocumentation.Location = new System.Drawing.Point(119, 117);
this.linkDocumentation.Name = "linkDocumentation";
this.linkDocumentation.Size = new System.Drawing.Size(98, 16);
this.linkDocumentation.TabIndex = 30;
this.linkDocumentation.TabStop = true;
this.linkDocumentation.Text = "Documentation";
this.linkDocumentation.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkDocumentation_LinkClicked);
//
// linkALMTWebsite
//
this.linkALMTWebsite.AutoSize = true;
this.linkALMTWebsite.Location = new System.Drawing.Point(119, 54);
this.linkALMTWebsite.Name = "linkALMTWebsite";
this.linkALMTWebsite.Size = new System.Drawing.Size(134, 16);
this.linkALMTWebsite.TabIndex = 31;
this.linkALMTWebsite.TabStop = true;
this.linkALMTWebsite.Text = "http://alm-toolkit.com/";
this.linkALMTWebsite.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkALMTWebsite_LinkClicked);
//
// linkLatestVersion
//
this.linkLatestVersion.AutoSize = true;
this.linkLatestVersion.Location = new System.Drawing.Point(119, 240);
this.linkLatestVersion.Name = "linkLatestVersion";
this.linkLatestVersion.Size = new System.Drawing.Size(91, 16);
this.linkLatestVersion.TabIndex = 32;
this.linkLatestVersion.TabStop = true;
this.linkLatestVersion.Text = "Latest version";
this.linkLatestVersion.Visible = false;
this.linkLatestVersion.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLatestVersion_LinkClicked);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(119, 181);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(77, 16);
this.label1.TabIndex = 33;
this.label1.Text = "Created by ";
//
// linkTwitter
//
this.linkTwitter.AutoSize = true;
this.linkTwitter.Location = new System.Drawing.Point(193, 181);
this.linkTwitter.Name = "linkTwitter";
this.linkTwitter.Size = new System.Drawing.Size(99, 16);
this.linkTwitter.TabIndex = 34;
this.linkTwitter.TabStop = true;
this.linkTwitter.Text = "Christian Wade";
this.linkTwitter.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkTwitter_LinkClicked);
//
// linkHowToUse
//
this.linkHowToUse.AutoSize = true;
this.linkHowToUse.Location = new System.Drawing.Point(119, 86);
this.linkHowToUse.Name = "linkHowToUse";
this.linkHowToUse.Size = new System.Drawing.Size(74, 16);
this.linkHowToUse.TabIndex = 35;
this.linkHowToUse.TabStop = true;
this.linkHowToUse.Text = "How to use";
this.linkHowToUse.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkHowToUse_LinkClicked);
//
// About
//
this.AcceptButton = this.okButton;
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.okButton;
this.ClientSize = new System.Drawing.Size(403, 350);
this.Controls.Add(this.linkHowToUse);
this.Controls.Add(this.linkTwitter);
this.Controls.Add(this.label1);
this.Controls.Add(this.linkLatestVersion);
this.Controls.Add(this.linkALMTWebsite);
this.Controls.Add(this.linkDocumentation);
this.Controls.Add(this.linkReportIssue);
this.Controls.Add(this.lblProductName);
this.Controls.Add(this.lblProductVersion);
this.Controls.Add(this.logoPictureBox);
this.Controls.Add(this.okButton);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Margin = new System.Windows.Forms.Padding(4);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "About";
this.Padding = new System.Windows.Forms.Padding(12, 11, 12, 11);
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "About";
this.Load += new System.EventHandler(this.About_Load);
((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button okButton;
private System.Windows.Forms.PictureBox logoPictureBox;
private System.Windows.Forms.Label lblProductVersion;
private System.Windows.Forms.Label lblProductName;
private System.Windows.Forms.LinkLabel linkReportIssue;
private System.Windows.Forms.LinkLabel linkDocumentation;
private System.Windows.Forms.LinkLabel linkALMTWebsite;
private System.Windows.Forms.LinkLabel linkLatestVersion;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.LinkLabel linkTwitter;
private System.Windows.Forms.LinkLabel linkHowToUse;
}
}

View File

@ -0,0 +1,87 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AlmToolkit
{
partial class About : Form
{
private bool _newerVersionAvailable = false;
private string _latestVersion = null;
public About()
{
InitializeComponent();
}
public bool NewerVersionAvailable
{
get { return _newerVersionAvailable; }
set { _newerVersionAvailable = value; }
}
public string LatestVersion
{
get { return _latestVersion; }
set { _latestVersion = value; }
}
private void About_Load(object sender, EventArgs e)
{
this.Text = Utils.AssemblyProduct;
this.lblProductName.Text = this.Text;
Version installedVersion = new Version(Utils.AssemblyVersion);
string installedVersionMajorMinorBuild = String.Format("{0}.{1}.{2}", installedVersion.Major, installedVersion.Minor, installedVersion.Build);
this.lblProductVersion.Text = String.Format("Installed version {0}", installedVersionMajorMinorBuild);
if (_newerVersionAvailable)
{
linkLatestVersion.Visible = true;
linkLatestVersion.Text = String.Format("Latest version {0}", _latestVersion);
}
this.linkReportIssue.LinkVisited = false;
}
private void linkALMTWebsite_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
this.linkALMTWebsite.LinkVisited = true;
System.Diagnostics.Process.Start("http://alm-toolkit.com/");
}
private void linkHowToUse_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
this.linkHowToUse.LinkVisited = true;
System.Diagnostics.Process.Start("http://alm-toolkit.com/HowToUse");
}
private void linkDocumentation_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
this.linkDocumentation.LinkVisited = true;
System.Diagnostics.Process.Start("https://github.com/microsoft/Analysis-Services/blob/master/BismNormalizer/Model%20Comparison%20and%20Merging%20for%20Analysis%20Services.pdf");
}
private void linkLatestVersion_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
this.linkLatestVersion.LinkVisited = true;
System.Diagnostics.Process.Start(Utils.LatestVersionDownloadUrl);
}
private void linkReportIssue_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
this.linkReportIssue.LinkVisited = true;
System.Diagnostics.Process.Start("https://github.com/microsoft/Analysis-Services/issues");
}
private void linkTwitter_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
this.linkTwitter.LinkVisited = true;
System.Diagnostics.Process.Start("https://twitter.com/_christianWade");
}
}
}

View File

@ -0,0 +1,215 @@
<?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>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="logoPictureBox.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAEYAAABFCAYAAAD3upAqAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wwAADsMBx2+oZAAAFJ1JREFUeF7lXAlwFVWXDrIGIlsSiL/88M8IQgxEIKwCyu5SKKgUKiqluJQCohkc
S6twwR9FEFFEVEBFBJ0aXIdhc0F0AEUYF0QRlbBrIOtbu/v1S3Lm+87rGx4hYJAkKnOqvupOb/ee757t
3u6XhOoSETkjEAikWJY1BngPOAT4POy2bXsBMBDXNfJuOf2FhITD4VHA48BaEJGPrWCr8Pb3AG+BnAc8
gpp4t59eAsXqQtGzqSQwFcp/DZSRBNd1paysDJfEpKSkRBzHUYKACPABMAHoQVK9R/61BXrWAZJAygXA
vFAo9BO2IZBTFolElBQSwf1gMCg4r8dKS0t1S4JwbQlIKcZ9m7H/AI51xDMb8tleM38tQcfPhEIjoNBc
YBP2/diqJZAMI7m5ufLuu+/K9OnT5amnnpJPPvlEYBneWVGCeB9QBhwEOavxjEew3xun63vN/fkFHf8H
RnU4tlPR+c+BKMmgVRiXwTnJycmR9evXy7x58+SGG26Q888/X/r06SOTJk2SV199VT777DP55Zdfykmk
FcW5WAjPXYntRGz7/2ldDP1u4Pf7W6KTdJk5wE4gCAJKSUg0GlVQqfz8fNm0aZPMmDFDRo0aJX379pV+
/fpJ//79FRdccIFur7/+ennhhRdk27ZtUlhYqGSSJON6+LsEbQSALcC/wxU7FxUVNUNf6nrd+mMFHUmC
wiPR0RfRwc1AHqDmTzcwUlBQICtWrJAHH3xQLeSyyy5TUnr27CkDBgyQIUOGyODBg5WkHj166PaKK66Q
W265RWbNmiUbNmzQOESh5ZEcEo126GJ7gY+BGUAfXPLHxB80fAY68Hd07HLgUexvxNZmR2nuNHsK93/+
+WdZu3atzJ07V8aPH6/WQLchKQMHDlRCDCmE+ZvnevXqJV27dpWhQ4fK3XffLYsWLdIYdPDgwXK3pAWh
feNiDNKsi6ZgoAbSir0u16ygH0nIHGlouB8wE2CWcUkAR5AWQjB4Mj4wTsycOVNHnpZBN7noootU6UGD
BpWTcTzwGl7Lexh/iBtvvFEJ2r59u7olCWGbbN9zsVL0iULrvRv97UKC0Pd6nhrVL2h0HLAI+A6NcnRo
xmoZxv/z8vJk1apV6jLXXnutDB8+XN2id+/e6jJUON5CTgRjPSTIPIMk0Q3HjRunpG/cuFFdjBZEsC/s
E/rIGHQYIEGzgF4gp6GnSvUKHr4BoJjGdcv48c0338g777wjTz75pNx6662qDN2A7sB9ukNVCakMhiQS
wxjEZ19yySVy1113yfz58+Wjjz5SKzVCd2bfaFHY5gMr0d8HQdwwn8/XwlOpegQPp5VogwRHh2DqXbhw
oWaZ9PR07XRl8aO6QZLoooxbN998s7rYl19+qbURB80QRFfzCHKB/wGygV4MC7jkDE+93y94WCFwDDG7
d++WV155Ra655holpXv37uo2JpYQ1UmQIZzPp4sxdl144YV6jH2gi23ZskVjHcsEujjJYV89F6MFfQXM
BGFZIKcRcFKZjNcDDYC6CXjIh3hYkKQQxpVQP8jOnTtl3bp1Omo0b3a6c+fOOqLV4UqVgc8zz+VAdOvW
TXHppZfKHXfcoW7NjMggbYREmf4DBdDpA2xngLThON3Y0/s3Bdd3wH3/hvu702KuBBjINgF5NE+C2cCk
T44SUypHjebNTjKb0Io4slRo2LBh1UoSiY/fZzuZmZka31gicLA2b94sBw4cUMuhmFoIehBRgPGTLtYX
wTwVlxxjQThWH8bQDi54Ma6bD939sMbbeYKm05QpEBew5P8GCGO/lA1yNOjTbLC4uFgD8rPPPiujR4/W
znJUGReImnQxPt9U0nQxbq+++mq1IMYgBF/tI/vruRfJMZX0Nig8DegGXZuQDIIBm1aF44txDZdFbACn
5C6Pt5jAMpJxoj+QjYu5NHBMgceG9+/fryn15ZdflgkTJig5LPBIVE25GMHnEmwvKytLrYdp/rbbbpMn
nnhCPvjgA51qmH5SyTiwet8AfR7HdjS2t4K8BdhnXKKUXwuZ6FFytOBEY9w0BDdPB7jwdIA3cBSM2VIY
h5hSZ8+eLXfeeaeMHDlSq1+mXo4olakJggwY8zgYjEG0optuukkJotuz3IiznHgw2XwGvXZgG4k7Xg5I
5cRQcLIe0BgulomHP4QbtgKM/BYbI7yqVFCFqjlzisA5E8lgp43pc78yxU4F8S7GwSBBZjAYC5lVOYim
j1Q4DlEcKw8VFc+fkBgjuOgM1gZguAdwOx6yGjdziUAbpYsx6PHhnO+QoCVLlmgGYdplgGaHTfypqODv
hXmeaYMulp2dLUuXLtWpBQeL/YtXmDAkmNjJtM/roFv5NVUiJl5wQ33cOBbIMQ8xcKNHXIyp9OOPP5bn
nntOJk+eLCNGjNCYYGohM9qVKXwimHtIhqnAmQTuv/9+rbm++OILXTGkmBhDhY3S8WGA13F2v3LlSh1Q
EkTSeC3k5IihgN10NPIFG7ItxBzLlRKrREqtUim1SyXqRMUtiXWAPk4LmjNnjs6DLr74Yo0FnB9VnIkf
jyhzzriMuY8lA4Mu0/auXbuUCErFoMs+kBBaB8/Rkpg8WAtxmjNmzBjZunWr3ntKxKAeyECDW8KWNwoe
MdFQVKJhkIK/I05ESqIlsbrCjagFfffdd/Laa6/pWgzjAYtEkkQlK7qYIcm4i0nVtDpeT5fh0ulPP/2k
CYCjbdzCKMe+cZ+ksB8kZc+ePfL666+rFTNRsC5iVuPgnTIxMMHzHcv5kgT4Lb/scHbIJneTrHZXy/vR
9+Wwcxh2imIrBFKsWF1h5PDhw/Lpp5/KSy+9JFOmTNFRp0tQYSpv0rzZkgxznjXL1KlTZdmyZTrCLDqN
UHkqRNBFGDNMcUqCuGLI+x555BGdXrA45XM7duwoV111lXz77bd6bbUQI4hReXaevOG+IROjE2VEZISM
t8fLOnud5EfyJTeCSR9cTdBOmV0mbgSWVRZb62VnGQ+Y5mnOjEGmNqGr0NXMtIOTWK4Zk8wffvihnGha
CN2EzzIWYqyD51jwcUFtzZo1ulzCWTtjknFFgrUXCSdxlOohBvfn2rkyKzpLOkc7S1IoSbIKsuS+0H0y
u2S2zHfny357vxITtaIx64kgE0SPmHx+Xr5mECrNGGQWrkgMO05C3nzzTXUZVt1UnPeSHEMKn0MLiT/H
YLp8+XK9n6STYFofgzbd17irIYbVfPURA4s55BySGe4Mae+0lzr+OpJWlCbnhc6TrGCWjCkaI69br8v7
Je/Lh9EPpdgqjrlYuEwc25Fo6ZGR//XXX+Xzzz/XzHLvvfeqy1Ax+r6pZClU2lgIQUV4vznHkWepwCx1
3XXXKRHGCkk0yTAgWTVKzBx3jnQPd5fGgcbSLNBMkoJJ0rKwpWTmZ8qo0CgZHRkt2Xa2bHQ2yi5nl+Q4
OYL74U+iQZsuZuIBMwYJYkdJAIXnKroMSTAuQ+IYI7gozxhiSgO6Dd3TBHET2I211CgxDLRPu09LD6uH
JPmTJMWfIq39raWVv5UiNZAqbYvaypDCIZLtZEt2abYSedA+qK4VshAo6WJI8VEXGQ3uwM6ZFEsXMaQQ
3I8/xpk1VxjpMiwFGMDpKiSE+xUJqVVinnGfkZ5WTznTf6aS8Tff3+Qs31lKULIvWVoVtZK2vrbS3mov
6cF0GR0YLQudhbKsZJmsi6yTSDiicYgE2Y4t0ZIjBLGT8VZCITFM/XQ7Zja6DJVlbKLr0GUqElERtULM
XHeu9Ar3kqb+puXEGJztO1vO8p8lLYItJDGYKM19zaWjv6P0j/SXIZEhcq91r2x2NkteJE/CTliDNDNZ
RTLoNpwUMuYw9jz00EP6loKTVboMrcTEjsqIqIjaJcbXVFJ9qUcRQ9B60vxpkhpMlZahlnKmdSam7o2l
VaCV9Pb3ltvd22WRs0i2hbbFKmkb1oKtcSm0p+vPb731lroMFWIwpbuYtHs8lzkeas+Vwj2VmFa+oy3G
IC2QJmlBkBNKlWZWM2kcbixNg02ludVckp1k6VHUQ6YVTpPv7e+VjFK3VAn5/vvvy9d8WM8wbtBCWDlz
vzKlq4JaIcYE3xMRo1bjS5PWwdZqOanhVEm2kyXRSZQEK0Hq+OrIoMAgWeGskKAde2WbeyhXv5RgYUaX
YaZhDKFSrIwrU7iqqHFicp1czTJZdpY0CTSRlECKxhTiGHJwjC6lWSvUSlLCKdIi3EKtJ8FJkC5uF1ni
LpEiu0g7uStnl4wdO1bLduMuJ+syx0ONE8M6ZrY7W7rZ3bSOqTIxiC+0nORQsiSFkyTBTpDMSKYscBdI
vh1b/c/ZnaOvbrt06aKKEJUp+XtQu8T4jyaG7lMZMfHkpARTpGmoqdQJ15EMJ0OeiT6jVkjhChxn4pzs
VabcqaBWiWGBp+naHyOBxBhUJMaA5DQPNZd6wXrSKdJJHos+Jgedg9rJ2iKGs+uaJSbgERNnJUqIIeg4
xLDGaRBsIOfa58q06DTZ5+zTTu7ZvafGiCFY+2RkZOi6zNdff61t/qmIaRlsKQ2DDcuJOeAc0E7WhMWY
4M1gzrTfoUOHmlmPYTyY5c6SrlbXI65UgZiK5BCtA60VSkwgRkwnu5M8Gn1U9jv7tZPVZTEmcJMUpnum
ftZBjC333HOPLF68WL+oYHXNarvaLOZJ90npanvEHKeOMahIDJEcSJZGgUaSbqXLP91/ygG7ei2GhaBZ
i6GlcCmTi2MkhG2YNRwSQmIIyCRP3apLPDEFdoEsiCyQPlYfSfLFiOH8iDgZYpjqz7POU2J0cQtyqhZD
CyEpnD5wNZBWw0knZ+M7duzQuRdJoXBiGkcMF3jGeepWXeKJCdgBeTPypgyyBkljX2Np7Wt9FDFm3/xt
XKoiMYmBRCVmujv9dxNjXIb7dBW+neTrGk4lHnjgAbUQLqdyyZNC1zGEeKTwldBSxJmpOJ3uqVt1McSU
WWUSskOyOrJahlvDpWGgoU4iDQlVJYYxhq7U2eosM92Z8osd+4Kqqq5kCKF1kBBaCPe5YGVer/z4449K
Ahe24tdzAAfYB2LWAhOw3xZN8w3syX8hGk8MX6GscdbIcHu4ptwUX8pRxMSTo8RU4kqGmG5WN52pcx35
ZIihy5jAyjUZxhG+HuHrFT6Dq4Jc3yEpjCUm8wDF0OU/QcbVOPavaPLUfvRxFDF2WFY7MYtpEAAx/mOJ
icfxiKG1ZVlZ8rz7vBy2D/8mMcZlzJsFZhrWI1wr5nsjvl7h4rkREkML8VzmR2xfBu4EuuN09XyiX9GV
VjmrZJg17JSJYcqvisXQTWgddBlaCl/R0kL4vSDrEboJ4wcDK/dpISCD79r5ZfsK4C4cPwdNnPp3evFi
iGHw5RLBisgKGewMlvqh+pLsTz56SuAREU8MC7vKiGHw5RsHrgdXRgxdhKQQ3Ocntfz8jQtYfMPIF3Ak
gu7iLY3ys1z+BOhXbJcDo3GsHR6dBFT/V+ZHEeME5T33PRlsg5hgfWnpb1muvCGl4r4hhsWdqXy57Mk6
hlnJEMOsxE/KSAzLd8YPuszll18uDz/8sLz99tvy1Vdf6TfItBCCpIAA4zK7gOdBxg34m19SJXoq1IzE
ExNwArLcXS4D7AExYjD6xyPjt4jJsDLkMReTSI8YLmfyRxnnnHOOWgkXve+77z5Nu3xJR6ug0GXiyKCF
8IOg/8D2TpDyL163a17iiSlyimSxu1j6OH3UlU6WGG6Tg6hjQAzTdbwrcT2GFsM5zcSJE9VlWLoz3ZIU
k3a9GEL5BXgLGO19iFi7v3uKJybfyddXsd2cbjFiMPpUVtd448hRxMUcU8/wOq7hsPItJ8Zbdsj9NVfX
e5cuXaqf1ZrCjGJcBn2hpRzE/vMkBGR1wuk/5seo5cRgrsXVtnnReZLpZkpdu64Sw2VLkqMEeRaiJIGI
+AylwRjHmMm4yEViHncfj82V4CUBf0CthnUIhTGEFkKXAfjt3LfYLgEm4nh7r3t/nMQTY17qc/Wtbqiu
JIYSpXm4uS5b/m5iuOwAa+T7bX6lReug2wDMMky7/B3Tu3Ch69EXfh7/5/ipYDwxNPvpJdOlX7CfTgcS
rUR9b8S1XI0h/iOWQxeqjJhUf6o08TeRLuEuMiMyo5yYiI1YAmI8K+Gvc/eDjBexvRxbVqpV/uK7VgQd
62lb9g/8tIx1zAZng0yxpshFFmaykb7Syd9JUopSpEmwiTQLNVOCDDEkIt5yTmgxls5n+AMKfoc7H2Tc
BKtJByHVW5hVl2AEz0VH/wuIloRL9IuF9e56mV86X0v6cb5xkuHLkHZWOy32OH9qHmiuQZYEVbSYExBD
t/lvEHKj5zJ/TkKMoION0NmLME960Qk7+6PhaInP9ukSxCH7kK7PTIhOkEnOJBlaMFTOLjxb3wTw9Wx5
vInLTicgZhfaGYz2auaHWjUh6Gw9z3KuAZ4COf9bFi5z+VI+J5Ij293tstnerF9XcYI51BoqmYWZklII
Fws0KU/rhKljTIGnS5ux4Psd2ujgNfnXE+/3B2MRe5ZguxWTy2IGZitsyVp3rX7usdheLGOLx0oXXxdp
H2ovbXxtpIWvhb6/pjU1CDWQjnZHedT11nxjFrMTz+zhNfPXFJo74wBGeBhGeqFruXsjqM4x+y7jdy+s
TZ6LPCf3l9yvX1ddWHChpBWnaQZLDCdKQihBzsGEl66kBd7pQowRBkiaPxS6Ani8zC7bDuspY4bZG9kr
e929stHeKJPDk2WkM1KG2kOlTXEbSQgkSIdIB3kh+oIUOAWnHzHxAhfj/5K5DkF6AaxmC1wsRIX9jl8+
in4ka0rWyCv2K3Kl/0rJDGfKldEr9aU+v6A4rYmhwILqmh9LRcKRl0HQLsBi8cY0v8/eJ0vdpfJS9CV5
I/qGrIys1DVfLoJ5xGR5jzo9BQQ1QOptF3JCw6HwTBSHO0vDpTozznPy9INpzrtyrVz92pxfVMHaTn9i
4gUK/51ZLGSFngZJn8BtipjF6D6spnFMF9lxzW6gr3fb/w9hkIbSbWAxt9hhey0s5DBQBBTieAHA1xr8
D0bdvVtqWRIS/g/AgfsOXYEY5AAAAABJRU5ErkJggg==
</value>
</data>
</root>

View File

@ -0,0 +1,503 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\CefSharp.WinForms.63.0.3\build\CefSharp.WinForms.props" Condition="Exists('..\packages\CefSharp.WinForms.63.0.3\build\CefSharp.WinForms.props')" />
<Import Project="..\packages\CefSharp.Common.63.0.3\build\CefSharp.Common.props" Condition="Exists('..\packages\CefSharp.Common.63.0.3\build\CefSharp.Common.props')" />
<Import Project="..\packages\cef.redist.x86.3.3239.1723\build\cef.redist.x86.props" Condition="Exists('..\packages\cef.redist.x86.3.3239.1723\build\cef.redist.x86.props')" />
<Import Project="..\packages\cef.redist.x64.3.3239.1723\build\cef.redist.x64.props" Condition="Exists('..\packages\cef.redist.x64.3.3239.1723\build\cef.redist.x64.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{765C0612-BB8F-4261-87AE-B5B842BE3C26}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>AlmToolkit</RootNamespace>
<AssemblyName>AlmToolkit</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<CefSharpAnyCpuSupport>true</CefSharpAnyCpuSupport>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</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|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>BismNorm.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Setup|x64'">
<OutputPath>bin\x64\Setup\</OutputPath>
<PlatformTarget>AnyCPU</PlatformTarget>
<LangVersion>7.3</LangVersion>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Setup|AnyCPU'">
<OutputPath>bin\Setup\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.AnalysisServices, Version=19.67.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AnalysisServices.retail.amd64.19.67.0\lib\net45\Microsoft.AnalysisServices.dll</HintPath>
</Reference>
<Reference Include="Microsoft.AnalysisServices.Core, Version=19.67.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AnalysisServices.retail.amd64.19.67.0\lib\net45\Microsoft.AnalysisServices.Core.dll</HintPath>
</Reference>
<Reference Include="Microsoft.AnalysisServices.SPClient.Interfaces, Version=19.67.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AnalysisServices.retail.amd64.19.67.0\lib\net45\Microsoft.AnalysisServices.SPClient.Interfaces.dll</HintPath>
</Reference>
<Reference Include="Microsoft.AnalysisServices.Tabular, Version=19.67.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AnalysisServices.retail.amd64.19.67.0\lib\net45\Microsoft.AnalysisServices.Tabular.dll</HintPath>
</Reference>
<Reference Include="Microsoft.AnalysisServices.Tabular.Json, Version=19.67.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AnalysisServices.retail.amd64.19.67.0\lib\net45\Microsoft.AnalysisServices.Tabular.Json.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Identity.Client, Version=4.43.0.0, Culture=neutral, PublicKeyToken=0a613f4dd989e8ae, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Identity.Client.4.43.0\lib\net461\Microsoft.Identity.Client.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Octokit, Version=0.36.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Octokit.0.36.0\lib\net46\Octokit.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.IdentityModel" />
<Reference Include="System.Windows.Forms.Ribbon, Version=4.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>.\System.Windows.Forms.Ribbon.dll</HintPath>
</Reference>
<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.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\VersionInfo.cs">
<Link>VersionInfo.cs</Link>
</Compile>
<Compile Include="About.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="About.Designer.cs">
<DependentUpon>About.cs</DependentUpon>
</Compile>
<Compile Include="ChromeDebugger.cs" />
<Compile Include="ComparisonForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ComparisonForm.Designer.cs">
<DependentUpon>ComparisonForm.cs</DependentUpon>
</Compile>
<Compile Include="ComparisonJSInteraction.cs" />
<Compile Include="Model\AngularComposite.cs" />
<Compile Include="Model\ComparisonNode.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Utils.cs" />
<Compile Include="WarningListForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="WarningListForm.Designer.cs">
<DependentUpon>WarningListForm.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="About.resx">
<DependentUpon>About.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ComparisonForm.resx">
<DependentUpon>ComparisonForm.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="almtoolkit.pbitool.json" />
<None Include="app.manifest" />
<None Include="html-resources\.angular-cli.json" />
<None Include="html-resources\.editorconfig" />
<None Include="html-resources\e2e\tsconfig.e2e.json" />
<None Include="html-resources\package-lock.json" />
<None Include="html-resources\package.json" />
<None Include="html-resources\src\assets\.gitkeep" />
<None Include="html-resources\src\tsconfig.app.json" />
<None Include="html-resources\src\tsconfig.spec.json" />
<None Include="html-resources\tsconfig.json" />
<None Include="html-resources\tslint.json" />
<None Include="License.rtf" />
<None Include="packages.config" />
<EmbeddedResource Include="WarningListForm.resx">
<DependentUpon>WarningListForm.cs</DependentUpon>
</EmbeddedResource>
<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>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include="BismNorm.ico" />
<Content Include="html-resources\dist\0.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\1.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\10.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\11.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\12.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\13.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\14.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\15.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\16.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\17.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\18.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\19.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\2.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\20.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\21.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\22.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\23.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\24.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\25.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\26.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\27.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\28.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\29.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\3.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\30.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\31.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\32.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\33.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\34.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\35.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\36.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\37.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\38.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\39.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\3rdpartylicenses.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\4.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\40.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\41.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\42.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\43.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\5.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\6.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\7.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\8.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\9.chunk.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\assets\action-Create-Grey.png" />
<Content Include="html-resources\dist\assets\action-Create.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\assets\action-Delete-Grey.png" />
<Content Include="html-resources\dist\assets\action-Delete.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\assets\action-Skip-Grey.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\assets\action-Skip.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\assets\action-Update.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\assets\dropdown.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\assets\node-type-Action.png" />
<Content Include="html-resources\dist\assets\node-type-Model.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\assets\node-type-Calculation-Group.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\assets\node-type-Culture.png" />
<Content Include="html-resources\dist\assets\node-type-Data-Source.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\assets\node-type-Expression.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\assets\node-type-Calculation-Item.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\assets\node-type-KPI.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\assets\node-type-Measure.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\assets\node-type-Perspective.png" />
<Content Include="html-resources\dist\assets\node-type-Refresh-Policy.png" />
<Content Include="html-resources\dist\assets\node-type-Relationship.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\assets\node-type-Role.png" />
<Content Include="html-resources\dist\assets\node-type-Table.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\favicon.ico">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\index.html">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\inline.bundle.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\main.bundle.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\polyfills.bundle.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\styles.bundle.css">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\dist\symbol-sprite.svg">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\karma.conf.js" />
<Content Include="html-resources\protractor.conf.js" />
<Content Include="html-resources\src\app\app.component.css" />
<Content Include="html-resources\src\app\app.component.html" />
<Content Include="html-resources\src\app\codeeditor\codeeditor.component.css" />
<Content Include="html-resources\src\app\codeeditor\codeeditor.component.html" />
<Content Include="html-resources\src\app\grid\grid.component.css" />
<Content Include="html-resources\src\app\grid\grid.component.html" />
<Content Include="html-resources\src\app\shared\model\database-objects.ts">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\src\app\tree-control-context-menu\tree-control-context-menu.component.css" />
<Content Include="html-resources\src\app\tree-control-context-menu\tree-control-context-menu.component.html" />
<Content Include="html-resources\src\app\tree-control-context-menu\tree-control-context-menu.component.spec.ts" />
<Content Include="html-resources\src\app\tree-control-context-menu\tree-control-context-menu.component.ts" />
<Content Include="html-resources\src\assets\action-Create-Grey.png" />
<Content Include="html-resources\src\assets\action-Create.png" />
<Content Include="html-resources\src\assets\action-Delete-Grey.png" />
<Content Include="html-resources\src\assets\action-Delete.png" />
<Content Include="html-resources\src\assets\action-Skip-Grey.png" />
<Content Include="html-resources\src\assets\action-Skip.png" />
<Content Include="html-resources\src\assets\action-Update.png" />
<Content Include="html-resources\src\assets\dropdown.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\src\assets\node-type-Action.png" />
<Content Include="html-resources\src\assets\node-type-Calculation-Group.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\src\assets\node-type-Calculation-Item.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\src\assets\node-type-Culture.png" />
<Content Include="html-resources\src\assets\node-type-Data-Source.png" />
<Content Include="html-resources\src\assets\node-type-Expression.png" />
<Content Include="html-resources\src\assets\node-type-KPI.png" />
<Content Include="html-resources\src\assets\node-type-Measure.png" />
<Content Include="html-resources\src\assets\node-type-Model.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="html-resources\src\assets\node-type-Perspective.png" />
<Content Include="html-resources\src\assets\node-type-Refresh-Policy.png" />
<Content Include="html-resources\src\assets\node-type-Relationship.png" />
<Content Include="html-resources\src\assets\node-type-Role.png" />
<Content Include="html-resources\src\assets\node-type-Table.png" />
<Content Include="html-resources\src\favicon.ico" />
<Content Include="html-resources\src\index.html" />
<Content Include="html-resources\src\styles.css" />
<Content Include="Images\AlmToolkit.ico" />
<Content Include="Images\BismNormalizerBanner.png" />
<Content Include="Images\Compare.png" />
<Content Include="Images\Exit.png" />
<Content Include="Images\Help.png" />
<Content Include="Images\MAQSoftware.png" />
<Content Include="Images\Open.png" />
<Content Include="Images\Options.png" />
<Content Include="Images\PowerBi.png" />
<Content Include="Images\Report.png" />
<Content Include="Images\Save.png" />
<Content Include="Images\SaveAs.png" />
<Content Include="Images\Script.png" />
<Content Include="Images\SelectActions.png" />
<Content Include="Images\Update.png" />
<Content Include="Images\Validate.png" />
<Content Include="ReleaseProcess.txt" />
<None Include="System.Windows.Forms.Ribbon.dll.copy-rename" />
</ItemGroup>
<ItemGroup>
<TypeScriptCompile Include="html-resources\e2e\app.e2e-spec.ts" />
<TypeScriptCompile Include="html-resources\e2e\app.po.ts" />
<TypeScriptCompile Include="html-resources\src\app\app-log\app-log.service.spec.ts" />
<TypeScriptCompile Include="html-resources\src\app\app-log\app-log.service.ts" />
<TypeScriptCompile Include="html-resources\src\app\app.component.spec.ts" />
<TypeScriptCompile Include="html-resources\src\app\app.component.ts" />
<TypeScriptCompile Include="html-resources\src\app\app.module.ts" />
<TypeScriptCompile Include="html-resources\src\app\codeeditor\codeeditor.component.spec.ts" />
<TypeScriptCompile Include="html-resources\src\app\codeeditor\codeeditor.component.ts" />
<TypeScriptCompile Include="html-resources\src\app\grid\grid.component.spec.ts" />
<TypeScriptCompile Include="html-resources\src\app\grid\grid.component.ts" />
<TypeScriptCompile Include="html-resources\src\app\service\grid-data.service.spec.ts" />
<TypeScriptCompile Include="html-resources\src\app\service\grid-data.service.ts" />
<TypeScriptCompile Include="html-resources\src\app\service\window-reference.service.spec.ts" />
<TypeScriptCompile Include="html-resources\src\app\service\window-reference.service.ts" />
<TypeScriptCompile Include="html-resources\src\app\shared\mocks\data-list.ts" />
<TypeScriptCompile Include="html-resources\src\app\shared\model\comparison-node.ts" />
<TypeScriptCompile Include="html-resources\src\environments\environment.prod.ts" />
<TypeScriptCompile Include="html-resources\src\environments\environment.ts" />
<TypeScriptCompile Include="html-resources\src\main.ts" />
<TypeScriptCompile Include="html-resources\src\polyfills.ts" />
<TypeScriptCompile Include="html-resources\src\test.ts" />
<TypeScriptCompile Include="html-resources\src\typings.d.ts" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\BismNormalizer\BismNormalizer.csproj">
<Project>{8e68fb9b-73df-4bc3-9c56-760c87078d13}</Project>
<Name>BismNormalizer</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\cef.redist.x64.3.3239.1723\build\cef.redist.x64.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\cef.redist.x64.3.3239.1723\build\cef.redist.x64.props'))" />
<Error Condition="!Exists('..\packages\cef.redist.x86.3.3239.1723\build\cef.redist.x86.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\cef.redist.x86.3.3239.1723\build\cef.redist.x86.props'))" />
<Error Condition="!Exists('..\packages\CefSharp.Common.63.0.3\build\CefSharp.Common.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\CefSharp.Common.63.0.3\build\CefSharp.Common.props'))" />
<Error Condition="!Exists('..\packages\CefSharp.Common.63.0.3\build\CefSharp.Common.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\CefSharp.Common.63.0.3\build\CefSharp.Common.targets'))" />
<Error Condition="!Exists('..\packages\CefSharp.WinForms.63.0.3\build\CefSharp.WinForms.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\CefSharp.WinForms.63.0.3\build\CefSharp.WinForms.props'))" />
<Error Condition="!Exists('..\packages\CefSharp.WinForms.63.0.3\build\CefSharp.WinForms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\CefSharp.WinForms.63.0.3\build\CefSharp.WinForms.targets'))" />
</Target>
<Import Project="..\packages\CefSharp.Common.63.0.3\build\CefSharp.Common.targets" Condition="Exists('..\packages\CefSharp.Common.63.0.3\build\CefSharp.Common.targets')" />
<Import Project="..\packages\CefSharp.WinForms.63.0.3\build\CefSharp.WinForms.targets" Condition="Exists('..\packages\CefSharp.WinForms.63.0.3\build\CefSharp.WinForms.targets')" />
</Project>

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="x86" />
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Identity.Client" publicKeyToken="0a613f4dd989e8ae" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.56.0.0" newVersion="4.56.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<System.Windows.Forms.ApplicationConfigurationSection>
<add key="DpiAwareness" value="PerMonitorV1" />
</System.Windows.Forms.ApplicationConfigurationSection>
</configuration>

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

View File

@ -0,0 +1,29 @@
namespace AlmToolkit
{
using CefSharp;
using CefSharp.WinForms;
class ChromeDebugger
{
// Declare a local instance of chromium and the main form in order to execute things from here in the main thread
private static ChromiumWebBrowser _instanceBrowser = null;
// The form class needs to be changed according to yours
private static ComparisonForm _instanceMainForm = null;
public ChromeDebugger(ChromiumWebBrowser originalBrowser, ComparisonForm mainForm)
{
_instanceBrowser = originalBrowser;
_instanceMainForm = mainForm;
}
/// <summary>
/// Used for debugging chrome application embedded in Form
/// </summary>
public void showDevTools()
{
_instanceBrowser.ShowDevTools();
}
}
}

View File

@ -0,0 +1,248 @@
namespace AlmToolkit
{
partial class ComparisonControl
{
/// <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 Component 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.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ComparisonControl));
this.scDifferenceResults = new System.Windows.Forms.SplitContainer();
this.treeGridComparisonResults = new BismNormalizer.TabularCompare.UI.TreeGridViewComparison();
this.TreeGridImageList = new System.Windows.Forms.ImageList(this.components);
this.scObjectDefinitions = new System.Windows.Forms.SplitContainer();
this.txtSourceObjectDefinition = new BismNormalizer.TabularCompare.UI.SynchronizedScrollRichTextBox();
this.label4 = new System.Windows.Forms.Label();
this.txtTargetObjectDefinition = new BismNormalizer.TabularCompare.UI.SynchronizedScrollRichTextBox();
this.label5 = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.scDifferenceResults)).BeginInit();
this.scDifferenceResults.Panel1.SuspendLayout();
this.scDifferenceResults.Panel2.SuspendLayout();
this.scDifferenceResults.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.treeGridComparisonResults)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.scObjectDefinitions)).BeginInit();
this.scObjectDefinitions.Panel1.SuspendLayout();
this.scObjectDefinitions.Panel2.SuspendLayout();
this.scObjectDefinitions.SuspendLayout();
this.SuspendLayout();
//
// scDifferenceResults
//
this.scDifferenceResults.Dock = System.Windows.Forms.DockStyle.Fill;
this.scDifferenceResults.Location = new System.Drawing.Point(0, 0);
this.scDifferenceResults.Name = "scDifferenceResults";
this.scDifferenceResults.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// scDifferenceResults.Panel1
//
this.scDifferenceResults.Panel1.Controls.Add(this.treeGridComparisonResults);
//
// scDifferenceResults.Panel2
//
this.scDifferenceResults.Panel2.Controls.Add(this.scObjectDefinitions);
this.scDifferenceResults.Size = new System.Drawing.Size(653, 565);
this.scDifferenceResults.SplitterDistance = 411;
this.scDifferenceResults.TabIndex = 2;
//
// treeGridComparisonResults
//
this.treeGridComparisonResults.AllowUserToAddRows = false;
this.treeGridComparisonResults.AllowUserToDeleteRows = false;
this.treeGridComparisonResults.AllowUserToResizeRows = false;
this.treeGridComparisonResults.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control;
dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;
dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.treeGridComparisonResults.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
this.treeGridComparisonResults.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.treeGridComparisonResults.Comparison = null;
dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window;
dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText;
dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
this.treeGridComparisonResults.DefaultCellStyle = dataGridViewCellStyle2;
this.treeGridComparisonResults.Dock = System.Windows.Forms.DockStyle.Fill;
this.treeGridComparisonResults.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter;
this.treeGridComparisonResults.ImageList = this.TreeGridImageList;
this.treeGridComparisonResults.Location = new System.Drawing.Point(0, 0);
this.treeGridComparisonResults.Name = "treeGridComparisonResults";
this.treeGridComparisonResults.RowHeadersVisible = false;
this.treeGridComparisonResults.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect;
this.treeGridComparisonResults.Size = new System.Drawing.Size(653, 411);
this.treeGridComparisonResults.TabIndex = 0;
this.treeGridComparisonResults.Unloading = false;
this.treeGridComparisonResults.DataError += new System.Windows.Forms.DataGridViewDataErrorEventHandler(this.treeGridComparisonResults_DataError);
this.treeGridComparisonResults.MouseUp += new System.Windows.Forms.MouseEventHandler(this.treeGridComparisonResults_MouseUp);
//
// TreeGridImageList
//
this.TreeGridImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("TreeGridImageList.ImageStream")));
this.TreeGridImageList.TransparentColor = System.Drawing.Color.Transparent;
this.TreeGridImageList.Images.SetKeyName(0, "Connection.png");
this.TreeGridImageList.Images.SetKeyName(1, "Table.png");
this.TreeGridImageList.Images.SetKeyName(2, "Relationship.png");
this.TreeGridImageList.Images.SetKeyName(3, "BismMeasure.png");
this.TreeGridImageList.Images.SetKeyName(4, "KPI.png");
this.TreeGridImageList.Images.SetKeyName(5, "DeleteAction.png");
this.TreeGridImageList.Images.SetKeyName(6, "UpdateAction.png");
this.TreeGridImageList.Images.SetKeyName(7, "CreateAction.png");
this.TreeGridImageList.Images.SetKeyName(8, "SkipAction.png");
this.TreeGridImageList.Images.SetKeyName(9, "Plus.png");
this.TreeGridImageList.Images.SetKeyName(10, "Minus.png");
this.TreeGridImageList.Images.SetKeyName(11, "Informational.png");
this.TreeGridImageList.Images.SetKeyName(12, "Warning.png");
this.TreeGridImageList.Images.SetKeyName(13, "WarningToolWindow.png");
this.TreeGridImageList.Images.SetKeyName(14, "Role.png");
this.TreeGridImageList.Images.SetKeyName(15, "Perspective.png");
this.TreeGridImageList.Images.SetKeyName(16, "Action.png");
this.TreeGridImageList.Images.SetKeyName(17, "CompareBismModels_Small.png");
this.TreeGridImageList.Images.SetKeyName(18, "DeleteActionGrey.png");
this.TreeGridImageList.Images.SetKeyName(19, "SkipActionGrey.png");
this.TreeGridImageList.Images.SetKeyName(20, "CreateActionGrey.png");
this.TreeGridImageList.Images.SetKeyName(21, "Culture.png");
this.TreeGridImageList.Images.SetKeyName(22, "Expression.png");
this.TreeGridImageList.Images.SetKeyName(23, "CalculationGroup.png");
this.TreeGridImageList.Images.SetKeyName(24, "CalculationItem.png");
this.TreeGridImageList.Images.SetKeyName(25, "Model.png");
this.TreeGridImageList.Images.SetKeyName(26, "RefreshPolicy.png");
//
// scObjectDefinitions
//
this.scObjectDefinitions.Dock = System.Windows.Forms.DockStyle.Fill;
this.scObjectDefinitions.Location = new System.Drawing.Point(0, 0);
this.scObjectDefinitions.Name = "scObjectDefinitions";
//
// scObjectDefinitions.Panel1
//
this.scObjectDefinitions.Panel1.BackColor = System.Drawing.SystemColors.Control;
this.scObjectDefinitions.Panel1.Controls.Add(this.txtSourceObjectDefinition);
this.scObjectDefinitions.Panel1.Controls.Add(this.label4);
//
// scObjectDefinitions.Panel2
//
this.scObjectDefinitions.Panel2.BackColor = System.Drawing.SystemColors.Control;
this.scObjectDefinitions.Panel2.Controls.Add(this.txtTargetObjectDefinition);
this.scObjectDefinitions.Panel2.Controls.Add(this.label5);
this.scObjectDefinitions.Size = new System.Drawing.Size(653, 150);
this.scObjectDefinitions.SplitterDistance = 331;
this.scObjectDefinitions.TabIndex = 0;
//
// txtSourceObjectDefinition
//
this.txtSourceObjectDefinition.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtSourceObjectDefinition.BackColor = System.Drawing.Color.White;
this.txtSourceObjectDefinition.Font = new System.Drawing.Font("Consolas", 9.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.txtSourceObjectDefinition.Location = new System.Drawing.Point(0, 16);
this.txtSourceObjectDefinition.Name = "txtSourceObjectDefinition";
this.txtSourceObjectDefinition.ReadOnly = true;
this.txtSourceObjectDefinition.Size = new System.Drawing.Size(331, 134);
this.txtSourceObjectDefinition.TabIndex = 1;
this.txtSourceObjectDefinition.Text = "";
this.txtSourceObjectDefinition.WordWrap = false;
this.txtSourceObjectDefinition.vScroll += new BismNormalizer.TabularCompare.UI.SynchronizedScrollRichTextBox.vScrollEventHandler(this.txtSourceObjectDefinition_vScroll);
this.txtSourceObjectDefinition.KeyUp += new System.Windows.Forms.KeyEventHandler(this.txtSourceObjectDefinition_KeyUp);
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(4, 1);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(122, 13);
this.label4.TabIndex = 0;
this.label4.Text = "Source Object Definition";
//
// txtTargetObjectDefinition
//
this.txtTargetObjectDefinition.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtTargetObjectDefinition.BackColor = System.Drawing.Color.White;
this.txtTargetObjectDefinition.Font = new System.Drawing.Font("Consolas", 9.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.txtTargetObjectDefinition.Location = new System.Drawing.Point(0, 16);
this.txtTargetObjectDefinition.Name = "txtTargetObjectDefinition";
this.txtTargetObjectDefinition.ReadOnly = true;
this.txtTargetObjectDefinition.Size = new System.Drawing.Size(313, 134);
this.txtTargetObjectDefinition.TabIndex = 2;
this.txtTargetObjectDefinition.Text = "";
this.txtTargetObjectDefinition.WordWrap = false;
this.txtTargetObjectDefinition.vScroll += new BismNormalizer.TabularCompare.UI.SynchronizedScrollRichTextBox.vScrollEventHandler(this.txtTargetObjectDefinition_vScroll);
this.txtTargetObjectDefinition.KeyUp += new System.Windows.Forms.KeyEventHandler(this.txtTargetObjectDefinition_KeyUp);
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(3, 1);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(119, 13);
this.label5.TabIndex = 1;
this.label5.Text = "Target Object Definition";
//
// ComparisonControl
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.scDifferenceResults);
this.Name = "ComparisonControl";
this.Size = new System.Drawing.Size(653, 565);
this.Load += new System.EventHandler(this.ComparisonControl_Load);
this.scDifferenceResults.Panel1.ResumeLayout(false);
this.scDifferenceResults.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.scDifferenceResults)).EndInit();
this.scDifferenceResults.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.treeGridComparisonResults)).EndInit();
this.scObjectDefinitions.Panel1.ResumeLayout(false);
this.scObjectDefinitions.Panel1.PerformLayout();
this.scObjectDefinitions.Panel2.ResumeLayout(false);
this.scObjectDefinitions.Panel2.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.scObjectDefinitions)).EndInit();
this.scObjectDefinitions.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private BismNormalizer.TabularCompare.UI.TreeGridViewComparison treeGridComparisonResults;
private System.Windows.Forms.SplitContainer scDifferenceResults;
private System.Windows.Forms.SplitContainer scObjectDefinitions;
private BismNormalizer.TabularCompare.UI.SynchronizedScrollRichTextBox txtSourceObjectDefinition;
private System.Windows.Forms.Label label4;
private BismNormalizer.TabularCompare.UI.SynchronizedScrollRichTextBox txtTargetObjectDefinition;
private System.Windows.Forms.Label label5;
public System.Windows.Forms.ImageList TreeGridImageList;
}
}

View File

@ -0,0 +1,661 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
using System.Windows.Forms;
using BismNormalizer;
using BismNormalizer.TabularCompare;
using BismNormalizer.TabularCompare.UI;
using BismNormalizer.TabularCompare.Core;
using System.Runtime.InteropServices;
using System.Linq;
namespace AlmToolkit
{
public enum CompareState { NotCompared, Compared, Validated };
/// <summary>
/// The main comparison control, containing the differences grid, and source/target object definition text boxes.
/// </summary>
public partial class ComparisonControl : UserControl
{
#region Private variables
private ComparisonInfo _comparisonInfo;
private Comparison _comparison;
private ContextMenu _menuComparisonGrid = new ContextMenu();
private CompareState _compareState = CompareState.NotCompared;
#endregion
#region Public properties
public ComparisonInfo ComparisonInfo
{
get { return _comparisonInfo; }
set { _comparisonInfo = value; }
}
public Comparison Comparison
{
get { return _comparison; }
set { _comparison = value; }
}
public CompareState CompareState
{
get { return _compareState; }
set { _compareState = value; }
}
#endregion
#region DiffVariables
// this is the diff object;
DiffMatchPatch _diff = new DiffMatchPatch();
// these are the diffs
List<Diff> _diffs;
// chunks for formatting the two RTBs:
List<Chunk> _chunklistSource;
List<Chunk> _chunklistTarget;
// color list:
Color[] _backColors = new Color[3] { ColorTranslator.FromHtml("#e2f6c5"), ColorTranslator.FromHtml("#ffd6d5"), Color.White, };
Color[] _backColorsMerge = new Color[3] { ColorTranslator.FromHtml("#e2f6c5"), Color.LightGray, Color.White, };
public struct Chunk
{
public int StartPosition;
public int Length;
public Color BackColor;
}
#endregion
#region DPI
private float _dpiScaleFactor = 1;
private void Rescale()
{
this._dpiScaleFactor = HighDPIUtils.GetDpiFactor();
if (this._dpiScaleFactor == 1) return;
float fudgedDpiScaleFactor = _dpiScaleFactor * HighDPIUtils.PrimaryFudgeFactor;
this.Scale(new SizeF(fudgedDpiScaleFactor, fudgedDpiScaleFactor));
this.Font = new Font(this.Font.FontFamily,
this.Font.Size * fudgedDpiScaleFactor,
this.Font.Style);
scDifferenceResults.Font = new Font(scDifferenceResults.Font.FontFamily,
scDifferenceResults.Font.Size * fudgedDpiScaleFactor,
scDifferenceResults.Font.Style);
// set up splitter distance/widths/visibility
scDifferenceResults.SplitterDistance = Convert.ToInt32(Convert.ToDouble(scDifferenceResults.Height) * 0.74);
scObjectDefinitions.SplitterDistance = Convert.ToInt32(Convert.ToDouble(scObjectDefinitions.Width) * 0.5);
scDifferenceResults.IsSplitterFixed = false;
txtSourceObjectDefinition.Width = scObjectDefinitions.Panel1.Width;
txtSourceObjectDefinition.Height = Convert.ToInt32(Convert.ToDouble(scObjectDefinitions.Panel1.Height) * 0.86);
txtTargetObjectDefinition.Width = scObjectDefinitions.Panel2.Width;
txtTargetObjectDefinition.Height = Convert.ToInt32(Convert.ToDouble(scObjectDefinitions.Panel2.Height) * 0.86);
if (_dpiScaleFactor > 1) HighDPIUtils.ScaleStreamedImageListByDpi(TreeGridImageList);
treeGridComparisonResults.ResetColumnWidths(fudgedDpiScaleFactor);
}
#endregion
#region Methods
public ComparisonControl()
{
InitializeComponent();
}
private void ComparisonControl_Load(object sender, EventArgs e)
{
treeGridComparisonResults.SetupForComparison();
treeGridComparisonResults.SetObjectDefinitionsCallBack(PopulateObjectDefinitions);
treeGridComparisonResults.SetCellEditCallBack(TriggerComparisonChanged);
_menuComparisonGrid.MenuItems.Add("Skip selected objects", new EventHandler(Skip_Select));
_menuComparisonGrid.MenuItems.Add("Create selected objects Missing in Target", new EventHandler(Create_Select));
_menuComparisonGrid.MenuItems.Add("Delete selected objects Missing in Source", new EventHandler(Delete_Select));
_menuComparisonGrid.MenuItems.Add("Update selected objects with Different Definitions", new EventHandler(Update_Select));
//hdpi
Rescale();
}
public void TriggerComparisonChanged()
{
EventHandler handler = ComparisonChanged;
if (handler != null)
{
handler(this, new EventArgs());
}
}
private void txt_KeyDown(object sender, KeyEventArgs e)
{
e.SuppressKeyPress = true;
}
public void SetNotComparedState()
{
_compareState = CompareState.NotCompared;
treeGridComparisonResults.Unloading = true;
treeGridComparisonResults.Nodes.Clear();
treeGridComparisonResults.Unloading = false;
txtSourceObjectDefinition.Text = "";
txtTargetObjectDefinition.Text = "";
//txtSource.Text = "";
//txtTarget.Text = "";
//Just in case did an AMO comparison and messed up the fonts
txtSourceObjectDefinition.Font = new System.Drawing.Font("Consolas", 9.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
txtTargetObjectDefinition.Font = new System.Drawing.Font("Consolas", 9.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
}
public void SetComparedState()
{
_compareState = CompareState.Compared;
}
public void SetValidatedState()
{
_compareState = CompareState.Validated;
}
private void Skip_Select(object sender, EventArgs e)
{
treeGridComparisonResults.SkipItems(true);
}
private void Create_Select(object sender, EventArgs e)
{
treeGridComparisonResults.CreateItems(true);
}
private void Update_Select(object sender, EventArgs e)
{
treeGridComparisonResults.UpdateItems(true);
}
private void Delete_Select(object sender, EventArgs e)
{
treeGridComparisonResults.DeleteItems(true);
}
private void treeGridComparisonResults_MouseUp(object sender, MouseEventArgs e)
{
// Load context menu on right mouse click
if (e.Button == MouseButtons.Right)
{
_menuComparisonGrid.Show(treeGridComparisonResults, new Point(e.X, e.Y));
}
}
private void PopulateObjectDefinitions(string objDefSource, string objDefTarget, ComparisonObjectType objType, ComparisonObjectStatus objStatus)
{
try
{
IterateJson(txtSourceObjectDefinition, objDefSource);
IterateJson(txtTargetObjectDefinition, objDefTarget);
}
catch (Exception)
{
txtSourceObjectDefinition.Text = "";
txtSourceObjectDefinition.Text = objDefSource;
txtTargetObjectDefinition.Text = "";
txtTargetObjectDefinition.Text = objDefTarget;
}
#region Difference Highlighting
if ( objStatus == ComparisonObjectStatus.DifferentDefinitions ||
(objStatus == ComparisonObjectStatus.SameDefinition && objType == ComparisonObjectType.Perspective && _comparisonInfo.OptionsInfo.OptionMergePerspectives) ||
(objStatus == ComparisonObjectStatus.SameDefinition && objType == ComparisonObjectType.Culture && _comparisonInfo.OptionsInfo.OptionMergeCultures)
)
{
_diffs = _diff.diff_main(objDefSource, objDefTarget);
_diff.diff_cleanupSemantic(_diffs);
//_diff.diff_cleanupSemanticLossless(_diffs);
//_diff.diff_cleanupEfficiency(_diffs);
// NG: Evaluate if this needs to be added
//Are we merging perspectives/cultures?
if ( (objType == ComparisonObjectType.Perspective && _comparisonInfo.OptionsInfo.OptionMergePerspectives) ||
(objType == ComparisonObjectType.Culture && _comparisonInfo.OptionsInfo.OptionMergeCultures)
)
{
_chunklistSource = CollectChunks(source: true, backColors: _backColorsMerge);
_chunklistTarget = CollectChunks(source: false, backColors: _backColorsMerge);
//If same definition with merge perspectives/cultures option, just want to highlight differences in target that will not be applied, so do not paint chunks for source
if (objStatus == ComparisonObjectStatus.DifferentDefinitions)
{
PaintChunks(txtSourceObjectDefinition, _chunklistSource);
}
PaintChunks(txtTargetObjectDefinition, _chunklistTarget);
}
else
{
_chunklistSource = CollectChunks(source: true, backColors: _backColors);
_chunklistTarget = CollectChunks(source: false, backColors: _backColors);
PaintChunks(txtSourceObjectDefinition, _chunklistSource);
PaintChunks(txtTargetObjectDefinition, _chunklistTarget);
}
}
#endregion
//select 1st characters so not scrolled at bottom
if (txtSourceObjectDefinition.Text != "")
{
txtSourceObjectDefinition.SelectionStart = 0;
txtSourceObjectDefinition.SelectionLength = 0;
txtSourceObjectDefinition.ScrollToCaret();
}
if (txtTargetObjectDefinition.Text != "")
{
txtTargetObjectDefinition.SelectionStart = 0;
txtTargetObjectDefinition.SelectionLength = 0;
txtTargetObjectDefinition.ScrollToCaret();
}
}
#region Text formatting private methods
private void IterateJson(RichTextBox textBox, string text)
{
System.Diagnostics.Debug.WriteLine("In ColorCodeJson for {0}", textBox.Name);
textBox.Text = "";
if (String.IsNullOrEmpty(text))
return;
int start = 0;
int end = 0;
bool inString = false;
while ((end = text.IndexOf('"', start + 1)) != -1)
{
int length = end - start;
//following to ensure close bracket gets same color
if (start > 0)
{
if (inString)
length += 1;
else
{
start += 1;
length -= 1;
}
}
Color color = Color.Black;
if (inString)
{
if (text.Substring(start + length, 1) == ":")
color = Color.SteelBlue;
else
color = Color.Brown;
}
AppendText(textBox, color, text.Substring(start, length));
start = end;
inString = !inString;
}
//close out the last string
start += 1;
AppendText(textBox, Color.Black, text.Substring(start, text.Length - start));
}
private void AppendText(RichTextBox textBox, Color color, string text)
{
int start = textBox.TextLength;
textBox.AppendText(text);
int end = textBox.TextLength;
// Textbox may transform chars, so (end-start) != text.Length
textBox.Select(start, end - start);
{
textBox.SelectionColor = color;
// could set box.SelectionBackColor, box.SelectionFont too.
}
textBox.SelectionLength = 0; // clear
}
private List<Chunk> CollectChunks(bool source, Color[] backColors)
{
RichTextBox textBox = new RichTextBox();
textBox.Text = "";
List<Chunk> chunkList = new List<Chunk>();
foreach (Diff diff in _diffs)
{
if (!source && diff.operation == Operation.DELETE)
continue; // **
if (source && diff.operation == Operation.INSERT)
continue; // **
Chunk chunk = new Chunk();
int length = textBox.TextLength;
textBox.AppendText(diff.text);
chunk.StartPosition = length;
chunk.Length = diff.text.Length;
chunk.BackColor = backColors[(int)diff.operation];
chunkList.Add(chunk);
}
return chunkList;
}
private void PaintChunks(RichTextBox textBox, List<Chunk> theChunks)
{
foreach (Chunk chunk in theChunks)
{
textBox.Select(chunk.StartPosition, chunk.Length);
textBox.SelectionBackColor = chunk.BackColor;
}
}
private void FormatAmoDefinitions(string objDefSource, string objDefTarget, ComparisonObjectType objType)
{
ClearObjDefFormatting(txtSourceObjectDefinition);
ClearObjDefFormatting(txtTargetObjectDefinition);
txtSourceObjectDefinition.Text = objDefSource;
txtSourceObjectDefinition.SelectAll();
txtSourceObjectDefinition.SelectionFont = new Font("Lucida Console", 9, FontStyle.Regular);
if (objType == ComparisonObjectType.Table)
{
SetObjDefFontBold("Base Columns:", txtSourceObjectDefinition);
SetObjDefFontBold("Calculated Columns:", txtSourceObjectDefinition);
SetObjDefFontBold("Columns:", txtSourceObjectDefinition);
SetObjDefFontBold("Hierarchies:", txtSourceObjectDefinition);
SetObjDefFontBold("Format & Visibility:", txtSourceObjectDefinition);
SetObjDefFontBold("Partitions:", txtSourceObjectDefinition);
}
else if (objType == ComparisonObjectType.Measure)
{
SetObjDefFontBold("Expression:", txtSourceObjectDefinition);
SetObjDefFontBold("Format & Visibility:", txtSourceObjectDefinition);
}
else if (objType == ComparisonObjectType.Kpi)
{
SetObjDefFontBold("Expression:", txtSourceObjectDefinition);
SetObjDefFontBold("Format & Visibility:", txtSourceObjectDefinition);
SetObjDefFontBold("Goal:", txtSourceObjectDefinition);
SetObjDefFontBold("Status:", txtSourceObjectDefinition);
SetObjDefFontBold("Trend:", txtSourceObjectDefinition);
SetObjDefFontBold("Status Graphic:", txtSourceObjectDefinition);
SetObjDefFontBold("Trend Graphic:", txtSourceObjectDefinition);
}
else if (objType == ComparisonObjectType.CalculationItem)
{
SetObjDefFontBold("Expression:", txtSourceObjectDefinition);
SetObjDefFontBold("Format & Visibility:", txtSourceObjectDefinition);
}
else if (objType == ComparisonObjectType.Role)
{
SetObjDefFontBold("Permissions:", txtSourceObjectDefinition);
SetObjDefFontBold("Row Filters:", txtSourceObjectDefinition);
SetObjDefFontBold("Members:", txtSourceObjectDefinition);
}
else if (objType == ComparisonObjectType.Perspective) //Cultures not supported by AMO version
{
SetObjDefFontBold("Format & Visibility:", txtSourceObjectDefinition);
}
else if (objType == ComparisonObjectType.Action)
{
SetObjDefFontBold("Expression:", txtSourceObjectDefinition);
SetObjDefFontBold("Drillthrough Columns:", txtSourceObjectDefinition);
SetObjDefFontBold("Report Parameters:", txtSourceObjectDefinition);
SetObjDefFontBold("Format & Visibility:", txtSourceObjectDefinition);
}
txtTargetObjectDefinition.Text = objDefTarget;
txtTargetObjectDefinition.SelectAll();
txtTargetObjectDefinition.SelectionFont = new Font("Lucida Console", 9, FontStyle.Regular);
if (objType == ComparisonObjectType.Table)
{
SetObjDefFontBold("Base Columns:", txtTargetObjectDefinition);
SetObjDefFontBold("Calculated Columns:", txtTargetObjectDefinition);
SetObjDefFontBold("Columns:", txtTargetObjectDefinition);
SetObjDefFontBold("Hierarchies:", txtTargetObjectDefinition);
SetObjDefFontBold("Format & Visibility:", txtTargetObjectDefinition);
SetObjDefFontBold("Partitions:", txtTargetObjectDefinition);
}
else if (objType == ComparisonObjectType.Measure)
{
SetObjDefFontBold("Expression:", txtTargetObjectDefinition);
SetObjDefFontBold("Format & Visibility:", txtTargetObjectDefinition);
}
else if (objType == ComparisonObjectType.Kpi)
{
SetObjDefFontBold("Expression:", txtTargetObjectDefinition);
SetObjDefFontBold("Format & Visibility:", txtTargetObjectDefinition);
SetObjDefFontBold("Goal:", txtTargetObjectDefinition);
SetObjDefFontBold("Status:", txtTargetObjectDefinition);
SetObjDefFontBold("Trend:", txtTargetObjectDefinition);
SetObjDefFontBold("Status Graphic:", txtTargetObjectDefinition);
SetObjDefFontBold("Trend Graphic:", txtTargetObjectDefinition);
}
else if (objType == ComparisonObjectType.CalculationItem)
{
SetObjDefFontBold("Expression:", txtTargetObjectDefinition);
SetObjDefFontBold("Format & Visibility:", txtTargetObjectDefinition);
}
else if (objType == ComparisonObjectType.Role)
{
SetObjDefFontBold("Permissions:", txtTargetObjectDefinition);
SetObjDefFontBold("Row Filters:", txtTargetObjectDefinition);
SetObjDefFontBold("Members:", txtTargetObjectDefinition);
}
else if (objType == ComparisonObjectType.Perspective) //Cultures not supported by AMO version
{
SetObjDefFontBold("Format & Visibility:", txtTargetObjectDefinition);
}
else if (objType == ComparisonObjectType.Action)
{
SetObjDefFontBold("Expression:", txtTargetObjectDefinition);
SetObjDefFontBold("Drillthrough Columns:", txtTargetObjectDefinition);
SetObjDefFontBold("Report Parameters:", txtTargetObjectDefinition);
SetObjDefFontBold("Format & Visibility:", txtTargetObjectDefinition);
}
}
private void ClearObjDefFormatting(RichTextBox txt)
{
txt.SelectAll();
txt.SelectionFont = new Font(txt.SelectionFont.Name, 9, FontStyle.Regular);
txt.SelectionBackColor = Color.White;
}
private void SetObjDefFontBold(string searchString, RichTextBox txt)
{
int startSelect;
startSelect = txt.Text.IndexOf(searchString);
if (startSelect != -1)
{
txt.Select(startSelect, searchString.Length);
txt.SelectionFont = new Font(txt.SelectionFont.Name, 10, FontStyle.Bold);
}
}
#endregion
public void DataBindComparison()
{
treeGridComparisonResults.Comparison = _comparison;
treeGridComparisonResults.DataBindComparison();
SetComparedState();
}
public void RefreshSkipSelections()
{
if (_compareState != CompareState.NotCompared && _comparison != null)
{
treeGridComparisonResults.RefreshDiffResultsFromGrid();
_comparison.RefreshSkipSelectionsFromComparisonObjects();
}
}
public void ShowHideNodes(bool hide, bool sameDefinitionFilter = false)
{
treeGridComparisonResults.ShowHideNodes(hide, sameDefinitionFilter);
}
/// <summary>
/// Sets Action property of objects to Skip within given range.
/// </summary>
/// <param name="selectedOnly"></param>
/// <param name="comparisonStatus"></param>
public void SkipItems(bool selectedOnly, ComparisonObjectStatus comparisonObjectStatus = ComparisonObjectStatus.Na) //Na because won't take null cos it's an enum
{
treeGridComparisonResults.SkipItems(selectedOnly, comparisonObjectStatus);
}
/// <summary>
/// Sets Action property of objects to Delete within given range.
/// </summary>
/// <param name="selectedOnly"></param>
public void DeleteItems(bool selectedOnly)
{
treeGridComparisonResults.DeleteItems(selectedOnly);
}
/// <summary>
/// Sets Action property of objects to Create within given range.
/// </summary>
/// <param name="selectedOnly"></param>
public void CreateItems(bool selectedOnly)
{
treeGridComparisonResults.CreateItems(selectedOnly);
}
/// <summary>
/// Sets Action property of objects to Update within given range.
/// </summary>
/// <param name="selectedOnly"></param>
public void UpdateItems(bool selectedOnly)
{
treeGridComparisonResults.UpdateItems(selectedOnly);
}
public void RefreshDiffResultsFromGrid()
{
treeGridComparisonResults.RefreshDiffResultsFromGrid();
}
#endregion
#region Event handlers
public EventHandler ComparisonChanged;
#region To Delete
//private Document NewXmlaFile(bool jsonEditor, string targetName)
//{
// try
// {
// //Generate next file name (if try to get NewFile method to do this by leaving filename param blank, the name will not have custom name and will not have xmla extension)
// int maxFileNameNumber = 1;
// int fileNameNumber;
// string fileName = targetName + "_UpdateScript";
// foreach (Window window in _bismNormalizerPackage.Dte.Windows)
// {
// if (window.Document != null &&
// window.Caption != null &&
// window.Caption.EndsWith(".xmla") &&
// window.Caption.Replace(".xmla", "").Length > fileName.Length &&
// window.Caption.Substring(0, fileName.Length) == fileName &&
// Int32.TryParse(window.Caption.Replace(".xmla", "").Remove(0, fileName.Length), out fileNameNumber)
// )
// {
// if (fileNameNumber >= maxFileNameNumber)
// {
// maxFileNameNumber = fileNameNumber + 1;
// }
// }
// }
// fileName += Convert.ToString(maxFileNameNumber) + (jsonEditor ? ".json" : ".xmla");
// return _bismNormalizerPackage.Dte.ItemOperations.NewFile(Name: fileName, ViewKind: Constants.vsViewKindCode).Document;
// }
// catch
// {
// return null;
// }
//}
#endregion
private void txtSourceObjectDefinition_vScroll(Message message)
{
message.HWnd = txtTargetObjectDefinition.Handle;
txtTargetObjectDefinition.PubWndProc(ref message);
}
private void txtTargetObjectDefinition_vScroll(Message message)
{
message.HWnd = txtSourceObjectDefinition.Handle;
txtSourceObjectDefinition.PubWndProc(ref message);
}
private void txtSourceObjectDefinition_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.PageDown ||
e.KeyCode == Keys.PageUp ||
(e.Modifiers == Keys.Control && e.KeyCode == Keys.End) ||
(e.Modifiers == Keys.Control && e.KeyCode == Keys.Home)
)
{
txtTargetObjectDefinition.SelectionStart = txtSourceObjectDefinition.SelectionStart;
txtTargetObjectDefinition.ScrollToCaret();
}
}
private void txtTargetObjectDefinition_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.PageDown ||
e.KeyCode == Keys.PageUp ||
(e.Modifiers == Keys.Control && e.KeyCode == Keys.End) ||
(e.Modifiers == Keys.Control && e.KeyCode == Keys.Home)
)
{
txtSourceObjectDefinition.SelectionStart = txtTargetObjectDefinition.SelectionStart;
txtSourceObjectDefinition.ScrollToCaret();
}
}
private void treeGridComparisonResults_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
if (!(e.Exception is ArgumentException)) //ignore ArgumentException because happens on hpi scaling
{
throw new Exception(e.Exception.Message, e.Exception);
}
}
#endregion
}
}

View File

@ -0,0 +1,538 @@
<?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>
<metadata name="TreeGridImageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="TreeGridImageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACI
XwAAAk1TRnQBSQFMAgEBGwEAAZQBAgGUAQIBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABcAMAAQEBAAEgBgABcBIAA8IBzwP2Af8D9gH/A4EBj4AAA/YB/wPgAewDawF4AwoBDAMKAQwDawF4
A+AB7AP1Af9QAAP2Af8DQQH/A0EB/wO+Af8DkAGfA2MBcAOBAY8DKAEwA2MBcAOQAZ8DVAFgOAAD9gH/
A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/EAAD9gH/A14B/wO4Af8D4AHsA+AB7AO4Af8DXgH/A+sB/1AA
A7EBvwP2Af8DpwH/A0wB/wP2Af8DyQH/A0EB/wPrAf8D1AH/A5EB/wPUAf8DcgGANAAD9gH/A0EB/wNB
Af8DQQH/A0EB/wNBAf8D9gH/EAAD9gH/A0EB/wFaAlkB/wNeAf8DXgH/A14B/wNBAf8D6wH/VAADKAEw
A9QB/wNBAf8DvgH/A8kB/wOcAf8DQQH/A24B/wNBAf8DnAH/A/YB/xgAA/YB/wP2Af8D9gH/A/YB/wP2
Af8D9gH/A/YB/wP2Af8DQQH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wP2Af8QAAP2Af8DQQH/
AeUB4wHkAf8DtQH/A7UB/wHwAe4B7wH/A0EB/wPrAf9YAAPkAe8DTAH/A5EB/wPRAd8DoQGvA74B/wNB
Af8DswH/A+QB7wNyAYAYAAP2Af8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wHxAe8B8AH/
AfEB7wHwAf8B8QHvAfAB/wNBAf8D9gH/EAAD9gH/A0EB/wHmAeQB5QH/AfEB7wHwAf8B8QHvAfAB/wHx
Ae8B8AH/A0EB/wPrAf9UAAMoATAD5AHvA3kB/wNjAf8D9gH/A/YB/wOzAf8DQQH/A6cB/wP2Af8DwgHP
GAAD9gH/A0EB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A/YB/xAA
A/YB/wNBAf8B5gHkAeUB/wHwAe4B7wH/AfAB7gHvAf8B8QHvAfAB/wNBAf8D6wH/VAADDQEQA/YB/wNB
Af8DQQH/A0EB/wOGAf8DTAH/A24B/wOGAf8DQQH/A/YB/wMNARAUAAP2Af8DQQH/A/YB/xAAA/YB/wNB
Af8DQQH/A0EB/wNBAf8DQQH/A/YB/xAAA/YB/wNBAf8DagH/A0YB/wNGAf8DbwH/A0EB/wPrAf9YAAPC
Ac8D4AH/A0wB/wOzAf8D1AH/A/YB/wPJAf8DpwH/A9QB/wPJAf8DwgHPFAAD9gH/A0EB/wP2Af8QAAP2
Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8MAAONAZwDtQH/A0sB/wGpAagBqQH/Ad8B3QHeAf8B3wHd
Ad4B/wGpAagBqQH/A0sB/wO0Af8DjQGcWAADgQGPA7MB/wNBAf8DQQH/A9QB/wNBAf8BjwKOAf8BjwKO
Af8DVwH/A7MB/wOQAZ8IAAP2Af8D9gH/A/YB/wNBAf8D9gH/A/YB/wP2Af8IAAP2Af8D9gH/A/YB/wP2
Af8D9gH/A/YB/wP2Af8IAAMdASMD5QH+A0sB/wHLAckBygH/AZgClwH/A0gB/wNIAf8BmAKXAf8BywHJ
AcoB/wNLAf8D5QH+Ax0BI1gAA4EBjwP2Af8D4AH/A5AB/wGkAaMBpAH/AdsB2QHaAf8B2wHZAdoB/wGk
AaMBpAH/A0EB/wPUAf8DYwFwBAAD9gH/A0EB/wNBAf8DQQH/A0EB/wNBAf8D9gH/CAAD9gH/A0EB/wNB
Af8DQQH/A0EB/wNBAf8D9gH/CAADXgFrA64B/wN0Af8BuwG6AbsB/wNTAf8BzwHOAc8B/wHPAc4BzwH/
A1MB/wG7AboBuwH/A3QB/wOuAf8DXgFrWAADRQFQA+sB/wNBAf8B0ALPAf8DQQH/AfEB7wHwAf8B8QHv
AfAB/wNBAf8B0ALPAf8DQQH/A+sB/wNFAVAD9gH/A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNB
Af8D9gH/A/YB/wP2Af8D9gH/A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8D9gH/CAADcwGB
A5sB/wOPAf8BmAGXAZgB/wGJAogB/wHxAe8B8AH/AfEB7wHwAf8BiQKIAf8BmAKXAf8DjwH/A5oB/wN0
AYJYAAPkAe8DYwH/AdACzwH/AcUBxAHFAf8BugG5AboB/wHxAe8B8AH/AfEB7wHwAf8BugG5AboB/wHF
AcQBxQH/AdACzwH/A0EB/wPkAe8D9gH/A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8DQQH/
A0EB/wNBAf8DQQH/A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8D9gH/CAADXgFrA64B/wN0
Af8BuwG6AbsB/wNTAf8BzwHOAc8B/wHPAc4BzwH/A1MB/wG7AboBuwH/A3QB/wOuAf8DXgFrWAAD9gH/
A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wP2Af8D9gH/A0EB/wNBAf8DQQH/
A0EB/wNBAf8D9gH/A/YB/wP2Af8D9gH/A0EB/wNBAf8DQQH/A0EB/wNBAf8D9gH/CAADIAEmA+YB/wNJ
Af8BywHJAcoB/wGYApcB/wNIAf8DSAH/AZgClwH/AcsByQHKAf8DSQH/A+YB/wMgASZYAAP2Af8DTAH/
Aa8BrgGvAf8B0ALPAf8BpAGjAaQB/wHxAe8B8AH/AfEB7wHwAf8BpAGjAaQB/wHQAs8B/wGvAa4BrwH/
A0wB/wP2Af8D9gH/A0EB/wNBAf8DQQH/A0EB/wNBAf8D9gH/CAAD9gH/A0EB/wNBAf8DQQH/A0EB/wNB
Af8D9gH/DAADkgGgA7IB/wNMAf8BqQGoAakB/wHgAd4B3wH/AeAB3gHfAf8BqQGoAakB/wNMAf8DsgH/
A5IBoFwAA5ABnwPUAf8DTAH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0wB/wPUAf8DkAGfA/YB/wP2
Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wgAA/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wwAAwkBCwOx
Ab8DxgH/A2wB/wNFAf8DRQH/A2wB/wPGAf8DsQG/AwkBC2AAA5ABnwP2Af8D9gH/A/YB/wP2Af8D9gH/
A/YB/wP2Af8D9gH/A5ABn1QAAwQBBQNeAWsDwgHPA/AB+gPwAfoDwgHPA14BawMEAQX/ABEAA8IBzwP2
Af8D9gH/A4EBj0gAA58B/wOfAf8DnwH/A58B/2QAA1sBuwOAAf8sAAP2Af8DQQH/A2MB/wO+Af8DkAGf
A2MBcAOBAY8DKAEwA2MBcAOQAZ8DVAFgLAADnwH/A58B/wOfAf8DnwH/MAADBwEKA1YBwQMuAUcQAAM0
AVQDVgG7AzoBYRAAAwcBCQNOAZkoAAOxAb8D9gH/A6cB/wNMAf8D9gH/A8kB/wORAf8D6wH/A9QB/wOR
Af8D1AH/A/YB/wP2Af8D9gH/A/YB/wP2Af8YAAOhAf8DnwH/A58B/wOhAf83AAH/A1MBrRAAA1gBwAMP
AfwDPQFpFAADgAH/CAADgAH/AxMBGgQAA0cBgANDAXcQAAP2Af8DvgH/A0EB/wO+Af8DyQH/A5wB/wN5
Af8DbgH/A1gB/wOcAf8DyQH/A0EB/wNBAf8DQQH/A/YB/xgAA6EB/wOfAf8DnwH/A58B/xgAAxIBGQMq
AUEUAANMAZEDAAH/DAADBAEFAwAB/wNHAYIDBgEIFAADaAHeAxMBGgQAA0MBdwNAAW8EAANzAfMEAAMq
AUAMAAP2Af8DswH/A0wB/wORAf8B9ALzAf8DeQH/A74B/wNBAf8DswH/A6cB/wHyAfAB8QH/AfEB7wHw
Af8B8QHvAfAB/wNBAf8D9gH/GAADoQH/A58B/wOfAf8DnwH/GAADOQFgAwAB/wNLAY4QAAMjATQDAAH/
A1kBxANZAdIDWwHQA1oBygMAAf8DGgElGAADVQGqA1UBqgwAA2IBzANvAeYUAAP2Af8DyQH/A3kB/wNj
Af8D9QH/A7MB/wOzAf8DQQH/A6cB/wPJAf8B8wLyAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wP2Af8EAAOh
Af8DnwH/A58B/wOfAf8DnwH/A6EB/wOfAf8DnwH/A58B/wOfAf8DoQH/A58B/wOfAf8DnwH/CAADPAFn
AwAB/wM/AW8IAANZAckDKgFAA1kBxAMAAf8DVwHFA1cBxQMAAf8DWQHXHAADOgFiA4AB/wwAAzUBVQNO
AZkUAAP2Af8DyQH/A1gB/wNBAf8DkQH/A4YB/wNMAf8DbgH/A4YB/wNBAf8DyQH/A0EB/wNBAf8DQQH/
A/YB/wQAA58B/wOhAf8DnwH/A58B/wOhAf8DoQH/A6EB/wOfAf8DoQH/A6EB/wOhAf8DnwH/A6EB/wOf
Af8MAANJAYkDAAH/BAADOAFcAwAB/wMKAQ4DRAF5AwAB/wsAAf8DSgGNHAADEwEaA4AB/wwAA4AB/wNS
AaIUAAP2Af8DhgH/A98B/wNMAf8DswH/A9QB/wP2Af8D9AH/AfQC8wH/A8kB/wHzAvIB/wHxAe8B8AH/
AfEB7wHwAf8DQQH/A/YB/wQAA58B/wOfAf8DoQH/A58B/wOhAf8DnwH/A6EB/wOfAf8DnwH/A58B/wOf
Af8DnwH/A6EB/wOfAf8QAANMAe8DWQHJAyEB+gNIAYgEAAMfASwDAAH/Ax4BKwMdASoDAAH/Ax0BKSAA
A4AB/wMmATgEAANNAZEDgAH/BAADTgGZA28B6gwAA/YB/wNBAf8B8gHwAfEB/wOyAf8DWAH/A1gB/wPU
Af8B8QHvAfAB/wHxAe8B8AH/A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8D9gH/BAADnwH/
A6EB/wOfAf8DoQH/A58B/wOhAf8DoQH/A58B/wOhAf8DnwH/A58B/wOhAf8DnwH/A58B/xAAAzEBTgMA
Af8DWgHVDAADIQH6A0oBiwNKAYoDMQH4JAADcgHuA0MBdyQAA/YB/wNBAf8DQQH/A2MB/wO+Af8DyQH/
A4YB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8D9gH/GAADnwH/A58B/wOfAf8DnwH/GAADJQE3
A0IBdAM4AV0DOwFlAwAB/wNTAbADKAE9A0IBdgMOARMDQgF1AwAB/wMAAf8DSAGGIAADPgFrA28B5gNp
Ad0DRwGAIAAD9gH/A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8B8QHvAfAB/wHxAe8B8AH/
AfEB7wHwAf8DQQH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wP2Af8YAAOfAf8DnwH/A6EB/wOh
Af8YAANKAYwDAAH/AwAB/wMAAf4DAAH+Aw8B/AMAAf8DAAH/A1YBuwMMARADAAH/AwAB/wMdASooAAN3
AfckAAP2Af8DQQH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHv
AfAB/wNBAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DQQH/A/YB/xgAA6EB/wOfAf8DnwH/A6EB/xgA
AwQBBQMJAQwDAAEBAwoBDQMAAf8DOwFkBAADBQEHAw8BFAMEBAYBCAMHAQksAANyAe4kAAP2Af8DQQH/
A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A/YB/xgAA6EB/wOh
Af8DoQH/A58B/yQAAwIBAwMAAf8DNwFbRAADPAFmAxgBIgNiAcwcAAP2Af8DQQH/A0EB/wNBAf8DQQH/
A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A/YB/xgAA58B/wOfAf8DnwH/A6EB/3gA
AzUBVQM+AWscAAP2Af8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNB
Af8DQQH/A/YB/yAAAwEBAqAAA/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2
Af8D9gH/A/YB/wP2Af8D9gH//wABAAH+AfMB8gH/Af4B8wHyAf8B/gHzAfIB/wH+AfMB8gH/Af4B8wHy
Af8B/gHzAfIB/wH+AfMB8gH/Af4B8wHyAf8B/gHzAfIB/wH+AfMB8gH/Af4B8wHyAf8B/gHzAfIB/wH+
AfMB8gH/Af4B8wHyAf8B/gHzAfIB/wH+AfMB8gH/BAADJwH/AycB/wMnAf8DJwH/AycB/wMnAf8DJwH/
AycB/xAAAcABlQFGAf8BwAGVAUYB/4QAAf4B8wHyAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/
AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wH+AfMB8gH/BAADJwH/A/gB/wP4Af8D+AH/A/gB/wP4
Af8D+AH/AycB/wwAAcABlQFGAf8BoQE5AQAB/wHAAZUBRgH/DAADwAH/A5IB/wPqAf8gAANfAegDwAH/
FAAD/gH/A/EB/wPHAf8DjwH/A4AB/wOiAf8D7AH/FAAB/gHzAfIB/wMaAf8B+QLqAf8B+QLqAf8B+QLq
Af8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8DGgH/
Af4B8wHyAf8EAAMnAf8D+AH/A/gB/wP4Af8D+AH/A/oB/wP8Af8D0AH/CAABwAGVAUYB/wGhATkBAAH/
AcABlQFGAf8QAAOSAf8DkgH/A5IB/wNfAegYAAPrAf8DsAH/Aw0BERAAA/0B/wPWAf8DlQH/A5UB/wOd
Af8DlgH/A4kB/wNQAf8D1QH/EAAB/gHzAfIB/wMaAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLq
Af8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8DGgH/Af4B8wHyAf8EAAMn
Af8D+AH/A/gB/wP4Af8D/AH/AcYBnwFWAf8BoQE5AQAB/wGhATkBAAH/AaEBOQEAAf8BswFZARIB/wGh
ATkBAAH/AcABlQFGAf8UAAPrAf8DkAH/A5IB/wOSAf8DUgGpDAADEAEWA98B/wOdAf8DMQFNFAAD1wH/
A6IB/wOiAf8DogH/A50B/wOcAf8DnAH/A5wB/wNaAf8D0gH/DAAB/gHzAfIB/wMaAf8B+QLqAf8B+QLq
Af8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLq
Af8DGgH/Af4B8wHyAf8EAAMnAf8D+AH/A/gB/wP6Af8BxgGfAVYB/wG3AWEBIQH/AfIB8AHrAf8D+AH/
AfIB8AHrAf8BtwFhASEB/wGzAVkBEgH/HAADXQHKA5IB/wOQAf8DoAH/AzEBTQQAAw0BEQPAAf8DkgH/
A1IBqRQAA/QB/wOuAf8DrgH/A7AB/wOwAf8DrgH/A6gB/wOiAf8DnAH/A5wB/wNQAf8D7AH/CAAB/gHz
AfIB/wMaAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLq
Af8B+QLqAf8B+QLqAf8B+QLqAf8DGgH/Af4B8wHyAf8EAAMnAf8D+AH/A/gB/wP8Af8BoQE5AQAB/wHy
AfAB6wH/A/gB/wP4Af8D+AH/AfIB8AHrAf8BoQE5AQAB/wPEAf8DJwH/AycB/xQAA1YBqwOQAf8DkgH/
A50B/wM+AWsDwAH/A5AB/wNfAegDAwEEFAAD3QH/A7wB/wPCAf8DxgH/A8cB/wPBAf8DvAH/A64B/wOi
Af8DnAH/A4kB/wOiAf8IAAH+AfMB8gH/AxoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5
AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wMaAf8B/gHzAfIB/wQAAycB/wP4
Af8D+AH/A/0B/wGhATkBAAH/A/gB/wP4Af8D+AH/A/gB/wP4Af8BoQE5AQAB/wP9Af8D+AH/AycB/xgA
Az4BawOdAf8DkgH/A5AB/wOSAf8D6wH/AwMEBAEFFAAD1gH/A8IB/wP+Af8D/gH/A/4B/wP9Af8D/AH/
A/wB/wP8Af8D+gH/A48B/wOAAf8IAAH+AfMB8gH/AxoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5
AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wMaAf8B/gHzAfIB/wQA
AycB/wP4Af8D+AH/A/wB/wGhATkBAAH/AfIB8AHrAf8D+AH/A/gB/wP4Af8B8gHwAesB/wGhATkBAAH/
A/wB/wP4Af8DJwH/HAADXAHJA5IB/wOQAf8DnQH/Aw0BERwAA9YB/wPPDf8D/gH/A/4B/wP9Af8D/AH/
A/sB/wOPAf8DjgH/CAAB/gHzAfIB/wMaAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLq
Af8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8DGgH/Af4B8wHyAf8EAAMnAf8DJwH/
AycB/wNhAf8BxgGfAVYB/wG5AYgBNAH/AfIB8AHrAf8D+AH/AfIB8AHrAf8BuQGIATQB/wHGAZ8BVgH/
A/oB/wP4Af8DJwH/GAADUgGpA5IB/wOSAf8DkAH/A5IB/wNcAckQAAMLAQ8IAAPpAf8D2QH/A+wB/wPw
Af8D8AH/A+wB/wPhAf8D1wH/A8AB/wOoAf8DjwH/A8YB/wgAAf4B8wHyAf8DGgH/AfkC6gH/AfkC6gH/
AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/
AxoB/wH+AfMB8gH/GAABxgGfAVYB/wGhATkBAAH/AaEBOQEAAf8BoQE5AQAB/wHGAZ8BVgH/A/wB/wP4
Af8D+AH/AycB/xQAA1wByQOSAf8DkAH/A50B/wM+AWsDwAH/A5IB/wNKAYwYAAP3Af8D2QH/A+wB/wPx
Af8D8AH/A+wB/wPgAf8D1gH/A8AB/wOoAf8DnAH/A/AB/wgAAf4B8wHyAf8DGgH/AfkC6gH/AfkC6gH/
AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/
AxoB/wH+AfMB8gH/HAADxAH/A/0B/wP8Af8D+gH/A/gB/wP4Af8D+AH/AycB/xAAA+oB/wOSAf8DkAH/
A5AB/wNSAakEAAMNARED4AH/A6AB/wMxAU0UAAP+Af8D7AH/A+AB/wPxAf8D8QH/A+oB/wPiAf8D0gH/
A8EB/wOoAf8D1wH/A/4B/wgAAf4B8wHyAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMa
Af8DGgH/AxoB/wMaAf8DGgH/AxoB/wH+AfMB8gH/HAADJwH/A/gB/wP4Af8D+AH/A/gB/wMnAf8DJwH/
A4oB/xAAA5IB/wOSAf8DkAH/A18B6BAAA+oB/wOwAf8DDQERFAAD/QH/A+wB/wPdAf8D4wH/A+YB/wPc
Af8DywH/A7sB/wPWAf8D/QH/DAAB/gHzAfIB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/
AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/Af4B8wHyAf8cAAMnAf8D+AH/A/gB/wP4Af8D+AH/AycB/wOK
Af8UAAPAAf8DkgH/A+oB/xgAA18B6APAAf8YAAP9Af8D9wH/A+kB/wPcAf8D1QH/A+IB/wPvAf8D/gH/
EAAB/gHzAfIB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMa
Af8DGgH/Af4B8wHyAf8cAAMnAf8DJwH/AycB/wMnAf8DJwH/A4oB/xMAAQF4AAH+AfMB8gH/Af4B8wHy
Af8B/gHzAfIB/wH+AfMB8gH/Af4B8wHyAf8B/gHzAfIB/wH+AfMB8gH/Af4B8wHyAf8B/gHzAfIB/wH+
AfMB8gH/Af4B8wHyAf8B/gHzAfIB/wH+AfMB8gH/Af4B8wHyAf8B/gHzAfIB/wH+AfMB8gH//wABAAH/
AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAP/
AQAC/wMrAUIDKwFCAzMBUgM3AVoDNwFbA0oBiQNLAY4DSgGNAz0BZwM3AVsDNwFbAzQBVAMnAToDEQEX
CAADKwFCAysBQgMrAUIDMgFQAzcBWgNIAYMDSwGOA0oBjQNEAXoDNwFbAzcBWxQAASIBuQHTAf8BAAGM
AakB/wEAAYwBqQH/AQABjAGpAf8BAAGMAakB/wEAAYwBqQH/AQABjAGpAf8BAAGMAakB/wEAAYwBqQH/
AQABjAGpAf8BAAGMAakB/wEAAYwBqQH/AQABjAGpAf8BAAGMAakB/wEAAYwBqQH/ASIBuQHTAf8BAAG5
AdMB/wEAAYwBqQH/AQABjAGpAf8BAAGMAakB/wEAAYwBqQH/AQABjAGpAf8BAAGMAakB/wEAAYwBqQH/
AQABjAGpAf8BAAGMAakB/wEAAYwBqQH/AQABjAGpAf8BAAGMAakB/wEAAYwBqQH/AQABjAGpAf8BAAG5
AdMB/wMrAUIDGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/A0ABcQMaAf8DGgH/AzEB/wNcAeoDVgG0
Az4BawQAAy4BSAMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wM3AVsUAAERAbQB0QH/
AQAByQHpAf8BAAHGAfEB/wEAAcIB8AH/AQABwQHwAf8BAAHAAfAB/wEAAcEB8AH/AQABwQHwAf8BAAHB
AfAB/wEAAcEB8AH/AQABwgHwAf8BAAHDAfAB/wEAAcMB8AH/AQABxAHxAf8BAAHDAeQB/wERAbQB0QH/
AQABtAHRAf8BAAHJAekB/wEAAcYB8QH/AQABwgHwAf8BAAHBAfAB/wEAAcAB8AH/AQABwQHwAf8BAAHB
AfAB/wEAAcEB8AH/AQABwQHwAf8BAAHCAfAB/wEAAcMB8AH/AQABwwHwAf8BAAHEAfEB/wEAAcMB5AH/
AQABtAHRAf8DKwFCAxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wNIAYMDGgH/AxoB/wMaAf8DGgH/
AxoB/wNKAY0DPwFtAzUBVQMiAf8B+QLqAf8B+QLqAf8B+QLqAf8DIgH/AfkC6gH/AfkC6gH/AfkC6gH/
AyIB/wM3AVsDNwFbAzcBWwwAAUsByAHcAf8BAAGuAc8B/wEAAc0B8gH/AQAByAHxAf8BAAHFAfEB/wEA
AcQB8QH/AQABwwHwAf8DAAH/AwAB/wEAAcYB8QH/AQAByAHxAf8BAAHKAfIB/wEAAcoB8gH/AQABzAHx
Af8BAAGrAc0B/wFLAcgB3AL/AQAC/wEAAa4BzwH/AQABzQHyAf8BAAHIAfEB/wEAAcUB8QH/AQABxAHx
Af8BAAHDAfAB/wMAAf8DAAH/AQABxgHxAf8BAAHIAfEB/wEAAcoB8gH/AQABygHyAf8BAAHMAfEB/wEA
AasBzQL/AQAC/wMrAUIDGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/A0wBkwMaAf8DGgH/AxoB/wMa
Af8DGgH/AxoB/wM3AVsDNgFYAyIB/wH5AuoB/wH5AuoB/wH5AuoB/wMiAf8B+QLqAf8B+QLqAf8B+QLq
Af8DIgH/AzcBWwMiAf8DQAFuDAAB4gHuAfIB/wERAbQB0QH/AQEBxgHkAf8BAQHRAfMB/wEAAc0B8gH/
AQABywHyAf8BAAHKAfIB/wMAAf8DAAH/AQABzQHzAf8BAQHRAfMB/wECAdIB9AH/AQMB0wH0Af8BAAHF
AeMB/wERAbQB0QH/AeIB7gHyAv8BAAL/AQABtAHRAf8BAAHGAeQB/wEAAdEB8wH/AQABzQHyAf8BAAHL
AfIB/wEAAcoB8gH/AwAB/wMAAf8BAAHNAfMB/wEAAdEB8wH/AQAB0gH0Af8BAAHTAfQB/wEAAcUB4wH/
AQABtAHRAv8BAAL/AzUBVQMaAf8DGgH/AxoB/wNiAekDGgH/AxoB/wMaAf8DUQGcAxoB/wMaAf8DGgH/
AxoB/wMaAf8DGgH/AzcBWwMyAVADIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DNwFb
AyIB/wNKAYoQAAGAAc0B3wH/AQABrAHNAf8BDwHbAfQB/wELAdkB9QH/AQgB1wH1Af8BBwHWAfQB/wEH
AdYB9AH/AQkB1wH1Af8BCwHZAfUB/wELAdkB9QH/AQ0B2wH1Af8BDgHaAfMB/wEAAaoBywH/AYABzQHf
Af8EAAH/AQAD/wEAAv8BAAGsAc0B/wEAAdsB9AH/AQAB2QH1Af8BAAHXAfUB/wEAAdYB9AH/AQAB1gH0
Af8BAAHXAfUB/wEAAdkB9QH/AQAB2QH1Af8BAAHbAfUB/wEAAdoB8wH/AQABqgHLAv8BAAP/AQAC/wM2
AVgDGgH/AxoB/wNdAdMDVAGmA10B0wMaAf8DGgH/A1oBvQMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wM3
AVsDMQFOAzcBWgNAAW4DSgGNA1IBpANcAeoDYgHvA2IB7wNdAe0DXAHMA0gBhQMiAf8DSAGFAzcBWwM3
AVsDNwFbBAAB6gHyAfUB/wERAbQB0QH/AQYBxgHfAf8BGgHmAfgB/wEZAeQB9wH/ARgB4wH3Af8BAAFD
AUwB/wEAAUMBTAH/ARYB4gH3Af8BFgHiAfcB/wEXAeMB9wH/AQUBxwHgAf8BEQG0AdEB/wHqAfIB9QH/
BAAB/wEAA/8BAAL/AQABtAHRAf8BAAHGAd8B/wEAAeYB+AH/AQAB5AH3Af8BAAHjAfcB/wEAARQBHQH/
AQABFAEdAf8BAAHiAfcB/wEAAeIB9wH/AQAB4wH3Af8BAAHHAeAB/wEAAbQB0QL/AQAD/wEAAv8DLgFH
AzMBUgM9AWcDRgF/A04BlQNSAaMBXAJaAfUBeAJ2AfoBeAJ2AfoDGgH/AxoB/wMaAf8DGgH/AxoB/wMa
Af8DNwFbAwABAQM5AV8DIgH/A04BlANSAacDIgH/AYECfQH6AYUCgwH5AyIB/wF/AX0BegH3A1sByAMi
Af8DSAGFAyIB/wMiAf8DNwFbCAABjgHTAeMB/wEAAaoBywH/ASIB6gH2Af8BJgHwAfoB/wEkAe4B+QH/
AwAB/wMAAf8BIAHqAfkB/wEgAeoB+QH/ARsB5QH1Af8BAAGqAcsB/wGOAdMB4wH/CAAB/wEAA/8BAAP/
AQAC/wEAAaoBywH/AQAB6gH2Af8BAAHwAfoB/wEAAe4B+QH/AwAB/wMAAf8BAAHqAfkB/wEAAeoB+QH/
AQAB5QH1Af8BAAGqAcsC/wEAA/8BAAP/AQAC/wQAAyABLwNMAZIDJQH/AxoB/wMlAf8BbgFsAWsB+gM8
Af8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AzgBXgQAAzkBXwMiAf8DIgH/AyIB/wMiAf8DIgH/
AyIB/wMiAf8DIgH/AyIB/wMiAf8DSAGFA04BlQMiAf8DNwFbCAAB7wH0AfYB/wERAbQB0QH/AQQBwgHb
Af8BKgHzAfsB/wEpAfEB+gH/AwAB/wMAAf8BJQHvAfoB/wElAe8B+gH/AQYBxgHfAf8BEQG0AdEB/wHv
AfQB9gH/CAAB/wEAA/8BAAP/AQAC/wEAAbQB0QH/AQABwgHbAf8BAAHzAfsB/wEAAfEB+gH/AwAB/wMA
Af8BAAHvAfoB/wEAAe8B+gH/AQABxgHfAf8BAAG0AdEC/wEAA/8BAAP/AQAC/wQAAzgBXAMlAf8DGgH/
AxoB/wMaAf8DJQH/A18B6AMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DSgGLBAADOQFfAyIB/wH5
AuoB/wH5AuoB/wMiAf8B+QLqAf8B+QLqAf8DIgH/AfkC6gH/AfkC6gH/AyIB/wNeAdkDIgH/AyIB/wM3
AVsMAAGcAdcB5QH/AQABqQHLAf8BJAHqAfQB/wEsAfQB+wH/AwAB/wMAAf8BKgHyAfoB/wEjAeoB9gH/
AQABqQHLAf8BnAHXAeUB/wwAAf8BAAP/AQAD/wEAA/8BAAL/AQABqQHLAf8BAAHqAfQB/wEAAfQB+wH/
AwAB/wMAAf8BAAHyAfoB/wEAAeoB9gH/AQABqQHLAv8BAAP/AQAD/wEAA/8BAAL/BAADOAFcAxoB/wMa
Af8DGgH/AxoB/wMaAf8DVAGvAxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wNEAXsEAAM5AV8DIgH/
AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/A2IB6QNiAekDIgH/A0gBhhAAAREBtAHR
Af8BAQG/AdkB/wE2AfYB+wH/AwAB/wMAAf8BLQH1AfsB/wEIAcYB3QH/AREBtAHRAf8B9QH2AfcB/wwA
Af8BAAP/AQAD/wEAA/8BAAL/AQABtAHRAf8BAAG/AdkB/wEHAfYB+wH/AwAB/wMAAf8BAAH1AfsB/wEA
AcYB3QH/AQABtAHRAv8BAAP/AQAD/wEAA/8BAAL/BAADOAFcAyUB/wMaAf8DGgH/AxoB/wMlAf8DVgGr
A14B0ANcAeoDXAHqA1wB6gNcAeoDJQH/AxoB/wM3AVsEAAM5AV8DIgH/AyIB/wMiAf8DIgH/AyIB/wMi
Af8DIgH/AyIB/wMiAf8DIgH/A2EB3AMiAf8DIgH/Az0BZxAAAasB3QHpAf8BAAGpAcoB/wEjAegB8wH/
AS0B9QH7Af8BLQH1AfsB/wEmAe0B9gH/AQABqQHLAf8BqwHdAekB/xAAAf8BAAP/AQAD/wEAA/8BAAP/
AQAC/wEAAakBygH/AQAB6AHzAf8BAAH1AfsB/wEAAfUB+wH/AQAB7QH2Af8BAAGpAcsC/wEAA/8BAAP/
AQAD/wEAA/8BAAL/BAADIAEvA0wBkgMlAf8DGgH/AyUB/wNUAa8DVgGrA1UBrQNfAegDXAHqA1wB6gNc
AeoDXAHqAxoB/wM3AVsEAANDAXgDIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/
A04BlQNdAdMDIgH/AzcBWxQAARIBtAHRAf8BAAG7AdYB/wEtAfUB+wH/AS0B9QH7Af8BBwHGAd0B/wES
AbQB0QH/FAAB/wEAA/8BAAP/AQAD/wEAA/8BAAL/AQABtAHRAf8BAAG7AdYB/wEAAfUB+wH/AQAB9QH7
Af8BAAHGAd0B/wEAAbQB0QL/AQAD/wEAA/8BAAP/AQAD/wEAAv8IAANLAY4DTAGSA1cBugNWAasDVgGr
A1YBqwNWAasDYQHkA1wB6gNcAeoDXAHqA1wB6gMaAf8DNwFbBAADSQGHAz4BawM3AVsDNwFbAzcBWwM6
AWIDUAGeA1IBowNSAaMDUgGjA1IBowNOAZUDIgH/AyIB/wM3AVsUAAG7AeIB7QH/AQABqAHKAf8BIAHl
AfEB/wEmAewB9QH/AQABqQHLAf8BuwHiAe0B/xQAAf8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAAv8BAAGo
AcoB/wEAAeUB8QH/AQAB7AH1Af8BAAGpAcsC/wEAA/8BAAP/AQAD/wEAA/8BAAP/AQAC/wgAAz4BawNK
AYwDJQH/A1YBsQNYAbkDVgGrA1YBqwNhAeEDXAHqA1wB6gNcAeoDJQH/A0oBjAMuAUgQAAM3AVsDIgH/
AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AzYBWRgAARIBtAHRAf8BAAG5AdUB/wEH
AcYB3QH/ARIBtAHRAf8YAAH/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAL/AQABtAHRAf8BAAG5AdUB/wEA
AcYB3QH/AQABtAHRAv8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAAv8MAAM9AWgDVgG0A1wB6gMxAf8DGgH/
AxoB/wMaAf8DGgH/AzEB/wNcAeoDVwG6Az4BaxQAAzcBWwMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMi
Af8DIgH/AyIB/wMiAf8DNAFUGAAByQHpAfEB/wECAa8BzgH/AQIBrwHOAf8ByQHpAfEB/xgAAf8BAAP/
AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAL/AQABrwHOAf8BAAGvAc4C/wEAA/8BAAP/AQAD/wEAA/8BAAP/
AQAD/wEAAv8QAAMNAREDJwE6AzMBUwM3AVsDOwFlA0oBjQNLAY4DSAGEAzgBXgMSARkYAAM3AVsDNwFb
A0kBhwNLAY4DSwGOA0oBjQNFAXwDNwFbAzcBWwM3AVsDNQFXAzcBWv8AQQADKgFAAyoBQAMqAUADKgFA
AyoBQAMqAUADKgFAAyoBQAMqAUADKgFAAyoBQAMqAUADKgFAAyYBOAMMARAEAAMqAUADKgFAAyoBQAMq
AUADKgFAAyoBQAMqAUADKgFAAyoBQAMqAUADKgFAAyoBQAMqAUADJgE4AwwBEBQAAdYBvgGtAf8BtQGa
AYQB/wGcARwBAQH/AZQBEAEAAf8BlAEQAQAB/wGlASQBEgH/Ab0BpgGUAf8B1gG+AbUB/yAAAfcB8wHv
Af8B1gG+AbUB/wGtAY4BWAH/AZQBRgEvAf8BjAE+AScB/wGUAVIBQAH/AcYBtgGtAf8UAANcAd8DXAHf
A1wB3wNcAd8DXAHfA1wB3wNcAd8DXAHfA1wB3wNcAd8DXAHfA1wB3wNcAd8DWwHDAyYBOAQAA1wB3wNc
Ad8DXAHfA1wB3wNcAd8DXAHfA1wB3wNcAd8DXAHfA1wB3wNcAd8DXAHfA1wB3wNbAcMDJgE4EAABxgGu
AZwB/wGtAYYBEgH/Aa0BkgEiAf8B1gHPAc4B/wHnAfMB9wH/AecB7wH3Af8BxgHDAb0B/wGlAYYBGgH/
AaUBIAEKAf8BxgGuAZwB/xgAAfcB6wHnAf8BvQGaAYwB/wGcAUoBLwH/AZwBSgEvAf8BnAFOATcB/wGc
AUoBNwH/AZQBQgEvAf8BWAEuARYB/wGtAZoBjAH/EAABpwKmAf8CswGyAf8DugH/A7oB/wO6Af8DugH/
A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/AbECsAH/A1wB3wMqAUAEAAGnAqYB/wKzAbIB/wO6Af8DugH/
A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8BsQKwAf8DXAHfAyoBQAwAAc4BrgGcAf8BtQGa
AYwB/wHvAesB5wX/AfcB+wL/Ae8B+wH3Af8B7wL3Af8C7wH3Af8B5wHzAv8BvQG2AbUB/wGUARABAAH/
AcYBrgGcAf8UAAG9AZoBjAH/AaUBUgE3Af8BpQFSATcB/wGlAVIBNwH/AZwBTgE3Af8BnAFOATcB/wGc
AU4BNwH/AZwBTgE3Af8BhAEyAR8B/wGtAZYBjAH/DAADkQH/A8QB/wPjAf8D4wH/A+MB/wLhAeAB/wHY
AdQB0gH/AdoB1gHVAf8D4wH/A+MB/wPjAf8D4wH/A7oB/wNcAd8DKgFABAADkQH/A8QB/wPjAf8D4wH/
A+MB/wPjAf8D4wH/A+MB/wPjAf8D4wH/A+MB/wPjAf8DugH/A1wB3wMqAUAIAAHWAboBrQH/AbUBkgEi
Af8D9wn/Ad4BtgGlAf8BpQIAAf8BpQIAAf8B1gG+Aa0B/wH3A/8B7wH3Av8BvQGuAaUB/wGcARQBAAH/
AdYBvgG1Af8MAAHnAccBtQH/Aa0BWgFAAf8BrQFaAUAB/wGtAVoBSAH/Aa0BWgFIAf8BrQFaAUAB/wGl
AVYBQAH/AaUBUgE3Af8BnAFOATcB/wGcAU4BNwH/AVgBLgEWAf8BxgG2Aa0B/wgAA5EB/wPEAf8D4wH/
A+MB/wPjAf8B2QHUAdIB/wGjAYgBIQH/Aa4BlwGMAf8D4wH/A+MB/wPjAf8D4wH/A7oB/wNcAd8DKgFA
BAADkQH/A8QB/wPjAf8D4wH/A+MB/wPjAf8D4wH/A+MB/wPjAf8D4wH/A+MB/wPjAf8DugH/A1wB3wMq
AUAIAAG9AZ4BhAH/Ad4BxwG9Df8B7wHXAcYB/wGtAgAB/wGlAgAB/wH3Ae8B5wX/Ae8B6wHvAf8B5wHz
AfcB/wGcASQBEgH/AbUBkgEiAf8MAAHOAaIBjAH/Aa0BhgFIAf8BtQGKAVAB/wG9AY4BUAH/Ab0BjgFQ
Af8BtQGKAVAB/wG1AYYBSAH/Aa0BWgFAAf8BpQFSATcB/wGcAU4BNwH/AZQBQgEvAf8BlAFSAUAB/wgA
A5EB/wHGAscB/wHmAucB/wHmAucB/wHmAucB/wHYAdIBzwH/AY8BEQEAAf8BngGAARcB/wHmAucB/wHm
AucB/wHmAucB/wHmAucB/wO8Af8DXAHfAyoBQAQAA5EB/wHGAscB/wHmAucB/wHmAucB/wHmAucB/wHm
AucB/wHmAucB/wHmAucB/wHmAucB/wHmAucB/wHmAucB/wHmAucB/wO8Af8DXAHfAyoBQAQAAdYBugGt
Af8BvQGaAYQC/wH7Dv8B7wHjAdYB/wG9AgAB/wG1AQwBAAH/AfcB+wH3Bf8B9wHzAfcB/wHvAfMB9wH/
AcYBvgG9Af8BnAEcAQEB/wwAAcYBmgGEAf8BvQGKAVAC/wH7A/8C9wL/AfMB7wH/AfcB6wHnAf8B9wHj
Ad4B/wH3AeMB1gH/AfcB4wHeAf8B9wHbAc4B/wGcAUYBLwH/AYwBPgEnAf8IAAORAf8BygLLAf8B7ALt
Af8B7ALtAf8B7ALtAf8B3QHYAdUB/wGRARMBAAH/AaABggEZAf8B7ALtAf8B7ALtAf8B7ALtAf8B7ALt
Af8DvwH/A1wB3wMqAUAEAAORAf8BygLLAf8B7ALtAf8B7ALtAf8B7ALtAf8B7ALtAf8B7ALtAf8B7ALt
Af8B7ALtAf8B7ALtAf8B7ALtAf8B7ALtAf8DvwH/A1wB3wMqAUAEAAHOAa4BnAH/Ac4BpgGMEf8B7wHf
AdYB/wG9AgAB/wG1AQwBAAH/AfcC7wn/Ae8B8wH3Af8B1gHbAd4B/wGcARwBAQH/DAABxgGaAYQB/wHG
AZYBWA7/AfsD/wHzAe8B/wH3AesB5wH/AfcB4wHeAf8B9wHfAdYB/wGcAUYBLwH/AZQBRgEvAf8IAAOR
Af8D0AH/AegB3gHaAf8ByAGjAZYB/wHBAZcBiAH/AbsBjwElAf8BnwENAQAB/wGkARUBAAH/AcEBlwGI
Af8BwQGXAYgB/wHOAa8BowH/Ae8B6gHnAf8DwwH/A1wB3wMqAUAEAAORAf8BygLLAf8B4QHYAdQB/wHH
AaEBlAH/AcEBlwGIAf8BwQGXAYgB/wHBAZcBiAH/AcEBlwGIAf8BwQGXAYgB/wHBAZcBiAH/AcwBrQGh
Af8B5gHiAeEB/wO/Af8DXAHfAyoBQAQAAc4BpgGUAf8BzgGqAZQR/wHvAdsBzgH/AcYCAAH/AbUBCAEA
Af8B7wHrAecJ/wP3Af8B3gHjAecB/wGcASABCgH/DAAB3gGyAZwB/wHOAZ4BhAH/AecBtgGcAf8B5wG+
Aa0B/wHnAb4BrQH/AecBtgGcAf8B1gGmAYwB/wHOAZoBhAH/AbUBigFIAf8BpQFWAUAB/wGcAUYBLwH/
Aa0BjgFYAf8IAAORAf8D0wH/AesB3wHZAf8BxAGXAYcB/wG8AYkBHQH/AbgBgwEWAf8BogEMAQAB/wGn
ARIBAAH/AbwBiQEdAf8BvAGJAR0B/wHMAaYBmAH/AfQB7QHqAf8DxgH/A1wB3wMqAUAEAAORAf8BzALN
Af8B4wHXAdIB/wHDAZYBhgH/AbwBiQEdAf8BvAGJAR0B/wG8AYkBHQH/AbwBiQEdAf8BvAGJAR0B/wG8
AYkBHQH/AckBowGWAf8B6QHkAeEB/wPBAf8DXAHfAyoBQAQAAcYBogGMAf8BzgGqAZQR/wHeAcMBrQH/
Ab0BBAEAAf8BvQEcAQAB/wH3Au8G/wH7Av8B9wH7Av8B3gHXAd4B/wGcARwBAQH/DAAB7wHPAb0B/wHO
AZ4BhAH/AecBtgGcAf8B5wG+Aa0B/wHnAb4BrQH/AecBtgGcAf8B1gGmAYwB/wHOAZoBhAH/AbUBigFI
Af8BpQFWAUAB/wGcAU4BNwH/AdYBvgG1Af8IAAORAf8D0wH/AfgB9gH1Af8B8gHqAecB/wHxAegB5AH/
AeIB1AHNAf8BlgEUAQEB/wGlAYMBGAH/AfEB6AHkAf8B8QHoAeQB/wHzAe0B6gH/AfoB+QH3Af8DxgH/
A1wB3wMqAUAEAAORAf8D0gH/AfcB9QHzAf8B8gHqAecB/wHxAegB5AH/AfEB6AHkAf8B8QHoAeQB/wHx
AegB5AH/AfEB6AHkAf8B8QHoAeQB/wHzAewB6QH/AfgB9wH2Af8DxQH/A1wB3wMqAUAEAAHWAbIBnAH/
Ac4BogGMEf8B9wHrAecB/wHvAdsB1gH/AfcB6wHnCv8B+wL/AfcD/wHOAb4BvQH/AaUBJAEKAf8MAAH/
AfMB7wH/Ad4BtgGlAf8B1gGmAYwB/wHnAb4BrQH/Ae8BvgGtAf8B5wGyAZwB/wHWAaYBlAH/AcYBlgGE
Af8BtQGKAVAB/wGlAVYBQAH/Ab0BmgGMAf8B9wLvAf8IAAORAf8D1AH/AvwB+wH/AvwB+wH/AvwB+wH/
AesB5QHhAf8BlQEXAQQB/wGmAYgBHgH/AvwB+wH/AvwB+wH/AvwB+wH/AvwB+wH/A8cB/wNcAd8DKgFA
BAADkQH/A9MB/wL7AfoB/wL7AfoB/wL7AfoB/wL7AfoB/wL7AfoB/wL7AfoB/wL7AfoB/wL7AfoB/wL7
AfoB/wL7AfoB/wPGAf8DXAHfAyoBQAgAAdYBpgGMAf8B7wHnAd4O/wH7Av8B1gGiAYQB/wHWAaIBhAL/
AfsO/wGlASQBCgH/AcYBpgGUAf8QAAH3AesB5wH/Ad4BtgGlAf8B1gGiAYwB/wHWAaoBlAH/Ad4BrgGU
Af8BzgGiAYwB/wG9AZIBWAH/AbUBhgFIAf8BvQGaAYwB/wH3AesB5wH/DAADkQH/A9QB/wP8Af8D/AH/
A/wB/wHtAegB5QH/AaIBggEYAf8BsQGXAYkB/wP8Af8D/AH/A/wB/wP8Af8DxwH/A1wB3wMqAUAEAAOR
Af8D0wH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/
AvsB+gH/A8YB/wNcAd8DKgFACAAB1gG2AZwB/wHnAbIBlA3/AfcB7wHnAf8BxgEUAQAB/wG9AQwBAAH/
AfcC7wn/AcYBrgGcAf8BrQGGARIB/wHWAcMBtQH/FAAB/wHvAecB/wHvAc8BvQH/Ad4BsgGcAf8BzgGe
AYwB/wHGAZoBhAH/AdYBpgGUAf8B1gG6Aa0C/wL3Af8QAAORAf8D1AH/A/wB/wP8Af8D/AH/AfgC9gH/
AeIB2QHVAf8B5wHfAdsB/wP8Af8D/AH/A/wB/wP8Af8DxwH/A1wB3wMqAUAEAAORAf8D0wH/AvsB+gH/
AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/A8YB/wNc
Ad8DKgFADAAB3gGyAZQB/wHvAccBrQ7/AvcC/wH3Ae8G/wL3Af8BzgG2AaUB/wGtAYYBEgH/AdYBwwG1
Af9IAAKhAaAB/wPBAf8D1AH/A9QB/wPUAf8D1AH/A9QB/wPUAf8D1AH/A9QB/wPUAf8D1AH/A7sB/wNc
Ad8DKgFABAACoQGgAf8DwAH/A9MB/wPTAf8D0wH/A9MB/wPTAf8D0wH/A9MB/wPTAf8D0wH/A9MB/wO6
Af8DXAHfAyoBQBAAAd4BtgGcAf8B5wG2AZQB/wH3Ad8BxgL/AecB3gL/AesB5wH/AfcB5wHeAf8B5wHP
AcYB/wHOAaoBlAH/Ab0BmgGEAf8B1gHDAbUB/0wAAbwBuwG6Af8CoQGgAf8DkQH/A5EB/wORAf8DkQH/
A5EB/wORAf8DkQH/A5EB/wORAf8DkQH/AacCpgH/A1wB3wMqAUAEAAG8AbsBugH/AqEBoAH/A5EB/wOR
Af8DkQH/A5EB/wORAf8DkQH/A5EB/wORAf8DkQH/A5EB/wGnAqYB/wNcAd8DKgFAFAAB3gG+Aa0B/wHe
AbYBnAH/AecBtgGcAf8B5wGyAZQB/wHeAaoBjAH/AdYBrgGcAf8B1gG+AbUB//8A7QABDQGPARIB/wEN
AY8BEgH/AQ0BjwESAf8BDQGPARIB/xgAA9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8DWwHE
JAABEwEnAbcB/wIAAaYB/wFDAVIBxAH/IAADXwHoARMBJwG3Af8MAAH/AUMBMQL/AUMBMQH/SAABDQGP
ARIB/wENAY8BEgH/AQ0BjwESAf8BDQGPARIB/xgAA9oB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wPa
Af8DZQH0AwEBAgMAAQEHAAEBFgABpgH/AgABpgH/AgABpgH/A18B6BgAAUMBUgHEAf8BAwEZAbIB/wMN
AREMAAH/AUMBMQH/CAAB/wFDATEB/0AAAQ0BjwESAf8BDQGPARIB/wENAY8BEgH/AQ0BjwESAf8YAAPa
Af8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8D2gH/A1EBnAQAAwEBAgMEAQUDAAEBFAABQwFSAcQB/wIA
AaYB/wIAAaYB/wIAAaYB/wNSAakMAAMQARYBNQFFAb4B/wEAAQwBrAH/AzEBTRgAAf8BQwExAv8BQwEx
Av8BQwExAf88AAENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/GAAD2gH/AxoB/wMaAf8DGgH/
AxoB/wMaAf8DGgH/A9oB/wNgAesDXQHSA1kBwgNbAcYDVAGsAxsBJhQAA10BygIAAaYB/wIAAaYB/wEA
AQwBrAH/AzEBTQQAAw0BEQETAScBtwH/AgABpgH/A1IBqRgAAf8BQwExAv8BQwExAv8BQwExAv8BQwEx
Av8BQwExAf84AAENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/GAAD2gH/A9oB/wPaAf8D2gH/
A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8DQwF3AwABARgAA1YBqwIAAaYB/wIAAaYB/wEA
AQwBrAH/Az4BawETAScBtwH/AgABpgH/A18B6AMDAQQcAAH/AUMBMQL/AUMBMQL/AUMBMQL/AUMBMQL/
AUMBMQH/IAABDQGPARIB/wENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/AQ0BjwESAf8BDQGP
ARIB/wENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/
BAAD2gH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wPaAf8DNQFXAwQBBQMP
ARQDAAEBFAADPgFrAQABDAGsAf8CAAGmAf8CAAGmAf8CAAGmAf8BQwFSAcQB/wMDBAQBBSAAAf8BQwEx
Av8BQwExAv8BQwExAv8BQwExAv8BQwExAf8cAAENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/
AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/AQ0BjwESAf8BDQGP
ARIB/wENAY8BEgH/AQ0BjwESAf8EAAPaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMa
Af8DGgH/A9oB/wMKAQ4kAANcAckCAAGmAf8CAAGmAf8BAAEMAawB/wMNAREsAAH/AUMBMQL/AUMBMQL/
AUMBMQL/AUMBMQL/AUMBMQH/GAABDQGPARIB/wENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/
AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/AQ0BjwESAf8BDQGP
ARIB/wENAY8BEgH/BAAD2gH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wPa
Af8DLwFKAwUBBwMgAS4DLAFDFAADUgGpAgABpgH/AgABpgH/AgABpgH/AgABpgH/A1wByRAAAwsBDxwA
Af8BQwExAv8BQwExAv8BQwExAv8BQwExAv8BQwExAf8UAAENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wEN
AY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/AQ0BjwES
Af8BDQGPARIB/wENAY8BEgH/AQ0BjwESAf8EAAPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/
A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8QAANcAckCAAGmAf8CAAGmAf8BAAEMAawB/wM+
AWsBEwEnAbcB/wIAAaYB/wNKAYwwAAH/AUMBMQL/AUMBMQL/AUMBMQH/LAABDQGPARIB/wENAY8BEgH/
AQ0BjwESAf8BDQGPARIB/xgAA9oB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMa
Af8DGgH/AxoB/wMaAf8DGgH/A9oB/wwAAUMBUgHEAf8CAAGmAf8CAAGmAf8CAAGmAf8DUgGpBAADDQER
ATUBRQG+Af8BAAEMAawB/wMxAU0wAAH/AUMBMQH/CAAB/wFDATEC/wFDATEB/yAAAQ0BjwESAf8BDQGP
ARIB/wENAY8BEgH/AQ0BjwESAf8YAAPaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMa
Af8DGgH/AxoB/wMaAf8DGgH/AxoB/wPaAf8OAAGmAf8CAAGmAf8CAAGmAf8DXwHoEAABQwFSAcQB/wED
ARkBsgH/Aw0BETQAAf8BQwExAv8BQwExAv8BQwExAf8gAAENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wEN
AY8BEgH/GAAD2gH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/
AxoB/wMaAf8D2gH/DAABEwEnAbcB/wIAAaYB/wFDAVIBxAH/GAADXwHoARMBJwG3Af80AAH/AUMBMQL/
AUMBMQH/JAABDQGPARIB/wENAY8BEgH/AQ0BjwESAf8BDQGPARIB/xgAA9oB/wPaAf8D2gH/A9oB/wPa
Af8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wcAAQGQAAENAY8BEgH/
AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/+AADAQECnAADPQFpAz4BagNBAXIDNwFaAzcBWwM3AVsDOgFi
A0oBiwNLAY4kAAP9Af8D9wH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP3Af8D/QH/HAADigH/
AzoB/wMiAf8DIgH/AyIB/wMiAf8DOgH/A4oB/xAAA/UB/wP1Af8D9QH/A/UB/wP1Af8D9QH/A/UB/wP1
Af8D9QH/A/UB/wP1Af8D9QH/A/UB/wP1Af8D9QH/BAADPQFpAxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/
AxoB/wNKAYkkAAP3Af8DhgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wOGAf8D9wH/FAADuQH/
AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wO5Af8IAAP1Af8DGQH/AxkB/wMZ
Af8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/A/UB/wQAAzsBZQMaAf8B+QLq
Af8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8DGgH/Az4BawM3AVsDNwFbAzcBWwM3AVsUAAP2Af8DGgH/
AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DGgH/
A/YB/xAABP8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8IAAP1
Af8DGQH/Ae4C7wH/Ae4C7wH/Ae4C7wH/AxkB/wHuAu8B/wHuAu8B/wHuAu8B/wMZAf8B7gLvAf8B7gLv
Af8B7gLvAf8DGQH/A/UB/wQAAy4BSAMaAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8DGgH/
AxoB/wMaAf8DGgH/AxoB/wM3AVsUAAP2Af8DGgH/AfEB7wHwAf8DGgH/AfEB7wHwAf8DGgH/AfEB7wHw
Af8DGgH/AfEB7wHwAf8DGgH/A/YB/xAABP8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMi
Af8DIgH/AyIB/wMiAf8IAAP1Af8DGQH/Ae4C7wH/Ae4C7wH/Ae4C7wH/AxkB/wHuAu8B/wHuAu8B/wHu
Au8B/wMZAf8B7gLvAf8B7gLvAf8B7gLvAf8DGQH/A/UB/wQAAywBQwMaAf8B+QLqAf8B+QLqAf8B+QLq
Af8B+QLqAf8B+QLqAf8DGgH/AzcBWwM3AVsDNwFbAxoB/wM3AVsUAAP2Af8DGgH/AfEB7wHwAf8B8QHv
AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wMaAf8B8QHvAfAB/wMaAf8D9gH/EAAE/wMiAf8DIgH/
AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wgAA/UB/wMZAf8DGQH/AxkB/wMZ
Af8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8D9QH/BAADKwFCAxoB/wMaAf8DGgH/
AxoB/wMaAf8DGgH/AxoB/wM3AVsEAAM3AVsDGgH/AzcBWxQAA/YB/wMaAf8B8QHvAfAB/wMaAf8B8QHv
AfAB/wMaAf8B8QHvAfAB/wMaAf8B8QHvAfAB/wMaAf8D9gH/EAAE/wMiAf8DIgH/AyIB/wMiAf8DIgH/
AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wgAA/UB/wMZAf8B7gLvAf8B7gLvAf8B7gLvAf8DGQH/
Ae4C7wH/Ae4C7wH/Ae4C7wH/AxkB/wHuAu8B/wHuAu8B/wHuAu8B/wMZAf8D9QH/BAADKAE8AxoB/wMa
Af8DGgH/AxoB/wMaAf8DGgH/AxoB/wM3AVsEAAM3AVsDGgH/A0ABcRQAA/YB/wMaAf8B8QHvAfAB/wHx
Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wMaAf8D9gH/EAAE/wMi
Af8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wgAA/UB/wMZAf8B7gLv
Af8B7gLvAf8B7gLvAf8DGQH/Ae4C7wH/Ae4C7wH/Ae4C7wH/AxkB/wHuAu8B/wHuAu8B/wHuAu8B/wMZ
Af8D9QH/BAADKgFBAyoBQQMoAT0DJQE3AycBOwMuAUgDNgFZAzcBWwM3AVsEAAM3AVsDGgH/A0oBjRQA
A/YB/wMaAf8B8QHvAfAB/wMaAf8B8QHvAfAB/wMaAf8B8QHvAfAB/wMaAf8B8QHvAfAB/wMaAf8D9gH/
EAAE/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wgAA/UB/wMZ
Af8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8D9QH/HAADNQFW
AzcBWwM3AVsDNwFbAzcBWwMaAf8DSwGOA0oBjANHAYEMAAP2Af8DGgH/AfEB7wHwAf8B8QHvAfAB/wHx
Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DGgH/A/YB/xAABP8DIgH/AyIB/wMi
Af8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8IAAP1Af8DGQH/Ae4C7wH/Ae4C7wH/
Ae4C7wH/AxkB/wHuAu8B/wHuAu8B/wHuAu8B/wMZAf8B7gLvAf8B7gLvAf8B7gLvAf8DGQH/A/UB/xwA
AykBPgMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DPQFoDAAD9gH/AxoB/wHxAe8B8AH/AxoB/wHx
Ae8B8AH/AxoB/wHxAe8B8AH/AxoB/wHxAe8B8AH/AxoB/wP2Af8QAAT/AyIB/wMtAf8DqQH/AuEB4gH/
A/gB/wP4Af8D+AH/A/gB/wLhAeIB/wOpAf8DLQH/AyIB/wgAA/UB/wMZAf8B7gLvAf8B7gLvAf8B7gLv
Af8DGQH/Ae4C7wH/Ae4C7wH/Ae4C7wH/AxkB/wHuAu8B/wHuAu8B/wHuAu8B/wMZAf8D9QH/HAADJQE3
AxoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wMaAf8DOwFjDAAD9gH/AxoB/wHxAe8B8AH/
AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AxoB/wP2Af8QAAPz
Af8DLQH/A+0B/wP4Af8D+AH/A/gB/wP4Af8D+AH/A/gB/wP4Af8D+AH/A+0B/wMiAf8IAAP1Af8DGQH/
AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/A/UB/xwAAyUBNwMa
Af8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8DGgH/Ay8BSgwAA/YB/wMaAf8B8QHvAfAB/wMa
Af8DGgH/AxoB/wMaAf8DGgH/AfEB7wHwAf8DGgH/A/YB/xQAAy0B/wPtAf8D+AH/A/gB/wP4Af8D+AH/
A/gB/wP4Af8D+AH/A/gB/wPtAf8DIgH/CAAD9QH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZ
Af8DGQH/AxkB/wMZAf8DGQH/AxkB/wP1Af8cAAMlATcDGgH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/
AfkC6gH/AxoB/wMrAUIMAAP2Af8DGgH/AfEB7wHwAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wHxAe8B8AH/
AxoB/wP2Af8UAAO5Af8DLQH/A6kB/wLhAeIB/wP4Af8D+AH/A/gB/wP4Af8C4QHiAf8DqQH/Ay0B/wO5
Af8IAAP1Af8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/
A/UB/xwAAyoBQAMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DKwFCDAAD9gH/AxoB/wHxAe8B8AH/
AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AxoB/wP2Af8YAAPo
Af8DigH/AzoB/wMiAf8DIgH/AyIB/wMiAf8DOgH/A4oB/wPoAf8MAAP1Af8D9QH/A/UB/wP1Af8D9QH/
A/UB/wP1Af8D9QH/A/UB/wP1Af8D9QH/A/UB/wP1Af8D9QH/A/UB/xwAAysBQgMaAf8DGgH/AxoB/wMa
Af8DGgH/AxoB/wMaAf8DMwFTDAAD9wH/A4YB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DhgH/
A/cB/6QAAysBQgMuAUcDPgFqA0cBgQNKAYkDNwFbAzcBWwM3AVoDNwFaDAAD/QH/A/cB/wP2Af8D9gH/
A/YB/wP2Af8D9gH/A/YB/wP2Af8D9wH/A/0B/wwAAUIBTQE+BwABPgMAASgDAAFAAwABcAMAAQEBAAEB
BQABgAEDFgAD/wEAAQ8D/wHwAQ8DAAEfAf8BgAHwAQ8DAAEPAf8BgAHwAQ8CAAGAAQ8BwAEAAfABDwIA
AcABDwHAAQAB8AEPAgABgAEPAcABAAHwAQ8CAAGAAQcBxwGAAfABDwIAAcABBwHHAYAB4AEHAgAB4AED
AQEBgAHAAQMCAAHwAgEBgAHAAQMCAAHwAwABwAEDAgAB8AMAAcABAwIAAfADAAHAAQMCAAHwAQABAQGA
AeABBwIAAfABAAEBAYAB4AEHAgAB+AEBAv8B8AEPAgAG/wEPAf8B/AE/Av8B5wH/AQABHwH8AT8B/AF4
AfMB/wIAAfwBPwH+AXgB+wEnAYABAAH8AT8BPgFwAfkBKwGAAQAB/AE/AR4BAQH5Ac8BgAEAAYABAQGM
AQMB+QHPAYABAAGAAQEByAEzAfkBzwGAAQABgAEBAeEBAwH8AZMBgAEAAYABAQHjAYcB/AH/AYABAAH8
AT8BAAEHAfgBfwGAAQAB/AE/AQABBwH+Af8BgAEAAfwBPwECAQ8B/gH/AYABAAH8AT8B4wH/Af4BPwGA
AQAB/AE/A/8BPwGAAQAB/wF/BP8BgAEACP8CAAGAAXkE/wIAAYABcQHHAfkB8AEfAgABgAFjAcMB8QHg
AQ8CAAGAAQcBwQHDAeABBwIAAYABDwHgAYcBwAEDAgABgAEBAfABBwHAAQMCAAGAAQEB+AEHAcABAwIA
AYABAQH8AR8BwAEDAgABgAEBAfgBHgHAAQMCAAH8AQEB8AEPAcABAwIAAf4BAQHgAYcBwAEDAgAB/gEB
AeEB4wHgAQcCAAH+AQMB4wHzAfABDwIAAf4BBwG/A/8CAAj/AwABAwEAAR8FAAEBAQABHwcAAQcHAAEH
BwABBwGAAQEGAAGAAQEGAAHAAQMCAAGAAQABgAEAAcABAwIAAYABAAGAAQAB4AEHAgABgAEAAYABAAHw
AQcCAAGAAQABgAEAAfABDwIAAYABAAGAAQAB+AEfAgABwAEAAYABAAH4AR8CAAHAAQAB8AEAAfwBPwIA
AeABAQHwAQAB/AE/AgAB8AEDAfABAAr/AQABAQEAAQEB8AEPAfABHwEAAQEBAAEBAeABBwHgAQ8BAAEB
AQABAQHAAQMB4AEHAQABAQEAAQEBgAEBAcABAwEAAQEBAAEBAYABAQHAAQMBAAEBAQABAQEAAQEBwAED
AQABAQEAAQEBAAEBAcABAwEAAQEBAAEBAQABAQHAAQMBAAEBAQABAQEAAQEBwAEDAQABAQEAAQEBAAEB
AcABAwEAAQEBAAEBAYABAQHgAQcBAAEBAQABAQGAAQEB8AEPAQABAQEAAQEBwAEDAv8BAAEBAQABAQHg
AQcC/wEAAQEBAAEBAfABHw7/AfwBPwEAAX8BxwH5Ac8B/wH8AT8BAAEXAcMB8QHbAf8B/AE/AQABRwHB
AcMB8QH/AfwBPwEAAQMB4AGHAeAB/wH8AT8BAAEDAfABBwHwAX8BgAEBAgAB+AEHAfgBPwGAAQEBAAEH
AfwBHwH8AR8BgAEBAgAB+AEeAf4BDwGAAQECAAHwAQ8B/wEfAfwBPwIAAeABhwH/AbMB/AE/AgAB4QHj
Af8B4wH8AT8CAAHjAfMB/wHnAfwBPwIAAb8D/wH8AT8H/wF/BP8BAAF/AcABBwHwAQ8BAAEBAQABfwHA
AQcBwAEDAQABAQEAAQcBwAEHAYABAwEAAQEBAAEHAcABBwGAAQMBAAEBAQABBwHAAQcBgAEDAQABAQEA
AUcBwAEHAYABAwEAAQEBAAFHAcABBwGAAQMBAAEBAQABRwHAAQcBgAEDAQABAQH8AQEBwAEHAYABAwEA
AQEB/AEBAcABBwGAAQMBAAEBAfwBAQHAAQcBgAEDAQABAQH8AQEBwAEHAcABAwEAAQEB/AEBAcABBwHA
AQMBAAEBAfwBAQHAAQcB4AEHAQABAQH8AQEBwAEHBP8B/AEBAcABBws=
</value>
</data>
</root>

View File

@ -0,0 +1,601 @@
namespace AlmToolkit
{
partial class ComparisonForm
{
/// <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(ComparisonForm));
this.StatusBarComparsion = new System.Windows.Forms.StatusStrip();
this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
this.toolStripProgressBar1 = new System.Windows.Forms.ToolStripProgressBar();
this.toolStripStatusLabel2 = new System.Windows.Forms.ToolStripStatusLabel();
this.NewVersionLink = new System.Windows.Forms.ToolStripStatusLabel();
this.tabHome = new System.Windows.Forms.RibbonTab();
this.panelCompare = new System.Windows.Forms.RibbonPanel();
this.btnCompareTabularModels = new System.Windows.Forms.RibbonButton();
this.ddSelectActions = new System.Windows.Forms.RibbonButton();
this.mnuHideSkipObjects = new System.Windows.Forms.RibbonButton();
this.mnuHideSkipObjectsWithSameDefinition = new System.Windows.Forms.RibbonButton();
this.mnuShowSkipObjects = new System.Windows.Forms.RibbonButton();
this.ribbonSeparator1 = new System.Windows.Forms.RibbonSeparator();
this.mnuSkipAllObjectsMissingInSource = new System.Windows.Forms.RibbonButton();
this.mnuDeleteAllObjectsMissingInSource = new System.Windows.Forms.RibbonButton();
this.mnuSkipAllObjectsMissingInTarget = new System.Windows.Forms.RibbonButton();
this.mnuCreateAllObjectsMissingInTarget = new System.Windows.Forms.RibbonButton();
this.mnuSkipAllObjectsWithDifferentDefinitions = new System.Windows.Forms.RibbonButton();
this.mnuUpdateAllObjectsWithDifferentDefinitions = new System.Windows.Forms.RibbonButton();
this.btnValidateSelection = new System.Windows.Forms.RibbonButton();
this.btnUpdate = new System.Windows.Forms.RibbonButton();
this.btnGenerateScript = new System.Windows.Forms.RibbonButton();
this.panelMisc = new System.Windows.Forms.RibbonPanel();
this.btnOptions = new System.Windows.Forms.RibbonButton();
this.btnReportDifferences = new System.Windows.Forms.RibbonButton();
this.tabHelp = new System.Windows.Forms.RibbonTab();
this.panelHelp = new System.Windows.Forms.RibbonPanel();
this.btnHelp = new System.Windows.Forms.RibbonButton();
this.pnlRibbon = new System.Windows.Forms.Panel();
this.maqSoftwareLogo = new System.Windows.Forms.PictureBox();
this.powerBiLogo = new System.Windows.Forms.PictureBox();
this.ribbonMain = new System.Windows.Forms.Ribbon();
this.mnuOpen = new System.Windows.Forms.RibbonOrbMenuItem();
this.mnuSave = new System.Windows.Forms.RibbonOrbMenuItem();
this.mnuSaveAs = new System.Windows.Forms.RibbonOrbMenuItem();
this.mnuExit = new System.Windows.Forms.RibbonOrbMenuItem();
this.pnlHeader = new System.Windows.Forms.Panel();
this.spltSourceTarget = new System.Windows.Forms.SplitContainer();
this.label1 = new System.Windows.Forms.Label();
this.txtSource = new System.Windows.Forms.TextBox();
this.txtTarget = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.StatusBarComparsion.SuspendLayout();
this.pnlRibbon.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.maqSoftwareLogo)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.powerBiLogo)).BeginInit();
this.pnlHeader.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.spltSourceTarget)).BeginInit();
this.spltSourceTarget.Panel1.SuspendLayout();
this.spltSourceTarget.Panel2.SuspendLayout();
this.spltSourceTarget.SuspendLayout();
this.SuspendLayout();
//
// StatusBarComparsion
//
this.StatusBarComparsion.ImageScalingSize = new System.Drawing.Size(36, 36);
this.StatusBarComparsion.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripStatusLabel1,
this.toolStripProgressBar1,
this.toolStripStatusLabel2,
this.NewVersionLink});
this.StatusBarComparsion.Location = new System.Drawing.Point(0, 810);
this.StatusBarComparsion.Name = "StatusBarComparsion";
this.StatusBarComparsion.Size = new System.Drawing.Size(1176, 22);
this.StatusBarComparsion.TabIndex = 48;
this.StatusBarComparsion.Text = "Comparison Status";
//
// toolStripStatusLabel1
//
this.toolStripStatusLabel1.Name = "toolStripStatusLabel1";
this.toolStripStatusLabel1.Size = new System.Drawing.Size(0, 17);
//
// toolStripProgressBar1
//
this.toolStripProgressBar1.Name = "toolStripProgressBar1";
this.toolStripProgressBar1.Size = new System.Drawing.Size(100, 16);
this.toolStripProgressBar1.Visible = false;
//
// toolStripStatusLabel2
//
this.toolStripStatusLabel2.Name = "toolStripStatusLabel2";
this.toolStripStatusLabel2.Size = new System.Drawing.Size(1161, 17);
this.toolStripStatusLabel2.Spring = true;
//
// NewVersionLink
//
this.NewVersionLink.IsLink = true;
this.NewVersionLink.Name = "NewVersionLink";
this.NewVersionLink.Size = new System.Drawing.Size(72, 17);
this.NewVersionLink.Text = "New version";
this.NewVersionLink.Visible = false;
this.NewVersionLink.Click += new System.EventHandler(this.NewVersionLink_Click);
//
// tabHome
//
this.tabHome.Name = "tabHome";
this.tabHome.Panels.Add(this.panelCompare);
this.tabHome.Panels.Add(this.panelMisc);
this.tabHome.Text = "Home";
//
// panelCompare
//
this.panelCompare.ButtonMoreVisible = false;
this.panelCompare.Items.Add(this.btnCompareTabularModels);
this.panelCompare.Items.Add(this.ddSelectActions);
this.panelCompare.Items.Add(this.btnValidateSelection);
this.panelCompare.Items.Add(this.btnUpdate);
this.panelCompare.Items.Add(this.btnGenerateScript);
this.panelCompare.Name = "panelCompare";
this.panelCompare.Text = "";
//
// btnCompareTabularModels
//
this.btnCompareTabularModels.Image = ((System.Drawing.Image)(resources.GetObject("btnCompareTabularModels.Image")));
this.btnCompareTabularModels.LargeImage = ((System.Drawing.Image)(resources.GetObject("btnCompareTabularModels.LargeImage")));
this.btnCompareTabularModels.Name = "btnCompareTabularModels";
this.btnCompareTabularModels.SmallImage = ((System.Drawing.Image)(resources.GetObject("btnCompareTabularModels.SmallImage")));
this.btnCompareTabularModels.Text = "Compare";
this.btnCompareTabularModels.Click += new System.EventHandler(this.btnCompareTabularModels_Click);
//
// ddSelectActions
//
this.ddSelectActions.DrawDropDownIconsBar = false;
this.ddSelectActions.DropDownItems.Add(this.mnuHideSkipObjects);
this.ddSelectActions.DropDownItems.Add(this.mnuHideSkipObjectsWithSameDefinition);
this.ddSelectActions.DropDownItems.Add(this.mnuShowSkipObjects);
this.ddSelectActions.DropDownItems.Add(this.ribbonSeparator1);
this.ddSelectActions.DropDownItems.Add(this.mnuSkipAllObjectsMissingInSource);
this.ddSelectActions.DropDownItems.Add(this.mnuDeleteAllObjectsMissingInSource);
this.ddSelectActions.DropDownItems.Add(this.mnuSkipAllObjectsMissingInTarget);
this.ddSelectActions.DropDownItems.Add(this.mnuCreateAllObjectsMissingInTarget);
this.ddSelectActions.DropDownItems.Add(this.mnuSkipAllObjectsWithDifferentDefinitions);
this.ddSelectActions.DropDownItems.Add(this.mnuUpdateAllObjectsWithDifferentDefinitions);
this.ddSelectActions.Image = ((System.Drawing.Image)(resources.GetObject("ddSelectActions.Image")));
this.ddSelectActions.LargeImage = ((System.Drawing.Image)(resources.GetObject("ddSelectActions.LargeImage")));
this.ddSelectActions.Name = "ddSelectActions";
this.ddSelectActions.SmallImage = ((System.Drawing.Image)(resources.GetObject("ddSelectActions.SmallImage")));
this.ddSelectActions.Style = System.Windows.Forms.RibbonButtonStyle.DropDown;
this.ddSelectActions.Text = "Select Actions";
//
// mnuHideSkipObjects
//
this.mnuHideSkipObjects.DropDownArrowDirection = System.Windows.Forms.RibbonArrowDirection.Left;
this.mnuHideSkipObjects.Image = ((System.Drawing.Image)(resources.GetObject("mnuHideSkipObjects.Image")));
this.mnuHideSkipObjects.LargeImage = ((System.Drawing.Image)(resources.GetObject("mnuHideSkipObjects.LargeImage")));
this.mnuHideSkipObjects.Name = "mnuHideSkipObjects";
this.mnuHideSkipObjects.SmallImage = ((System.Drawing.Image)(resources.GetObject("mnuHideSkipObjects.SmallImage")));
this.mnuHideSkipObjects.Text = "Hide Skip Objects";
this.mnuHideSkipObjects.Click += new System.EventHandler(this.mnuHideSkipObjects_Click);
//
// mnuHideSkipObjectsWithSameDefinition
//
this.mnuHideSkipObjectsWithSameDefinition.DropDownArrowDirection = System.Windows.Forms.RibbonArrowDirection.Left;
this.mnuHideSkipObjectsWithSameDefinition.Image = ((System.Drawing.Image)(resources.GetObject("mnuHideSkipObjectsWithSameDefinition.Image")));
this.mnuHideSkipObjectsWithSameDefinition.LargeImage = ((System.Drawing.Image)(resources.GetObject("mnuHideSkipObjectsWithSameDefinition.LargeImage")));
this.mnuHideSkipObjectsWithSameDefinition.Name = "mnuHideSkipObjectsWithSameDefinition";
this.mnuHideSkipObjectsWithSameDefinition.SmallImage = ((System.Drawing.Image)(resources.GetObject("mnuHideSkipObjectsWithSameDefinition.SmallImage")));
this.mnuHideSkipObjectsWithSameDefinition.Text = "Hide Skip Objects with Same Definition";
this.mnuHideSkipObjectsWithSameDefinition.Click += new System.EventHandler(this.mnuHideSkipObjectsWithSameDefinition_Click);
//
// mnuShowSkipObjects
//
this.mnuShowSkipObjects.DropDownArrowDirection = System.Windows.Forms.RibbonArrowDirection.Left;
this.mnuShowSkipObjects.Image = ((System.Drawing.Image)(resources.GetObject("mnuShowSkipObjects.Image")));
this.mnuShowSkipObjects.LargeImage = ((System.Drawing.Image)(resources.GetObject("mnuShowSkipObjects.LargeImage")));
this.mnuShowSkipObjects.Name = "mnuShowSkipObjects";
this.mnuShowSkipObjects.SmallImage = ((System.Drawing.Image)(resources.GetObject("mnuShowSkipObjects.SmallImage")));
this.mnuShowSkipObjects.Text = "Show Skip Objects";
this.mnuShowSkipObjects.Click += new System.EventHandler(this.mnuShowSkipObjects_Click);
//
// ribbonSeparator1
//
this.ribbonSeparator1.Name = "ribbonSeparator1";
//
// mnuSkipAllObjectsMissingInSource
//
this.mnuSkipAllObjectsMissingInSource.DropDownArrowDirection = System.Windows.Forms.RibbonArrowDirection.Left;
this.mnuSkipAllObjectsMissingInSource.Image = ((System.Drawing.Image)(resources.GetObject("mnuSkipAllObjectsMissingInSource.Image")));
this.mnuSkipAllObjectsMissingInSource.LargeImage = ((System.Drawing.Image)(resources.GetObject("mnuSkipAllObjectsMissingInSource.LargeImage")));
this.mnuSkipAllObjectsMissingInSource.Name = "mnuSkipAllObjectsMissingInSource";
this.mnuSkipAllObjectsMissingInSource.SmallImage = ((System.Drawing.Image)(resources.GetObject("mnuSkipAllObjectsMissingInSource.SmallImage")));
this.mnuSkipAllObjectsMissingInSource.Text = "Skip all objects Missing in Source";
this.mnuSkipAllObjectsMissingInSource.Click += new System.EventHandler(this.mnuSkipAllObjectsMissingInSource_Click);
//
// mnuDeleteAllObjectsMissingInSource
//
this.mnuDeleteAllObjectsMissingInSource.DropDownArrowDirection = System.Windows.Forms.RibbonArrowDirection.Left;
this.mnuDeleteAllObjectsMissingInSource.Image = ((System.Drawing.Image)(resources.GetObject("mnuDeleteAllObjectsMissingInSource.Image")));
this.mnuDeleteAllObjectsMissingInSource.LargeImage = ((System.Drawing.Image)(resources.GetObject("mnuDeleteAllObjectsMissingInSource.LargeImage")));
this.mnuDeleteAllObjectsMissingInSource.Name = "mnuDeleteAllObjectsMissingInSource";
this.mnuDeleteAllObjectsMissingInSource.SmallImage = ((System.Drawing.Image)(resources.GetObject("mnuDeleteAllObjectsMissingInSource.SmallImage")));
this.mnuDeleteAllObjectsMissingInSource.Text = "Delete all objects Missing in Source";
this.mnuDeleteAllObjectsMissingInSource.Click += new System.EventHandler(this.mnuDeleteAllObjectsMissingInSource_Click);
//
// mnuSkipAllObjectsMissingInTarget
//
this.mnuSkipAllObjectsMissingInTarget.DropDownArrowDirection = System.Windows.Forms.RibbonArrowDirection.Left;
this.mnuSkipAllObjectsMissingInTarget.Image = ((System.Drawing.Image)(resources.GetObject("mnuSkipAllObjectsMissingInTarget.Image")));
this.mnuSkipAllObjectsMissingInTarget.LargeImage = ((System.Drawing.Image)(resources.GetObject("mnuSkipAllObjectsMissingInTarget.LargeImage")));
this.mnuSkipAllObjectsMissingInTarget.Name = "mnuSkipAllObjectsMissingInTarget";
this.mnuSkipAllObjectsMissingInTarget.SmallImage = ((System.Drawing.Image)(resources.GetObject("mnuSkipAllObjectsMissingInTarget.SmallImage")));
this.mnuSkipAllObjectsMissingInTarget.Text = "Skip all objects Missing In Target";
this.mnuSkipAllObjectsMissingInTarget.Click += new System.EventHandler(this.mnuSkipAllObjectsMissingInTarget_Click);
//
// mnuCreateAllObjectsMissingInTarget
//
this.mnuCreateAllObjectsMissingInTarget.DropDownArrowDirection = System.Windows.Forms.RibbonArrowDirection.Left;
this.mnuCreateAllObjectsMissingInTarget.Image = ((System.Drawing.Image)(resources.GetObject("mnuCreateAllObjectsMissingInTarget.Image")));
this.mnuCreateAllObjectsMissingInTarget.LargeImage = ((System.Drawing.Image)(resources.GetObject("mnuCreateAllObjectsMissingInTarget.LargeImage")));
this.mnuCreateAllObjectsMissingInTarget.Name = "mnuCreateAllObjectsMissingInTarget";
this.mnuCreateAllObjectsMissingInTarget.SmallImage = ((System.Drawing.Image)(resources.GetObject("mnuCreateAllObjectsMissingInTarget.SmallImage")));
this.mnuCreateAllObjectsMissingInTarget.Text = "Create all objects Missing in Target";
this.mnuCreateAllObjectsMissingInTarget.Click += new System.EventHandler(this.mnuCreateAllObjectsMissingInTarget_Click);
//
// mnuSkipAllObjectsWithDifferentDefinitions
//
this.mnuSkipAllObjectsWithDifferentDefinitions.DropDownArrowDirection = System.Windows.Forms.RibbonArrowDirection.Left;
this.mnuSkipAllObjectsWithDifferentDefinitions.Image = ((System.Drawing.Image)(resources.GetObject("mnuSkipAllObjectsWithDifferentDefinitions.Image")));
this.mnuSkipAllObjectsWithDifferentDefinitions.LargeImage = ((System.Drawing.Image)(resources.GetObject("mnuSkipAllObjectsWithDifferentDefinitions.LargeImage")));
this.mnuSkipAllObjectsWithDifferentDefinitions.Name = "mnuSkipAllObjectsWithDifferentDefinitions";
this.mnuSkipAllObjectsWithDifferentDefinitions.SmallImage = ((System.Drawing.Image)(resources.GetObject("mnuSkipAllObjectsWithDifferentDefinitions.SmallImage")));
this.mnuSkipAllObjectsWithDifferentDefinitions.Text = "Skip all objects with Different Definitions";
this.mnuSkipAllObjectsWithDifferentDefinitions.Click += new System.EventHandler(this.mnuSkipAllObjectsWithDifferentDefinitions_Click);
//
// mnuUpdateAllObjectsWithDifferentDefinitions
//
this.mnuUpdateAllObjectsWithDifferentDefinitions.DropDownArrowDirection = System.Windows.Forms.RibbonArrowDirection.Left;
this.mnuUpdateAllObjectsWithDifferentDefinitions.Image = ((System.Drawing.Image)(resources.GetObject("mnuUpdateAllObjectsWithDifferentDefinitions.Image")));
this.mnuUpdateAllObjectsWithDifferentDefinitions.LargeImage = ((System.Drawing.Image)(resources.GetObject("mnuUpdateAllObjectsWithDifferentDefinitions.LargeImage")));
this.mnuUpdateAllObjectsWithDifferentDefinitions.Name = "mnuUpdateAllObjectsWithDifferentDefinitions";
this.mnuUpdateAllObjectsWithDifferentDefinitions.SmallImage = ((System.Drawing.Image)(resources.GetObject("mnuUpdateAllObjectsWithDifferentDefinitions.SmallImage")));
this.mnuUpdateAllObjectsWithDifferentDefinitions.Text = "Update all objects with Different Definitions";
this.mnuUpdateAllObjectsWithDifferentDefinitions.Click += new System.EventHandler(this.mnuUpdateAllObjectsWithDifferentDefinitions_Click);
//
// btnValidateSelection
//
this.btnValidateSelection.Image = ((System.Drawing.Image)(resources.GetObject("btnValidateSelection.Image")));
this.btnValidateSelection.LargeImage = ((System.Drawing.Image)(resources.GetObject("btnValidateSelection.LargeImage")));
this.btnValidateSelection.Name = "btnValidateSelection";
this.btnValidateSelection.SmallImage = ((System.Drawing.Image)(resources.GetObject("btnValidateSelection.SmallImage")));
this.btnValidateSelection.Text = "Validate Selection";
this.btnValidateSelection.Click += new System.EventHandler(this.btnValidateSelection_Click);
//
// btnUpdate
//
this.btnUpdate.Image = ((System.Drawing.Image)(resources.GetObject("btnUpdate.Image")));
this.btnUpdate.LargeImage = ((System.Drawing.Image)(resources.GetObject("btnUpdate.LargeImage")));
this.btnUpdate.Name = "btnUpdate";
this.btnUpdate.SmallImage = ((System.Drawing.Image)(resources.GetObject("btnUpdate.SmallImage")));
this.btnUpdate.Text = "Update";
this.btnUpdate.Click += new System.EventHandler(this.btnUpdate_Click);
//
// btnGenerateScript
//
this.btnGenerateScript.Image = ((System.Drawing.Image)(resources.GetObject("btnGenerateScript.Image")));
this.btnGenerateScript.LargeImage = ((System.Drawing.Image)(resources.GetObject("btnGenerateScript.LargeImage")));
this.btnGenerateScript.Name = "btnGenerateScript";
this.btnGenerateScript.SmallImage = ((System.Drawing.Image)(resources.GetObject("btnGenerateScript.SmallImage")));
this.btnGenerateScript.Text = "Generate Script";
this.btnGenerateScript.Click += new System.EventHandler(this.btnGenerateScript_Click);
//
// panelMisc
//
this.panelMisc.ButtonMoreVisible = false;
this.panelMisc.Items.Add(this.btnOptions);
this.panelMisc.Items.Add(this.btnReportDifferences);
this.panelMisc.Name = "panelMisc";
this.panelMisc.Text = null;
//
// btnOptions
//
this.btnOptions.Image = ((System.Drawing.Image)(resources.GetObject("btnOptions.Image")));
this.btnOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("btnOptions.LargeImage")));
this.btnOptions.Name = "btnOptions";
this.btnOptions.SmallImage = ((System.Drawing.Image)(resources.GetObject("btnOptions.SmallImage")));
this.btnOptions.Text = "Options";
this.btnOptions.Click += new System.EventHandler(this.btnOptions_Click);
//
// btnReportDifferences
//
this.btnReportDifferences.Image = ((System.Drawing.Image)(resources.GetObject("btnReportDifferences.Image")));
this.btnReportDifferences.LargeImage = ((System.Drawing.Image)(resources.GetObject("btnReportDifferences.LargeImage")));
this.btnReportDifferences.Name = "btnReportDifferences";
this.btnReportDifferences.SmallImage = ((System.Drawing.Image)(resources.GetObject("btnReportDifferences.SmallImage")));
this.btnReportDifferences.Text = "Report Differences";
this.btnReportDifferences.Click += new System.EventHandler(this.btnReportDifferences_Click);
//
// tabHelp
//
this.tabHelp.Name = "tabHelp";
this.tabHelp.Panels.Add(this.panelHelp);
this.tabHelp.Text = "Help";
//
// panelHelp
//
this.panelHelp.ButtonMoreVisible = false;
this.panelHelp.Items.Add(this.btnHelp);
this.panelHelp.Name = "panelHelp";
this.panelHelp.Text = null;
//
// btnHelp
//
this.btnHelp.Image = ((System.Drawing.Image)(resources.GetObject("btnHelp.Image")));
this.btnHelp.LargeImage = ((System.Drawing.Image)(resources.GetObject("btnHelp.LargeImage")));
this.btnHelp.Name = "btnHelp";
this.btnHelp.SmallImage = ((System.Drawing.Image)(resources.GetObject("btnHelp.SmallImage")));
this.btnHelp.Text = "Info";
this.btnHelp.Click += new System.EventHandler(this.btnHelp_Click);
//
// pnlRibbon
//
this.pnlRibbon.Controls.Add(this.maqSoftwareLogo);
this.pnlRibbon.Controls.Add(this.powerBiLogo);
this.pnlRibbon.Controls.Add(this.ribbonMain);
this.pnlRibbon.Dock = System.Windows.Forms.DockStyle.Top;
this.pnlRibbon.Location = new System.Drawing.Point(0, 0);
this.pnlRibbon.Margin = new System.Windows.Forms.Padding(1);
this.pnlRibbon.Name = "pnlRibbon";
this.pnlRibbon.Size = new System.Drawing.Size(1176, 115);
this.pnlRibbon.TabIndex = 49;
//
// maqSoftwareLogo
//
this.maqSoftwareLogo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.maqSoftwareLogo.BackColor = System.Drawing.Color.White;
this.maqSoftwareLogo.Cursor = System.Windows.Forms.Cursors.Hand;
this.maqSoftwareLogo.Image = ((System.Drawing.Image)(resources.GetObject("maqSoftwareLogo.Image")));
this.maqSoftwareLogo.Location = new System.Drawing.Point(862, 32);
this.maqSoftwareLogo.Margin = new System.Windows.Forms.Padding(1);
this.maqSoftwareLogo.Name = "maqSoftwareLogo";
this.maqSoftwareLogo.Size = new System.Drawing.Size(163, 50);
this.maqSoftwareLogo.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.maqSoftwareLogo.TabIndex = 3;
this.maqSoftwareLogo.TabStop = false;
this.maqSoftwareLogo.Click += new System.EventHandler(this.maqSoftwareLogo_Click);
//
// powerBiLogo
//
this.powerBiLogo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.powerBiLogo.Image = ((System.Drawing.Image)(resources.GetObject("powerBiLogo.Image")));
this.powerBiLogo.Location = new System.Drawing.Point(1022, 28);
this.powerBiLogo.Margin = new System.Windows.Forms.Padding(1);
this.powerBiLogo.Name = "powerBiLogo";
this.powerBiLogo.Size = new System.Drawing.Size(149, 58);
this.powerBiLogo.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.powerBiLogo.TabIndex = 2;
this.powerBiLogo.TabStop = false;
//
// ribbonMain
//
this.ribbonMain.CaptionBarVisible = false;
this.ribbonMain.Font = new System.Drawing.Font("Segoe UI", 9F);
this.ribbonMain.Location = new System.Drawing.Point(0, 0);
this.ribbonMain.Margin = new System.Windows.Forms.Padding(1);
this.ribbonMain.Minimized = false;
this.ribbonMain.Name = "ribbonMain";
//
//
//
this.ribbonMain.OrbDropDown.BorderRoundness = 8;
this.ribbonMain.OrbDropDown.Location = new System.Drawing.Point(0, 0);
this.ribbonMain.OrbDropDown.MenuItems.Add(this.mnuOpen);
this.ribbonMain.OrbDropDown.MenuItems.Add(this.mnuSave);
this.ribbonMain.OrbDropDown.MenuItems.Add(this.mnuSaveAs);
this.ribbonMain.OrbDropDown.MenuItems.Add(this.mnuExit);
this.ribbonMain.OrbDropDown.Name = "";
this.ribbonMain.OrbDropDown.Size = new System.Drawing.Size(140, 248);
this.ribbonMain.OrbDropDown.TabIndex = 0;
this.ribbonMain.OrbStyle = System.Windows.Forms.RibbonOrbStyle.Office_2013;
this.ribbonMain.OrbText = "File";
this.ribbonMain.RibbonTabFont = new System.Drawing.Font("Trebuchet MS", 9F);
this.ribbonMain.Size = new System.Drawing.Size(1176, 90);
this.ribbonMain.TabIndex = 1;
this.ribbonMain.Tabs.Add(this.tabHome);
this.ribbonMain.Tabs.Add(this.tabHelp);
this.ribbonMain.TabsMargin = new System.Windows.Forms.Padding(5, 2, 20, 0);
this.ribbonMain.TabSpacing = 4;
//
// mnuOpen
//
this.mnuOpen.DropDownArrowDirection = System.Windows.Forms.RibbonArrowDirection.Left;
this.mnuOpen.Image = ((System.Drawing.Image)(resources.GetObject("mnuOpen.Image")));
this.mnuOpen.LargeImage = ((System.Drawing.Image)(resources.GetObject("mnuOpen.LargeImage")));
this.mnuOpen.Name = "mnuOpen";
this.mnuOpen.SmallImage = ((System.Drawing.Image)(resources.GetObject("mnuOpen.SmallImage")));
this.mnuOpen.Text = "Open";
this.mnuOpen.Click += new System.EventHandler(this.mnuOpen_Click);
//
// mnuSave
//
this.mnuSave.DropDownArrowDirection = System.Windows.Forms.RibbonArrowDirection.Left;
this.mnuSave.Image = ((System.Drawing.Image)(resources.GetObject("mnuSave.Image")));
this.mnuSave.LargeImage = ((System.Drawing.Image)(resources.GetObject("mnuSave.LargeImage")));
this.mnuSave.Name = "mnuSave";
this.mnuSave.SmallImage = ((System.Drawing.Image)(resources.GetObject("mnuSave.SmallImage")));
this.mnuSave.Text = "Save";
this.mnuSave.Click += new System.EventHandler(this.mnuSave_Click);
//
// mnuSaveAs
//
this.mnuSaveAs.DropDownArrowDirection = System.Windows.Forms.RibbonArrowDirection.Left;
this.mnuSaveAs.Image = ((System.Drawing.Image)(resources.GetObject("mnuSaveAs.Image")));
this.mnuSaveAs.LargeImage = ((System.Drawing.Image)(resources.GetObject("mnuSaveAs.LargeImage")));
this.mnuSaveAs.Name = "mnuSaveAs";
this.mnuSaveAs.SmallImage = ((System.Drawing.Image)(resources.GetObject("mnuSaveAs.SmallImage")));
this.mnuSaveAs.Text = "Save As";
this.mnuSaveAs.Click += new System.EventHandler(this.mnuSaveAs_Click);
//
// mnuExit
//
this.mnuExit.DropDownArrowDirection = System.Windows.Forms.RibbonArrowDirection.Left;
this.mnuExit.Image = ((System.Drawing.Image)(resources.GetObject("mnuExit.Image")));
this.mnuExit.LargeImage = ((System.Drawing.Image)(resources.GetObject("mnuExit.LargeImage")));
this.mnuExit.Name = "mnuExit";
this.mnuExit.SmallImage = ((System.Drawing.Image)(resources.GetObject("mnuExit.SmallImage")));
this.mnuExit.Text = "Exit";
this.mnuExit.Click += new System.EventHandler(this.mnuExit_Click);
//
// pnlHeader
//
this.pnlHeader.BackColor = System.Drawing.SystemColors.HighlightText;
this.pnlHeader.Controls.Add(this.spltSourceTarget);
this.pnlHeader.Dock = System.Windows.Forms.DockStyle.Top;
this.pnlHeader.Location = new System.Drawing.Point(0, 115);
this.pnlHeader.Name = "pnlHeader";
this.pnlHeader.Size = new System.Drawing.Size(1176, 33);
this.pnlHeader.TabIndex = 50;
//
// spltSourceTarget
//
this.spltSourceTarget.Dock = System.Windows.Forms.DockStyle.Fill;
this.spltSourceTarget.IsSplitterFixed = true;
this.spltSourceTarget.Location = new System.Drawing.Point(0, 0);
this.spltSourceTarget.Name = "spltSourceTarget";
//
// spltSourceTarget.Panel1
//
this.spltSourceTarget.Panel1.Controls.Add(this.label1);
this.spltSourceTarget.Panel1.Controls.Add(this.txtSource);
this.spltSourceTarget.Panel1.RightToLeft = System.Windows.Forms.RightToLeft.No;
//
// spltSourceTarget.Panel2
//
this.spltSourceTarget.Panel2.Controls.Add(this.txtTarget);
this.spltSourceTarget.Panel2.Controls.Add(this.label2);
this.spltSourceTarget.Panel2.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.spltSourceTarget.Size = new System.Drawing.Size(1176, 33);
this.spltSourceTarget.SplitterDistance = 594;
this.spltSourceTarget.TabIndex = 45;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(2, 8);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(41, 13);
this.label1.TabIndex = 39;
this.label1.Text = "Source";
//
// txtSource
//
this.txtSource.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtSource.BackColor = System.Drawing.SystemColors.HighlightText;
this.txtSource.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.txtSource.Location = new System.Drawing.Point(49, 6);
this.txtSource.Name = "txtSource";
this.txtSource.Size = new System.Drawing.Size(476, 20);
this.txtSource.TabIndex = 41;
//
// txtTarget
//
this.txtTarget.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtTarget.BackColor = System.Drawing.SystemColors.HighlightText;
this.txtTarget.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.txtTarget.Location = new System.Drawing.Point(45, 6);
this.txtTarget.Name = "txtTarget";
this.txtTarget.Size = new System.Drawing.Size(451, 20);
this.txtTarget.TabIndex = 42;
//
// label2
//
this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(3, 8);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(38, 13);
this.label2.TabIndex = 40;
this.label2.Text = "Target";
//
// ComparisonForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1176, 832);
this.Controls.Add(this.pnlHeader);
this.Controls.Add(this.StatusBarComparsion);
this.Controls.Add(this.pnlRibbon);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.KeyPreview = true;
this.MinimumSize = new System.Drawing.Size(767, 481);
this.Name = "ComparisonForm";
this.Text = "ALM Toolkit for Power BI";
this.Load += new System.EventHandler(this.ComparisonForm_Load);
this.Shown += new System.EventHandler(this.ComparisonForm_Shown);
this.StatusBarComparsion.ResumeLayout(false);
this.StatusBarComparsion.PerformLayout();
this.pnlRibbon.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.maqSoftwareLogo)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.powerBiLogo)).EndInit();
this.pnlHeader.ResumeLayout(false);
this.spltSourceTarget.Panel1.ResumeLayout(false);
this.spltSourceTarget.Panel1.PerformLayout();
this.spltSourceTarget.Panel2.ResumeLayout(false);
this.spltSourceTarget.Panel2.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.spltSourceTarget)).EndInit();
this.spltSourceTarget.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.StatusStrip StatusBarComparsion;
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1;
private System.Windows.Forms.ToolStripProgressBar toolStripProgressBar1;
private System.Windows.Forms.RibbonTab tabHome;
private System.Windows.Forms.RibbonPanel panelCompare;
private System.Windows.Forms.RibbonButton btnCompareTabularModels;
private System.Windows.Forms.RibbonButton ddSelectActions;
private System.Windows.Forms.RibbonButton mnuHideSkipObjects;
private System.Windows.Forms.RibbonButton mnuHideSkipObjectsWithSameDefinition;
private System.Windows.Forms.RibbonButton mnuShowSkipObjects;
private System.Windows.Forms.RibbonSeparator ribbonSeparator1;
private System.Windows.Forms.RibbonButton mnuSkipAllObjectsMissingInSource;
private System.Windows.Forms.RibbonButton mnuDeleteAllObjectsMissingInSource;
private System.Windows.Forms.RibbonButton mnuSkipAllObjectsMissingInTarget;
private System.Windows.Forms.RibbonButton mnuCreateAllObjectsMissingInTarget;
private System.Windows.Forms.RibbonButton mnuSkipAllObjectsWithDifferentDefinitions;
private System.Windows.Forms.RibbonButton mnuUpdateAllObjectsWithDifferentDefinitions;
private System.Windows.Forms.RibbonButton btnValidateSelection;
private System.Windows.Forms.RibbonButton btnUpdate;
private System.Windows.Forms.RibbonButton btnGenerateScript;
private System.Windows.Forms.RibbonPanel panelMisc;
private System.Windows.Forms.RibbonButton btnOptions;
private System.Windows.Forms.RibbonButton btnReportDifferences;
private System.Windows.Forms.RibbonTab tabHelp;
private System.Windows.Forms.RibbonPanel panelHelp;
private System.Windows.Forms.RibbonButton btnHelp;
private System.Windows.Forms.Panel pnlRibbon;
private System.Windows.Forms.Ribbon ribbonMain;
private System.Windows.Forms.Panel pnlHeader;
private System.Windows.Forms.SplitContainer spltSourceTarget;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox txtSource;
private System.Windows.Forms.TextBox txtTarget;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.PictureBox powerBiLogo;
private System.Windows.Forms.PictureBox maqSoftwareLogo;
private System.Windows.Forms.RibbonOrbMenuItem mnuOpen;
private System.Windows.Forms.RibbonOrbMenuItem mnuSave;
private System.Windows.Forms.RibbonOrbMenuItem mnuSaveAs;
private System.Windows.Forms.RibbonOrbMenuItem mnuExit;
private System.Windows.Forms.ToolStripStatusLabel NewVersionLink;
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel2;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,732 @@
namespace AlmToolkit
{
using BismNormalizer.TabularCompare.Core;
using BismNormalizer.TabularCompare;
using Model;
using Newtonsoft.Json;
using System.Collections.Generic;
using System;
public class ComparisonJSInteraction
{
#region Private members
private Comparison _comparison;
// The form class needs to be changed according to yours
private static ComparisonForm _instanceMainForm = null;
// Used to maintain a dictionary with direct access to the Angular node and C# comparison object
private Dictionary<int, AngularComposite> _directAccessList = new Dictionary<int, AngularComposite>();
#endregion
#region Public properties
// List to be used to populate data in grid control. This needs to be static, since everytime CEF Sharp invokes the method, it creates a new instance
// Need to revisit initialization to evaluate removal strategy
public static List<ComparisonNode> comparisonList = new List<ComparisonNode>();
public static List<ComparisonNode> selectedNodes = new List<ComparisonNode>();
public ComparisonJSInteraction(ComparisonForm mainForm)
{
_instanceMainForm = mainForm;
}
public Comparison Comparison
{
get { return _comparison; }
set { _comparison = value; }
}
#endregion
#region Angular endpoints
/// <summary>
/// Method that sends flattened comparison object to Angular control
/// </summary>
/// <returns></returns>
public string GetComparisonList()
{
string comparisonData = JsonConvert.SerializeObject(comparisonList);
return comparisonData;
}
/// <summary>
/// Save or Compare as per the action on UI
/// </summary>
/// <param name="action">Action to be performed</param>
public void SaveOrCompare(string action)
{
switch (action.ToLower())
{
case "save":
_instanceMainForm.SaveNg();
break;
case "compare":
_instanceMainForm.InitializeAndCompareTabularModelsNg();
break;
}
}
/// <summary>
/// Update the object as and when selected action is changed on UI
/// </summary>
/// <param name="id">Id of the node updated</param>
/// <param name="newAction">New selected action</param>
/// <param name="oldAction">Old selected action</param>
public void ChangeOccurred(int id, string newAction, string oldAction)
{
if (_directAccessList.ContainsKey(id))
{
AngularComposite currentNode = _directAccessList[id];
// if set parent to skip/create/delete, MAY need to set all children to skip/create/delete too (only the read only cells)
switch (newAction)
{
case "Skip":
currentNode.dotNetComparison.MergeAction = MergeAction.Skip;
currentNode.ngComparison.MergeAction = MergeAction.Skip.ToString();
CheckToSkipChildren(currentNode.ngComparison);
break;
case "Create":
currentNode.dotNetComparison.MergeAction = MergeAction.Create;
currentNode.ngComparison.MergeAction = MergeAction.Create.ToString();
CheckToCreateChildren(currentNode.ngComparison);
break;
case "Delete":
currentNode.dotNetComparison.MergeAction = MergeAction.Delete;
currentNode.ngComparison.MergeAction = MergeAction.Delete.ToString();
CheckToDeleteChildren(currentNode.ngComparison);
break;
case "Update":
currentNode.dotNetComparison.MergeAction = MergeAction.Update;
currentNode.ngComparison.MergeAction = MergeAction.Update.ToString();
break;
default:
break;
}
// Disable update menu on comparison change
_instanceMainForm.HandleComparisonChanged();
// Refresh the tree control, since grid is maintained here
_instanceMainForm.refreshGridControl(true);
}
}
/// <summary>
/// Perform required action on selected nodes
/// </summary>
/// <param name="action">Action to be performed: Skip, Update, Create or Delete</param>
/// <param name="selectedNodesUI">List of Node Ids which are selected on Angular control</param>
public void PerformActionsOnSelectedActions(string action, List<object> selectedNodesUI)
{
selectedNodes.Clear();
ComparisonNode nodeToAdd;
for (int nodeCounter = 0; nodeCounter < selectedNodesUI.Count; nodeCounter++)
{
if (_directAccessList.ContainsKey(Convert.ToInt32(selectedNodesUI[nodeCounter])))
{
AngularComposite currentNode = _directAccessList[Convert.ToInt32(selectedNodesUI[nodeCounter])];
nodeToAdd = currentNode.ngComparison;
selectedNodes.Add(nodeToAdd);
}
}
switch (action)
{
case "skip":
SkipItems(true);
break;
case "create":
CreateItems(true);
break;
case "delete":
DeleteItems(true);
break;
case "update":
UpdateItems(true);
break;
}
// Disable update menu on comparison change
_instanceMainForm.HandleComparisonChanged();
// Refresh the tree control, since grid is maintained here
_instanceMainForm.refreshGridControl(true);
}
#endregion
#region Data transformation and population
/// <summary>
/// Transform comparison object to structure understood by Angular control
/// </summary>
public void SetComparisonData()
{
if (this._comparison != null)
{
comparisonList.Clear();
_directAccessList.Clear();
foreach (ComparisonObject comparisonObject in this._comparison.ComparisonObjects)
{
this.PopulateComparisonData(comparisonObject, 0, null);
}
}
}
/// <summary>
/// Helper method to transform comparison object to structure understood by Angular control
/// </summary>
/// <param name="comparisonObject">Individual node in the tree</param>
/// <param name="level">Level in the heirarchy to which the object belongs</param>
/// <param name="parentNode">Reference to the parent node of the current object</param>
private void PopulateComparisonData(ComparisonObject comparisonObject, int level, ComparisonNode parentNode)
{
if (comparisonObject != null)
{
string nodeType = "";
switch (comparisonObject.ComparisonObjectType)
{
case ComparisonObjectType.DataSource:
nodeType = "Data Source";
break;
case ComparisonObjectType.CalculationItem:
nodeType = "Calculation Item";
break;
case ComparisonObjectType.Table:
//Check if source table has any calc item children. If yes, it's a calc group.
bool isCalcGroup = false;
foreach (ComparisonObject childComparisonObject in comparisonObject.ChildComparisonObjects)
{
if (childComparisonObject.ComparisonObjectType == ComparisonObjectType.CalculationItem && childComparisonObject.Status != ComparisonObjectStatus.MissingInSource)
{
isCalcGroup = true;
break;
}
}
nodeType = isCalcGroup ? "Calculation Group" : "Table";
break;
default:
nodeType = comparisonObject.ComparisonObjectType.ToString();
break;
}
ComparisonNode currentNode = new ComparisonNode
{
NodeType = nodeType,
SourceName = comparisonObject.SourceObjectName,
TargetName = comparisonObject.TargetObjectName,
SourceInternalName = comparisonObject.SourceObjectInternalName,
TargetInternalName = comparisonObject.TargetObjectInternalName,
SourceObjectDefinition = comparisonObject.SourceObjectDefinition,
TargetObjectDefinition = comparisonObject.TargetObjectDefinition,
ShowNode = true,
Level = level,
MergeAction = comparisonObject.MergeAction.ToString(),
DisableMessage = "",
DropdownDisabled = false
};
if (parentNode != null)
{
currentNode.ParentId = parentNode.Id;
parentNode.ChildNodes.Add(currentNode.Id);
}
switch (comparisonObject.Status)
{
case ComparisonObjectStatus.MissingInTarget:
currentNode.Status = "Missing in Target";
break;
case ComparisonObjectStatus.MissingInSource:
currentNode.Status = "Missing in Source";
break;
case ComparisonObjectStatus.SameDefinition:
currentNode.Status = "Same Definition";
break;
case ComparisonObjectStatus.DifferentDefinitions:
currentNode.Status = "Different Definitions";
break;
default:
break;
}
comparisonList.Add(currentNode);
// Populate helper objects
AngularComposite angularComposite = new AngularComposite(currentNode, comparisonObject);
_directAccessList.Add(currentNode.Id, angularComposite);
// set drop-down to have limited members based on what is available
switch (comparisonObject.MergeAction)
{
case MergeAction.Create:
currentNode.AvailableActions = new List<string> { "Create", "Skip" };
if (parentNode != null && string.Equals(parentNode.Status, "Missing in Target") && string.Equals(parentNode.MergeAction, "Skip"))
{
comparisonObject.MergeAction = MergeAction.Skip;
currentNode.MergeAction = MergeAction.Skip.ToString();
currentNode.DropdownDisabled = true;
SetNodeTooltip(angularComposite, true);
}
break;
case MergeAction.Update:
currentNode.AvailableActions = new List<string> { "Update", "Skip" };
break;
case MergeAction.Delete:
currentNode.AvailableActions = new List<string> { "Delete", "Skip" };
//check if parent is also set to delete, in which case make this cell readonly
if (parentNode != null && string.Equals(parentNode.MergeAction, "Delete"))
{
currentNode.DropdownDisabled = true;
SetNodeTooltip(angularComposite, true);
}
break;
case MergeAction.Skip:
switch (comparisonObject.Status)
{
case ComparisonObjectStatus.MissingInTarget:
currentNode.AvailableActions = new List<string> { "Create", "Skip" };
//check if parent is also MissingInTarget and Skip, make this cell readonly
if (parentNode != null && string.Equals(parentNode.Status, "Missing in Target") && string.Equals(parentNode.MergeAction, "Skip"))
{
currentNode.DropdownDisabled = true;
SetNodeTooltip(angularComposite, true);
}
break;
case ComparisonObjectStatus.MissingInSource:
currentNode.AvailableActions = new List<string> { "Delete", "Skip" };
break;
case ComparisonObjectStatus.DifferentDefinitions:
currentNode.AvailableActions = new List<string> { "Update", "Skip" };
break;
default:
//default covers ComparisonObjectStatus.SameDefinition: which is most common case (above cases are for saved skip selections from file)
currentNode.AvailableActions = new List<string> { "Skip" };
currentNode.DropdownDisabled = true;
SetNodeTooltip(angularComposite, true);
break;
}
break;
default:
break;
};
// Add child objects if it exists
if (comparisonObject.ChildComparisonObjects != null && comparisonObject.ChildComparisonObjects.Count > 0)
{
foreach (ComparisonObject childComparisonObject in comparisonObject.ChildComparisonObjects)
{
PopulateComparisonData(childComparisonObject, level + 1, currentNode);
}
}
}
}
#endregion
#region Helper functions
/// <summary>
/// Set visibility of Angular node
/// </summary>
/// <param name="IsVisible">Show or hide node</param>
/// <param name="sourceObjectName">Display name of the node for source</param>
/// <param name="sourceObjectId">Internal name of the node for source</param>
/// <param name="targetObjectName">Display name of the node for target</param>
/// <param name="targetObjectId">Internal name of the node for target</param>
/// <param name="objType">Object type i.e. Data source, KPI, Measure</param>
private void SetNodeVisibility(bool IsVisible, AngularComposite node)
{
if (node != null)
{
//node.IsVisible = IsVisible;
node.ngComparison.ShowNode = IsVisible;
}
}
private void SetNodeTooltip(AngularComposite node, bool disabledDueToParent)
{
node.ngComparison.DisableMessage = (disabledDueToParent ? "This object's action option is disabled due to a parent object selection" : "");
}
#endregion
#region Menu actions
/// <summary>
/// Show or Hide skip nodes
/// </summary>
/// <param name="hide">Hide Skip nodes</param>
/// <param name="sameDefinitionFilter">Hide objects only in case of same definition</param>
public void ShowHideSkipNodes(bool hide, bool sameDefinitionFilter = false)
{
if (this._comparison != null)
{
foreach (ComparisonNode node in comparisonList)
{
ShowHideSkipNodes(node, hide, sameDefinitionFilter);
}
}
}
/// <summary>
/// Show or hide skip nodes
/// </summary>
/// <param name="comparisonObject">List of comparison objects for whom children are to be checked</param>
/// <param name="hide">Show or hide the node</param>
/// <param name="sameDefinitionFilter">Hide nodes with same definition</param>
private void ShowHideSkipNodes(ComparisonNode node, bool hide, bool sameDefinitionFilter)
{
bool isVisible = true;
if (node.MergeAction.ToString() == "Skip" && (!sameDefinitionFilter || (sameDefinitionFilter && hide && node.Status.ToString() == "Same Definition")))
{
// if currently selected skip item contains Update, Delete or Create children, then need to keep visible - or result in orphans
bool foundCreateOrDeleteChild = false;
foreach (int childNodeId in node.ChildNodes)
{
if (_directAccessList.ContainsKey(childNodeId))
{
AngularComposite childNode = _directAccessList[childNodeId];
if (childNode.dotNetComparison.MergeAction == MergeAction.Update || childNode.dotNetComparison.MergeAction == MergeAction.Delete || childNode.dotNetComparison.MergeAction == MergeAction.Create)
{
foundCreateOrDeleteChild = true;
break;
}
}
}
if (hide)
{
if (!foundCreateOrDeleteChild)
{
isVisible = false;
}
}
else
{
isVisible = true;
}
}
else
{
isVisible = (
!(node.MergeAction.ToString() == "Skip " &&
(node.ChildNodes.Count == 0 || !NodeContainsEditableChildren(node, hide))));
}
if (_directAccessList.ContainsKey(node.Id))
{
AngularComposite childNode = _directAccessList[node.Id];
SetNodeVisibility(isVisible, childNode);
}
foreach (int childNodeId in node.ChildNodes)
{
if (_directAccessList.ContainsKey(childNodeId))
{
AngularComposite childNode = _directAccessList[childNodeId];
ShowHideSkipNodes(childNode.ngComparison, hide, sameDefinitionFilter);
}
}
}
/// <summary>
/// Check if node contains editable children
/// </summary>
/// <param name="node">Node for which children is to be checked</param>
/// <param name="hide">Hide or show</param>
/// <returns></returns>
private bool NodeContainsEditableChildren(ComparisonNode node, bool hide)
{
bool containsChildren = false;
foreach (int childNodeId in node.ChildNodes)
{
if (_directAccessList.ContainsKey(childNodeId))
{
AngularComposite childComposite = _directAccessList[childNodeId];
ComparisonNode childNode = childComposite.ngComparison;
if ((hide &&
childNode.MergeAction != "Skip " &&
childNode.MergeAction != "Skip") ||
(!hide &&
childNode.MergeAction != "Skip "))
{
containsChildren = true;
}
else
{
bool childContainsChildren = NodeContainsEditableChildren(childNode, hide);
if (!containsChildren)
{
containsChildren = childContainsChildren;
}
}
if (childNode.MergeAction.ToString() == "Skip")
{
SetNodeVisibility(!hide, childComposite);
}
}
}
if (node.MergeAction.ToString() != "Skip")
{
if (_directAccessList.ContainsKey(node.Id))
{
AngularComposite nodeComposite = _directAccessList[node.Id];
SetNodeVisibility(containsChildren, nodeComposite);
}
}
return containsChildren;
}
/********** Set node to skip depending on comparison object status ****************/
/// <summary>
/// Sets Action property of objects to Skip within given range.
/// </summary>
/// <param name="selectedOnly"></param>
/// <param name="comparisonStatus"></param>
public void SkipItems(bool selectedOnly, ComparisonObjectStatus comparisonObjectStatus = ComparisonObjectStatus.Na) //Na because won't take null cos it's an enum
{
List<ComparisonNode> listToUse = (selectedOnly ? selectedNodes : comparisonList);
foreach (ComparisonNode node in listToUse)
{
// In case of selected only, check if item is present in selected objects
SkipItemPrivate(comparisonObjectStatus, node);
}
}
private void SkipItemPrivate(ComparisonObjectStatus comparisonObjectStatus, ComparisonNode row)
{
if (comparisonObjectStatus == ComparisonObjectStatus.Na ||
(comparisonObjectStatus == ComparisonObjectStatus.DifferentDefinitions && row.Status == "Different Definitions") ||
(comparisonObjectStatus == ComparisonObjectStatus.MissingInSource && row.Status == "Missing in Source") ||
(comparisonObjectStatus == ComparisonObjectStatus.MissingInTarget && row.Status == "Missing in Target"))
{
bool isReadOnly = row.DropdownDisabled;
if (!isReadOnly &&
row.MergeAction != MergeAction.Skip.ToString()
//&&
//row.Cells[8].Value.ToString() != "Set Parent Node" -- Need to check where is this value set
)
{
row.MergeAction = MergeAction.Skip.ToString();
if (_directAccessList.ContainsKey(row.Id))
{
AngularComposite node = _directAccessList[row.Id];
node.dotNetComparison.MergeAction = MergeAction.Skip;
CheckToSkipChildren(row);
}
}
}
}
private void CheckToSkipChildren(ComparisonNode selectedRow)
{
// if Missing in Target (default is create) and user selects skip, definitely can't create child objects, so set them to skip too and disable them
if (selectedRow.Status == "Missing in Target")
{
//TreeGridNode selectedNode = FindNodeByIDs(selectedRow.Cells[0].Value.ToString(), selectedRow.Cells[2].Value.ToString(), selectedRow.Cells[6].Value.ToString());
foreach (int node in selectedRow.ChildNodes)
{
SetNodeToSkip(node);
}
}
// if Missing in Source (default is delete) and user selects skip, he may still want to delete some child objects, so ensure they are enabled
else if (selectedRow.Status == "Missing in Source")
{
//TreeGridNode selectedNode = FindNodeByIDs(selectedRow.Cells[0].Value.ToString(), selectedRow.Cells[2].Value.ToString(), selectedRow.Cells[6].Value.ToString());
foreach (int nodeId in selectedRow.ChildNodes)
{
if (_directAccessList.ContainsKey(nodeId))
{
AngularComposite node = _directAccessList[nodeId];
if (node.ngComparison.AvailableActions.Contains("Skip"))
{
node.ngComparison.DropdownDisabled = false;
SetNodeTooltip(node, false);
}
}
}
}
}
private void SetNodeToSkip(int nodeId)
{
if (_directAccessList.ContainsKey(nodeId))
{
AngularComposite node = _directAccessList[nodeId];
if (node.ngComparison.AvailableActions.Contains("Skip"))
{
node.ngComparison.MergeAction = MergeAction.Skip.ToString();
node.ngComparison.DropdownDisabled = true;
node.dotNetComparison.MergeAction = MergeAction.Skip;
SetNodeTooltip(node, true);
}
foreach (int childNode in node.ngComparison.ChildNodes)
{
SetNodeToSkip(childNode);
}
}
}
/************* End section ****************/
/********** Set node to update ****************/
/// <summary>
/// Set actions for node with different definitions to update
/// </summary>
/// <param name="selectedOnly">Set for selected nodes or all nodes</param>
public void UpdateItems(bool selectedOnly)
{
// If selected only, pick items from selected list
List<ComparisonNode> listToUse = (selectedOnly ? selectedNodes : comparisonList);
// Not necessary to run twice with internal method because Updates don't impact children
foreach (ComparisonNode item in listToUse)
{
if (item.AvailableActions.Contains("Update"))
{
item.MergeAction = MergeAction.Update.ToString();
// Set merge action in corresponding comparison list
_directAccessList[item.Id].dotNetComparison.MergeAction = MergeAction.Update;
}
}
}
/************* End section ****************/
/********** Set node to create ****************/
/// <summary>
/// Sets Action property of objects to Create within given range.
/// </summary>
/// <param name="selectedOnly"></param>
public void CreateItems(bool selectedOnly)
{
List<ComparisonNode> listToUse = (selectedOnly ? selectedNodes : comparisonList);
foreach (ComparisonNode item in listToUse)
{
//DataGridViewRow row = (selectedOnly ? this.SelectedRows[i] : this.Rows[i]);
bool isReadOnly = item.DropdownDisabled;
if (!isReadOnly && item.MergeAction != "Skip " // This condition is not working in existing code. Retained for consistency with existing code.
&& item.AvailableActions.Contains(MergeAction.Create.ToString()))
{
item.MergeAction = MergeAction.Create.ToString();
// Set merge action in corresponding comparison list
_directAccessList[item.Id].dotNetComparison.MergeAction = MergeAction.Create;
// Check status of children
CheckToCreateChildren(item);
}
}
}
private void CheckToCreateChildren(ComparisonNode selectedRow)
{
// if Missing in Target (default is create) and user selects create, he may still want to skip some child objects, so ensure they are enabled
if (selectedRow.Status.ToString() == "Missing in Target")
{
foreach (int nodeId in selectedRow.ChildNodes)
{
AngularComposite node = _directAccessList[nodeId];
if (node.ngComparison.AvailableActions.Contains(MergeAction.Create.ToString()))
{
node.ngComparison.DropdownDisabled = false;
SetNodeTooltip(node, false);
}
}
}
}
/************* End section ****************/
/********** Set node to delete ****************/
/// <summary>
/// Sets Action property of objects to Delete within given range.
/// </summary>
/// <param name="selectedOnly"></param>
public void DeleteItems(bool selectedOnly)
{
List<ComparisonNode> listToUse = (selectedOnly ? selectedNodes : comparisonList);
foreach (ComparisonNode item in listToUse)
{
bool isReadOnly = item.DropdownDisabled;
if (!isReadOnly
&& item.MergeAction != "Skip " // This condition is not working in existing code. Retained for consistency with existing code.
&& item.AvailableActions.Contains(MergeAction.Delete.ToString()))
{
item.MergeAction = MergeAction.Delete.ToString();
// Set merge action in corresponding comparison list
_directAccessList[item.Id].dotNetComparison.MergeAction = MergeAction.Delete;
// Check status of children
CheckToDeleteChildren(item);
}
}
}
private void CheckToDeleteChildren(ComparisonNode selectedRow)
{
// if Missing in Source (default is delete) and user selects delete, definitely can't skip child objects, so set them to delete too and disable them
if (selectedRow.Status == "Missing in Source")
{
foreach (int node in selectedRow.ChildNodes)
{
SetNodeToDelete(node);
}
}
}
private void SetNodeToDelete(int nodeId)
{
if (_directAccessList.ContainsKey(nodeId))
{
AngularComposite node = _directAccessList[nodeId];
if (node.ngComparison.AvailableActions.Contains("Delete"))
{
node.ngComparison.MergeAction = MergeAction.Delete.ToString();
node.ngComparison.DropdownDisabled = true;
node.dotNetComparison.MergeAction = MergeAction.Delete;
SetNodeTooltip(node, true);
}
foreach (int childNode in node.ngComparison.ChildNodes)
{
SetNodeToDelete(childNode);
}
}
}
/************* End section ****************/
#endregion
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 897 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 180 134.73"><defs><style>.cls-1{fill:#020202;}</style></defs><title>Asset 1</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M158.77,116.62h-3.63v-7.26h3.63a14,14,0,0,0,14-14V21.23a14,14,0,0,0-14-14H21.23a14,14,0,0,0-14,14V95.39a14,14,0,0,0,14,14h3.63v7.26H21.23A21.25,21.25,0,0,1,0,95.39V21.23A21.25,21.25,0,0,1,21.23,0H158.77A21.25,21.25,0,0,1,180,21.23V95.39a21.25,21.25,0,0,1-21.23,21.23"/><path class="cls-1" d="M43.53,134.73a9.85,9.85,0,0,1-9.85-9.85V102.17a9.85,9.85,0,0,1,9.85-9.86h0a9.85,9.85,0,0,1,9.85,9.85v22.71a9.85,9.85,0,0,1-9.85,9.86Z"/><path class="cls-1" d="M74.51,134.73a9.85,9.85,0,0,1-9.85-9.85V66.57a9.85,9.85,0,0,1,19.71,0v58.31a9.85,9.85,0,0,1-9.85,9.85"/><path class="cls-1" d="M136.48,134.45a9.85,9.85,0,0,1-9.85-9.85V42a9.85,9.85,0,0,1,19.71,0v82.59a9.85,9.85,0,0,1-9.85,9.85"/><path class="cls-1" d="M105.49,134.73a9.85,9.85,0,0,1-9.85-9.85V81.56a9.85,9.85,0,1,1,19.71,0v43.32a9.85,9.85,0,0,1-9.85,9.85"/></g></g></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 692 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 941 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 666 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 508 B

View File

@ -0,0 +1,226 @@
{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch31506\stshfloch31506\stshfhich31506\stshfbi31507\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}
{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f43\fbidi \fmodern\fcharset0\fprq1{\*\panose 020b0609020204030204}Consolas;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0302020204030204}Calibri Light;}
{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}
{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f64\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f65\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}
{\f67\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f68\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f69\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f70\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}
{\f71\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f72\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f414\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f415\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}
{\f417\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f418\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f419\fbidi \fswiss\fcharset177\fprq2 Calibri (Hebrew);}{\f420\fbidi \fswiss\fcharset178\fprq2 Calibri (Arabic);}
{\f421\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f422\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\f474\fbidi \fmodern\fcharset238\fprq1 Consolas CE;}{\f475\fbidi \fmodern\fcharset204\fprq1 Consolas Cyr;}
{\f477\fbidi \fmodern\fcharset161\fprq1 Consolas Greek;}{\f478\fbidi \fmodern\fcharset162\fprq1 Consolas Tur;}{\f481\fbidi \fmodern\fcharset186\fprq1 Consolas Baltic;}{\f482\fbidi \fmodern\fcharset163\fprq1 Consolas (Vietnamese);}
{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \fswiss\fcharset238\fprq2 Calibri Light CE;}{\fhimajor\f31529\fbidi \fswiss\fcharset204\fprq2 Calibri Light Cyr;}
{\fhimajor\f31531\fbidi \fswiss\fcharset161\fprq2 Calibri Light Greek;}{\fhimajor\f31532\fbidi \fswiss\fcharset162\fprq2 Calibri Light Tur;}{\fhimajor\f31533\fbidi \fswiss\fcharset177\fprq2 Calibri Light (Hebrew);}
{\fhimajor\f31534\fbidi \fswiss\fcharset178\fprq2 Calibri Light (Arabic);}{\fhimajor\f31535\fbidi \fswiss\fcharset186\fprq2 Calibri Light Baltic;}{\fhimajor\f31536\fbidi \fswiss\fcharset163\fprq2 Calibri Light (Vietnamese);}
{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}
{\fhiminor\f31573\fbidi \fswiss\fcharset177\fprq2 Calibri (Hebrew);}{\fhiminor\f31574\fbidi \fswiss\fcharset178\fprq2 Calibri (Arabic);}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}
{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\f44\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f45\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f47\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f48\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\f49\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f50\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f51\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\f52\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red0\green0\blue0;\red0\green0\blue0;}
{\*\defchp \f31506\fs22 }{\*\defpap \ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa160\sl259\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive
\ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*
\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa160\sl259\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{
\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs21\alang1025 \ltrch\fcs0 \f43\fs21\lang1033\langfe1033\cgrid\langnp1033\langfenp1033
\sbasedon0 \snext15 \slink16 \sunhideused \styrsid15226076 Plain Text;}{\*\cs16 \additive \rtlch\fcs1 \af0\afs21 \ltrch\fcs0 \f43\fs21 \sbasedon10 \slink15 \slocked \styrsid15226076 Plain Text Char;}}{\*\rsidtbl \rsid673528\rsid14628249\rsid15226076
\rsid16591498}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author Christian Wade}{\operator Christian Wade}{\creatim\yr2019\mo12\dy10\hr13\min49}
{\revtim\yr2019\mo12\dy10\hr13\min49}{\version2}{\edmins1}{\nofpages1}{\nofwords160}{\nofchars916}{\nofcharsws1074}{\vern119}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}
\paperw12240\paperh15840\margl1501\margr1502\margt1440\margb1440\gutter0\ltrsect
\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen
\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1501\dgvorigin1440\dghshow1\dgvshow1
\jexpand\viewkind1\viewscale109\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\viewnobound1\snaptogridincell\allowfieldendsel
\wrppunct\asianbrkrule\rsidroot14628249\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0
{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sectrsid15226076\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2
\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6
\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang
{\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\s15\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15226076 \rtlch\fcs1 \af31507\afs21\alang1025 \ltrch\fcs0
\f43\fs21\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af2 \ltrch\fcs0 \b\f2\insrsid8407418\charrsid16591498 MIT License
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid8407418\charrsid15226076
\par Copyright (c) 2019 Microsoft
\par
\par Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without
limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
\par
\par The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
\par
\par THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFT
WARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid15226076
\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a
9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad
5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6
b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0
0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6
a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f
c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512
0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462
a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865
6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b
4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b
4757e8d3f729e245eb2b260a0238fd010000ffff0300504b030414000600080000002100b6f4679893070000c9200000160000007468656d652f7468656d652f
7468656d65312e786d6cec59cd8b1bc915bf07f23f347d97f5d5ad8fc1f2a24fcfda33b6b164873dd648a5eef2547789aad28cc56208de532e81c026e49085bd
ed21842cecc22eb9e48f31d8249b3f22afaa5bdd5552c99e191c3061463074977eefd5afde7bf5de53d5ddcf5e26d4bbc05c1096f6fcfa9d9aefe174ce16248d
7afeb3d9a4d2f13d2151ba4094a5b8e76fb0f03fbbf7eb5fdd454732c609f6403e1547a8e7c752ae8eaa5531876124eeb0154ee1bb25e30992f0caa3ea82a34b
d09bd06aa3566b55134452df4b51026a1f2f97648ebd9952e9dfdb2a1f53784da5500373caa74a35b6243476715e5708b11143cabd0b447b3eccb3609733fc52
fa1e4542c2173dbfa6fffceabdbb5574940b517940d6909be8bf5c2e17589c37f49c3c3a2b260d823068f50bfd1a40e53e6edc1eb7c6ad429f06a0f91c569a71
b175b61bc320c71aa0ecd1a17bd41e35eb16ded0dfdce3dc0fd5c7c26b50a63fd8c34f2643b0a285d7a00c1feee1c3417730b2f56b50866fede1dbb5fe28685b
fa3528a6243ddf43d7c25673b85d6d0159327aec8477c360d26ee4ca4b144443115d6a8a254be5a1584bd00bc6270050408a24493db959e1259a43140f112567
9c7827248a21f056286502866b8ddaa4d684ffea13e827ed5174849121ad780113b137a4f87862cec94af6fc07a0d537206f7ffef9cdeb1fdfbcfee9cd575fbd
79fdf77c6eadca923b466964cafdf2dd1ffef3cd6fbd7ffff0ed2f5fff319b7a172f4cfcbbbffdeedd3ffef93ef5b0e2d2146ffff4fdbb1fbf7ffbe7dfffebaf
5f3bb4f7393a33e1339260e13dc297de5396c0021dfcf119bf9ec42c46c494e8a791402952b338f48f656ca11f6d10450edc00db767cce21d5b880f7d72f2cc2
d398af2571687c182716f094313a60dc6985876a2ec3ccb3751ab927e76b13f714a10bd7dc43945a5e1eaf579063894be530c616cd2714a5124538c5d253dfb1
738c1dabfb8210cbaea764ce99604be97d41bc01224e93ccc899154da5d03149c02f1b1741f0b7659bd3e7de8051d7aa47f8c246c2de40d4417e86a965c6fb68
2d51e252394309350d7e8264ec2239ddf0b9891b0b099e8e3065de78818570c93ce6b05ec3e90f21cdb8dd7e4a37898de4929cbb749e20c64ce4889d0f6394ac
5cd829496313fbb938871045de13265df05366ef10f50e7e40e941773f27d872f787b3c133c8b026a53240d4376beef0e57dccacf89d6ee8126157aae9f3c44a
b17d4e9cd131584756689f604cd1255a60ec3dfbdcc160c05696cd4bd20f62c82ac7d815580f901dabea3dc5027a25d5dcece7c91322ac909de2881de073bad9
493c1b9426881fd2fc08bc6eda7c0ca52e7105c0633a3f37818f08f480102f4ea33c16a0c308ee835a9fc4c82a60ea5db8e375c32dff5d658fc1be7c61d1b8c2
be04197c6d1948eca6cc7b6d3343d49aa00c9819822ec3956e41c4727f29a28aab165b3be596f6a62ddd00dd91d5f42424fd6007b4d3fb84ffbbde073a8cb77f
f9c6b10f3e4ebfe3566c25ab6b763a8792c9f14e7f7308b7dbd50c195f904fbfa919a175fa04431dd9cf58b73dcd6d4fe3ffdff73487f6f36d2773a8dfb8ed64
7ce8306e3b99fc70e5e3743265f3027d8d3af0c80e7af4b14f72f0d46749289dca0dc527421ffc08f83db398c0a092d3279eb838055cc5f0a8ca1c4c60e1228e
b48cc799fc0d91f134462b381daafb4a492472d591f0564cc0a1911e76ea5678ba4e4ed9223becacd7d5c16656590592e5782d2cc6e1a04a66e856bb3cc02bd4
6bb6913e68dd1250b2d721614c6693683a48b4b783ca48fa58178ce620a157f65158741d2c3a4afdd6557b2c805ae115f8c1edc1cff49e1f06200242701e07cd
f942f92973f5d6bbda991fd3d3878c69450034d8db08283ddd555c0f2e4fad2e0bb52b78da2261849b4d425b46377822869fc17974aad1abd0b8aeafbba54b2d
7aca147a3e08ad9246bbf33e1637f535c8ede6069a9a9982a6de65cf6f35430899395af5fc251c1ac363b282d811ea3717a211dcbccc25cf36fc4d32cb8a0b39
4222ce0cae934e960d122231f728497abe5a7ee1069aea1ca2b9d51b90103e59725d482b9f1a3970baed64bc5ce2b934dd6e8c284b67af90e1b35ce1fc568bdf
1cac24d91adc3d8d1797de195df3a708422c6cd795011744c0dd413db3e682c0655891c8caf8db294c79da356fa3740c65e388ae62945714339967709dca0b3a
faadb081f196af190c6a98242f8467912ab0a651ad6a5a548d8cc3c1aafb6121653923699635d3ca2aaa6abab39835c3b60cecd8f26645de60b53531e434b3c2
67a97b37e576b7b96ea74f28aa0418bcb09fa3ea5ea12018d4cac92c6a8af17e1a56393b1fb56bc776811fa07695226164fdd656ed8edd8a1ae19c0e066f54f9
416e376a6168b9ed2bb5a5f5adb979b1cdce5e40f2184197bba6526857c2c92e47d0104d754f92a50dd8222f65be35e0c95b73d2f3bfac85fd60d80887955a27
1c57826650ab74c27eb3d20fc3667d1cd66ba341e31514161927f530bbb19fc00506dde4f7f67a7cefee3ed9ded1dc99b3a4caf4dd7c5513d777f7f5c6e1bb7b
8f40d2f9b2d598749bdd41abd26df627956034e854bac3d6a0326a0ddba3c9681876ba9357be77a1c141bf390c5ae34ea5551f0e2b41aba6e877ba9576d068f4
8376bf330efaaff23606569ea58fdc16605ecdebde7f010000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d65
2f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d36
3f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e
3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d985
0528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c020000130000000000000000000000
0000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000000000
000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c0000000000000000000000000019020000
7468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d0014000600080000002100b6f4679893070000c92000001600000000000000
000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b01000027000000
000000000000000000009d0a00007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000980b00000000}
{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d
617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169
6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363
656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}
{\*\latentstyles\lsdstimax376\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;
\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4;
\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;
\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 1;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 5;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 9;
\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3;
\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6;
\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Indent;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 header;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footer;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index heading;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of figures;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope return;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation reference;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 line number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 page number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote text;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of authorities;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 macro;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 toa heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 3;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 3;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 3;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Closing;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Signature;\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 4;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Message Header;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Note Heading;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 3;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Block Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;
\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Document Map;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Plain Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 E-mail Signature;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Table;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 1;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 2;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 2;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 3;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 2;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 6;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 2;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 6;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 2;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Contemporary;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Elegant;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Professional;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Subtle 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Subtle 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 2;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority39 \lsdlocked0 Table Grid;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Theme;\lsdsemihidden1 \lsdlocked0 Placeholder Text;
\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid;\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2;
\lsdpriority65 \lsdlocked0 Medium List 1;\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List;
\lsdpriority71 \lsdlocked0 Colorful Shading;\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdpriority61 \lsdlocked0 Light List Accent 1;
\lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdsemihidden1 \lsdlocked0 Revision;
\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;
\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdpriority72 \lsdlocked0 Colorful List Accent 1;
\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;
\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;
\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;
\lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;
\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;
\lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4;
\lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;
\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;
\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5;
\lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;
\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;
\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6;
\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;
\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;
\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;
\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography;
\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4;
\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4;
\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1;
\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1;
\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2;
\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2;
\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3;
\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4;
\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4;
\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5;
\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5;
\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6;
\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6;
\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark;
\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1;
\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1;
\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2;
\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3;
\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3;
\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4;
\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4;
\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5;
\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5;
\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6;
\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Mention;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Smart Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hashtag;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Unresolved Mention;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Smart Link;}}{\*\datastore 01050000
02000000180000004d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000
d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e500000000000000000000000010b6
50afa3afd501feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000105000000000000}}

View File

@ -0,0 +1,282 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Runtime.InteropServices;
namespace AlmToolkit
{
#region Managed IP Helper API
public class TcpTable : IEnumerable<TcpRow>
{
#region Private Fields
private IEnumerable<TcpRow> tcpRows;
#endregion
#region Constructors
public TcpTable(IEnumerable<TcpRow> tcpRows)
{
this.tcpRows = tcpRows;
}
#endregion
#region Public Properties
public IEnumerable<TcpRow> Rows
{
get { return this.tcpRows; }
}
#endregion
#region IEnumerable<TcpRow> Members
public IEnumerator<TcpRow> GetEnumerator()
{
return this.tcpRows.GetEnumerator();
}
#endregion
#region IEnumerable Members
IEnumerator IEnumerable.GetEnumerator()
{
return this.tcpRows.GetEnumerator();
}
#endregion
}
public class TcpRow
{
#region Private Fields
private IPEndPoint localEndPoint;
private IPEndPoint remoteEndPoint;
private TcpState state;
private int processId;
#endregion
#region Constructors
public TcpRow(IpHelper.TcpRow tcpRow)
{
this.state = tcpRow.state;
this.processId = tcpRow.owningPid;
int localPort = (tcpRow.localPort1 << 8) + (tcpRow.localPort2) + (tcpRow.localPort3 << 24) + (tcpRow.localPort4 << 16);
long localAddress = tcpRow.localAddr;
this.localEndPoint = new IPEndPoint(localAddress, localPort);
int remotePort = (tcpRow.remotePort1 << 8) + (tcpRow.remotePort2) + (tcpRow.remotePort3 << 24) + (tcpRow.remotePort4 << 16);
long remoteAddress = tcpRow.remoteAddr;
this.remoteEndPoint = new IPEndPoint(remoteAddress, remotePort);
}
#endregion
#region Public Properties
public IPEndPoint LocalEndPoint
{
get { return this.localEndPoint; }
}
public IPEndPoint RemoteEndPoint
{
get { return this.remoteEndPoint; }
}
public TcpState State
{
get { return this.state; }
}
public int ProcessId
{
get { return this.processId; }
}
#endregion
}
public static class ManagedIpHelper
{
#region Public Methods
public static TcpTable GetExtendedTcpTable(bool sorted)
{
List<TcpRow> tcpRows = new List<TcpRow>();
IntPtr tcpTable = IntPtr.Zero;
int tcpTableLength = 0;
if (IpHelper.GetExtendedTcpTable(tcpTable, ref tcpTableLength, sorted, IpHelper.AfInet, IpHelper.TcpTableType.OwnerPidAll, 0) != 0)
{
try
{
tcpTable = Marshal.AllocHGlobal(tcpTableLength);
if (IpHelper.GetExtendedTcpTable(tcpTable, ref tcpTableLength, true, IpHelper.AfInet, IpHelper.TcpTableType.OwnerPidAll, 0) == 0)
{
IpHelper.TcpTable table = (IpHelper.TcpTable)Marshal.PtrToStructure(tcpTable, typeof(IpHelper.TcpTable));
IntPtr rowPtr = (IntPtr)((long)tcpTable + Marshal.SizeOf(table.length));
for (int i = 0; i < table.length; ++i)
{
tcpRows.Add(new TcpRow((IpHelper.TcpRow)Marshal.PtrToStructure(rowPtr, typeof(IpHelper.TcpRow))));
rowPtr = (IntPtr)((long)rowPtr + Marshal.SizeOf(typeof(IpHelper.TcpRow)));
}
}
}
finally
{
if (tcpTable != IntPtr.Zero)
{
Marshal.FreeHGlobal(tcpTable);
}
}
}
return new TcpTable(tcpRows);
}
public static Dictionary<int, TcpRow> GetExtendedTcpDictionary()
{
Dictionary<int, TcpRow> tcpRows = new Dictionary<int, TcpRow>();
IntPtr tcpTable = IntPtr.Zero;
int tcpTableLength = 0;
if (IpHelper.GetExtendedTcpTable(tcpTable, ref tcpTableLength, false, IpHelper.AfInet, IpHelper.TcpTableType.OwnerPidAll, 0) != 0)
{
try
{
tcpTable = Marshal.AllocHGlobal(tcpTableLength);
if (IpHelper.GetExtendedTcpTable(tcpTable, ref tcpTableLength, true, IpHelper.AfInet, IpHelper.TcpTableType.OwnerPidAll, 0) == 0)
{
IpHelper.TcpTable table = (IpHelper.TcpTable)Marshal.PtrToStructure(tcpTable, typeof(IpHelper.TcpTable));
IntPtr rowPtr = (IntPtr)((long)tcpTable + Marshal.SizeOf(table.length));
for (int i = 0; i < table.length; ++i)
{
TcpRow row = new TcpRow((IpHelper.TcpRow)Marshal.PtrToStructure(rowPtr, typeof(IpHelper.TcpRow)));
// HACK: only add first row that is in a Listening state
if (row.State == TcpState.Listen)
{
if (!tcpRows.Keys.Contains(row.ProcessId))
tcpRows.Add(row.ProcessId, row);
}
rowPtr = (IntPtr)((long)rowPtr + Marshal.SizeOf(typeof(IpHelper.TcpRow)));
}
}
}
finally
{
if (tcpTable != IntPtr.Zero)
{
Marshal.FreeHGlobal(tcpTable);
}
}
}
return tcpRows;
}
#endregion
}
#endregion
#region P/Invoke IP Helper API
/// <summary>
/// <see cref="http://msdn2.microsoft.com/en-us/library/aa366073.aspx"/>
/// </summary>
public static class IpHelper
{
#region Public Fields
public const string DllName = "iphlpapi.dll";
public const int AfInet = 2;
#endregion
#region Public Methods
/// <summary>
/// <see cref="http://msdn2.microsoft.com/en-us/library/aa365928.aspx"/>
/// </summary>
[DllImport(IpHelper.DllName, SetLastError = true)]
public static extern uint GetExtendedTcpTable(IntPtr tcpTable, ref int tcpTableLength, bool sort, int ipVersion, TcpTableType tcpTableType, int reserved);
#endregion
#region Public Enums
/// <summary>
/// <see cref="http://msdn2.microsoft.com/en-us/library/aa366386.aspx"/>
/// </summary>
public enum TcpTableType
{
BasicListener,
BasicConnections,
BasicAll,
OwnerPidListener,
OwnerPidConnections,
OwnerPidAll,
OwnerModuleListener,
OwnerModuleConnections,
OwnerModuleAll,
}
#endregion
#region Public Structs
/// <summary>
/// <see cref="http://msdn2.microsoft.com/en-us/library/aa366921.aspx"/>
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct TcpTable
{
public uint length;
public TcpRow row;
}
/// <summary>
/// <see cref="http://msdn2.microsoft.com/en-us/library/aa366913.aspx"/>
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct TcpRow
{
public TcpState state;
public uint localAddr;
public byte localPort1;
public byte localPort2;
public byte localPort3;
public byte localPort4;
public uint remoteAddr;
public byte remotePort1;
public byte remotePort2;
public byte remotePort3;
public byte remotePort4;
public int owningPid;
}
#endregion
#endregion
}
}

View File

@ -0,0 +1,21 @@
namespace AlmToolkit.Model
{
using BismNormalizer.TabularCompare.Core;
class AngularComposite
{
public ComparisonNode ngComparison;
public ComparisonObject dotNetComparison;
/// <summary>
/// Constructor for composite node with Angular and .Net
/// </summary>
/// <param name="node">Set value for angular node</param>
/// <param name="comparisonObject">set value for .Net node</param>
public AngularComposite(ComparisonNode node, ComparisonObject comparisonObject)
{
ngComparison = node;
dotNetComparison = comparisonObject;
}
}
}

View File

@ -0,0 +1,88 @@
namespace AlmToolkit.Model
{
using System.Collections.Generic;
public class ComparisonNode
{
private static int objectCount = 1;
/// <summary>
/// Id of the object
/// </summary>
public int Id { get; }
/// <summary>
/// Node type of the object
/// Example: Data Source, Table, Relationship, KPI
/// </summary>
public string NodeType { get; set; }
/// <summary>
/// Id of this object's parent
/// </summary>
public int ParentId { get; set; }
/// <summary>
/// Name of this object in source schema
/// </summary>
public string SourceName { get; set; }
/// <summary>
/// Name of this object in target schema
/// </summary>
public string TargetName { get; set; }
/// <summary>
/// Internal name of this object in source schema
/// </summary>
public string SourceInternalName { get; set; }
/// <summary>
/// Internal Name of this object in target schema
/// </summary>
public string TargetInternalName { get; set; }
/// <summary>
/// Indentation level of the object
/// </summary>
public int Level { get; set; }
/// <summary>
/// Status of the object compared to the source and target
/// </summary>
public string Status { get; set; }
/// <summary>
/// Current action to be performed for this object
/// </summary>
public string MergeAction { get; set; }
/// <summary>
/// Code at source
/// </summary>
public string SourceObjectDefinition { get; set; }
/// <summary>
/// Code at target
/// </summary>
public string TargetObjectDefinition { get; set; }
/// <summary>
/// Ids of the children nodes
/// </summary>
public List<int> ChildNodes { get; set; }
/// <summary>
/// Actions that can be performed for this object
/// </summary>
public List<string> AvailableActions { get; set; }
/// <summary>
/// To maintain if the object is to be shown on UI or not
/// </summary>
public bool ShowNode { get; set; }
/// <summary>
/// To maintain if the dropdown is disabled on the UI
/// </summary>
public bool DropdownDisabled { get; set; }
/// <summary>
/// Text mentioning why the dropdown is disabled
/// </summary>
public string DisableMessage { get; set; }
public ComparisonNode()
{
Id = objectCount;
objectCount = objectCount + 1;
ChildNodes = new List<int>();
}
}
}

View File

@ -0,0 +1,122 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
//using Serilog;
using System.Security.Principal;
namespace AlmToolkit
{
public enum EmbeddedSSASIcon
{
PowerBI,
Devenv,
PowerBIReportServer,
Loading
}
public class PowerBIInstance
{
public PowerBIInstance(string name, int port, EmbeddedSSASIcon icon)
{
Port = port;
Icon = icon;
try
{
var dashPos = name.LastIndexOf(" - ");
if (dashPos >= 0)
{ Name = name.Substring(0, dashPos); } // Strip "Power BI Designer" or "Power BI Desktop" off the end of the string
else
{
//Log.Warning("{class} {method} {message} {dashPos}", "PowerBIInstance", "ctor", $"Unable to find ' - ' in Power BI title '{name}'", dashPos);
Name = name;
}
}
catch (Exception ex)
{
//Log.Error("{class} {method} {message} {stacktrace}", "PowerBIInstance", "ctor", ex.Message, ex.StackTrace);
Name = name;
}
}
public int Port { get; private set; }
public string Name { get; private set; }
public EmbeddedSSASIcon Icon { get; private set; }
}
public class PowerBIHelper
{
public static List<PowerBIInstance> GetLocalInstances()
{
List<PowerBIInstance> _instances = new List<PowerBIInstance>();
_instances.Clear();
var dict = ManagedIpHelper.GetExtendedTcpDictionary();
foreach (var proc in Process.GetProcessesByName("msmdsrv"))
{
int _port = 0;
EmbeddedSSASIcon _icon = EmbeddedSSASIcon.PowerBI;
var parent = proc.GetParent();
// exit here if the parent == "services" then this is a SSAS instance
if (parent.ProcessName.Equals("services", StringComparison.OrdinalIgnoreCase)) continue;
// exit here if the parent == "RSHostingService" then this is a SSAS instance
if (parent.ProcessName.Equals("RSHostingService", StringComparison.OrdinalIgnoreCase))
{
// only show PBI Report Server if we are running as admin
// otherwise we won't have any access to the models
if (IsAdministrator())
_icon = EmbeddedSSASIcon.PowerBIReportServer;
else
continue;
}
// if the process was launched from Visual Studio change the icon
if (parent.ProcessName.Equals("devenv", StringComparison.OrdinalIgnoreCase)) _icon = EmbeddedSSASIcon.Devenv;
// get the window title so that we can parse out the file name
var parentTitle = parent.MainWindowTitle;
if (parentTitle.Length == 0)
{
// for minimized windows we need to use some Win32 api calls to get the title
//parentTitle = WindowTitle.GetWindowTitleTimeout( parent.Id, 300);
parentTitle = WindowTitle.GetWindowTitle(parent.Id);
}
// try and get the tcp port from the Win32 TcpTable API
try
{
TcpRow tcpRow = null;
dict.TryGetValue(proc.Id, out tcpRow);
if (tcpRow != null)
{
_port = tcpRow.LocalEndPoint.Port;
_instances.Add(new PowerBIInstance(parentTitle, _port, _icon));
//Log.Debug("{class} {method} PowerBI found on port: {port}", "PowerBIHelper", "Refresh", _port);
}
else
{
//Log.Debug("{class} {method} PowerBI port not found for process: {processName} PID: {pid}", "PowerBIHelper", "Refresh", proc.ProcessName, proc.Id);
}
}
catch (Exception ex)
{
//Log.Error("{class} {Method} {Error} {StackTrace}", "PowerBIHelper", "Refresh", ex.Message, ex.StackTrace);
}
}
return _instances;
}
public static bool IsAdministrator()
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
}
}

View File

@ -0,0 +1,31 @@
using System.Diagnostics;
using System.Linq;
using System.Management;
namespace AlmToolkit
{
public static class ProcessExtensions
{
public static Process GetParent(this Process process)
{
try
{
using (var query = new ManagementObjectSearcher(
"SELECT ParentProcessId " +
"FROM Win32_Process " +
"WHERE ProcessId=" + process.Id))
{
return query
.Get()
.OfType<ManagementObject>()
.Select(p => Process.GetProcessById((int)(uint)p["ParentProcessId"]))
.FirstOrDefault();
}
}
catch
{
return null;
}
}
}
}

View File

@ -0,0 +1,80 @@
using BismNormalizer;
using Microsoft.AnalysisServices;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AlmToolkit
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);
//If new install, see if need to migrate settings file from previous version
try
{
if (Settings.Default.UpgradeRequired)
{
Settings.Default.Upgrade();
Settings.Default.UpgradeRequired = false;
Settings.Default.Save();
}
}
catch { }
try
{
// Default web requests like AAD Auth to use windows credentials for proxy auth
System.Net.WebRequest.DefaultWebProxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
if (args != null && args.Length > 0)
{
if (args.Length > 1)
//User opened from Desktop with server/db name
{
string serverName = args[0];
string databaseName = args[1];
ComparisonForm MainFrom = new ComparisonForm();
MainFrom.LoadFromDesktop(serverName, databaseName);
Application.Run(MainFrom);
return;
}
else
//User opened file with the program
{
string fileName = args[0];
//Check file exists, if not will run without args below
if (File.Exists(fileName))
{
ComparisonForm MainFrom = new ComparisonForm();
MainFrom.LoadFile(fileName);
Application.Run(MainFrom);
return;
}
}
}
//Without valid args
Application.Run(new ComparisonForm());
}
catch (Exception exc)
{
MessageBox.Show(exc.Message, Utils.AssemblyProduct, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}

View File

@ -0,0 +1,24 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("AlmToolkit")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ALM Toolkit")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("765c0612-bb8f-4261-87ae-b5b842be3c26")]

View File

@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AlmToolkit.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.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>
/// Returns the cached ResourceManager instance used by this class.
/// </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("AlmToolkit.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@ -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>

View File

@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AlmToolkit.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.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;
}
}
}
}

View File

@ -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>

View File

@ -0,0 +1,46 @@
* In the Solution > VersionInfo.cs file:
Increment AssemblyVersion & AssemblyFileVersion
* In setup project properties window, increment version number
* Set configuration to Setup
Rebuild Setup project
Set configurtaion back to Debug
* Upload the following assembies to https://portal.esrp.microsoft.com/ & get them signed
\BismNormalizer\AlmToolkit\bin\Release\AlmToolkit.exe
\BismNormalizer\BismNormalizer.CommandLine\bin\Release\BismNormalizer.exe
\BismNormalizer\BismNormalizer\bin\ReleaseObfusc\BismNormalizer.dll
- Copy signed assemblies to:
\BismNormalizer\BismNormalizer\bin\ReleaseObfusc (BismNormalizer.dll only)
\BismNormalizer\AlmToolkit\obj\Setup
\BismNormalizer\BismNormalizer.CommandLine\obj\Setup
- Change configuration to Setup
Build ALMT setup project (not Rebuild)
Change configuration back to Debug
- NEW SECTION FOR MSI SIGNING (IGNORE VSIX)?
- Take VSIX and AlmToolkitSetup.msi from following folder
\BismNormalizer\AlmToolkitSetup\Setup
Test installer locally
* Get MSI from \AlmToolkit\AlmToolkit\bin\Msi
=============
Note: if ever increment .NET Framework version number, need to:
1. In Setup project properties (dialog, not properties window) > Prerequisites > Change .NET Framework version
2. In the Solution Explorer, expand the setup project > Detected Dependencies > Microsoft .NET Framework > double click > Change .NET Framework version

Binary file not shown.

View File

@ -0,0 +1,71 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace AlmToolkit
{
public static class Utils
{
public static string AssemblyProduct
{
get
{
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false);
if (attributes.Length == 0)
{
return "";
}
return ((AssemblyProductAttribute)attributes[0]).Product;
}
}
public static string AssemblyTitle
{
get
{
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
if (attributes.Length > 0)
{
AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0];
if (titleAttribute.Title != "")
{
return titleAttribute.Title;
}
}
return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
}
}
public static string AssemblyVersion
{
get
{
return Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
}
public static string AssemblyDescription
{
get
{
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
if (attributes.Length == 0)
{
return "";
}
return ((AssemblyDescriptionAttribute)attributes[0]).Description;
}
}
public static string LatestVersionDownloadUrl
{
get
{
return "https://github.com/microsoft/Analysis-Services/releases/latest/download/AlmToolkitSetup.msi";
}
}
}
}

View File

@ -0,0 +1,139 @@
namespace AlmToolkit
{
partial class WarningListForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WarningListForm));
this.btnOK = new System.Windows.Forms.Button();
this.validationOutput = new BismNormalizer.TabularCompare.UI.ValidationOutput();
this.panelOk = new System.Windows.Forms.Panel();
this.panelGrid = new System.Windows.Forms.Panel();
this.TreeGridImageList2 = new System.Windows.Forms.ImageList(this.components);
this.panelOk.SuspendLayout();
this.panelGrid.SuspendLayout();
this.SuspendLayout();
//
// btnOK
//
this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
this.btnOK.Location = new System.Drawing.Point(609, 12);
this.btnOK.Name = "btnOK";
this.btnOK.Size = new System.Drawing.Size(75, 23);
this.btnOK.TabIndex = 20;
this.btnOK.Text = "OK";
this.btnOK.UseVisualStyleBackColor = true;
//
// validationOutput
//
this.validationOutput.Dock = System.Windows.Forms.DockStyle.Fill;
this.validationOutput.Location = new System.Drawing.Point(0, 0);
this.validationOutput.Margin = new System.Windows.Forms.Padding(7, 7, 7, 7);
this.validationOutput.Name = "validationOutput";
this.validationOutput.Size = new System.Drawing.Size(696, 342);
this.validationOutput.TabIndex = 22;
//
// panelOk
//
this.panelOk.Controls.Add(this.btnOK);
this.panelOk.Dock = System.Windows.Forms.DockStyle.Bottom;
this.panelOk.Location = new System.Drawing.Point(0, 342);
this.panelOk.Name = "panelOk";
this.panelOk.Size = new System.Drawing.Size(696, 47);
this.panelOk.TabIndex = 23;
//
// panelGrid
//
this.panelGrid.Controls.Add(this.validationOutput);
this.panelGrid.Dock = System.Windows.Forms.DockStyle.Fill;
this.panelGrid.Location = new System.Drawing.Point(0, 0);
this.panelGrid.Name = "panelGrid";
this.panelGrid.Size = new System.Drawing.Size(696, 342);
this.panelGrid.TabIndex = 24;
//
// TreeGridImageList2
//
this.TreeGridImageList2.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("TreeGridImageList2.ImageStream")));
this.TreeGridImageList2.TransparentColor = System.Drawing.Color.Transparent;
this.TreeGridImageList2.Images.SetKeyName(0, "Connection.png");
this.TreeGridImageList2.Images.SetKeyName(1, "Table.png");
this.TreeGridImageList2.Images.SetKeyName(2, "Relationship.png");
this.TreeGridImageList2.Images.SetKeyName(3, "BismMeasure.png");
this.TreeGridImageList2.Images.SetKeyName(4, "KPI.png");
this.TreeGridImageList2.Images.SetKeyName(5, "DeleteAction.png");
this.TreeGridImageList2.Images.SetKeyName(6, "UpdateAction.png");
this.TreeGridImageList2.Images.SetKeyName(7, "CreateAction.png");
this.TreeGridImageList2.Images.SetKeyName(8, "SkipAction.png");
this.TreeGridImageList2.Images.SetKeyName(9, "Plus.png");
this.TreeGridImageList2.Images.SetKeyName(10, "Minus.png");
this.TreeGridImageList2.Images.SetKeyName(11, "Informational.png");
this.TreeGridImageList2.Images.SetKeyName(12, "Warning.png");
this.TreeGridImageList2.Images.SetKeyName(13, "WarningToolWindow.png");
this.TreeGridImageList2.Images.SetKeyName(14, "Role.png");
this.TreeGridImageList2.Images.SetKeyName(15, "Perspective.png");
this.TreeGridImageList2.Images.SetKeyName(16, "Action.png");
this.TreeGridImageList2.Images.SetKeyName(17, "CompareBismModels_Small.png");
this.TreeGridImageList2.Images.SetKeyName(18, "DeleteActionGrey.png");
this.TreeGridImageList2.Images.SetKeyName(19, "SkipActionGrey.png");
this.TreeGridImageList2.Images.SetKeyName(20, "CreateActionGrey.png");
this.TreeGridImageList2.Images.SetKeyName(21, "Culture.png");
this.TreeGridImageList2.Images.SetKeyName(22, "Expression.png");
this.TreeGridImageList2.Images.SetKeyName(23, "CalculationGroup.png");
this.TreeGridImageList2.Images.SetKeyName(24, "CalculationItem.png");
this.TreeGridImageList2.Images.SetKeyName(25, "Model.png");
this.TreeGridImageList2.Images.SetKeyName(26, "RefreshPolicy.png");
//
// WarningListForm
//
this.AcceptButton = this.btnOK;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnOK;
this.ClientSize = new System.Drawing.Size(696, 389);
this.Controls.Add(this.panelGrid);
this.Controls.Add(this.panelOk);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
this.Name = "WarningListForm";
this.Text = "Warning List";
this.Load += new System.EventHandler(this.WarningListForm_Load);
this.Shown += new System.EventHandler(this.WarningListForm_Shown);
this.panelOk.ResumeLayout(false);
this.panelGrid.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button btnOK;
private BismNormalizer.TabularCompare.UI.ValidationOutput validationOutput;
private System.Windows.Forms.Panel panelOk;
private System.Windows.Forms.Panel panelGrid;
public System.Windows.Forms.ImageList TreeGridImageList2;
}
}

View File

@ -0,0 +1,68 @@
using BismNormalizer.TabularCompare;
using BismNormalizer.TabularCompare.Core;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AlmToolkit
{
public partial class WarningListForm : Form
{
public WarningListForm()
{
InitializeComponent();
}
private Comparison _comparison;
private ImageList _treeGridImageList;
public Comparison Comparison
{
get { return _comparison; }
set { _comparison = value; }
}
public ImageList TreeGridImageList
{
get { return _treeGridImageList; }
set { _treeGridImageList = value; }
}
private void WarningListForm_Load(object sender, EventArgs e)
{
_treeGridImageList = this.TreeGridImageList2;
validationOutput.ClearMessages(0);
validationOutput.SetImageList(_treeGridImageList);
_comparison.ValidationMessage += HandleValidationMessage;
_comparison.ResizeValidationHeaders += HandleResizeValidationHeaders;
}
private void WarningListForm_Shown(object sender, EventArgs e)
{
_comparison.ValidateSelection();
}
public void HandleValidationMessage(object sender, ValidationMessageEventArgs e)
{
validationOutput.ShowStatusMessage(
0,
"ALM Toolkit Comparison",
e.Message,
e.ValidationMessageType,
e.ValidationMessageStatus);
}
public void HandleResizeValidationHeaders(object sender, EventArgs e)
{
validationOutput.ResizeValidationHeaders();
}
}
}

View File

@ -0,0 +1,538 @@
<?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>
<metadata name="TreeGridImageList2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="TreeGridImageList2.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACI
XwAAAk1TRnQBSQFMAgEBGwEAAZQBAgGUAQIBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABcAMAAQEBAAEgBgABcBIAA8IBzwP2Af8D9gH/A4EBj4AAA/YB/wPgAewDawF4AwoBDAMKAQwDawF4
A+AB7AP1Af9QAAP2Af8DQQH/A0EB/wO+Af8DkAGfA2MBcAOBAY8DKAEwA2MBcAOQAZ8DVAFgOAAD9gH/
A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/EAAD9gH/A14B/wO4Af8D4AHsA+AB7AO4Af8DXgH/A+sB/1AA
A7EBvwP2Af8DpwH/A0wB/wP2Af8DyQH/A0EB/wPrAf8D1AH/A5EB/wPUAf8DcgGANAAD9gH/A0EB/wNB
Af8DQQH/A0EB/wNBAf8D9gH/EAAD9gH/A0EB/wFaAlkB/wNeAf8DXgH/A14B/wNBAf8D6wH/VAADKAEw
A9QB/wNBAf8DvgH/A8kB/wOcAf8DQQH/A24B/wNBAf8DnAH/A/YB/xgAA/YB/wP2Af8D9gH/A/YB/wP2
Af8D9gH/A/YB/wP2Af8DQQH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wP2Af8QAAP2Af8DQQH/
AeUB4wHkAf8DtQH/A7UB/wHwAe4B7wH/A0EB/wPrAf9YAAPkAe8DTAH/A5EB/wPRAd8DoQGvA74B/wNB
Af8DswH/A+QB7wNyAYAYAAP2Af8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wHxAe8B8AH/
AfEB7wHwAf8B8QHvAfAB/wNBAf8D9gH/EAAD9gH/A0EB/wHmAeQB5QH/AfEB7wHwAf8B8QHvAfAB/wHx
Ae8B8AH/A0EB/wPrAf9UAAMoATAD5AHvA3kB/wNjAf8D9gH/A/YB/wOzAf8DQQH/A6cB/wP2Af8DwgHP
GAAD9gH/A0EB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A/YB/xAA
A/YB/wNBAf8B5gHkAeUB/wHwAe4B7wH/AfAB7gHvAf8B8QHvAfAB/wNBAf8D6wH/VAADDQEQA/YB/wNB
Af8DQQH/A0EB/wOGAf8DTAH/A24B/wOGAf8DQQH/A/YB/wMNARAUAAP2Af8DQQH/A/YB/xAAA/YB/wNB
Af8DQQH/A0EB/wNBAf8DQQH/A/YB/xAAA/YB/wNBAf8DagH/A0YB/wNGAf8DbwH/A0EB/wPrAf9YAAPC
Ac8D4AH/A0wB/wOzAf8D1AH/A/YB/wPJAf8DpwH/A9QB/wPJAf8DwgHPFAAD9gH/A0EB/wP2Af8QAAP2
Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8MAAONAZwDtQH/A0sB/wGpAagBqQH/Ad8B3QHeAf8B3wHd
Ad4B/wGpAagBqQH/A0sB/wO0Af8DjQGcWAADgQGPA7MB/wNBAf8DQQH/A9QB/wNBAf8BjwKOAf8BjwKO
Af8DVwH/A7MB/wOQAZ8IAAP2Af8D9gH/A/YB/wNBAf8D9gH/A/YB/wP2Af8IAAP2Af8D9gH/A/YB/wP2
Af8D9gH/A/YB/wP2Af8IAAMdASMD5QH+A0sB/wHLAckBygH/AZgClwH/A0gB/wNIAf8BmAKXAf8BywHJ
AcoB/wNLAf8D5QH+Ax0BI1gAA4EBjwP2Af8D4AH/A5AB/wGkAaMBpAH/AdsB2QHaAf8B2wHZAdoB/wGk
AaMBpAH/A0EB/wPUAf8DYwFwBAAD9gH/A0EB/wNBAf8DQQH/A0EB/wNBAf8D9gH/CAAD9gH/A0EB/wNB
Af8DQQH/A0EB/wNBAf8D9gH/CAADXgFrA64B/wN0Af8BuwG6AbsB/wNTAf8BzwHOAc8B/wHPAc4BzwH/
A1MB/wG7AboBuwH/A3QB/wOuAf8DXgFrWAADRQFQA+sB/wNBAf8B0ALPAf8DQQH/AfEB7wHwAf8B8QHv
AfAB/wNBAf8B0ALPAf8DQQH/A+sB/wNFAVAD9gH/A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNB
Af8D9gH/A/YB/wP2Af8D9gH/A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8D9gH/CAADcwGB
A5sB/wOPAf8BmAGXAZgB/wGJAogB/wHxAe8B8AH/AfEB7wHwAf8BiQKIAf8BmAKXAf8DjwH/A5oB/wN0
AYJYAAPkAe8DYwH/AdACzwH/AcUBxAHFAf8BugG5AboB/wHxAe8B8AH/AfEB7wHwAf8BugG5AboB/wHF
AcQBxQH/AdACzwH/A0EB/wPkAe8D9gH/A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8DQQH/
A0EB/wNBAf8DQQH/A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8D9gH/CAADXgFrA64B/wN0
Af8BuwG6AbsB/wNTAf8BzwHOAc8B/wHPAc4BzwH/A1MB/wG7AboBuwH/A3QB/wOuAf8DXgFrWAAD9gH/
A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wP2Af8D9gH/A0EB/wNBAf8DQQH/
A0EB/wNBAf8D9gH/A/YB/wP2Af8D9gH/A0EB/wNBAf8DQQH/A0EB/wNBAf8D9gH/CAADIAEmA+YB/wNJ
Af8BywHJAcoB/wGYApcB/wNIAf8DSAH/AZgClwH/AcsByQHKAf8DSQH/A+YB/wMgASZYAAP2Af8DTAH/
Aa8BrgGvAf8B0ALPAf8BpAGjAaQB/wHxAe8B8AH/AfEB7wHwAf8BpAGjAaQB/wHQAs8B/wGvAa4BrwH/
A0wB/wP2Af8D9gH/A0EB/wNBAf8DQQH/A0EB/wNBAf8D9gH/CAAD9gH/A0EB/wNBAf8DQQH/A0EB/wNB
Af8D9gH/DAADkgGgA7IB/wNMAf8BqQGoAakB/wHgAd4B3wH/AeAB3gHfAf8BqQGoAakB/wNMAf8DsgH/
A5IBoFwAA5ABnwPUAf8DTAH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0wB/wPUAf8DkAGfA/YB/wP2
Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wgAA/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wwAAwkBCwOx
Ab8DxgH/A2wB/wNFAf8DRQH/A2wB/wPGAf8DsQG/AwkBC2AAA5ABnwP2Af8D9gH/A/YB/wP2Af8D9gH/
A/YB/wP2Af8D9gH/A5ABn1QAAwQBBQNeAWsDwgHPA/AB+gPwAfoDwgHPA14BawMEAQX/ABEAA8IBzwP2
Af8D9gH/A4EBj0gAA58B/wOfAf8DnwH/A58B/2QAA1sBuwOAAf8sAAP2Af8DQQH/A2MB/wO+Af8DkAGf
A2MBcAOBAY8DKAEwA2MBcAOQAZ8DVAFgLAADnwH/A58B/wOfAf8DnwH/MAADBwEKA1YBwQMuAUcQAAM0
AVQDVgG7AzoBYRAAAwcBCQNOAZkoAAOxAb8D9gH/A6cB/wNMAf8D9gH/A8kB/wORAf8D6wH/A9QB/wOR
Af8D1AH/A/YB/wP2Af8D9gH/A/YB/wP2Af8YAAOhAf8DnwH/A58B/wOhAf83AAH/A1MBrRAAA1gBwAMP
AfwDPQFpFAADgAH/CAADgAH/AxMBGgQAA0cBgANDAXcQAAP2Af8DvgH/A0EB/wO+Af8DyQH/A5wB/wN5
Af8DbgH/A1gB/wOcAf8DyQH/A0EB/wNBAf8DQQH/A/YB/xgAA6EB/wOfAf8DnwH/A58B/xgAAxIBGQMq
AUEUAANMAZEDAAH/DAADBAEFAwAB/wNHAYIDBgEIFAADaAHeAxMBGgQAA0MBdwNAAW8EAANzAfMEAAMq
AUAMAAP2Af8DswH/A0wB/wORAf8B9ALzAf8DeQH/A74B/wNBAf8DswH/A6cB/wHyAfAB8QH/AfEB7wHw
Af8B8QHvAfAB/wNBAf8D9gH/GAADoQH/A58B/wOfAf8DnwH/GAADOQFgAwAB/wNLAY4QAAMjATQDAAH/
A1kBxANZAdIDWwHQA1oBygMAAf8DGgElGAADVQGqA1UBqgwAA2IBzANvAeYUAAP2Af8DyQH/A3kB/wNj
Af8D9QH/A7MB/wOzAf8DQQH/A6cB/wPJAf8B8wLyAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wP2Af8EAAOh
Af8DnwH/A58B/wOfAf8DnwH/A6EB/wOfAf8DnwH/A58B/wOfAf8DoQH/A58B/wOfAf8DnwH/CAADPAFn
AwAB/wM/AW8IAANZAckDKgFAA1kBxAMAAf8DVwHFA1cBxQMAAf8DWQHXHAADOgFiA4AB/wwAAzUBVQNO
AZkUAAP2Af8DyQH/A1gB/wNBAf8DkQH/A4YB/wNMAf8DbgH/A4YB/wNBAf8DyQH/A0EB/wNBAf8DQQH/
A/YB/wQAA58B/wOhAf8DnwH/A58B/wOhAf8DoQH/A6EB/wOfAf8DoQH/A6EB/wOhAf8DnwH/A6EB/wOf
Af8MAANJAYkDAAH/BAADOAFcAwAB/wMKAQ4DRAF5AwAB/wsAAf8DSgGNHAADEwEaA4AB/wwAA4AB/wNS
AaIUAAP2Af8DhgH/A98B/wNMAf8DswH/A9QB/wP2Af8D9AH/AfQC8wH/A8kB/wHzAvIB/wHxAe8B8AH/
AfEB7wHwAf8DQQH/A/YB/wQAA58B/wOfAf8DoQH/A58B/wOhAf8DnwH/A6EB/wOfAf8DnwH/A58B/wOf
Af8DnwH/A6EB/wOfAf8QAANMAe8DWQHJAyEB+gNIAYgEAAMfASwDAAH/Ax4BKwMdASoDAAH/Ax0BKSAA
A4AB/wMmATgEAANNAZEDgAH/BAADTgGZA28B6gwAA/YB/wNBAf8B8gHwAfEB/wOyAf8DWAH/A1gB/wPU
Af8B8QHvAfAB/wHxAe8B8AH/A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8D9gH/BAADnwH/
A6EB/wOfAf8DoQH/A58B/wOhAf8DoQH/A58B/wOhAf8DnwH/A58B/wOhAf8DnwH/A58B/xAAAzEBTgMA
Af8DWgHVDAADIQH6A0oBiwNKAYoDMQH4JAADcgHuA0MBdyQAA/YB/wNBAf8DQQH/A2MB/wO+Af8DyQH/
A4YB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8D9gH/GAADnwH/A58B/wOfAf8DnwH/GAADJQE3
A0IBdAM4AV0DOwFlAwAB/wNTAbADKAE9A0IBdgMOARMDQgF1AwAB/wMAAf8DSAGGIAADPgFrA28B5gNp
Ad0DRwGAIAAD9gH/A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8B8QHvAfAB/wHxAe8B8AH/
AfEB7wHwAf8DQQH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wP2Af8YAAOfAf8DnwH/A6EB/wOh
Af8YAANKAYwDAAH/AwAB/wMAAf4DAAH+Aw8B/AMAAf8DAAH/A1YBuwMMARADAAH/AwAB/wMdASooAAN3
AfckAAP2Af8DQQH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHv
AfAB/wNBAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DQQH/A/YB/xgAA6EB/wOfAf8DnwH/A6EB/xgA
AwQBBQMJAQwDAAEBAwoBDQMAAf8DOwFkBAADBQEHAw8BFAMEBAYBCAMHAQksAANyAe4kAAP2Af8DQQH/
A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A/YB/xgAA6EB/wOh
Af8DoQH/A58B/yQAAwIBAwMAAf8DNwFbRAADPAFmAxgBIgNiAcwcAAP2Af8DQQH/A0EB/wNBAf8DQQH/
A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A/YB/xgAA58B/wOfAf8DnwH/A6EB/3gA
AzUBVQM+AWscAAP2Af8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNB
Af8DQQH/A/YB/yAAAwEBAqAAA/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2
Af8D9gH/A/YB/wP2Af8D9gH//wABAAH+AfMB8gH/Af4B8wHyAf8B/gHzAfIB/wH+AfMB8gH/Af4B8wHy
Af8B/gHzAfIB/wH+AfMB8gH/Af4B8wHyAf8B/gHzAfIB/wH+AfMB8gH/Af4B8wHyAf8B/gHzAfIB/wH+
AfMB8gH/Af4B8wHyAf8B/gHzAfIB/wH+AfMB8gH/BAADJwH/AycB/wMnAf8DJwH/AycB/wMnAf8DJwH/
AycB/xAAAcABlQFGAf8BwAGVAUYB/4QAAf4B8wHyAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/
AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wH+AfMB8gH/BAADJwH/A/gB/wP4Af8D+AH/A/gB/wP4
Af8D+AH/AycB/wwAAcABlQFGAf8BoQE5AQAB/wHAAZUBRgH/DAADwAH/A5IB/wPqAf8gAANfAegDwAH/
FAAD/gH/A/EB/wPHAf8DjwH/A4AB/wOiAf8D7AH/FAAB/gHzAfIB/wMaAf8B+QLqAf8B+QLqAf8B+QLq
Af8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8DGgH/
Af4B8wHyAf8EAAMnAf8D+AH/A/gB/wP4Af8D+AH/A/oB/wP8Af8D0AH/CAABwAGVAUYB/wGhATkBAAH/
AcABlQFGAf8QAAOSAf8DkgH/A5IB/wNfAegYAAPrAf8DsAH/Aw0BERAAA/0B/wPWAf8DlQH/A5UB/wOd
Af8DlgH/A4kB/wNQAf8D1QH/EAAB/gHzAfIB/wMaAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLq
Af8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8DGgH/Af4B8wHyAf8EAAMn
Af8D+AH/A/gB/wP4Af8D/AH/AcYBnwFWAf8BoQE5AQAB/wGhATkBAAH/AaEBOQEAAf8BswFZARIB/wGh
ATkBAAH/AcABlQFGAf8UAAPrAf8DkAH/A5IB/wOSAf8DUgGpDAADEAEWA98B/wOdAf8DMQFNFAAD1wH/
A6IB/wOiAf8DogH/A50B/wOcAf8DnAH/A5wB/wNaAf8D0gH/DAAB/gHzAfIB/wMaAf8B+QLqAf8B+QLq
Af8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLq
Af8DGgH/Af4B8wHyAf8EAAMnAf8D+AH/A/gB/wP6Af8BxgGfAVYB/wG3AWEBIQH/AfIB8AHrAf8D+AH/
AfIB8AHrAf8BtwFhASEB/wGzAVkBEgH/HAADXQHKA5IB/wOQAf8DoAH/AzEBTQQAAw0BEQPAAf8DkgH/
A1IBqRQAA/QB/wOuAf8DrgH/A7AB/wOwAf8DrgH/A6gB/wOiAf8DnAH/A5wB/wNQAf8D7AH/CAAB/gHz
AfIB/wMaAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLq
Af8B+QLqAf8B+QLqAf8B+QLqAf8DGgH/Af4B8wHyAf8EAAMnAf8D+AH/A/gB/wP8Af8BoQE5AQAB/wHy
AfAB6wH/A/gB/wP4Af8D+AH/AfIB8AHrAf8BoQE5AQAB/wPEAf8DJwH/AycB/xQAA1YBqwOQAf8DkgH/
A50B/wM+AWsDwAH/A5AB/wNfAegDAwEEFAAD3QH/A7wB/wPCAf8DxgH/A8cB/wPBAf8DvAH/A64B/wOi
Af8DnAH/A4kB/wOiAf8IAAH+AfMB8gH/AxoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5
AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wMaAf8B/gHzAfIB/wQAAycB/wP4
Af8D+AH/A/0B/wGhATkBAAH/A/gB/wP4Af8D+AH/A/gB/wP4Af8BoQE5AQAB/wP9Af8D+AH/AycB/xgA
Az4BawOdAf8DkgH/A5AB/wOSAf8D6wH/AwMEBAEFFAAD1gH/A8IB/wP+Af8D/gH/A/4B/wP9Af8D/AH/
A/wB/wP8Af8D+gH/A48B/wOAAf8IAAH+AfMB8gH/AxoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5
AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wMaAf8B/gHzAfIB/wQA
AycB/wP4Af8D+AH/A/wB/wGhATkBAAH/AfIB8AHrAf8D+AH/A/gB/wP4Af8B8gHwAesB/wGhATkBAAH/
A/wB/wP4Af8DJwH/HAADXAHJA5IB/wOQAf8DnQH/Aw0BERwAA9YB/wPPDf8D/gH/A/4B/wP9Af8D/AH/
A/sB/wOPAf8DjgH/CAAB/gHzAfIB/wMaAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLq
Af8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8DGgH/Af4B8wHyAf8EAAMnAf8DJwH/
AycB/wNhAf8BxgGfAVYB/wG5AYgBNAH/AfIB8AHrAf8D+AH/AfIB8AHrAf8BuQGIATQB/wHGAZ8BVgH/
A/oB/wP4Af8DJwH/GAADUgGpA5IB/wOSAf8DkAH/A5IB/wNcAckQAAMLAQ8IAAPpAf8D2QH/A+wB/wPw
Af8D8AH/A+wB/wPhAf8D1wH/A8AB/wOoAf8DjwH/A8YB/wgAAf4B8wHyAf8DGgH/AfkC6gH/AfkC6gH/
AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/
AxoB/wH+AfMB8gH/GAABxgGfAVYB/wGhATkBAAH/AaEBOQEAAf8BoQE5AQAB/wHGAZ8BVgH/A/wB/wP4
Af8D+AH/AycB/xQAA1wByQOSAf8DkAH/A50B/wM+AWsDwAH/A5IB/wNKAYwYAAP3Af8D2QH/A+wB/wPx
Af8D8AH/A+wB/wPgAf8D1gH/A8AB/wOoAf8DnAH/A/AB/wgAAf4B8wHyAf8DGgH/AfkC6gH/AfkC6gH/
AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/
AxoB/wH+AfMB8gH/HAADxAH/A/0B/wP8Af8D+gH/A/gB/wP4Af8D+AH/AycB/xAAA+oB/wOSAf8DkAH/
A5AB/wNSAakEAAMNARED4AH/A6AB/wMxAU0UAAP+Af8D7AH/A+AB/wPxAf8D8QH/A+oB/wPiAf8D0gH/
A8EB/wOoAf8D1wH/A/4B/wgAAf4B8wHyAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMa
Af8DGgH/AxoB/wMaAf8DGgH/AxoB/wH+AfMB8gH/HAADJwH/A/gB/wP4Af8D+AH/A/gB/wMnAf8DJwH/
A4oB/xAAA5IB/wOSAf8DkAH/A18B6BAAA+oB/wOwAf8DDQERFAAD/QH/A+wB/wPdAf8D4wH/A+YB/wPc
Af8DywH/A7sB/wPWAf8D/QH/DAAB/gHzAfIB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/
AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/Af4B8wHyAf8cAAMnAf8D+AH/A/gB/wP4Af8D+AH/AycB/wOK
Af8UAAPAAf8DkgH/A+oB/xgAA18B6APAAf8YAAP9Af8D9wH/A+kB/wPcAf8D1QH/A+IB/wPvAf8D/gH/
EAAB/gHzAfIB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMa
Af8DGgH/Af4B8wHyAf8cAAMnAf8DJwH/AycB/wMnAf8DJwH/A4oB/xMAAQF4AAH+AfMB8gH/Af4B8wHy
Af8B/gHzAfIB/wH+AfMB8gH/Af4B8wHyAf8B/gHzAfIB/wH+AfMB8gH/Af4B8wHyAf8B/gHzAfIB/wH+
AfMB8gH/Af4B8wHyAf8B/gHzAfIB/wH+AfMB8gH/Af4B8wHyAf8B/gHzAfIB/wH+AfMB8gH//wABAAH/
AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAP/
AQAC/wMrAUIDKwFCAzMBUgM3AVoDNwFbA0oBiQNLAY4DSgGNAz0BZwM3AVsDNwFbAzQBVAMnAToDEQEX
CAADKwFCAysBQgMrAUIDMgFQAzcBWgNIAYMDSwGOA0oBjQNEAXoDNwFbAzcBWxQAASIBuQHTAf8BAAGM
AakB/wEAAYwBqQH/AQABjAGpAf8BAAGMAakB/wEAAYwBqQH/AQABjAGpAf8BAAGMAakB/wEAAYwBqQH/
AQABjAGpAf8BAAGMAakB/wEAAYwBqQH/AQABjAGpAf8BAAGMAakB/wEAAYwBqQH/ASIBuQHTAf8BAAG5
AdMB/wEAAYwBqQH/AQABjAGpAf8BAAGMAakB/wEAAYwBqQH/AQABjAGpAf8BAAGMAakB/wEAAYwBqQH/
AQABjAGpAf8BAAGMAakB/wEAAYwBqQH/AQABjAGpAf8BAAGMAakB/wEAAYwBqQH/AQABjAGpAf8BAAG5
AdMB/wMrAUIDGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/A0ABcQMaAf8DGgH/AzEB/wNcAeoDVgG0
Az4BawQAAy4BSAMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wM3AVsUAAERAbQB0QH/
AQAByQHpAf8BAAHGAfEB/wEAAcIB8AH/AQABwQHwAf8BAAHAAfAB/wEAAcEB8AH/AQABwQHwAf8BAAHB
AfAB/wEAAcEB8AH/AQABwgHwAf8BAAHDAfAB/wEAAcMB8AH/AQABxAHxAf8BAAHDAeQB/wERAbQB0QH/
AQABtAHRAf8BAAHJAekB/wEAAcYB8QH/AQABwgHwAf8BAAHBAfAB/wEAAcAB8AH/AQABwQHwAf8BAAHB
AfAB/wEAAcEB8AH/AQABwQHwAf8BAAHCAfAB/wEAAcMB8AH/AQABwwHwAf8BAAHEAfEB/wEAAcMB5AH/
AQABtAHRAf8DKwFCAxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wNIAYMDGgH/AxoB/wMaAf8DGgH/
AxoB/wNKAY0DPwFtAzUBVQMiAf8B+QLqAf8B+QLqAf8B+QLqAf8DIgH/AfkC6gH/AfkC6gH/AfkC6gH/
AyIB/wM3AVsDNwFbAzcBWwwAAUsByAHcAf8BAAGuAc8B/wEAAc0B8gH/AQAByAHxAf8BAAHFAfEB/wEA
AcQB8QH/AQABwwHwAf8DAAH/AwAB/wEAAcYB8QH/AQAByAHxAf8BAAHKAfIB/wEAAcoB8gH/AQABzAHx
Af8BAAGrAc0B/wFLAcgB3AL/AQAC/wEAAa4BzwH/AQABzQHyAf8BAAHIAfEB/wEAAcUB8QH/AQABxAHx
Af8BAAHDAfAB/wMAAf8DAAH/AQABxgHxAf8BAAHIAfEB/wEAAcoB8gH/AQABygHyAf8BAAHMAfEB/wEA
AasBzQL/AQAC/wMrAUIDGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/A0wBkwMaAf8DGgH/AxoB/wMa
Af8DGgH/AxoB/wM3AVsDNgFYAyIB/wH5AuoB/wH5AuoB/wH5AuoB/wMiAf8B+QLqAf8B+QLqAf8B+QLq
Af8DIgH/AzcBWwMiAf8DQAFuDAAB4gHuAfIB/wERAbQB0QH/AQEBxgHkAf8BAQHRAfMB/wEAAc0B8gH/
AQABywHyAf8BAAHKAfIB/wMAAf8DAAH/AQABzQHzAf8BAQHRAfMB/wECAdIB9AH/AQMB0wH0Af8BAAHF
AeMB/wERAbQB0QH/AeIB7gHyAv8BAAL/AQABtAHRAf8BAAHGAeQB/wEAAdEB8wH/AQABzQHyAf8BAAHL
AfIB/wEAAcoB8gH/AwAB/wMAAf8BAAHNAfMB/wEAAdEB8wH/AQAB0gH0Af8BAAHTAfQB/wEAAcUB4wH/
AQABtAHRAv8BAAL/AzUBVQMaAf8DGgH/AxoB/wNiAekDGgH/AxoB/wMaAf8DUQGcAxoB/wMaAf8DGgH/
AxoB/wMaAf8DGgH/AzcBWwMyAVADIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DNwFb
AyIB/wNKAYoQAAGAAc0B3wH/AQABrAHNAf8BDwHbAfQB/wELAdkB9QH/AQgB1wH1Af8BBwHWAfQB/wEH
AdYB9AH/AQkB1wH1Af8BCwHZAfUB/wELAdkB9QH/AQ0B2wH1Af8BDgHaAfMB/wEAAaoBywH/AYABzQHf
Af8EAAH/AQAD/wEAAv8BAAGsAc0B/wEAAdsB9AH/AQAB2QH1Af8BAAHXAfUB/wEAAdYB9AH/AQAB1gH0
Af8BAAHXAfUB/wEAAdkB9QH/AQAB2QH1Af8BAAHbAfUB/wEAAdoB8wH/AQABqgHLAv8BAAP/AQAC/wM2
AVgDGgH/AxoB/wNdAdMDVAGmA10B0wMaAf8DGgH/A1oBvQMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wM3
AVsDMQFOAzcBWgNAAW4DSgGNA1IBpANcAeoDYgHvA2IB7wNdAe0DXAHMA0gBhQMiAf8DSAGFAzcBWwM3
AVsDNwFbBAAB6gHyAfUB/wERAbQB0QH/AQYBxgHfAf8BGgHmAfgB/wEZAeQB9wH/ARgB4wH3Af8BAAFD
AUwB/wEAAUMBTAH/ARYB4gH3Af8BFgHiAfcB/wEXAeMB9wH/AQUBxwHgAf8BEQG0AdEB/wHqAfIB9QH/
BAAB/wEAA/8BAAL/AQABtAHRAf8BAAHGAd8B/wEAAeYB+AH/AQAB5AH3Af8BAAHjAfcB/wEAARQBHQH/
AQABFAEdAf8BAAHiAfcB/wEAAeIB9wH/AQAB4wH3Af8BAAHHAeAB/wEAAbQB0QL/AQAD/wEAAv8DLgFH
AzMBUgM9AWcDRgF/A04BlQNSAaMBXAJaAfUBeAJ2AfoBeAJ2AfoDGgH/AxoB/wMaAf8DGgH/AxoB/wMa
Af8DNwFbAwABAQM5AV8DIgH/A04BlANSAacDIgH/AYECfQH6AYUCgwH5AyIB/wF/AX0BegH3A1sByAMi
Af8DSAGFAyIB/wMiAf8DNwFbCAABjgHTAeMB/wEAAaoBywH/ASIB6gH2Af8BJgHwAfoB/wEkAe4B+QH/
AwAB/wMAAf8BIAHqAfkB/wEgAeoB+QH/ARsB5QH1Af8BAAGqAcsB/wGOAdMB4wH/CAAB/wEAA/8BAAP/
AQAC/wEAAaoBywH/AQAB6gH2Af8BAAHwAfoB/wEAAe4B+QH/AwAB/wMAAf8BAAHqAfkB/wEAAeoB+QH/
AQAB5QH1Af8BAAGqAcsC/wEAA/8BAAP/AQAC/wQAAyABLwNMAZIDJQH/AxoB/wMlAf8BbgFsAWsB+gM8
Af8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AzgBXgQAAzkBXwMiAf8DIgH/AyIB/wMiAf8DIgH/
AyIB/wMiAf8DIgH/AyIB/wMiAf8DSAGFA04BlQMiAf8DNwFbCAAB7wH0AfYB/wERAbQB0QH/AQQBwgHb
Af8BKgHzAfsB/wEpAfEB+gH/AwAB/wMAAf8BJQHvAfoB/wElAe8B+gH/AQYBxgHfAf8BEQG0AdEB/wHv
AfQB9gH/CAAB/wEAA/8BAAP/AQAC/wEAAbQB0QH/AQABwgHbAf8BAAHzAfsB/wEAAfEB+gH/AwAB/wMA
Af8BAAHvAfoB/wEAAe8B+gH/AQABxgHfAf8BAAG0AdEC/wEAA/8BAAP/AQAC/wQAAzgBXAMlAf8DGgH/
AxoB/wMaAf8DJQH/A18B6AMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DSgGLBAADOQFfAyIB/wH5
AuoB/wH5AuoB/wMiAf8B+QLqAf8B+QLqAf8DIgH/AfkC6gH/AfkC6gH/AyIB/wNeAdkDIgH/AyIB/wM3
AVsMAAGcAdcB5QH/AQABqQHLAf8BJAHqAfQB/wEsAfQB+wH/AwAB/wMAAf8BKgHyAfoB/wEjAeoB9gH/
AQABqQHLAf8BnAHXAeUB/wwAAf8BAAP/AQAD/wEAA/8BAAL/AQABqQHLAf8BAAHqAfQB/wEAAfQB+wH/
AwAB/wMAAf8BAAHyAfoB/wEAAeoB9gH/AQABqQHLAv8BAAP/AQAD/wEAA/8BAAL/BAADOAFcAxoB/wMa
Af8DGgH/AxoB/wMaAf8DVAGvAxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wNEAXsEAAM5AV8DIgH/
AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/A2IB6QNiAekDIgH/A0gBhhAAAREBtAHR
Af8BAQG/AdkB/wE2AfYB+wH/AwAB/wMAAf8BLQH1AfsB/wEIAcYB3QH/AREBtAHRAf8B9QH2AfcB/wwA
Af8BAAP/AQAD/wEAA/8BAAL/AQABtAHRAf8BAAG/AdkB/wEHAfYB+wH/AwAB/wMAAf8BAAH1AfsB/wEA
AcYB3QH/AQABtAHRAv8BAAP/AQAD/wEAA/8BAAL/BAADOAFcAyUB/wMaAf8DGgH/AxoB/wMlAf8DVgGr
A14B0ANcAeoDXAHqA1wB6gNcAeoDJQH/AxoB/wM3AVsEAAM5AV8DIgH/AyIB/wMiAf8DIgH/AyIB/wMi
Af8DIgH/AyIB/wMiAf8DIgH/A2EB3AMiAf8DIgH/Az0BZxAAAasB3QHpAf8BAAGpAcoB/wEjAegB8wH/
AS0B9QH7Af8BLQH1AfsB/wEmAe0B9gH/AQABqQHLAf8BqwHdAekB/xAAAf8BAAP/AQAD/wEAA/8BAAP/
AQAC/wEAAakBygH/AQAB6AHzAf8BAAH1AfsB/wEAAfUB+wH/AQAB7QH2Af8BAAGpAcsC/wEAA/8BAAP/
AQAD/wEAA/8BAAL/BAADIAEvA0wBkgMlAf8DGgH/AyUB/wNUAa8DVgGrA1UBrQNfAegDXAHqA1wB6gNc
AeoDXAHqAxoB/wM3AVsEAANDAXgDIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/
A04BlQNdAdMDIgH/AzcBWxQAARIBtAHRAf8BAAG7AdYB/wEtAfUB+wH/AS0B9QH7Af8BBwHGAd0B/wES
AbQB0QH/FAAB/wEAA/8BAAP/AQAD/wEAA/8BAAL/AQABtAHRAf8BAAG7AdYB/wEAAfUB+wH/AQAB9QH7
Af8BAAHGAd0B/wEAAbQB0QL/AQAD/wEAA/8BAAP/AQAD/wEAAv8IAANLAY4DTAGSA1cBugNWAasDVgGr
A1YBqwNWAasDYQHkA1wB6gNcAeoDXAHqA1wB6gMaAf8DNwFbBAADSQGHAz4BawM3AVsDNwFbAzcBWwM6
AWIDUAGeA1IBowNSAaMDUgGjA1IBowNOAZUDIgH/AyIB/wM3AVsUAAG7AeIB7QH/AQABqAHKAf8BIAHl
AfEB/wEmAewB9QH/AQABqQHLAf8BuwHiAe0B/xQAAf8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAAv8BAAGo
AcoB/wEAAeUB8QH/AQAB7AH1Af8BAAGpAcsC/wEAA/8BAAP/AQAD/wEAA/8BAAP/AQAC/wgAAz4BawNK
AYwDJQH/A1YBsQNYAbkDVgGrA1YBqwNhAeEDXAHqA1wB6gNcAeoDJQH/A0oBjAMuAUgQAAM3AVsDIgH/
AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AzYBWRgAARIBtAHRAf8BAAG5AdUB/wEH
AcYB3QH/ARIBtAHRAf8YAAH/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAL/AQABtAHRAf8BAAG5AdUB/wEA
AcYB3QH/AQABtAHRAv8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAAv8MAAM9AWgDVgG0A1wB6gMxAf8DGgH/
AxoB/wMaAf8DGgH/AzEB/wNcAeoDVwG6Az4BaxQAAzcBWwMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMi
Af8DIgH/AyIB/wMiAf8DNAFUGAAByQHpAfEB/wECAa8BzgH/AQIBrwHOAf8ByQHpAfEB/xgAAf8BAAP/
AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAL/AQABrwHOAf8BAAGvAc4C/wEAA/8BAAP/AQAD/wEAA/8BAAP/
AQAD/wEAAv8QAAMNAREDJwE6AzMBUwM3AVsDOwFlA0oBjQNLAY4DSAGEAzgBXgMSARkYAAM3AVsDNwFb
A0kBhwNLAY4DSwGOA0oBjQNFAXwDNwFbAzcBWwM3AVsDNQFXAzcBWv8AQQADKgFAAyoBQAMqAUADKgFA
AyoBQAMqAUADKgFAAyoBQAMqAUADKgFAAyoBQAMqAUADKgFAAyYBOAMMARAEAAMqAUADKgFAAyoBQAMq
AUADKgFAAyoBQAMqAUADKgFAAyoBQAMqAUADKgFAAyoBQAMqAUADJgE4AwwBEBQAAdYBvgGtAf8BtQGa
AYQB/wGcARwBAQH/AZQBEAEAAf8BlAEQAQAB/wGlASQBEgH/Ab0BpgGUAf8B1gG+AbUB/yAAAfcB8wHv
Af8B1gG+AbUB/wGtAY4BWAH/AZQBRgEvAf8BjAE+AScB/wGUAVIBQAH/AcYBtgGtAf8UAANcAd8DXAHf
A1wB3wNcAd8DXAHfA1wB3wNcAd8DXAHfA1wB3wNcAd8DXAHfA1wB3wNcAd8DWwHDAyYBOAQAA1wB3wNc
Ad8DXAHfA1wB3wNcAd8DXAHfA1wB3wNcAd8DXAHfA1wB3wNcAd8DXAHfA1wB3wNbAcMDJgE4EAABxgGu
AZwB/wGtAYYBEgH/Aa0BkgEiAf8B1gHPAc4B/wHnAfMB9wH/AecB7wH3Af8BxgHDAb0B/wGlAYYBGgH/
AaUBIAEKAf8BxgGuAZwB/xgAAfcB6wHnAf8BvQGaAYwB/wGcAUoBLwH/AZwBSgEvAf8BnAFOATcB/wGc
AUoBNwH/AZQBQgEvAf8BWAEuARYB/wGtAZoBjAH/EAABpwKmAf8CswGyAf8DugH/A7oB/wO6Af8DugH/
A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/AbECsAH/A1wB3wMqAUAEAAGnAqYB/wKzAbIB/wO6Af8DugH/
A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A7oB/wO6Af8BsQKwAf8DXAHfAyoBQAwAAc4BrgGcAf8BtQGa
AYwB/wHvAesB5wX/AfcB+wL/Ae8B+wH3Af8B7wL3Af8C7wH3Af8B5wHzAv8BvQG2AbUB/wGUARABAAH/
AcYBrgGcAf8UAAG9AZoBjAH/AaUBUgE3Af8BpQFSATcB/wGlAVIBNwH/AZwBTgE3Af8BnAFOATcB/wGc
AU4BNwH/AZwBTgE3Af8BhAEyAR8B/wGtAZYBjAH/DAADkQH/A8QB/wPjAf8D4wH/A+MB/wLhAeAB/wHY
AdQB0gH/AdoB1gHVAf8D4wH/A+MB/wPjAf8D4wH/A7oB/wNcAd8DKgFABAADkQH/A8QB/wPjAf8D4wH/
A+MB/wPjAf8D4wH/A+MB/wPjAf8D4wH/A+MB/wPjAf8DugH/A1wB3wMqAUAIAAHWAboBrQH/AbUBkgEi
Af8D9wn/Ad4BtgGlAf8BpQIAAf8BpQIAAf8B1gG+Aa0B/wH3A/8B7wH3Av8BvQGuAaUB/wGcARQBAAH/
AdYBvgG1Af8MAAHnAccBtQH/Aa0BWgFAAf8BrQFaAUAB/wGtAVoBSAH/Aa0BWgFIAf8BrQFaAUAB/wGl
AVYBQAH/AaUBUgE3Af8BnAFOATcB/wGcAU4BNwH/AVgBLgEWAf8BxgG2Aa0B/wgAA5EB/wPEAf8D4wH/
A+MB/wPjAf8B2QHUAdIB/wGjAYgBIQH/Aa4BlwGMAf8D4wH/A+MB/wPjAf8D4wH/A7oB/wNcAd8DKgFA
BAADkQH/A8QB/wPjAf8D4wH/A+MB/wPjAf8D4wH/A+MB/wPjAf8D4wH/A+MB/wPjAf8DugH/A1wB3wMq
AUAIAAG9AZ4BhAH/Ad4BxwG9Df8B7wHXAcYB/wGtAgAB/wGlAgAB/wH3Ae8B5wX/Ae8B6wHvAf8B5wHz
AfcB/wGcASQBEgH/AbUBkgEiAf8MAAHOAaIBjAH/Aa0BhgFIAf8BtQGKAVAB/wG9AY4BUAH/Ab0BjgFQ
Af8BtQGKAVAB/wG1AYYBSAH/Aa0BWgFAAf8BpQFSATcB/wGcAU4BNwH/AZQBQgEvAf8BlAFSAUAB/wgA
A5EB/wHGAscB/wHmAucB/wHmAucB/wHmAucB/wHYAdIBzwH/AY8BEQEAAf8BngGAARcB/wHmAucB/wHm
AucB/wHmAucB/wHmAucB/wO8Af8DXAHfAyoBQAQAA5EB/wHGAscB/wHmAucB/wHmAucB/wHmAucB/wHm
AucB/wHmAucB/wHmAucB/wHmAucB/wHmAucB/wHmAucB/wHmAucB/wO8Af8DXAHfAyoBQAQAAdYBugGt
Af8BvQGaAYQC/wH7Dv8B7wHjAdYB/wG9AgAB/wG1AQwBAAH/AfcB+wH3Bf8B9wHzAfcB/wHvAfMB9wH/
AcYBvgG9Af8BnAEcAQEB/wwAAcYBmgGEAf8BvQGKAVAC/wH7A/8C9wL/AfMB7wH/AfcB6wHnAf8B9wHj
Ad4B/wH3AeMB1gH/AfcB4wHeAf8B9wHbAc4B/wGcAUYBLwH/AYwBPgEnAf8IAAORAf8BygLLAf8B7ALt
Af8B7ALtAf8B7ALtAf8B3QHYAdUB/wGRARMBAAH/AaABggEZAf8B7ALtAf8B7ALtAf8B7ALtAf8B7ALt
Af8DvwH/A1wB3wMqAUAEAAORAf8BygLLAf8B7ALtAf8B7ALtAf8B7ALtAf8B7ALtAf8B7ALtAf8B7ALt
Af8B7ALtAf8B7ALtAf8B7ALtAf8B7ALtAf8DvwH/A1wB3wMqAUAEAAHOAa4BnAH/Ac4BpgGMEf8B7wHf
AdYB/wG9AgAB/wG1AQwBAAH/AfcC7wn/Ae8B8wH3Af8B1gHbAd4B/wGcARwBAQH/DAABxgGaAYQB/wHG
AZYBWA7/AfsD/wHzAe8B/wH3AesB5wH/AfcB4wHeAf8B9wHfAdYB/wGcAUYBLwH/AZQBRgEvAf8IAAOR
Af8D0AH/AegB3gHaAf8ByAGjAZYB/wHBAZcBiAH/AbsBjwElAf8BnwENAQAB/wGkARUBAAH/AcEBlwGI
Af8BwQGXAYgB/wHOAa8BowH/Ae8B6gHnAf8DwwH/A1wB3wMqAUAEAAORAf8BygLLAf8B4QHYAdQB/wHH
AaEBlAH/AcEBlwGIAf8BwQGXAYgB/wHBAZcBiAH/AcEBlwGIAf8BwQGXAYgB/wHBAZcBiAH/AcwBrQGh
Af8B5gHiAeEB/wO/Af8DXAHfAyoBQAQAAc4BpgGUAf8BzgGqAZQR/wHvAdsBzgH/AcYCAAH/AbUBCAEA
Af8B7wHrAecJ/wP3Af8B3gHjAecB/wGcASABCgH/DAAB3gGyAZwB/wHOAZ4BhAH/AecBtgGcAf8B5wG+
Aa0B/wHnAb4BrQH/AecBtgGcAf8B1gGmAYwB/wHOAZoBhAH/AbUBigFIAf8BpQFWAUAB/wGcAUYBLwH/
Aa0BjgFYAf8IAAORAf8D0wH/AesB3wHZAf8BxAGXAYcB/wG8AYkBHQH/AbgBgwEWAf8BogEMAQAB/wGn
ARIBAAH/AbwBiQEdAf8BvAGJAR0B/wHMAaYBmAH/AfQB7QHqAf8DxgH/A1wB3wMqAUAEAAORAf8BzALN
Af8B4wHXAdIB/wHDAZYBhgH/AbwBiQEdAf8BvAGJAR0B/wG8AYkBHQH/AbwBiQEdAf8BvAGJAR0B/wG8
AYkBHQH/AckBowGWAf8B6QHkAeEB/wPBAf8DXAHfAyoBQAQAAcYBogGMAf8BzgGqAZQR/wHeAcMBrQH/
Ab0BBAEAAf8BvQEcAQAB/wH3Au8G/wH7Av8B9wH7Av8B3gHXAd4B/wGcARwBAQH/DAAB7wHPAb0B/wHO
AZ4BhAH/AecBtgGcAf8B5wG+Aa0B/wHnAb4BrQH/AecBtgGcAf8B1gGmAYwB/wHOAZoBhAH/AbUBigFI
Af8BpQFWAUAB/wGcAU4BNwH/AdYBvgG1Af8IAAORAf8D0wH/AfgB9gH1Af8B8gHqAecB/wHxAegB5AH/
AeIB1AHNAf8BlgEUAQEB/wGlAYMBGAH/AfEB6AHkAf8B8QHoAeQB/wHzAe0B6gH/AfoB+QH3Af8DxgH/
A1wB3wMqAUAEAAORAf8D0gH/AfcB9QHzAf8B8gHqAecB/wHxAegB5AH/AfEB6AHkAf8B8QHoAeQB/wHx
AegB5AH/AfEB6AHkAf8B8QHoAeQB/wHzAewB6QH/AfgB9wH2Af8DxQH/A1wB3wMqAUAEAAHWAbIBnAH/
Ac4BogGMEf8B9wHrAecB/wHvAdsB1gH/AfcB6wHnCv8B+wL/AfcD/wHOAb4BvQH/AaUBJAEKAf8MAAH/
AfMB7wH/Ad4BtgGlAf8B1gGmAYwB/wHnAb4BrQH/Ae8BvgGtAf8B5wGyAZwB/wHWAaYBlAH/AcYBlgGE
Af8BtQGKAVAB/wGlAVYBQAH/Ab0BmgGMAf8B9wLvAf8IAAORAf8D1AH/AvwB+wH/AvwB+wH/AvwB+wH/
AesB5QHhAf8BlQEXAQQB/wGmAYgBHgH/AvwB+wH/AvwB+wH/AvwB+wH/AvwB+wH/A8cB/wNcAd8DKgFA
BAADkQH/A9MB/wL7AfoB/wL7AfoB/wL7AfoB/wL7AfoB/wL7AfoB/wL7AfoB/wL7AfoB/wL7AfoB/wL7
AfoB/wL7AfoB/wPGAf8DXAHfAyoBQAgAAdYBpgGMAf8B7wHnAd4O/wH7Av8B1gGiAYQB/wHWAaIBhAL/
AfsO/wGlASQBCgH/AcYBpgGUAf8QAAH3AesB5wH/Ad4BtgGlAf8B1gGiAYwB/wHWAaoBlAH/Ad4BrgGU
Af8BzgGiAYwB/wG9AZIBWAH/AbUBhgFIAf8BvQGaAYwB/wH3AesB5wH/DAADkQH/A9QB/wP8Af8D/AH/
A/wB/wHtAegB5QH/AaIBggEYAf8BsQGXAYkB/wP8Af8D/AH/A/wB/wP8Af8DxwH/A1wB3wMqAUAEAAOR
Af8D0wH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/
AvsB+gH/A8YB/wNcAd8DKgFACAAB1gG2AZwB/wHnAbIBlA3/AfcB7wHnAf8BxgEUAQAB/wG9AQwBAAH/
AfcC7wn/AcYBrgGcAf8BrQGGARIB/wHWAcMBtQH/FAAB/wHvAecB/wHvAc8BvQH/Ad4BsgGcAf8BzgGe
AYwB/wHGAZoBhAH/AdYBpgGUAf8B1gG6Aa0C/wL3Af8QAAORAf8D1AH/A/wB/wP8Af8D/AH/AfgC9gH/
AeIB2QHVAf8B5wHfAdsB/wP8Af8D/AH/A/wB/wP8Af8DxwH/A1wB3wMqAUAEAAORAf8D0wH/AvsB+gH/
AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/AvsB+gH/A8YB/wNc
Ad8DKgFADAAB3gGyAZQB/wHvAccBrQ7/AvcC/wH3Ae8G/wL3Af8BzgG2AaUB/wGtAYYBEgH/AdYBwwG1
Af9IAAKhAaAB/wPBAf8D1AH/A9QB/wPUAf8D1AH/A9QB/wPUAf8D1AH/A9QB/wPUAf8D1AH/A7sB/wNc
Ad8DKgFABAACoQGgAf8DwAH/A9MB/wPTAf8D0wH/A9MB/wPTAf8D0wH/A9MB/wPTAf8D0wH/A9MB/wO6
Af8DXAHfAyoBQBAAAd4BtgGcAf8B5wG2AZQB/wH3Ad8BxgL/AecB3gL/AesB5wH/AfcB5wHeAf8B5wHP
AcYB/wHOAaoBlAH/Ab0BmgGEAf8B1gHDAbUB/0wAAbwBuwG6Af8CoQGgAf8DkQH/A5EB/wORAf8DkQH/
A5EB/wORAf8DkQH/A5EB/wORAf8DkQH/AacCpgH/A1wB3wMqAUAEAAG8AbsBugH/AqEBoAH/A5EB/wOR
Af8DkQH/A5EB/wORAf8DkQH/A5EB/wORAf8DkQH/A5EB/wGnAqYB/wNcAd8DKgFAFAAB3gG+Aa0B/wHe
AbYBnAH/AecBtgGcAf8B5wGyAZQB/wHeAaoBjAH/AdYBrgGcAf8B1gG+AbUB//8A7QABDQGPARIB/wEN
AY8BEgH/AQ0BjwESAf8BDQGPARIB/xgAA9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8DWwHE
JAABEwEnAbcB/wIAAaYB/wFDAVIBxAH/IAADXwHoARMBJwG3Af8MAAH/AUMBMQL/AUMBMQH/SAABDQGP
ARIB/wENAY8BEgH/AQ0BjwESAf8BDQGPARIB/xgAA9oB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wPa
Af8DZQH0AwEBAgMAAQEHAAEBFgABpgH/AgABpgH/AgABpgH/A18B6BgAAUMBUgHEAf8BAwEZAbIB/wMN
AREMAAH/AUMBMQH/CAAB/wFDATEB/0AAAQ0BjwESAf8BDQGPARIB/wENAY8BEgH/AQ0BjwESAf8YAAPa
Af8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8D2gH/A1EBnAQAAwEBAgMEAQUDAAEBFAABQwFSAcQB/wIA
AaYB/wIAAaYB/wIAAaYB/wNSAakMAAMQARYBNQFFAb4B/wEAAQwBrAH/AzEBTRgAAf8BQwExAv8BQwEx
Av8BQwExAf88AAENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/GAAD2gH/AxoB/wMaAf8DGgH/
AxoB/wMaAf8DGgH/A9oB/wNgAesDXQHSA1kBwgNbAcYDVAGsAxsBJhQAA10BygIAAaYB/wIAAaYB/wEA
AQwBrAH/AzEBTQQAAw0BEQETAScBtwH/AgABpgH/A1IBqRgAAf8BQwExAv8BQwExAv8BQwExAv8BQwEx
Av8BQwExAf84AAENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/GAAD2gH/A9oB/wPaAf8D2gH/
A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8DQwF3AwABARgAA1YBqwIAAaYB/wIAAaYB/wEA
AQwBrAH/Az4BawETAScBtwH/AgABpgH/A18B6AMDAQQcAAH/AUMBMQL/AUMBMQL/AUMBMQL/AUMBMQL/
AUMBMQH/IAABDQGPARIB/wENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/AQ0BjwESAf8BDQGP
ARIB/wENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/
BAAD2gH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wPaAf8DNQFXAwQBBQMP
ARQDAAEBFAADPgFrAQABDAGsAf8CAAGmAf8CAAGmAf8CAAGmAf8BQwFSAcQB/wMDBAQBBSAAAf8BQwEx
Av8BQwExAv8BQwExAv8BQwExAv8BQwExAf8cAAENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/
AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/AQ0BjwESAf8BDQGP
ARIB/wENAY8BEgH/AQ0BjwESAf8EAAPaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMa
Af8DGgH/A9oB/wMKAQ4kAANcAckCAAGmAf8CAAGmAf8BAAEMAawB/wMNAREsAAH/AUMBMQL/AUMBMQL/
AUMBMQL/AUMBMQL/AUMBMQH/GAABDQGPARIB/wENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/
AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/AQ0BjwESAf8BDQGP
ARIB/wENAY8BEgH/BAAD2gH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wPa
Af8DLwFKAwUBBwMgAS4DLAFDFAADUgGpAgABpgH/AgABpgH/AgABpgH/AgABpgH/A1wByRAAAwsBDxwA
Af8BQwExAv8BQwExAv8BQwExAv8BQwExAv8BQwExAf8UAAENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wEN
AY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/AQ0BjwES
Af8BDQGPARIB/wENAY8BEgH/AQ0BjwESAf8EAAPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/
A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8QAANcAckCAAGmAf8CAAGmAf8BAAEMAawB/wM+
AWsBEwEnAbcB/wIAAaYB/wNKAYwwAAH/AUMBMQL/AUMBMQL/AUMBMQH/LAABDQGPARIB/wENAY8BEgH/
AQ0BjwESAf8BDQGPARIB/xgAA9oB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMa
Af8DGgH/AxoB/wMaAf8DGgH/A9oB/wwAAUMBUgHEAf8CAAGmAf8CAAGmAf8CAAGmAf8DUgGpBAADDQER
ATUBRQG+Af8BAAEMAawB/wMxAU0wAAH/AUMBMQH/CAAB/wFDATEC/wFDATEB/yAAAQ0BjwESAf8BDQGP
ARIB/wENAY8BEgH/AQ0BjwESAf8YAAPaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMa
Af8DGgH/AxoB/wMaAf8DGgH/AxoB/wPaAf8OAAGmAf8CAAGmAf8CAAGmAf8DXwHoEAABQwFSAcQB/wED
ARkBsgH/Aw0BETQAAf8BQwExAv8BQwExAv8BQwExAf8gAAENAY8BEgH/AQ0BjwESAf8BDQGPARIB/wEN
AY8BEgH/GAAD2gH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/
AxoB/wMaAf8D2gH/DAABEwEnAbcB/wIAAaYB/wFDAVIBxAH/GAADXwHoARMBJwG3Af80AAH/AUMBMQL/
AUMBMQH/JAABDQGPARIB/wENAY8BEgH/AQ0BjwESAf8BDQGPARIB/xgAA9oB/wPaAf8D2gH/A9oB/wPa
Af8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wcAAQGQAAENAY8BEgH/
AQ0BjwESAf8BDQGPARIB/wENAY8BEgH/+AADAQECnAADPQFpAz4BagNBAXIDNwFaAzcBWwM3AVsDOgFi
A0oBiwNLAY4kAAP9Af8D9wH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP3Af8D/QH/HAADigH/
AzoB/wMiAf8DIgH/AyIB/wMiAf8DOgH/A4oB/xAAA/UB/wP1Af8D9QH/A/UB/wP1Af8D9QH/A/UB/wP1
Af8D9QH/A/UB/wP1Af8D9QH/A/UB/wP1Af8D9QH/BAADPQFpAxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/
AxoB/wNKAYkkAAP3Af8DhgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wOGAf8D9wH/FAADuQH/
AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wO5Af8IAAP1Af8DGQH/AxkB/wMZ
Af8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/A/UB/wQAAzsBZQMaAf8B+QLq
Af8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8DGgH/Az4BawM3AVsDNwFbAzcBWwM3AVsUAAP2Af8DGgH/
AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DGgH/
A/YB/xAABP8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8IAAP1
Af8DGQH/Ae4C7wH/Ae4C7wH/Ae4C7wH/AxkB/wHuAu8B/wHuAu8B/wHuAu8B/wMZAf8B7gLvAf8B7gLv
Af8B7gLvAf8DGQH/A/UB/wQAAy4BSAMaAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8DGgH/
AxoB/wMaAf8DGgH/AxoB/wM3AVsUAAP2Af8DGgH/AfEB7wHwAf8DGgH/AfEB7wHwAf8DGgH/AfEB7wHw
Af8DGgH/AfEB7wHwAf8DGgH/A/YB/xAABP8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMi
Af8DIgH/AyIB/wMiAf8IAAP1Af8DGQH/Ae4C7wH/Ae4C7wH/Ae4C7wH/AxkB/wHuAu8B/wHuAu8B/wHu
Au8B/wMZAf8B7gLvAf8B7gLvAf8B7gLvAf8DGQH/A/UB/wQAAywBQwMaAf8B+QLqAf8B+QLqAf8B+QLq
Af8B+QLqAf8B+QLqAf8DGgH/AzcBWwM3AVsDNwFbAxoB/wM3AVsUAAP2Af8DGgH/AfEB7wHwAf8B8QHv
AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wMaAf8B8QHvAfAB/wMaAf8D9gH/EAAE/wMiAf8DIgH/
AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wgAA/UB/wMZAf8DGQH/AxkB/wMZ
Af8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8D9QH/BAADKwFCAxoB/wMaAf8DGgH/
AxoB/wMaAf8DGgH/AxoB/wM3AVsEAAM3AVsDGgH/AzcBWxQAA/YB/wMaAf8B8QHvAfAB/wMaAf8B8QHv
AfAB/wMaAf8B8QHvAfAB/wMaAf8B8QHvAfAB/wMaAf8D9gH/EAAE/wMiAf8DIgH/AyIB/wMiAf8DIgH/
AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wgAA/UB/wMZAf8B7gLvAf8B7gLvAf8B7gLvAf8DGQH/
Ae4C7wH/Ae4C7wH/Ae4C7wH/AxkB/wHuAu8B/wHuAu8B/wHuAu8B/wMZAf8D9QH/BAADKAE8AxoB/wMa
Af8DGgH/AxoB/wMaAf8DGgH/AxoB/wM3AVsEAAM3AVsDGgH/A0ABcRQAA/YB/wMaAf8B8QHvAfAB/wHx
Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wMaAf8D9gH/EAAE/wMi
Af8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wgAA/UB/wMZAf8B7gLv
Af8B7gLvAf8B7gLvAf8DGQH/Ae4C7wH/Ae4C7wH/Ae4C7wH/AxkB/wHuAu8B/wHuAu8B/wHuAu8B/wMZ
Af8D9QH/BAADKgFBAyoBQQMoAT0DJQE3AycBOwMuAUgDNgFZAzcBWwM3AVsEAAM3AVsDGgH/A0oBjRQA
A/YB/wMaAf8B8QHvAfAB/wMaAf8B8QHvAfAB/wMaAf8B8QHvAfAB/wMaAf8B8QHvAfAB/wMaAf8D9gH/
EAAE/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wgAA/UB/wMZ
Af8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8D9QH/HAADNQFW
AzcBWwM3AVsDNwFbAzcBWwMaAf8DSwGOA0oBjANHAYEMAAP2Af8DGgH/AfEB7wHwAf8B8QHvAfAB/wHx
Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DGgH/A/YB/xAABP8DIgH/AyIB/wMi
Af8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8DIgH/AyIB/wMiAf8IAAP1Af8DGQH/Ae4C7wH/Ae4C7wH/
Ae4C7wH/AxkB/wHuAu8B/wHuAu8B/wHuAu8B/wMZAf8B7gLvAf8B7gLvAf8B7gLvAf8DGQH/A/UB/xwA
AykBPgMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DPQFoDAAD9gH/AxoB/wHxAe8B8AH/AxoB/wHx
Ae8B8AH/AxoB/wHxAe8B8AH/AxoB/wHxAe8B8AH/AxoB/wP2Af8QAAT/AyIB/wMtAf8DqQH/AuEB4gH/
A/gB/wP4Af8D+AH/A/gB/wLhAeIB/wOpAf8DLQH/AyIB/wgAA/UB/wMZAf8B7gLvAf8B7gLvAf8B7gLv
Af8DGQH/Ae4C7wH/Ae4C7wH/Ae4C7wH/AxkB/wHuAu8B/wHuAu8B/wHuAu8B/wMZAf8D9QH/HAADJQE3
AxoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wH5AuoB/wMaAf8DOwFjDAAD9gH/AxoB/wHxAe8B8AH/
AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AxoB/wP2Af8QAAPz
Af8DLQH/A+0B/wP4Af8D+AH/A/gB/wP4Af8D+AH/A/gB/wP4Af8D+AH/A+0B/wMiAf8IAAP1Af8DGQH/
AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/A/UB/xwAAyUBNwMa
Af8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8B+QLqAf8DGgH/Ay8BSgwAA/YB/wMaAf8B8QHvAfAB/wMa
Af8DGgH/AxoB/wMaAf8DGgH/AfEB7wHwAf8DGgH/A/YB/xQAAy0B/wPtAf8D+AH/A/gB/wP4Af8D+AH/
A/gB/wP4Af8D+AH/A/gB/wPtAf8DIgH/CAAD9QH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZ
Af8DGQH/AxkB/wMZAf8DGQH/AxkB/wP1Af8cAAMlATcDGgH/AfkC6gH/AfkC6gH/AfkC6gH/AfkC6gH/
AfkC6gH/AxoB/wMrAUIMAAP2Af8DGgH/AfEB7wHwAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wHxAe8B8AH/
AxoB/wP2Af8UAAO5Af8DLQH/A6kB/wLhAeIB/wP4Af8D+AH/A/gB/wP4Af8C4QHiAf8DqQH/Ay0B/wO5
Af8IAAP1Af8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/AxkB/wMZAf8DGQH/
A/UB/xwAAyoBQAMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DKwFCDAAD9gH/AxoB/wHxAe8B8AH/
AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AxoB/wP2Af8YAAPo
Af8DigH/AzoB/wMiAf8DIgH/AyIB/wMiAf8DOgH/A4oB/wPoAf8MAAP1Af8D9QH/A/UB/wP1Af8D9QH/
A/UB/wP1Af8D9QH/A/UB/wP1Af8D9QH/A/UB/wP1Af8D9QH/A/UB/xwAAysBQgMaAf8DGgH/AxoB/wMa
Af8DGgH/AxoB/wMaAf8DMwFTDAAD9wH/A4YB/wMaAf8DGgH/AxoB/wMaAf8DGgH/AxoB/wMaAf8DhgH/
A/cB/6QAAysBQgMuAUcDPgFqA0cBgQNKAYkDNwFbAzcBWwM3AVoDNwFaDAAD/QH/A/cB/wP2Af8D9gH/
A/YB/wP2Af8D9gH/A/YB/wP2Af8D9wH/A/0B/wwAAUIBTQE+BwABPgMAASgDAAFAAwABcAMAAQEBAAEB
BQABgAEDFgAD/wEAAQ8D/wHwAQ8DAAEfAf8BgAHwAQ8DAAEPAf8BgAHwAQ8CAAGAAQ8BwAEAAfABDwIA
AcABDwHAAQAB8AEPAgABgAEPAcABAAHwAQ8CAAGAAQcBxwGAAfABDwIAAcABBwHHAYAB4AEHAgAB4AED
AQEBgAHAAQMCAAHwAgEBgAHAAQMCAAHwAwABwAEDAgAB8AMAAcABAwIAAfADAAHAAQMCAAHwAQABAQGA
AeABBwIAAfABAAEBAYAB4AEHAgAB+AEBAv8B8AEPAgAG/wEPAf8B/AE/Av8B5wH/AQABHwH8AT8B/AF4
AfMB/wIAAfwBPwH+AXgB+wEnAYABAAH8AT8BPgFwAfkBKwGAAQAB/AE/AR4BAQH5Ac8BgAEAAYABAQGM
AQMB+QHPAYABAAGAAQEByAEzAfkBzwGAAQABgAEBAeEBAwH8AZMBgAEAAYABAQHjAYcB/AH/AYABAAH8
AT8BAAEHAfgBfwGAAQAB/AE/AQABBwH+Af8BgAEAAfwBPwECAQ8B/gH/AYABAAH8AT8B4wH/Af4BPwGA
AQAB/AE/A/8BPwGAAQAB/wF/BP8BgAEACP8CAAGAAXkE/wIAAYABcQHHAfkB8AEfAgABgAFjAcMB8QHg
AQ8CAAGAAQcBwQHDAeABBwIAAYABDwHgAYcBwAEDAgABgAEBAfABBwHAAQMCAAGAAQEB+AEHAcABAwIA
AYABAQH8AR8BwAEDAgABgAEBAfgBHgHAAQMCAAH8AQEB8AEPAcABAwIAAf4BAQHgAYcBwAEDAgAB/gEB
AeEB4wHgAQcCAAH+AQMB4wHzAfABDwIAAf4BBwG/A/8CAAj/AwABAwEAAR8FAAEBAQABHwcAAQcHAAEH
BwABBwGAAQEGAAGAAQEGAAHAAQMCAAGAAQABgAEAAcABAwIAAYABAAGAAQAB4AEHAgABgAEAAYABAAHw
AQcCAAGAAQABgAEAAfABDwIAAYABAAGAAQAB+AEfAgABwAEAAYABAAH4AR8CAAHAAQAB8AEAAfwBPwIA
AeABAQHwAQAB/AE/AgAB8AEDAfABAAr/AQABAQEAAQEB8AEPAfABHwEAAQEBAAEBAeABBwHgAQ8BAAEB
AQABAQHAAQMB4AEHAQABAQEAAQEBgAEBAcABAwEAAQEBAAEBAYABAQHAAQMBAAEBAQABAQEAAQEBwAED
AQABAQEAAQEBAAEBAcABAwEAAQEBAAEBAQABAQHAAQMBAAEBAQABAQEAAQEBwAEDAQABAQEAAQEBAAEB
AcABAwEAAQEBAAEBAYABAQHgAQcBAAEBAQABAQGAAQEB8AEPAQABAQEAAQEBwAEDAv8BAAEBAQABAQHg
AQcC/wEAAQEBAAEBAfABHw7/AfwBPwEAAX8BxwH5Ac8B/wH8AT8BAAEXAcMB8QHbAf8B/AE/AQABRwHB
AcMB8QH/AfwBPwEAAQMB4AGHAeAB/wH8AT8BAAEDAfABBwHwAX8BgAEBAgAB+AEHAfgBPwGAAQEBAAEH
AfwBHwH8AR8BgAEBAgAB+AEeAf4BDwGAAQECAAHwAQ8B/wEfAfwBPwIAAeABhwH/AbMB/AE/AgAB4QHj
Af8B4wH8AT8CAAHjAfMB/wHnAfwBPwIAAb8D/wH8AT8H/wF/BP8BAAF/AcABBwHwAQ8BAAEBAQABfwHA
AQcBwAEDAQABAQEAAQcBwAEHAYABAwEAAQEBAAEHAcABBwGAAQMBAAEBAQABBwHAAQcBgAEDAQABAQEA
AUcBwAEHAYABAwEAAQEBAAFHAcABBwGAAQMBAAEBAQABRwHAAQcBgAEDAQABAQH8AQEBwAEHAYABAwEA
AQEB/AEBAcABBwGAAQMBAAEBAfwBAQHAAQcBgAEDAQABAQH8AQEBwAEHAcABAwEAAQEB/AEBAcABBwHA
AQMBAAEBAfwBAQHAAQcB4AEHAQABAQH8AQEBwAEHBP8B/AEBAcABBws=
</value>
</data>
</root>

View File

@ -0,0 +1,161 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace AlmToolkit
{
public class WindowTitle
{
//static void Main(string[] args)
//{
// var p = Process.GetProcessById(3484);
// var h = p.MainWindowHandle;
// string s = GetWindowTextTimeout(h, 100 /*msec*/);
//}
#region PInvoke calls to get the window title of a minimize window
delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam);
[DllImport("user32.dll")]
static extern bool IsWindowVisible(IntPtr hWnd);
[DllImport("user32.dll")]
static extern bool EnumThreadWindows(int dwThreadId, EnumThreadDelegate lpfn,
IntPtr lParam);
[DllImport("User32.dll", SetLastError = true)]
public unsafe static extern int SendMessageTimeout(
IntPtr hWnd,
uint uMsg,
uint wParam,
StringBuilder lParam,
uint fuFlags,
uint uTimeout,
void* lpdwResult);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam,
StringBuilder lParam);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern int GetWindowTextLength(IntPtr hWnd);
[DllImport("User32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern long GetWindowText(IntPtr hwnd, StringBuilder lpString, long cch);
const int WM_GETTEXT = 0x000D;
const int WM_GETTEXTLENGTH = 0x000E;
#endregion
private static IEnumerable<IntPtr> EnumerateProcessWindowHandles(int processId)
{
var handles = new List<IntPtr>();
foreach (ProcessThread thread in Process.GetProcessById(processId).Threads)
EnumThreadWindows(thread.Id,
(hWnd, lParam) => { handles.Add(hWnd); return true; }, IntPtr.Zero);
return handles;
}
public static string GetWindowTitle(int procId)
{
foreach (var handle in EnumerateProcessWindowHandles(procId))
{
StringBuilder message = new StringBuilder(1000);
if (IsWindowVisible(handle))
{
//SendMessage(handle, WM_GETTEXT, message.Capacity, message);
//if (message.Length > 0) return message.ToString();
return GetCaptionOfWindow(handle);
}
}
return "";
}
/* ====================================== */
public static string GetWindowTitleTimeout(int procId, uint timeout)
{
string title = "";
foreach (var handle in EnumerateProcessWindowHandles(procId))
{
try
{
// if there is an issue with the window handle we just
// ignore it and skip to the next one in the collection
title = GetWindowTextTimeout(handle, timeout);
}
catch
{
title = "";
}
if (title.Length > 0) return title;
}
return title;
}
private static unsafe string GetWindowTextTimeout(IntPtr hWnd, uint timeout)
{
int length;
if (SendMessageTimeout(hWnd, WM_GETTEXTLENGTH, 0, null, 2, timeout, &length) == 0)
{
return null;
}
if (length == 0)
{
return null;
}
StringBuilder sb = new StringBuilder(length + 1); // leave room for null-terminator
if (SendMessageTimeout(hWnd, WM_GETTEXT, (uint)sb.Capacity, sb, 2, timeout, null) == 0)
{
return null;
}
return sb.ToString();
}
private static string GetCaptionOfWindow(IntPtr hwnd)
{
string caption = "";
StringBuilder windowText = null;
try
{
int max_length = GetWindowTextLength(hwnd);
windowText = new StringBuilder("", max_length + 5);
GetWindowText(hwnd, windowText, max_length + 2);
if (!String.IsNullOrEmpty(windowText.ToString()) && !String.IsNullOrWhiteSpace(windowText.ToString()))
caption = windowText.ToString();
}
catch (Exception ex)
{
caption = ex.Message;
}
finally
{
windowText = null;
}
return caption;
}
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel element will disable file and registry virtualization.
Remove this element if your application requires this virtualization for backwards
compatibility.
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of the Windows versions that this application has been tested on and is
is designed to work with. Uncomment the appropriate elements and Windows will
automatically selected the most compatible environment. -->
<!-- Windows Vista -->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
<!-- Windows 7 -->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
<!-- Windows 8 -->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
<!-- Windows 8.1 -->
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
</application>
</compatibility>
<!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need
to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should
also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->
<!--
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
-->
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!--
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
-->
</assembly>

View File

@ -0,0 +1,62 @@
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"project": {
"name": "gridcontrol"
},
"apps": [
{
"root": "src",
"outDir": "dist",
"assets": [
"assets",
"favicon.ico"
],
"index": "index.html",
"main": "main.ts",
"polyfills": "polyfills.ts",
"test": "test.ts",
"tsconfig": "tsconfig.app.json",
"testTsconfig": "tsconfig.spec.json",
"prefix": "app",
"styles": [
"styles.css",
"../node_modules/monaco-editor/min/vs/editor/editor.main.css"
],
"scripts": [
],
"environmentSource": "environments/environment.ts",
"environments": {
"dev": "environments/environment.ts",
"prod": "environments/environment.prod.ts"
}
}
],
"e2e": {
"protractor": {
"config": "./protractor.conf.js"
}
},
"lint": [
{
"project": "src/tsconfig.app.json",
"exclude": "**/node_modules/**"
},
{
"project": "src/tsconfig.spec.json",
"exclude": "**/node_modules/**"
},
{
"project": "e2e/tsconfig.e2e.json",
"exclude": "**/node_modules/**"
}
],
"test": {
"karma": {
"config": "./karma.conf.js"
}
},
"defaults": {
"styleExt": "css",
"component": { }
}
}

View File

@ -0,0 +1,13 @@
# Editor configuration, see http://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
max_line_length = off
trim_trailing_whitespace = false

View File

@ -0,0 +1 @@
webpackJsonp([0],{Aj3d:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"conf",function(){return i}),n.d(t,"language",function(){return _});var i={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"[",close:"]"},{open:"{",close:"}"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*#pragma\\s+region\\b"),end:new RegExp("^\\s*#pragma\\s+endregion\\b")}}},_={defaultToken:"",tokenPostfix:".cpp",brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"},{token:"delimiter.angle",open:"<",close:">"}],keywords:["abstract","amp","array","auto","bool","break","case","catch","char","class","const","constexpr","const_cast","continue","cpu","decltype","default","delegate","delete","do","double","dynamic_cast","each","else","enum","event","explicit","export","extern","false","final","finally","float","for","friend","gcnew","generic","goto","if","in","initonly","inline","int","interface","interior_ptr","internal","literal","long","mutable","namespace","new","noexcept","nullptr","__nullptr","operator","override","partial","pascal","pin_ptr","private","property","protected","public","ref","register","reinterpret_cast","restrict","return","safe_cast","sealed","short","signed","sizeof","static","static_assert","static_cast","struct","switch","template","this","thread_local","throw","tile_static","true","try","typedef","typeid","typename","union","unsigned","using","virtual","void","volatile","wchar_t","where","while","_asm","_based","_cdecl","_declspec","_fastcall","_if_exists","_if_not_exists","_inline","_multiple_inheritance","_pascal","_single_inheritance","_stdcall","_virtual_inheritance","_w64","__abstract","__alignof","__asm","__assume","__based","__box","__builtin_alignof","__cdecl","__clrcall","__declspec","__delegate","__event","__except","__fastcall","__finally","__forceinline","__gc","__hook","__identifier","__if_exists","__if_not_exists","__inline","__int128","__int16","__int32","__int64","__int8","__interface","__leave","__m128","__m128d","__m128i","__m256","__m256d","__m256i","__m64","__multiple_inheritance","__newslot","__nogc","__noop","__nounwind","__novtordisp","__pascal","__pin","__pragma","__property","__ptr32","__ptr64","__raise","__restrict","__resume","__sealed","__single_inheritance","__stdcall","__super","__thiscall","__try","__try_cast","__typeof","__unaligned","__unhook","__uuidof","__value","__virtual_inheritance","__w64","__wchar_t"],operators:["=",">","<","!","~","?",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%","<<",">>",">>>","+=","-=","*=","/=","&=","|=","^=","%=","<<=",">>=",">>>="],symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,integersuffix:/(ll|LL|u|U|l|L)?(ll|LL|u|U|l|L)?/,floatsuffix:/[fFlL]?/,encoding:/u|u8|U|L/,tokenizer:{root:[[/@encoding?R\"(?:([^ ()\\\t]*))\(/,{token:"string.raw.begin",next:"@raw.$1"}],[/[a-zA-Z_]\w*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],{include:"@whitespace"},[/\[\[.*\]\]/,"annotation"],[/^\s*#\s*\w+/,"keyword"],[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\d+[eE]([\-+]?\d+)?(@floatsuffix)/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?(@floatsuffix)/,"number.float"],[/0[xX][0-9a-fA-F']*[0-9a-fA-F](@integersuffix)/,"number.hex"],[/0[0-7']*[0-7](@integersuffix)/,"number.octal"],[/0[bB][0-1']*[0-1](@integersuffix)/,"number.binary"],[/\d[\d']*\d(@integersuffix)/,"number"],[/\d(@integersuffix)/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@doccomment"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],doccomment:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],raw:[[/(.*)(\))(?:([^ ()\\\t]*))(\")/,{cases:{"$3==$S2":["string.raw","string.raw.end","string.raw.end",{token:"string.raw.end",next:"@pop"}],"@default":["string.raw","string.raw","string.raw","string.raw"]}}],[/.*/,"string.raw"]]}}}});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
webpackJsonp([13],{vFHx:function(e,n,o){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),o.d(n,"conf",function(){return t}),o.d(n,"language",function(){return r});var t={comments:{lineComment:"'"},brackets:[["(",")"],["[","]"],["If","EndIf"],["While","EndWhile"],["For","EndFor"],["Sub","EndSub"]],autoClosingPairs:[{open:'"',close:'"',notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]}]},r={defaultToken:"",tokenPostfix:".sb",ignoreCase:!0,brackets:[{token:"delimiter.array",open:"[",close:"]"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"keyword.tag-if",open:"If",close:"EndIf"},{token:"keyword.tag-while",open:"While",close:"EndWhile"},{token:"keyword.tag-for",open:"For",close:"EndFor"},{token:"keyword.tag-sub",open:"Sub",close:"EndSub"}],keywords:["Else","ElseIf","EndFor","EndIf","EndSub","EndWhile","For","Goto","If","Step","Sub","Then","To","While"],tagwords:["If","Sub","While","For"],operators:[">","<","<>","<=",">=","And","Or","+","-","*","/","="],identifier:/[a-zA-Z_][\w]*/,symbols:/[=><:+\-*\/%\.,]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[{include:"@whitespace"},[/(@identifier)(?=[.])/,"type"],[/@identifier/,{cases:{"@keywords":{token:"keyword.$0"},"@operators":"operator","@default":"variable.name"}}],[/([.])(@identifier)/,{cases:{$2:["delimiter","type.member"],"@default":""}}],[/\d*\.\d+/,"number.float"],[/\d+/,"number"],[/[()\[\]]/,"@brackets"],[/@symbols/,{cases:{"@operators":"operator","@default":"delimiter"}}],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"]],whitespace:[[/[ \t\r\n]+/,""],[/(\').*$/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"C?/,"string","@pop"]]}}}});

View File

@ -0,0 +1 @@
webpackJsonp([14],{QEBt:function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),o.d(t,"conf",function(){return n}),o.d(t,"language",function(){return r});var n={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"[",close:"]"},{open:"{",close:"}"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*#pragma\\s+region\\b"),end:new RegExp("^\\s*#pragma\\s+endregion\\b")}}},r={tokenPostfix:".rust",defaultToken:"invalid",keywords:["as","box","break","const","continue","crate","else","enum","extern","false","fn","for","if","impl","in","let","loop","match","mod","move","mut","pub","ref","return","self","static","struct","super","trait","true","type","unsafe","use","where","while","catch","default","union","static","abstract","alignof","become","do","final","macro","offsetof","override","priv","proc","pure","sizeof","typeof","unsized","virtual","yield"],typeKeywords:["Self","m32","m64","m128","f80","f16","f128","int","uint","float","char","bool","u8","u16","u32","u64","f32","f64","i8","i16","i32","i64","str","Option","Either","c_float","c_double","c_void","FILE","fpos_t","DIR","dirent","c_char","c_schar","c_uchar","c_short","c_ushort","c_int","c_uint","c_long","c_ulong","size_t","ptrdiff_t","clock_t","time_t","c_longlong","c_ulonglong","intptr_t","uintptr_t","off_t","dev_t","ino_t","pid_t","mode_t","ssize_t"],constants:["true","false","Some","None","Left","Right","Ok","Err"],supportConstants:["EXIT_FAILURE","EXIT_SUCCESS","RAND_MAX","EOF","SEEK_SET","SEEK_CUR","SEEK_END","_IOFBF","_IONBF","_IOLBF","BUFSIZ","FOPEN_MAX","FILENAME_MAX","L_tmpnam","TMP_MAX","O_RDONLY","O_WRONLY","O_RDWR","O_APPEND","O_CREAT","O_EXCL","O_TRUNC","S_IFIFO","S_IFCHR","S_IFBLK","S_IFDIR","S_IFREG","S_IFMT","S_IEXEC","S_IWRITE","S_IREAD","S_IRWXU","S_IXUSR","S_IWUSR","S_IRUSR","F_OK","R_OK","W_OK","X_OK","STDIN_FILENO","STDOUT_FILENO","STDERR_FILENO"],supportMacros:["format!","print!","println!","panic!","format_args!","unreachable!","write!","writeln!"],operators:["!","!=","%","%=","&","&=","&&","*","*=","+","+=","-","-=","->",".","..","...","/","/=",":",";","<<","<<=","<","<=","=","==","=>",">",">=",">>",">>=","@","^","^=","|","|=","||","_","?","#"],escapes:/\\([nrt0\"''\\]|x\h{2}|u\{\h{1,6}\})/,delimiters:/[,]/,symbols:/[\#\!\%\&\*\+\-\.\/\:\;\<\=\>\@\^\|_\?]+/,intSuffixes:/[iu](8|16|32|64|128|size)/,floatSuffixes:/f(32|64)/,tokenizer:{root:[[/[a-zA-Z][a-zA-Z0-9_]*!?|_[a-zA-Z0-9_]+/,{cases:{"@typeKeywords":"keyword.type","@keywords":"keyword","@supportConstants":"keyword","@supportMacros":"keyword","@constants":"keyword","@default":"identifier"}}],[/\$/,"identifier"],[/'[a-zA-Z_][a-zA-Z0-9_]*(?=[^\'])/,"identifier"],[/'\S'/,"string.byteliteral"],[/"/,{token:"string.quote",bracket:"@open",next:"@string"}],{include:"@numbers"},{include:"@whitespace"},[/@delimiters/,{cases:{"@keywords":"keyword","@default":"delimiter"}}],[/[{}()\[\]<>]/,"@brackets"],[/@symbols/,{cases:{"@operators":"operator","@default":""}}]],whitespace:[[/[ \t\r\n]+/,"white"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\/\*/,"comment","@push"],["\\*/","comment","@pop"],[/[\/*]/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,{token:"string.quote",bracket:"@close",next:"@pop"}]],numbers:[[/(0o[0-7_]+)(@intSuffixes)?/,{token:"number"}],[/(0b[0-1_]+)(@intSuffixes)?/,{token:"number"}],[/[\d][\d_]*(\.[\d][\d_]*)?[eE][+-][\d_]+(@floatSuffixes)?/,{token:"number"}],[/\b(\d\.?[\d_]*)(@floatSuffixes)?\b/,{token:"number"}],[/(0x[\da-fA-F]+)_?(@intSuffixes)?/,{token:"number"}],[/[\d][\d_]*(@intSuffixes?)?/,{token:"number"}]]}}}});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
webpackJsonp([17],{"TP/O":function(E,S,e){"use strict";Object.defineProperty(S,"__esModule",{value:!0}),e.d(S,"conf",function(){return T}),e.d(S,"language",function(){return R});var T={brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},R={defaultToken:"",tokenPostfix:".redis",ignoreCase:!0,brackets:[{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"}],keywords:["APPEND","AUTH","BGREWRITEAOF","BGSAVE","BITCOUNT","BITFIELD","BITOP","BITPOS","BLPOP","BRPOP","BRPOPLPUSH","CLIENT","KILL","LIST","GETNAME","PAUSE","REPLY","SETNAME","CLUSTER","ADDSLOTS","COUNT-FAILURE-REPORTS","COUNTKEYSINSLOT","DELSLOTS","FAILOVER","FORGET","GETKEYSINSLOT","INFO","KEYSLOT","MEET","NODES","REPLICATE","RESET","SAVECONFIG","SET-CONFIG-EPOCH","SETSLOT","SLAVES","SLOTS","COMMAND","COUNT","GETKEYS","CONFIG","GET","REWRITE","SET","RESETSTAT","DBSIZE","DEBUG","OBJECT","SEGFAULT","DECR","DECRBY","DEL","DISCARD","DUMP","ECHO","EVAL","EVALSHA","EXEC","EXISTS","EXPIRE","EXPIREAT","FLUSHALL","FLUSHDB","GEOADD","GEOHASH","GEOPOS","GEODIST","GEORADIUS","GEORADIUSBYMEMBER","GETBIT","GETRANGE","GETSET","HDEL","HEXISTS","HGET","HGETALL","HINCRBY","HINCRBYFLOAT","HKEYS","HLEN","HMGET","HMSET","HSET","HSETNX","HSTRLEN","HVALS","INCR","INCRBY","INCRBYFLOAT","KEYS","LASTSAVE","LINDEX","LINSERT","LLEN","LPOP","LPUSH","LPUSHX","LRANGE","LREM","LSET","LTRIM","MGET","MIGRATE","MONITOR","MOVE","MSET","MSETNX","MULTI","PERSIST","PEXPIRE","PEXPIREAT","PFADD","PFCOUNT","PFMERGE","PING","PSETEX","PSUBSCRIBE","PUBSUB","PTTL","PUBLISH","PUNSUBSCRIBE","QUIT","RANDOMKEY","READONLY","READWRITE","RENAME","RENAMENX","RESTORE","ROLE","RPOP","RPOPLPUSH","RPUSH","RPUSHX","SADD","SAVE","SCARD","SCRIPT","FLUSH","LOAD","SDIFF","SDIFFSTORE","SELECT","SETBIT","SETEX","SETNX","SETRANGE","SHUTDOWN","SINTER","SINTERSTORE","SISMEMBER","SLAVEOF","SLOWLOG","SMEMBERS","SMOVE","SORT","SPOP","SRANDMEMBER","SREM","STRLEN","SUBSCRIBE","SUNION","SUNIONSTORE","SWAPDB","SYNC","TIME","TOUCH","TTL","TYPE","UNSUBSCRIBE","UNLINK","UNWATCH","WAIT","WATCH","ZADD","ZCARD","ZCOUNT","ZINCRBY","ZINTERSTORE","ZLEXCOUNT","ZRANGE","ZRANGEBYLEX","ZREVRANGEBYLEX","ZRANGEBYSCORE","ZRANK","ZREM","ZREMRANGEBYLEX","ZREMRANGEBYRANK","ZREMRANGEBYSCORE","ZREVRANGE","ZREVRANGEBYSCORE","ZREVRANK","ZSCORE","ZUNIONSTORE","SCAN","SSCAN","HSCAN","ZSCAN"],operators:[],builtinFunctions:[],builtinVariables:[],pseudoColumns:[],tokenizer:{root:[{include:"@whitespace"},{include:"@pseudoColumns"},{include:"@numbers"},{include:"@strings"},{include:"@scopes"},[/[;,.]/,"delimiter"],[/[()]/,"@brackets"],[/[\w@#$]+/,{cases:{"@keywords":"keyword","@operators":"operator","@builtinVariables":"predefined","@builtinFunctions":"predefined","@default":"identifier"}}],[/[<>=!%&+\-*/|~^]/,"operator"]],whitespace:[[/\s+/,"white"]],pseudoColumns:[[/[$][A-Za-z_][\w@#$]*/,{cases:{"@pseudoColumns":"predefined","@default":"identifier"}}]],numbers:[[/0[xX][0-9a-fA-F]*/,"number"],[/[$][+-]*\d*(\.\d*)?/,"number"],[/((\d+(\.\d*)?)|(\.\d+))([eE][\-+]?\d+)?/,"number"]],strings:[[/'/,{token:"string",next:"@string"}],[/"/,{token:"string.double",next:"@stringDouble"}]],string:[[/[^']+/,"string"],[/''/,"string"],[/'/,{token:"string",next:"@pop"}]],stringDouble:[[/[^"]+/,"string.double"],[/""/,"string.double"],[/"/,{token:"string.double",next:"@pop"}]],scopes:[]}}}});

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
webpackJsonp([19],{"LlI+":function(e,o,r){"use strict";Object.defineProperty(o,"__esModule",{value:!0}),r.d(o,"conf",function(){return t}),r.d(o,"language",function(){return n});var t={comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}]},n={defaultToken:"",tokenPostfix:".r",roxygen:["@param","@return","@name","@rdname","@examples","@include","@docType","@S3method","@TODO","@aliases","@alias","@assignee","@author","@callGraphDepth","@callGraph","@callGraphPrimitives","@concept","@exportClass","@exportMethod","@exportPattern","@export","@formals","@format","@importClassesFrom","@importFrom","@importMethodsFrom","@import","@keywords","@method","@nord","@note","@references","@seealso","@setClass","@slot","@source","@title","@usage"],constants:["NULL","FALSE","TRUE","NA","Inf","NaN ","NA_integer_","NA_real_","NA_complex_","NA_character_ ","T","F","LETTERS","letters","month.abb","month.name","pi","R.version.string"],keywords:["break","next","return","if","else","for","in","repeat","while","array","category","character","complex","double","function","integer","list","logical","matrix","numeric","vector","data.frame","factor","library","require","attach","detach","source"],special:["\\n","\\r","\\t","\\b","\\a","\\f","\\v","\\'",'\\"',"\\\\"],brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.bracket"},{open:"(",close:")",token:"delimiter.parenthesis"}],tokenizer:{root:[{include:"@numbers"},{include:"@strings"},[/[{}\[\]()]/,"@brackets"],{include:"@operators"},[/#'/,"comment.doc","@roxygen"],[/(^#.*$)/,"comment"],[/\s+/,"white"],[/[,:;]/,"delimiter"],[/@[a-zA-Z]\w*/,"tag"],[/[a-zA-Z]\w*/,{cases:{"@keywords":"keyword","@constants":"constant","@default":"identifier"}}]],roxygen:[[/@\w+/,{cases:{"@roxygen":"tag","@eos":{token:"comment.doc",next:"@pop"},"@default":"comment.doc"}}],[/\s+/,{cases:{"@eos":{token:"comment.doc",next:"@pop"},"@default":"comment.doc"}}],[/.*/,{token:"comment.doc",next:"@pop"}]],numbers:[[/0[xX][0-9a-fA-F]+/,"number.hex"],[/-?(\d*\.)?\d+([eE][+\-]?\d+)?/,"number"]],operators:[[/<{1,2}-/,"operator"],[/->{1,2}/,"operator"],[/%[^%\s]+%/,"operator"],[/\*\*/,"operator"],[/%%/,"operator"],[/&&/,"operator"],[/\|\|/,"operator"],[/<</,"operator"],[/>>/,"operator"],[/[-+=&|!<>^~*/:$]/,"operator"]],strings:[[/'/,"string.escape","@stringBody"],[/"/,"string.escape","@dblStringBody"]],stringBody:[[/\\./,{cases:{"@special":"string","@default":"error-token"}}],[/'/,"string.escape","@popall"],[/./,"string"]],dblStringBody:[[/\\./,{cases:{"@special":"string","@default":"error-token"}}],[/"/,"string.escape","@popall"],[/./,"string"]]}}}});

View File

@ -0,0 +1 @@
webpackJsonp([2],{"0aNj":function(n,o){function e(n){throw new Error("Cannot find module '"+n+"'.")}e.keys=function(){return[]},e.resolve=e,n.exports=e,e.id="0aNj"}});

View File

@ -0,0 +1 @@
webpackJsonp([20],{rAsP:function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),t.d(n,"conf",function(){return s}),t.d(n,"language",function(){return r});var s={comments:{lineComment:"#",blockComment:["'''","'''"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{offSide:!0,markers:{start:new RegExp("^\\s*#region\\b"),end:new RegExp("^\\s*#endregion\\b")}}},r={defaultToken:"",tokenPostfix:".python",keywords:["and","as","assert","break","class","continue","def","del","elif","else","except","exec","finally","for","from","global","if","import","in","is","lambda","None","not","or","pass","print","raise","return","self","try","while","with","yield","int","float","long","complex","hex","abs","all","any","apply","basestring","bin","bool","buffer","bytearray","callable","chr","classmethod","cmp","coerce","compile","complex","delattr","dict","dir","divmod","enumerate","eval","execfile","file","filter","format","frozenset","getattr","globals","hasattr","hash","help","id","input","intern","isinstance","issubclass","iter","len","locals","list","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","reversed","range","raw_input","reduce","reload","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","unichr","unicode","vars","xrange","zip","True","False","__dict__","__methods__","__members__","__class__","__bases__","__name__","__mro__","__subclasses__","__init__","__import__"],brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.bracket"},{open:"(",close:")",token:"delimiter.parenthesis"}],tokenizer:{root:[{include:"@whitespace"},{include:"@numbers"},{include:"@strings"},[/[,:;]/,"delimiter"],[/[{}\[\]()]/,"@brackets"],[/@[a-zA-Z]\w*/,"tag"],[/[a-zA-Z]\w*/,{cases:{"@keywords":"keyword","@default":"identifier"}}]],whitespace:[[/\s+/,"white"],[/(^#.*$)/,"comment"],[/('''.*''')|(""".*""")/,"string"],[/'''.*$/,"string","@endDocString"],[/""".*$/,"string","@endDblDocString"]],endDocString:[[/\\'/,"string"],[/.*'''/,"string","@popall"],[/.*$/,"string"]],endDblDocString:[[/\\"/,"string"],[/.*"""/,"string","@popall"],[/.*$/,"string"]],numbers:[[/-?0x([abcdef]|[ABCDEF]|\d)+[lL]?/,"number.hex"],[/-?(\d*\.)?\d+([eE][+\-]?\d+)?[jJ]?[lL]?/,"number"]],strings:[[/'$/,"string.escape","@popall"],[/'/,"string.escape","@stringBody"],[/"$/,"string.escape","@popall"],[/"/,"string.escape","@dblStringBody"]],stringBody:[[/\\./,"string"],[/'/,"string.escape","@popall"],[/.(?=.*')/,"string"],[/.*\\$/,"string"],[/.*$/,"string","@popall"]],dblStringBody:[[/\\./,"string"],[/"/,"string.escape","@popall"],[/.(?=.*")/,"string"],[/.*\\$/,"string"],[/.*$/,"string","@popall"]]}}}});

View File

@ -0,0 +1 @@
webpackJsonp([21],{uWun:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"conf",function(){return o}),n.d(t,"language",function(){return a});var o={comments:{lineComment:"//"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:'"',close:'"',notIn:["string","comment"]},{open:"'",close:"'",notIn:["string","comment"]},{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]}],folding:{offSide:!0}},a={defaultToken:"",tokenPostfix:".pug",ignoreCase:!0,brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.array",open:"[",close:"]"},{token:"delimiter.parenthesis",open:"(",close:")"}],keywords:["append","block","case","default","doctype","each","else","extends","for","if","in","include","mixin","typeof","unless","var","when"],tags:["a","abbr","acronym","address","area","article","aside","audio","b","base","basefont","bdi","bdo","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","command","datalist","dd","del","details","dfn","div","dl","dt","em","embed","fieldset","figcaption","figure","font","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","keygen","kbd","label","li","link","map","mark","menu","meta","meter","nav","noframes","noscript","object","ol","optgroup","option","output","p","param","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strike","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","tracks","tt","u","ul","video","wbr"],symbols:/[\+\-\*\%\&\|\!\=\/\.\,\:]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/^(\s*)([a-zA-Z_-][\w-]*)/,{cases:{"$2@tags":{cases:{"@eos":["","tag"],"@default":["",{token:"tag",next:"@tag.$1"}]}},"$2@keywords":["",{token:"keyword.$2"}],"@default":["",""]}}],[/^(\s*)(#[a-zA-Z_-][\w-]*)/,{cases:{"@eos":["","tag.id"],"@default":["",{token:"tag.id",next:"@tag.$1"}]}}],[/^(\s*)(\.[a-zA-Z_-][\w-]*)/,{cases:{"@eos":["","tag.class"],"@default":["",{token:"tag.class",next:"@tag.$1"}]}}],[/^(\s*)(\|.*)$/,""],{include:"@whitespace"},[/[a-zA-Z_$][\w$]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":""}}],[/[{}()\[\]]/,"@brackets"],[/@symbols/,"delimiter"],[/\d+\.\d+([eE][\-+]?\d+)?/,"number.float"],[/\d+/,"number"],[/"/,"string",'@string."'],[/'/,"string","@string.'"]],tag:[[/(\.)(\s*$)/,[{token:"delimiter",next:"@blockText.$S2."},""]],[/\s+/,{token:"",next:"@simpleText"}],[/#[a-zA-Z_-][\w-]*/,{cases:{"@eos":{token:"tag.id",next:"@pop"},"@default":"tag.id"}}],[/\.[a-zA-Z_-][\w-]*/,{cases:{"@eos":{token:"tag.class",next:"@pop"},"@default":"tag.class"}}],[/\(/,{token:"delimiter.parenthesis",next:"@attributeList"}]],simpleText:[[/[^#]+$/,{token:"",next:"@popall"}],[/[^#]+/,{token:""}],[/(#{)([^}]*)(})/,{cases:{"@eos":["interpolation.delimiter","interpolation",{token:"interpolation.delimiter",next:"@popall"}],"@default":["interpolation.delimiter","interpolation","interpolation.delimiter"]}}],[/#$/,{token:"",next:"@popall"}],[/#/,""]],attributeList:[[/\s+/,""],[/(\w+)(\s*=\s*)("|')/,["attribute.name","delimiter",{token:"attribute.value",next:"@value.$3"}]],[/\w+/,"attribute.name"],[/,/,{cases:{"@eos":{token:"attribute.delimiter",next:"@popall"},"@default":"attribute.delimiter"}}],[/\)$/,{token:"delimiter.parenthesis",next:"@popall"}],[/\)/,{token:"delimiter.parenthesis",next:"@pop"}]],whitespace:[[/^(\s*)(\/\/.*)$/,{token:"comment",next:"@blockText.$1.comment"}],[/[ \t\r\n]+/,""],[/<!--/,{token:"comment",next:"@comment"}]],blockText:[[/^\s+.*$/,{cases:{"($S2\\s+.*$)":{token:"$S3"},"@default":{token:"@rematch",next:"@popall"}}}],[/./,{token:"@rematch",next:"@popall"}]],comment:[[/[^<\-]+/,"comment.content"],[/-->/,{token:"comment",next:"@pop"}],[/<!--/,"comment.content.invalid"],[/[<\-]/,"comment.content"]],string:[[/[^\\"'#]+/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}],[/@escapes/,{cases:{"@eos":{token:"string.escape",next:"@popall"},"@default":"string.escape"}}],[/\\./,{cases:{"@eos":{token:"string.escape.invalid",next:"@popall"},"@default":"string.escape.invalid"}}],[/(#{)([^}]*)(})/,["interpolation.delimiter","interpolation","interpolation.delimiter"]],[/#/,"string"],[/["']/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":{token:"string"}}}]],value:[[/[^\\"']+/,{cases:{"@eos":{token:"attribute.value",next:"@popall"},"@default":"attribute.value"}}],[/\\./,{cases:{"@eos":{token:"attribute.value",next:"@popall"},"@default":"attribute.value"}}],[/["']/,{cases:{"$#==$S2":{token:"attribute.value",next:"@pop"},"@default":{token:"attribute.value"}}}]]}}}});

View File

@ -0,0 +1 @@
webpackJsonp([22],{"9NZ8":function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),t.d(n,"conf",function(){return s}),t.d(n,"language",function(){return o});var s={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\#%\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"#",blockComment:["<#","#>"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*#region\\b"),end:new RegExp("^\\s*#endregion\\b")}}},o={defaultToken:"",ignoreCase:!0,tokenPostfix:".ps1",brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.square",open:"[",close:"]"},{token:"delimiter.parenthesis",open:"(",close:")"}],keywords:["begin","break","catch","class","continue","data","define","do","dynamicparam","else","elseif","end","exit","filter","finally","for","foreach","from","function","if","in","param","process","return","switch","throw","trap","try","until","using","var","while","workflow","parallel","sequence","inlinescript","configuration"],helpKeywords:/SYNOPSIS|DESCRIPTION|PARAMETER|EXAMPLE|INPUTS|OUTPUTS|NOTES|LINK|COMPONENT|ROLE|FUNCTIONALITY|FORWARDHELPTARGETNAME|FORWARDHELPCATEGORY|REMOTEHELPRUNSPACE|EXTERNALHELP/,symbols:/[=><!~?&%|+\-*\/\^;\.,]+/,escapes:/`(?:[abfnrtv\\"'$]|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/[a-zA-Z_][\w-]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":""}}],[/[ \t\r\n]+/,""],[/^:\w*/,"metatag"],[/\$(\{((global|local|private|script|using):)?[\w]+\}|((global|local|private|script|using):)?[\w]+)/,"variable"],[/<#/,"comment","@comment"],[/#.*$/,"comment"],[/[{}()\[\]]/,"@brackets"],[/@symbols/,"delimiter"],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/0[xX][0-9a-fA-F_]*[0-9a-fA-F]/,"number.hex"],[/\d+?/,"number"],[/[;,.]/,"delimiter"],[/\@"/,"string",'@herestring."'],[/\@'/,"string","@herestring.'"],[/"/,{cases:{"@eos":"string","@default":{token:"string",next:'@string."'}}}],[/'/,{cases:{"@eos":"string","@default":{token:"string",next:"@string.'"}}}]],string:[[/[^"'\$`]+/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}],[/@escapes/,{cases:{"@eos":{token:"string.escape",next:"@popall"},"@default":"string.escape"}}],[/`./,{cases:{"@eos":{token:"string.escape.invalid",next:"@popall"},"@default":"string.escape.invalid"}}],[/\$[\w]+$/,{cases:{'$S2=="':{token:"variable",next:"@popall"},"@default":{token:"string",next:"@popall"}}}],[/\$[\w]+/,{cases:{'$S2=="':"variable","@default":"string"}}],[/["']/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}}}]],herestring:[[/^\s*(["'])@/,{cases:{"$1==$S2":{token:"string",next:"@pop"},"@default":"string"}}],[/[^\$`]+/,"string"],[/@escapes/,"string.escape"],[/`./,"string.escape.invalid"],[/\$[\w]+/,{cases:{'$S2=="':"variable","@default":"string"}}]],comment:[[/[^#\.]+/,"comment"],[/#>/,"comment","@pop"],[/(\.)(@helpKeywords)(?!\w)/,{token:"comment.keyword.$2"}],[/[\.#]/,"comment"]]}}}});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
webpackJsonp([26],{nMQi:function(e,n,o){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),o.d(n,"conf",function(){return t}),o.d(n,"language",function(){return s});var t={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},s={defaultToken:"",tokenPostfix:".objective-c",keywords:["#import","#include","#define","#else","#endif","#if","#ifdef","#ifndef","#ident","#undef","@class","@defs","@dynamic","@encode","@end","@implementation","@interface","@package","@private","@protected","@property","@protocol","@public","@selector","@synthesize","__declspec","assign","auto","BOOL","break","bycopy","byref","case","char","Class","const","copy","continue","default","do","double","else","enum","extern","FALSE","false","float","for","goto","if","in","int","id","inout","IMP","long","nil","nonatomic","NULL","oneway","out","private","public","protected","readwrite","readonly","register","return","SEL","self","short","signed","sizeof","static","struct","super","switch","typedef","TRUE","true","union","unsigned","volatile","void","while"],decpart:/\d(_?\d)*/,decimal:/0|@decpart/,tokenizer:{root:[{include:"@comments"},{include:"@whitespace"},{include:"@numbers"},{include:"@strings"},[/[,:;]/,"delimiter"],[/[{}\[\]()<>]/,"@brackets"],[/[a-zA-Z@#]\w*/,{cases:{"@keywords":"keyword","@default":"identifier"}}],[/[<>=\\+\\-\\*\\/\\^\\|\\~,]|and\\b|or\\b|not\\b]/,"operator"]],whitespace:[[/\s+/,"white"]],comments:[["\\/\\*","comment","@comment"],["\\/\\/+.*","comment"]],comment:[["\\*\\/","comment","@pop"],[".","comment"]],numbers:[[/0[xX][0-9a-fA-F]*(_?[0-9a-fA-F])*/,"number.hex"],[/@decimal((\.@decpart)?([eE][\-+]?@decpart)?)[fF]*/,{cases:{"(\\d)*":"number",$0:"number.float"}}]],strings:[[/'$/,"string.escape","@popall"],[/'/,"string.escape","@stringBody"],[/"$/,"string.escape","@popall"],[/"/,"string.escape","@dblStringBody"]],stringBody:[[/\\./,"string"],[/'/,"string.escape","@popall"],[/.(?=.*')/,"string"],[/.*\\$/,"string"],[/.*$/,"string","@popall"]],dblStringBody:[[/\\./,"string"],[/"/,"string.escape","@popall"],[/.(?=.*")/,"string"],[/.*\\$/,"string"],[/.*$/,"string","@popall"]]}}}});

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
webpackJsonp([28],{"E+87":function(E,T,A){"use strict";Object.defineProperty(T,"__esModule",{value:!0}),A.d(T,"conf",function(){return N}),A.d(T,"language",function(){return e});var N={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["[","]"],["(",")"],["{","}"]],autoClosingPairs:[{open:'"',close:'"',notIn:["string","comment"]},{open:"'",close:"'",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:"{",close:"}",notIn:["string","comment"]}]},e={defaultToken:"",tokenPostfix:".msdax",ignoreCase:!0,brackets:[{open:"[",close:"]",token:"delimiter.square"},{open:"{",close:"}",token:"delimiter.brackets"},{open:"(",close:")",token:"delimiter.parenthesis"}],keywords:["VAR","RETURN","NOT","EVALUATE","DATATABLE","ORDER","BY","START","AT","DEFINE","MEASURE","ASC","DESC","IN","BOOLEAN","DOUBLE","INTEGER","DATETIME","CURRENCY","STRING"],functions:["CLOSINGBALANCEMONTH","CLOSINGBALANCEQUARTER","CLOSINGBALANCEYEAR","DATEADD","DATESBETWEEN","DATESINPERIOD","DATESMTD","DATESQTD","DATESYTD","ENDOFMONTH","ENDOFQUARTER","ENDOFYEAR","FIRSTDATE","FIRSTNONBLANK","LASTDATE","LASTNONBLANK","NEXTDAY","NEXTMONTH","NEXTQUARTER","NEXTYEAR","OPENINGBALANCEMONTH","OPENINGBALANCEQUARTER","OPENINGBALANCEYEAR","PARALLELPERIOD","PREVIOUSDAY","PREVIOUSMONTH","PREVIOUSQUARTER","PREVIOUSYEAR","SAMEPERIODLASTYEAR","STARTOFMONTH","STARTOFQUARTER","STARTOFYEAR","TOTALMTD","TOTALQTD","TOTALYTD","ADDCOLUMNS","ADDMISSINGITEMS","ALL","ALLEXCEPT","ALLNOBLANKROW","ALLSELECTED","CALCULATE","CALCULATETABLE","CALENDAR","CALENDARAUTO","CROSSFILTER","CROSSJOIN","CURRENTGROUP","DATATABLE","DETAILROWS","DISTINCT","EARLIER","EARLIEST","EXCEPT","FILTER","FILTERS","GENERATE","GENERATEALL","GROUPBY","IGNORE","INTERSECT","ISONORAFTER","KEEPFILTERS","LOOKUPVALUE","NATURALINNERJOIN","NATURALLEFTOUTERJOIN","RELATED","RELATEDTABLE","ROLLUP","ROLLUPADDISSUBTOTAL","ROLLUPGROUP","ROLLUPISSUBTOTAL","ROW","SAMPLE","SELECTCOLUMNS","SUBSTITUTEWITHINDEX","SUMMARIZE","SUMMARIZECOLUMNS","TOPN","TREATAS","UNION","USERELATIONSHIP","VALUES","SUM","SUMX","PATH","PATHCONTAINS","PATHITEM","PATHITEMREVERSE","PATHLENGTH","AVERAGE","AVERAGEA","AVERAGEX","COUNT","COUNTA","COUNTAX","COUNTBLANK","COUNTROWS","COUNTX","DISTINCTCOUNT","DIVIDE","GEOMEAN","GEOMEANX","MAX","MAXA","MAXX","MEDIAN","MEDIANX","MIN","MINA","MINX","PERCENTILE.EXC","PERCENTILE.INC","PERCENTILEX.EXC","PERCENTILEX.INC","PRODUCT","PRODUCTX","RANK.EQ","RANKX","STDEV.P","STDEV.S","STDEVX.P","STDEVX.S","VAR.P","VAR.S","VARX.P","VARX.S","XIRR","XNPV","DATE","DATEDIFF","DATEVALUE","DAY","EDATE","EOMONTH","HOUR","MINUTE","MONTH","NOW","SECOND","TIME","TIMEVALUE","TODAY","WEEKDAY","WEEKNUM","YEAR","YEARFRAC","CONTAINS","CONTAINSROW","CUSTOMDATA","ERROR","HASONEFILTER","HASONEVALUE","ISBLANK","ISCROSSFILTERED","ISEMPTY","ISERROR","ISEVEN","ISFILTERED","ISLOGICAL","ISNONTEXT","ISNUMBER","ISODD","ISSUBTOTAL","ISTEXT","USERNAME","USERPRINCIPALNAME","AND","FALSE","IF","IFERROR","NOT","OR","SWITCH","TRUE","ABS","ACOS","ACOSH","ACOT","ACOTH","ASIN","ASINH","ATAN","ATANH","BETA.DIST","BETA.INV","CEILING","CHISQ.DIST","CHISQ.DIST.RT","CHISQ.INV","CHISQ.INV.RT","COMBIN","COMBINA","CONFIDENCE.NORM","CONFIDENCE.T","COS","COSH","COT","COTH","CURRENCY","DEGREES","EVEN","EXP","EXPON.DIST","FACT","FLOOR","GCD","INT","ISO.CEILING","LCM","LN","LOG","LOG10","MOD","MROUND","ODD","PERMUT","PI","POISSON.DIST","POWER","QUOTIENT","RADIANS","RAND","RANDBETWEEN","ROUND","ROUNDDOWN","ROUNDUP","SIGN","SIN","SINH","SQRT","SQRTPI","TAN","TANH","TRUNC","BLANK","CONCATENATE","CONCATENATEX","EXACT","FIND","FIXED","FORMAT","LEFT","LEN","LOWER","MID","REPLACE","REPT","RIGHT","SEARCH","SUBSTITUTE","TRIM","UNICHAR","UNICODE","UPPER","VALUE"],tokenizer:{root:[{include:"@comments"},{include:"@whitespace"},{include:"@numbers"},{include:"@strings"},{include:"@complexIdentifiers"},[/[;,.]/,"delimiter"],[/[({})]/,"@brackets"],[/[a-z_][a-zA-Z0-9_]*/,{cases:{"@keywords":"keyword","@functions":"keyword","@default":"identifier"}}],[/[<>=!%&+\-*/|~^]/,"operator"]],whitespace:[[/\s+/,"white"]],comments:[[/\/\/+.*/,"comment"],[/\/\*/,{token:"comment.quote",next:"@comment"}]],comment:[[/[^*/]+/,"comment"],[/\*\//,{token:"comment.quote",next:"@pop"}],[/./,"comment"]],numbers:[[/0[xX][0-9a-fA-F]*/,"number"],[/[$][+-]*\d*(\.\d*)?/,"number"],[/((\d+(\.\d*)?)|(\.\d+))([eE][\-+]?\d+)?/,"number"]],strings:[[/N"/,{token:"string",next:"@string"}],[/"/,{token:"string",next:"@string"}]],string:[[/[^"]+/,"string"],[/""/,"string"],[/"/,{token:"string",next:"@pop"}]],complexIdentifiers:[[/\[/,{token:"identifier.quote",next:"@bracketedIdentifier"}],[/'/,{token:"identifier.quote",next:"@quotedIdentifier"}]],bracketedIdentifier:[[/[^\]]+/,"identifier"],[/]]/,"identifier"],[/]/,{token:"identifier.quote",next:"@pop"}]],quotedIdentifier:[[/[^']+/,"identifier"],[/''/,"identifier"],[/'/,{token:"identifier.quote",next:"@pop"}]]}}}});

View File

@ -0,0 +1 @@
webpackJsonp([29],{C7VQ:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"conf",function(){return o}),n.d(t,"language",function(){return c});var s="attribute.name.html",o={comments:{blockComment:["\x3c!--","--\x3e"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">",notIn:["string"]}],surroundingPairs:[{open:"(",close:")"},{open:"[",close:"]"},{open:"`",close:"`"}],folding:{markers:{start:new RegExp("^\\s*\x3c!--\\s*#?region\\b.*--\x3e"),end:new RegExp("^\\s*\x3c!--\\s*#?endregion\\b.*--\x3e")}}},c={defaultToken:"",tokenPostfix:".md",control:/[\\`*_\[\]{}()#+\-\.!]/,noncontrol:/[^\\`*_\[\]{}()#+\-\.!]/,escapes:/\\(?:@control)/,jsescapes:/\\(?:[btnfr\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,empty:["area","base","basefont","br","col","frame","hr","img","input","isindex","link","meta","param"],tokenizer:{root:[[/^(\s{0,3})(#+)((?:[^\\#]|@escapes)+)((?:#+)?)/,["white","keyword","keyword","keyword"]],[/^\s*(=+|\-+)\s*$/,"keyword"],[/^\s*((\*[ ]?)+)\s*$/,"meta.separator"],[/^\s*>+/,"comment"],[/^\s*([\*\-+:]|\d+\.)\s/,"keyword"],[/^(\t|[ ]{4})[^ ].*$/,"string"],[/^\s*~~~\s*((?:\w|[\/\-#])+)?\s*$/,{token:"string",next:"@codeblock"}],[/^\s*```\s*((?:\w|[\/\-#])+)\s*$/,{token:"string",next:"@codeblockgh",nextEmbedded:"$1"}],[/^\s*```\s*$/,{token:"string",next:"@codeblock"}],{include:"@linecontent"}],codeblock:[[/^\s*~~~\s*$/,{token:"string",next:"@pop"}],[/^\s*```\s*$/,{token:"string",next:"@pop"}],[/.*$/,"variable.source"]],codeblockgh:[[/```\s*$/,{token:"variable.source",next:"@pop",nextEmbedded:"@pop"}],[/[^`]+/,"variable.source"]],linecontent:[[/&\w+;/,"string.escape"],[/@escapes/,"escape"],[/\b__([^\\_]|@escapes|_(?!_))+__\b/,"strong"],[/\*\*([^\\*]|@escapes|\*(?!\*))+\*\*/,"strong"],[/\b_[^_]+_\b/,"emphasis"],[/\*([^\\*]|@escapes)+\*/,"emphasis"],[/`([^\\`]|@escapes)+`/,"variable"],[/\{[^}]+\}/,"string.target"],[/(!?\[)((?:[^\]\\]|@escapes)*)(\]\([^\)]+\))/,["string.link","","string.link"]],[/(!?\[)((?:[^\]\\]|@escapes)*)(\])/,"string.link"],{include:"html"}],html:[[/<(\w+)\/>/,"tag"],[/<(\w+)/,{cases:{"@empty":{token:"tag",next:"@tag.$1"},"@default":{token:"tag",next:"@tag.$1"}}}],[/<\/(\w+)\s*>/,{token:"tag"}],[/<!--/,"comment","@comment"]],comment:[[/[^<\-]+/,"comment.content"],[/-->/,"comment","@pop"],[/<!--/,"comment.content.invalid"],[/[<\-]/,"comment.content"]],tag:[[/[ \t\r\n]+/,"white"],[/(type)(\s*=\s*)(")([^"]+)(")/,[s,"delimiter.html","string.html",{token:"string.html",switchTo:"@tag.$S2.$4"},"string.html"]],[/(type)(\s*=\s*)(')([^']+)(')/,[s,"delimiter.html","string.html",{token:"string.html",switchTo:"@tag.$S2.$4"},"string.html"]],[/(\w+)(\s*=\s*)("[^"]*"|'[^']*')/,[s,"delimiter.html","string.html"]],[/\w+/,s],[/\/>/,"tag","@pop"],[/>/,{cases:{"$S2==style":{token:"tag",switchTo:"embeddedStyle",nextEmbedded:"text/css"},"$S2==script":{cases:{$S3:{token:"tag",switchTo:"embeddedScript",nextEmbedded:"$S3"},"@default":{token:"tag",switchTo:"embeddedScript",nextEmbedded:"text/javascript"}}},"@default":{token:"tag",next:"@pop"}}}]],embeddedStyle:[[/[^<]+/,""],[/<\/style\s*>/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/</,""]],embeddedScript:[[/[^<]+/,""],[/<\/script\s*>/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/</,""]]}}}});

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
webpackJsonp([30],{y5sU:function(e,n,o){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),o.d(n,"conf",function(){return t}),o.d(n,"language",function(){return s});var t={comments:{lineComment:"--",blockComment:["--[[","]]"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},s={defaultToken:"",tokenPostfix:".lua",keywords:["and","break","do","else","elseif","end","false","for","function","goto","if","in","local","nil","not","or","repeat","return","then","true","until","while"],brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.array",open:"[",close:"]"},{token:"delimiter.parenthesis",open:"(",close:")"}],operators:["+","-","*","/","%","^","#","==","~=","<=",">=","<",">","=",";",":",",",".","..","..."],symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/[a-zA-Z_]\w*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],{include:"@whitespace"},[/(,)(\s*)([a-zA-Z_]\w*)(\s*)(:)(?!:)/,["delimiter","","key","","delimiter"]],[/({)(\s*)([a-zA-Z_]\w*)(\s*)(:)(?!:)/,["@brackets","","key","","delimiter"]],[/[{}()\[\]]/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/0[xX][0-9a-fA-F_]*[0-9a-fA-F]/,"number.hex"],[/\d+?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string",'@string."'],[/'/,"string","@string.'"]],whitespace:[[/[ \t\r\n]+/,""],[/--\[([=]*)\[/,"comment","@comment.$1"],[/--.*$/,"comment"]],comment:[[/[^\]]+/,"comment"],[/\]([=]*)\]/,{cases:{"$1==$S2":{token:"comment",next:"@pop"},"@default":"comment"}}],[/./,"comment"]],string:[[/[^\\"']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/["']/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":"string"}}]]}}}});

View File

@ -0,0 +1 @@
webpackJsonp([31],{U5zn:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"conf",function(){return i}),n.d(t,"language",function(){return r});var i={wordPattern:/(#?-?\d*\.\d\w*%?)|([@#!.:]?[\w-?]+%?)|[@#!.]/g,comments:{blockComment:["/*","*/"],lineComment:"//"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*\\/\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\/"),end:new RegExp("^\\s*\\/\\*\\s*#endregion\\b.*\\*\\/")}}},r={defaultToken:"",tokenPostfix:".less",identifier:"-?-?([a-zA-Z]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*",identifierPlus:"-?-?([a-zA-Z:.]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-:.]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.bracket"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],tokenizer:{root:[{include:"@nestedJSBegin"},["[ \\t\\r\\n]+",""],{include:"@comments"},{include:"@keyword"},{include:"@strings"},{include:"@numbers"},["[*_]?[a-zA-Z\\-\\s]+(?=:.*(;|(\\\\$)))","attribute.name","@attribute"],["url(\\-prefix)?\\(",{token:"tag",next:"@urldeclaration"}],["[{}()\\[\\]]","@brackets"],["[,:;]","delimiter"],["#@identifierPlus","tag.id"],["&","tag"],["\\.@identifierPlus(?=\\()","tag.class","@attribute"],["\\.@identifierPlus","tag.class"],["@identifierPlus","tag"],{include:"@operators"},["@(@identifier(?=[:,\\)]))","variable","@attribute"],["@(@identifier)","variable"],["@","key","@atRules"]],nestedJSBegin:[["``","delimiter.backtick"],["`",{token:"delimiter.backtick",next:"@nestedJSEnd",nextEmbedded:"text/javascript"}]],nestedJSEnd:[["`",{token:"delimiter.backtick",next:"@pop",nextEmbedded:"@pop"}]],operators:[["[<>=\\+\\-\\*\\/\\^\\|\\~]","operator"]],keyword:[["(@[\\s]*import|![\\s]*important|true|false|when|iscolor|isnumber|isstring|iskeyword|isurl|ispixel|ispercentage|isem|hue|saturation|lightness|alpha|lighten|darken|saturate|desaturate|fadein|fadeout|fade|spin|mix|round|ceil|floor|percentage)\\b","keyword"]],urldeclaration:[{include:"@strings"},["[^)\r\n]+","string"],["\\)",{token:"tag",next:"@pop"}]],attribute:[{include:"@nestedJSBegin"},{include:"@comments"},{include:"@strings"},{include:"@numbers"},{include:"@keyword"},["[a-zA-Z\\-]+(?=\\()","attribute.value","@attribute"],[">","operator","@pop"],["@identifier","attribute.value"],{include:"@operators"},["@(@identifier)","variable"],["[)\\}]","@brackets","@pop"],["[{}()\\[\\]>]","@brackets"],["[;]","delimiter","@pop"],["[,=:]","delimiter"],["\\s",""],[".","attribute.value"]],comments:[["\\/\\*","comment","@comment"],["\\/\\/+.*","comment"]],comment:[["\\*\\/","comment","@pop"],[".","comment"]],numbers:[["(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?",{token:"attribute.value.number",next:"@units"}],["#[0-9a-fA-F_]+(?!\\w)","attribute.value.hex"]],units:[["(em|ex|ch|rem|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?","attribute.value.unit","@pop"]],strings:[['~?"',{token:"string.delimiter",next:"@stringsEndDoubleQuote"}],["~?'",{token:"string.delimiter",next:"@stringsEndQuote"}]],stringsEndDoubleQuote:[['\\\\"',"string"],['"',{token:"string.delimiter",next:"@popall"}],[".","string"]],stringsEndQuote:[["\\\\'","string"],["'",{token:"string.delimiter",next:"@popall"}],[".","string"]],atRules:[{include:"@comments"},{include:"@strings"},["[()]","delimiter"],["[\\{;]","delimiter","@pop"],[".","key"]]}}}});

View File

@ -0,0 +1 @@
webpackJsonp([32],{x3ms:function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),o.d(t,"conf",function(){return n}),o.d(t,"language",function(){return s});var n={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"<",close:">"}],folding:{markers:{start:new RegExp("^\\s*//\\s*(?:(?:#?region\\b)|(?:<editor-fold\\b))"),end:new RegExp("^\\s*//\\s*(?:(?:#?endregion\\b)|(?:</editor-fold>))")}}},s={defaultToken:"",tokenPostfix:".java",keywords:["abstract","continue","for","new","switch","assert","default","goto","package","synchronized","boolean","do","if","private","this","break","double","implements","protected","throw","byte","else","import","public","throws","case","enum","instanceof","return","transient","catch","extends","int","short","try","char","final","interface","static","void","class","finally","long","strictfp","volatile","const","float","native","super","while","true","false"],operators:["=",">","<","!","~","?",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%","<<",">>",">>>","+=","-=","*=","/=","&=","|=","^=","%=","<<=",">>=",">>>="],symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,digits:/\d+(_+\d+)*/,octaldigits:/[0-7]+(_+[0-7]+)*/,binarydigits:/[0-1]+(_+[0-1]+)*/,hexdigits:/[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,tokenizer:{root:[[/[a-zA-Z_$][\w$]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/@\s*[a-zA-Z_\$][\w\$]*/,"annotation"],[/(@digits)[eE]([\-+]?(@digits))?[fFdD]?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?[fFdD]?/,"number.float"],[/0[xX](@hexdigits)[Ll]?/,"number.hex"],[/0(@octaldigits)[Ll]?/,"number.octal"],[/0[bB](@binarydigits)[Ll]?/,"number.binary"],[/(@digits)[fFdD]/,"number.float"],[/(@digits)[lL]?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@javadoc"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],javadoc:[[/[^\/*]+/,"comment.doc"],[/\/\*/,"comment.doc.invalid"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]]}}}});

View File

@ -0,0 +1 @@
webpackJsonp([33],{"fj+P":function(e,n,s){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),s.d(n,"conf",function(){return o}),s.d(n,"language",function(){return t});var o={comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},t={defaultToken:"",tokenPostfix:".ini",escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/^\[[^\]]*\]/,"metatag"],[/(^\w+)(\s*)(\=)/,["key","","delimiter"]],{include:"@whitespace"},[/\d+/,"number"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string",'@string."'],[/'/,"string","@string.'"]],whitespace:[[/[ \t\r\n]+/,""],[/^\s*[#;].*$/,"comment"]],string:[[/[^\\"']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/["']/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":"string"}}]]}}}});

View File

@ -0,0 +1 @@
webpackJsonp([34],{jIYi:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"conf",function(){return o}),n.d(t,"language",function(){return d});var i="undefined"==typeof monaco?self.monaco:monaco,r=["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"],o={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:["\x3c!--","--\x3e"]},brackets:[["\x3c!--","--\x3e"],["<",">"],["{","}"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:'"',close:'"'},{open:"'",close:"'"},{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"}],onEnterRules:[{beforeText:new RegExp("<(?!(?:"+r.join("|")+"))([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$","i"),afterText:/^<\/([_:\w][_:\w-.\d]*)\s*>$/i,action:{indentAction:i.languages.IndentAction.IndentOutdent}},{beforeText:new RegExp("<(?!(?:"+r.join("|")+"))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$","i"),action:{indentAction:i.languages.IndentAction.Indent}}],folding:{markers:{start:new RegExp("^\\s*\x3c!--\\s*#region\\b.*--\x3e"),end:new RegExp("^\\s*\x3c!--\\s*#endregion\\b.*--\x3e")}}},d={defaultToken:"",tokenPostfix:".html",ignoreCase:!0,tokenizer:{root:[[/<!DOCTYPE/,"metatag","@doctype"],[/<!--/,"comment","@comment"],[/(<)((?:[\w\-]+:)?[\w\-]+)(\s*)(\/>)/,["delimiter","tag","","delimiter"]],[/(<)(script)/,["delimiter",{token:"tag",next:"@script"}]],[/(<)(style)/,["delimiter",{token:"tag",next:"@style"}]],[/(<)((?:[\w\-]+:)?[\w\-]+)/,["delimiter",{token:"tag",next:"@otherTag"}]],[/(<\/)((?:[\w\-]+:)?[\w\-]+)/,["delimiter",{token:"tag",next:"@otherTag"}]],[/</,"delimiter"],[/[^<]+/]],doctype:[[/[^>]+/,"metatag.content"],[/>/,"metatag","@pop"]],comment:[[/-->/,"comment","@pop"],[/[^-]+/,"comment.content"],[/./,"comment.content"]],otherTag:[[/\/?>/,"delimiter","@pop"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/]],script:[[/type/,"attribute.name","@scriptAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],scriptAfterType:[[/=/,"delimiter","@scriptAfterTypeEquals"],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptAfterTypeEquals:[[/"([^"]*)"/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@scriptWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@scriptEmbedded",nextEmbedded:"text/javascript"}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptWithCustomType:[[/>/,{token:"delimiter",next:"@scriptEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:"@rematch",next:"@pop"}]],scriptEmbedded:[[/<\/script/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]],style:[[/type/,"attribute.name","@styleAfterType"],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,["delimiter","tag",{token:"delimiter",next:"@pop"}]]],styleAfterType:[[/=/,"delimiter","@styleAfterTypeEquals"],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleAfterTypeEquals:[[/"([^"]*)"/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/'([^']*)'/,{token:"attribute.value",switchTo:"@styleWithCustomType.$1"}],[/>/,{token:"delimiter",next:"@styleEmbedded",nextEmbedded:"text/css"}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleWithCustomType:[[/>/,{token:"delimiter",next:"@styleEmbedded.$S2",nextEmbedded:"$S2"}],[/"([^"]*)"/,"attribute.value"],[/'([^']*)'/,"attribute.value"],[/[\w\-]+/,"attribute.name"],[/=/,"delimiter"],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:"@rematch",next:"@pop"}]],styleEmbedded:[[/<\/style/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/[^<]+/,""]]}}}});

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
webpackJsonp([36],{AZr8:function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),t.d(n,"conf",function(){return o}),t.d(n,"language",function(){return s});var o={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"`",close:"`",notIn:["string"]},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"`",close:"`"},{open:'"',close:'"'},{open:"'",close:"'"}]},s={defaultToken:"",tokenPostfix:".go",keywords:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var","bool","true","false","uint8","uint16","uint32","uint64","int8","int16","int32","int64","float32","float64","complex64","complex128","byte","rune","uint","int","uintptr","string","nil"],operators:["+","-","*","/","%","&","|","^","<<",">>","&^","+=","-=","*=","/=","%=","&=","|=","^=","<<=",">>=","&^=","&&","||","<-","++","--","==","<",">","=","!","!=","<=",">=",":=","...","(",")","","]","{","}",",",";",".",":"],symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/[a-zA-Z_]\w*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],{include:"@whitespace"},[/\[\[.*\]\]/,"annotation"],[/^\s*#\w+/,"keyword"],[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\d+[eE]([\-+]?\d+)?/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/0[xX][0-9a-fA-F']*[0-9a-fA-F]/,"number.hex"],[/0[0-7']*[0-7]/,"number.octal"],[/0[bB][0-1']*[0-1]/,"number.binary"],[/\d[\d']*/,"number"],[/\d/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"],[/`/,"string","@rawstring"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@doccomment"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],doccomment:[[/[^\/*]+/,"comment.doc"],[/\/\*/,"comment.doc.invalid"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],rawstring:[[/[^\`]/,"string"],[/`/,"string","@pop"]]}}}});

View File

@ -0,0 +1 @@
webpackJsonp([37],{gQGc:function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),t.d(n,"conf",function(){return s}),t.d(n,"language",function(){return o});var s={comments:{lineComment:"//",blockComment:["(*","*)"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*//\\s*#region\\b|^\\s*\\(\\*\\s*#region(.*)\\*\\)"),end:new RegExp("^\\s*//\\s*#endregion\\b|^\\s*\\(\\*\\s*#endregion\\s*\\*\\)")}}},o={defaultToken:"",tokenPostfix:".fs",keywords:["abstract","and","atomic","as","assert","asr","base","begin","break","checked","component","const","constraint","constructor","continue","class","default","delegate","do","done","downcast","downto","elif","else","end","exception","eager","event","external","extern","false","finally","for","fun","function","fixed","functor","global","if","in","include","inherit","inline","interface","internal","land","lor","lsl","lsr","lxor","lazy","let","match","member","mod","module","mutable","namespace","method","mixin","new","not","null","of","open","or","object","override","private","parallel","process","protected","pure","public","rec","return","static","sealed","struct","sig","then","to","true","tailcall","trait","try","type","upcast","use","val","void","virtual","volatile","when","while","with","yield"],symbols:/[=><!~?:&|+\-*\^%;\.,\/]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,integersuffix:/[uU]?[yslnLI]?/,floatsuffix:/[fFmM]?/,tokenizer:{root:[[/[a-zA-Z_]\w*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],{include:"@whitespace"},[/\[<.*>\]/,"annotation"],[/^#(if|else|endif)/,"keyword"],[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,"delimiter"],[/\d*\d+[eE]([\-+]?\d+)?(@floatsuffix)/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?(@floatsuffix)/,"number.float"],[/0x[0-9a-fA-F]+LF/,"number.float"],[/0x[0-9a-fA-F]+(@integersuffix)/,"number.hex"],[/0b[0-1]+(@integersuffix)/,"number.bin"],[/\d+(@integersuffix)/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"""/,"string",'@string."""'],[/"/,"string",'@string."'],[/\@"/,{token:"string.quote",next:"@litstring"}],[/'[^\\']'B?/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\(\*(?!\))/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\*]+/,"comment"],[/\*\)/,"comment","@pop"],[/\*/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/("""|"B?)/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":"string"}}]],litstring:[[/[^"]+/,"string"],[/""/,"string.escape"],[/"/,{token:"string.quote",next:"@pop"}]]}}}});

View File

@ -0,0 +1 @@
webpackJsonp([38],{WfTH:function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),t.d(n,"conf",function(){return s}),t.d(n,"language",function(){return o});var s={brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},o={defaultToken:"",tokenPostfix:".dockerfile",instructions:/FROM|MAINTAINER|RUN|EXPOSE|ENV|ADD|ARG|VOLUME|LABEL|USER|WORKDIR|COPY|CMD|STOPSIGNAL|SHELL|HEALTHCHECK|ENTRYPOINT/,instructionAfter:/ONBUILD/,variableAfter:/ENV/,variable:/\${?[\w]+}?/,tokenizer:{root:[{include:"@whitespace"},{include:"@comment"},[/(@instructionAfter)(\s+)/,["keyword",{token:"",next:"@instructions"}]],["","keyword","@instructions"]],instructions:[[/(@variableAfter)(\s+)([\w]+)/,["keyword","",{token:"variable",next:"@arguments"}]],[/(@instructions)/,"keyword","@arguments"]],arguments:[{include:"@whitespace"},{include:"@strings"},[/(@variable)/,{cases:{"@eos":{token:"variable",next:"@popall"},"@default":"variable"}}],[/\\/,{cases:{"@eos":"","@default":""}}],[/./,{cases:{"@eos":{token:"",next:"@popall"},"@default":""}}]],whitespace:[[/\s+/,{cases:{"@eos":{token:"",next:"@popall"},"@default":""}}]],comment:[[/(^#.*$)/,"comment","@popall"]],strings:[[/'$/,"string","@popall"],[/'/,"string","@stringBody"],[/"$/,"string","@popall"],[/"/,"string","@dblStringBody"]],stringBody:[[/[^\\\$']/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}],[/\\./,"string.escape"],[/'$/,"string","@popall"],[/'/,"string","@pop"],[/(@variable)/,"variable"],[/\\$/,"string"],[/$/,"string","@popall"]],dblStringBody:[[/[^\\\$"]/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}],[/\\./,"string.escape"],[/"$/,"string","@popall"],[/"/,"string","@pop"],[/(@variable)/,"variable"],[/\\$/,"string"],[/$/,"string","@popall"]]}}}});

View File

@ -0,0 +1 @@
webpackJsonp([39],{Ej8Q:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"conf",function(){return r}),n.d(t,"language",function(){return i});var r={wordPattern:/(#?-?\d*\.\d\w*%?)|((::|[@#.!:])?[\w-?]+%?)|::|[@#.!:]/g,comments:{blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*\\/\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\/"),end:new RegExp("^\\s*\\/\\*\\s*#endregion\\b.*\\*\\/")}}},i={defaultToken:"",tokenPostfix:".css",ws:"[ \t\n\r\f]*",identifier:"-?-?([a-zA-Z]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*",brackets:[{open:"{",close:"}",token:"delimiter.bracket"},{open:"[",close:"]",token:"delimiter.bracket"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],tokenizer:{root:[{include:"@selector"}],selector:[{include:"@comments"},{include:"@import"},{include:"@strings"},["[@](keyframes|-webkit-keyframes|-moz-keyframes|-o-keyframes)",{token:"keyword",next:"@keyframedeclaration"}],["[@](page|content|font-face|-moz-document)",{token:"keyword"}],["[@](charset|namespace)",{token:"keyword",next:"@declarationbody"}],["(url-prefix)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],["(url)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],{include:"@selectorname"},["[\\*]","tag"],["[>\\+,]","delimiter"],["\\[",{token:"delimiter.bracket",next:"@selectorattribute"}],["{",{token:"delimiter.bracket",next:"@selectorbody"}]],selectorbody:[{include:"@comments"},["[*_]?@identifier@ws:(?=(\\s|\\d|[^{;}]*[;}]))","attribute.name","@rulevalue"],["}",{token:"delimiter.bracket",next:"@pop"}]],selectorname:[["(\\.|#(?=[^{])|%|(@identifier)|:)+","tag"]],selectorattribute:[{include:"@term"},["]",{token:"delimiter.bracket",next:"@pop"}]],term:[{include:"@comments"},["(url-prefix)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],["(url)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],{include:"@functioninvocation"},{include:"@numbers"},{include:"@name"},["([<>=\\+\\-\\*\\/\\^\\|\\~,])","delimiter"],[",","delimiter"]],rulevalue:[{include:"@comments"},{include:"@strings"},{include:"@term"},["!important","keyword"],[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}]],warndebug:[["[@](warn|debug)",{token:"keyword",next:"@declarationbody"}]],import:[["[@](import)",{token:"keyword",next:"@declarationbody"}]],urldeclaration:[{include:"@strings"},["[^)\r\n]+","string"],["\\)",{token:"delimiter.parenthesis",next:"@pop"}]],parenthizedterm:[{include:"@term"},["\\)",{token:"delimiter.parenthesis",next:"@pop"}]],declarationbody:[{include:"@term"},[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}]],comments:[["\\/\\*","comment","@comment"],["\\/\\/+.*","comment"]],comment:[["\\*\\/","comment","@pop"],[/[^*/]+/,"comment"],[/./,"comment"]],name:[["@identifier","attribute.value"]],numbers:[["-?(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?",{token:"attribute.value.number",next:"@units"}],["#[0-9a-fA-F_]+(?!\\w)","attribute.value.hex"]],units:[["(em|ex|ch|rem|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?","attribute.value.unit","@pop"]],keyframedeclaration:[["@identifier","attribute.value"],["{",{token:"delimiter.bracket",switchTo:"@keyframebody"}]],keyframebody:[{include:"@term"},["{",{token:"delimiter.bracket",next:"@selectorbody"}],["}",{token:"delimiter.bracket",next:"@pop"}]],functioninvocation:[["@identifier\\(",{token:"attribute.value",next:"@functionarguments"}]],functionarguments:[["\\$@identifier@ws:","attribute.name"],["[,]","delimiter"],{include:"@term"},["\\)",{token:"attribute.value",next:"@pop"}]],strings:[['~?"',{token:"string",next:"@stringenddoublequote"}],["~?'",{token:"string",next:"@stringendquote"}]],stringenddoublequote:[["\\\\.","string"],['"',{token:"string",next:"@pop"}],[/[^\\"]+/,"string"],[".","string"]],stringendquote:[["\\\\.","string"],["'",{token:"string",next:"@pop"}],[/[^\\']+/,"string"],[".","string"]]}}}});

View File

@ -0,0 +1,391 @@
monaco-editor@0.12.0
MIT
The MIT License (MIT)
Copyright (c) 2016 - present Microsoft Corporation
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
cache-loader@1.2.2
MIT
Copyright JS Foundation and other contributors
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@angular-devkit/build-optimizer@0.3.2
MIT
The MIT License
Copyright (c) 2017 Google, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
source-map@0.5.7
BSD-3-Clause
Copyright (c) 2009-2011, Mozilla Foundation and contributors
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the names of the Mozilla Foundation nor the names of project
contributors may be used to endorse or promote products derived from this
software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
base64-js@1.3.0
MIT
The MIT License (MIT)
Copyright (c) 2014
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
buffer@4.9.1
MIT
The MIT License (MIT)
Copyright (c) Feross Aboukhadijeh, and other contributors.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
node-libs-browser@2.1.0
MIT
(The MIT License)
Copyright (c) 2012 Tobias Koppers
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
webpack@3.11.0
MIT
Copyright JS Foundation and other contributors
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
os-browserify@0.3.0
MIT
The MIT License (MIT)
Copyright (c) 2017 CoderPuppy
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
source-map-support@0.4.18
MIT
The MIT License (MIT)
Copyright (c) 2014 Evan Wallace
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
path-browserify@0.0.0
MIT
This software is released under the MIT license:
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
isarray@1.0.0
MIT
MIT
ieee754@1.1.11
BSD-3-Clause
Copyright (c) 2008, Fair Oaks Labs, Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of Fair Oaks Labs, Inc. nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
process@0.11.10
MIT
(The MIT License)
Copyright (c) 2013 Roman Shtylman <shtylman@gmail.com>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@angular/core@5.2.10
MIT
MIT
@angular/platform-browser@5.2.10
MIT
MIT
@angular/forms@5.2.10
MIT
MIT
@angular/common@5.2.10
MIT
MIT
@angular/platform-browser-dynamic@5.2.10
MIT
MIT
core-js@2.5.6
MIT
Copyright (c) 2014-2018 Denis Pushkarev
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
zone.js@0.8.26
MIT
The MIT License
Copyright (c) 2016-2018 Google, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
webpackJsonp([40],{"s/8m":function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),r.d(e,"conf",function(){return s}),r.d(e,"language",function(){return n});var s={brackets:[],autoClosingPairs:[],surroundingPairs:[]},n={keywords:[],typeKeywords:[],tokenPostfix:".csp",operators:[],symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/child-src/,"string.quote"],[/connect-src/,"string.quote"],[/default-src/,"string.quote"],[/font-src/,"string.quote"],[/frame-src/,"string.quote"],[/img-src/,"string.quote"],[/manifest-src/,"string.quote"],[/media-src/,"string.quote"],[/object-src/,"string.quote"],[/script-src/,"string.quote"],[/style-src/,"string.quote"],[/worker-src/,"string.quote"],[/base-uri/,"string.quote"],[/plugin-types/,"string.quote"],[/sandbox/,"string.quote"],[/disown-opener/,"string.quote"],[/form-action/,"string.quote"],[/frame-ancestors/,"string.quote"],[/report-uri/,"string.quote"],[/report-to/,"string.quote"],[/upgrade-insecure-requests/,"string.quote"],[/block-all-mixed-content/,"string.quote"],[/require-sri-for/,"string.quote"],[/reflected-xss/,"string.quote"],[/referrer/,"string.quote"],[/policy-uri/,"string.quote"],[/'self'/,"string.quote"],[/'unsafe-inline'/,"string.quote"],[/'unsafe-eval'/,"string.quote"],[/'strict-dynamic'/,"string.quote"],[/'unsafe-hashed-attributes'/,"string.quote"]]}}}});

View File

@ -0,0 +1 @@
webpackJsonp([41],{Wrsc:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"conf",function(){return o}),n.d(t,"language",function(){return s});var o={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\$\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],folding:{markers:{start:new RegExp("^\\s*#region\\b"),end:new RegExp("^\\s*#endregion\\b")}}},s={defaultToken:"",tokenPostfix:".cs",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],keywords:["extern","alias","using","bool","decimal","sbyte","byte","short","ushort","int","uint","long","ulong","char","float","double","object","dynamic","string","assembly","is","as","ref","out","this","base","new","typeof","void","checked","unchecked","default","delegate","var","const","if","else","switch","case","while","do","for","foreach","in","break","continue","goto","return","throw","try","catch","finally","lock","yield","from","let","where","join","on","equals","into","orderby","ascending","descending","select","group","by","namespace","partial","class","field","event","method","param","property","public","protected","internal","private","abstract","sealed","static","struct","readonly","volatile","virtual","override","params","get","set","add","remove","operator","true","false","implicit","explicit","interface","enum","null","async","await","fixed","sizeof","stackalloc","unsafe","nameof","when"],namespaceFollows:["namespace","using"],parenFollows:["if","for","while","switch","foreach","using","catch","when"],operators:["=","??","||","&&","|","^","&","==","!=","<=",">=","<<","+","-","*","/","%","!","~","++","--","+=","-=","*=","/=","%=","&=","|=","^=","<<=",">>=",">>","=>"],symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/\@?[a-zA-Z_]\w*/,{cases:{"@namespaceFollows":{token:"keyword.$0",next:"@namespace"},"@keywords":{token:"keyword.$0",next:"@qualified"},"@default":{token:"identifier",next:"@qualified"}}}],{include:"@whitespace"},[/}/,{cases:{"$S2==interpolatedstring":{token:"string.quote",next:"@pop"},"$S2==litinterpstring":{token:"string.quote",next:"@pop"},"@default":"@brackets"}}],[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/[0-9_]*\.[0-9_]+([eE][\-+]?\d+)?[fFdD]?/,"number.float"],[/0[xX][0-9a-fA-F_]+/,"number.hex"],[/0[bB][01_]+/,"number.hex"],[/[0-9_]+/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,{token:"string.quote",next:"@string"}],[/\$\@"/,{token:"string.quote",next:"@litinterpstring"}],[/\@"/,{token:"string.quote",next:"@litstring"}],[/\$"/,{token:"string.quote",next:"@interpolatedstring"}],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],qualified:[[/[a-zA-Z_][\w]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],[/\./,"delimiter"],["","","@pop"]],namespace:[{include:"@whitespace"},[/[A-Z]\w*/,"namespace"],[/[\.=]/,"delimiter"],["","","@pop"]],comment:[[/[^\/*]+/,"comment"],["\\*/","comment","@pop"],[/[\/*]/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,{token:"string.quote",next:"@pop"}]],litstring:[[/[^"]+/,"string"],[/""/,"string.escape"],[/"/,{token:"string.quote",next:"@pop"}]],litinterpstring:[[/[^"{]+/,"string"],[/""/,"string.escape"],[/{{/,"string.escape"],[/}}/,"string.escape"],[/{/,{token:"string.quote",next:"root.litinterpstring"}],[/"/,{token:"string.quote",next:"@pop"}]],interpolatedstring:[[/[^\\"{]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/{{/,"string.escape"],[/}}/,"string.escape"],[/{/,{token:"string.quote",next:"root.interpolatedstring"}],[/"/,{token:"string.quote",next:"@pop"}]],whitespace:[[/^[ \t\v\f]*#((r)|(load))(?=\s)/,"directive.csx"],[/^[ \t\v\f]*#\w.*$/,"namespace.cpp"],[/[ \t\v\f\r\n]+/,""],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]]}}}});

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