<component id="1" name="Dynamics CRM OptionsSet" componentClassID="{2E42D45B-F83C-400F-8D77-61DDE6A7DF29}" description="Executes a custom script." localeId="1033" usesDispositions="false" validateExternalMetadata="True" version="4" pipelineVersion="0" contactInfo="Executes a custom script.;Microsoft Corporation;Microsoft SqlServer v9; © 2004 Microsoft Corporation; All Rights Reserved; http://www.microsoft.com/sql/support;0">
<properties>
<property id="5" name="SourceCode" dataType="System.String" state="cdata" isArray="true" description="Stores the source code of the component" typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None"><arrayElements arrayElementCount="18"><arrayElement dataType="System.String"><![CDATA[\my project\settings.designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA['------------------------------------------------------------------------------
' <autogenerated>
'     This code was generated by a tool.
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' </autogenerated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On



Partial Friend NotInheritable Class MySettings
    Inherits System.Configuration.ApplicationSettingsBase

    Private Shared m_Value As MySettings

    Private Shared m_SyncObject As Object = New Object

    <System.Diagnostics.DebuggerNonUserCode()> _
    Public Shared ReadOnly Property Value() As MySettings
        Get
            If (MySettings.m_Value Is Nothing) Then
                System.Threading.Monitor.Enter(MySettings.m_SyncObject)
                If (MySettings.m_Value Is Nothing) Then
                    Try
                        MySettings.m_Value = New MySettings
                    Finally
                        System.Threading.Monitor.Exit(MySettings.m_SyncObject)
                    End Try
                End If
            End If
            Return MySettings.m_Value
        End Get
    End Property
End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\assemblyinfo.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[Imports System
Imports System.Reflection
Imports 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.

' Review the values of the assembly attributes

<Assembly: AssemblyTitle("ScriptComponent_86882f75d4f445daa179264a79727cf1.vbproj")> 
<Assembly: AssemblyDescription("")> 
<Assembly: AssemblyCompany("Microsoft")> 
<Assembly: AssemblyProduct("ScriptComponent_86882f75d4f445daa179264a79727cf1.vbproj")> 
<Assembly: AssemblyCopyright("Copyright @ Microsoft 2016")> 
<Assembly: AssemblyTrademark("")> 
<Assembly: CLSCompliant(True)> 

<Assembly: ComVisible(False)> 

'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("64096bc8-6202-486e-8aa8-42027473a869")> 

' Version information for an assembly consists of the following four values:
'
'      Major Version
'      Minor Version 
'      Build Number
'      Revision
'
' You can specify all the values or you can default the Build and Revision Numbers 
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>

<Assembly: AssemblyVersion("1.0.0.0")> 
<Assembly: AssemblyFileVersion("1.0.0.0")> 
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\settings.settings]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version='1.0' encoding='iso-8859-1'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)" GeneratedClassNamespace="" GeneratedClassName="MySettings">
  <Profiles>
    <Profile Name="(Default)" />
  </Profiles>
  <Settings />
</SettingsFile>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\scriptcomponent_86882f75d4f445daa179264a79727cf1.vbproj]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- This section defines project-level properties.

       Configuration - Specifies whether the default configuration is Release or Debug.
       Platform - Specifies what CPU the output of this project can run on.
       OutputType - Must be "Library" for VSTA.
       NoStandardLibraries - Set to "false" for VSTA.
       RootNamespace - In C#, this specifies the namespace given to new files.
                       In Visual Basic, all objects are wrapped in this namespace at runtime.
       AssemblyName - Name of the output assembly.
  -->
  <PropertyGroup>
    <ProjectTypeGuids>{A860303F-1F3F-4691-B57E-529FC101A107};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <OutputType>Library</OutputType>
    <RootNamespace>ScriptComponent_86882f75d4f445daa179264a79727cf1.vbproj</RootNamespace>
    <AssemblyName>ScriptComponent_86882f75d4f445daa179264a79727cf1.vbproj</AssemblyName>
    <StartupObject>
    </StartupObject>
    <OptionExplicit>On</OptionExplicit>
    <OptionCompare>Binary</OptionCompare>
    <OptionStrict>Off</OptionStrict>
    <OptionInfer>On</OptionInfer>
    <ProjectGuid>{475F8307-A029-4E64-9FE3-9A0210BF0200}</ProjectGuid>
  </PropertyGroup>
  <!-- This section defines properties that are set when the "Debug" configuration is
       selected.

       DebugSymbols - If true, create symbols (.pdb). If false, do not create symbols.
       Optimize - If true, optimize the build output. If false, do not optimize.
       OutputPath - Output path of the project relative to the project file.
       EnableUnmanagedDebugging - If true, starting the debugger will attach both managed and unmanaged debuggers.
       DefineConstants - Constants defined for the preprocessor.
       Warning Level - Warning level for the compiler.
  -->
  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DefineConstants>
    </DefineConstants>
    <DefineDebug>true</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <DebugSymbols>true</DebugSymbols>
    <Optimize>false</Optimize>
    <OutputPath>bin\</OutputPath>
    <RegisterForComInterop>false</RegisterForComInterop>
    <RemoveIntegerChecks>false</RemoveIntegerChecks>
    <NoWarn>42016,42017,42018,42019,42032</NoWarn>
  </PropertyGroup>
  <!-- This section defines properties that are set when the "Release" configuration is
       selected.

       DebugSymbols - If true, create symbols (.pdb). If false, do not create symbols.
       Optimize - If true, optimize the build output. If false, do not optimize.
       OutputPath - Output path of the project relative to the project file.
       EnableUnmanagedDebugging - If true, starting the debugger will attach both managed and unmanaged debuggers.
       DefineConstants - Constants defined for the preprocessor.
       Warning Level - Warning level for the compiler.
  -->
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DefineConstants>
    </DefineConstants>
    <DefineDebug>false</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <DebugSymbols>false</DebugSymbols>
    <Optimize>true</Optimize>
    <OutputPath>bin\</OutputPath>
    <RegisterForComInterop>false</RegisterForComInterop>
    <RemoveIntegerChecks>false</RemoveIntegerChecks>
    <NoWarn>42016,42017,42018,42019,42032</NoWarn>
  </PropertyGroup>
  <!-- This section enables pre- and post-build steps. However,
       it is recommended that MSBuild tasks be used instead of these properties.
  -->
  <PropertyGroup>
    <PreBuildEvent>
    </PreBuildEvent>
    <PostBuildEvent>
    </PostBuildEvent>
  </PropertyGroup>
  <!-- This sections specifies references for the project. -->
  <ItemGroup>
    <Reference Include="adodb, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    <Reference Include="CozyRoc.Dynamics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL" />
    <Reference Include="CozyRoc.SSISPlus.2008, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL" />
    <Reference Include="Microsoft.SqlServer.ManagedDTS, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL" />
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Web.Services" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.SqlServer.TxScript, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
  </ItemGroup>
  <!-- Visual Basic supports Importing namespaces (equivalent to using statements in C#).-->
  <ItemGroup>
    <Import Include="Microsoft.VisualBasic" />
    <Import Include="System" />
    <Import Include="System.Collections" />
    <Import Include="System.Data" />
    <Import Include="System.Diagnostics" />
    <Import Include="System.Windows.Forms" />
  </ItemGroup>
  <!-- This section defines the user source files that are part of the
       project.

       Compile - Specifies a source file to compile.
       EmbeddedResource - Specifies a .resx file for embedded resources.
       None - Specifies a file that is not to be passed to the compiler (for instance,
              a text file or XML file).
       AppDesigner - Specifies the directory where the application properties files can
                     be found.
  -->
  <ItemGroup>
    <AppDesigner Include="My Project\" />
    <Compile Include="BufferWrapper.vb" />
    <Compile Include="ComponentWrapper.vb" />
    <Compile Include="main.vb" />
    <Compile Include="My Project\AssemblyInfo.vb">
      <SubType>Code</SubType>
    </Compile>
    <EmbeddedResource Include="My Project\Resources.resx">
      <Generator>VbMyResourcesResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.vb</LastGenOutput>
      <CustomToolNamespace>My.Resources</CustomToolNamespace>
    </EmbeddedResource>
    <Compile Include="My Project\Resources.Designer.vb">
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
      <DependentUpon>Resources.resx</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    <None Include="My Project\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.vb</LastGenOutput>
    </None>
    <Compile Include="My Project\Settings.Designer.vb">
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    <!-- Include the default configuration information and metadata files for the add-in.
         These files are copied to the build output directory when the project is
         built, and the path to the configuration file is passed to add-in on the command
         line when debugging.
    -->
  </ItemGroup>
  <!-- Include the build rules for a VB project.-->
  <Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
  <!-- This section defines VSTA properties that describe the host-changable project properties. -->
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{A860303F-1F3F-4691-B57E-529FC101A107}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{C1B21C64-9E6F-4923-A89D-9F958503C1CE}" ApplicationType="usd" Language="vb" TemplatesPath="" />
        <Host Name="SSIS_ScriptComponent" />
        <ProjectClient>
          <HostIdentifier>SSIS_ScriptComponent</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
</Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\bufferwrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services buffer wrappers
' This module defines classes for accessing data flow buffers
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!


Option Strict Off   ' This allows usage of PipelineBuffer typed accessors.

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class InputBuffer
    Inherits ScriptBufferPlus

    Public Sub New(ByVal Component As ScriptComponent, ByVal ObjectID As Integer, ByVal IsInput As Boolean, ByVal Buffer As PipelineBuffer)
        MyBase.New(Component, ObjectID, IsInput, Buffer)
    End Sub

    Public Overrides ReadOnly Property StaticInputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public Overrides ReadOnly Property StaticOutputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public Overloads Function NextRow() As Boolean
        NextRow = MyBase.NextRow()
    End Function

    Public Overloads Function EndOfRowset() As Boolean
        EndOfRowset = MyBase.EndOfRowset
    End Function

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\resources.designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA['------------------------------------------------------------------------------
' <autogenerated>
'     This code was generated by a tool.
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' </autogenerated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On


Namespace My.Resources
    
    '''<summary>
    '''   A strongly-typed resource class, for looking up localized strings, etc.
    '''</summary>
    'This class was auto-generated by the Strongly Typed Resource Builder
    'class via a tool like ResGen or Visual Studio.NET.
    'To add or remove a member, edit your .ResX file then rerun ResGen
    'with the /str option, or rebuild your VS project.
    Class MyResources
        
        Private Shared _resMgr As System.Resources.ResourceManager
        
        Private Shared _resCulture As System.Globalization.CultureInfo
        
        Friend Sub New()
            MyBase.New
        End Sub
        
        '''<summary>
        '''   Returns the cached ResourceManager instance used by this class.
        '''</summary>
        <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)>  _
        Public Shared ReadOnly Property ResourceManager() As System.Resources.ResourceManager
            Get
                If (_resMgr Is Nothing) Then
                    Dim temp As System.Resources.ResourceManager = New System.Resources.ResourceManager("My.Resources.MyResources", GetType(MyResources).Assembly)
                    _resMgr = temp
                End If
                Return _resMgr
            End Get
        End Property
        
        '''<summary>
        '''   Overrides the current thread's CurrentUICulture property for all
        '''   resource lookups using this strongly typed resource class.
        '''</summary>
        <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)>  _
        Public Shared Property Culture() As System.Globalization.CultureInfo
            Get
                Return _resCulture
            End Get
            Set
                _resCulture = value
            End Set
        End Property
    End Class
End Namespace
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\componentwrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services component wrapper
' This module defines the base class for your component
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class UserComponent
    Inherits ScriptComponentPlus

    Public Connections As New Connections(Me)
    Public Variables As New Variables(Me)

    Public Overrides Sub ProcessInput(ByVal InputID As Integer, ByVal Buffer As PipelineBuffer)

        If InputID = MyBase.ComponentMetaData.InputCollection("Input").ID Then
            Input_ProcessInput(New InputBuffer(Me, InputID, True, Buffer))
        End If

    End Sub

    Public Overridable Sub Input_ProcessInput(ByVal Buffer As InputBuffer)

        While Buffer.NextRow()
            Input_ProcessInputRow(Buffer)
        End While

    End Sub

    Public Overridable Sub Input_ProcessInputRow(ByVal Row As InputBuffer)

    End Sub

