﻿<component id="2" name="Dynamics CRM Lookup" componentClassID="{874F7595-FB5F-40FF-96AF-FBFF8250E3EF}" description="Executes a custom script." localeId="1033" version="7" 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="3" name="SourceCode" state="cdata" dataType="System.String" isArray="true" description="Stores the source code of the component" typeConverter="NOTBROWSABLE"><arrayElements arrayElementCount="30"><arrayElement dataType="System.String"><![CDATA[My Project\Settings.Designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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[scriptcomponent_368ccdaf92cc423795cfa2e05a519565.vbproj]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF16LE]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="utf-16"?>
<Project ToolsVersion="4.0" 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>{30D016F9-3734-4E33-A861-5E7D899E18F3};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <OutputType>Library</OutputType>
    <RootNamespace>ScriptComponent_368ccdaf92cc423795cfa2e05a519565.vbproj</RootNamespace>
    <AssemblyName>ScriptComponent_368ccdaf92cc423795cfa2e05a519565.vbproj</AssemblyName>
    <StartupObject>
    </StartupObject>
    <OptionExplicit>On</OptionExplicit>
    <OptionCompare>Binary</OptionCompare>
    <OptionStrict>Off</OptionStrict>
    <OptionInfer>On</OptionInfer>
    <ProjectGuid>{AE9D8F35-83D2-40CD-B00C-151837C9D6F5}</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,42353,42354,42355</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,42353,42354,42355</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="CozyRoc.SSISPlus.2012, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files (x86)\Microsoft SQL Server\110\SDK\Assemblies\CozyRoc.SSISPlus.2012.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.SqlServer.ManagedDTS, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SqlServer.ManagedDTS\v4.0_11.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.ManagedDTS.dll</HintPath>
    </Reference>
    <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=11.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=11.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=11.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=11.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="{30D016F9-3734-4E33-A861-5E7D899E18F3}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{B3A685AA-7EAF-4BC6-9940-57959FA5AC07}" ApplicationType="usd" Language="vb" TemplatesPath="" DebugInfoExeName="devenv.exe" DebugInfoCommandLine="/vstaHostDebugUri:&quot;vstadebug29727e8d-fc3e-4a4e-9e51-f4383b52cdd9/add1410c-f66a-41f5-9f70-182dea08d153&quot;" />
        <Host Name="SSIS_ScriptComponent" />
        <ProjectClient>
          <HostIdentifier>SSIS_SC110</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  <PropertyGroup>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
  </PropertyGroup>
  <PropertyGroup>
    <TargetFrameworkProfile>
    </TargetFrameworkProfile>
  </PropertyGroup>
</Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[My Project\AssemblyInfo.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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_368ccdaf92cc423795cfa2e05a519565.vbproj")> 
<Assembly: AssemblyDescription("")> 
<Assembly: AssemblyCompany("Microsoft")> 
<Assembly: AssemblyProduct("ScriptComponent_368ccdaf92cc423795cfa2e05a519565.vbproj")> 
<Assembly: AssemblyCopyright("Copyright @ Microsoft 2013")> 
<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("ecc7a018-c365-4fe0-9b32-32c829018a75")> 

' 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[ComponentWrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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 InputName As String, ByVal Buffer As PipelineBuffer, ByVal OutputMap As OutputNameMap)

        If InputID = MyBase.ComponentMetaData.InputCollection("Input").ID Then
            Input_ProcessInput(New InputBuffer(Me, InputID, True, Buffer, OutputMap))
        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[BufferWrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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, ByVal OutputMap As OutputNameMap)
        MyBase.New(Component, ObjectID, IsInput, Buffer, OutputMap)
    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[main.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' COZYROC SQL Server Integration Services user script component
'
' Copyright (c) 2006-2012 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.Collections
Imports System.Xml
Imports System.Web.Services.Protocols
Imports System.Security

Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS
Imports CozyRoc.SqlServer.SSIS.Attributes


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<ColumnMappings()> _
<SortProperties(New String() {"CrmConnection", "Entity", "KeyAttribute", "ValueAttribute", "UseCache"})> _
<ValidateProperties("Validate")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    Public Const FetchTemplate_3P As String = "<fetch mapping='logical' count='1'><entity name='{0}'>{1}<filter type='and'>{2}</filter></entity></fetch>"
    Public Const AttrTemplate_1P As String = "<attribute name='{0}' />"
    Public Const CondTemlate_2P As String = "<condition attribute='{0}' operator='eq' value='{1}' />"
    Public Const ListDelimiter As String = "," + vbLf


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Dim valueList() As String

        If m_cache Is Nothing Then
            valueList = GetLookupRow_(Row)
        Else
            ' Cache is enabled.
            Dim cacheKey As String = GetCacheKey_(Row)

            If m_cache.Contains(cacheKey) Then
                valueList = CType(m_cache(cacheKey), String())
            Else
                valueList = GetLookupRow_(Row)
                m_cache(cacheKey) = valueList
            End If
        End If

        If Not valueList Is Nothing Then
            ' Lookup row found.
            Dim colsCount As Integer = m_valueIdx.Length
            For colIndex As Integer = 0 To colsCount - 1
                Dim value As String = valueList(colIndex)
                Dim valueIndex As Integer = m_valueIdx(colIndex)

                If value Is Nothing Then
                    Call Row.Buffer.SetNull(valueIndex)
                Else
                    Select Case m_valueType(colIndex)
                        Case DataType.DT_GUID
                            Row.Buffer(valueIndex) = New Guid(value)

                        Case DataType.DT_DBTIMESTAMP
                        Case DataType.DT_DATE
                        Case DataType.DT_FILETIME
                        Case DataType.DT_DBDATE
                            Row.Buffer(valueIndex) = Convert.ToDateTime(value)

                        Case DataType.DT_IMAGE
                            Row.Buffer(valueIndex) = Convert.FromBase64String(value)

                        Case Else
                            Row.Buffer(valueIndex) = value
                    End Select
                End If
            Next
        End If
    End Sub ' Input_ProcessInputRow


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

        ' Setup connection.
        m_connection = CType( _
            Me.Connections.CrmConnection.AcquireConnection(Nothing), _
            ICrmConnection)
        Call m_connection.Connect()

        If Me.UseCache Then
            m_cache = New Hashtable()
        End If

        Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)
        Dim colsCount As Integer = input.InputColumnCollection.Count

        ' Setup key index and condition list.
        m_keyIdx = New Integer(colsCount - 1) {}
        For colIndex As Integer = 0 To colsCount - 1
            Dim inputCol As IDTSInputColumn100 = input.InputColumnCollection(colIndex)

            ' Set key index.
            m_keyIdx(colIndex) = Me.HostComponent.BufferManager.FindColumnByLineageID( _
                input.Buffer, _
                inputCol.LineageID)

            ' Set condition list.
            Dim extCol As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection.GetObjectByID( _
                inputCol.ExternalMetadataColumnID)
            m_condTemplate_P += String.Format( _
                CondTemlate_2P, _
                extCol.Name, _
                "{" + colIndex.ToString() + "}")
        Next

        Dim output As IDTSOutput100 = MyBase.ComponentMetaData.OutputCollection(0)
        colsCount = output.OutputColumnCollection.Count

        ' Setup value index and attribute list.
        m_attrToIdx = New Hashtable()
        m_valueIdx = New Integer(colsCount - 1) {}
        m_valueType = New DataType(colsCount - 1) {}
        Dim attrList As String = String.Empty
        For colIndex As Integer = 0 To colsCount - 1
            Dim outputCol As IDTSOutputColumn100 = output.OutputColumnCollection(colIndex)

            m_attrToIdx(outputCol.Name) = colIndex

            ' Set value index and type.
            m_valueIdx(colIndex) = Me.HostComponent.BufferManager.FindColumnByLineageID( _
                input.Buffer, _
                outputCol.LineageID)
            m_valueType(colIndex) = outputCol.DataType

            ' Set attribute list.
            attrList += String.Format(AttrTemplate_1P, outputCol.Name)
        Next

        ' Setup fetch template.
        m_fetchTemplate_1P = String.Format( _
            FetchTemplate_3P, _
            Me.Entity, _
            attrList, _
            "{0}")
    End Sub ' PreExecute


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

        Call m_connection.Close()
    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 ApplicationException("Select Dynamics CRM connection.")
            End If

            If String.IsNullOrEmpty(Me.Entity) Then
                Throw New ApplicationException("Select entity.")
            End If

            If String.IsNullOrEmpty(Me.KeyAttribute) Then
                Throw New ApplicationException("Specify key attribute(s).")
            End If

            If String.IsNullOrEmpty(Me.ValueAttribute) Then
                Throw New ApplicationException("Select value attribute.")
            End If

            Dim keyList() As String = Me.KeyAttribute.Split( _
                New String() {ListDelimiter}, _
                StringSplitOptions.None)

            Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
            If input.IsAttached AndAlso input.InputColumnCollection.Count < keyList.Length Then
                Throw New Exception("Map input columns.")
            End If

            Dim output As IDTSOutput100 = MyBase.ComponentMetaData.OutputCollection(0)
            If output.OutputColumnCollection.Count = 0 Then
                ' Setup collection output columns.
                Call SetupOutputColumns_()
            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


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

        If MyBase.ComponentMetaData.InputCollection.Count = 0 Then
            ' At least one input must exist.
            Throw New Exception("No inputs.")
        End If

        If String.IsNullOrEmpty(Me.KeyAttribute) Then
            Throw New Exception("Key attribute(s) not selected.")
        End If

        ' Get entity attributes.
        Dim attrList() As ICrmAttribute = GetAttributes_()

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

        ' Cleanup.
        input.ExternalMetadataColumnCollection.IsUsed = True
        Call input.InputColumnCollection.RemoveAll()
        Call input.ExternalMetadataColumnCollection.RemoveAll()

        ' Setup attribute metadata.
        Dim keyList() As String = Me.KeyAttribute.Split( _
            New String() {ListDelimiter}, _
            StringSplitOptions.None)
        For Each key As String In keyList
            ' Find CRM attribute.
            Dim attr As ICrmAttribute = FindAttribute_(attrList, key)

            ' Setup external column.
            Dim column As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection.[New]()
            column.Name = attr.Name
            column.DataType = CType(attr.AttributeType, DataType)
            column.Length = attr.Length
            column.Precision = attr.Precision
            column.Scale = attr.Scale
            column.CodePage = 0
        Next
    End Sub ' ReinitializeMetaData


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

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

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

        GetEntityList = result
    End Function    ' GetEntityList


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of attributes in the currently selected entity.
    Public Function GetAttributeList() As String()
        Dim result As ArrayList = New ArrayList()

        Dim attrList() As ICrmAttribute = GetAttributes_()
        For Each attr As ICrmAttribute In attrList
            Call result.Add(attr.Name)
        Next

        Call result.Sort()

        GetAttributeList = CType(result.ToArray(GetType(String)), String())
    End Function    ' GetAttributeList


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


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Select lookup entity.")> _
    <List("GetEntityList")> _
    Public Property Entity() As String
        Get
            Entity = m_entity
        End Get
        Set(ByVal value As String)
            If m_entity <> value Then
                m_entity = value

                m_attributes = Nothing
                Me.KeyAttribute = String.Empty
                Me.ValueAttribute = String.Empty
            End If
        End Set
    End Property    ' Entity


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Specify one or more key attributes.")> _
    <List("GetAttributeList", True, False)> _
    Public Property KeyAttribute() As String
        Get
            KeyAttribute = m_keyAttribute
        End Get
        Set(ByVal value As String)
            If m_keyAttribute <> value Then
                If Not String.IsNullOrEmpty(m_keyAttribute) Then
                    ' Force external columns to be reloaded.
                    If Me.ComponentMetaData.InputCollection.Count > 0 Then
                        Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
                        Call input.ExternalMetadataColumnCollection.RemoveAll()
                    End If
                End If

                m_keyAttribute = value
            End If
        End Set
    End Property    ' KeyAttribute


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Specify one or more lookup attributes.")> _
    <List("GetAttributeList", True, False)> _
    Public Property ValueAttribute() As String
        Get
            ValueAttribute = m_valueAttribute
        End Get
        Set(ByVal value As String)
            If m_valueAttribute <> value Then
                If Not String.IsNullOrEmpty(m_valueAttribute) Then
                    ' Force output columns to be reloaded.
                    If Me.ComponentMetaData.OutputCollection.Count > 0 Then
                        Dim output As IDTSOutput100 = Me.ComponentMetaData.OutputCollection(0)
                        Call output.OutputColumnCollection.RemoveAll()
                    End If
                End If

                m_valueAttribute = value
            End If
        End Set
    End Property    ' ValueAttribute


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Category("Settings")> _
    <Description("Select whether memory cache is used.")> _
    <DefaultValue(True)> _
    Public Property UseCache() As Boolean
        Get
            UseCache = m_useCache
        End Get
        Set(ByVal value As Boolean)
            m_useCache = value
        End Set
    End Property    ' UseCache
#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 Lookup", _
            message, _
            String.Empty, _
            0, _
            cancel)
    End Sub ' FireError_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function FindAttribute_( _
        ByVal attrList() As ICrmAttribute, _
        ByVal name As String) As ICrmAttribute

        Dim result As ICrmAttribute = Nothing

        For Each attr As ICrmAttribute In attrList
            If attr.Name.Equals(name, StringComparison.OrdinalIgnoreCase) Then
                ' Found.
                result = attr
                Exit For
            End If
        Next

        If result Is Nothing Then
            Throw New Exception(String.Format("'{0}' attribute not found.", name))
        End If

        FindAttribute_ = result
    End Function    ' FindAttribute_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Setups cache key based on specified key attributes.
    Private Function GetCacheKey_(ByVal row As InputBuffer) As String
        Dim result As String = String.Empty

        For Each idx As Integer In m_keyIdx
            Dim key As String = String.Empty
            If Not row.Buffer.IsNull(idx) Then
                key = row.Buffer(idx).ToString() + "_"
            End If

            result += key
        Next

        GetCacheKey_ = result
    End Function    ' GetCacheKey_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Uses CRM Fetch to retrieve required lookup row.
    Private Function GetLookupRow_(ByVal row As InputBuffer) As String()
        Dim result() As String = Nothing

        ' Setup fetch conditions.
        Dim colsCount As Integer = m_keyIdx.Length
        Dim condList() As Object = New Object(colsCount - 1) {}
        For colIndex As Integer = 0 To colsCount - 1
            Dim keyIndex As Integer = m_keyIdx(colIndex)

            Dim key As String = String.Empty
            If Not row.Buffer.IsNull(keyIndex) Then
                key = row.Buffer(keyIndex).ToString()
            End If

            condList(colIndex) = SecurityElement.Escape(key)
        Next

        ' Fetch data.
        Dim fetchStmt As String = String.Format( _
            m_fetchTemplate_1P, _
            String.Format(m_condTemplate_P, condList))

        Dim doc As XmlDocument = New XmlDocument()
        Try
            Call doc.LoadXml(m_connection.Fetch(fetchStmt))
        Catch ex As SoapException
            Call FireError_(ex.Detail.InnerXml)
        Catch ex As Exception
            Call FireError_(ex.Message)
        End Try

        Dim recsList As XmlNodeList = doc.DocumentElement.ChildNodes
        If recsList.Count > 0 Then
            result = New String(m_valueIdx.Length - 1) {}

            For Each element As XmlElement In recsList(0).ChildNodes
                Dim colIndex As Object = m_attrToIdx(element.Name)
                If colIndex Is Nothing Then
                    Continue For
                End If

                result(CInt(colIndex)) = element.InnerText
            Next
        End If

        GetLookupRow_ = result
    End Function    ' GetLookupRow_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetAttributes_() As ICrmAttribute()
        Dim result() As ICrmAttribute = m_attributes

        If result Is Nothing Then
            Dim connection As ICrmConnection = CType( _
                Me.DesignConnections(Me.CrmConnection).AcquireConnection(Nothing), _
                ICrmConnection)
            Call connection.Connect()

            Try
                result = connection.GetEntityAttributes(Me.Entity)
            Finally
                Call connection.Close()
            End Try

            m_attributes = result
        End If

        GetAttributes_ = result
    End Function    ' GetAttributes_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub SetupOutputColumns_()
        ' Get entity attributes.
        Dim attrList() As ICrmAttribute = GetAttributes_()

        Dim valueList() As String = Me.ValueAttribute.Split( _
            New String() {ListDelimiter}, _
            StringSplitOptions.None)

        Dim output As IDTSOutput100 = Me.ComponentMetaData.OutputCollection(0)

        For Each value As String In valueList
            ' Find CRM attribute.
            Dim attr As ICrmAttribute = FindAttribute_(attrList, value)

            ' Setup output column.
            Dim column As IDTSOutputColumn100 = output.OutputColumnCollection.[New]()
            column.Name = attr.Name
            Call column.SetDataTypeProperties( _
                CType(attr.AttributeType, DataType), _
                attr.Length, _
                attr.Precision, _
                attr.Scale, _
                0)
        Next
    End Sub ' SetupOutputColumns_
