<component id="2" name="Merge Process" componentClassID="{874F7595-FB5F-40FF-96AF-FBFF8250E3EF}" description="Executes a custom script" localeId="1033" version="7" contactInfo="Executes a custom script.;Microsoft Corporation;Microsoft SqlServer v9; © 2004 Microsoft Corporation; All Rights Reserved; http://www.microsoft.com/sql/support;0"><properties><property id="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 = Nothing
        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 = Nothing
        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>{50A42967-27A1-470C-AFC1-3BF3DD31E210}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>My Project</AppDesignerFolder>
    <RootNamespace>ScriptComponent_2e3d4c56d0694f9bbd032f1e0950bec1</RootNamespace>
    <AssemblyName>ScriptComponent_2e3d4c56d0694f9bbd032f1e0950bec1</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
  </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.2012, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files (x86)\Microsoft SQL Server\110\SDK\Assemblies\CozyRoc.SSISPlus.2012.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.SqlServer.ManagedDTS, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SqlServer.ManagedDTS\v4.0_11.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.ManagedDTS.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.SqlServer.TxScript, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
  </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="" DebugInfoExeName="devenv.exe" DebugInfoCommandLine="/vstaHostDebugUri:&quot;vstadebuge4e40f78-ed4f-4a8b-b556-2442751f3f65/066e266f-6eda-4b82-84ef-234ab69ab900&quot;" />
        <Host Name="SSIS_SC110" />
        <ProjectClient>
          <HostIdentifier>SSIS_SC110</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><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:NoContent>Reference;Import;Folder</msb:NoContent>
		<msb:ProjectId>{323B5849-8227-4564-A4E4-16995422FEBA}</msb:ProjectId>
		<msb:DisplayName>ScriptComponent_2e3d4c56d0694f9bbd032f1e0950bec1</msb:DisplayName>
		<msb:CodeName>ScriptComponent_2e3d4c56d0694f9bbd032f1e0950bec1</msb:CodeName>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:Folder Include="My Project\"/>
		<msb:File Include="ScriptMain.vb"/>
		<msb:File Include="BufferWrapper.vb"/>
		<msb:File Include="ComponentWrapper.vb"/>
		<msb:Project Include="ScriptComponent_2e3d4c56d0694f9bbd032f1e0950bec1.vbproj"/>
	</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
