<component id="2" name="Merge Process" componentClassID="Microsoft.ManagedComponentHost" description="Executes a custom script" localeId="1033" version="9" 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="7" 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[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-2011 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.Data
Imports System.Data.Common
Imports System.Data.SqlClient
Imports System.Collections
Imports System.Reflection
Imports System.Diagnostics

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


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<SortProperties(New String() { _
    "Connection", _
    "IsTableVariable", "Table", "TableVariable", _
    "PrimaryKeys", "StageVariable"})> _
<ValidateProperties("Validate")> _
<FilterProperties("GetProperties")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    Private Class Consts
        Public Const ColumnSeparator As String = "," + vbLf
        Public Const DElement_1P As String = "D.[{0}]"
        Public Const SElement_1P As String = "S.[{0}]"
        Public Const CreateStageSql_2P As String = "SELECT * INTO {0} FROM {1} WHERE 1=0"
        Public Const MergeSql_7P As String = _
            "MERGE {0} AS D USING {1} AS S ON ({2}) " & _
            "WHEN NOT MATCHED THEN INSERT ({3}) VALUES ({4}) " & _
            "WHEN MATCHED AND ({5}) THEN UPDATE SET {6};"
        Public Const DropTableSql_1P As String = "DROP TABLE {0}"
    End Class   ' Consts


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        ' Nothing to do here.
    End Sub ' Input_ProcessInputRow


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

        Try
            Dim tblCols As DataTable = GetColumns_(False)
            Dim primaryKeys As ArrayList = New ArrayList(Me.PrimaryKeys.Split( _
                New String() {Consts.ColumnSeparator}, _
                StringSplitOptions.None))

            ' Create MERGE statement elements.
            Dim onList As ArrayList = New ArrayList()
            Dim insertDList As ArrayList = New ArrayList()
            Dim insertSList As ArrayList = New ArrayList()
            Dim matchCompare As ArrayList = New ArrayList()
            Dim matchSet As ArrayList = New ArrayList()
            For Each columnRow As DataRow In tblCols.Rows
                Dim columnName As String = CStr(columnRow("ColumnName"))

                Call insertDList.Add(String.Format("[{0}]", columnName))
                Call insertSList.Add(String.Format(Consts.SElement_1P, columnName))

                If primaryKeys.Contains(columnName) Then
                    ' Primary key.
                    Call onList.Add(String.Format( _
                        "{0} = {1}", _
                        String.Format(Consts.DElement_1P, columnName), _
                        String.Format(Consts.SElement_1P, columnName)))
                Else
                    Call matchCompare.Add(String.Format( _
                        "{0} <> {1}", _
                        String.Format(Consts.DElement_1P, columnName), _
                        String.Format(Consts.SElement_1P, columnName)))
                    Call matchSet.Add(String.Format( _
                        "{0} = {1}", _
                        String.Format(Consts.DElement_1P, columnName), _
                        String.Format(Consts.SElement_1P, columnName)))
                End If
            Next

            ' Initialize command.
            Dim conn As DbConnection = GetConnection_(False)
            m_command = conn.CreateCommand()

            Dim table As String = GetTable_()

            ' Create stage table.
            Dim stage As String = GetTemporaryTable_()
            m_command.CommandText = String.Format(Consts.CreateStageSql_2P, stage, table)
            Call m_command.ExecuteNonQuery()

            If Not String.IsNullOrEmpty(Me.StageVariable) Then
                ' Store stage table name in variable.
                Call SetVariable_(Me.StageVariable, stage)
            End If

            ' Setup MERGE statement.
            m_mergeSql = String.Format( _
                Consts.MergeSql_7P, _
                table, _
                stage, _
                String.Join(" AND ", CType(onList.ToArray(GetType(String)), String())), _
                String.Join(", ", CType(insertDList.ToArray(GetType(String)), String())), _
                String.Join(", ", CType(insertSList.ToArray(GetType(String)), String())), _
                String.Join(" OR ", CType(matchCompare.ToArray(GetType(String)), String())), _
                String.Join(", ", CType(matchSet.ToArray(GetType(String)), String())))
            Call FireInformation_(String.Format("Setup statement: {0}", m_mergeSql))

            ' Setup drop stage table.
            m_dropStageSql = String.Format(Consts.DropTableSql_1P, stage)
        Catch ex As Exception
            Call FireError_(ex.Message)
        End Try
    End Sub ' PreExecute


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

        If Not m_command Is Nothing Then
            Try
                ' Execute merge statement.
                m_command.CommandText = m_mergeSql
                Call m_command.ExecuteNonQuery()

                ' Drop stage table.
                m_command.CommandText = m_dropStageSql
                Call m_command.ExecuteNonQuery()
            Catch ex As Exception
                Call FireError_(ex.Message)
            End Try

            Dim conn As DbConnection = m_command.Connection
            Call m_command.Dispose()
            m_command = Nothing
            Call conn.Dispose()
        End If
    End Sub ' PostExecute


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

        Try
            If String.IsNullOrEmpty(Me.Connection) Then
                Throw New ApplicationException("Select connection.")
            End If

            If String.IsNullOrEmpty(Me.Table) Then
                Throw New ApplicationException("Select destination table.")
            End If

            If String.IsNullOrEmpty(Me.PrimaryKeys) Then
                Throw New ApplicationException("Specify table primary keys.")
            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("Connection").ConnectionManagerID = Me.Connection

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

        Validate = result
    End Function    'Validate


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function GetProperties() As String()
        Dim result As New ArrayList

        Call result.Add("Connection")
        Call result.Add("IsTableVariable")
        Call result.Add(IIf(Me.IsTableVariable, "TableVariable", "Table"))
        Call result.Add("PrimaryKeys")
        Call result.Add("StageVariable")

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


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of tables.
    Public Function GetTables() As Object()
        Dim result As ArrayList = New ArrayList()

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

            ' Get tables.
            Using conn As DbConnection = GetConnection_(True)
                Dim tableType As String = "TABLE"
                If TypeOf conn Is SqlConnection Then
                    ' SQL uses different table type identifier.
                    tableType = "BASE TABLE"
                End If

                Dim tblTables As DataTable = conn.GetSchema( _
                    "Tables", _
                    New String() {Nothing, Nothing, Nothing, tableType})

                ' Get table schema column name.
                Dim schemaCol As String = tblTables.Columns(1).ColumnName

                For Each tableRow As DataRow In tblTables.Rows
                    Dim tableSchema As String = CStr(tableRow(schemaCol))
                    Dim tableName As String = CStr(tableRow("table_name"))

                    Call result.Add(String.Format("[{0}].[{1}]", tableSchema, tableName))
                Next

                Call result.Sort()
            End Using
        Catch ex As Exception
            Call MsgBox(ex.Message, MsgBoxStyle.OkOnly Or MsgBoxStyle.Exclamation)
        End Try

        GetTables = result.ToArray()
    End Function    ' GetTables


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns selected destination table columns.
    Public Function GetColumns() As Object()
        Dim result As ArrayList = New ArrayList

        Try
            Dim tblCols As DataTable = GetColumns_(True)
            For Each columnRow As DataRow In tblCols.Rows
                Call result.Add(columnRow("ColumnName"))
            Next

            Call result.Sort()
        Catch ex As Exception
            Call MsgBox(ex.Message, MsgBoxStyle.OkOnly Or MsgBoxStyle.Exclamation)
        End Try

        GetColumns = result.ToArray()
    End Function    ' GetColumns


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select ADO.NET Connection Manager.")> _
    <Connection("AdoNetConnectionType")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property Connection() As String
        Get
            Connection = m_connection
        End Get
        Set(ByVal value As String)
            If m_connection <> value Then
                m_connection = value
                Me.Table = String.Empty
            End If
        End Set
    End Property    ' Connection


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select if destination table is stored in variable.")> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property IsTableVariable() As Boolean
        Get
            IsTableVariable = m_isTableVar
        End Get
        Set(ByVal value As Boolean)
            If m_isTableVar <> value Then
                m_isTableVar = value
                Me.Table = String.Empty
            End If
        End Set
    End Property    ' IsTableVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select destination table.")> _
    <List("GetTables", False, True)> _
    <RefreshProperties(RefreshProperties.All)> _
    Public Property Table() As String
        Get
            Table = m_table
        End Get
        Set(ByVal value As String)
            If m_table <> value Then
                m_table = value

                Me.PrimaryKeys = GetPrimaryKeys_()
            End If
        End Set
    End Property    ' Table


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select variable containing destination table.")> _
    <Variable()> _
    Public Property TableVariable() As String
        Get
            TableVariable = Me.Table
        End Get
        Set(ByVal value As String)
            Me.Table = value
        End Set
    End Property    ' TableVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specify table primary keys.")> _
    <List("GetColumns", True, False)> _
    Public Property PrimaryKeys() As String
        Get
            PrimaryKeys = m_primaryKeys
        End Get
        Set(ByVal value As String)
            m_primaryKeys = value
        End Set
    End Property    ' PrimaryKeys


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select variable to store stage table (optional).")> _
    <Variable()> _
    Public Property StageVariable() As String
        Get
            StageVariable = m_stageVar
        End Get
        Set(ByVal value As String)
            m_stageVar = value
        End Set
    End Property    ' StageVariable
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private ReadOnly Property AdoNetConnectionType() As String()
        Get
            AdoNetConnectionType = New String() {"ADO.NET"}
        End Get
    End Property    ' AdoNetConnectionType


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns selected destination table primary keys.
    Private Function GetPrimaryKeys_() As String
        Dim result As ArrayList = New ArrayList

        Try
            Dim tblCols As DataTable = GetColumns_(True)
            For Each columnRow As DataRow In tblCols.Rows
                If CBool(columnRow("IsKey")) Then
                    ' Key column.
                    Call result.Add(columnRow("ColumnName"))
                End If
            Next
        Catch ex As Exception
            ' Silently catch the error.
        End Try

        GetPrimaryKeys_ = String.Join( _
            Consts.ColumnSeparator, _
            CType(result.ToArray(GetType(String)), String()))
    End Function    ' GetPrimaryKeys_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetColumns_(ByVal design As Boolean) As DataTable
        Dim result As DataTable

        Using conn As DbConnection = GetConnection_(design)
            Using cmd As DbCommand = conn.CreateCommand()
                cmd.CommandText = String.Format("SELECT * FROM {0}", GetTable_())
                Dim reader As DbDataReader = cmd.ExecuteReader( _
                    CommandBehavior.SchemaOnly Or CommandBehavior.KeyInfo)
                result = reader.GetSchemaTable()
            End Using
        End Using

        GetColumns_ = result
    End Function    ' GetColumns_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub FireError_(ByVal message As String)
        Dim cancel As Boolean
        Call MyBase.ComponentMetaData.FireError( _
            0, _
            "Merge Process", _
            message, _
            String.Empty, _
            0, _
            cancel)
    End Sub ' FireError_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub FireInformation_(ByVal message As String)
        Dim fireAgain As Boolean
        Call MyBase.ComponentMetaData.FireInformation( _
            0, _
            "Merge Process", _
            message, _
            String.Empty, _
            0, _
            fireAgain)
    End Sub ' FireInformation_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Get connection object.
    Private Function GetConnection_(ByVal design As Boolean) As DbConnection
        Dim result As DbConnection

        If design Then
            result = CType( _
                    MyBase.DesignConnections(Me.Connection).AcquireConnection(Nothing), _
                    DbConnection)
        Else
            result = CType( _
                    MyBase.Connections.Connection.AcquireConnection(Nothing), _
                    DbConnection)
        End If

        GetConnection_ = result
    End Function    ' GetConnection_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetVariable_(ByVal varName As String) As Object
        Dim result As Object

        If String.IsNullOrEmpty(varName) Then
            ' Variable not set.
            Exit Function
        End If

        Dim vars As IDTSVariables100
        Call MyBase.VariableDispenser.LockOneForRead(varName, vars)
        Try
            result = vars(varName).Value
        Finally
            Call vars.Unlock()
        End Try

        GetVariable_ = result
    End Function    ' GetVariable_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub SetVariable_(ByVal varName As String, ByVal value As Object)
        If String.IsNullOrEmpty(varName) Then
            ' Variable not set.
            Exit Sub
        End If

        Dim vars As IDTSVariables100
        Call MyBase.VariableDispenser.LockOneForWrite(varName, vars)
        Try
            vars(varName).Value = value
        Finally
            Call vars.Unlock()
        End Try
    End Sub ' SetVariable_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns temporary table name.
    Private Function GetTemporaryTable_() As String
        Const TempTable As String = "MPT"

        Dim table As String = GetTable_()

        GetTemporaryTable_ = String.Format( _
            "[{0}].[{1}]", _
            ExtractSchema_(table), _
            TempTable & "_" & ExtractTable_(table) & New Random().Next(0, 1000))
    End Function    ' GetTemporaryTable_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function ExtractSchema_(ByVal combo As String) As String
        Const EndS As String = "].["
        ExtractSchema_ = combo.Substring(1, combo.IndexOf(EndS) - 1)
    End Function    ' ExtractSchema_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function ExtractTable_(ByVal combo As String) As String
        Const Start As String = "].["
        Dim indexStart As Integer = combo.IndexOf(Start) + Start.Length
        ExtractTable_ = combo.Substring(indexStart, combo.Length - indexStart - 1)
    End Function    ' ExtractTable_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetTable_() As String
        Dim result As String

        If Me.IsTableVariable Then
            result = GetVariable_(Me.TableVariable).ToString()
        Else
            result = Me.Table
        End If

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


#Region "Attributes"
    Private m_connection As String
    Private m_isTableVar As Boolean
    Private m_table As String
    Private m_primaryKeys As String
    Private m_stageVar As String

    Private m_command As DbCommand
    Private m_mergeSql As String
    Private m_dropStageSql As String
#End Region ' Attributes
End Class   ' ScriptMain
]]></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[ScriptComponent_2e3d4c56d0694f9bbd032f1e0950bec1.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>{20C9D0FE-A7B8-4A70-9FF9-320F4E23FE8C}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>My Project</AppDesignerFolder>
    <RootNamespace>ScriptComponent_2e3d4c56d0694f9bbd032f1e0950bec1</RootNamespace>
    <AssemblyName>ScriptComponent_2e3d4c56d0694f9bbd032f1e0950bec1</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <OptionCompare>Binary</OptionCompare>
    <OptionExplicit>On</OptionExplicit>
    <OptionStrict>On</OptionStrict>
  </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.2014, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files (x86)\Microsoft SQL Server\120\SDK\Assemblies\CozyRoc.SSISPlus.2014.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=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="System">
      <Private>False</Private>
    </Reference>
    <Reference Include="System.Data">
      <Private>False</Private>
    </Reference>
    <Reference Include="Microsoft.SqlServer.ManagedDTS">
      <Private>False</Private>
    </Reference>
    <Reference Include="System.Xml">
      <Private>False</Private>
    </Reference>
  </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_SC120" />
        <ProjectClient>
          <HostIdentifier>SSIS_SC120</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>
</Project>]]></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 Connection() As IDTSConnectionManager100
        Get
            Return ParentComponent.ComponentMetaData.RuntimeConnectionCollection("Connection").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[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:CodeName>ScriptComponent_2e3d4c56d0694f9bbd032f1e0950bec1</msb:CodeName>
		<msb:DisplayName>ScriptComponent_2e3d4c56d0694f9bbd032f1e0950bec1</msb:DisplayName>
		<msb:ProjectId>{59296BD8-09B1-4E57-8776-0DA5BE10C4CB}</msb:ProjectId>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:Project Include="ScriptComponent_2e3d4c56d0694f9bbd032f1e0950bec1.vbproj"/>
		<msb:Folder Include="My Project\"/>
		<msb:File Include="ScriptMain.vb"/>
		<msb:File Include="ComponentWrapper.vb"/>
		<msb:File Include="BufferWrapper.vb"/>
	</msb:ItemGroup>
</c:Project>]]></arrayElement></arrayElements></property><property id="8" 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_2e3d4c56d0694f9bbd032f1e0950bec1.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v
ZGUuDQ0KJAAAAAAAAABQRQAATAEDAA9YElQAAAAAAAAAAOAAAiELAQsAADwAAAAGAAAAAAAAflsA
AAAgAAAAYAAAAAAAEAAgAAAAAgAABAAAAAAAAAAEAAAAAAAAAACgAAAAAgAAAAAAAAIAQIUAABAA
ABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAADBbAABLAAAAAGAAAEgDAAAAAAAAAAAAAAAAAAAA
AAAAAIAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAAhDsAAAAgAAAAPAAAAAIA
AAAAAAAAAAAAAAAAACAAAGAucnNyYwAAAEgDAAAAYAAAAAQAAAA+AAAAAAAAAAAAAAAAAABAAABA
LnJlbG9jAAAMAAAAAIAAAAACAAAAQgAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAABg
WwAAAAAAAEgAAAACAAUAuC4AAHgsAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4CKAEAAAoqHgIoBAAACiqmcwYAAAqAAQAABHMHAAAKgAIA
AARzCAAACoADAAAEcwkAAAqABAAABCoAABMwAQALAAAAAQAAEX4BAAAEbwoAAAoqABMwAQALAAAA
AgAAEX4CAAAEbwsAAAoqABMwAQALAAAAAwAAEX4DAAAEbwwAAAoqABMwAQALAAAABAAAEX4EAAAE
bw0AAAoqABMwAgANAAAABQAAEQIDKBEAAAooEgAACioAAAATMAEABwAAAAYAABECKBMAAAoqABMw
AQALAAAABwAAEdAFAAACKBQAAAoqABMwAQAHAAAACAAAEQIoFQAACioAEzABABAAAAAJAAARAowB
AAAbLQYoAQAAKyoCKhMwAgAQAAAACgAAEQMSAP4VAgAAGwaBAgAAGyoeAigXAAAKKhMwAgAoAAAA
CwAAEQJ7GQAACm8aAAAKCweMAwAAGy0SKAIAACsLAnsZAAAKB28bAAAKBypKAigXAAAKAnMcAAAK
fRkAAAoqADoCAwQFDgQOBSgeAAAKKgATMAEABwAAAAwAABEWjRwAAAEqABMwAQAHAAAADQAAERaN
HAAAASoAEzABAAkAAAAOAAARAigfAAAKCgYqAAAAEzABAAkAAAAPAAARAiggAAAKCgYqAAAAfgIo
IgAACgICcxoAAAZ9BgAABAICcxwAAAZ9BwAABCq+AwIoIwAACm8kAAAKcgEAAHBvJQAACm8mAAAK
MxECAgMXBQ4EcxEAAAZvGAAABipKKwcCA28ZAAAGA28UAAAGLfEqAAYqAAA6AigXAAAKAgN9CAAA
BCoAEzACACAAAAAQAAARAnsIAAAEbyMAAApvJwAACnINAABwbygAAApvKQAACio6AigXAAAKAgN9
CQAABCoAHgIoFgAABioGKgAAGzAHAN8CAAARAAARAigqAAAKAhZvMwAABhMJAm8tAAAGF40cAAAB
Ew0RDRZyIwAAcKIRDRZvKwAACnMsAAAKEwZzLQAAChMFcy0AAAoLcy0AAAoMcy0AAAoNcy0AAAoT
BBEJby4AAApvLwAAChMOONEAAAARDm8wAAAKdCUAAAETCxELcikAAHBvMQAACigyAAAKEwoHcj8A
AHARCigzAAAKbzQAAAomCHJLAABwEQooMwAACm80AAAKJhEGEQpvNQAACiwsEQVyWwAAcHJvAABw
EQooMwAACnJLAABwEQooMwAACig2AAAKbzQAAAomK1MJcn8AAHBybwAAcBEKKDMAAApySwAAcBEK
KDMAAAooNgAACm80AAAKJhEEclsAAHBybwAAcBEKKDMAAApySwAAcBEKKDMAAAooNgAACm80AAAK
JhEObzcAAAo6I////94WEQ51LAAAASwMEQ51LAAAAW84AAAK3AIWbzYAAAYKAgZvOQAACn0PAAAE
Am88AAAGEwgCbzkAAAYTBwJ7DwAABHKVAABwEQcRCCg2AAAKbzoAAAoCew8AAARvOwAACiYCby8A
AAYoPAAACi0OAgJvLwAABhEHbzgAAAYCct8AAHAdjQMAAAETDxEPFhEIohEPFxEHohEPGHLmAQBw
EQXQHAAAASgUAAAKbz0AAAp0CgAAGyg+AAAKohEPGXLyAQBwB9AcAAABKBQAAApvPQAACnQKAAAb
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
ZwQdAxoAIgX6BB4AkQaFBh4A5QbSBh4AngfSBiIAiwh1CCIApAh1CCIA0Qi5CAYA+wjoCAoAOgkT
CQoAUgkTACIAhwlqCQYAvAmcCQYA2gmDAQYA/gmDAQoAFwoTAAYAZQpGCgYAeQqDARIAgApiAwYA
jQqDASYA8ArHCiYAHwvHCiYASgvHCiYAZwvHCiYAqgvHCgYA7AvZCx4A9guFBgYA/guDAQYACAzZ
CwYAFAyDAQYALQzZCx4AOQyFBgoAbgwTCQYAlwyDAQYA5wyDAQoA+gwTCSIA0QN1CAYANA2DAQoA
YQ0TAB4Ahw1xDR4Anw2FBh4AwA2FBgoA3w0TAAoA7A0TAAoA/w0TCR4AJw7SBh4ANA6FBioA9ACa
DioA0A6aDhoA9A76BBoABQ/6BBoAQw/6BAYAag+DARIAmg9iAw4A4w/BDw4A/Q/BDw4AGRDBDyIA
MRB1CCIATBB1CA4AXhDBDyIAbBB1CA4AgRDBDw4AkxDBDwYApxCcCQYAxxCcCQYA/xDlEAAAAAAB
AAAAAAABAAEAAAAAACkANwAFAAEAAQAAAAAAawA3AAkAAQACAAABEAB2ADcADQABAAMABQEAAIAA
AAANAAUACAAFAQAAjgAAAA0ABQAPAAEAAACpALUAHQAGABEAAQAAAOYAtQAtAAYAFgABAAAA9AC1
AA0ACAAaAAEAAAAAAbUADQAJABwAAQAAAAoBtQAgAAoAHQADAAAAFQEAAA0AEgA9ADEApQEgADEA
zgEtADEA8AE6ADEAFQJHACEA8QKQAAYA9ADJAAYAAAHNAAEAxwThAAEAxwThAAEAYwcmAQEAcAcp
AQEAfQcmAQEAhQcmAQEAkwcmAQEAqAcsAQEAsgcmAQEAvQcmAVaAHwgmAVaALwgmAVaAOwgmAVaA
RwgmAVaAWQgmAVaAZQgmAVAgAAAAAAYYVgETAAEAWCAAAAAABhhWARMAAQBgIAAAAAARGJEBFwAB
AIwgAAAAABMImAEbAAEApCAAAAAAEwi+ASgAAQC8IAAAAAATCOcBNQABANQgAAAAABMIBQJCAAEA
7CAAAAAARgJLAmMAAQAIIQAAAABGAlQCaAACABwhAAAAAIMAZQJsAAIANCEAAAAARgJtAnEAAgBI
IQAAAAARAHYCeAACAGQhAAAAAAEAlAKAAAMAgCEAAAAABhhWARMABACIIQAAAAADCKgCiwAEALwh
AAAAAAYYVgETAAQA0CEAAAAABhhWAa8ABADgIQAAAABGCv0DuwAJAPQhAAAAAEYKFAS7AAkACCIA
AAAAhgAsBMAACQAgIgAAAACGADQEwAAJADgiAAAAAAYYVgETAAkAWCIAAAAARgJ7BNEACQCIIgAA
AABGA5oE2wANAJwiAAAAAEYDrQTbAA4AoCIAAAAABhhWAeUADwCwIgAAAAAGCDsF6wAQANwiAAAA
AAYYVgHlABAA7CIAAAAABhhWARMAEQD0IgAAAABGAq0E2wARAPgiAAAAAEYCVQUTABIAGCYAAAAA
RgJgBRMAEgDAJgAAAAAGAGwF9QASAGQnAAAAAAYAgAW7ABMA4CcAAAAABgCOBfsAEwBEKQAAAAAG
AJgF+wATAAAqAAAAAAYIOwVxABMAGCoAAAAABgijBQABEwA8KgAAAAAGCLgFwAAUAFQqAAAAAAYI
zAUFARQAdCoAAAAABgjgBXEAFQCMKgAAAAAGCOoFAAEVALQqAAAAAAYI9AVxABYAzCoAAAAABggG
BgABFgDYKgAAAAAGCBgGcQAXAPAqAAAAAAYIKAYAARcA/CoAAAAABgg4BnEAGAAUKwAAAAAGCEoG
AAEYACArAAAAAAEIXAa7ABkAQCsAAAAAAQB1BnEAGQAQLAAAAAABAJsGCgEZAIwsAAAAAAEArgYA
ARoAtCwAAAAAAQDBBgABGwDcLAAAAAABAPIGEAEcACgtAAAAAAEAAQcWAR0AgC0AAAAAAQAWBxsB
HgDQLQAAAAABACMHcQAgACAuAAAAAAEANgchASAARC4AAAAAAQBLByEBIQB8LgAAAAABAFkHcQAi
ALAuAAAAAAYYVgETACIAAAABAFICAAABAIsCAAABAIsCAAABANEDAAACANsDAAADAOQDAAAEAOwD
AAAFAPMDAAABAIgEAAACAJAEAAADAOwDAAAEAPMDAAABAOwDAAABAMMEAAABANEDAAABANEDAAAB
AMMEAAABAHUFAAABALIFAAABALIFAAABALIFAAABALIFAAABALIFAAABALIFAAABAKcGAAABALkG
AAABALkGAAABAKcGAAABAA4HAAABAA4HAAACALIFAAABAEUHAAABAEUHCQBWARMAgQBWAccCkQBW
AdYCEQBWARMAmQBWARMAJABWARMALABWARMANABWARMAPABWARMAJACoAosALACoAosANACoAosA
PACoAosAoQBWARMAqQBWARMAsQBWAQABuQDLCXADGQBLAmMAGQBUAmgAKQDsCX0DGQBtAnEAyQAI
Co0DGQBWARMA0QBWAZ0DRADxApAATAAyCosATAA8ChoETABWARMA2QBWAQUBOQBWAa8A6QAsBMAA
6QA0BMAA8QBWAQUBWQBWARMAQQAJCzQE+QA2CzkEAQFXCz8ECQFgC2gA+QCKC0YEEQFXC0wEGQHD
C+sAQQBVBRMA4QAnDFgEIQFWAWIEIQFWARMAaQBLDGkEUQFUDG8EOQFiDHUEKQFXCxYBWQFtAnkE
4QB6DH4EIQGBDIQEIQGFDGMA4QB6DIkEOQGODMAAYQGjDBMAcQCrDJAEeQC5DAABeQDJDGgA4QDZ
DJUEIQHtDJoE4QD1DKUE4QB6DKwEcQEGDbMEMQEWDXEAcQEiDRcAQQBgBRMAeQA7BeMEeQGjDBMA
gQFWAQABGQFJDQABiQFtDfgEMQFWAQABcQCVDQcFaQC0DQ8FmQFXCxUFoQHLDXEAIQHaDRMAiQH4
DRwFIQHtDPsAuQEJDlUF4QAXDiYBWQEdDmMFeQBEDnoFwQFSDoMF+QBhDpYF+QBrDpYFWQC6DqEF
0QFXC6cF2QHiDq4FYQDiDq4FQQAeD7oF6QE0D8AF4QFXC8kF8QEyCnUE4QFTDxMA6QFaD8AF8QE8
CtgF+QFWARMA+QFxD+MFWQFtAukF4QB2D+4F4QB9D/oF4QCFD/8F4QCPD2gAAQJWARMACQJWAQAB
EQJWAQABGQJWASsGIQJWAYMGMQJWAYoGOQJWAQABQQJWARMASQJWAQABUQJWAdcHWQJWARMAYQJW
AQABDgBIADgBDgBMAD0BDgBQAEwBDgBUAFsBDgBYAKQBDgBcAKoCKQCDACoDLgCbA9wHLgCjA+UH
LgCrAwQIQAATAM0CQAArAPUCQwAbANwCQwATAM0CSQCDAEgDYwATAM0CYwAbANwCaQCDADsDgAAr
APUCgwB7APUCgwAbANwCgwBzAPUCiQCDAFwDoAArAPUCowATAM0CowDDAKUDwAArAPUCwwDrACkE
wwATAM0C4AArAPUC4wALASkEAAETAM0CAAErAPUCAwELASkEIAErAPUCIAETAM0CKQGTA10HKQFz
A80CKQGDA3cHQAErAPUCQAETAM0CSQFzA80CSQGDA58HYAETAM0CYAErAPUCYwFrAzEGYwELASkE
YwFjAx0GYwFTA/UCYwFbAwoGaQFzA80CaQGDA6IGaQF7A5EGgAErAPUCiQGDA8EGiQGLA/UCoAEr
APUCqQGDAzwHqQF7AyoHwAETAM0CwAErAPUCyQGDA/QGyQGLA/UC4AErAPUCAAITAM0CAAIrAPUC
QAMLASkEgAMLASkEFgMbAyADJQN1A3kDhAOJA5gDmAMgBC8ELwR1A3UDUwS6BOgE8AT/BCcFQgWJ
A3UDiQOJA4kDiQNcBWgFiAV1A3UDswXQBd0FJgH1BSYBiQMmAQUG9QUEAAEABgAFAAcABgAJAAgA
CwAJAAAAegFPAAAAMwJUAAAA4gFZAAAAPwJeAAAA+wKYAAAAQATEAAAAUwTEAAAASgXwAAAASgUw
AQAAzAc0AQAA3AcwAQAA4gcwAQAA8AcwAQAA/AcwAQAACgjEAAIABAADAAIABQAFAAIABgAHAAIA
BwAJAAIADwALAAIAEgANAAIAEwAPAAIAGwARAAIAJQATAAEAJgATAAIAJwAVAAEAKAAVAAIAKQAX
AAEAKgAXAAEALAAZAAIAKwAZAAEALgAbAAIALQAbAAIALwAdAAEAMAAdAAIAMQAfAHUAdQCIAPoC
AQMIAw8DBwQOBKIEBIAAAAAAAAAAAAAAAAAAAAAAtQAAAAQAAAAAAAAAAAAAAAEACgAAAAAACgAA
AAAAAAAAAAAACgATAAAAAAABAAAAAAAAAAAAAACdAAcDAAAAAAwAAAAAAAAAAAAAAKYARQMAAAAA
DAAAAAAAAAAAAAAApgCTAwAAAAAMAAAAAAAAAAAAAACmANcEAAAAAAQAAAAAAAAAAAAAAAEAhQYA
AAAABAAAAAAAAAAAAAAAAQCDAQAAAAAMAAAAAAAAAAAAAACmAKMKAAAAAAwAAAAAAAAAAAAAAKYA
ew4AAAAABQAEAAYABAAMAAsAAAAQAAwAiQIAABAAGQCJAgAAAAAbAIkCLQCTAy0AFQQAAAA8TW9k
dWxlPgBtc2NvcmxpYgBNaWNyb3NvZnQuVmlzdWFsQmFzaWMATXlBcHBsaWNhdGlvbgBTY3JpcHRD
b21wb25lbnRfMmUzZDRjNTZkMDY5NGY5YmJkMDMyZjFlMDk1MGJlYzEuTXkATXlDb21wdXRlcgBN
eVByb2plY3QATXlXZWJTZXJ2aWNlcwBUaHJlYWRTYWZlT2JqZWN0UHJvdmlkZXJgMQBJbnB1dEJ1
ZmZlcgBTY3JpcHRDb21wb25lbnRfMmUzZDRjNTZkMDY5NGY5YmJkMDMyZjFlMDk1MGJlYzEAVXNl
ckNvbXBvbmVudABDb25uZWN0aW9ucwBWYXJpYWJsZXMAU2NyaXB0TWFpbgBDb25zdHMATWljcm9z
b2Z0LlZpc3VhbEJhc2ljLkFwcGxpY2F0aW9uU2VydmljZXMAQXBwbGljYXRpb25CYXNlAC5jdG9y
AE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5EZXZpY2VzAENvbXB1dGVyAFN5c3RlbQBPYmplY3QALmNj
dG9yAGdldF9Db21wdXRlcgBtX0NvbXB1dGVyT2JqZWN0UHJvdmlkZXIAZ2V0X0FwcGxpY2F0aW9u
AG1fQXBwT2JqZWN0UHJvdmlkZXIAVXNlcgBnZXRfVXNlcgBtX1VzZXJPYmplY3RQcm92aWRlcgBn
ZXRfV2ViU2VydmljZXMAbV9NeVdlYlNlcnZpY2VzT2JqZWN0UHJvdmlkZXIAQXBwbGljYXRpb24A
V2ViU2VydmljZXMARXF1YWxzAG8AR2V0SGFzaENvZGUAVHlwZQBHZXRUeXBlAFRvU3RyaW5nAENy
ZWF0ZV9fSW5zdGFuY2VfXwBUAGluc3RhbmNlAERpc3Bvc2VfX0luc3RhbmNlX18AZ2V0X0dldElu
c3RhbmNlAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5NeVNlcnZpY2VzLkludGVybmFsAENvbnRleHRW
YWx1ZWAxAG1fQ29udGV4dABHZXRJbnN0YW5jZQBDb3p5Um9jLlNTSVNQbHVzLjIwMTQAQ296eVJv
Yy5TcWxTZXJ2ZXIuU1NJUwBTY3JpcHRCdWZmZXJQbHVzAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuVHhT
Y3JpcHQATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxpbmUAU2NyaXB0Q29tcG9uZW50AE1p
Y3Jvc29mdC5TcWxTZXJ2ZXIuUGlwZWxpbmVIb3N0AFBpcGVsaW5lQnVmZmVyAE91dHB1dE5hbWVN
YXAAQ29tcG9uZW50AE9iamVjdElEAElzSW5wdXQAQnVmZmVyAE91dHB1dE1hcABnZXRfU3RhdGlj
SW5wdXRDb2x1bW5zAGdldF9TdGF0aWNPdXRwdXRDb2x1bW5zAE5leHRSb3cARW5kT2ZSb3dzZXQA
U3RhdGljSW5wdXRDb2x1bW5zAFN0YXRpY091dHB1dENvbHVtbnMAU2NyaXB0Q29tcG9uZW50UGx1
cwBQcm9jZXNzSW5wdXQASW5wdXRJRABJbnB1dE5hbWUASW5wdXRfUHJvY2Vzc0lucHV0AElucHV0
X1Byb2Nlc3NJbnB1dFJvdwBSb3cAUGFyZW50Q29tcG9uZW50AE1pY3Jvc29mdC5TcWxTZXJ2ZXIu
RFRTUnVudGltZVdyYXAATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUnVudGltZS5XcmFwcGVyAElE
VFNDb25uZWN0aW9uTWFuYWdlcjEwMABnZXRfQ29ubmVjdGlvbgBDb25uZWN0aW9uAFByZUV4ZWN1
dGUAUG9zdEV4ZWN1dGUAVmFsaWRhdGUAZXJyTWVzc2FnZQBHZXRQcm9wZXJ0aWVzAEdldFRhYmxl
cwBHZXRDb2x1bW5zAHNldF9Db25uZWN0aW9uAHZhbHVlAGdldF9Jc1RhYmxlVmFyaWFibGUAc2V0
X0lzVGFibGVWYXJpYWJsZQBnZXRfVGFibGUAc2V0X1RhYmxlAGdldF9UYWJsZVZhcmlhYmxlAHNl
dF9UYWJsZVZhcmlhYmxlAGdldF9QcmltYXJ5S2V5cwBzZXRfUHJpbWFyeUtleXMAZ2V0X1N0YWdl
VmFyaWFibGUAc2V0X1N0YWdlVmFyaWFibGUAZ2V0X0Fkb05ldENvbm5lY3Rpb25UeXBlAEdldFBy
aW1hcnlLZXlzXwBTeXN0ZW0uRGF0YQBEYXRhVGFibGUAR2V0Q29sdW1uc18AZGVzaWduAEZpcmVF
cnJvcl8AbWVzc2FnZQBGaXJlSW5mb3JtYXRpb25fAFN5c3RlbS5EYXRhLkNvbW1vbgBEYkNvbm5l
Y3Rpb24AR2V0Q29ubmVjdGlvbl8AR2V0VmFyaWFibGVfAHZhck5hbWUAU2V0VmFyaWFibGVfAEdl
dFRlbXBvcmFyeVRhYmxlXwBFeHRyYWN0U2NoZW1hXwBjb21ibwBFeHRyYWN0VGFibGVfAEdldFRh
YmxlXwBtX2Nvbm5lY3Rpb24AbV9pc1RhYmxlVmFyAG1fdGFibGUAbV9wcmltYXJ5S2V5cwBtX3N0
YWdlVmFyAERiQ29tbWFuZABtX2NvbW1hbmQAbV9tZXJnZVNxbABtX2Ryb3BTdGFnZVNxbABJc1Rh
YmxlVmFyaWFibGUAVGFibGUAVGFibGVWYXJpYWJsZQBQcmltYXJ5S2V5cwBTdGFnZVZhcmlhYmxl
AEFkb05ldENvbm5lY3Rpb25UeXBlAENvbHVtblNlcGFyYXRvcgBERWxlbWVudF8xUABTRWxlbWVu
dF8xUABDcmVhdGVTdGFnZVNxbF8yUABNZXJnZVNxbF83UABEcm9wVGFibGVTcWxfMVAAU3lzdGVt
LkNvbXBvbmVudE1vZGVsAEVkaXRvckJyb3dzYWJsZUF0dHJpYnV0ZQBFZGl0b3JCcm93c2FibGVT
dGF0ZQBTeXN0ZW0uQ29kZURvbS5Db21waWxlcgBHZW5lcmF0ZWRDb2RlQXR0cmlidXRlAFN5c3Rl
bS5EaWFnbm9zdGljcwBEZWJ1Z2dlckhpZGRlbkF0dHJpYnV0ZQBNaWNyb3NvZnQuVmlzdWFsQmFz
aWMuQ29tcGlsZXJTZXJ2aWNlcwBTdGFuZGFyZE1vZHVsZUF0dHJpYnV0ZQBIaWRlTW9kdWxlTmFt
ZUF0dHJpYnV0ZQBTeXN0ZW0uQ29tcG9uZW50TW9kZWwuRGVzaWduAEhlbHBLZXl3b3JkQXR0cmli
dXRlAFN5c3RlbS5SdW50aW1lLkNvbXBpbGVyU2VydmljZXMAUnVudGltZUhlbHBlcnMAR2V0T2Jq
ZWN0VmFsdWUAUnVudGltZVR5cGVIYW5kbGUAR2V0VHlwZUZyb21IYW5kbGUAQWN0aXZhdG9yAENy
ZWF0ZUluc3RhbmNlAE15R3JvdXBDb2xsZWN0aW9uQXR0cmlidXRlAGdldF9WYWx1ZQBzZXRfVmFs
dWUAU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzAENvbVZpc2libGVBdHRyaWJ1dGUAU3Ry
aW5nAFNjcmlwdEJ1ZmZlcgBDTFNDb21wbGlhbnRBdHRyaWJ1dGUATWljcm9zb2Z0LlNxbFNlcnZl
ci5EVFNQaXBlbGluZVdyYXAATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxpbmUuV3JhcHBl
cgBJRFRTQ29tcG9uZW50TWV0YURhdGExMDAAZ2V0X0NvbXBvbmVudE1ldGFEYXRhAElEVFNJbnB1
dENvbGxlY3Rpb24xMDAAZ2V0X0lucHV0Q29sbGVjdGlvbgBJRFRTSW5wdXQxMDAAZ2V0X0l0ZW0A
Z2V0X0lEAElEVFNSdW50aW1lQ29ubmVjdGlvbkNvbGxlY3Rpb24xMDAAZ2V0X1J1bnRpbWVDb25u
ZWN0aW9uQ29sbGVjdGlvbgBJRFRTUnVudGltZUNvbm5lY3Rpb24xMDAAZ2V0X0Nvbm5lY3Rpb25N
YW5hZ2VyAFN5c3RlbS5Db2xsZWN0aW9ucwBBcnJheUxpc3QARGF0YVJvdwBFeGNlcHRpb24ASUVu
dW1lcmF0b3IAU3RyaW5nU3BsaXRPcHRpb25zAFNwbGl0AElDb2xsZWN0aW9uAERhdGFSb3dDb2xs
ZWN0aW9uAGdldF9Sb3dzAEdldEVudW1lcmF0b3IAZ2V0X0N1cnJlbnQAQ29udmVyc2lvbnMARm9y
bWF0AEFkZABDb250YWlucwBNb3ZlTmV4dABJRGlzcG9zYWJsZQBEaXNwb3NlAENyZWF0ZUNvbW1h
bmQAc2V0X0NvbW1hbmRUZXh0AEV4ZWN1dGVOb25RdWVyeQBJc051bGxPckVtcHR5AEFycmF5AFRv
QXJyYXkASm9pbgBQcm9qZWN0RGF0YQBTZXRQcm9qZWN0RXJyb3IAZ2V0X01lc3NhZ2UAQ2xlYXJQ
cm9qZWN0RXJyb3IAQXBwbGljYXRpb25FeGNlcHRpb24Ac2V0X0Nvbm5lY3Rpb25NYW5hZ2VySUQA
SW50ZXJhY3Rpb24ASUlmAFN5c3RlbS5EYXRhLlNxbENsaWVudABTcWxDb25uZWN0aW9uAEdldFNj
aGVtYQBEYXRhQ29sdW1uQ29sbGVjdGlvbgBnZXRfQ29sdW1ucwBEYXRhQ29sdW1uAGdldF9Db2x1
bW5OYW1lAFNvcnQATXNnQm94UmVzdWx0AE1zZ0JveFN0eWxlAE1zZ0JveABPcGVyYXRvcnMAQ29t
cGFyZVN0cmluZwBFbXB0eQBUb0Jvb2xlYW4ARGJEYXRhUmVhZGVyAENvbW1hbmRCZWhhdmlvcgBF
eGVjdXRlUmVhZGVyAEdldFNjaGVtYVRhYmxlAEZpcmVFcnJvcgBGaXJlSW5mb3JtYXRpb24ATWlj
cm9zb2Z0LlNxbFNlcnZlci5NYW5hZ2VkRFRTAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlJ1bnRp
bWUAZ2V0X0Rlc2lnbkNvbm5lY3Rpb25zAENvbm5lY3Rpb25NYW5hZ2VyAEFjcXVpcmVDb25uZWN0
aW9uAElEVFNWYXJpYWJsZXMxMDAASURUU1ZhcmlhYmxlRGlzcGVuc2VyMTAwAGdldF9WYXJpYWJs
ZURpc3BlbnNlcgBMb2NrT25lRm9yUmVhZABJRFRTVmFyaWFibGUxMDAAVW5sb2NrAExvY2tPbmVG
b3JXcml0ZQBSYW5kb20ATmV4dABDb25jYXQASW5kZXhPZgBTdWJzdHJpbmcAZ2V0X0xlbmd0aABT
U0lTU2NyaXB0Q29tcG9uZW50RW50cnlQb2ludEF0dHJpYnV0ZQBDb3p5Um9jLlNxbFNlcnZlci5T
U0lTLkF0dHJpYnV0ZXMARmlsdGVyUHJvcGVydGllc0F0dHJpYnV0ZQBWYWxpZGF0ZVByb3BlcnRp
ZXNBdHRyaWJ1dGUAU29ydFByb3BlcnRpZXNBdHRyaWJ1dGUAUmVmcmVzaFByb3BlcnRpZXNBdHRy
aWJ1dGUAUmVmcmVzaFByb3BlcnRpZXMATGlzdEF0dHJpYnV0ZQBEZXNjcmlwdGlvbkF0dHJpYnV0
ZQBWYXJpYWJsZUF0dHJpYnV0ZQBDb25uZWN0aW9uQXR0cmlidXRlAENvbXBpbGF0aW9uUmVsYXhh
dGlvbnNBdHRyaWJ1dGUAUnVudGltZUNvbXBhdGliaWxpdHlBdHRyaWJ1dGUAU3lzdGVtLlJ1bnRp
bWUuVmVyc2lvbmluZwBUYXJnZXRGcmFtZXdvcmtBdHRyaWJ1dGUAU2NyaXB0Q29tcG9uZW50XzJl
M2Q0YzU2ZDA2OTRmOWJiZDAzMmYxZTA5NTBiZWMxLmRsbAAAAAAAC0kAbgBwAHUAdAAAFUMAbwBu
AG4AZQBjAHQAaQBvAG4AAAUsAAoAABVDAG8AbAB1AG0AbgBOAGEAbQBlAAALWwB7ADAAfQBdAAAP
UwAuAFsAewAwAH0AXQAAE3sAMAB9ACAAPQAgAHsAMQB9AAAPRAAuAFsAewAwAH0AXQAAFXsAMAB9
ACAAPAA+ACAAewAxAH0AAElTAEUATABFAEMAVAAgACoAIABJAE4AVABPACAAewAwAH0AIABGAFIA
TwBNACAAewAxAH0AIABXAEgARQBSAEUAIAAxAD0AMAAAgQVNAEUAUgBHAEUAIAB7ADAAfQAgAEEA
UwAgAEQAIABVAFMASQBOAEcAIAB7ADEAfQAgAEEAUwAgAFMAIABPAE4AIAAoAHsAMgB9ACkAIABX
AEgARQBOACAATgBPAFQAIABNAEEAVABDAEgARQBEACAAVABIAEUATgAgAEkATgBTAEUAUgBUACAA
KAB7ADMAfQApACAAVgBBAEwAVQBFAFMAIAAoAHsANAB9ACkAIABXAEgARQBOACAATQBBAFQAQwBI
AEUARAAgAEEATgBEACAAKAB7ADUAfQApACAAVABIAEUATgAgAFUAUABEAEEAVABFACAAUwBFAFQA
IAB7ADYAfQA7AAALIABBAE4ARAAgAAAFLAAgAAAJIABPAFIAIAAAKVMAZQB0AHUAcAAgAHMAdABh
AHQAZQBtAGUAbgB0ADoAIAB7ADAAfQAAHUQAUgBPAFAAIABUAEEAQgBMAEUAIAB7ADAAfQAAJVMA
ZQBsAGUAYwB0ACAAYwBvAG4AbgBlAGMAdABpAG8AbgAuAAAzUwBlAGwAZQBjAHQAIABkAGUAcwB0
AGkAbgBhAHQAaQBvAG4AIAB0AGEAYgBsAGUALgAAN1MAcABlAGMAaQBmAHkAIAB0AGEAYgBsAGUA
IABwAHIAaQBtAGEAcgB5ACAAawBlAHkAcwAuAAAfSQBzAFQAYQBiAGwAZQBWAGEAcgBpAGEAYgBs
AGUAABtUAGEAYgBsAGUAVgBhAHIAaQBhAGIAbABlAAALVABhAGIAbABlAAAXUAByAGkAbQBhAHIA
eQBLAGUAeQBzAAAbUwB0AGEAZwBlAFYAYQByAGkAYQBiAGwAZQAAC1QAQQBCAEwARQAAFUIAQQBT
AEUAIABUAEEAQgBMAEUAAA1UAGEAYgBsAGUAcwAAFXQAYQBiAGwAZQBfAG4AYQBtAGUAABdbAHsA
MAB9AF0ALgBbAHsAMQB9AF0AAA9BAEQATwAuAE4ARQBUAAALSQBzAEsAZQB5AAAjUwBFAEwARQBD
AFQAIAAqACAARgBSAE8ATQAgAHsAMAB9AAAbTQBlAHIAZwBlACAAUAByAG8AYwBlAHMAcwAACU0A
UABUAF8AAAddAC4AWwAA55nQZ+qk20mT35qFmKz3UwAIt3pcVhk04IkIsD9ffxHVCjoDIAABAwAA
AQQAABIMBwYVEhgBEgwEAAASCAcGFRIYARIIBAAAEhEHBhUSGAESEQQAABIUBwYVEhgBEhQECAAS
DAQIABIIBAgAEhEECAASFAQgAQIcAyAACAQgABIVAyAADgIeAAcQAQEeAB4ABzABAQEQHgACEwAE
IAATAAcGFRIZARMABCgAEwAIFs9JC7gMNOoIiYRdzYCAzJELIAUBEiEIAhIlEikEIAAdDgMgAAIE
KAAdDgMGEiQDBhIoCSAEAQgOEiUSKQUgAQESHAMGEiEFIAEBEiEEIAASMQQoABIxBSABAhAOBCAA
HRwEIAEBDgQgAQECBSABEjUCBSABEjkCBCABHA4FIAIBDhwEIAEODgIGDgIGAgMGEj0DKAAOAygA
AgQsAAoADkQALgBbAHsAMAB9AF0ADlMALgBbAHsAMAB9AF0ASFMARQBMAEUAQwBUACAAKgAgAEkA
TgBUAE8AIAB7ADAAfQAgAEYAUgBPAE0AIAB7ADEAfQAgAFcASABFAFIARQAgADEAPQAwAIEETQBF
AFIARwBFACAAewAwAH0AIABBAFMAIABEACAAVQBTAEkATgBHACAAewAxAH0AIABBAFMAIABTACAA
TwBOACAAKAB7ADIAfQApACAAVwBIAEUATgAgAE4ATwBUACAATQBBAFQAQwBIAEUARAAgAFQASABF
AE4AIABJAE4AUwBFAFIAVAAgACgAewAzAH0AKQAgAFYAQQBMAFUARQBTACAAKAB7ADQAfQApACAA
VwBIAEUATgAgAE0AQQBUAEMASABFAEQAIABBAE4ARAAgACgAewA1AH0AKQAgAFQASABFAE4AIABV
AFAARABBAFQARQAgAFMARQBUACAAewA2AH0AOwAcRABSAE8AUAAgAFQAQQBCAEwARQAgAHsAMAB9
AAUgAQERRQgBAAEAAAAAAAUgAgEODhgBAApNeVRlbXBsYXRlCDEwLjAuMC4wAAAEAQAAAAYVEhgB
EgwGFRIYARIIBhUSGAESEQYVEhgBEhQEBwESDAQHARIIBAcBEhEEBwESFBABAAtNeS5Db21wdXRl
cgAADAEAB015LlVzZXIAABMBAA5NeS5BcHBsaWNhdGlvbgAAEwEADk15LldlYlNlcnZpY2VzAAAE
AAEcHAMHAQIDBwEIBgABEhURYQQHARIVAwcBDgUQAQAeAAQKAR4ABAcBHgAHIAQBDg4ODmEBADRT
eXN0ZW0uV2ViLlNlcnZpY2VzLlByb3RvY29scy5Tb2FwSHR0cENsaWVudFByb3RvY29sEkNyZWF0
ZV9fSW5zdGFuY2VfXxNEaXNwb3NlX19JbnN0YW5jZV9fAAAABhUSGAETAAYVEhkBEwAECgETAAUg
AQETAAgHAxMAEwATAAUBAAAAAAQHAR0OBCAAEn0FIAASgIEGIAESgIUcBSAAEoCJBiABEoCNHAQH
ARIxCSACHQ4dDhGAoQYgAQESgKUFIAASgKkFIAASgJ0DIAAcBAABDhwFAAIODhwEIAEIHAYAAw4O
HBwEIAASPQQAAQIOByABEoC1EhUCHQ4GAAIODh0OBgACDg4dHAYAAQESgJkoBxASORKAkRKAkRKA
kRKAkRKAkRKAkQ4OEjUOEoCVEoCZHQ4SgJ0dHAQgABI5BwcCEjkSgJkHBwMCAhKAmQYAAxwCHBwH
BwIdDhKAkQcgAhI1Dh0OBSAAEoDNBiABEoDRCAoAAxGA1RwRgNkcGgcMHRwSgJESOQ4OEjUOEoCV
DhKAmR0OEoCdEgcGHRwSgJESNRKAlRKAmRKAnQYAAwgODgIGBwIdDh0OBAABAhwRBwYOEoCREjUS
gJUSgJkSgJ0IIAESgOERgOUEIAASNQ0HBRI1EjUSORI9EoDhCiAGAQgODg4IEAIFIAASgOkGIAES
gO0cBCABHBwGBwISORI5BSAAEoD1CCACAQ4QEoDxBiABEoD5HAcHAxwcEoDxBCABARwFBwESgPEF
IAIICAgEAAEOCAYAAw4ODg4EBwIODgQgAQgOBSACDggIBAcCDggSAQANR2V0UHJvcGVydGllcwAA
DQEACFZhbGlkYXRlAAAFIAEBHQ5RAQAGAAAACkNvbm5lY3Rpb24PSXNUYWJsZVZhcmlhYmxlBVRh
YmxlDVRhYmxlVmFyaWFibGULUHJpbWFyeUtleXMNU3RhZ2VWYXJpYWJsZQAABiABARGBFQYgAwEO
AgIQAQAJR2V0VGFibGVzAAEAAB4BABlTZWxlY3QgZGVzdGluYXRpb24gdGFibGUuAAAyAQAtU2Vs
ZWN0IHZhcmlhYmxlIGNvbnRhaW5pbmcgZGVzdGluYXRpb24gdGFibGUuAAA1AQAwU2VsZWN0IHZh
cmlhYmxlIHRvIHN0b3JlIHN0YWdlIHRhYmxlIChvcHRpb25hbCkuAAARAQAKR2V0Q29sdW1ucwEA
AAAgAQAbU3BlY2lmeSB0YWJsZSBwcmltYXJ5IGtleXMuAAAZAQAUQWRvTmV0Q29ubmVjdGlvblR5
cGUAACcBACJTZWxlY3QgQURPLk5FVCBDb25uZWN0aW9uIE1hbmFnZXIuAAA3AQAyU2VsZWN0IGlm
IGRlc3RpbmF0aW9uIHRhYmxlIGlzIHN0b3JlZCBpbiB2YXJpYWJsZS4AAAQgAQEICAEACAAAAAAA
HgEAAQBUAhZXcmFwTm9uRXhjZXB0aW9uVGhyb3dzAUcBABouTkVURnJhbWV3b3JrLFZlcnNpb249
djQuMAEAVA4URnJhbWV3b3JrRGlzcGxheU5hbWUQLk5FVCBGcmFtZXdvcmsgNFhbAAAAAAAAAAAA
AG5bAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgWwAAAAAAAAAAX0NvckRsbE1haW4AbXNjb3Jl
ZS5kbGwAAAAAAP8lACAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEAAAABgAAIAAAAAAAAAA
AAAAAAAAAAEAAQAAADAAAIAAAAAAAAAAAAAAAAAAAAEAAAAAAEgAAABYYAAA7AIAAAAAAAAAAAAA
7AI0AAAAVgBTAF8AVgBFAFIAUwBJAE8ATgBfAEkATgBGAE8AAAAAAL0E7/4AAAEAAAAAAAAAAAAA
AAAAAAAAAD8AAAAAAAAABAAAAAIAAAAAAAAAAAAAAAAAAABEAAAAAQBWAGEAcgBGAGkAbABlAEkA
bgBmAG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEAdABpAG8AbgAAAAAAAACwBEwCAAABAFMAdABy
AGkAbgBnAEYAaQBsAGUASQBuAGYAbwAAACgCAAABADAAMAAwADAAMAA0AGIAMAAAACwAAgABAEYA
aQBsAGUARABlAHMAYwByAGkAcAB0AGkAbwBuAAAAAAAgAAAAMAAIAAEARgBpAGwAZQBWAGUAcgBz
AGkAbwBuAAAAAAAwAC4AMAAuADAALgAwAAAAjAA1AAEASQBuAHQAZQByAG4AYQBsAE4AYQBtAGUA
AABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfADIAZQAzAGQANABjADUANgBkADAANgA5
ADQAZgA5AGIAYgBkADAAMwAyAGYAMQBlADAAOQA1ADAAYgBlAGMAMQAuAGQAbABsAAAAAAAoAAIA
AQBMAGUAZwBhAGwAQwBvAHAAeQByAGkAZwBoAHQAAAAgAAAAlAA1AAEATwByAGkAZwBpAG4AYQBs
AEYAaQBsAGUAbgBhAG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AMgBlADMA
ZAA0AGMANQA2AGQAMAA2ADkANABmADkAYgBiAGQAMAAzADIAZgAxAGUAMAA5ADUAMABiAGUAYwAx
AC4AZABsAGwAAAAAADQACAABAFAAcgBvAGQAdQBjAHQAVgBlAHIAcwBpAG8AbgAAADAALgAwAC4A
MAAuADAAAAA4AAgAAQBBAHMAcwBlAG0AYgBsAHkAIABWAGUAcgBzAGkAbwBuAAAAMAAuADAALgAw
AC4AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAwAAACAOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=]]></arrayElement></arrayElements></property><property id="9" name="UserComponentTypeName" dataType="System.String">CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus.2014, 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_2e3d4c56d0694f9bbd032f1e0950bec1</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=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91">VisualBasic</property></properties><connections><connection id="14" name="Connection" connectionManagerID="{AF7017B1-B59D-42E6-8A84-D39750BF0FA1}" /></connections><inputs><input id="15" name="Input" hasSideEffects="true"><externalMetadataColumns /></input></inputs><outputs><output id="16" name="Output" synchronousInputId="15"><externalMetadataColumns /></output></outputs></component>