End Class

Public Class Connections

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

    Public ReadOnly Property CrmConnection() As IDTSConnectionManager100
        Get
            Return ParentComponent.ComponentMetaData.RuntimeConnectionCollection("CrmConnection").ConnectionManager
        End Get
    End Property

End Class

Public Class Variables

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\resources.resx]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?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>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\main.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' COZYROC SQL Server Integration Services user script component
'
' Copyright (c) 2006-2016 COZYROC LLC
' 
' 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.

Imports System
Imports System.ComponentModel
Imports System.Web.Services.Protocols
Imports System.Text.RegularExpressions
Imports System.Collections
Imports System.Collections.Generic
Imports System.Data

Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS
Imports CozyRoc.SqlServer.SSIS.Attributes
Imports CozyRoc.Dynamics.Crm
Imports CozyRoc.Dynamics.Crm2011.OrganizationService
Imports Metadata4 = CozyRoc.Dynamics.Crm.MetadataService
Imports Metadata3 = CozyRoc.Dynamics.Crm3.MetadataService
Imports ADODB


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<SortProperties(New String() { _
    "CrmConnection", "Entity", "Attribute", "LabelColumn", "ValueColumn", "Mapping", _
    "Action", "ReplaceValue", "StateCodeColumn"})> _
<ValidateProperties("Validate")> _
<FilterProperties("GetProperties")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute()> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    Public Const StatusCode As String = "statuscode"


    Public Enum NonMatchAction
        Create
        Replace
        Nullify
        Ignore
        RaiseError
    End Enum    ' NonMatchAction


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Try
            Dim label As String = Convert.ToString(GetBufferValue_(Row.Buffer, m_lcIdx))

            If Not m_dictionary Is Nothing Then
                ' Mapping specified. Use it.
                label = Convert.ToString(m_dictionary(label))
            End If

            If String.IsNullOrEmpty(label) Then
                Exit Sub
            End If

            Dim value As Object = m_values(label)
            If Not value Is Nothing Then
                Row.Buffer(m_vcIdx) = Convert.ToInt32(value)
            Else
                ' Input option value not found.
                Select Case Me.Action
                    Case NonMatchAction.Create
                        Call CreateOptionSet_(Row)

                    Case NonMatchAction.Replace
                        Row.Buffer(m_vcIdx) = Convert.ToInt32(Me.ReplaceValue)

                    Case NonMatchAction.Nullify
                        Call Row.Buffer.SetNull(m_vcIdx)

                    Case NonMatchAction.RaiseError
                        Throw New Exception(String.Format("OptionSet label not found: {0}", label))
                End Select
            End If
        Catch ex As SoapException
            Call FireError_(ex.Detail.InnerXml)
        Catch ex As Exception
            Call FireError_(ex.Message)
        End Try
    End Sub ' Input_ProcessInputRow


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub PreExecute()
        Call MyBase.PreExecute()

        ' Setup CRM service.
        m_connection = CType( _
            Me.Connections.CrmConnection.AcquireConnection(Nothing),  _
            IConnection)
        Call m_connection.Connect()

        ' Load OptionSet values.
        m_values = GetOptionSetValues_()

        Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)

        ' Get input columns index.
        m_lcIdx = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            input.InputColumnCollection(Me.LabelColumn).LineageID)
        m_vcIdx = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            input.InputColumnCollection(Me.ValueColumn).LineageID)

        If Not String.IsNullOrEmpty(Me.StateCodeColumn) Then
            m_sccIdx = Me.HostComponent.BufferManager.FindColumnByLineageID( _
                input.Buffer, _
                input.InputColumnCollection(Me.StateCodeColumn).LineageID)
        End If

        If Not String.IsNullOrEmpty(Me.Mapping) Then
            ' Mapping specified. Load it.
            m_dictionary = LoadMapping_()
        End If
    End Sub ' PreExecute


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub PostExecute()
        Call MyBase.PostExecute()

        Call m_connection.Close()
        m_values = Nothing
        m_dictionary = Nothing
    End Sub ' PostExecute


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function Validate(ByRef errMessage As String) As Boolean
        Dim result As Boolean

        Try
            If String.IsNullOrEmpty(Me.CrmConnection) Then
                Throw New Exception("Select Dynamics CRM Connection.")
            End If

            If String.IsNullOrEmpty(Me.Entity) Then
                Throw New Exception("Select Dynamics CRM entity.")
            End If

            If String.IsNullOrEmpty(Me.Attribute) Then
                Throw New Exception("Select OptionSet attribute.")
            End If

            Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
            If input.IsAttached Then
                If String.IsNullOrEmpty(Me.LabelColumn) Then
                    Throw New Exception("Select label column.")
                End If

                If String.IsNullOrEmpty(Me.ValueColumn) Then
                    Throw New Exception("Select value column.")
                End If

                If Me.Action = NonMatchAction.Create AndAlso _
                    Me.Attribute.Equals(StatusCode, StringComparison.OrdinalIgnoreCase) AndAlso _
                    String.IsNullOrEmpty(Me.StateCodeColumn) Then

                    Throw New Exception("Select statecode column.")
                End If

                ' Setup used input columns.
                Call input.InputColumnCollection.RemoveAll()
                Dim virtInput As IDTSVirtualInput100 = input.GetVirtualInput()
                Dim virtColl As IDTSVirtualInputColumnCollection100 = virtInput.VirtualInputColumnCollection
                Call virtInput.SetUsageType( _
                    virtColl(Me.LabelColumn).LineageID, _
                    DTSUsageType.UT_READONLY)
                Call virtInput.SetUsageType( _
                    virtColl(Me.ValueColumn).LineageID, _
                    DTSUsageType.UT_READWRITE)
                If Not String.IsNullOrEmpty(Me.StateCodeColumn) Then
                    Call virtInput.SetUsageType( _
                        virtColl(Me.StateCodeColumn).LineageID, _
                        DTSUsageType.UT_READONLY)
                End If
            End If

            ' Store connection information in the runtime connection collection, too.
            ' Cannot directly use RuntimeConnectionCollection in the property get/set
            ' because of issues with multi-threading.
            Me.ComponentMetaData.RuntimeConnectionCollection("CrmConnection").ConnectionManagerID = Me.CrmConnection

            result = True
        Catch ex As Exception
            result = False
            errMessage = ex.Message
        End Try

        Validate = result
    End Function    'Validate


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of entities in the currently selected Dynamics CRM connection.
    Public Function GetEntityList() As String()
        Dim result() As String

        Dim connection As IConnection = CType( _
            Me.DesignConnections(Me.CrmConnection).AcquireConnection(Nothing),  _
            IConnection)
        Call connection.Connect()

        Try
            result = connection.GetEntityList(2)  ' 0 - None
            Call Array.Sort(result)
        Finally
            Call connection.Close()
        End Try

        GetEntityList = result
    End Function    ' GetEntityList


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of OptionSet attributes in the currently selected Dynamics CRM entity.
    Public Function GetOptionSetList() As String()
        If String.IsNullOrEmpty(Me.Entity) Then
            Throw New Exception("Select Dynamics CRM Entity.")
        End If

        If m_attributes.Contains(Me.Entity) Then
            Return CType(m_attributes(Me.Entity), String())
        End If

        ' Load entity's OptionSet attributes.
        Dim result As New ArrayList()

        Dim connection As IConnection = CType( _
            Me.DesignConnections(Me.CrmConnection).AcquireConnection(Nothing),  _
            IConnection)
        Call connection.Connect()

        Try
            Dim service As Object = connection.GetService(0)    ' 0 - CRM Service
            ' 11 - AttributeTypeCode.Picklist (CRM 2011)
            ' 12 - AttributeType.Picklist (CRM 4)
            Dim pickListType As Integer = Convert.ToInt32(IIf(TypeOf service Is OrganizationServiceClient, 11, 12))
            ' 13 - AttributeTypeCode.Status (CRM 2011)
            ' 15 - AttributeType.Status (CRM 4)
            Dim statusType As Integer = Convert.ToInt32(IIf(TypeOf service Is OrganizationServiceClient, 13, 15))

            Dim entity As IEntity = connection.GetEntity(Me.Entity)
            Dim attributes() As IAttribute = entity.GetAttributes()
            For Each attribute As IAttribute In attributes
                If attribute.CrmType = pickListType OrElse attribute.CrmType = statusType Then
                    Call result.Add(attribute.Name)
                End If
            Next

            Call result.Sort()
        Finally
            Call connection.Close()
        End Try

        m_attributes(Me.Entity) = result.ToArray(GetType(String))

        GetOptionSetList = CType(m_attributes(Me.Entity), String())
    End Function    ' GetOptionSetList


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of current properties based on current state.
    Public Function GetProperties() As String()
        Dim result As New ArrayList

        ' Setup static.
        Call result.Add("CrmConnection")
        Call result.Add("Entity")
        Call result.Add("Attribute")
        Call result.Add("LabelColumn")
        Call result.Add("ValueColumn")
        Call result.Add("Mapping")
        Call result.Add("Action")

        ' Setup dynamic.
        Select Case Me.Action
            Case NonMatchAction.Create
                If String.Equals( _
                    Me.Attribute, _
                    StatusCode, _
                    StringComparison.OrdinalIgnoreCase) Then

                    Call result.Add("StateCodeColumn")
                End If

            Case NonMatchAction.Replace
                Call result.Add("ReplaceValue")
        End Select

        Return CType(result.ToArray(GetType(String)), String())
    End Function    ' GetProperties


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category(" Settings")> _
    <Description("Select Dynamics CRM Connection Manager.")> _
    <Connection("CrmConnectionType")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property CrmConnection() As String
        Get
            CrmConnection = m_crmConnection
        End Get
        Set(ByVal value As String)
            If m_crmConnection <> value Then
                m_crmConnection = value
                Me.Entity = String.Empty
            End If
        End Set
    End Property    ' CrmConnection


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category(" Settings")> _
    <Description("Select Dynamics CRM entity.")> _
    <List("GetEntityList")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property Entity() As String
        Get
            Entity = m_entity
        End Get
        Set(ByVal value As String)
            If m_entity <> value Then
                m_entity = value
                Me.Attribute = String.Empty
            End If
        End Set
    End Property    ' Entity


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category(" Settings")> _
    <Description("Select OptionSet attribute.")> _
    <List("GetOptionSetList")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property Attribute() As String
        Get
            Attribute = m_attribute
        End Get
        Set(ByVal value As String)
            m_attribute = value
        End Set
    End Property    ' Attribute


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category(" Settings")> _
    <Description("Select column containing OptionSet label.")> _
    <InputVirtualColumn()> _
    Public Property LabelColumn() As String
        Get
            LabelColumn = m_labelCol
        End Get
        Set(ByVal value As String)
            m_labelCol = value
        End Set
    End Property    ' LabelColumn


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category(" Settings")> _
    <Description("Select column containing OptionSet value.")> _
    <InputVirtualColumn()> _
    Public Property ValueColumn() As String
        Get
            ValueColumn = m_valueCol
        End Get
        Set(ByVal value As String)
            m_valueCol = value
        End Set
    End Property    ' ValueColumn


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category(" Settings")> _
    <Description("Select variable containing mapping (string, dictionary, recordset). Optional.")> _
    <Variable()> _
    Public Property Mapping() As String
        Get
            Mapping = m_mapping
        End Get
        Set(ByVal value As String)
            m_mapping = value
        End Set
    End Property    ' Mapping


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("No match")> _
    <Description("Select how to handle non-matching values.")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property Action() As NonMatchAction
        Get
            Action = m_action
        End Get
        Set(ByVal value As NonMatchAction)
            m_action = value
        End Set
    End Property    ' Action


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("No match")> _
    <Description("Specifies replace value to use when there is no match.")> _
    Public Property ReplaceValue() As Integer
        Get
            ReplaceValue = m_replaceValue
        End Get
        Set(ByVal value As Integer)
            m_replaceValue = value
        End Set
    End Property    ' ReplaceValue


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("No match")> _
    <Description("Select column containing state code.")> _
    <InputVirtualColumn()> _
    Public Property StateCodeColumn() As String
        Get
            StateCodeColumn = m_stateCodeCol
        End Get
        Set(ByVal value As String)
            m_stateCodeCol = value
        End Set
    End Property    ' StateCodeColumn
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private ReadOnly Property CrmConnectionType() As String()
        Get
            CrmConnectionType = New String() {"DYNAMICS-CRM"}
        End Get
    End Property    ' CrmConnectionType


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub FireError_(ByVal message As String)
        Dim cancel As Boolean = False
        Call MyBase.ComponentMetaData.FireError( _
            0, _
            "Dynamics CRM OptionSet", _
            message, _
            String.Empty, _
            0, _
            cancel)
    End Sub ' FireError_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetVariable_(ByVal varName As String) As Object
        Dim result As Object
        Dim vars As IDTSVariables100 = Nothing

        Call Me.VariableDispenser.LockOneForRead(varName, vars)
        Try
            result = vars(varName).Value
        Finally
            Call vars.Unlock()
        End Try

        GetVariable_ = result
    End Function    ' GetVariable_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetBufferValue_( _
        ByVal buffer As Microsoft.SqlServer.Dts.Pipeline.PipelineBuffer, _
        ByVal index As Integer) As Object

        Dim result As Object = Nothing

        If index <> -1 AndAlso Not buffer.IsNull(index) Then
            result = buffer(index)
        End If

        GetBufferValue_ = result
    End Function    ' GetBufferValue_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Load OptionSet attribute values.
    Private Function GetOptionSetValues_() As Hashtable
        Dim result As New Hashtable

        Dim service As Object = m_connection.GetService(0)   ' 0 - CRM Service
        Dim service2011 As OrganizationServiceClient = TryCast( _
            service,  _
            OrganizationServiceClient)
        If Not service2011 Is Nothing Then
            ' CRM 2011.
            Dim req As New OrganizationRequest()
            req.RequestName = "RetrieveAttribute"
            req("MetadataId") = New Guid()
            req("RetrieveAsIfPublished") = False
            req("EntityLogicalName") = Me.Entity
            req("LogicalName") = Me.Attribute

            Dim res As OrganizationResponse = service2011.Execute(req)
            Dim enumMeta As EnumAttributeMetadata = CType( _
                res("AttributeMetadata"),  _
                EnumAttributeMetadata)
            For Each optionMeta As OptionMetadata In enumMeta.OptionSet.Options
                ' Find invariant label.
                Dim invariantIndex As Integer = -1
                Dim count As Integer = optionMeta.Label.LocalizedLabels.Count
                For index As Integer = 0 To count - 1
                    Dim label As LocalizedLabel = optionMeta.Label.LocalizedLabels(index)
                    If label.LanguageCode = 1033 Then
                        invariantIndex = index
                        Exit For
                    End If
                Next

                If invariantIndex = -1 Then
                    ' Invariant label not found.
                    invariantIndex = 0
                End If

                result(optionMeta.Label.LocalizedLabels(invariantIndex).Label) = optionMeta.Value.Value
            Next
        Else
            Dim metadata As Object = m_connection.GetService(1) ' 1 - Metadata Service.
            Dim metadata4 As Metadata4.MetadataService = TryCast( _
                metadata,  _
                Metadata4.MetadataService)
            If Not metadata4 Is Nothing Then
                ' CRM 4.
                Dim req4 As New Metadata4.RetrieveAttributeRequest()
                req4.EntityLogicalName = Me.Entity
                req4.LogicalName = Me.Attribute

                Dim res4 As Metadata4.RetrieveAttributeResponse = CType( _
                    metadata4.Execute(req4),  _
                    Metadata4.RetrieveAttributeResponse)
                Dim options4() As Metadata4.Option = CType( _
                    res4.AttributeMetadata,  _
                    Metadata4.PicklistAttributeMetadata).Options

                For Each option4 As Metadata4.Option In options4
                    ' Find invariant label.
                    Dim invariantIndex As Integer = -1
                    Dim count As Integer = option4.Label.LocLabels.Length
                    For index As Integer = 0 To count - 1
                        Dim label As Metadata4.LocLabel = option4.Label.LocLabels(index)
                        If label.LanguageCode.Value = 1033 Then
                            invariantIndex = index
                            Exit For
                        End If
                    Next

                    If invariantIndex = -1 Then
                        ' Invariant label not found.
                        invariantIndex = 0
                    End If

                    result(option4.Label.LocLabels(invariantIndex).Label) = option4.Value.Value
                Next
            Else
                Dim metadata3 As Metadata3.MetadataService = TryCast(metadata, Metadata3.MetadataService)
                If Not metadata3 Is Nothing Then
                    ' CRM 3.
                    Dim options3() As Metadata3.Option = CType( _
                        metadata3.RetrieveAttributeMetadata(Me.Entity, Me.Attribute),  _
                        Metadata3.PicklistAttributeMetadata).Options

                    For Each option3 As Metadata3.Option In options3
                        result(option3.Description) = option3.OptionValue
                    Next
                Else
                    Throw New Exception("Unhandled service object.")
                End If
            End If
        End If

        GetOptionSetValues_ = result
    End Function    ' GetOptionSetValues_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Create OptionSet for specifed input and output columns.
    Private Sub CreateOptionSet_(ByVal row As InputBuffer)
        Dim name As String = Convert.ToString(GetBufferValue_(row.Buffer, m_lcIdx))
        Dim value As Object = GetBufferValue_(row.Buffer, m_vcIdx)
        Dim isStatusCode As Boolean = Me.Attribute.Equals( _
            StatusCode, _
            StringComparison.OrdinalIgnoreCase)

        Dim service As Object = m_connection.GetService(0)   ' 0 - CRM Service
        Dim service2011 As OrganizationServiceClient = TryCast( _
            service,  _
            OrganizationServiceClient)
        If Not service2011 Is Nothing Then
            ' CRM 2011.
            Dim req As New OrganizationRequest()
            req.RequestName = Convert.ToString(IIf( _
                isStatusCode, _
                "InsertStatusValue", _
                "InsertOptionValue"))

            req("EntityLogicalName") = Me.Entity
            req("AttributeLogicalName") = Me.Attribute

            ' Setup label.
            Dim locLabel2011 As New LocalizedLabel()
            locLabel2011.Label = name
            locLabel2011.LanguageCode = 1033
            Dim label2011 As New Label()
            label2011.LocalizedLabels = New LocalizedLabelCollection()
            label2011.LocalizedLabels.Add(locLabel2011)
            req("Label") = label2011

            If isStatusCode Then
                req("StateCode") = Convert.ToInt32(GetBufferValue_(row.Buffer, m_sccIdx))
            End If

            If Not value Is Nothing Then
                ' Value provided. Use it.
                req("Value") = Convert.ToInt32(value)
            End If

            Dim res2011 As OrganizationResponse = service2011.Execute(req)
            If value Is Nothing Then
                ' Set new OptionSet value.
                row.Buffer(m_vcIdx) = res2011("NewOptionValue")
            End If
        Else
            Dim metadata As Object = m_connection.GetService(1) ' 1 - Metadata Service.
            Dim metadata4 As Metadata4.MetadataService = TryCast( _
                metadata,  _
                Metadata4.MetadataService)
            If Not metadata4 Is Nothing Then
                ' CRM 4.

                ' Setup label.
                Dim locLabel4 As New Metadata4.LocLabel()
                locLabel4.Label = name
                locLabel4.LanguageCode = New Metadata4.CrmNumber()
                locLabel4.LanguageCode.Value = 1033

                If isStatusCode Then
                    Dim isvReq As New Metadata4.InsertStatusValueRequest()
                    isvReq.EntityLogicalName = Me.Entity
                    isvReq.AttributeLogicalName = Me.Attribute
                    isvReq.Label = New Metadata4.CrmLabel()
                    isvReq.Label.LocLabels = New Metadata4.LocLabel() {locLabel4}
                    isvReq.StateCode = New Metadata4.CrmNumber()
                    isvReq.StateCode.Value = Convert.ToInt32(GetBufferValue_(row.Buffer, m_sccIdx))

                    If Not value Is Nothing Then
                        ' Value provided. Use it.
                        isvReq.Value = New Metadata4.CrmNumber()
                        isvReq.Value.Value = Convert.ToInt32(value)
                    End If

                    Dim isvRes As Metadata4.InsertStatusValueResponse = CType( _
                        metadata4.Execute(isvReq),  _
                        Metadata4.InsertStatusValueResponse)
                    If value Is Nothing Then
                        ' Set new OptionSet value.
                        row.Buffer(m_vcIdx) = isvRes.NewOptionValue
                    End If
                Else
                    Dim iovReq As New Metadata4.InsertOptionValueRequest()
                    iovReq.EntityLogicalName = Me.Entity
                    iovReq.AttributeLogicalName = Me.Attribute
                    iovReq.Label = New Metadata4.CrmLabel()
                    iovReq.Label.LocLabels = New Metadata4.LocLabel() {locLabel4}

                    If Not value Is Nothing Then
                        ' Value provided. Use it.
                        iovReq.Value = New Metadata4.CrmNumber()
                        iovReq.Value.Value = Convert.ToInt32(value)
                    End If

                    Dim iovRes As Metadata4.InsertOptionValueResponse = CType( _
                        metadata4.Execute(iovReq),  _
                        Metadata4.InsertOptionValueResponse)
                    If value Is Nothing Then
                        ' Set new OptionSet value.
                        row.Buffer(m_vcIdx) = iovRes.NewOptionValue
                    End If
                End If
            Else
                Dim metadata3 As Metadata3.MetadataService = TryCast(metadata, Metadata3.MetadataService)
                If Not metadata3 Is Nothing Then
                    ' CRM 3 - doesn't support it.
                    Throw New Exception("Dynamics CRM 3 doesn't support OptionSet value insert.")
                Else
                    Throw New Exception("Unhandled service object.")
                End If
            End If
        End If
    End Sub ' CreateOptionSet_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function LoadMapping_() As IDictionary
        Dim mapping As Object = GetVariable_(Me.Mapping)
        Dim mappingDict As New Hashtable
        Dim result As IDictionary = mappingDict

        If TypeOf mapping Is IDictionary Then
            result = CType(mapping, IDictionary)
        ElseIf TypeOf mapping Is IDictionary(Of String, String) Then
            Dim genericDict As IDictionary(Of String, String) = CType( _
                mapping,  _
                IDictionary(Of String, String))
            For Each pair As KeyValuePair(Of String, String) In genericDict
                mappingDict(pair.Key) = pair.Value
            Next
        ElseIf TypeOf mapping Is String Then
            ' Mappings are separated with [CR][LF].
            ' Each mapping is combination [key]=[value].
            Dim mappingList() As String = Regex.Unescape(CStr(mapping)).Split( _
                New String() {"\r\n"}, _
                StringSplitOptions.RemoveEmptyEntries)
            For Each pair As String In mappingList
                Dim keyValue() As String = pair.Split(New Char() {Chr(61)}, 2)  ' 61 (=)

                If (keyValue.Length < 2) Then
                    ' Not a valid item.
                    Continue For
                End If

                mappingDict(keyValue(0)) = keyValue(1)
            Next
        ElseIf TypeOf mapping Is Recordset Then
            ' Mapping is recordset. Use first and second fields.
            Dim rs As Recordset = CType(mapping, Recordset)
            If rs.Fields.Count < 2 Then
                Throw New Exception("Mapping.Recordset should contain at least 2 columns.")
            End If

            If Not (rs.BOF AndAlso rs.EOF) Then
                Call rs.MoveFirst()
            End If

            While Not rs.EOF
                mappingDict(Convert.ToString(rs.Fields(0).Value)) = Convert.ToString(rs.Fields(1).Value)
                Call rs.MoveNext()
            End While
        ElseIf TypeOf mapping Is DataSet Then
            ' Variable contains ADO.NET DataSet. Use first and second fields.
            Dim dt As DataTable = CType(mapping, DataSet).Tables(0)
            If dt.Columns.Count < 2 Then
                Throw New Exception("Mapping.DataSet should contain at least 2 columns.")
            End If

            For Each row As DataRow In dt.Rows
                mappingDict(row(0)) = row(1)
            Next
        Else
            Throw New Exception("Mapping parameter must contain IDictionary, String, Recordset or DataSet.")
        End If

        LoadMapping_ = result
    End Function    ' LoadMapping_