ZGUuDQ0KJAAAAAAAAABQRQAATAEDAHxVYU8AAAAAAAAAAOAAAiELAQgAADwAAAAGAAAAAAAAjlsA
AAAgAAAAYAAAAABAAAAgAAAAAgAABAAAAAAAAAAEAAAAAAAAAACgAAAAAgAAAAAAAAIAQIUAABAA
ABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAADhbAABTAAAAAGAAAEgDAAAAAAAAAAAAAAAAAAAA
AAAAAIAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAAlDsAAAAgAAAAPAAAAAIA
AAAAAAAAAAAAAAAAACAAAGAucnNyYwAAAEgDAAAAYAAAAAQAAAA+AAAAAAAAAAAAAAAAAABAAABA
LnJlbG9jAAAMAAAAAIAAAAACAAAAQgAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAABw
WwAAAAAAAEgAAAACAAUAwC4AAHgsAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
KD4AAAqiEQ8acvIBAHAI0BwAAAEoFAAACm89AAAKdAoAABsoPgAACqIRDxty+AEAcAnQHAAAASgU
AAAKbz0AAAp0CgAAGyg+AAAKohEPHHLyAQBwEQTQHAAAASgUAAAKbz0AAAp0CgAAGyg+AAAKohEP
KD8AAAp9EAAABAJyAgIAcAJ7EAAABCgzAAAKbzUAAAYCciwCAHARBygzAAAKfREAAATeHCUoQAAA
ChMMAhEMb0EAAApvNAAABihCAAAK3gAqAEE0AAACAAAAVQAAAPIAAABHAQAAFgAAAAAAAAEAAAAA
BgAAALwCAADCAgAAHAAAACYAAAEbMAIAiQAAABIAABECKEMAAAoCew8AAAQsegJ7DwAABAJ7EAAA
BG86AAAKAnsPAAAEbzsAAAomAnsPAAAEAnsRAAAEbzoAAAoCew8AAARvOwAACibeGiUoQAAACgsC
B29BAAAKbzQAAAYoQgAACt4AAnsPAAAEb0QAAAoKAnsPAAAEb0UAAAoCFH0PAAAEBm9FAAAKKgAA
AAEQAAAAAA4APEoAGiYAAAEbMAIAiAAAABMAABECbyUAAAYoPAAACiwLckoCAHBzRgAACnoCbykA
AAYoPAAACiwLcnACAHBzRgAACnoCby0AAAYoPAAACiwLcqQCAHBzRgAACnoCbyMAAApvJwAACnIN
AABwbygAAAoCbyUAAAZvRwAAChcK3hglKEAAAAoMFgoDCG9BAAAKUShCAAAK3gAGCwcqARAAAAAA
AABsbAAYJgAAARMwBABvAAAAFAAAEXMtAAAKCwdyDQAAcG80AAAKJgdy3AIAcG80AAAKJgcCbycA
AAZy/AIAcHIYAwBwKEgAAAooEQAACm80AAAKJgdyJAMAcG80AAAKJgdyPAMAcG80AAAKJgfQHAAA
ASgUAAAKbz0AAAp0CgAAGwoGKgAbMAUALQEAABUAABFzLQAACgsCbyUAAAYoPAAACiwLckoCAHBz
SQAACnoCF282AAAGDHJYAwBwEwQIdTIAAAEsB3JkAwBwEwQIcnoDAHAajRwAAAETChEKFhSiEQoX
FKIRChgUohEKGREEohEKb0oAAAoTBREFb0sAAAoXb0wAAApvTQAACg0RBW8uAAAKby8AAAoTCytF
EQtvMAAACnQlAAABEwcRBwlvMQAACigyAAAKEwgRB3KIAwBwbzEAAAooMgAAChMGB3KeAwBwEQgR
Big2AAAKbzQAAAomEQtvNwAACi2y3hYRC3UsAAABLAwRC3UsAAABbzgAAArcB29OAAAK3isILAYI
bzgAAArc3h8lKEAAAAoTCREJb0EAAAofMBQoTwAACiYoQgAACt4AB29QAAAKCgYqAAAAASgAAAIA
ewBg2wAWAAAAAQIAJgDT+QAKAAAAAQAABgD/BQEfJgAAARswAwCSAAAAFgAAEXMtAAAKCwIXbzMA
AAYMCG8uAAAKby8AAAoTBSskEQVvMAAACnQlAAABDQcJcikAAHBvMQAACigRAAAKbzQAAAomEQVv
NwAACi3T3hYRBXUsAAABLAwRBXUsAAABbzgAAArcB29OAAAK3h8lKEAAAAoTBBEEb0EAAAofMBQo
TwAACiYoQgAACt4AB29QAAAKCgYqAAABHAAAAgAOAD5MABYAAAABAAAGAGRqAB8mAAABEzABAAkA
AAAXAAARAnsKAAAECgYqAAAAjgJ7CgAABAMWKFEAAAoWLhICA30KAAAEAn5SAAAKbyoAAAYqEzAB
AAkAAAAYAAARAnsLAAAECgYqAAAAcgJ7CwAABAMuEgIDfQsAAAQCflIAAApvKgAABioAAAATMAEA
CQAAABkAABECewwAAAQKBioAAACSAnsMAAAEAxYoUQAAChYuEwIDfQwAAAQCAm8yAAAGby4AAAYq
AAAAEzABAAkAAAAaAAARAm8pAAAGCgYqAAAAIgIDbyoAAAYqAAAAEzABAAkAAAAbAAARAnsNAAAE
CgYqAAAAIgIDfQ0AAAQqAAAAEzABAAkAAAAcAAARAnsOAAAECgYqAAAAIgIDfQ4AAAQqAAAAEzAD
ABMAAAAdAAARF40cAAABCwcWcrYDAHCiBwoGKgAbMAMApwAAAB4AABFzLQAACgsCF28zAAAGDAhv
LgAACm8vAAAKEwUrNhEFbzAAAAp0JQAAAQ0JcsYDAHBvMQAACihTAAAKLBcHCXIpAABwbzEAAAoo
EQAACm80AAAKJhEFbzcAAAotwd4nEQV1LAAAASwMEQV1LAAAAW84AAAK3N4PJShAAAAKEwQoQgAA
Ct4AciMAAHAH0BwAAAEoFAAACm89AAAKdAoAABsoPgAACgoGKgABHAAAAgAOAFBeABYAAAABAAAG
AHB2AA8mAAABGzADAFIAAAAfAAARAgNvNgAABgwIbzkAAAoNCXLSAwBwAm88AAAGKDMAAApvOgAA
Cgkcb1QAAAoTBBEEb1UAAAoL3hYJLAYJbzgAAArc3goILAYIbzgAAArcBwoGKgAAARwAAAIADwAp
OAAKAAAAAQIACAA8RAAKAAAAARMwBwAbAAAAIAAAEQIoIwAAChZy9gMAcAN+UgAAChYSAG9WAAAK
KgATMAcAGwAAACEAABECKCMAAAoWcvYDAHADflIAAAoWEgBvVwAACioAEzACAD0AAAAiAAARAywf
AihYAAAKAm8lAAAGb1kAAAoUb1oAAAp0DgAAAQsrFwJ7BgAABG8bAAAGFG9bAAAKdA4AAAELBwoG
KgAAABswAwA+AAAAIwAAEQMoPAAACiwCKzIUDAIoXAAACgMSAm9dAAAKCANvXgAACm9fAAAKKBEA
AAoL3gcIb2AAAArcBygRAAAKCgYqAAABEAAAAgAaABQuAAcAAAABGzADADUAAAAkAAARAyg8AAAK
LAEqFAoCKFwAAAoDEgBvYQAACgYDb14AAAoEKBEAAApvYgAACt4HBm9gAAAK3CoAAAABEAAAAgAZ
ABQtAAcAAAABEzAHAEEAAAAmAAARAm88AAAGC3KeAwBwAgdvOgAABnISBABwAgdvOwAABnNjAAAK
FiDoAwAAb2QAAAooZQAACihmAAAKKDYAAAoKBioAAAATMAQAFwAAACgAABEDFwNyHAQAcG9nAAAK
F9pvaAAACgoGKgATMAQAKwAAACoAABEDchwEAHBvZwAACnIcBABwb2kAAArWCwMHA29pAAAKB9oX
2m9oAAAKCgYqABMwAgAnAAAAKwAAEQJvJwAABiwUAgJvKwAABm83AAAGbxUAAAoLKwcCbykAAAYL
BwoGKgAeAigXAAAKKkJTSkIBAAEAAAAAAAwAAAB2NC4wLjMwMzE5AAAAAAUAbAAAADwOAAAjfgAA
qA4AAFARAAAjU3RyaW5ncwAAAAD4HwAAJAQAACNVUwAcJAAAEAAAACNHVUlEAAAALCQAAEwIAAAj
QmxvYgAAAAAAAAACAAABVx2iCQkOAAAA+iUzABYAAAEAAABMAAAADAAAABcAAAA9AAAAIQAAAHUA
AAAGAAAAPgAAACsAAAAFAAAADwAAABUAAAAKAAAAAQAAAAoAAAADAAAAAwAAAAIAAAAAABgRAQAA
AAAACgBGARwBCgB6AVwBBgCKAYMBCgDiARwBBgBgAoMBCgDiArgCDgA0Ax0DEgCDA2IDFgC0A2ID
EgDDA2IDDgBnBB0DGgAiBfoEHgCRBoUGHgDlBtIGHgCeB9IGIgCLCHUIIgCkCHUIIgDRCLkIBgD7
COgICgA6CRMJCgBSCRMAIgCHCWoJBgC8CZwJBgDaCYMBBgD+CYMBCgAXChMABgBlCkYKBgB5CoMB
EgCACmIDBgCNCoMBJgDwCscKJgAfC8cKJgBKC8cKJgBnC8cKJgCqC8cKBgDsC9kLHgD2C4UGBgD+
C4MBBgAIDNkLBgAUDIMBBgAtDNkLHgA5DIUGCgBuDBMJBgCXDIMBBgDnDIMBCgD6DBMJIgDRA3UI
BgA0DYMBCgBhDRMAHgCHDXENHgCfDYUGHgDADYUGCgDfDRMACgDsDRMACgD/DRMJHgAnDtIGHgA0
DoUGKgD0AJoOKgDQDpoOGgD0DvoEGgAFD/oEGgBDD/oEBgBqD4MBEgCaD2IDDgDjD8EPDgD9D8EP
DgAZEMEPIgAxEHUIIgBMEHUIDgBeEMEPIgBsEHUIDgCBEMEPDgCTEMEPBgCnEJwJBgDHEJwJBgD/
EOUQAAAAAAEAAAAAAAEAAQAAAAAAKQA3AAUAAQABAAAAAABrADcACQABAAIAAAEQAHYANwANAAEA
AwAFAQAAgAAAAA0ABQAIAAUBAACOAAAADQAFAA8AAQAAAKkAtQAdAAYAEQABAAAA5gC1AC0ABgAW
AAEAAAD0ALUADQAIABoAAQAAAAABtQANAAkAHAABAAAACgG1ACAACgAdAAMAAAAVAQAADQASAD0A
MQClASAAMQDOAS0AMQDwAToAMQAVAkcAIQDxApAABgD0AMkABgAAAc0AAQDHBOEAAQDHBOEAAQBj
ByYBAQBwBykBAQB9ByYBAQCFByYBAQCTByYBAQCoBywBAQCyByYBAQC9ByYBVoAfCCYBVoAvCCYB
VoA7CCYBVoBHCCYBVoBZCCYBVoBlCCYBUCAAAAAABhhWARMAAQBYIAAAAAAGGFYBEwABAGAgAAAA
ABEYkQEXAAEAjCAAAAAAEwiYARsAAQCkIAAAAAATCL4BKAABALwgAAAAABMI5wE1AAEA1CAAAAAA
EwgFAkIAAQDsIAAAAABGAksCYwABAAghAAAAAEYCVAJoAAIAHCEAAAAAgwBlAmwAAgA0IQAAAABG
Am0CcQACAEghAAAAABEAdgJ4AAIAZCEAAAAAAQCUAoAAAwCAIQAAAAAGGFYBEwAEAIghAAAAAAMI
qAKLAAQAvCEAAAAABhhWARMABADQIQAAAAAGGFYBrwAEAOAhAAAAAEYK/QO7AAkA9CEAAAAARgoU
BLsACQAIIgAAAACGACwEwAAJACAiAAAAAIYANATAAAkAOCIAAAAABhhWARMACQBYIgAAAABGAnsE
0QAJAIgiAAAAAEYDmgTbAA0AnCIAAAAARgOtBNsADgCgIgAAAAAGGFYB5QAPALAiAAAAAAYIOwXr
ABAA3CIAAAAABhhWAeUAEADsIgAAAAAGGFYBEwARAPQiAAAAAEYCrQTbABEA+CIAAAAARgJVBRMA
EgAYJgAAAABGAmAFEwASAMAmAAAAAAYAbAX1ABIAZCcAAAAABgCABbsAEwDgJwAAAAAGAI4F+wAT
AEQpAAAAAAYAmAX7ABMAACoAAAAABgg7BXEAEwAYKgAAAAAGCKMFAAETADwqAAAAAAYIuAXAABQA
VCoAAAAABgjMBQUBFAB0KgAAAAAGCOAFcQAVAIwqAAAAAAYI6gUAARUAtCoAAAAABgj0BXEAFgDM
KgAAAAAGCAYGAAEWANgqAAAAAAYIGAZxABcA8CoAAAAABggoBgABFwD8KgAAAAAGCDgGcQAYABQr
AAAAAAYISgYAARgAICsAAAAAAQhcBrsAGQBAKwAAAAABAHUGcQAZABAsAAAAAAEAmwYKARkAjCwA
AAAAAQCuBgABGgC0LAAAAAABAMEGAAEbANwsAAAAAAEA8gYQARwAKC0AAAAAAQABBxYBHQCELQAA
AAABABYHGwEeANgtAAAAAAEAIwdxACAAKC4AAAAAAQA2ByEBIABMLgAAAAABAEsHIQEhAIQuAAAA
AAEAWQdxACIAuC4AAAAABhhWARMAIgAAAAEAUgIAAAEAiwIAAAEAiwIAAAEA0QMAAAIA2wMAAAMA
5AMAAAQA7AMAAAUA8wMAAAEAiAQAAAIAkAQAAAMA7AMAAAQA8wMAAAEA7AMAAAEAwwQAAAEA0QMA
AAEA0QMAAAEAwwQAAAEAdQUAAAEAsgUAAAEAsgUAAAEAsgUAAAEAsgUAAAEAsgUAAAEAsgUAAAEA
pwYAAAEAuQYAAAEAuQYAAAEApwYAAAEADgcAAAEADgcAAAIAsgUAAAEARQcAAAEARQcJAFYBEwCB
AFYBxwKRAFYB1gIRAFYBEwCZAFYBEwAkAFYBEwAsAFYBEwA0AFYBEwA8AFYBEwAkAKgCiwAsAKgC
iwA0AKgCiwA8AKgCiwChAFYBEwCpAFYBEwCxAFYBAAG5AMsJcAMZAEsCYwAZAFQCaAApAOwJfQMZ
AG0CcQDJAAgKjQMZAFYBEwDRAFYBnQNEAPECkABMADIKiwBMADwKGgRMAFYBEwDZAFYBBQE5AFYB
rwDpACwEwADpADQEwADxAFYBBQFZAFYBEwBBAAkLNAT5ADYLOQQBAVcLPwQJAWALaAD5AIoLRgQR
AVcLTAQZAcML6wBBAFUFEwDhACcMWAQhAVYBYgQhAVYBEwBpAEsMaQRRAVQMbwQ5AWIMdQQpAVcL
FgFZAW0CeQThAHoMfgQhAYEMhAQhAYUMYwDhAHoMiQQ5AY4MwABhAaMMEwBxAKsMkAR5ALkMAAF5
AMkMaADhANkMlQQhAe0MmgThAPUMpQThAHoMrARxAQYNswQxARYNcQBxASINFwBBAGAFEwB5ADsF
4wR5AaMMEwCBAVYBAAEZAUkNAAGJAW0N+AQxAVYBAAFxAJUNBwVpALQNDwWZAVcLFQWhAcsNcQAh
AdoNEwCJAfgNHAUhAe0M+wC5AQkOVQXhABcOJgFZAR0OYwV5AEQOegXBAVIOgwX5AGEOlgX5AGsO
lgVZALoOoQXRAVcLpwXZAeIOrgVhAOIOrgVBAB4PugXpATQPwAXhAVcLyQXxATIKdQThAVMPEwDp
AVoPwAXxATwK2AX5AVYBEwD5AXEP4wVZAW0C6QXhAHYP7gXhAH0P+gXhAIUP/wXhAI8PaAABAlYB
EwAJAlYBAAERAlYBAAEZAlYBKwYhAlYBgwYxAlYBigY5AlYBAAFBAlYBEwBJAlYBAAFRAlYB1wdZ
AlYBEwBhAlYBAAEOAEgAOAEOAEwAPQEOAFAATAEOAFQAWwEOAFgApAEOAFwAqgIpAIMAKgMuAJsD
3AcuAKMD5QcuAKsDBAhAACsA9QJAABMAzQJDABsA3AJDABMAzQJJAIMAXANjABsA3AJjABMAzQJp
AIMAOwOAACsA9QKDAHMA9QKDABsA3AKDAHsA9QKJAIMASAOgACsA9QKjABMAzQKjAMMApQPAACsA
9QLDABMAzQLDAOsAKQTgACsA9QLjAAsBKQQAARMAzQIAASsA9QIDAQsBKQQgARMAzQIgASsA9QIp
AXMDzQIpAZMDKgcpAYMDRAdAARMAzQJAASsA9QJJAYMDnwdJAXMDzQJgARMAzQJgASsA9QJjAWMD
HQZjAQsBKQRjAVMD9QJjAVsDCgZjAWsDMQZpAYMDogZpAXMDzQJpAXsDkQaAASsA9QKJAYMDwQaJ
AYsD9QKgASsA9QKpAXsDbAepAYMDfgfAARMAzQLAASsA9QLJAYsD9QLJAYMD9AbgASsA9QIAAisA
9QIAAhMAzQJAAwsBKQSAAwsBKQQWAxsDIAMlA3UDeQOEA4kDmAOYAyAELwQvBHUDdQNTBLoE6ATw
BP8EJwVCBYkDdQOJA4kDiQOJA1wFaAWIBXUDdQOzBdAF3QUmAfUFJgGJAyYBBQb1BQQAAQAGAAUA
BwAGAAkACAALAAkAAAB6AU8AAAAzAlQAAADiAVkAAAA/Al4AAAD7ApgAAABABMQAAABTBMQAAABK
BfAAAABKBTABAADMBzQBAADcBzABAADiBzABAADwBzABAAD8BzABAAAKCMQAAgAEAAMAAgAFAAUA
AgAGAAcAAgAHAAkAAgAPAAsAAgASAA0AAgATAA8AAgAbABEAAgAlABMAAQAmABMAAgAnABUAAQAo
ABUAAgApABcAAQAqABcAAQAsABkAAgArABkAAQAuABsAAgAtABsAAgAvAB0AAQAwAB0AAgAxAB8A
dQB1AIgA+gIBAwgDDwMHBA4EogQEgAAAAAAAAAAAAAAAAAAAAAC1AAAABAAAAAAAAAAAAAAAAQAK
AAAAAAAKAAAAAAAAAAAAAAAKABMAAAAAAAEAAAAAAAAAAAAAAJ0ABwMAAAAACwAAAAAAAAAAAAAA
pgBFAwAAAAALAAAAAAAAAAAAAACmAJMDAAAAAAsAAAAAAAAAAAAAAKYA1wQAAAAABAAAAAAAAAAA
AAAAAQCFBgAAAAAEAAAAAAAAAAAAAAABAIMBAAAAAAsAAAAAAAAAAAAAAKYAowoAAAAACwAAAAAA
AAAAAAAApgB7DgAAAAAFAAQABgAEAAwACwAAABAADACJAgAAEAAZAIkCAAAAABsAiQItAJMDLQAV
BAAAADxNb2R1bGU+AG1zY29ybGliAE1pY3Jvc29mdC5WaXN1YWxCYXNpYwBNeUFwcGxpY2F0aW9u
AFNjcmlwdENvbXBvbmVudF8yZTNkNGM1NmQwNjk0ZjliYmQwMzJmMWUwOTUwYmVjMS5NeQBNeUNv
bXB1dGVyAE15UHJvamVjdABNeVdlYlNlcnZpY2VzAFRocmVhZFNhZmVPYmplY3RQcm92aWRlcmAx
AElucHV0QnVmZmVyAFNjcmlwdENvbXBvbmVudF8yZTNkNGM1NmQwNjk0ZjliYmQwMzJmMWUwOTUw
YmVjMQBVc2VyQ29tcG9uZW50AENvbm5lY3Rpb25zAFZhcmlhYmxlcwBTY3JpcHRNYWluAENvbnN0
cwBNaWNyb3NvZnQuVmlzdWFsQmFzaWMuQXBwbGljYXRpb25TZXJ2aWNlcwBBcHBsaWNhdGlvbkJh
c2UALmN0b3IATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkRldmljZXMAQ29tcHV0ZXIAU3lzdGVtAE9i
amVjdAAuY2N0b3IAZ2V0X0NvbXB1dGVyAG1fQ29tcHV0ZXJPYmplY3RQcm92aWRlcgBnZXRfQXBw
bGljYXRpb24AbV9BcHBPYmplY3RQcm92aWRlcgBVc2VyAGdldF9Vc2VyAG1fVXNlck9iamVjdFBy
b3ZpZGVyAGdldF9XZWJTZXJ2aWNlcwBtX015V2ViU2VydmljZXNPYmplY3RQcm92aWRlcgBBcHBs
aWNhdGlvbgBXZWJTZXJ2aWNlcwBFcXVhbHMAbwBHZXRIYXNoQ29kZQBUeXBlAEdldFR5cGUAVG9T
dHJpbmcAQ3JlYXRlX19JbnN0YW5jZV9fAFQAaW5zdGFuY2UARGlzcG9zZV9fSW5zdGFuY2VfXwBn
ZXRfR2V0SW5zdGFuY2UATWljcm9zb2Z0LlZpc3VhbEJhc2ljLk15U2VydmljZXMuSW50ZXJuYWwA
Q29udGV4dFZhbHVlYDEAbV9Db250ZXh0AEdldEluc3RhbmNlAENvenlSb2MuU1NJU1BsdXMuMjAx
MgBDb3p5Um9jLlNxbFNlcnZlci5TU0lTAFNjcmlwdEJ1ZmZlclBsdXMATWljcm9zb2Z0LlNxbFNl
cnZlci5UeFNjcmlwdABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5QaXBlbGluZQBTY3JpcHRDb21w
b25lbnQATWljcm9zb2Z0LlNxbFNlcnZlci5QaXBlbGluZUhvc3QAUGlwZWxpbmVCdWZmZXIAT3V0
cHV0TmFtZU1hcABDb21wb25lbnQAT2JqZWN0SUQASXNJbnB1dABCdWZmZXIAT3V0cHV0TWFwAGdl
dF9TdGF0aWNJbnB1dENvbHVtbnMAZ2V0X1N0YXRpY091dHB1dENvbHVtbnMATmV4dFJvdwBFbmRP
ZlJvd3NldABTdGF0aWNJbnB1dENvbHVtbnMAU3RhdGljT3V0cHV0Q29sdW1ucwBTY3JpcHRDb21w
b25lbnRQbHVzAFByb2Nlc3NJbnB1dABJbnB1dElEAElucHV0TmFtZQBJbnB1dF9Qcm9jZXNzSW5w
dXQASW5wdXRfUHJvY2Vzc0lucHV0Um93AFJvdwBQYXJlbnRDb21wb25lbnQATWljcm9zb2Z0LlNx
bFNlcnZlci5EVFNSdW50aW1lV3JhcABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5SdW50aW1lLldy
YXBwZXIASURUU0Nvbm5lY3Rpb25NYW5hZ2VyMTAwAGdldF9Db25uZWN0aW9uAENvbm5lY3Rpb24A
UHJlRXhlY3V0ZQBQb3N0RXhlY3V0ZQBWYWxpZGF0ZQBlcnJNZXNzYWdlAEdldFByb3BlcnRpZXMA
R2V0VGFibGVzAEdldENvbHVtbnMAc2V0X0Nvbm5lY3Rpb24AdmFsdWUAZ2V0X0lzVGFibGVWYXJp
YWJsZQBzZXRfSXNUYWJsZVZhcmlhYmxlAGdldF9UYWJsZQBzZXRfVGFibGUAZ2V0X1RhYmxlVmFy
aWFibGUAc2V0X1RhYmxlVmFyaWFibGUAZ2V0X1ByaW1hcnlLZXlzAHNldF9QcmltYXJ5S2V5cwBn
ZXRfU3RhZ2VWYXJpYWJsZQBzZXRfU3RhZ2VWYXJpYWJsZQBnZXRfQWRvTmV0Q29ubmVjdGlvblR5
cGUAR2V0UHJpbWFyeUtleXNfAFN5c3RlbS5EYXRhAERhdGFUYWJsZQBHZXRDb2x1bW5zXwBkZXNp
Z24ARmlyZUVycm9yXwBtZXNzYWdlAEZpcmVJbmZvcm1hdGlvbl8AU3lzdGVtLkRhdGEuQ29tbW9u
AERiQ29ubmVjdGlvbgBHZXRDb25uZWN0aW9uXwBHZXRWYXJpYWJsZV8AdmFyTmFtZQBTZXRWYXJp
YWJsZV8AR2V0VGVtcG9yYXJ5VGFibGVfAEV4dHJhY3RTY2hlbWFfAGNvbWJvAEV4dHJhY3RUYWJs
ZV8AR2V0VGFibGVfAG1fY29ubmVjdGlvbgBtX2lzVGFibGVWYXIAbV90YWJsZQBtX3ByaW1hcnlL
ZXlzAG1fc3RhZ2VWYXIARGJDb21tYW5kAG1fY29tbWFuZABtX21lcmdlU3FsAG1fZHJvcFN0YWdl
U3FsAElzVGFibGVWYXJpYWJsZQBUYWJsZQBUYWJsZVZhcmlhYmxlAFByaW1hcnlLZXlzAFN0YWdl
VmFyaWFibGUAQWRvTmV0Q29ubmVjdGlvblR5cGUAQ29sdW1uU2VwYXJhdG9yAERFbGVtZW50XzFQ
AFNFbGVtZW50XzFQAENyZWF0ZVN0YWdlU3FsXzJQAE1lcmdlU3FsXzdQAERyb3BUYWJsZVNxbF8x
UABTeXN0ZW0uQ29tcG9uZW50TW9kZWwARWRpdG9yQnJvd3NhYmxlQXR0cmlidXRlAEVkaXRvckJy
b3dzYWJsZVN0YXRlAFN5c3RlbS5Db2RlRG9tLkNvbXBpbGVyAEdlbmVyYXRlZENvZGVBdHRyaWJ1
dGUAU3lzdGVtLkRpYWdub3N0aWNzAERlYnVnZ2VySGlkZGVuQXR0cmlidXRlAE1pY3Jvc29mdC5W
aXN1YWxCYXNpYy5Db21waWxlclNlcnZpY2VzAFN0YW5kYXJkTW9kdWxlQXR0cmlidXRlAEhpZGVN
b2R1bGVOYW1lQXR0cmlidXRlAFN5c3RlbS5Db21wb25lbnRNb2RlbC5EZXNpZ24ASGVscEtleXdv
cmRBdHRyaWJ1dGUAU3lzdGVtLlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNlcwBSdW50aW1lSGVscGVy
cwBHZXRPYmplY3RWYWx1ZQBSdW50aW1lVHlwZUhhbmRsZQBHZXRUeXBlRnJvbUhhbmRsZQBBY3Rp
dmF0b3IAQ3JlYXRlSW5zdGFuY2UATXlHcm91cENvbGxlY3Rpb25BdHRyaWJ1dGUAZ2V0X1ZhbHVl
AHNldF9WYWx1ZQBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMAQ29tVmlzaWJsZUF0dHJp
YnV0ZQBTdHJpbmcAU2NyaXB0QnVmZmVyAENMU0NvbXBsaWFudEF0dHJpYnV0ZQBNaWNyb3NvZnQu
U3FsU2VydmVyLkRUU1BpcGVsaW5lV3JhcABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5QaXBlbGlu
ZS5XcmFwcGVyAElEVFNDb21wb25lbnRNZXRhRGF0YTEwMABnZXRfQ29tcG9uZW50TWV0YURhdGEA
SURUU0lucHV0Q29sbGVjdGlvbjEwMABnZXRfSW5wdXRDb2xsZWN0aW9uAElEVFNJbnB1dDEwMABn
ZXRfSXRlbQBnZXRfSUQASURUU1J1bnRpbWVDb25uZWN0aW9uQ29sbGVjdGlvbjEwMABnZXRfUnVu
dGltZUNvbm5lY3Rpb25Db2xsZWN0aW9uAElEVFNSdW50aW1lQ29ubmVjdGlvbjEwMABnZXRfQ29u
bmVjdGlvbk1hbmFnZXIAU3lzdGVtLkNvbGxlY3Rpb25zAEFycmF5TGlzdABEYXRhUm93AEV4Y2Vw
dGlvbgBJRW51bWVyYXRvcgBTdHJpbmdTcGxpdE9wdGlvbnMAU3BsaXQASUNvbGxlY3Rpb24ARGF0
YVJvd0NvbGxlY3Rpb24AZ2V0X1Jvd3MAR2V0RW51bWVyYXRvcgBnZXRfQ3VycmVudABDb252ZXJz
aW9ucwBGb3JtYXQAQWRkAENvbnRhaW5zAE1vdmVOZXh0AElEaXNwb3NhYmxlAERpc3Bvc2UAQ3Jl
YXRlQ29tbWFuZABzZXRfQ29tbWFuZFRleHQARXhlY3V0ZU5vblF1ZXJ5AElzTnVsbE9yRW1wdHkA
QXJyYXkAVG9BcnJheQBKb2luAFByb2plY3REYXRhAFNldFByb2plY3RFcnJvcgBnZXRfTWVzc2Fn
ZQBDbGVhclByb2plY3RFcnJvcgBBcHBsaWNhdGlvbkV4Y2VwdGlvbgBzZXRfQ29ubmVjdGlvbk1h
bmFnZXJJRABJbnRlcmFjdGlvbgBJSWYAU3lzdGVtLkRhdGEuU3FsQ2xpZW50AFNxbENvbm5lY3Rp
b24AR2V0U2NoZW1hAERhdGFDb2x1bW5Db2xsZWN0aW9uAGdldF9Db2x1bW5zAERhdGFDb2x1bW4A
Z2V0X0NvbHVtbk5hbWUAU29ydABNc2dCb3hSZXN1bHQATXNnQm94U3R5bGUATXNnQm94AE9wZXJh
dG9ycwBDb21wYXJlU3RyaW5nAEVtcHR5AFRvQm9vbGVhbgBEYkRhdGFSZWFkZXIAQ29tbWFuZEJl
aGF2aW9yAEV4ZWN1dGVSZWFkZXIAR2V0U2NoZW1hVGFibGUARmlyZUVycm9yAEZpcmVJbmZvcm1h
dGlvbgBNaWNyb3NvZnQuU3FsU2VydmVyLk1hbmFnZWREVFMATWljcm9zb2Z0LlNxbFNlcnZlci5E
dHMuUnVudGltZQBnZXRfRGVzaWduQ29ubmVjdGlvbnMAQ29ubmVjdGlvbk1hbmFnZXIAQWNxdWly
ZUNvbm5lY3Rpb24ASURUU1ZhcmlhYmxlczEwMABJRFRTVmFyaWFibGVEaXNwZW5zZXIxMDAAZ2V0
X1ZhcmlhYmxlRGlzcGVuc2VyAExvY2tPbmVGb3JSZWFkAElEVFNWYXJpYWJsZTEwMABVbmxvY2sA
TG9ja09uZUZvcldyaXRlAFJhbmRvbQBOZXh0AENvbmNhdABJbmRleE9mAFN1YnN0cmluZwBnZXRf
TGVuZ3RoAFNTSVNTY3JpcHRDb21wb25lbnRFbnRyeVBvaW50QXR0cmlidXRlAENvenlSb2MuU3Fs
U2VydmVyLlNTSVMuQXR0cmlidXRlcwBGaWx0ZXJQcm9wZXJ0aWVzQXR0cmlidXRlAFZhbGlkYXRl
UHJvcGVydGllc0F0dHJpYnV0ZQBTb3J0UHJvcGVydGllc0F0dHJpYnV0ZQBSZWZyZXNoUHJvcGVy
dGllc0F0dHJpYnV0ZQBSZWZyZXNoUHJvcGVydGllcwBMaXN0QXR0cmlidXRlAERlc2NyaXB0aW9u
QXR0cmlidXRlAFZhcmlhYmxlQXR0cmlidXRlAENvbm5lY3Rpb25BdHRyaWJ1dGUAQ29tcGlsYXRp
b25SZWxheGF0aW9uc0F0dHJpYnV0ZQBSdW50aW1lQ29tcGF0aWJpbGl0eUF0dHJpYnV0ZQBTeXN0
ZW0uUnVudGltZS5WZXJzaW9uaW5nAFRhcmdldEZyYW1ld29ya0F0dHJpYnV0ZQBTY3JpcHRDb21w
b25lbnRfMmUzZDRjNTZkMDY5NGY5YmJkMDMyZjFlMDk1MGJlYzEuZGxsAAAAAAALSQBuAHAAdQB0
AAAVQwBvAG4AbgBlAGMAdABpAG8AbgAABSwACgAAFUMAbwBsAHUAbQBuAE4AYQBtAGUAAAtbAHsA
MAB9AF0AAA9TAC4AWwB7ADAAfQBdAAATewAwAH0AIAA9ACAAewAxAH0AAA9EAC4AWwB7ADAAfQBd
AAAVewAwAH0AIAA8AD4AIAB7ADEAfQAASVMARQBMAEUAQwBUACAAKgAgAEkATgBUAE8AIAB7ADAA
fQAgAEYAUgBPAE0AIAB7ADEAfQAgAFcASABFAFIARQAgADEAPQAwAACBBU0ARQBSAEcARQAgAHsA
MAB9ACAAQQBTACAARAAgAFUAUwBJAE4ARwAgAHsAMQB9ACAAQQBTACAAUwAgAE8ATgAgACgAewAy
AH0AKQAgAFcASABFAE4AIABOAE8AVAAgAE0AQQBUAEMASABFAEQAIABUAEgARQBOACAASQBOAFMA
RQBSAFQAIAAoAHsAMwB9ACkAIABWAEEATABVAEUAUwAgACgAewA0AH0AKQAgAFcASABFAE4AIABN
AEEAVABDAEgARQBEACAAQQBOAEQAIAAoAHsANQB9ACkAIABUAEgARQBOACAAVQBQAEQAQQBUAEUA
IABTAEUAVAAgAHsANgB9ADsAAAsgAEEATgBEACAAAAUsACAAAAkgAE8AUgAgAAApUwBlAHQAdQBw
ACAAcwB0AGEAdABlAG0AZQBuAHQAOgAgAHsAMAB9AAAdRABSAE8AUAAgAFQAQQBCAEwARQAgAHsA
MAB9AAAlUwBlAGwAZQBjAHQAIABjAG8AbgBuAGUAYwB0AGkAbwBuAC4AADNTAGUAbABlAGMAdAAg
AGQAZQBzAHQAaQBuAGEAdABpAG8AbgAgAHQAYQBiAGwAZQAuAAA3UwBwAGUAYwBpAGYAeQAgAHQA
YQBiAGwAZQAgAHAAcgBpAG0AYQByAHkAIABrAGUAeQBzAC4AAB9JAHMAVABhAGIAbABlAFYAYQBy
AGkAYQBiAGwAZQAAG1QAYQBiAGwAZQBWAGEAcgBpAGEAYgBsAGUAAAtUAGEAYgBsAGUAABdQAHIA
aQBtAGEAcgB5AEsAZQB5AHMAABtTAHQAYQBnAGUAVgBhAHIAaQBhAGIAbABlAAALVABBAEIATABF
AAAVQgBBAFMARQAgAFQAQQBCAEwARQAADVQAYQBiAGwAZQBzAAAVdABhAGIAbABlAF8AbgBhAG0A
ZQAAF1sAewAwAH0AXQAuAFsAewAxAH0AXQAAD0EARABPAC4ATgBFAFQAAAtJAHMASwBlAHkAACNT
AEUATABFAEMAVAAgACoAIABGAFIATwBNACAAewAwAH0AABtNAGUAcgBnAGUAIABQAHIAbwBjAGUA
cwBzAAAJTQBQAFQAXwAAB10ALgBbAAB7U2fKfIU9QpWt2AKRdE5rAAi3elxWGTTgiQiwP19/EdUK
OgMgAAEDAAABBAAAEgwHBhUSGAESDAQAABIIBwYVEhgBEggEAAASEQcGFRIYARIRBAAAEhQHBhUS
GAESFAQIABIMBAgAEggECAASEQQIABIUBCABAhwDIAAIBCAAEhUDIAAOAh4ABxABAR4AHgAHMAEB
ARAeAAITAAQgABMABwYVEhkBEwAEKAATAAgWz0kLuAw06giJhF3NgIDMkQsgBQESIQgCEiUSKQQg
AB0OAyAAAgQoAB0OAwYSJAMGEigJIAQBCA4SJRIpBSABARIcAwYSIQUgAQESIQQgABIxBCgAEjEF
IAECEA4EIAAdHAQgAQEOBCABAQIFIAESNQIFIAESOQIEIAEcDgUgAgEOHAQgAQ4OAgYOAgYCAwYS
PQMoAA4DKAACBCwACgAORAAuAFsAewAwAH0AXQAOUwAuAFsAewAwAH0AXQBIUwBFAEwARQBDAFQA
IAAqACAASQBOAFQATwAgAHsAMAB9ACAARgBSAE8ATQAgAHsAMQB9ACAAVwBIAEUAUgBFACAAMQA9
ADAAgQRNAEUAUgBHAEUAIAB7ADAAfQAgAEEAUwAgAEQAIABVAFMASQBOAEcAIAB7ADEAfQAgAEEA
UwAgAFMAIABPAE4AIAAoAHsAMgB9ACkAIABXAEgARQBOACAATgBPAFQAIABNAEEAVABDAEgARQBE
ACAAVABIAEUATgAgAEkATgBTAEUAUgBUACAAKAB7ADMAfQApACAAVgBBAEwAVQBFAFMAIAAoAHsA
NAB9ACkAIABXAEgARQBOACAATQBBAFQAQwBIAEUARAAgAEEATgBEACAAKAB7ADUAfQApACAAVABI
AEUATgAgAFUAUABEAEEAVABFACAAUwBFAFQAIAB7ADYAfQA7ABxEAFIATwBQACAAVABBAEIATABF
ACAAewAwAH0ABSABARFFCAEAAQAAAAAABSACAQ4OGAEACk15VGVtcGxhdGUIMTAuMC4wLjAAAAQB
AAAABhUSGAESDAYVEhgBEggGFRIYARIRBhUSGAESFAQHARIMBAcBEggEBwESEQQHARIUEAEAC015
LkNvbXB1dGVyAAAMAQAHTXkuVXNlcgAAEwEADk15LldlYlNlcnZpY2VzAAATAQAOTXkuQXBwbGlj
YXRpb24AAAQAARwcAwcBAgMHAQgGAAESFRFhBAcBEhUDBwEOBRABAB4ABAoBHgAEBwEeAAcgBAEO
Dg4OYQEANFN5c3RlbS5XZWIuU2VydmljZXMuUHJvdG9jb2xzLlNvYXBIdHRwQ2xpZW50UHJvdG9j
b2wSQ3JlYXRlX19JbnN0YW5jZV9fE0Rpc3Bvc2VfX0luc3RhbmNlX18AAAAGFRIYARMABhUSGQET
AAQKARMABSABARMACAcDEwATABMABQEAAAAABAcBHQ4EIAASfQUgABKAgQYgARKAhRwFIAASgIkG
IAESgI0cBAcBEjEJIAIdDh0OEYChBiABARKApQUgABKAqQUgABKAnQMgABwEAAEOHAUAAg4OHAQg
AQgcBgADDg4cHAQgABI9BAABAg4HIAESgLUSFQIdDgYAAg4OHQ4GAAIODh0cBgABARKAmSgHEBI5
EoCREoCREoCREoCREoCREoCRDg4SNQ4SgJUSgJkdDhKAnR0cBCAAEjkHBwISORKAmQcHAwICEoCZ
BgADHAIcHAcHAh0OEoCRByACEjUOHQ4FIAASgM0GIAESgNEICgADEYDVHBGA2RwaBwwdHBKAkRI5
Dg4SNQ4SgJUOEoCZHQ4SgJ0SBwYdHBKAkRI1EoCVEoCZEoCdBgADCA4OAgYHAh0OHQ4EAAECHBEH
Bg4SgJESNRKAlRKAmRKAnQggARKA4RGA5QQgABI1DQcFEjUSNRI5Ej0SgOEKIAYBCA4ODggQAgUg
ABKA6QYgARKA7RwEIAEcHAYHAhI5EjkFIAASgPUIIAIBDhASgPEGIAESgPkcBwcDHBwSgPEEIAEB
HAUHARKA8QUgAggICAQAAQ4IBgADDg4ODgQHAg4OBCABCA4FIAIOCAgEBwIOCBIBAA1HZXRQcm9w
ZXJ0aWVzAAANAQAIVmFsaWRhdGUAAAUgAQEdDlEBAAYAAAAKQ29ubmVjdGlvbg9Jc1RhYmxlVmFy
aWFibGUFVGFibGUNVGFibGVWYXJpYWJsZQtQcmltYXJ5S2V5cw1TdGFnZVZhcmlhYmxlAAAGIAEB
EYEVBiADAQ4CAhABAAlHZXRUYWJsZXMAAQAAHgEAGVNlbGVjdCBkZXN0aW5hdGlvbiB0YWJsZS4A
ADIBAC1TZWxlY3QgdmFyaWFibGUgY29udGFpbmluZyBkZXN0aW5hdGlvbiB0YWJsZS4AADUBADBT
ZWxlY3QgdmFyaWFibGUgdG8gc3RvcmUgc3RhZ2UgdGFibGUgKG9wdGlvbmFsKS4AABkBABRBZG9O
ZXRDb25uZWN0aW9uVHlwZQAAJwEAIlNlbGVjdCBBRE8uTkVUIENvbm5lY3Rpb24gTWFuYWdlci4A
ABEBAApHZXRDb2x1bW5zAQAAACABABtTcGVjaWZ5IHRhYmxlIHByaW1hcnkga2V5cy4AADcBADJT
ZWxlY3QgaWYgZGVzdGluYXRpb24gdGFibGUgaXMgc3RvcmVkIGluIHZhcmlhYmxlLgAABCABAQgI
AQAIAAAAAAAeAQABAFQCFldyYXBOb25FeGNlcHRpb25UaHJvd3MBRwEAGi5ORVRGcmFtZXdvcmss
VmVyc2lvbj12NC4wAQBUDhRGcmFtZXdvcmtEaXNwbGF5TmFtZRAuTkVUIEZyYW1ld29yayA0YFsA
AAAAAAAAAAAAflsAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBbAAAAAAAAAAAAAAAAAAAAAF9D
b3JEbGxNYWluAG1zY29yZWUuZGxsAAAAAAD/JQAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEAAAABgAAIAAAAAAAAAA
AAAAAAAAAAEAAQAAADAAAIAAAAAAAAAAAAAAAAAAAAEAAAAAAEgAAABYYAAA7AIAAAAAAAAAAAAA
7AI0AAAAVgBTAF8AVgBFAFIAUwBJAE8ATgBfAEkATgBGAE8AAAAAAL0E7/4AAAEAAAAAAAAAAAAA
AAAAAAAAAD8AAAAAAAAABAAAAAIAAAAAAAAAAAAAAAAAAABEAAAAAQBWAGEAcgBGAGkAbABlAEkA
bgBmAG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEAdABpAG8AbgAAAAAAAACwBEwCAAABAFMAdABy
AGkAbgBnAEYAaQBsAGUASQBuAGYAbwAAACgCAAABADAAMAAwADAAMAA0AGIAMAAAACwAAgABAEYA
aQBsAGUARABlAHMAYwByAGkAcAB0AGkAbwBuAAAAAAAgAAAAMAAIAAEARgBpAGwAZQBWAGUAcgBz
AGkAbwBuAAAAAAAwAC4AMAAuADAALgAwAAAAjAA1AAEASQBuAHQAZQByAG4AYQBsAE4AYQBtAGUA
AABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfADIAZQAzAGQANABjADUANgBkADAANgA5
ADQAZgA5AGIAYgBkADAAMwAyAGYAMQBlADAAOQA1ADAAYgBlAGMAMQAuAGQAbABsAAAAAAAoAAIA
AQBMAGUAZwBhAGwAQwBvAHAAeQByAGkAZwBoAHQAAAAgAAAAlAA1AAEATwByAGkAZwBpAG4AYQBs
AEYAaQBsAGUAbgBhAG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AMgBlADMA
ZAA0AGMANQA2AGQAMAA2ADkANABmADkAYgBiAGQAMAAzADIAZgAxAGUAMAA5ADUAMABiAGUAYwAx
AC4AZABsAGwAAAAAADQACAABAFAAcgBvAGQAdQBjAHQAVgBlAHIAcwBpAG8AbgAAADAALgAwAC4A
MAAuADAAAAA4AAgAAQBBAHMAcwBlAG0AYgBsAHkAIABWAGUAcgBzAGkAbwBuAAAAMAAuADAALgAw
AC4AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAwAAACQOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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.2012, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea</property><property id="11" name="VSTAProjectName" dataType="System.String" description="Specifies the name of the Microsoft Visual Studio Tools for Applications project. Project names must be unique within a package." typeConverter="NOTBROWSABLE">ScriptComponent_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=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91">VisualBasic</property></properties><connections><connection id="14" name="Connection" connectionManagerID="{4135D131-64F6-4E8A-99C9-F158BBDCE7D4}" /></connections><inputs><input id="15" name="Input" hasSideEffects="true"><externalMetadataColumns /></input></inputs><outputs><output id="16" name="Output" synchronousInputId="15"><externalMetadataColumns /></output></outputs></component>