#End Region ' Internals


#Region "Attributes"
    Private m_crmConnection As String
    Private m_entity As String
    Private m_keyAttribute As String
    Private m_valueAttribute As String
    Private m_useCache As Boolean

    Private m_connection As ICrmConnection
    Private m_cache As Hashtable
    Private m_fetchTemplate_1P As String
    Private m_keyIdx() As Integer
    Private m_condTemplate_P As String
    Private m_valueIdx() As Integer
    Private m_attributes() As ICrmAttribute
    Private m_attrToIdx As Hashtable
    Private m_valueType() As DataType
#End Region ' Attributes

End Class   ' ScriptMain
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[Project]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF16LE]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<c:Project xmlns:c="http://schemas.microsoft.com/codeprojectml/2010/08/main" xmlns:msb="http://schemas.microsoft.com/developer/msbuild/2003" runtimeVersion="4.0" schemaVersion="1.0">
	<msb:PropertyGroup>
		<msb:Language>msBuild</msb:Language>
		<msb:NoContent>Reference;Import;Folder</msb:NoContent>
		<msb:ProjectId>{E1551EB3-AA16-47C5-9929-060BD632AF6D}</msb:ProjectId>
		<msb:DisplayName>scriptcomponent_368ccdaf92cc423795cfa2e05a519565</msb:DisplayName>
		<msb:CodeName>scriptcomponent_368ccdaf92cc423795cfa2e05a519565</msb:CodeName>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:File Include="BufferWrapper.vb"/>
		<msb:File Include="ComponentWrapper.vb"/>
		<msb:File Include="main.vb"/>
		<msb:File Include="My Project\AssemblyInfo.vb"/>
		<msb:File Include="My Project\Resources.Designer.vb"/>
		<msb:File Include="My Project\Settings.Designer.vb"/>
		<msb:File Include="My Project\Resources.resx"/>
		<msb:File Include="My Project\Settings.settings"/>
		<msb:Project Include="scriptcomponent_368ccdaf92cc423795cfa2e05a519565.vbproj"/>
	</msb:ItemGroup>