#End Region ' Internals


#Region "Attributes"
    Private m_crmConnection As String
    Private m_entity As String
    Private m_attribute As String
    Private m_labelCol As String
    Private m_valueCol As String
    Private m_mapping As String
    Private m_action As NonMatchAction
    Private m_replaceValue As Integer
    Private m_stateCodeCol As String

    Private m_connection As IConnection
    Private m_attributes As New Hashtable
    Private m_values As Hashtable
    Private m_lcIdx As Integer
    Private m_vcIdx As Integer
    Private m_sccIdx As Integer
    Private m_dictionary As IDictionary
#End Region ' Attributes

End Class   ' ScriptMain
]]></arrayElement></arrayElements></property>
<property id="6" name="BinaryCode" dataType="System.String" state="cdata" isArray="true" description="Stores the binary representation of the component" typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None"><arrayElements arrayElementCount="2"><arrayElement dataType="System.String"><![CDATA[\bin\scriptcomponent_86882f75d4f445daa179264a79727cf1.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v
ZGUuDQ0KJAAAAAAAAABQRQAATAEDAF0UhVgAAAAAAAAAAOAAAiELAQgAAFgAAAAMAAAAAAAAfncA
AAAgAAAAgAAAAABAAAAgAAAAAgAABAAAAAAAAAAEAAAAAAAAAADAAAAAAgAAAAAAAAIAQIUAABAA
ABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAACx3AABPAAAAAIAAALgJAAAAAAAAAAAAAAAAAAAA
AAAAAKAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAAhFcAAAAgAAAAWAAAAAIA
AAAAAAAAAAAAAAAAACAAAGAucnNyYwAAALgJAAAAgAAAAAoAAABaAAAAAAAAAAAAAAAAAABAAABA
LnJlbG9jAAAMAAAAAKAAAAACAAAAZAAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAABg
dwAAAAAAAEgAAAACAAUA0DYAAFxAAAABAAAAAAAAAFAgAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAAADOyu++AQAAAJEAAABsU3lzdGVtLlJlc291cmNlcy5S
ZXNvdXJjZVJlYWRlciwgbXNjb3JsaWIsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5I1N5c3RlbS5SZXNvdXJjZXMuUnVudGlt
ZVJlc291cmNlU2V0AgAAAAAAAAAAAAAAUEFEUEFEULQAAAAeAigBAAAKKh4CKAQAAAoqpnMGAAAK
gAEAAARzBwAACoACAAAEcwgAAAqAAwAABHMJAAAKgAQAAAQqAAATMAEACwAAAAEAABF+AQAABG8K
AAAKKgATMAEACwAAAAIAABF+AgAABG8LAAAKKgATMAEACwAAAAMAABF+AwAABG8MAAAKKgATMAEA
CwAAAAQAABF+BAAABG8NAAAKKgATMAIADQAAAAUAABECAygRAAAKKBIAAAoqAAAAEzABAAcAAAAG
AAARAigTAAAKKgATMAEACwAAAAcAABHQBQAAAigUAAAKKgATMAEABwAAAAgAABECKBUAAAoqABMw
AQAQAAAACQAAEQKMAQAAGy0GKAEAACsqAioTMAIAEAAAAAoAABEDEgD+FQIAABsGgQIAABsqHgIo
FwAACioTMAIAKAAAAAsAABECexkAAApvGgAACgsHjAMAABstEigCAAArCwJ7GQAACgdvGwAACgcq
SgIoFwAACgJzHAAACn0ZAAAKKgAyAgMEBQ4EKB4AAAoqAAAAEzABAAcAAAAMAAARFo0fAAABKgAT
MAEABwAAAA0AABEWjR8AAAEqABMwAQAJAAAADgAAEQIoHwAACgoGKgAAABMwAQAJAAAADwAAEQIo
IAAACgoGKgAAAH4CKCIAAAoCAnMaAAAGfQYAAAQCAnMcAAAGfQcAAAQqtgMCKCMAAApvJAAACnIB
AABwbyUAAApvJgAACjMPAgIDFwRzEQAABm8YAAAGKgAASisHAgNvGQAABgNvFAAABi3xKgAGKgAA
OgIoFwAACgIDfQgAAAQqABMwAgAgAAAAEAAAEQJ7CAAABG8jAAAKbycAAApyDQAAcG8oAAAKbykA
AAoqOgIoFwAACgIDfQkAAAQqAEoCKBYAAAYCcyoAAAp9FQAABCoAGzADADEBAAARAAARAgNvKwAA
CgJ7FwAABG86AAAGKBEAAAooLAAACgoCexoAAAQsFwJ7GgAABAZvLQAACigRAAAKKCwAAAoKBigu
AAAKLAXd5wAAAAJ7FgAABAZvLwAACigRAAAKCwcsJgNvKwAACgJ7GAAABAcoEQAACigwAAAKjCoA
AAFvMQAACt2sAAAAAm8xAAAGRQUAAAACAAAACwAAAC4AAABSAAAAQQAAACtQAgNvPAAABitHA28r
AAAKAnsYAAAEAm8zAAAGKDIAAAqMKgAAAW8xAAAKKyQDbysAAAoCexgAAARvMwAACisRcikAAHAG
KDQAAApzNQAACnreOSUoNgAACgwCCG83AAAKbzgAAApvOAAABig5AAAK3holKDYAAAoNAglvOgAA
Cm84AAAGKDkAAAreACoAAAABGAAAAAAAAPf3AB8nAAABAAAAAPcWARooAAABEzAFAA0BAAASAAAR
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
bAAAAHQUAAAjfgAA4BQAAKAaAAAjU3RyaW5ncwAAAACALwAApAYAACNVUwAkNgAAEAAAACNHVUlE
AAAANDYAACgKAAAjQmxvYgAAAAAAAAACAAABVx2iCQkPAAAA+gEzABYAAAEAAACOAAAADgAAACQA
AABEAAAAHgAAAN8AAAAGAAAAWQAAACkAAAAHAAAAFQAAAB8AAAAQAAAAAQAAAA4AAAABAAAAAwAA
AAMAAAADAAAAAABiGgEAAAAAAAoAuAGOAQoA7AHOAQYA/AH1AQoAVAKOAQYA0gL1AQoAVAMqAw4A
pgOPAxIA9QPUAxYAJgTUAw4AwQSPAxoAcgVKBQYAfgdrBwYAsQdrBw4ASwg2CAYABwn1AQYATgk9
CQYAewlmCR4A4gnNCR4ALwoZCh4ASAoZCh4AdQpdCgYAnwqMCgoA3gq3CgoA9goTAB4AKwsOCwYA
YAtACwYAfgv1AQYAogv1AQoAuwsTAAYA/wvgCwYAEwz1ARIAGgzUAwYAJwz1ASIAigxhDCIAuQxh
DCIA5AxhDCIAAQ1hDCIARA1hDCYApQ2HDQYAsw31AQYAyA31AQYA5g31AQoABA63CioAKw4gDhYA
gw7UAyIApw5hDCIAzg5hDCIABQ9hDCIAQg9hDCIAZg9hDAYAiQ/1ASIA1Q9hDCIA7w9hDC4AAgFA
EC4AdhBAEAYAiBD1AQYAkxBrBw4AnRA2CA4AqBA2CDIAAhHVEAoAHBETAAoAZRG3ChoAjRFKBRoA
nhFKBRoA3BFKBTIA+hHVEDIAEBLVEDIAJBLVEDIAORLVEDIASBLVEDIAfBJXEjIAjBJXEjIAkxJX
EjIArBJXEjIAxhJXEjIAfBLPEjIAjBLPEgYA9RL1AQYA+hL1AQYAFRP1ATIAJRPVEDIAURPVEDIA
YRPVEAYAqROOEzIA8RNXEjIACRRXEjIAIBRXEjIASBRXEjIAYhRXEjIAeRRXEjIAIBTPEjIASBTP
EjIAvRRXEjIA1hRXEjIA8BRXEjIACRVXEgYAqBWOEwYAthWOEzYAyxXFFToA4RXVFToA6xXVFQYA
8xWOEwYAARZrBwYADRaOEwYARhb1AQoAWha3Ch4AhRZmFgYAlBb1AQYArRb1ATYAshbFFTYAvRbF
FTYA6RbFFToA7xbVFToA9xbVFToAFhfVFToANxfVFToAUhfVFRIAbRfUAw4AtheUFw4A0BeUFw4A
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
TAAPCosATADWC/ICTADIARMA8QDIAf8COQDIAa8AAQGGBL4AAQGOBL4ACQHIAf8CUQDIARMAQQCj
DA8DEQHQDBUDGQHxDBsDIQH6DGgAEQEkDSIDKQHxDCgDMQFdDeYAYQDIARMAOQC9DTQDSQHfAjkD
aQDxDD4D+QDQDUMDYQDxDD4DSQHeDUgDSQDsDU0DSQHeDVMDSQD1DR4B+QD9DVgDQQHIAQ4BWQEQ
Dl4DOQEzDmUDYQE+DnEAWQFLDhcAQQFdDnEAQQC2BRMAWQBpDj4DcQB7DhMAUQCVDngDaQG8Dn4D
IQG9DWgAIQHrDoQDeQHxDIoDgQEYD2gAcQEmD5EDQQDBBRMAcQA8DxMAIQF6D74A+QC9Ap0DeQGa
DxMAIQGkD6UDkQG0D6sDiQHxDLEDoQEYD2gAkQH8D7gDMQEJEA4BUQBgENEDsQHxDNcDuQFpDj4D
cQDhBd4DwQGOEOQDYQCwEGMAyQHIARMAcQC5EPwD6QEoEQEEcQAsEQgE2QE2EQ8E0QFEEWgA0QFQ
EXEAyQFZERYEyQGOEBMAyQFdERsEYQDsDSME+QC9AkUE8QFvEVgE+QB9EfAAEQGDEWsEQQC3EXYE
AQLNEXwE+QHxDIUECQIPCowE+QHsERMASQDzEZgESQDxDPwDGQLIARMAGQIFEw4BGQLsDaIE4QEd
E6gEIQLxDCMBEQI3E7EEiQJFE7cEKQJXE74EkQJ6E8QEXACwE2gAXADxDNMEMQK6E2gAMQJXE3EA
KQIPCtkEZAAPCosASQLIARMASQLLEw4BSQLhEw4BOQIdE+kEUQIyFPIEwQJFE/gEQQJXE/8EyQJr
FAUFWQK6EwwF0QIPCmgAWQJXE3EAQQIPCgwFYQKDFBIF4QJFExoFaQKdFHEAaQKtFGgAMQLIARMA
MQIjFQ4BMQItFR4BkQLIARMAmQLIARMAkQI+FXkFXABZEfICWQLIARMAWQIjFQ4B0QLIARMAWQIt
FYAF0QLWCx4B6QLIARMA6QLLEw4B6QJSFQ4ByQLIARMA6QIjFYcF6QJXE/8EyQJrFY4F6QJ5FYAF
6QKHFQwF6QLWC4AF6QIPCgwF8QKVFWgA+QLIARMA+QLLEw4B+QJSFQ4B+QIjFYcF+QJXE/8E+QLW
C4AF+QIPCgwFAQOVFWgAdAAbFtsFfAApFosAhAA1FosAhAAPCvoFOQM9Fr4ASQNSFhMAUQPfAjkD
WQOLFv8F+QCnFgQG+QCnFg4GcQPEFhYGeQOwE2gAcQPPFr4AcQPXFr4AcQPfFhMAeQPxDBwGgQMP
CowEcQM9FhMAiQMLFyMGkQPxDCkGIQMrFzAGoQOwE2gAIQNkFzYGqQMbFjwGOQMpFowEKQPxDPwD
sQPIARMAuQPIAQ4BwQPIAQ4ByQPIAZ8G0QPIAREH4QPIAQ4B6QPIAQ4B8QPIAQ4B+QPIAQ4BAQTI
ARMACQTIARMAKQDDGCoJgQDIATAJkQDIARMAGQTpGE0JGQTvGE0JIQTIARMAKQTIAR4BMQTIARMA
OQTIAQ4BQQTIAQ4BSQTIAQ4BUQTIAQ4BWQTIAQ4BYQTIAQ4BaQTIAQ4BcQTIAQ4BDgAoAPMACABw
AFkBCAB0AF4BCAB4AGMBCAB8AGgBCACAAG0BKQCDAAICLgDTBgQDLgALAbYJLgDjBtwJLgDrBhkK
LgDrAAQDLgDbBrwJLgDzBgQDLgD7BtwJLgCzBlcJLgC7BmAJLgDDBn8JLgDLBowJQAArAF4BQAAT
AKsBQwATAKsBQwAbALoBSQCDACACYwATAKsBYwAbALoBaQCDABMCgAArAF4BgwAbALoBgwB7AF4B
gwBzAF4BiQCDADQCoAArAF4BowDDAH0CowATAKsBwAArAF4BwwDrAAQDwwATAKsB4AArAF4B4wAL
AQQDAAErAF4BAAETAKsBAwELAQQDIAETAKsBIAErAF4BKQFbBu4HKQFjBk8HKQFLBqsBKQFrBtcH
QAErAF4BQAETAKsBSQFLBqsBSQFTBhsISQFbBi4ISQFjBk8HYAErAF4BYAETAKsBYwFDBqUGYwE7
BpEGYwELAQQDYwErBl4BYwEzBn4GaQFbBi4HaQFTBhgHaQFjBk8HaQFLBqsBgAErAF4BiQFzBl4B
iQFjBk8HiQFbBk8IoAErAF4BqQFjBk8HqQFbBn4IqQFzBl4BwAETAKsBwAErAF4ByQFjBk8HyQF7
Bl4ByQFbBtcI4AErAF4B6QFLBqsB6QFbBqgH6QFjBpoHAAIrAF4BAAITAKsBCQJbBl4HCQJjBpoH
KQJjBpoHKQJzBl4BKQJbBq0IaQITAEQJiQITAEQJqQKrBl4BQAMLAQQDgAMLAQQD7gHzAfgB/QFN
AlECXAJhAnACcAL4AgoDCgNNAk0CLwNrA5cDwAPwAykETgRhAmECYQJhAmECYQJfBFECYQJkBE0C
kASdBCEFlgVCBjgJPwlSCQQAAQAGAAUABwAGAAkACAALAAkADQATAA4AFQAAAOwBTwAAAKUCVAAA
AFQCWQAAALECXgAAAG0DmAAAAJoEwgAAAK0EwgAAAJ0F6wAAAJ0FTAEAAKAITAEAAKcITAEAALEI
TAEAAL0ITAEAAMkITAEAANEIUAEAANgIVQEAAOUITAEAAPUIwgAAAE4JigEAAMUJjwEAAL8JoAEC
AAQAAwACAAUABQACAAYABwACAAcACQACAA8ACwACABIADQACABMADwACABsAEQACACUAEwABACYA
EwACACcAFQABACgAFQACACkAFwABACoAFwABACwAGQACACsAGQACAC0AGwABAC4AGwACAC8AHQAB
ADAAHQACADEAHwABADIAHwACADMAIQABADQAIQACADUAIwABADYAIwACADcAJQACAD8AJwACAEAA
KQABAEEAKQACAEQAKwB1AHUAiADSAdkB4AHnAd8C5gL5A8oE4gTGBc4F5QXyBQSAAAABAAAAAAAA
AAAAAAAAALwAAAACAAAAAAAAAAAAAAABAAoAAAAAAAgAAAAAAAAAAAAAAAoAEwAAAAAAAQAAAAAA
AAAAAAAAnQB5AwAAAAAKAAAAAAAAAAAAAACmALcDAAAAAAoAAAAAAAAAAAAAAKYABQQAAAAACgAA
AAAAAAAAAAAApgAnBQAAAAACAAAAAAAAAAAAAAABAPUBAAAAAAoAAAAAAAAAAAAAAKYAPQwAAAAA
AgAAAAAAAAAAAAAACgBzDQAAAAACAAAAAAAAAAAAAAABACAOAAAAAAoAAAAAAAAAAAAAAKYAIRAA
AAAAAQAAAAAAAAAAAAAAnQDEEAAAAAAHAAAA5AwAAAAAAAAKAMUVAAAAAAIAAAAAAAAAAAAAAAEA
1RUAAAAAAAAAAAEAAAARGQAABQAEAAYABAAMAAsAAAAQAAwA+wIAABAAGQD7AgAAAAAbAPsCLQBr
Ai0A7QKpAOwDAAAAPE1vZHVsZT4AbXNjb3JsaWIATWljcm9zb2Z0LlZpc3VhbEJhc2ljAE15QXBw
bGljYXRpb24AU2NyaXB0Q29tcG9uZW50Xzg2ODgyZjc1ZDRmNDQ1ZGFhMTc5MjY0YTc5NzI3Y2Yx
LnZicHJvai5NeQBNeUNvbXB1dGVyAE15UHJvamVjdABNeVdlYlNlcnZpY2VzAFRocmVhZFNhZmVP
YmplY3RQcm92aWRlcmAxAElucHV0QnVmZmVyAFNjcmlwdENvbXBvbmVudF84Njg4MmY3NWQ0ZjQ0
NWRhYTE3OTI2NGE3OTcyN2NmMS52YnByb2oAVXNlckNvbXBvbmVudABDb25uZWN0aW9ucwBWYXJp
YWJsZXMAU2NyaXB0TWFpbgBOb25NYXRjaEFjdGlvbgBNeVJlc291cmNlcwBTY3JpcHRDb21wb25l
bnRfODY4ODJmNzVkNGY0NDVkYWExNzkyNjRhNzk3MjdjZjEudmJwcm9qLk15LlJlc291cmNlcwBN
eVNldHRpbmdzAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5BcHBsaWNhdGlvblNlcnZpY2VzAEFwcGxp
Y2F0aW9uQmFzZQAuY3RvcgBNaWNyb3NvZnQuVmlzdWFsQmFzaWMuRGV2aWNlcwBDb21wdXRlcgBT
eXN0ZW0AT2JqZWN0AC5jY3RvcgBnZXRfQ29tcHV0ZXIAbV9Db21wdXRlck9iamVjdFByb3ZpZGVy
AGdldF9BcHBsaWNhdGlvbgBtX0FwcE9iamVjdFByb3ZpZGVyAFVzZXIAZ2V0X1VzZXIAbV9Vc2Vy
T2JqZWN0UHJvdmlkZXIAZ2V0X1dlYlNlcnZpY2VzAG1fTXlXZWJTZXJ2aWNlc09iamVjdFByb3Zp
ZGVyAEFwcGxpY2F0aW9uAFdlYlNlcnZpY2VzAEVxdWFscwBvAEdldEhhc2hDb2RlAFR5cGUAR2V0
VHlwZQBUb1N0cmluZwBDcmVhdGVfX0luc3RhbmNlX18AVABpbnN0YW5jZQBEaXNwb3NlX19JbnN0
YW5jZV9fAGdldF9HZXRJbnN0YW5jZQBNaWNyb3NvZnQuVmlzdWFsQmFzaWMuTXlTZXJ2aWNlcy5J
bnRlcm5hbABDb250ZXh0VmFsdWVgMQBtX0NvbnRleHQAR2V0SW5zdGFuY2UAQ296eVJvYy5TU0lT
UGx1cy4yMDA4AENvenlSb2MuU3FsU2VydmVyLlNTSVMAU2NyaXB0QnVmZmVyUGx1cwBNaWNyb3Nv
ZnQuU3FsU2VydmVyLlR4U2NyaXB0AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlBpcGVsaW5lAFNj
cmlwdENvbXBvbmVudABNaWNyb3NvZnQuU3FsU2VydmVyLlBpcGVsaW5lSG9zdABQaXBlbGluZUJ1
ZmZlcgBDb21wb25lbnQAT2JqZWN0SUQASXNJbnB1dABCdWZmZXIAZ2V0X1N0YXRpY0lucHV0Q29s
dW1ucwBnZXRfU3RhdGljT3V0cHV0Q29sdW1ucwBOZXh0Um93AEVuZE9mUm93c2V0AFN0YXRpY0lu
cHV0Q29sdW1ucwBTdGF0aWNPdXRwdXRDb2x1bW5zAFNjcmlwdENvbXBvbmVudFBsdXMAUHJvY2Vz
c0lucHV0AElucHV0SUQASW5wdXRfUHJvY2Vzc0lucHV0AElucHV0X1Byb2Nlc3NJbnB1dFJvdwBS
b3cAUGFyZW50Q29tcG9uZW50AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRFRTUnVudGltZVdyYXAATWlj
cm9zb2Z0LlNxbFNlcnZlci5EdHMuUnVudGltZS5XcmFwcGVyAElEVFNDb25uZWN0aW9uTWFuYWdl
cjEwMABnZXRfQ3JtQ29ubmVjdGlvbgBDcm1Db25uZWN0aW9uAFN0YXR1c0NvZGUAUHJlRXhlY3V0
ZQBQb3N0RXhlY3V0ZQBWYWxpZGF0ZQBlcnJNZXNzYWdlAEdldEVudGl0eUxpc3QAR2V0T3B0aW9u
U2V0TGlzdABHZXRQcm9wZXJ0aWVzAHNldF9Dcm1Db25uZWN0aW9uAHZhbHVlAGdldF9FbnRpdHkA
c2V0X0VudGl0eQBnZXRfQXR0cmlidXRlAHNldF9BdHRyaWJ1dGUAZ2V0X0xhYmVsQ29sdW1uAHNl
dF9MYWJlbENvbHVtbgBnZXRfVmFsdWVDb2x1bW4Ac2V0X1ZhbHVlQ29sdW1uAGdldF9NYXBwaW5n
AHNldF9NYXBwaW5nAGdldF9BY3Rpb24Ac2V0X0FjdGlvbgBnZXRfUmVwbGFjZVZhbHVlAHNldF9S
ZXBsYWNlVmFsdWUAZ2V0X1N0YXRlQ29kZUNvbHVtbgBzZXRfU3RhdGVDb2RlQ29sdW1uAGdldF9D
cm1Db25uZWN0aW9uVHlwZQBGaXJlRXJyb3JfAG1lc3NhZ2UAR2V0VmFyaWFibGVfAHZhck5hbWUA
R2V0QnVmZmVyVmFsdWVfAGJ1ZmZlcgBpbmRleABTeXN0ZW0uQ29sbGVjdGlvbnMASGFzaHRhYmxl
AEdldE9wdGlvblNldFZhbHVlc18AQ3JlYXRlT3B0aW9uU2V0XwByb3cASURpY3Rpb25hcnkATG9h
ZE1hcHBpbmdfAG1fY3JtQ29ubmVjdGlvbgBtX2VudGl0eQBtX2F0dHJpYnV0ZQBtX2xhYmVsQ29s
AG1fdmFsdWVDb2wAbV9tYXBwaW5nAG1fYWN0aW9uAG1fcmVwbGFjZVZhbHVlAG1fc3RhdGVDb2Rl
Q29sAENvenlSb2MuRHluYW1pY3MuQ3JtAElDb25uZWN0aW9uAG1fY29ubmVjdGlvbgBtX2F0dHJp
YnV0ZXMAbV92YWx1ZXMAbV9sY0lkeABtX3ZjSWR4AG1fc2NjSWR4AG1fZGljdGlvbmFyeQBFbnRp
dHkAQXR0cmlidXRlAExhYmVsQ29sdW1uAFZhbHVlQ29sdW1uAE1hcHBpbmcAQWN0aW9uAFJlcGxh
Y2VWYWx1ZQBTdGF0ZUNvZGVDb2x1bW4AQ3JtQ29ubmVjdGlvblR5cGUARW51bQB2YWx1ZV9fAENy
ZWF0ZQBSZXBsYWNlAE51bGxpZnkASWdub3JlAFJhaXNlRXJyb3IAU3lzdGVtLlJlc291cmNlcwBS
ZXNvdXJjZU1hbmFnZXIAX3Jlc01ncgBTeXN0ZW0uR2xvYmFsaXphdGlvbgBDdWx0dXJlSW5mbwBf
cmVzQ3VsdHVyZQBnZXRfUmVzb3VyY2VNYW5hZ2VyAGdldF9DdWx0dXJlAHNldF9DdWx0dXJlAFZh
bHVlAEN1bHR1cmUAU3lzdGVtLkNvbmZpZ3VyYXRpb24AQXBwbGljYXRpb25TZXR0aW5nc0Jhc2UA
bV9WYWx1ZQBtX1N5bmNPYmplY3QAZ2V0X1ZhbHVlAFN5c3RlbS5Db21wb25lbnRNb2RlbABFZGl0
b3JCcm93c2FibGVBdHRyaWJ1dGUARWRpdG9yQnJvd3NhYmxlU3RhdGUAU3lzdGVtLkNvZGVEb20u
Q29tcGlsZXIAR2VuZXJhdGVkQ29kZUF0dHJpYnV0ZQBTeXN0ZW0uRGlhZ25vc3RpY3MARGVidWdn
ZXJIaWRkZW5BdHRyaWJ1dGUATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkNvbXBpbGVyU2VydmljZXMA
U3RhbmRhcmRNb2R1bGVBdHRyaWJ1dGUASGlkZU1vZHVsZU5hbWVBdHRyaWJ1dGUAU3lzdGVtLkNv
bXBvbmVudE1vZGVsLkRlc2lnbgBIZWxwS2V5d29yZEF0dHJpYnV0ZQBTeXN0ZW0uUnVudGltZS5D
b21waWxlclNlcnZpY2VzAFJ1bnRpbWVIZWxwZXJzAEdldE9iamVjdFZhbHVlAFJ1bnRpbWVUeXBl
SGFuZGxlAEdldFR5cGVGcm9tSGFuZGxlAEFjdGl2YXRvcgBDcmVhdGVJbnN0YW5jZQBNeUdyb3Vw
Q29sbGVjdGlvbkF0dHJpYnV0ZQBzZXRfVmFsdWUAU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZp
Y2VzAENvbVZpc2libGVBdHRyaWJ1dGUAU3RyaW5nAFNjcmlwdEJ1ZmZlcgBDTFNDb21wbGlhbnRB
dHRyaWJ1dGUATWljcm9zb2Z0LlNxbFNlcnZlci5EVFNQaXBlbGluZVdyYXAATWljcm9zb2Z0LlNx
bFNlcnZlci5EdHMuUGlwZWxpbmUuV3JhcHBlcgBJRFRTQ29tcG9uZW50TWV0YURhdGExMDAAZ2V0
X0NvbXBvbmVudE1ldGFEYXRhAElEVFNJbnB1dENvbGxlY3Rpb24xMDAAZ2V0X0lucHV0Q29sbGVj
dGlvbgBJRFRTSW5wdXQxMDAAZ2V0X0l0ZW0AZ2V0X0lEAElEVFNSdW50aW1lQ29ubmVjdGlvbkNv
bGxlY3Rpb24xMDAAZ2V0X1J1bnRpbWVDb25uZWN0aW9uQ29sbGVjdGlvbgBJRFRTUnVudGltZUNv
bm5lY3Rpb24xMDAAZ2V0X0Nvbm5lY3Rpb25NYW5hZ2VyAFN5c3RlbS5XZWIuU2VydmljZXMAU3lz
dGVtLldlYi5TZXJ2aWNlcy5Qcm90b2NvbHMAU29hcEV4Y2VwdGlvbgBFeGNlcHRpb24AZ2V0X0J1
ZmZlcgBDb252ZXJ0AElzTnVsbE9yRW1wdHkAVG9JbnQzMgBJbnQzMgBzZXRfSXRlbQBTZXROdWxs
AEZvcm1hdABQcm9qZWN0RGF0YQBTZXRQcm9qZWN0RXJyb3IAU3lzdGVtLlhtbABYbWxOb2RlAGdl
dF9EZXRhaWwAZ2V0X0lubmVyWG1sAENsZWFyUHJvamVjdEVycm9yAGdldF9NZXNzYWdlAEFjcXVp
cmVDb25uZWN0aW9uAENvbm5lY3QAUGlwZWxpbmVDb21wb25lbnQAZ2V0X0hvc3RDb21wb25lbnQA
SURUU0J1ZmZlck1hbmFnZXIxMDAAZ2V0X0J1ZmZlck1hbmFnZXIASURUU0lucHV0Q29sdW1uQ29s
bGVjdGlvbjEwMABnZXRfSW5wdXRDb2x1bW5Db2xsZWN0aW9uAElEVFNJbnB1dENvbHVtbjEwMABn
ZXRfTGluZWFnZUlEAEZpbmRDb2x1bW5CeUxpbmVhZ2VJRABDbG9zZQBJRFRTVmlydHVhbElucHV0
Q29sdW1uQ29sbGVjdGlvbjEwMABJRFRTVmlydHVhbElucHV0MTAwAGdldF9Jc0F0dGFjaGVkAFN0
cmluZ0NvbXBhcmlzb24AUmVtb3ZlQWxsAEdldFZpcnR1YWxJbnB1dABnZXRfVmlydHVhbElucHV0
Q29sdW1uQ29sbGVjdGlvbgBJRFRTVmlydHVhbElucHV0Q29sdW1uMTAwAERUU1VzYWdlVHlwZQBT
ZXRVc2FnZVR5cGUAc2V0X0Nvbm5lY3Rpb25NYW5hZ2VySUQATWljcm9zb2Z0LlNxbFNlcnZlci5N
YW5hZ2VkRFRTAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlJ1bnRpbWUAZ2V0X0Rlc2lnbkNvbm5l
Y3Rpb25zAENvbm5lY3Rpb25NYW5hZ2VyAEFycmF5AFNvcnQAQXJyYXlMaXN0AElBdHRyaWJ1dGUA
SUVudGl0eQBDb250YWlucwBHZXRTZXJ2aWNlAENvenlSb2MuRHluYW1pY3MAQ296eVJvYy5EeW5h
bWljcy5Dcm0yMDExLk9yZ2FuaXphdGlvblNlcnZpY2UAT3JnYW5pemF0aW9uU2VydmljZUNsaWVu
dABJbnRlcmFjdGlvbgBJSWYAR2V0RW50aXR5AEdldEF0dHJpYnV0ZXMAZ2V0X0NybVR5cGUAZ2V0
X05hbWUAQWRkAFRvQXJyYXkAT3BlcmF0b3JzAENvbXBhcmVTdHJpbmcARW1wdHkARmlyZUVycm9y
AElEVFNWYXJpYWJsZXMxMDAASURUU1ZhcmlhYmxlRGlzcGVuc2VyMTAwAGdldF9WYXJpYWJsZURp
c3BlbnNlcgBMb2NrT25lRm9yUmVhZABJRFRTVmFyaWFibGUxMDAAVW5sb2NrAElzTnVsbABFbnVt
QXR0cmlidXRlTWV0YWRhdGEAT3JnYW5pemF0aW9uUmVxdWVzdABPcmdhbml6YXRpb25SZXNwb25z
ZQBPcHRpb25NZXRhZGF0YQBMb2NhbGl6ZWRMYWJlbABDb3p5Um9jLkR5bmFtaWNzLkNybS5NZXRh
ZGF0YVNlcnZpY2UATWV0YWRhdGFTZXJ2aWNlAE9wdGlvbgBSZXRyaWV2ZUF0dHJpYnV0ZVJlcXVl
c3QAUmV0cmlldmVBdHRyaWJ1dGVSZXNwb25zZQBMb2NMYWJlbABDb3p5Um9jLkR5bmFtaWNzLkNy
bTMuTWV0YWRhdGFTZXJ2aWNlAEd1aWQATnVsbGFibGVgMQBzZXRfUmVxdWVzdE5hbWUAQm9vbGVh
bgBFeGVjdXRlAE9wdGlvblNldE1ldGFkYXRhAGdldF9PcHRpb25TZXQAZ2V0X09wdGlvbnMATGFi
ZWwAZ2V0X0xhYmVsAExvY2FsaXplZExhYmVsQ29sbGVjdGlvbgBnZXRfTG9jYWxpemVkTGFiZWxz
AFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljAExpc3RgMQBnZXRfQ291bnQAZ2V0X0xhbmd1YWdl
Q29kZQBzZXRfRW50aXR5TG9naWNhbE5hbWUAc2V0X0xvZ2ljYWxOYW1lAE1ldGFkYXRhU2Vydmlj
ZVJlc3BvbnNlAE1ldGFkYXRhU2VydmljZVJlcXVlc3QAQXR0cmlidXRlTWV0YWRhdGEAZ2V0X0F0
dHJpYnV0ZU1ldGFkYXRhAFBpY2tsaXN0QXR0cmlidXRlTWV0YWRhdGEAQ3JtTGFiZWwAZ2V0X0xv
Y0xhYmVscwBDcm1OdW1iZXIAUmV0cmlldmVBdHRyaWJ1dGVNZXRhZGF0YQBnZXRfRGVzY3JpcHRp
b24AZ2V0X09wdGlvblZhbHVlAEluc2VydFN0YXR1c1ZhbHVlUmVxdWVzdABJbnNlcnRTdGF0dXNW
YWx1ZVJlc3BvbnNlAEluc2VydE9wdGlvblZhbHVlUmVxdWVzdABJbnNlcnRPcHRpb25WYWx1ZVJl
c3BvbnNlAHNldF9MYWJlbABzZXRfTGFuZ3VhZ2VDb2RlAHNldF9Mb2NhbGl6ZWRMYWJlbHMAc2V0
X0F0dHJpYnV0ZUxvZ2ljYWxOYW1lAHNldF9Mb2NMYWJlbHMAc2V0X1N0YXRlQ29kZQBnZXRfU3Rh
dGVDb2RlAGdldF9OZXdPcHRpb25WYWx1ZQBJRGljdGlvbmFyeWAyAEtleVZhbHVlUGFpcmAyAEFE
T0RCAFJlY29yZHNldABTeXN0ZW0uRGF0YQBEYXRhVGFibGUARGF0YVJvdwBJRW51bWVyYXRvcmAx
AElFbnVtZXJhdG9yAElFbnVtZXJhYmxlYDEAR2V0RW51bWVyYXRvcgBnZXRfQ3VycmVudABnZXRf
S2V5AE1vdmVOZXh0AElEaXNwb3NhYmxlAERpc3Bvc2UAQ29udmVyc2lvbnMAU3lzdGVtLlRleHQu
UmVndWxhckV4cHJlc3Npb25zAFJlZ2V4AFVuZXNjYXBlAFN0cmluZ1NwbGl0T3B0aW9ucwBTcGxp
dABDaGFyAF9SZWNvcmRzZXQARmllbGRzAGdldF9GaWVsZHMAZ2V0X0JPRgBnZXRfRU9GAE1vdmVG
aXJzdABGaWVsZABEYXRhU2V0AERhdGFUYWJsZUNvbGxlY3Rpb24AZ2V0X1RhYmxlcwBEYXRhQ29s
dW1uQ29sbGVjdGlvbgBnZXRfQ29sdW1ucwBJbnRlcm5hbERhdGFDb2xsZWN0aW9uQmFzZQBEYXRh
Um93Q29sbGVjdGlvbgBnZXRfUm93cwBTU0lTU2NyaXB0Q29tcG9uZW50RW50cnlQb2ludEF0dHJp
YnV0ZQBDb3p5Um9jLlNxbFNlcnZlci5TU0lTLkF0dHJpYnV0ZXMARmlsdGVyUHJvcGVydGllc0F0
dHJpYnV0ZQBWYWxpZGF0ZVByb3BlcnRpZXNBdHRyaWJ1dGUAU29ydFByb3BlcnRpZXNBdHRyaWJ1
dGUAUmVmcmVzaFByb3BlcnRpZXNBdHRyaWJ1dGUAUmVmcmVzaFByb3BlcnRpZXMATGlzdEF0dHJp
YnV0ZQBEZXNjcmlwdGlvbkF0dHJpYnV0ZQBDYXRlZ29yeUF0dHJpYnV0ZQBDb25uZWN0aW9uQXR0
cmlidXRlAElucHV0VmlydHVhbENvbHVtbkF0dHJpYnV0ZQBWYXJpYWJsZUF0dHJpYnV0ZQBTeXN0
ZW0uUmVmbGVjdGlvbgBBc3NlbWJseQBnZXRfQXNzZW1ibHkAU3lzdGVtLlRocmVhZGluZwBNb25p
dG9yAEVudGVyAEV4aXQARGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZQBTY3JpcHRDb21wb25l
bnRfODY4ODJmNzVkNGY0NDVkYWExNzkyNjRhNzk3MjdjZjEudmJwcm9qLlJlc291cmNlcy5yZXNv
dXJjZXMAQ29tcGlsYXRpb25SZWxheGF0aW9uc0F0dHJpYnV0ZQBSdW50aW1lQ29tcGF0aWJpbGl0
eUF0dHJpYnV0ZQBBc3NlbWJseUZpbGVWZXJzaW9uQXR0cmlidXRlAEd1aWRBdHRyaWJ1dGUAQXNz
ZW1ibHlUcmFkZW1hcmtBdHRyaWJ1dGUAQXNzZW1ibHlDb3B5cmlnaHRBdHRyaWJ1dGUAQXNzZW1i
bHlQcm9kdWN0QXR0cmlidXRlAEFzc2VtYmx5Q29tcGFueUF0dHJpYnV0ZQBBc3NlbWJseURlc2Ny
aXB0aW9uQXR0cmlidXRlAEFzc2VtYmx5VGl0bGVBdHRyaWJ1dGUAU2NyaXB0Q29tcG9uZW50Xzg2
ODgyZjc1ZDRmNDQ1ZGFhMTc5MjY0YTc5NzI3Y2YxLnZicHJvai5kbGwAAAAAC0kAbgBwAHUAdAAA
G0MAcgBtAEMAbwBuAG4AZQBjAHQAaQBvAG4AAD1PAHAAdABpAG8AbgBTAGUAdAAgAGwAYQBiAGUA
bAAgAG4AbwB0ACAAZgBvAHUAbgBkADoAIAB7ADAAfQAAP1MAZQBsAGUAYwB0ACAARAB5AG4AYQBt
AGkAYwBzACAAQwBSAE0AIABDAG8AbgBuAGUAYwB0AGkAbwBuAC4AADdTAGUAbABlAGMAdAAgAEQA
eQBuAGEAbQBpAGMAcwAgAEMAUgBNACAAZQBuAHQAaQB0AHkALgAAN1MAZQBsAGUAYwB0ACAATwBw
AHQAaQBvAG4AUwBlAHQAIABhAHQAdAByAGkAYgB1AHQAZQAuAAApUwBlAGwAZQBjAHQAIABsAGEA
YgBlAGwAIABjAG8AbAB1AG0AbgAuAAApUwBlAGwAZQBjAHQAIAB2AGEAbAB1AGUAIABjAG8AbAB1
AG0AbgAuAAAVcwB0AGEAdAB1AHMAYwBvAGQAZQAAMVMAZQBsAGUAYwB0ACAAcwB0AGEAdABlAGMA
bwBkAGUAIABjAG8AbAB1AG0AbgAuAAA3UwBlAGwAZQBjAHQAIABEAHkAbgBhAG0AaQBjAHMAIABD
AFIATQAgAEUAbgB0AGkAdAB5AC4AAA1FAG4AdABpAHQAeQAAE0EAdAB0AHIAaQBiAHUAdABlAAAX
TABhAGIAZQBsAEMAbwBsAHUAbQBuAAAXVgBhAGwAdQBlAEMAbwBsAHUAbQBuAAAPTQBhAHAAcABp
AG4AZwAADUEAYwB0AGkAbwBuAAAfUwB0AGEAdABlAEMAbwBkAGUAQwBvAGwAdQBtAG4AABlSAGUA
cABsAGEAYwBlAFYAYQBsAHUAZQAAGUQAWQBOAEEATQBJAEMAUwAtAEMAUgBNAAEtRAB5AG4AYQBt
AGkAYwBzACAAQwBSAE0AIABPAHAAdABpAG8AbgBTAGUAdAAAI1IAZQB0AHIAaQBlAHYAZQBBAHQA
dAByAGkAYgB1AHQAZQAAFU0AZQB0AGEAZABhAHQAYQBJAGQAACtSAGUAdAByAGkAZQB2AGUAQQBz
AEkAZgBQAHUAYgBsAGkAcwBoAGUAZAAAI0UAbgB0AGkAdAB5AEwAbwBnAGkAYwBhAGwATgBhAG0A
ZQAAF0wAbwBnAGkAYwBhAGwATgBhAG0AZQAAI0EAdAB0AHIAaQBiAHUAdABlAE0AZQB0AGEAZABh
AHQAYQAAM1UAbgBoAGEAbgBkAGwAZQBkACAAcwBlAHIAdgBpAGMAZQAgAG8AYgBqAGUAYwB0AC4A
ACNJAG4AcwBlAHIAdABTAHQAYQB0AHUAcwBWAGEAbAB1AGUAACNJAG4AcwBlAHIAdABPAHAAdABp
AG8AbgBWAGEAbAB1AGUAAClBAHQAdAByAGkAYgB1AHQAZQBMAG8AZwBpAGMAYQBsAE4AYQBtAGUA
AAtMAGEAYgBlAGwAABNTAHQAYQB0AGUAQwBvAGQAZQAAC1YAYQBsAHUAZQAAHU4AZQB3AE8AcAB0
AGkAbwBuAFYAYQBsAHUAZQAAbUQAeQBuAGEAbQBpAGMAcwAgAEMAUgBNACAAMwAgAGQAbwBlAHMA
bgAnAHQAIABzAHUAcABwAG8AcgB0ACAATwBwAHQAaQBvAG4AUwBlAHQAIAB2AGEAbAB1AGUAIABp
AG4AcwBlAHIAdAAuAAEJXAByAFwAbgAAaU0AYQBwAHAAaQBuAGcALgBSAGUAYwBvAHIAZABzAGUA
dAAgAHMAaABvAHUAbABkACAAYwBvAG4AdABhAGkAbgAgAGEAdAAgAGwAZQBhAHMAdAAgADIAIABj
AG8AbAB1AG0AbgBzAC4AAGVNAGEAcABwAGkAbgBnAC4ARABhAHQAYQBTAGUAdAAgAHMAaABvAHUA
bABkACAAYwBvAG4AdABhAGkAbgAgAGEAdAAgAGwAZQBhAHMAdAAgADIAIABjAG8AbAB1AG0AbgBz
AC4AAICTTQBhAHAAcABpAG4AZwAgAHAAYQByAGEAbQBlAHQAZQByACAAbQB1AHMAdAAgAGMAbwBu
AHQAYQBpAG4AIABJAEQAaQBjAHQAaQBvAG4AYQByAHkALAAgAFMAdAByAGkAbgBnACwAIABSAGUA
YwBvAHIAZABzAGUAdAAgAG8AcgAgAEQAYQB0AGEAUwBlAHQALgAAMU0AeQAuAFIAZQBzAG8AdQBy
AGMAZQBzAC4ATQB5AFIAZQBzAG8AdQByAGMAZQBzAAAAALXe9cSP3MVCne0x1kGDqEMACLd6XFYZ
NOCJCLA/X38R1Qo6AyAAAQMAAAEEAAASDAcGFRIYARIMBAAAEggHBhUSGAESCAQAABIRBwYVEhgB
EhEEAAASFAcGFRIYARIUBAgAEgwECAASCAQIABIRBAgAEhQEIAECHAMgAAgEIAASFQMgAA4CHgAH
EAEBHgAeAAcwAQEBEB4AAhMABCAAEwAHBhUSGQETAAQoABMACBbPSQu4DDTqCImEXc2AgMyRCSAE
ARIhCAISJQQgAB0OAyAAAgQoAB0OAwYSJAMGEigGIAIBCBIlBSABARIcAwYSIQUgAQESIQQgABIt
BCgAEi0CBg4UcwB0AGEAdAB1AHMAYwBvAGQAZQAFIAECEA4EIAEBDgQgABEwBSABAREwBCABAQgE
IAEcDgYgAhwSJQgEIAASMQQgABI1AwYRMAIGCAMGEjkDBhIxAwYSNQMoAA4EKAARMAMoAAgEAAAA
AAQBAAAABAIAAAAEAwAAAAQEAAAAAwYSQQMGEkUEAAASQQQAABJFBQABARJFBAgAEkEECAASRQMG
EjgCBhwEAAASOAQIABI4BSABARFRCAEAAQAAAAAABSACAQ4OFwEACk15VGVtcGxhdGUHOC4wLjAu
MAAABhUSGAESDAYVEhgBEggGFRIYARIRBhUSGAESFAQHARIMBAcBEggEBwESEQQHARIUEAEAC015
LkNvbXB1dGVyAAAMAQAHTXkuVXNlcgAAEwEADk15LkFwcGxpY2F0aW9uAAATAQAOTXkuV2ViU2Vy
dmljZXMAAAQAARwcAwcBAgMHAQgGAAESFRFtBAcBEhUDBwEOBRABAB4ABAoBHgAEBwEeAAcgBAEO
Dg4OYQEANFN5c3RlbS5XZWIuU2VydmljZXMuUHJvdG9jb2xzLlNvYXBIdHRwQ2xpZW50UHJvdG9j
b2wSQ3JlYXRlX19JbnN0YW5jZV9fE0Rpc3Bvc2VfX0luc3RhbmNlX18AAAAGFRIYARMABhUSGQET
AAQKARMABSABARMABgcCEwATAAQgAQECBQEAAAAABAcBHQ4FIAASgIkFIAASgI0GIAESgJEcBSAA
EoCVBiABEoCZHAQHARItBCAAEiUEAAEOHAQgARwcBAABAg4EAAEIHAUgAgEIHAQAAQgIBQACDg4c
BgABARKAoQUgABKAsQwHBQ4cEoCdEoChETAFIAASgLUFIAASgLkFIAASgL0GIAESgMEcBSACCAgI
BQcBEoCRByACAg4RgM0FIAASgMkFIAASgMUGIAESgNEcByACCAgRgNUQBwYCAhKAkRKAxRKAyRKA
oQUgABKA2QYgARKA3RwFIAEdDggHEAEBAR0eAAMKAQ4IBwMSOR0OHQ4CHQ4EIAEcCAYAAxwCHBwG
IAESgO0OBiAAHRKA6QQgAQgcByABEoDhEhUFIAIBHBwbBwsSOR0OEoDlHRKA6RKA7QgcCBKA6Qgd
EoDpCAADAg4OEYDNCQcDHQ4SgOURMAYAAwgODgIEBwERMAYHAh0OHQ4KIAYBCA4ODggQAgUgABKB
AQggAgEOEBKA/QYgARKBBRwDIAAcBwcDHBwSgP0EIAECCAQHAhwcBSACAQ4cCCABEoEREoENBSAA
EoFFBiAAHRKBFQUgABKBSQUgABKBTQgVEoFRARKBGQUgARMACAggABURgT0BCAYVEYE9AQgIIAES
gVUSgVkFIAASgV0GIAAdEoEhBSAAEoFlBiAAHRKBLQUgABKBaQcgAhKBbQ4OBiAAHRKBNVcHIxIx
EjEcEoDxEoEJEoENEoERCAgSgRUIEoEZHBKBHR0SgSESgSUSgSkICBKBIQgSgS0SgTEdEoE1EoE1
EYE5CB0SgRUIFRGBPQEICB0SgSEICB0SgTUGIAEBEoFNBiABARKBaQYgAQESgWUHIAEBHRKBLS8H
EgIOHBKA8RwSgUkSgRkSgQ0SgREcEoEdEoEtEoF1EoF5EoF9EoGBEoExHRKBLQcVEoGFAg4ODBUS
gaEBFRGBiQIODgkgABUSgZkBEwAMFRKBmQEVEYGJAg4OBxURgYkCDg4EIAATAQQAAQ4OCSACHQ4d
DhGBsQcgAh0OHQMIBSAAEoG9BiABEoHBHAUgABKByQYgARKBkQgFIAASgc0FIAASgdUFIAASgZ07
BxISNRwSMRI1FRKBhQIODhURgYkCDg4dDh0ODhKBjRKBkRKBlRUSgZkBFRGBiQIODh0OCB0OHQMS
gZ0SAQANR2V0UHJvcGVydGllcwAADQEACFZhbGlkYXRlAAAFIAEBHQ5rAQAJAAAADUNybUNvbm5l
Y3Rpb24GRW50aXR5CUF0dHJpYnV0ZQtMYWJlbENvbHVtbgtWYWx1ZUNvbHVtbgdNYXBwaW5nBkFj
dGlvbgxSZXBsYWNlVmFsdWUPU3RhdGVDb2RlQ29sdW1uAAAGIAEBEYHtFQEAEEdldE9wdGlvblNl
dExpc3QAACABABtTZWxlY3QgT3B0aW9uU2V0IGF0dHJpYnV0ZS4AAA4BAAkgU2V0dGluZ3MAADsB
ADZTcGVjaWZpZXMgcmVwbGFjZSB2YWx1ZSB0byB1c2Ugd2hlbiB0aGVyZSBpcyBubyBtYXRjaC4A
AA0BAAhObyBtYXRjaAAALgEAKVNlbGVjdCBob3cgdG8gaGFuZGxlIG5vbi1tYXRjaGluZyB2YWx1
ZXMuAAAWAQARQ3JtQ29ubmVjdGlvblR5cGUAACwBACdTZWxlY3QgRHluYW1pY3MgQ1JNIENvbm5l
Y3Rpb24gTWFuYWdlci4AABIBAA1HZXRFbnRpdHlMaXN0AAAgAQAbU2VsZWN0IER5bmFtaWNzIENS
TSBlbnRpdHkuAAAuAQApU2VsZWN0IGNvbHVtbiBjb250YWluaW5nIE9wdGlvblNldCBsYWJlbC4A
AC4BAClTZWxlY3QgY29sdW1uIGNvbnRhaW5pbmcgT3B0aW9uU2V0IHZhbHVlLgAAKQEAJFNlbGVj
dCBjb2x1bW4gY29udGFpbmluZyBzdGF0ZSBjb2RlLgAAUgEATVNlbGVjdCB2YXJpYWJsZSBjb250
YWluaW5nIG1hcHBpbmcgKHN0cmluZywgZGljdGlvbmFyeSwgcmVjb3Jkc2V0KS4gT3B0aW9uYWwu
AAAFIAASggkHIAIBDhKCCQYHAhJBEkEEBwESRQgBAAIAAAAAAAQAAQEcBAcBEjgIAQAIAAAAAAAe
AQABAFQCFldyYXBOb25FeGNlcHRpb25UaHJvd3MBDAEABzEuMC4wLjAAACkBACQ2NDA5NmJjOC02
MjAyLTQ4NmUtOGFhOC00MjAyNzQ3M2E4NjkAAAUBAAEAAB8BABpDb3B5cmlnaHQgQCBNaWNyb3Nv
ZnQgMjAxNgAAPAEAN1NjcmlwdENvbXBvbmVudF84Njg4MmY3NWQ0ZjQ0NWRhYTE3OTI2NGE3OTcy
N2NmMS52YnByb2oAAA4BAAlNaWNyb3NvZnQAAFR3AAAAAAAAAAAAAG53AAAAIAAAAAAAAAAAAAAA
AAAAAAAAAAAAAABgdwAAAAAAAAAAAAAAAF9Db3JEbGxNYWluAG1zY29yZWUuZGxsAAAAAAD/JQAg
QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAMAAAAoAACADgAAAEgAAIAQAAAAYAAAgAAAAAAA
AAAAAAAAAAAAAgACAAAAeAAAgAMAAACQAACAAAAAAAAAAAAAAAAAAAABAAB/AACoAACAAAAAAAAA
AAAAAAAAAAABAAEAAADAAACAAAAAAAAAAAAAAAAAAAABAAAAAADYAAAAAAAAAAAAAAAAAAAAAAAB
AAAAAADoAAAAAAAAAAAAAAAAAAAAAAABAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAIAQAA
gIUAAOgCAAAAAAAAAAAAAGiIAAAoAQAAAAAAAAAAAACQiQAAIgAAAAAAAAAAAAAAGIEAAGgEAAAA
AAAAAAAAAGgENAAAAFYAUwBfAFYARQBSAFMASQBPAE4AXwBJAE4ARgBPAAAAAAC9BO/+AAABAAAA
AQAAAAAAAAABAAAAAAA/AAAAAAAAAAQAAAACAAAAAAAAAAAAAAAAAAAARAAAAAEAVgBhAHIARgBp
AGwAZQBJAG4AZgBvAAAAAAAkAAQAAABUAHIAYQBuAHMAbABhAHQAaQBvAG4AAAAAAAAAsATIAwAA
AQBTAHQAcgBpAG4AZwBGAGkAbABlAEkAbgBmAG8AAACkAwAAAQAwADAAMAAwADAANABiADAAAAA0
AAoAAQBDAG8AbQBwAGEAbgB5AE4AYQBtAGUAAAAAAE0AaQBjAHIAbwBzAG8AZgB0AAAAmAA4AAEA
RgBpAGwAZQBEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBu
AGUAbgB0AF8AOAA2ADgAOAAyAGYANwA1AGQANABmADQANAA1AGQAYQBhADEANwA5ADIANgA0AGEA
NwA5ADcAMgA3AGMAZgAxAC4AdgBiAHAAcgBvAGoAAAAwAAgAAQBGAGkAbABlAFYAZQByAHMAaQBv
AG4AAAAAADEALgAwAC4AMAAuADAAAACYADwAAQBJAG4AdABlAHIAbgBhAGwATgBhAG0AZQAAAFMA
YwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AOAA2ADgAOAAyAGYANwA1AGQANABmADQANAA1
AGQAYQBhADEANwA5ADIANgA0AGEANwA5ADcAMgA3AGMAZgAxAC4AdgBiAHAAcgBvAGoALgBkAGwA
bAAAAFwAGwABAEwAZQBnAGEAbABDAG8AcAB5AHIAaQBnAGgAdAAAAEMAbwBwAHkAcgBpAGcAaAB0
ACAAQAAgAE0AaQBjAHIAbwBzAG8AZgB0ACAAMgAwADEANgAAAAAAoAA8AAEATwByAGkAZwBpAG4A
YQBsAEYAaQBsAGUAbgBhAG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AOAA2
ADgAOAAyAGYANwA1AGQANABmADQANAA1AGQAYQBhADEANwA5ADIANgA0AGEANwA5ADcAMgA3AGMA
ZgAxAC4AdgBiAHAAcgBvAGoALgBkAGwAbAAAAJAAOAABAFAAcgBvAGQAdQBjAHQATgBhAG0AZQAA
AAAAUwBjAHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwA4ADYAOAA4ADIAZgA3ADUAZAA0AGYA
NAA0ADUAZABhAGEAMQA3ADkAMgA2ADQAYQA3ADkANwAyADcAYwBmADEALgB2AGIAcAByAG8AagAA
ADQACAABAFAAcgBvAGQAdQBjAHQAVgBlAHIAcwBpAG8AbgAAADEALgAwAC4AMAAuADAAAAA4AAgA
AQBBAHMAcwBlAG0AYgBsAHkAIABWAGUAcgBzAGkAbwBuAAAAMQAuADAALgAwAC4AMAAAACgAAAAg
AAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAA
gACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3d3d3d3
d3d3d3d3d3AERERERERERERERERERERwBP/////////////////0cAT/////////////////9HAE
//////////////////RwBP/////////////////0cAT/////////////////9HAE////////////
//////RwBP/////////////////0cAT/////////////////9HAE//////////////////RwBP//
///////////////0cAT/////////////////9HAE//////////////////RwBP//////////////
///0cAT/////////////////9HAE//////////////////RwBP/////////////////0cAT/////
////////////9HAE//////////////////RwBIiIiIiIiIiIiIiIiIiEcARERERERERERERERERE
RHAETExMTExMTExMTs7OSXRwBMzMzMzMzMzMzMzMzMzEAABEREREREREREREREREQAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////
wAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGA
AAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAADwAAAB////////////////ygA
AAAQAAAAIAAAAAEABAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAA
AIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAHd3d3
d3d3d0RERERERERHT///////+EdP///////4R0////////hHT///////+EdP///////4R0//////
//hHT///////+EdP///////4R0iIiIiIiIhHTMzMzMzMzEfEREREREREwAAAAAAAAAAAAAAAAAAA
AAD//wAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA
AP//AAD//wAAAAABAAIAICAQAAEABADoAgAAAgAQEBAAAQAEACgBAAADAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAABwAAAMAAAAgDcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA]]></arrayElement></arrayElements></property>
<property id="13" name="UserComponentTypeName" dataType="System.String" state="default" isArray="false" description="" typeConverter="" UITypeEditor="" containsID="false" expressionType="None">CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus.2008, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea</property>
<property id="40" name="VSTAProjectName" dataType="System.String" state="default" isArray="false" description="Specifies the name of the Microsoft Visual Studio Tools for Applications project. Project names must be unique within a package." typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None">ScriptComponent_86882f75d4f445daa179264a79727cf1</property>
<property id="41" name="ScriptLanguage" dataType="System.String" state="default" isArray="false" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" UITypeEditor="" containsID="false" expressionType="None">VisualBasic</property></properties>
<connections>
<connection id="38" name="CrmConnection" description="" connectionManagerID="{befb7c72-3e68-45e9-bdfa-ef23f510726c}" /></connections>
<inputs>
<input id="3" name="Input" description="" hasSideEffects="true" dangling="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="False" /></input>
</inputs>
<outputs>
<output id="4" name="Output" description="" exclusionGroup="0" synchronousInputId="3" deleteOutputOnPathDetached="false" hasSideEffects="false" dangling="false" isErrorOut="false" isSorted="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="False" /></output>
</outputs>
</component>