<component id="36" name="Lookup" componentClassID="Microsoft.ManagedComponentHost" description="Executes a custom script" localeId="1033" version="11" 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="37" name="SourceCode" state="cdata" dataType="System.String" isArray="true" description="Stores the source code of the component" typeConverter="NOTBROWSABLE"><arrayElements arrayElementCount="15"><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[ScriptMain.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:CodeName>ScriptComponent_b792924a89b64c848ebc45d92841bd4d</msb:CodeName>
    <msb:Language>msBuild</msb:Language>
    <msb:DisplayName>ScriptComponent_b792924a89b64c848ebc45d92841bd4d</msb:DisplayName>
    <msb:ProjectId>{9FB96B19-8966-4240-A3C7-C987CD1F991D}</msb:ProjectId>
  </msb:PropertyGroup>
  <msb:ItemGroup>
    <msb:Project Include="ScriptComponent_b792924a89b64c848ebc45d92841bd4d.vbproj" />
    <msb:File Include="ComponentWrapper.vb" />
    <msb:File Include="ScriptMain.vb" />
    <msb:File Include="BufferWrapper.vb" />
  </msb:ItemGroup>
</c:Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[ScriptComponent_b792924a89b64c848ebc45d92841bd4d.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">
  <PropertyGroup>
    <ProjectTypeGuids>{30D016F9-3734-4E33-A861-5E7D899E18F3};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>8.0.30703</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{0D6C5CD5-DB75-44D0-A579-9FF071A5A171}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>My Project</AppDesignerFolder>
    <RootNamespace>ScriptComponent_a8db124b16d04c44952f3e9b4633e605</RootNamespace>
    <AssemblyName>ScriptComponent_a8db124b16d04c44952f3e9b4633e605</AssemblyName>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <TargetFrameworkProfile>
    </TargetFrameworkProfile>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>.\bin\Debug\</OutputPath>
    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
    <DefineDebug>true</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>false</DebugSymbols>
    <Optimize>true</Optimize>
    <OutputPath>.\bin\Release\</OutputPath>
    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
    <DefineDebug>false</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <!-- This sections specifies references for the project. -->
  <ItemGroup>
    <Reference Include="CozyRoc.SSISPlus.2017, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files (x86)\Microsoft SQL Server\140\SDK\Assemblies\CozyRoc.SSISPlus.2017.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.SqlServer.TxScript, Version=14.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=14.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=14.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=14.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="Microsoft.SqlServer.ManagedDTS" />
    <Reference Include="System.Xml" />
    <Reference Include="System.Web.Services" />
  </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>
  <ItemGroup>
    <AppDesigner Include="My Project\" />
  </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="" />
        <Host Name="SSIS_SC110" />
        <ProjectClient>
          <HostIdentifier>SSIS_SC140</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  <ItemGroup>
    <Compile Include="ScriptMain.vb" />
    <Compile Include="BufferWrapper.vb" />
    <Compile Include="ComponentWrapper.vb" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="My Project\" />
  </ItemGroup>
  <PropertyGroup>
    <OptionCompare>Binary</OptionCompare>
  </PropertyGroup>
  <PropertyGroup>
    <OptionExplicit>On</OptionExplicit>
  </PropertyGroup>
  <PropertyGroup>
    <OptionStrict>On</OptionStrict>
  </PropertyGroup>
</Project>]]></arrayElement></arrayElements></property><property id="38" 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_a8db124b16d04c44952f3e9b4633e605.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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
AAAKb0IAAAoWjDoAAAFvQwAACgsMFg0rTggJmhMEAgYRBCgcAAAGEwUHb0QAAApvkQAACiURBW9g
AAAKb5IAAAoRBW9iAAAKEQVvZAAAChEFb2YAAAoRBW9oAAAKFm+TAAAKCRfWDQkIjmkyrCo6AgME
BQ4EDgUolAAACioeFo0/AAABKgAAABMwAQAJAAAACAAAEQIolQAACgoGKgAAABMwAQAJAAAACAAA
EQIolgAACgoGKn4CKJcAAAoCAnMqAAAGfRcAAAQCAnMsAAAGfRgAAAQqvgMCKC8AAApvMAAACnJi
AwBwbzEAAApvmAAACjMRAgIDFwUOBHMhAAAGbygAAAYqSisHAgNvKQAABgNvJAAABi3xKgYqOgIo
mQAACgIDfRkAAAQqggJ7GQAABG8vAAAKb1QAAApydgIAcG9VAAAKb5oAAAoqOgIomQAACgIDfRoA
AAQqNgIDKIsAAAoomwAACioeAiicAAAKKi7QCgAAAihzAAAKKh4CKHwAAAoqABMwAQAUAAAADwAA
EQKMBgAAGy0IKAIAACsKKwICCgYqIgP+FQYAABsqHgIomQAACioAAAATMAIAKAAAABAAABECe54A
AApvnwAACgoGjAkAABstEigDAAArCgJ7ngAACgZvoAAACgYqSgIomQAACgJzoQAACn2eAAAKKgBC
U0pCAQABAAAAAAAMAAAAdjQuMC4zMDMxOQAAAAAFAGwAAAC0DgAAI34AACAPAABQEgAAI1N0cmlu
Z3MAAAAAcCEAAHADAAAjVVMA4CQAABAAAAAjR1VJRAAAAPAkAAAwCAAAI0Jsb2IAAAAAAAAAAgAA
AVcdogkJDgAAAPoBMwAWAAABAAAAUwAAAAsAAAAbAAAANQAAABwAAAChAAAABAAAAEAAAAAQAAAA
BQAAAA4AAAATAAAACQAAAAEAAAALAAAAAgAAAAMAAAADAAAAAABlCQEAAAAAAAYAmwdrDgYASQhr
DgYADgaYDQ8Aiw4AAAYAzAayCAoA9wWjDAoAzQU6CQoAIgY6CQ4ApgX7DQ4AMg2rDQYA8waYDQ4A
TwZEDg4AZwbAAwYA/Q/bCQ4AEA37DQ4ACwfAAwYAoQXbCQYAOwYlDg4AdgEQCQoA4gXiCRIAgwfJ
DhIAawfJDhIATwfJDhYA0QcoBQYAuwfbCRIA+QrJAgYArgR1DxIA5QbJAhoAYQW7DB4AWwHjDB4A
aAHjDB4AOADjDB4AGgDjDB4ASwDjDAYAYgvbCQYAGxF1DyIAVxCpCSIA9RCpCSYAXgsTDwYAZw11
DyIAKBCpCQoANwg6CQoAOgc6CRIAJgfJDhIA+AfJDgoApQY6CRIAyg/JAhYAkxAoBSoASQwoBRYA
fwsoBRIA2w/JAhoALQG7DAYA9APbCQYA6BDbCQYA/wTbCR4AAQDjDB4A5QDjDAYAoAHbCR4AhwDj
DCoAYxAoBR4ARgHjDB4AXwDjDAYA7QjbCR4A/ADjDB4ApADjDAYASQvbCQYAng/bCR4AwgDjDB4A
FAHjDA4AqwNEDi4Akg8IBS4AdQwIBQYADBLbCQYAuATbCQ4AwA9EDgYAbAvbCQYARxASEiIALQSp
CQYAsQ9rDg4AaQ9EDgYAogTbCRYAWAwoBQYAgQ3bCQAAAADtAQAAAAABAAEAAAAAADYK1hElAAEA
AQAAAAAAMA3WESkAAQACAAABEAAEENYROQABAAMAAQAAAP8JpgEcAAUACAABAAAAZQymAb0AFwAh
AAEAAAB1EKYBzQAXACYAAQAAAJIPpgE5ABkAKgABAAAAvw6mATkAGgAsAAUBAADtDQAAOQAbAC0A
BQEAAIUBAAA5ABsANAAxAAcMlwQxAN4LnwQxAPILpwQxACAMrwRWgKcCGAFWgIgCGAFWgJgCGAFW
gBUNGAEBACwLGAEBADgSGAEBACgIGAEBALsGGAEBAHsEtwQBADwLugQBAIYEvgQBAHUCGAEBAM0R
wgQBALgCGAEBALYRwgQBAP8OxgQBAMERvgQBAHwFywQGAJIP0AQGAL8O1AQBAIMQ2AQBAIMQ2AQh
AIYR3QJQIAAAAAAGGIsNBgABAFggAAAAAAYYiw0GAAEAYCAAAAAAERiRDWgBAQCKIAAAAAATCCMN
3QQBAJYgAAAAABMIJgriBAEAoiAAAAAAEwgMDecEAQCuIAAAAAATCN0N7AQBALogAAAAAAYYiw0G
AAEAxCAAAAAAxgKUEfEEAQAMIgAAAADGAmcIBgACADYkAAAAAMYCcggGAAIATCQAAAAABgDEBfcE
AgCUJQAAAADGAoADBgADAKgmAAAAAAYAJRH9BAMABCcAAAAABgABEf0EAwBcJwAAAAAGCAgL7gAD
AHEnAAAAAAYIGgsQAAMAfCcAAAAABggiEu4ABACRJwAAAAAGCC0SEAAEAMgnAAAAAAYIBgjuAAUA
4CcAAAAABggXCBAABQBEKAAAAAAGCH8G7gAGAFwoAAAAAAYIkgYQAAYAwCgAAAAABghhBFABBwDV
KAAAAAAGCG4EKQAHAOAoAAAAAAEIiAX9BAgAACkAAAAAAQA3AxAACAAsKQAAAAABACgDAgUJAHwp
AAAAAAEAcwMLBQsA7CkAAAAAAQBlAxEFDACkKwAAAAABAEIDGAUNABAsAAAAAAEAUQMGAA0AriwA
AAAABhiLDakCDQC9LAAAAADGCjoP/QQSAL0sAAAAAMYKUQ/9BBIAyCwAAAAAhgCqEVABEgDgLAAA
AACGABYQUAESAPUsAAAAAAYYiw0GABIAFS0AAAAAxgJiER4FEgBFLQAAAABGA1wR8QQWAFgtAAAA
AEYDlBHxBBcAWi0AAAAABhiLDSoFGABpLQAAAAAGCAgLuAIZAIotAAAAAAYYiw0qBRkAmS0AAAAA
xgIMD2gAGgCnLQAAAADGAiEExAAbAK8tAAAAAIMAngUxBRsAuy0AAAAAxgLrCO4AGwDELQAAAAAR
ABUDNgUbAOQtAAAAAAEAAQM+BRwA7S0AAAAABhiLDQYAHQD4LQAAAAADCAgEVwAdACwuAAAAAAYY
iw0GAB0AAAABAK4RAAABAE4EAAABAKEIAAABAKEIAAABAKEIAAABAKEIAAABAKEIAAABAFkEAAAB
ABIRAAACAPgEAAABALIRAAABALIRAAABAKsQAAACAFYCAAADAFQRAAAEAGoMAAAFAI0LAAABAF8C
AAACAO4EAAADAGoMAAAEAI0LAAABAGoMAAABAK4RAAABAKsQAAABAKsQAAABAH0LAAABABgEAAAB
ABgECQCLDQEAEQCLDQYAGQCLDQoAKQCLDRAAMQCLDRUAQQCLDRsAWQCLDQYAYQCLDQYAaQCLDQYA
gQCLDSEAkQCLDSkAoQCLDRAAqQCLDQYAsQCLDS4AuQCLDRAAwQCLDQYAyQCLDSkAUQGLDRAAWQGL
DRAAYQGLDRAAaQGLDRAAaQGLDTQAcQGLDSkASQCLDQYAUQCLDQYADACLDQYAFACLDQYAHACLDQYA
JACLDQYADAAIBFcAFAAIBFcAHAAIBFcAJAAIBFcA2QAxD2gA2QDJCW0A2QDSCXUAeQE+DHsAiQGh
CQEAqQGLDRAAiQHSCYEAsQH9BIcAsQHMCI4AgQFnCAYAoQHnCm0A0QAOEAYA2QCLDQYAgQGVA6wA
wQG+CrIAyQHJCbgA8QBpCr4A2QHBEMQA2QHJCcgAmQGjEM8A4QGHDNUA8QA+DMQAAQH9AcQA6QEL
AtsA8QBECuEAAQEhAsQA8QFnAucACQHcBO4A0QHrCO4A+QHvD/IA+QH2D/kA+QHvDwABwQHSCgYB
AQLJCQwB+QCDChIBCQLBEMQA+QFJEhgBCQLJCRsBEQHcBO4AEQH9AcQAEQFQBSIB+QH2DycB+QH2
Dy0BgQFyCAYA0QC2BQYA+QFBEkEBEQKLDRAA+QEiEEYB8QDaA1ABGQGLDRAAwQGeClQBIQLJCVoB
KQI+AhAAMQJXDWEBGQFCBO4AMQJFDWgBmQGAAwYAyQHBEMQA8QHpAykA2QFbCQYA8QFbCQYA8QGQ
EXoB4QDcBO4ACQHlBBAA4QBqBcQACQFdBYAB4QD6CMQACQEFCQEA4QAKCsQACQEYCgEA4QCOBMQA
CQGYBAEACQE1BAEAmQGID48BOQLJCZUBQQLnCm0A0QAlEZwBSQLwEKIBIQGLDQYAIQHWA7wBIQHw
EAYAiQDKBMEBIQEKEskBWQLdCNUBAQLBEMQACQJbCQYAwQE7DeUB+QEMD/0BiQGaCQ8CiQHJCRQC
cQDrCO4AaQJJBTsC+QH2D0ACKQGLDQYA0QD0CEcCKQG0CRAAOQFQCUwCcQK8Ce4AKQEzEFICcQKa
DlgCMQHBEMQAMQGnCF4CMQFzDWUCQQG1EGsCSQHcBO4AeQKSCG8CgQKZDHQCSQF4Ee4AQQFvEVAB
iQK8BQYA0QDrDoQCCQKQEZkCEQHlBBAAEQGpDp8CeQGLDakCkQKqEVABkQIWEFABmQGLDQYA8QD2
AcQAcQCLDQYAKQJxDLgCcQAMD2gAcQAhBMQAmQL5A8YCPACGEd0CRAB+CFcARACICPQCRACLDQYA
DgAUAB4DDgAYAPIDDgAcACMEDgAgAJIEKQBjAM0GLgALAHIFLgATAHsFLgAbAJoFLgAjAKMFQAA7
AO0FQAAzAPIFQwArAAEGQwAzAPIFSQBjAN4GYwArAAEGYwAzAPIFaQBjAPIGgAA7AO0FgwBDAO0F
gwBLAO0FgwArAAEGiQBjAP8GoAA7AO0FowBrAO0FowBzABoGowB7AF0GowCDAO0FowCLAPsFqQCT
ABMHqQCbACEHqQCjAE4HwAA7AO0FwwCLAPsFyQCTABMHyQCbAGUHyQCrAIAH4AA7AO0F4wCLAPsF
6QCTABMH6QCbAJMH6QCzALwHCQGTABMHCQGbANQHCQGzALwHKQGTABMHKQGbAAAIKQG7ACoIQwEz
APIFQwFTAGsGYwEzAPIFYwFbAPsFQAWLAPsFgAWLAPsFoAUzAPIFoAU7AO0FwAUzAPIFwAU7AO0F
4AUzAPIF4AU7AO0FAAYzAPIFAAY7AO0FIAY7AO0FQAY7AO0FYAY7AO0FYAYzAPIFgAY7AO0FoAY7
AO0FoAYzAPIFXACUADUBbAGGAa4B0QHcAeAB8AEFAhkCeQKLAr4C0QIEAAEABQAFAAYACwAIAA0A
CwAOAAAAMg1GBQAAOApLBQAAEA1QBQAA7w1VBQAAHgtaBQAAMRJaBQAAGwhaBQAArAZaBQAAcgRe
BQAAjAViBQAAPg9iBQAAVQ9iBQAAHgtnBQAADARtBQIABAADAAIABQAFAAIABgAHAAIABwAJAAIA
EAALAAEAEQALAAIAEgANAAEAEwANAAIAFAAPAAEAFQAPAAIAFgARAAEAFwARAAIAGAATAAEAGQAT
AAIAGgAVAAIAIgAXAAIAIwAZAAIAKwAbAAIANAAdADsAQgBJAFAAcgDDAtYC5QLsAgSAAAAAAAAA
AAAAAAAAAAAAAKYBAAAEAAAAAAAAAAAAAAD6ArcDAAAAAAQAAAAAAAAAAAAAAPoC2wkAAAAACgAA
AAAAAAAAAAAAAwPAAwAAAAABAAAAAAAAAAAAAAAMA9cBAAAAAA4AAAAAAAAAAAAAABUDyxAAAAAA
DgAAAAAAAAAAAAAAFQOXCwAAAAAOAAAAAAAAAAAAAAAVA7oLAAAAAAQAAAAAAAAAAAAAAPoCqQkA
AAAABAAAAAAAAAAAAAAAAwPJDQAAAAAOAAAAAAAAAAAAAAAVAzMRAAAAAA4AAAAAAAAAAAAAABUD
4AIAAAAACgAEAAsABAAAABAAFgD/AgAAEABjAP8CAAAAAGUA/wLfAKoBOwHMAjsB7wIAAABJRFRT
Q29tcG9uZW50TWV0YURhdGExMDAASURUU0V4dGVybmFsTWV0YWRhdGFDb2x1bW4xMDAASURUU0lu
cHV0Q29sdW1uMTAwAElEVFNPdXRwdXRDb2x1bW4xMDAASURUU0V4dGVybmFsTWV0YWRhdGFDb2x1
bW5Db2xsZWN0aW9uMTAwAElEVFNJbnB1dENvbHVtbkNvbGxlY3Rpb24xMDAASURUU091dHB1dENv
bHVtbkNvbGxlY3Rpb24xMDAASURUU1J1bnRpbWVDb25uZWN0aW9uQ29sbGVjdGlvbjEwMABJRFRT
SW5wdXRDb2xsZWN0aW9uMTAwAElEVFNPdXRwdXRDb2xsZWN0aW9uMTAwAElEVFNSdW50aW1lQ29u
bmVjdGlvbjEwMABJRFRTQ29ubmVjdGlvbk1hbmFnZXIxMDAASURUU0J1ZmZlck1hbmFnZXIxMDAA
SURUU0lucHV0MTAwAElEVFNPdXRwdXQxMDAAQ29udGV4dFZhbHVlYDEAVGhyZWFkU2FmZU9iamVj
dFByb3ZpZGVyYDEASW50MzIAU2NyaXB0Q29tcG9uZW50X2E4ZGIxMjRiMTZkMDRjNDQ5NTJmM2U5
YjQ2MzNlNjA1AENvenlSb2MuU1NJU1BsdXMuMjAxNwA8TW9kdWxlPgBnZXRfSUQAZ2V0X0xpbmVh
Z2VJRABGaW5kQ29sdW1uQnlMaW5lYWdlSUQAZ2V0X0V4dGVybmFsTWV0YWRhdGFDb2x1bW5JRABz
ZXRfQ29ubmVjdGlvbk1hbmFnZXJJRABPYmplY3RJRABJbnB1dElEAEdldE9iamVjdEJ5SUQAbV9m
ZXRjaFRlbXBsYXRlXzFQAEF0dHJUZW1wbGF0ZV8xUABDb25kVGVtbGF0ZV8yUABGZXRjaFRlbXBs
YXRlXzNQAG1fY29uZFRlbXBsYXRlX1AAQ296eVJvYy5TcWxTZXJ2ZXIuU1NJUwBNaWNyb3NvZnQu
U3FsU2VydmVyLk1hbmFnZWREVFMAVABEaXNwb3NlX19JbnN0YW5jZV9fAENyZWF0ZV9fSW5zdGFu
Y2VfXwBGaW5kQXR0cmlidXRlXwBGaXJlRXJyb3JfAEdldEF0dHJpYnV0ZXNfAFNldHVwT3V0cHV0
Q29sdW1uc18AR2V0TG9va3VwUm93XwBHZXRDYWNoZUtleV8AUmVpbml0aWFsaXplTWV0YURhdGEA
Z2V0X0NvbXBvbmVudE1ldGFEYXRhAFByb2plY3REYXRhAG1zY29ybGliAE1pY3Jvc29mdC5WaXN1
YWxCYXNpYwBBZGQAZ2V0X0lzQXR0YWNoZWQAc2V0X0lzVXNlZABHdWlkAENyZWF0ZUluc3RhbmNl
AGdldF9HZXRJbnN0YW5jZQBpbnN0YW5jZQBHZXRIYXNoQ29kZQBYbWxOb2RlAHNldF9Db2RlUGFn
ZQBnZXRfTWVzc2FnZQBlcnJNZXNzYWdlAG1lc3NhZ2UAZ2V0X1VzZUNhY2hlAHNldF9Vc2VDYWNo
ZQBtX3VzZUNhY2hlAG1fY2FjaGUAZ2V0X1NjYWxlAHNldF9TY2FsZQBJRGlzcG9zYWJsZQBIYXNo
dGFibGUAUnVudGltZVR5cGVIYW5kbGUAR2V0VHlwZUZyb21IYW5kbGUAZ2V0X05hbWUAc2V0X05h
bWUASW5wdXROYW1lAG5hbWUAVG9EYXRlVGltZQBNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5SdW50
aW1lAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlBpcGVsaW5lAEVzY2FwZQBnZXRfRGF0YVR5cGUA
c2V0X0RhdGFUeXBlAGdldF9BdHRyaWJ1dGVUeXBlAG1fdmFsdWVUeXBlAGdldF9Dcm1Db25uZWN0
aW9uVHlwZQBHZXRUeXBlAEFwcGxpY2F0aW9uQmFzZQBDbG9zZQBEaXNwb3NlAFZhbGlkYXRlAEVk
aXRvckJyb3dzYWJsZVN0YXRlAEhlbHBLZXl3b3JkQXR0cmlidXRlAEdlbmVyYXRlZENvZGVBdHRy
aWJ1dGUARGVidWdnYWJsZUF0dHJpYnV0ZQBFZGl0b3JCcm93c2FibGVBdHRyaWJ1dGUAQ29tVmlz
aWJsZUF0dHJpYnV0ZQBTdGFuZGFyZE1vZHVsZUF0dHJpYnV0ZQBIaWRlTW9kdWxlTmFtZUF0dHJp
YnV0ZQBnZXRfVmFsdWVBdHRyaWJ1dGUAc2V0X1ZhbHVlQXR0cmlidXRlAERlZmF1bHRWYWx1ZUF0
dHJpYnV0ZQBtX3ZhbHVlQXR0cmlidXRlAFRhcmdldEZyYW1ld29ya0F0dHJpYnV0ZQBJQ3JtQXR0
cmlidXRlAERlYnVnZ2VySGlkZGVuQXR0cmlidXRlAE15R3JvdXBDb2xsZWN0aW9uQXR0cmlidXRl
AENvbm5lY3Rpb25BdHRyaWJ1dGUARGVzY3JpcHRpb25BdHRyaWJ1dGUAVmFsaWRhdGVQcm9wZXJ0
aWVzQXR0cmlidXRlAFNvcnRQcm9wZXJ0aWVzQXR0cmlidXRlAENvbHVtbk1hcHBpbmdzQXR0cmli
dXRlAENvbXBpbGF0aW9uUmVsYXhhdGlvbnNBdHRyaWJ1dGUAQ0xTQ29tcGxpYW50QXR0cmlidXRl
AFNTSVNTY3JpcHRDb21wb25lbnRFbnRyeVBvaW50QXR0cmlidXRlAExpc3RBdHRyaWJ1dGUAZ2V0
X0tleUF0dHJpYnV0ZQBzZXRfS2V5QXR0cmlidXRlAG1fa2V5QXR0cmlidXRlAENhdGVnb3J5QXR0
cmlidXRlAFJ1bnRpbWVDb21wYXRpYmlsaXR5QXR0cmlidXRlAFByZUV4ZWN1dGUAUG9zdEV4ZWN1
dGUAZ2V0X1ZhbHVlAHNldF9WYWx1ZQBHZXRPYmplY3RWYWx1ZQB2YWx1ZQBnZXRfSXRlbU9mAFN5
c3RlbS5SdW50aW1lLlZlcnNpb25pbmcARnJvbUJhc2U2NFN0cmluZwBDb21wYXJlU3RyaW5nAFRv
U3RyaW5nAEZldGNoAGdldF9MZW5ndGgAc2V0X0xlbmd0aABNaWNyb3NvZnQuVmlzdWFsQmFzaWMu
TXlTZXJ2aWNlcy5JbnRlcm5hbABTeXN0ZW0uQ29tcG9uZW50TW9kZWwAZ2V0X0RldGFpbABSZW1v
dmVBbGwAU2NyaXB0Q29tcG9uZW50X2E4ZGIxMjRiMTZkMDRjNDQ5NTJmM2U5YjQ2MzNlNjA1LmRs
bABJc051bGwAU2V0TnVsbABTeXN0ZW0uWG1sAExvYWRYbWwAZ2V0X0lubmVyWG1sAGdldF9JdGVt
AHNldF9JdGVtAFN5c3RlbQBTeXN0ZW0uQ29tcG9uZW50TW9kZWwuRGVzaWduAFNjcmlwdE1haW4A
Z2V0X1ByZWNpc2lvbgBzZXRfUHJlY2lzaW9uAGdldF9BcHBsaWNhdGlvbgBNeUFwcGxpY2F0aW9u
AGdldF9FeHRlcm5hbE1ldGFkYXRhQ29sdW1uQ29sbGVjdGlvbgBnZXRfSW5wdXRDb2x1bW5Db2xs
ZWN0aW9uAGdldF9PdXRwdXRDb2x1bW5Db2xsZWN0aW9uAGdldF9SdW50aW1lQ29ubmVjdGlvbkNv
bGxlY3Rpb24AZ2V0X0lucHV0Q29sbGVjdGlvbgBnZXRfT3V0cHV0Q29sbGVjdGlvbgBBY3F1aXJl
Q29ubmVjdGlvbgBJQ3JtQ29ubmVjdGlvbgBnZXRfQ3JtQ29ubmVjdGlvbgBzZXRfQ3JtQ29ubmVj
dGlvbgBtX2NybUNvbm5lY3Rpb24AbV9jb25uZWN0aW9uAEFwcGxpY2F0aW9uRXhjZXB0aW9uAFNv
YXBFeGNlcHRpb24AU3RyaW5nQ29tcGFyaXNvbgBvAE91dHB1dE5hbWVNYXAAT3V0cHV0TWFwAE1p
Y3Jvc29mdC5TcWxTZXJ2ZXIuRFRTUnVudGltZVdyYXAATWljcm9zb2Z0LlNxbFNlcnZlci5EVFNQ
aXBlbGluZVdyYXAAbV9BcHBPYmplY3RQcm92aWRlcgBtX1VzZXJPYmplY3RQcm92aWRlcgBtX0Nv
bXB1dGVyT2JqZWN0UHJvdmlkZXIAbV9NeVdlYlNlcnZpY2VzT2JqZWN0UHJvdmlkZXIAZ2V0X0J1
ZmZlcgBQaXBlbGluZUJ1ZmZlcgBTY3JpcHRCdWZmZXIASW5wdXRCdWZmZXIAZ2V0X0Nvbm5lY3Rp
b25NYW5hZ2VyAGdldF9CdWZmZXJNYW5hZ2VyAFRvSW50ZWdlcgBTeXN0ZW0uQ29kZURvbS5Db21w
aWxlcgBNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5SdW50aW1lLldyYXBwZXIATWljcm9zb2Z0LlNx
bFNlcnZlci5EdHMuUGlwZWxpbmUuV3JhcHBlcgBnZXRfVXNlcgBMaXN0RGVsaW1pdGVyAGdldF9D
b21wdXRlcgBNeUNvbXB1dGVyAEZpcmVFcnJvcgBDbGVhclByb2plY3RFcnJvcgBTZXRQcm9qZWN0
RXJyb3IASUVudW1lcmF0b3IAR2V0RW51bWVyYXRvcgBBY3RpdmF0b3IALmN0b3IALmNjdG9yAFN5
c3RlbS5EaWFnbm9zdGljcwBNaWNyb3NvZnQuVmlzdWFsQmFzaWMuRGV2aWNlcwBTeXN0ZW0uV2Vi
LlNlcnZpY2VzAGdldF9XZWJTZXJ2aWNlcwBNeVdlYlNlcnZpY2VzAE1pY3Jvc29mdC5WaXN1YWxC
YXNpYy5BcHBsaWNhdGlvblNlcnZpY2VzAFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcwBN
aWNyb3NvZnQuVmlzdWFsQmFzaWMuQ29tcGlsZXJTZXJ2aWNlcwBTeXN0ZW0uUnVudGltZS5Db21w
aWxlclNlcnZpY2VzAERlYnVnZ2luZ01vZGVzAGdldF9DaGlsZE5vZGVzAFNldERhdGFUeXBlUHJv
cGVydGllcwBWYXJpYWJsZXMAQ296eVJvYy5TcWxTZXJ2ZXIuU1NJUy5BdHRyaWJ1dGVzAEdldEVu
dGl0eUF0dHJpYnV0ZXMAbV9hdHRyaWJ1dGVzAEVxdWFscwBTeXN0ZW0uV2ViLlNlcnZpY2VzLlBy
b3RvY29scwBDb250YWlucwBnZXRfU3RhdGljSW5wdXRDb2x1bW5zAGdldF9TdGF0aWNPdXRwdXRD
b2x1bW5zAENvbnZlcnNpb25zAFN5c3RlbS5Db2xsZWN0aW9ucwBnZXRfRGVzaWduQ29ubmVjdGlv
bnMAU3RyaW5nU3BsaXRPcHRpb25zAFJ1bnRpbWVIZWxwZXJzAE9wZXJhdG9ycwBTY3JpcHRCdWZm
ZXJQbHVzAFNjcmlwdENvbXBvbmVudFBsdXMAQ29uY2F0AEZvcm1hdABPYmplY3QATXlQcm9qZWN0
AENvbm5lY3QARW5kT2ZSb3dzZXQAU3BsaXQAWG1sRWxlbWVudABnZXRfRG9jdW1lbnRFbGVtZW50
AFNlY3VyaXR5RWxlbWVudABYbWxEb2N1bWVudABQaXBlbGluZUNvbXBvbmVudABVc2VyQ29tcG9u
ZW50AFBhcmVudENvbXBvbmVudABTY3JpcHRDb21wb25lbnQAZ2V0X0hvc3RDb21wb25lbnQAZ2V0
X0N1cnJlbnQAZ2V0X0NvdW50AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuVHhTY3JpcHQAQ29udmVydABT
b3J0AFhtbE5vZGVMaXN0AEdldEF0dHJpYnV0ZUxpc3QAYXR0ckxpc3QAQXJyYXlMaXN0AEdldEVu
dGl0eUxpc3QATWljcm9zb2Z0LlNxbFNlcnZlci5QaXBlbGluZUhvc3QASXNJbnB1dABJbnB1dF9Q
cm9jZXNzSW5wdXQATW92ZU5leHQAZ2V0X0lubmVyVGV4dABtX0NvbnRleHQATmV3AElucHV0X1By
b2Nlc3NJbnB1dFJvdwBOZXh0Um93AHJvdwBtX3ZhbHVlSWR4AG1fYXR0clRvSWR4AG1fa2V5SWR4
AFNjcmlwdENvbXBvbmVudF9hOGRiMTI0YjE2ZDA0YzQ0OTUyZjNlOWI0NjMzZTYwNS5NeQBUb0Fy
cmF5AFN5c3RlbS5TZWN1cml0eQBnZXRfRW50aXR5AHNldF9FbnRpdHkAbV9lbnRpdHkASXNOdWxs
T3JFbXB0eQAAAG88AGMAbwBuAGQAaQB0AGkAbwBuACAAYQB0AHQAcgBpAGIAdQB0AGUAPQAnAHsA
MAB9ACcAIABvAHAAZQByAGEAdABvAHIAPQAnAGUAcQAnACAAdgBhAGwAdQBlAD0AJwB7ADEAfQAn
ACAALwA+AAEDewAAA30AADE8AGEAdAB0AHIAaQBiAHUAdABlACAAbgBhAG0AZQA9ACcAewAwAH0A
JwAgAC8APgABgNM8AGYAZQB0AGMAaAAgAG0AYQBwAHAAaQBuAGcAPQAnAGwAbwBnAGkAYwBhAGwA
JwAgAGMAbwB1AG4AdAA9ACcAMQAnAD4APABlAG4AdABpAHQAeQAgAG4AYQBtAGUAPQAnAHsAMAB9
ACcAPgB7ADEAfQA8AGYAaQBsAHQAZQByACAAdAB5AHAAZQA9ACcAYQBuAGQAJwA+AHsAMgB9ADwA
LwBmAGkAbAB0AGUAcgA+ADwALwBlAG4AdABpAHQAeQA+ADwALwBmAGUAdABjAGgAPgABB3sAMAB9
AAA/UwBlAGwAZQBjAHQAIABEAHkAbgBhAG0AaQBjAHMAIABDAFIATQAgAGMAbwBuAG4AZQBjAHQA
aQBvAG4ALgAAHVMAZQBsAGUAYwB0ACAAZQBuAHQAaQB0AHkALgAAM1MAcABlAGMAaQBmAHkAIABr
AGUAeQAgAGEAdAB0AHIAaQBiAHUAdABlACgAcwApAC4AAC9TAGUAbABlAGMAdAAgAHYAYQBsAHUA
ZQAgAGEAdAB0AHIAaQBiAHUAdABlAC4AAAUsAAoAACVNAGEAcAAgAGkAbgBwAHUAdAAgAGMAbwBs
AHUAbQBuAHMALgAAG0MAcgBtAEMAbwBuAG4AZQBjAHQAaQBvAG4AABVOAG8AIABpAG4AcAB1AHQA
cwAuAAA9SwBlAHkAIABhAHQAdAByAGkAYgB1AHQAZQAoAHMAKQAgAG4AbwB0ACAAcwBlAGwAZQBj
AHQAZQBkAC4AABlEAFkATgBBAE0ASQBDAFMALQBDAFIATQABJ0QAeQBuAGEAbQBpAGMAcwAgAEMA
UgBNACAATABvAG8AawB1AHAAADUnAHsAMAB9ACcAIABhAHQAdAByAGkAYgB1AHQAZQAgAG4AbwB0
ACAAZgBvAHUAbgBkAC4AAQNfAAALSQBuAHAAdQB0AAAAANl/1AscgNdKnm/bznZWWc0ABCABAQgD
IAABBSABARERBCABAQ4FIAIBDg4FIAEBER0HIAQBDg4ODgQgAQECBSABAR0OBiADAQ4CAgYVEiwB
EgwGFRIsARIIBhUSLAESPQYVEiwBEigEIAATAAsHBx0ODggIDggRdQQgAQIcBCABHBwCHQ4FIAIB
HBwFIAASgMUFIAIBCBwGAAERgN0OBQABHQUOFwcMEnkIEn0OCAgSgIESgIUQDggIEoCJBSAAEoDh
BSAAEoDlBSABEnkcBSAAEoDtAyAACAYgARKAgRwFIAASgPEFIAASgPUFIAIICAgFIAASgPkGIAES
gIUIAyAADgYAAw4ODg4GAAMODhwcBQACDg4OBSAAEoEBBSABEn0cBSAAEoEFAgYOBiABEoCJHAQg
ABF1BQACDg4cBwAEDg4cHBwLBwUCAh0OEnkSgI0EAAECDgkgAh0OHQ4RgQ0DIAACBSAAEoERBiAB
EoEVHAYAAQESgI0DAAABDQcGHRJxEnkdDggOEnEFIAASgIUFIAEBEXUIBwMdDh0OEmkFIAASgR0G
IAESgSEcBSABHQ4IBxABAQEdHgADCgEODQcFHQ4SgJEdEnEIEnEEIAEIHAcAARJFEYEpByABEoEl
EkUDBwEOBgADCA4OAgMHAQIEBwEdDgogBgEIDg4OCBACDAcFEnEScR0ScQgScQcgAgIOEYExCQcG
Dg4dCAgIDgQgAQIIBCABHAghBxAdDh0OCB0cDhKAlRKAmQgICA4SgJ0SgI0SgKESgKUcBAABDg4G
AAIODh0cBCABDg4FIAASgTkFIAASgKUFIAASgJkGIAESgTkIBSAAEoChAyAAHAQAARwcBAABCBwK
BwMdEnEdEnESaQYgAR0ScQ4NBwYdEnESfR0OCA4ScQUgABKAiQkgBQERdQgICAgOIAUBEoDBCAIS
gMUSgMkFIAASgNEEBwEeAAIeAAUQAQAeAAQKAR4ABAcBEwAGFRIsARMABwYVEk0BEwAGFRJNARMA
AhMABAoBEwAFIAEBEwAIt3pcVhk04IkIsD9ffxHVCjoIFs9JC7gMNOoIiYRdzYCAzJGA0jwAZgBl
AHQAYwBoACAAbQBhAHAAcABpAG4AZwA9ACcAbABvAGcAaQBjAGEAbAAnACAAYwBvAHUAbgB0AD0A
JwAxACcAPgA8AGUAbgB0AGkAdAB5ACAAbgBhAG0AZQA9ACcAewAwAH0AJwA+AHsAMQB9ADwAZgBp
AGwAdABlAHIAIAB0AHkAcABlAD0AJwBhAG4AZAAnAD4AewAyAH0APAAvAGYAaQBsAHQAZQByAD4A
PAAvAGUAbgB0AGkAdAB5AD4APAAvAGYAZQB0AGMAaAA+ADA8AGEAdAB0AHIAaQBiAHUAdABlACAA
bgBhAG0AZQA9ACcAewAwAH0AJwAgAC8APgBuPABjAG8AbgBkAGkAdABpAG8AbgAgAGEAdAB0AHIA
aQBiAHUAdABlAD0AJwB7ADAAfQAnACAAbwBwAGUAcgBhAHQAbwByAD0AJwBlAHEAJwAgAHYAYQBs
AHUAZQA9ACcAewAxAH0AJwAgAC8APgAELAAKAAcGFRIsARIMBwYVEiwBEggHBhUSLAESPQcGFRIs
ARIoAgYCAwYSaQMGEm0DBh0IBAYdEnEEBh0RdQMGEiADBhIkBAYSgMEEAAASDAQAABIIBAAAEj0E
AAASKAUgAQESGAUgAQIQDgQgAB0OCCACEnEdEnEOBSABDhIYBiABHQ4SGAUgAB0ScQsgBAEIDhKA
xRKAyQYgAQESgMEEIAASRQcQAQEeAB4ABzABAQEQHgAECAASDAQIABIIBAgAEj0ECAASKAMoAA4D
KAACBCgAHQ4FKAASgNEEKAATAAgBAAgAAAAAAB4BAAEAVAIWV3JhcE5vbkV4Y2VwdGlvblRocm93
cwEIAQACAAAAAABJAQAaLk5FVEZyYW1ld29yayxWZXJzaW9uPXY0LjUBAFQOFEZyYW1ld29ya0Rp
c3BsYXlOYW1lEi5ORVQgRnJhbWV3b3JrIDQuNQQBAAAACAEAAQAAAAAABQEAAAAAGAEACk15VGVt
cGxhdGUIMTEuMC4wLjAAAEIBAAUAAAANQ3JtQ29ubmVjdGlvbgZFbnRpdHkMS2V5QXR0cmlidXRl
DlZhbHVlQXR0cmlidXRlCFVzZUNhY2hlAAANAQAIVmFsaWRhdGUAAGEBADRTeXN0ZW0uV2ViLlNl
cnZpY2VzLlByb3RvY29scy5Tb2FwSHR0cENsaWVudFByb3RvY29sEkNyZWF0ZV9fSW5zdGFuY2Vf
XxNEaXNwb3NlX19JbnN0YW5jZV9fAAAAEAEAC015LkNvbXB1dGVyAAATAQAOTXkuQXBwbGljYXRp
b24AAAwBAAdNeS5Vc2VyAAATAQAOTXkuV2ViU2VydmljZXMAAA0BAAhTZXR0aW5ncwAALAEAJ1Nl
bGVjdCBEeW5hbWljcyBDUk0gQ29ubmVjdGlvbiBNYW5hZ2VyLgAAFgEAEUNybUNvbm5lY3Rpb25U
eXBlAAAaAQAVU2VsZWN0IGxvb2t1cCBlbnRpdHkuAAASAQANR2V0RW50aXR5TGlzdAAAKAEAI1Nw
ZWNpZnkgb25lIG9yIG1vcmUga2V5IGF0dHJpYnV0ZXMuAAAXAQAQR2V0QXR0cmlidXRlTGlzdAEA
AAArAQAmU3BlY2lmeSBvbmUgb3IgbW9yZSBsb29rdXAgYXR0cmlidXRlcy4AACkBACRTZWxlY3Qg
d2hldGhlciBtZW1vcnkgY2FjaGUgaXMgdXNlZC4AAAUBAAEAAIhbAAAAAAAAAAAAAKJbAAAAIAAA
AAAAAAAAAAAAAAAAAAAAAAAAAACUWwAAAAAAAAAAAAAAAF9Db3JEbGxNYWluAG1zY29yZWUuZGxs
AAAAAAD/JQAgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEAAAABgAAIAAAAAAAAAA
AAAAAAAAAAEAAQAAADAAAIAAAAAAAAAAAAAAAAAAAAEAAAAAAEgAAABYYAAA7AIAAAAAAAAAAAAA
7AI0AAAAVgBTAF8AVgBFAFIAUwBJAE8ATgBfAEkATgBGAE8AAAAAAL0E7/4AAAEAAAAAAAAAAAAA
AAAAAAAAAD8AAAAAAAAABAAAAAIAAAAAAAAAAAAAAAAAAABEAAAAAQBWAGEAcgBGAGkAbABlAEkA
bgBmAG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEAdABpAG8AbgAAAAAAAACwBEwCAAABAFMAdABy
AGkAbgBnAEYAaQBsAGUASQBuAGYAbwAAACgCAAABADAAMAAwADAAMAA0AGIAMAAAACwAAgABAEYA
aQBsAGUARABlAHMAYwByAGkAcAB0AGkAbwBuAAAAAAAgAAAAMAAIAAEARgBpAGwAZQBWAGUAcgBz
AGkAbwBuAAAAAAAwAC4AMAAuADAALgAwAAAAigA1AAEASQBuAHQAZQByAG4AYQBsAE4AYQBtAGUA
AABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfAGEAOABkAGIAMQAyADQAYgAxADYAZAAw
ADQAYwA0ADQAOQA1ADIAZgAzAGUAOQBiADQANgAzADMAZQA2ADAANQAuAGQAbABsAAAAAAAoAAIA
AQBMAGUAZwBhAGwAQwBvAHAAeQByAGkAZwBoAHQAAAAgAAAAkgA1AAEATwByAGkAZwBpAG4AYQBs
AEYAaQBsAGUAbgBhAG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AYQA4AGQA
YgAxADIANABiADEANgBkADAANABjADQANAA5ADUAMgBmADMAZQA5AGIANAA2ADMAMwBlADYAMAA1
AC4AZABsAGwAAAAAADQACAABAFAAcgBvAGQAdQBjAHQAVgBlAHIAcwBpAG8AbgAAADAALgAwAC4A
MAAuADAAAAA4AAgAAQBBAHMAcwBlAG0AYgBsAHkAIABWAGUAcgBzAGkAbwBuAAAAMAAuADAALgAw
AC4AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAwAAAC0OwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=]]></arrayElement></arrayElements></property><property id="39" 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_b792924a89b64c848ebc45d92841bd4d</property><property id="40" name="ScriptLanguage" dataType="System.String" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91">VisualBasic</property><property id="46" name="UserComponentTypeName" dataType="System.String">CozyRoc.ScriptComponentHostPlus</property></properties><connections><connection id="48" name="CrmConnection" connectionManagerID="{EB1EB761-DB8F-4F1C-96A3-1EF8BB8AE919}" /></connections><inputs><input id="49" name="Input" hasSideEffects="true"><externalMetadataColumns isUsed="True" /></input></inputs><outputs><output id="51" name="Output" synchronousInputId="49"><externalMetadataColumns /></output></outputs></component>