</c:Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[My Project\Settings.settings]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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[My Project\Resources.resx]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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[My Project\Resources.Designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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></arrayElements></property><property id="4" name="BinaryCode" state="cdata" dataType="System.String" isArray="true" description="Stores the binary representation of the component" typeConverter="NOTBROWSABLE"><arrayElements arrayElementCount="2"><arrayElement dataType="System.String"><![CDATA[ScriptComponent_368ccdaf92cc423795cfa2e05a519565.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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
AAAE3hB+HwAABCgRAAAKKKIAAArcfh4AAAQqAAEQAAACAB0ADCkAEAAAAAG0AAAAzsrvvgEAAACR
AAAAbFN5c3RlbS5SZXNvdXJjZXMuUmVzb3VyY2VSZWFkZXIsIG1zY29ybGliLCBWZXJzaW9uPTQu
MC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OSNT
eXN0ZW0uUmVzb3VyY2VzLlJ1bnRpbWVSZXNvdXJjZVNldAIAAAAAAAAAAAAAAFBBRFBBRFC0AAAA
QlNKQgEAAQAAAAAADAAAAHY0LjAuMzAzMTkAAAAABQBsAAAAoBAAACN+AAAMEQAABBYAACNTdHJp
bmdzAAAAABAnAACgAwAAI1VTALAqAAAQAAAAI0dVSUQAAADAKgAAcAkAACNCbG9iAAAAAAAAAAIA
AAFXHaIJCQ8AAAD6JTMAFgAAAQAAAF8AAAANAAAAHwAAADwAAAAdAAAArgAAAAQAAABMAAAAJwAA
AAcAAAARAAAAFwAAAAoAAAABAAAACwAAAAEAAAACAAAAAwAAAAMAAAAAAMgVAQAAAAAACgCpAX8B
CgDdAb8BBgDtAeYBCgBFAn8BBgDDAuYBCgBFAxsDDgCXA4ADEgDmA8UDFgAXBMUDEgAmBMUDDgDK
BIADGgCFBV0FDgAUB4ADDgDFB4ADBgD0B+EHGgBXCF0FBgC7CKoIBgDoCNMIHgBPCToJHgCcCYYJ
HgC1CYYJHgDiCcoJBgAMCvkJCgBLCiQKCgBjChMAHgCYCnsKBgDNCq0KBgDrCuYBBgAPC+YBCgAo
CxMABgBsC00LBgCAC+YBEgCHC8UDBgCUC+YBIgD3C84LIgAmDM4LIgBRDM4LIgBuDM4LIgCxDM4L
BgDgDOYBBgAKDeYBBgASDeYBIgA3Dc4LIgBFDc4LIgBjDc4LIgB2Dc4LBgCkDeYBIgCqDc4LFgDr
DcUDIgAPDs4LIgBaDs4LIgDpDs4LIgAWD84LBgBoD+YBBgCAD+YBBgCVD+YBCgDVDyQKJgACAcIQ
JgD4EMIQBgAKEeYBBgAVEeEHCgArESQKBgBNEeYBKgBwEWURKgB8EWURLgC6EZwRKgDIEWURBgDT
EeEHBgDvEd8RKgAUEmURCgB8EiQKBgCpEuYBEgDnEsUDDgAwEw4TDgBMEw4TDgBkEw4THgB8E4YJ
HgCSE4YJHgCnE4YJDgC5Ew4TDgDHEw4TBgDtE9sTBgAUFAMUBgAnFPkJBgCQFK0KBgCwFK0KBgDo
FM4UBgABFdsTBgAeFU0LBgAsFdsTBgBHFdsTBgBiFdsTBgB7FdsTBgCUFdsTBgCxFdsTAAAAAAEA
AAAAAAEAAQAAAAAAKQA3AAUAAQABAAAAAAByADcACQABAAIAAAEQAH0ANwANAAEAAwAFAQAAhwAA
AA0ABQAIAAUBAACVAAAADQAFAA8AAQAAALAAvAAdAAYAEQABAAAA9AC8AC0ABgAWAAEAAAACAbwA
DQAIABoAAQAAAA4BvAANAAkAHAABAAAAGAG8ACAACgAdAAAAAAAjAS8BDQAcADYAAAEQAHQBvABN
AB4AOgAxAAgCIAAxADECLQAxAFMCOgAxAHgCRwAhAFQDkAAGAAIByQAGAA4BzQABACoF4QABACoF
4QBWgL4F9QBWgM8F9QBWgN8F9QBWgO4F9QABAIEH9QABAJEH9QABAJoH9QABAKkH9QABALoHnQIB
ANQHoAIBAP4HpAIBAAYI9QABABkIqAIBACII9QABADMIqAIBAD4IrAIBAEsIpAIBAGAIsQIRAMsI
vgIRAPQIwgIRAGcJ4AIRAG8J5AJQIAAAAAAGGLkBEwABAFggAAAAAAYYuQETAAEAYCAAAAAAERj0
ARcAAQCMIAAAAAATCPsBGwABAKQgAAAAABMIIQIoAAEAvCAAAAAAEwhKAjUAAQDUIAAAAAATCGgC
QgABAOwgAAAAAEYCrgJjAAEACCEAAAAARgK3AmgAAgAcIQAAAACDAMgCbAACADQhAAAAAEYC0AJx
AAIASCEAAAAAEQDZAngAAgBkIQAAAAABAPcCgAADAIAhAAAAAAYYuQETAAQAiCEAAAAAAwgLA4sA
BAC8IQAAAAAGGLkBEwAEANAhAAAAAAYYuQGvAAQA4CEAAAAARgpgBLsACQD0IQAAAABGCncEuwAJ
AAgiAAAAAIYAjwTAAAkAICIAAAAAhgCXBMAACQA4IgAAAAAGGLkBEwAJAFgiAAAAAEYC3gTRAAkA
iCIAAAAARgP9BNsADQCcIgAAAABGAxAF2wAOAKAiAAAAAAYYuQHlAA8AsCIAAAAABgieBesAEADc
IgAAAAAGGLkB5QAQAOwiAAAAAAYYuQETABEA9CIAAAAARgIQBdsAEQA0JAAAAABGAvwFEwASAGAm
AAAAAEYCBwYTABIAdCYAAAAABgATBnECEgDIJwAAAABGAicGEwATAPAoAAAAAAYAPAa7ABMATCkA
AAAABgBKBrsAEwCsKQAAAAAGCJ4FcQATAMQpAAAAAAYIWwZ3AhMA0CkAAAAABghzBnEAFADoKQAA
AAAGCH4GdwIUACAqAAAAAAYIiQZxABUAOCoAAAAABgiaBncCFQCgKgAAAAAGCKsGcQAWALgqAAAA
AAYIvgZ3AhYAICsAAAAABgjRBsAAFwA4KwAAAAAGCN4GfAIXAEQrAAAAAAEI6wa7ABgAZCsAAAAA
AQABB3cCGACQKwAAAAABACIHgQIZAOArAAAAAAEAPweKAhsAUCwAAAAAAQBQB5ACHAAMLgAAAAAB
AF4HlwIdAHguAAAAAAEAbQcTAB0AJC8AAAAAAxi5ARMAHQAsLwAAAAAWCAAJxgIdAGgvAAAAABYI
FAnLAh0AfC8AAAAAFgggCdACHQCELwAAAAARGPQBFwAeAJgvAAAAAAYYuQETAB4AoC8AAAAAFgh8
CecCHgAAAAEAtQIAAAEA7gIAAAEA7gIAAAEANAQAAAIAPgQAAAMARwQAAAQATwQAAAUAVgQAAAEA
6wQAAAIA8wQAAAMATwQAAAQAVgQAAAEATwQAAAEAJgUAAAEANAQAAAEANAQAAAEAJgUAAAEAHAYA
AAEAbQYAAAEAbQYAAAEAbQYAAAEAbQYAAAEAbQYAAAEADAcAAAEAMQcAAAIAOgcAAAEATAcAAAEA
TAcAAAEALAkJALkBEwChALkB8QKxALkBAAMRALkBEwC5ALkBEwAkALkBEwAsALkBEwA0ALkBEwA8
ALkBEwAkAAsDiwAsAAsDiwA0AAsDiwA8AAsDiwDBALkBEwDJALkBEwDRALkBdwLZANwKmgMZAK4C
YwAZALcCaAApAP0KpwMZANACcQDpABkLtwMZALkBEwDxALkBxwNEAFQDkABMAHwJiwBMAEMLRARM
ALkBEwD5ALkBfAI5ALkBrwAJAY8EwAAJAZcEwAARAbkBfAJZALkBEwBBABAMXgQZAT0MZAQhAV4M
agQpAWcMaAAZAZEMcQQxAV4MdwQ5AcoM6wB5AOUMYwB5AF4MgwR5AO4MiwQ5APcMkQRJAAINlgRB
AbkBdwJJAO4MmwRJARsNoQRJASYNqARBAPwFEwBhAIoNgwRxAJwNEwB5ALkBEwApAccNvgSBAeEN
aACBAV4MxARZAP0NywSJASQO0QQpAfcMaABpATYOaACRAUQO1wQpAYIO3QRpAacOaACZAcQO4wRh
AdIOcQB5AdACcQABAdsO6gQBAeIO8QQBAdsO+AQZAQEP/gShAV4MBAVZATQPCwWpAeENaAABAU8P
9QCpAV4MEQVxAdIOcQBxATYOaABxAVUPGAUBAeIOHQUBAeIOIwVBAAcGEwBxAGIPEwABAXIPQwW5
AbkBdwIBAagPSAUpAa4PwACxAbkBdwI5Ab0PdwLJAeEPUgWxAfEPcQDJAf0PFwBZACcGEwAhAeEN
aACZAQ8QfAKBARoQEwCZARoQEwCZASQQawVpANIOcQBhASgQdwJpADEQaABhAUMQcQVpAFAQaABh
AVsQlgRpAGYQaABhAXQQlgRpAIIQaABhAYwQlgRhAZYQlgRZAOIQjQXRAV4MkwXZAYoNgwRxADwG
mgXhARARoAXpAbkBEwDpAR8RtQXpARAREwDpASMRugXxATUR0wWhAeENaACpARoQEwAZAUMR7QUB
Aa4C+AVJAF4RDQZJAF4MEgYpAv8RIQYBAeIOJgYBArkBEwBxAAYSLQYBAgwSdwIRAhwSMgYxAicS
cQABAjQSOAYxAkgSPgYJAuENaAAJAlcSRAYJAmISSwYhAnASUQYZAtIOcQA5AogSVQYZApIScQAh
AqASwABBArUSEwBxAL0SfAapASQQjgZxASgQdwJxAdESlAZJArkBEwBRArkBdwJZArkBwgZhArkB
EwBpArkBfAJxArkBdwJ5ArkBdwKBArkBdwKJArkBdwKBArkBuwcpAPYTLwiJALkBNQiZALkBEwCZ
AhwUUgiZAiIUUgihArkBEwCpArkBlgSxArkBEwC5ArkBdwLBArkBdwLJArkBdwLRArkBdwLZArkB
dwLhArkBdwLpArkBdwLxArkBdwL5ArkBdwIOACgA+AAOACwAzAEOADAA/QEOADQAbAIpAIMAaAMu
AGMFYAkuAFsFIwkuADMFhAguAFMFAwkuAGsFUwQuAHMFIwkuACMFXAguACsFZQguADsFzAguAEMF
2QguAOsAUwQuAAsBCwcuAEsFUwRAACsAHwNAABMA9wJDABMA9wJDABsABgNJAIMAhgNjABsABgNj
ABMA9wJpAIMAeQOAACsAHwODAHMAHwODAHsAHwODABsABgOJAIMAVAOgACsAHwOjABMA9wKjAMMA
zwPAACsAHwPDABMA9wLDAOsAUwTgACsAHwPjAAsBUwQAASsAHwMAARMA9wIDAQsBUwQgASsAHwMg
ARMA9wIpAcsEjgcpAeMEdwcpAdMEOwdAASsAHwNAARMA9wJJAdMEOwdJAcsEXAdJAdsESQdgASsA
HwNgARMA9wJjAQsBUwRjAaMEHwNjAasEtAZjAbMEyAZjAbsEHwNpAdMEOwdpAesEwgdpAcsE2geA
ASsAHwOJAcsEAwiJAdMEOweJAesEwgegASsAHwOpAcsEEQepAcMECwepAdMEOwfAASsAHwPAARMA
9wLgASsAHwPpARMASQgAAhMA9wIAAisAHwMJAhMASQgpAhsFHwNAAwsBUwSAAwsBUwRAA0UDSgNP
A58DowOuA7MDwgPCA0oEWQRZBJ8DnwN+BK4EKwVZBXcFrAXCBbMDswOzA9oFswPgBZ8D5gWfAwAG
FwZaBoMGngY9CEQIVwgEAAEABgAFAAcABgAJAAgACwAJAAwADwANABEAAADdAU8AAACWAlQAAABF
AlkAAACiAl4AAABeA5gAAACjBMQAAAC2BMQAAACwBfAAAACwBbYCAABsCLYCAABzCLYCAACACLYC
AACPCLoCAACYCMQAAAC7CNYCAAAyCdsCAAAsCewCAgAEAAMAAgAFAAUAAgAGAAcAAgAHAAkAAgAP
AAsAAgASAA0AAgATAA8AAgAbABEAAgAlABMAAQAmABMAAQAoABUAAgAnABUAAQAqABcAAgApABcA
AgArABkAAQAsABkAAgAtABsAAQAuABsAAgAvAB0AAgA3AB8AAgA4ACEAAQA5ACEAAgA8ACMAdQB1
AIgAJAMrAzIDOQMxBDgEiAQEgAAAAQAAAAAAAAAAAAAAAAC8AAAABAAAAAAAAAAAAAAAAQAKAAAA
AAAKAAAAAAAAAAAAAAAKABMAAAAAAAEAAAAAAAAAAAAAAJ0AagMAAAAACwAAAAAAAAAAAAAApgCo
AwAAAAALAAAAAAAAAAAAAACmAPYDAAAAAAsAAAAAAAAAAAAAAKYAOgUAAAAABAAAAAAAAAAAAAAA
AQDmAQAAAAALAAAAAAAAAAAAAACmAKoLAAAAAAsAAAAAAAAAAAAAAKYAoxAAAAAABAAAAAAAAAAA
AAAAAQBlEQAAAAAEAAAAAAAAAAAAAAAKAIgRAAAAAAAAAAABAAAARBQAAAUABAAGAAQAAAAQAAwA
7AIAABAAGQDsAgAAAAAbAOwCLQC9Ay0APwTlAKgFAAAAPE1vZHVsZT4AbXNjb3JsaWIATWljcm9z
b2Z0LlZpc3VhbEJhc2ljAE15QXBwbGljYXRpb24AU2NyaXB0Q29tcG9uZW50XzM2OGNjZGFmOTJj
YzQyMzc5NWNmYTJlMDVhNTE5NTY1LnZicHJvai5NeQBNeUNvbXB1dGVyAE15UHJvamVjdABNeVdl
YlNlcnZpY2VzAFRocmVhZFNhZmVPYmplY3RQcm92aWRlcmAxAElucHV0QnVmZmVyAFNjcmlwdENv
bXBvbmVudF8zNjhjY2RhZjkyY2M0MjM3OTVjZmEyZTA1YTUxOTU2NS52YnByb2oAVXNlckNvbXBv
bmVudABDb25uZWN0aW9ucwBWYXJpYWJsZXMAU2NyaXB0TWFpbgBNeVJlc291cmNlcwBTY3JpcHRD
b21wb25lbnRfMzY4Y2NkYWY5MmNjNDIzNzk1Y2ZhMmUwNWE1MTk1NjUudmJwcm9qLk15LlJlc291
cmNlcwBNeVNldHRpbmdzAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5BcHBsaWNhdGlvblNlcnZpY2Vz
AEFwcGxpY2F0aW9uQmFzZQAuY3RvcgBNaWNyb3NvZnQuVmlzdWFsQmFzaWMuRGV2aWNlcwBDb21w
dXRlcgBTeXN0ZW0AT2JqZWN0AC5jY3RvcgBnZXRfQ29tcHV0ZXIAbV9Db21wdXRlck9iamVjdFBy
b3ZpZGVyAGdldF9BcHBsaWNhdGlvbgBtX0FwcE9iamVjdFByb3ZpZGVyAFVzZXIAZ2V0X1VzZXIA
bV9Vc2VyT2JqZWN0UHJvdmlkZXIAZ2V0X1dlYlNlcnZpY2VzAG1fTXlXZWJTZXJ2aWNlc09iamVj
dFByb3ZpZGVyAEFwcGxpY2F0aW9uAFdlYlNlcnZpY2VzAEVxdWFscwBvAEdldEhhc2hDb2RlAFR5
cGUAR2V0VHlwZQBUb1N0cmluZwBDcmVhdGVfX0luc3RhbmNlX18AVABpbnN0YW5jZQBEaXNwb3Nl
X19JbnN0YW5jZV9fAGdldF9HZXRJbnN0YW5jZQBNaWNyb3NvZnQuVmlzdWFsQmFzaWMuTXlTZXJ2
aWNlcy5JbnRlcm5hbABDb250ZXh0VmFsdWVgMQBtX0NvbnRleHQAR2V0SW5zdGFuY2UAQ296eVJv
Yy5TU0lTUGx1cy4yMDEyAENvenlSb2MuU3FsU2VydmVyLlNTSVMAU2NyaXB0QnVmZmVyUGx1cwBN
aWNyb3NvZnQuU3FsU2VydmVyLlR4U2NyaXB0AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlBpcGVs
aW5lAFNjcmlwdENvbXBvbmVudABNaWNyb3NvZnQuU3FsU2VydmVyLlBpcGVsaW5lSG9zdABQaXBl
bGluZUJ1ZmZlcgBPdXRwdXROYW1lTWFwAENvbXBvbmVudABPYmplY3RJRABJc0lucHV0AEJ1ZmZl
cgBPdXRwdXRNYXAAZ2V0X1N0YXRpY0lucHV0Q29sdW1ucwBnZXRfU3RhdGljT3V0cHV0Q29sdW1u
cwBOZXh0Um93AEVuZE9mUm93c2V0AFN0YXRpY0lucHV0Q29sdW1ucwBTdGF0aWNPdXRwdXRDb2x1
bW5zAFNjcmlwdENvbXBvbmVudFBsdXMAUHJvY2Vzc0lucHV0AElucHV0SUQASW5wdXROYW1lAElu
cHV0X1Byb2Nlc3NJbnB1dABJbnB1dF9Qcm9jZXNzSW5wdXRSb3cAUm93AFBhcmVudENvbXBvbmVu
dABNaWNyb3NvZnQuU3FsU2VydmVyLkRUU1J1bnRpbWVXcmFwAE1pY3Jvc29mdC5TcWxTZXJ2ZXIu
RHRzLlJ1bnRpbWUuV3JhcHBlcgBJRFRTQ29ubmVjdGlvbk1hbmFnZXIxMDAAZ2V0X0NybUNvbm5l
Y3Rpb24AQ3JtQ29ubmVjdGlvbgBGZXRjaFRlbXBsYXRlXzNQAEF0dHJUZW1wbGF0ZV8xUABDb25k
VGVtbGF0ZV8yUABMaXN0RGVsaW1pdGVyAFByZUV4ZWN1dGUAUG9zdEV4ZWN1dGUAVmFsaWRhdGUA
ZXJyTWVzc2FnZQBSZWluaXRpYWxpemVNZXRhRGF0YQBHZXRFbnRpdHlMaXN0AEdldEF0dHJpYnV0
ZUxpc3QAc2V0X0NybUNvbm5lY3Rpb24AdmFsdWUAZ2V0X0VudGl0eQBzZXRfRW50aXR5AGdldF9L
ZXlBdHRyaWJ1dGUAc2V0X0tleUF0dHJpYnV0ZQBnZXRfVmFsdWVBdHRyaWJ1dGUAc2V0X1ZhbHVl
QXR0cmlidXRlAGdldF9Vc2VDYWNoZQBzZXRfVXNlQ2FjaGUAZ2V0X0NybUNvbm5lY3Rpb25UeXBl
AEZpcmVFcnJvcl8AbWVzc2FnZQBJQ3JtQXR0cmlidXRlAEZpbmRBdHRyaWJ1dGVfAGF0dHJMaXN0
AG5hbWUAR2V0Q2FjaGVLZXlfAHJvdwBHZXRMb29rdXBSb3dfAEdldEF0dHJpYnV0ZXNfAFNldHVw
T3V0cHV0Q29sdW1uc18AbV9jcm1Db25uZWN0aW9uAG1fZW50aXR5AG1fa2V5QXR0cmlidXRlAG1f
dmFsdWVBdHRyaWJ1dGUAbV91c2VDYWNoZQBJQ3JtQ29ubmVjdGlvbgBtX2Nvbm5lY3Rpb24AU3lz
dGVtLkNvbGxlY3Rpb25zAEhhc2h0YWJsZQBtX2NhY2hlAG1fZmV0Y2hUZW1wbGF0ZV8xUABtX2tl
eUlkeABtX2NvbmRUZW1wbGF0ZV9QAG1fdmFsdWVJZHgAbV9hdHRyaWJ1dGVzAG1fYXR0clRvSWR4
AERhdGFUeXBlAG1fdmFsdWVUeXBlAEVudGl0eQBLZXlBdHRyaWJ1dGUAVmFsdWVBdHRyaWJ1dGUA
VXNlQ2FjaGUAQ3JtQ29ubmVjdGlvblR5cGUAU3lzdGVtLlJlc291cmNlcwBSZXNvdXJjZU1hbmFn
ZXIAX3Jlc01ncgBTeXN0ZW0uR2xvYmFsaXphdGlvbgBDdWx0dXJlSW5mbwBfcmVzQ3VsdHVyZQBn
ZXRfUmVzb3VyY2VNYW5hZ2VyAGdldF9DdWx0dXJlAHNldF9DdWx0dXJlAFZhbHVlAEN1bHR1cmUA
U3lzdGVtLkNvbmZpZ3VyYXRpb24AQXBwbGljYXRpb25TZXR0aW5nc0Jhc2UAbV9WYWx1ZQBtX1N5
bmNPYmplY3QAZ2V0X1ZhbHVlAFN5c3RlbS5Db21wb25lbnRNb2RlbABFZGl0b3JCcm93c2FibGVB
dHRyaWJ1dGUARWRpdG9yQnJvd3NhYmxlU3RhdGUAU3lzdGVtLkNvZGVEb20uQ29tcGlsZXIAR2Vu
ZXJhdGVkQ29kZUF0dHJpYnV0ZQBTeXN0ZW0uRGlhZ25vc3RpY3MARGVidWdnZXJIaWRkZW5BdHRy
aWJ1dGUATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkNvbXBpbGVyU2VydmljZXMAU3RhbmRhcmRNb2R1
bGVBdHRyaWJ1dGUASGlkZU1vZHVsZU5hbWVBdHRyaWJ1dGUAU3lzdGVtLkNvbXBvbmVudE1vZGVs
LkRlc2lnbgBIZWxwS2V5d29yZEF0dHJpYnV0ZQBTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZp
Y2VzAFJ1bnRpbWVIZWxwZXJzAEdldE9iamVjdFZhbHVlAFJ1bnRpbWVUeXBlSGFuZGxlAEdldFR5
cGVGcm9tSGFuZGxlAEFjdGl2YXRvcgBDcmVhdGVJbnN0YW5jZQBNeUdyb3VwQ29sbGVjdGlvbkF0
dHJpYnV0ZQBzZXRfVmFsdWUAU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzAENvbVZpc2li
bGVBdHRyaWJ1dGUAU3RyaW5nAFNjcmlwdEJ1ZmZlcgBDTFNDb21wbGlhbnRBdHRyaWJ1dGUATWlj
cm9zb2Z0LlNxbFNlcnZlci5EVFNQaXBlbGluZVdyYXAATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMu
UGlwZWxpbmUuV3JhcHBlcgBJRFRTQ29tcG9uZW50TWV0YURhdGExMDAAZ2V0X0NvbXBvbmVudE1l
dGFEYXRhAElEVFNJbnB1dENvbGxlY3Rpb24xMDAAZ2V0X0lucHV0Q29sbGVjdGlvbgBJRFRTSW5w
dXQxMDAAZ2V0X0l0ZW0AZ2V0X0lEAElEVFNSdW50aW1lQ29ubmVjdGlvbkNvbGxlY3Rpb24xMDAA
Z2V0X1J1bnRpbWVDb25uZWN0aW9uQ29sbGVjdGlvbgBJRFRTUnVudGltZUNvbm5lY3Rpb24xMDAA
Z2V0X0Nvbm5lY3Rpb25NYW5hZ2VyAEd1aWQAQ29udGFpbnMAc2V0X0l0ZW0AZ2V0X0J1ZmZlcgBT
ZXROdWxsAENvbnZlcnQARGF0ZVRpbWUAVG9EYXRlVGltZQBGcm9tQmFzZTY0U3RyaW5nAElEVFNP
dXRwdXQxMDAASURUU0V4dGVybmFsTWV0YWRhdGFDb2x1bW4xMDAASURUU0lucHV0Q29sdW1uMTAw
AElEVFNPdXRwdXRDb2x1bW4xMDAAQWNxdWlyZUNvbm5lY3Rpb24AQ29ubmVjdABJbnQzMgBJRFRT
SW5wdXRDb2x1bW5Db2xsZWN0aW9uMTAwAGdldF9JbnB1dENvbHVtbkNvbGxlY3Rpb24AZ2V0X0Nv
dW50AFBpcGVsaW5lQ29tcG9uZW50AGdldF9Ib3N0Q29tcG9uZW50AElEVFNCdWZmZXJNYW5hZ2Vy
MTAwAGdldF9CdWZmZXJNYW5hZ2VyAGdldF9MaW5lYWdlSUQARmluZENvbHVtbkJ5TGluZWFnZUlE
AElEVFNFeHRlcm5hbE1ldGFkYXRhQ29sdW1uQ29sbGVjdGlvbjEwMABnZXRfRXh0ZXJuYWxNZXRh
ZGF0YUNvbHVtbkNvbGxlY3Rpb24AZ2V0X0V4dGVybmFsTWV0YWRhdGFDb2x1bW5JRABHZXRPYmpl
Y3RCeUlEAGdldF9OYW1lAENvbmNhdABGb3JtYXQASURUU091dHB1dENvbGxlY3Rpb24xMDAAZ2V0
X091dHB1dENvbGxlY3Rpb24ASURUU091dHB1dENvbHVtbkNvbGxlY3Rpb24xMDAAZ2V0X091dHB1
dENvbHVtbkNvbGxlY3Rpb24ARW1wdHkAZ2V0X0RhdGFUeXBlAENsb3NlAEV4Y2VwdGlvbgBJc051
bGxPckVtcHR5AEFwcGxpY2F0aW9uRXhjZXB0aW9uAFN0cmluZ1NwbGl0T3B0aW9ucwBTcGxpdABn
ZXRfSXNBdHRhY2hlZABzZXRfQ29ubmVjdGlvbk1hbmFnZXJJRABQcm9qZWN0RGF0YQBTZXRQcm9q
ZWN0RXJyb3IAZ2V0X01lc3NhZ2UAQ2xlYXJQcm9qZWN0RXJyb3IAc2V0X0lzVXNlZABSZW1vdmVB
bGwATmV3AHNldF9OYW1lAGdldF9BdHRyaWJ1dGVUeXBlAHNldF9EYXRhVHlwZQBnZXRfTGVuZ3Ro
AHNldF9MZW5ndGgAZ2V0X1ByZWNpc2lvbgBzZXRfUHJlY2lzaW9uAGdldF9TY2FsZQBzZXRfU2Nh
bGUAc2V0X0NvZGVQYWdlAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuTWFuYWdlZERUUwBNaWNyb3NvZnQu
U3FsU2VydmVyLkR0cy5SdW50aW1lAGdldF9EZXNpZ25Db25uZWN0aW9ucwBDb25uZWN0aW9uTWFu
YWdlcgBBcnJheQBTb3J0AEFycmF5TGlzdABBZGQAVG9BcnJheQBPcGVyYXRvcnMAQ29tcGFyZVN0
cmluZwBGaXJlRXJyb3IAU3RyaW5nQ29tcGFyaXNvbgBJc051bGwAU3lzdGVtLlhtbABYbWxEb2N1
bWVudABYbWxOb2RlTGlzdABTeXN0ZW0uV2ViLlNlcnZpY2VzAFN5c3RlbS5XZWIuU2VydmljZXMu
UHJvdG9jb2xzAFNvYXBFeGNlcHRpb24AWG1sRWxlbWVudABJRW51bWVyYXRvcgBTeXN0ZW0uU2Vj
dXJpdHkAU2VjdXJpdHlFbGVtZW50AEVzY2FwZQBGZXRjaABMb2FkWG1sAFhtbE5vZGUAZ2V0X0Rl
dGFpbABnZXRfSW5uZXJYbWwAZ2V0X0RvY3VtZW50RWxlbWVudABnZXRfQ2hpbGROb2RlcwBnZXRf
SXRlbU9mAEdldEVudW1lcmF0b3IAZ2V0X0N1cnJlbnQAQ29udmVyc2lvbnMAVG9JbnRlZ2VyAGdl
dF9Jbm5lclRleHQATW92ZU5leHQASURpc3Bvc2FibGUARGlzcG9zZQBHZXRFbnRpdHlBdHRyaWJ1
dGVzAFNldERhdGFUeXBlUHJvcGVydGllcwBTU0lTU2NyaXB0Q29tcG9uZW50RW50cnlQb2ludEF0
dHJpYnV0ZQBDb3p5Um9jLlNxbFNlcnZlci5TU0lTLkF0dHJpYnV0ZXMAVmFsaWRhdGVQcm9wZXJ0
aWVzQXR0cmlidXRlAFNvcnRQcm9wZXJ0aWVzQXR0cmlidXRlAENvbHVtbk1hcHBpbmdzQXR0cmli
dXRlAERlZmF1bHRWYWx1ZUF0dHJpYnV0ZQBEZXNjcmlwdGlvbkF0dHJpYnV0ZQBDYXRlZ29yeUF0
dHJpYnV0ZQBMaXN0QXR0cmlidXRlAENvbm5lY3Rpb25BdHRyaWJ1dGUAU3lzdGVtLlJlZmxlY3Rp
b24AQXNzZW1ibHkAZ2V0X0Fzc2VtYmx5AFN5c3RlbS5UaHJlYWRpbmcATW9uaXRvcgBFbnRlcgBF
eGl0AERlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUAU2NyaXB0Q29tcG9uZW50XzM2OGNjZGFm
OTJjYzQyMzc5NWNmYTJlMDVhNTE5NTY1LnZicHJvai5SZXNvdXJjZXMucmVzb3VyY2VzAENvbXBp
bGF0aW9uUmVsYXhhdGlvbnNBdHRyaWJ1dGUAUnVudGltZUNvbXBhdGliaWxpdHlBdHRyaWJ1dGUA
U3lzdGVtLlJ1bnRpbWUuVmVyc2lvbmluZwBUYXJnZXRGcmFtZXdvcmtBdHRyaWJ1dGUAQXNzZW1i
bHlGaWxlVmVyc2lvbkF0dHJpYnV0ZQBHdWlkQXR0cmlidXRlAEFzc2VtYmx5VHJhZGVtYXJrQXR0
cmlidXRlAEFzc2VtYmx5Q29weXJpZ2h0QXR0cmlidXRlAEFzc2VtYmx5UHJvZHVjdEF0dHJpYnV0
ZQBBc3NlbWJseUNvbXBhbnlBdHRyaWJ1dGUAQXNzZW1ibHlEZXNjcmlwdGlvbkF0dHJpYnV0ZQBB
c3NlbWJseVRpdGxlQXR0cmlidXRlAFNjcmlwdENvbXBvbmVudF8zNjhjY2RhZjkyY2M0MjM3OTVj
ZmEyZTA1YTUxOTU2NS52YnByb2ouZGxsAAALSQBuAHAAdQB0AAAbQwByAG0AQwBvAG4AbgBlAGMA
dABpAG8AbgAAbzwAYwBvAG4AZABpAHQAaQBvAG4AIABhAHQAdAByAGkAYgB1AHQAZQA9ACcAewAw
AH0AJwAgAG8AcABlAHIAYQB0AG8AcgA9ACcAZQBxACcAIAB2AGEAbAB1AGUAPQAnAHsAMQB9ACcA
IAAvAD4AAQN7AAADfQAAMTwAYQB0AHQAcgBpAGIAdQB0AGUAIABuAGEAbQBlAD0AJwB7ADAAfQAn
ACAALwA+AAGA0zwAZgBlAHQAYwBoACAAbQBhAHAAcABpAG4AZwA9ACcAbABvAGcAaQBjAGEAbAAn
ACAAYwBvAHUAbgB0AD0AJwAxACcAPgA8AGUAbgB0AGkAdAB5ACAAbgBhAG0AZQA9ACcAewAwAH0A
JwA+AHsAMQB9ADwAZgBpAGwAdABlAHIAIAB0AHkAcABlAD0AJwBhAG4AZAAnAD4AewAyAH0APAAv
AGYAaQBsAHQAZQByAD4APAAvAGUAbgB0AGkAdAB5AD4APAAvAGYAZQB0AGMAaAA+AAEHewAwAH0A
AD9TAGUAbABlAGMAdAAgAEQAeQBuAGEAbQBpAGMAcwAgAEMAUgBNACAAYwBvAG4AbgBlAGMAdABp
AG8AbgAuAAAdUwBlAGwAZQBjAHQAIABlAG4AdABpAHQAeQAuAAAzUwBwAGUAYwBpAGYAeQAgAGsA
ZQB5ACAAYQB0AHQAcgBpAGIAdQB0AGUAKABzACkALgAAL1MAZQBsAGUAYwB0ACAAdgBhAGwAdQBl
ACAAYQB0AHQAcgBpAGIAdQB0AGUALgAABSwACgAAJU0AYQBwACAAaQBuAHAAdQB0ACAAYwBvAGwA
dQBtAG4AcwAuAAAVTgBvACAAaQBuAHAAdQB0AHMALgAAPUsAZQB5ACAAYQB0AHQAcgBpAGIAdQB0
AGUAKABzACkAIABuAG8AdAAgAHMAZQBsAGUAYwB0AGUAZAAuAAAZRABZAE4AQQBNAEkAQwBTAC0A
QwBSAE0AASdEAHkAbgBhAG0AaQBjAHMAIABDAFIATQAgAEwAbwBvAGsAdQBwAAA1JwB7ADAAfQAn
ACAAYQB0AHQAcgBpAGIAdQB0AGUAIABuAG8AdAAgAGYAbwB1AG4AZAAuAAEDXwAAMU0AeQAuAFIA
ZQBzAG8AdQByAGMAZQBzAC4ATQB5AFIAZQBzAG8AdQByAGMAZQBzAADFDXQxMR2MQ4uRnFQ6AEOe
AAi3elxWGTTgiQiwP19/EdUKOgMgAAEDAAABBAAAEgwHBhUSGAESDAQAABIIBwYVEhgBEggEAAAS
EQcGFRIYARIRBAAAEhQHBhUSGAESFAQIABIMBAgAEggECAASEQQIABIUBCABAhwDIAAIBCAAEhUD
IAAOAh4ABxABAR4AHgAHMAEBARAeAAITAAQgABMABwYVEhkBEwAEKAATAAgWz0kLuAw06giJhF3N
gIDMkQsgBQESIQgCEiUSKQQgAB0OAyAAAgQoAB0OAwYSJAMGEigJIAQBCA4SJRIpBSABARIcAwYS
IQUgAQESIQQgABIxBCgAEjECBg6A0jwAZgBlAHQAYwBoACAAbQBhAHAAcABpAG4AZwA9ACcAbABv
AGcAaQBjAGEAbAAnACAAYwBvAHUAbgB0AD0AJwAxACcAPgA8AGUAbgB0AGkAdAB5ACAAbgBhAG0A
ZQA9ACcAewAwAH0AJwA+AHsAMQB9ADwAZgBpAGwAdABlAHIAIAB0AHkAcABlAD0AJwBhAG4AZAAn
AD4AewAyAH0APAAvAGYAaQBsAHQAZQByAD4APAAvAGUAbgB0AGkAdAB5AD4APAAvAGYAZQB0AGMA
aAA+ADA8AGEAdAB0AHIAaQBiAHUAdABlACAAbgBhAG0AZQA9ACcAewAwAH0AJwAgAC8APgBuPABj
AG8AbgBkAGkAdABpAG8AbgAgAGEAdAB0AHIAaQBiAHUAdABlAD0AJwB7ADAAfQAnACAAbwBwAGUA
cgBhAHQAbwByAD0AJwBlAHEAJwAgAHYAYQBsAHUAZQA9ACcAewAxAH0AJwAgAC8APgAELAAKAAUg
AQIQDgQgAQEOBCABAQIIIAISNR0SNQ4FIAEOEhwGIAEdDhIcBSAAHRI1AgYCAwYSOQMGEj0DBh0I
BAYdEjUEBh0RQQMoAA4DKAACAwYSRQMGEkkEAAASRQQAABJJBQABARJJBAgAEkUECAASSQMGEjQC
BhwEAAASNAQIABI0BSABARFVCAEAAQAAAAAABSACAQ4OGAEACk15VGVtcGxhdGUIMTAuMC4wLjAA
AAQBAAAABhUSGAESDAYVEhgBEggGFRIYARIRBhUSGAESFAQHARIMBAcBEggEBwESEQQHARIUEwEA
Dk15LldlYlNlcnZpY2VzAAAQAQALTXkuQ29tcHV0ZXIAAAwBAAdNeS5Vc2VyAAATAQAOTXkuQXBw
bGljYXRpb24AAAQAARwcAwcBAgMHAQgGAAESFRFxBAcBEhUDBwEOBRABAB4ABAoBHgAEBwEeAAcg
BAEODg4OYQEANFN5c3RlbS5XZWIuU2VydmljZXMuUHJvdG9jb2xzLlNvYXBIdHRwQ2xpZW50UHJv
dG9jb2wSQ3JlYXRlX19JbnN0YW5jZV9fE0Rpc3Bvc2VfX0luc3RhbmNlX18AAAAGFRIYARMABhUS
GQETAAQKARMABSABARMACAcDEwATABMABQEAAAAABAcBHQ4FIAASgI0FIAASgJEGIAESgJUcBSAA
EoCZBiABEoCdHAQHARIxBCABHBwCHQ4FIAIBHBwEIAASJQQgAQEIBSACAQgcBgABEYCpDgUAAR0F
Dg8HCR0ODggIDggIEUERgKEFIAASgMEGIAESgLUcBSAAEoDFBSAAEoDJBSACCAgIBSAAEoDNBiAB
EoCxCAYAAw4ODg4GAAMODhwcBQACDg4OBSAAEoDRBiABEoCtHAUgABKA1QYgARKAuRwEIAARQQUA
Ag4OHAcABA4OHBwcFwcLDggSgJUSgK0IEoCxEoC1CBKAuQgIBAABAg4JIAIdDh0OEYDhBgABARKA
2REHBwICEoCVHQ4SgK0SgNkdDgUgABKAsQUgAQERQRUHCR0SNRKAlR0OEjUSgLEOHQ4IHQ4FIAAS
gOkGIAESgO0cBSABHQ4IBxABAQEdHgADCgEOCAcDEjkdDh0OBCABCBwHIAESgPESFRAHBh0SNR0O
EoD1EjUIHRI1BgADCA4OAgUHARKAlQUHARKArQYHAh0OHQ4KIAYBCA4ODggQAgcgAgIOEYD9DAcF
EjUSNRI1CB0SNQQgAQIIBCABHAgJBwYODggOCB0IBAABDg4GAAIODh0cBCABDg4FIAASgRkFIAAS
gQ0FIAASgQUGIAESgRkIBSAAEoERAyAAHAQAAQgcIQcQCB0cEoEBDh0OEoEFHQ4IDggSgQkSgNkc
EoENCBKBEQYgAR0SNQ4KBwMdEjUdEjUSOQUgABKAuQkgBQERQQgICAgVBwkdEjUSgK0dDhI1EoC5
Dh0OCB0ODQEACFZhbGlkYXRlAAAFIAEBHQ5CAQAFAAAADUNybUNvbm5lY3Rpb24GRW50aXR5DEtl
eUF0dHJpYnV0ZQ5WYWx1ZUF0dHJpYnV0ZQhVc2VDYWNoZQAABQEAAQAAKQEAJFNlbGVjdCB3aGV0
aGVyIG1lbW9yeSBjYWNoZSBpcyB1c2VkLgAADQEACFNldHRpbmdzAAASAQANR2V0RW50aXR5TGlz
dAAAGgEAFVNlbGVjdCBsb29rdXAgZW50aXR5LgAAFgEAEUNybUNvbm5lY3Rpb25UeXBlAAAsAQAn
U2VsZWN0IER5bmFtaWNzIENSTSBDb25uZWN0aW9uIE1hbmFnZXIuAAAGIAMBDgICFwEAEEdldEF0
dHJpYnV0ZUxpc3QBAAAAKAEAI1NwZWNpZnkgb25lIG9yIG1vcmUga2V5IGF0dHJpYnV0ZXMuAAAr
AQAmU3BlY2lmeSBvbmUgb3IgbW9yZSBsb29rdXAgYXR0cmlidXRlcy4AAAUgABKBSQcgAgEOEoFJ
BgcCEkUSRQQHARJJCAEAAgAAAAAABAABARwEBwESNAgBAAgAAAAAAB4BAAEAVAIWV3JhcE5vbkV4
Y2VwdGlvblRocm93cwFHAQAaLk5FVEZyYW1ld29yayxWZXJzaW9uPXY0LjABAFQOFEZyYW1ld29y
a0Rpc3BsYXlOYW1lEC5ORVQgRnJhbWV3b3JrIDQMAQAHMS4wLjAuMAAAKQEAJGVjYzdhMDE4LWMz
NjUtNGZlMC05YjMyLTMyYzgyOTAxOGE3NQAAHwEAGkNvcHlyaWdodCBAIE1pY3Jvc29mdCAyMDEz
AAA8AQA3U2NyaXB0Q29tcG9uZW50XzM2OGNjZGFmOTJjYzQyMzc5NWNmYTJlMDVhNTE5NTY1LnZi
cHJvagAADgEACU1pY3Jvc29mdAAAAAxlAAAAAAAAAAAAAC5lAAAAIAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAgZQAAAAAAAAAAAAAAAAAAAAAAAAAAX0NvckRsbE1haW4AbXNjb3JlZS5kbGwAAAAAAP8l
ACBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAYAACAAAAAAAAAAAAAAAAA
AAABAAEAAAAwAACAAAAAAAAAAAAAAAAAAAABAAAAAABIAAAAWIAAAGgEAAAAAAAAAAAAAGgENAAA
AFYAUwBfAFYARQBSAFMASQBPAE4AXwBJAE4ARgBPAAAAAAC9BO/+AAABAAAAAQAAAAAAAAABAAAA
AAA/AAAAAAAAAAQAAAACAAAAAAAAAAAAAAAAAAAARAAAAAEAVgBhAHIARgBpAGwAZQBJAG4AZgBv
AAAAAAAkAAQAAABUAHIAYQBuAHMAbABhAHQAaQBvAG4AAAAAAAAAsATIAwAAAQBTAHQAcgBpAG4A
ZwBGAGkAbABlAEkAbgBmAG8AAACkAwAAAQAwADAAMAAwADAANABiADAAAAA0AAoAAQBDAG8AbQBw
AGEAbgB5AE4AYQBtAGUAAAAAAE0AaQBjAHIAbwBzAG8AZgB0AAAAmAA4AAEARgBpAGwAZQBEAGUA
cwBjAHIAaQBwAHQAaQBvAG4AAAAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AMwA2
ADgAYwBjAGQAYQBmADkAMgBjAGMANAAyADMANwA5ADUAYwBmAGEAMgBlADAANQBhADUAMQA5ADUA
NgA1AC4AdgBiAHAAcgBvAGoAAAAwAAgAAQBGAGkAbABlAFYAZQByAHMAaQBvAG4AAAAAADEALgAw
AC4AMAAuADAAAACYADwAAQBJAG4AdABlAHIAbgBhAGwATgBhAG0AZQAAAFMAYwByAGkAcAB0AEMA
bwBtAHAAbwBuAGUAbgB0AF8AMwA2ADgAYwBjAGQAYQBmADkAMgBjAGMANAAyADMANwA5ADUAYwBm
AGEAMgBlADAANQBhADUAMQA5ADUANgA1AC4AdgBiAHAAcgBvAGoALgBkAGwAbAAAAFwAGwABAEwA
ZQBnAGEAbABDAG8AcAB5AHIAaQBnAGgAdAAAAEMAbwBwAHkAcgBpAGcAaAB0ACAAQAAgAE0AaQBj
AHIAbwBzAG8AZgB0ACAAMgAwADEAMwAAAAAAoAA8AAEATwByAGkAZwBpAG4AYQBsAEYAaQBsAGUA
bgBhAG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AMwA2ADgAYwBjAGQAYQBm
ADkAMgBjAGMANAAyADMANwA5ADUAYwBmAGEAMgBlADAANQBhADUAMQA5ADUANgA1AC4AdgBiAHAA
cgBvAGoALgBkAGwAbAAAAJAAOAABAFAAcgBvAGQAdQBjAHQATgBhAG0AZQAAAAAAUwBjAHIAaQBw
AHQAQwBvAG0AcABvAG4AZQBuAHQAXwAzADYAOABjAGMAZABhAGYAOQAyAGMAYwA0ADIAMwA3ADkA
NQBjAGYAYQAyAGUAMAA1AGEANQAxADkANQA2ADUALgB2AGIAcAByAG8AagAAADQACAABAFAAcgBv
AGQAdQBjAHQAVgBlAHIAcwBpAG8AbgAAADEALgAwAC4AMAAuADAAAAA4AAgAAQBBAHMAcwBlAG0A
YgBsAHkAIABWAGUAcgBzAGkAbwBuAAAAMQAuADAALgAwAC4AMAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAGAAAAwAAABANQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAA=]]></arrayElement></arrayElements></property><property id="9" name="UserComponentTypeName" dataType="System.String">CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus.2012, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea</property><property id="11" name="VSTAProjectName" dataType="System.String" description="Specifies the name of the Microsoft Visual Studio Tools for Applications project. Project names must be unique within a package." typeConverter="NOTBROWSABLE">ScriptComponent_368ccdaf92cc423795cfa2e05a519565</property><property id="12" name="ScriptLanguage" dataType="System.String" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91">VisualBasic</property></properties><connections><connection id="14" name="CrmConnection" connectionManagerID="{2712E34E-3C15-4A66-BA78-E3A50AEC7792}" /></connections><inputs><input id="15" name="Input" hasSideEffects="true"><externalMetadataColumns isUsed="True"></externalMetadataColumns></input></inputs><outputs><output id="18" name="Output" synchronousInputId="15"><outputColumns></outputColumns><externalMetadataColumns /></output></outputs></component>