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

Option Strict Off
Option Explicit On



Partial Friend NotInheritable Class MySettings
    Inherits System.Configuration.ApplicationSettingsBase

    Private Shared m_Value As MySettings

    Private Shared m_SyncObject As Object = New Object

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

' General Information about an assembly is controlled through the following 
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.

' Review the values of the assembly attributes

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

<Assembly: ComVisible(False)> 

'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("67cf4972-00bb-4e13-98d2-1cc708e337d1")> 

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

<Assembly: AssemblyVersion("1.0.0.0")> 
<Assembly: AssemblyFileVersion("1.0.0.0")> 
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\settings.settings]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version='1.0' encoding='iso-8859-1'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)" GeneratedClassNamespace="" GeneratedClassName="MySettings">
  <Profiles>
    <Profile Name="(Default)" />
  </Profiles>
  <Settings />
</SettingsFile>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\bufferwrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services buffer wrappers
' This module defines classes for accessing data flow buffers
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!


Option Strict Off   ' This allows usage of PipelineBuffer typed accessors.

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class InputBuffer
    Inherits ScriptBufferPlus

    Public Sub New(ByVal Component As ScriptComponent, ByVal ObjectID As Integer, ByVal IsInput As Boolean, ByVal Buffer As PipelineBuffer)
        MyBase.New(Component, ObjectID, IsInput, Buffer)
    End Sub

    Public Overrides ReadOnly Property StaticInputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public Overrides ReadOnly Property StaticOutputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public Overloads Function NextRow() As Boolean
        NextRow = MyBase.NextRow()
    End Function

    Public Overloads Function EndOfRowset() As Boolean
        EndOfRowset = MyBase.EndOfRowset
    End Function

End Class

<CLSCompliant(False)> _
Public Class Input1Buffer
    Inherits ScriptBufferPlus

    Public Sub New(ByVal Component As ScriptComponent, ByVal ObjectID As Integer, ByVal IsInput As Boolean, ByVal Buffer As PipelineBuffer)
        MyBase.New(Component, ObjectID, IsInput, Buffer)
    End Sub

    Public Overrides ReadOnly Property StaticInputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public Overrides ReadOnly Property StaticOutputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public Overloads Function NextRow() As Boolean
        NextRow = MyBase.NextRow()
    End Function

    Public Overloads Function EndOfRowset() As Boolean
        EndOfRowset = MyBase.EndOfRowset
    End Function

End Class

<CLSCompliant(False)> _
Public Class OutputBuffer
    Inherits ScriptBufferPlus

    Public Sub New(ByVal Component As ScriptComponent, ByVal ObjectID As Integer, ByVal IsInput As Boolean, ByVal Buffer As PipelineBuffer)
        MyBase.New(Component, ObjectID, IsInput, Buffer)
    End Sub

    Public Overrides ReadOnly Property StaticInputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public WriteOnly Property [PackageId]() As String
        Set
            Me(0) = Value
        End Set
    End Property
    Public WriteOnly Property [PackageId_IsNull] As Boolean
        Set
            If (value)
                SetNull(0)
            Else
                Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.")
            End If
        End Set
    End Property

    Public WriteOnly Property [ExecutionId]() As String
        Set
            Me(1) = Value
        End Set
    End Property
    Public WriteOnly Property [ExecutionId_IsNull] As Boolean
        Set
            If (value)
                SetNull(1)
            Else
                Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.")
            End If
        End Set
    End Property

    Public WriteOnly Property [StepName]() As String
        Set
            Me(2) = Value
        End Set
    End Property
    Public WriteOnly Property [StepName_IsNull] As Boolean
        Set
            If (value)
                SetNull(2)
            Else
                Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.")
            End If
        End Set
    End Property

    Public WriteOnly Property [RowIdentifierName]() As String
        Set
            Me(3) = Value
        End Set
    End Property
    Public WriteOnly Property [RowIdentifierName_IsNull] As Boolean
        Set
            If (value)
                SetNull(3)
            Else
                Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.")
            End If
        End Set
    End Property

    Public WriteOnly Property [RowIdentifierId]() As String
        Set
            Me(4) = Value
        End Set
    End Property
    Public WriteOnly Property [RowIdentifierId_IsNull] As Boolean
        Set
            If (value)
                SetNull(4)
            Else
                Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.")
            End If
        End Set
    End Property

    Public WriteOnly Property [ErrorColumnName]() As String
        Set
            Me(5) = Value
        End Set
    End Property
    Public WriteOnly Property [ErrorColumnName_IsNull] As Boolean
        Set
            If (value)
                SetNull(5)
            Else
                Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.")
            End If
        End Set
    End Property

    Public WriteOnly Property [ErrorColumnValue]() As String
        Set
            Me(6) = Value
        End Set
    End Property
    Public WriteOnly Property [ErrorColumnValue_IsNull] As Boolean
        Set
            If (value)
                SetNull(6)
            Else
                Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.")
            End If
        End Set
    End Property

    Public WriteOnly Property [ErrorMessage]() As String
        Set
            Me(7) = Value
        End Set
    End Property
    Public WriteOnly Property [ErrorMessage_IsNull] As Boolean
        Set
            If (value)
                SetNull(7)
            Else
                Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.")
            End If
        End Set
    End Property

    Public Overrides ReadOnly Property StaticOutputColumns() As String()
        Get
            Return New String() {"PackageId", "ExecutionId", "StepName", "RowIdentifierName", "RowIdentifierId", "ErrorColumnName", "ErrorColumnValue", "ErrorMessage"}
        End Get
    End Property

    Public Overloads Sub AddRow()
        MyBase.AddRow()
    End Sub

    Public Overloads Sub SetEndOfRowset()
        MyBase.SetEndOfRowset()
    End Sub

    Public Overloads Function EndOfRowset() As Boolean
        EndOfRowset = MyBase.EndOfRowset
    End Function

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\scriptcomponent_3e36dc03710e4ab7a7e685e62c677d65.vbproj]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- This section defines project-level properties.

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

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

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

       Compile - Specifies a source file to compile.
       EmbeddedResource - Specifies a .resx file for embedded resources.
       None - Specifies a file that is not to be passed to the compiler (for instance,
              a text file or XML file).
       AppDesigner - Specifies the directory where the application properties files can
                     be found.
  -->
  <ItemGroup>
    <AppDesigner Include="My Project\" />
    <Compile Include="BufferWrapper.vb" />
    <Compile Include="ComponentWrapper.vb" />
    <Compile Include="main.vb" />
    <Compile Include="My Project\AssemblyInfo.vb">
      <SubType>Code</SubType>
    </Compile>
    <EmbeddedResource Include="My Project\Resources.resx">
      <Generator>VbMyResourcesResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.vb</LastGenOutput>
      <CustomToolNamespace>My.Resources</CustomToolNamespace>
    </EmbeddedResource>
    <Compile Include="My Project\Resources.Designer.vb">
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
      <DependentUpon>Resources.resx</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    <None Include="My Project\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.vb</LastGenOutput>
    </None>
    <Compile Include="My Project\Settings.Designer.vb">
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    <!-- Include the default configuration information and metadata files for the add-in.
         These files are copied to the build output directory when the project is
         built, and the path to the configuration file is passed to add-in on the command
         line when debugging.
    -->
  </ItemGroup>
  <!-- Include the build rules for a VB project.-->
  <Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
  <!-- This section defines VSTA properties that describe the host-changable project properties. -->
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{A860303F-1F3F-4691-B57E-529FC101A107}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{C1B21C64-9E6F-4923-A89D-9F958503C1CE}" ApplicationType="usd" Language="vb" TemplatesPath="" />
        <Host Name="SSIS_ScriptComponent" />
        <ProjectClient>
          <HostIdentifier>SSIS_ScriptComponent</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
</Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\resources.designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA['------------------------------------------------------------------------------
' <autogenerated>
'     This code was generated by a tool.
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' </autogenerated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On


Namespace My.Resources
    
    '''<summary>
    '''   A strongly-typed resource class, for looking up localized strings, etc.
    '''</summary>
    'This class was auto-generated by the Strongly Typed Resource Builder
    'class via a tool like ResGen or Visual Studio.NET.
    'To add or remove a member, edit your .ResX file then rerun ResGen
    'with the /str option, or rebuild your VS project.
    Class MyResources
        
        Private Shared _resMgr As System.Resources.ResourceManager
        
        Private Shared _resCulture As System.Globalization.CultureInfo
        
        Friend Sub New()
            MyBase.New
        End Sub
        
        '''<summary>
        '''   Returns the cached ResourceManager instance used by this class.
        '''</summary>
        <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)>  _
        Public Shared ReadOnly Property ResourceManager() As System.Resources.ResourceManager
            Get
                If (_resMgr Is Nothing) Then
                    Dim temp As System.Resources.ResourceManager = New System.Resources.ResourceManager("My.Resources.MyResources", GetType(MyResources).Assembly)
                    _resMgr = temp
                End If
                Return _resMgr
            End Get
        End Property
        
        '''<summary>
        '''   Overrides the current thread's CurrentUICulture property for all
        '''   resource lookups using this strongly typed resource class.
        '''</summary>
        <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)>  _
        Public Shared Property Culture() As System.Globalization.CultureInfo
            Get
                Return _resCulture
            End Get
            Set
                _resCulture = value
            End Set
        End Property
    End Class
End Namespace
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\componentwrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services component wrapper
' This module defines the base class for your component
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class UserComponent
    Inherits ScriptComponentPlus

    Public Connections As New Connections(Me)
    Public Variables As New Variables(Me)

    Public OutputBuffer As OutputBuffer

    Dim InputsFinished As Integer = 0

    Public Overrides Sub ProcessInput(ByVal InputID As Integer, ByVal Buffer As PipelineBuffer)

        If InputID = MyBase.ComponentMetaData.InputCollection("Input").ID Then
            Input_ProcessInput(New InputBuffer(Me, InputID, True, Buffer))
        End If

        If InputID = MyBase.ComponentMetaData.InputCollection("Input 1").ID Then
            Input1_ProcessInput(New Input1Buffer(Me, InputID, True, Buffer))
        End If

        If Buffer.EndOfRowset Then
            InputsFinished = InputsFinished + 1
            If InputsFinished = 1 Then
                FinishOutputs()
                MarkOutputsFinished()
            End If
        End If

    End Sub

    Public Overridable Sub FinishOutputs()
    End Sub

    Private Sub MarkOutputsFinished()

        If OutputBuffer IsNot Nothing Then
            OutputBuffer.SetEndOfRowset
            OutputBuffer = Nothing
        End If

    End Sub

    Public Overrides Sub PrimeOutput(ByVal Outputs As Integer, ByVal OutputIDs() As Integer, ByVal Buffers() As PipelineBuffer)

        For I As Integer = 0 To Outputs - 1
            If OutputIDs(I) = MyBase.ComponentMetaData.OutputCollection("Output").ID Then
                OutputBuffer = New OutputBuffer(Me, OutputIDs(I), False, Buffers(I))
            End If
        Next

        CreateNewOutputRows()

    End Sub

    Public Overridable Sub CreateNewOutputRows()
    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

    Public Overridable Sub Input1_ProcessInput(ByVal Buffer As Input1Buffer)

        While Buffer.NextRow()
            Input1_ProcessInputRow(Buffer)
        End While

    End Sub

    Public Overridable Sub Input1_ProcessInputRow(ByVal Row As Input1Buffer)

    End Sub

End Class

Public Class Connections

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

End Class

Public Class Variables

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\resources.resx]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    
    Example:
    
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
                
    There are any number of "resheader" rows that contain simple 
    name/value pairs.
    
    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.
    
    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:
    
    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.
    
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
</root>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\main.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' CozyRoc SQL Server Integration Services user script component
'
' Created by Antoon Vansina (http://antoon.blog.com/)
' 
' 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.Math

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


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Constants
    Friend Class Consts
        Public Const PackageId_Default As String = "System::PackageID"
        Public Const ExecutionId_Default As String = "System::ExecutionInstanceGUID"
        Public Const StandardDestinationColumnLength_Default As Integer = 250
    End Class   ' Consts


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Will hold name and position of the input columns
    Private Structure ColumnInfo
        Public BufferIndex As Integer
        Public Name As String
        Public Id As Integer
        Public LineageId As Integer
        Public Component As String
    End Structure   ' ColumnInfo


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Structure InputInfo
        Public Id As Integer
        Public Name As String
        Public ColumnInfos As ColumnInfo()
        Public EndOfRowset As Boolean
    End Structure   ' InputInfo


#Region "Design time methods"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overloads Overrides Sub OnInputPathAttached(ByVal inputID As Integer)
        ' Add all virtual input columns.
        Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection.GetObjectByID(inputID)
        Dim virtInput As IDTSVirtualInput100 = input.GetVirtualInput

        For Each column As IDTSVirtualInputColumn100 In virtInput.VirtualInputColumnCollection
            Call MyBase.HostComponent.SetUsageType( _
                inputID, _
                virtInput, _
                column.LineageID, _
                DTSUsageType.UT_READONLY)
        Next

        'Prepare next input.
        Dim nextinput As IDTSInput100 = Me.ComponentMetaData.InputCollection.New()
        nextinput.Name = "Input " & Me.ComponentMetaData.InputCollection.Count - 1
        nextinput.HasSideEffects = True
    End Sub ' OnInputPathAttached


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overloads Overrides Sub OnInputPathDetached(ByVal inputID As Integer)
        Call MyBase.OnInputPathDetached(inputID)

        ' Remove the input.
        Call Me.ComponentMetaData.InputCollection.RemoveObjectByID(inputID)
    End Sub ' OnInputPathDetached


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overloads Overrides Sub ReinitializeMetaData()
        ' Remove all columns on all the input and re-attach the virttual input columns.
        Dim virtInput As IDTSVirtualInput100
        For Each input As IDTSInput100 In Me.ComponentMetaData.InputCollection
            Call input.InputColumnCollection.RemoveAll()

            virtInput = input.GetVirtualInput()
            For Each column As IDTSVirtualInputColumn100 In virtInput.VirtualInputColumnCollection
                Call MyBase.HostComponent.SetUsageType( _
                    input.ID, _
                    virtInput, _
                    column.LineageID, _
                    DTSUsageType.UT_READONLY)
            Next
        Next
    End Sub ' ReinitializeMetaData
#End Region ' Design time methods


#Region "Execution time methods"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overloads Overrides Sub PreExecute()
        ' Get the values of the custom properties.
        m_packageId = GetVariable_(Me.PackageId).ToString().Trim()
        m_executionId = GetVariable_(Me.ExecutionId).ToString().Trim()

        ' Read the name of the task that causes the error.
        m_stepName = GetVariable_("System::TaskName").ToString().Trim()

        ' Read inputs columns info.
        Dim inputs As IDTSInputCollection100 = Me.ComponentMetaData.InputCollection
        Dim inputsCount As Integer = inputs.Count
        m_inputInfos = New InputInfo(inputsCount - 2) {}
        For inputIndex As Integer = 0 To inputsCount - 2        ' last input is always empty
            Dim input As IDTSInput100 = inputs(inputIndex)

            With m_inputInfos(inputIndex)
                .Id = input.ID
                .Name = input.Name
                .ColumnInfos = GetColumnInfos_(input)
            End With
        Next
    End Sub ' PreExecute


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overloads Overrides Sub ProcessInput( _
        ByVal inputID As Integer, _
        ByVal buffer As PipelineBuffer)

        If buffer Is Nothing Then
            Throw New ArgumentNullException("buffer")
        End If

        ' Get input index.
        Dim inputIndex As Integer = -1
        inputIndex = GetInputInfoIndex_(inputID)
        Dim colsCount As Integer = m_inputInfos(inputIndex).ColumnInfos.Length

        ' Find the ErrorColumnValue, ErrorDescription and KeyColumnValue.
        If buffer.EndOfRowset Then
            m_inputInfos(inputIndex).EndOfRowset = True
        Else
            ' for all rows in the buffer
            While buffer.NextRow()
                Dim errorDescription As String = "Unknown"
                Dim errorValue As String = "Unknown"
                Dim errorColumnName As String = String.Empty
                Dim errorColumnId As Integer = -1
                Dim keyColumnValue As String = "Unknown"
                Dim stepNamePlus As String = ""
                Dim errorComponent As String = ""
                Dim colIndex As Integer

                For colIndex = 0 To colsCount - 1
                    Dim ci As ColumnInfo = m_inputInfos(inputIndex).ColumnInfos(colIndex)
                    If Not buffer.IsNull(ci.BufferIndex) Then
                        Select Case ci.Name
                            Case "ErrorCode"
                                errorDescription = Me.ComponentMetaData.GetErrorDescription( _
                                    CInt(buffer(ci.BufferIndex))).Trim()
                                errorComponent = ci.Component
                                stepNamePlus = m_stepName & " - " & errorComponent

                            Case "ErrorColumn"
                                ' Save the id of the error column.
                                errorColumnId = CInt(buffer(ci.BufferIndex))

                            Case Me.RowIdentifierName
                                ' Save the value of the key column.
                                keyColumnValue = buffer(ci.BufferIndex).ToString().Trim()
                        End Select
                    End If
                Next

                ' Search error column name in input based on id.
                colIndex = GetColumnInfoById_( _
                    m_inputInfos(inputIndex).ColumnInfos, _
                    errorColumnId)
                If colIndex <> -1 Then
                    errorColumnName = m_inputInfos(inputIndex).ColumnInfos(colIndex).Name
                End If

                Dim inputFound As Integer = inputIndex

                If String.IsNullOrEmpty(errorColumnName) Then
                    ' Search error column name in all inputs on the assumption ID = LineageId.
                    For inputFound = 0 To m_inputInfos.Length - 1
                        colsCount = m_inputInfos(inputFound).ColumnInfos.Length
                        For colIndex = 0 To colsCount - 1
                            Dim ci As ColumnInfo = m_inputInfos(inputFound).ColumnInfos(colIndex)

                            If ci.LineageId = errorColumnId Then
                                ' This is possibly the error column.
                                If ci.Component = errorComponent Then
                                    errorColumnName = ci.Name
                                Else
                                    errorColumnName = "Maybe: " & ci.Name
                                End If
                            End If
                        Next

                        If Not String.IsNullOrEmpty(errorColumnName) Then
                            Exit For
                        End If
                    Next
                End If

                ' Search error column value based on name.
                If String.IsNullOrEmpty(errorColumnName) Then
                    ' At least keep the error column id.
                    errorColumnName = "Id = " & errorColumnId
                Else
                    ' The name of error column is known.
                    colIndex = GetColumnInfoByName_( _
                        m_inputInfos(inputFound).ColumnInfos, _
                        errorColumnName)
                    If colIndex <> -1 Then
                        Dim ci As ColumnInfo = m_inputInfos(inputIndex).ColumnInfos(colIndex)
                        If Not buffer.IsNull(ci.BufferIndex) Then
                            errorValue = buffer(ci.BufferIndex).ToString()
                        End If
                    End If
                End If

                ' Write info to the output.
                Call Me.OutputBuffer.AddRow()

                Me.OutputBuffer.PackageId = GetPipelineString_(m_packageId)
                Me.OutputBuffer.ExecutionId = GetPipelineString_(m_executionId)
                Me.OutputBuffer.StepName = GetPipelineString_(stepNamePlus)
                Me.OutputBuffer.RowIdentifierName = GetPipelineString_(Me.RowIdentifierName)
                Me.OutputBuffer.RowIdentifierId = GetPipelineString_(keyColumnValue)
                Me.OutputBuffer.ErrorColumnName = GetPipelineString_(errorColumnName)
                Me.OutputBuffer.ErrorColumnValue = GetPipelineString_(errorValue)
                Me.OutputBuffer.ErrorMessage = GetPipelineString_(errorDescription)
            End While
        End If

        If IsEndReached_() Then
            ' End is reached. Set output buffer end.
            Call Me.OutputBuffer.SetEndOfRowset()
        End If
    End Sub ' ProcessInput
#End Region ' Execution time methods


#Region "User interface"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <ComponentModel.Description("Select variable that contains the unique identifier of this package.F.e. System::PackageID.")> _
    <ComponentModel.Category("General")> _
    <Variable()> _
    <ComponentModel.DefaultValue(Consts.PackageId_Default)> _
    Public Property PackageId() As String
        Get
            PackageId = m_packageIdVariable
        End Get
        Set(ByVal value As String)
            m_packageIdVariable = value
        End Set
    End Property    ' PackageId


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <ComponentModel.Description("Select variable that contains the unique identifier of this execution/instance of the package.F.e. System::ExecutionInstanceGUID.")> _
    <ComponentModel.Category("General")> _
    <Variable()> _
    <ComponentModel.DefaultValue(Consts.ExecutionId_Default)> _
    Public Property ExecutionId() As String
        Get
            ExecutionId = m_executionIdVariable
        End Get
        Set(ByVal value As String)
            m_executionIdVariable = value
        End Set
    End Property    ' ExecutionId


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <ComponentModel.Description("Select the length of the NVarchar output columns")> _
    <ComponentModel.Category("General")> _
    <ComponentModel.DefaultValue(Consts.StandardDestinationColumnLength_Default)> _
    Public Property StandardDestinationColumnLength() As Integer
        Get
            StandardDestinationColumnLength = m_standardDestinationColumnLength
        End Get
        Set(ByVal value As Integer)
            m_standardDestinationColumnLength = value
            Call ResetOutputColumnTypes_()
        End Set
    End Property    ' StandardDestinationColumnLength


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <ComponentModel.Description("Select the input flow that contains the column that uniquely defines every row in this flow.")> _
    <ComponentModel.Category("Specific for this dataflow")> _
    <Input()> _
    Public Property InputForRowIdentifierName() As String
        Get
            InputForRowIdentifierName = m_InputForRowIdentifierName
        End Get
        Set(ByVal value As String)
            m_InputForRowIdentifierName = value
        End Set
    End Property    ' InputForRowIdentifierName


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <ComponentModel.Description("Select the column that uniquely defines every row in this flow.")> _
    <ComponentModel.Category("Specific for this dataflow")> _
    <InputVirtualColumn("InputForRowIdentifierName", True)> _
    Public Property RowIdentifierName() As String
        Get
            RowIdentifierName = m_rowIdentifierName
        End Get
        Set(ByVal value As String)
            m_rowIdentifierName = value
        End Set
    End Property    ' RowIdentifierName
#End Region ' User interface


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub ResetOutputColumnTypes_()
        Dim output As IDTSOutput100 = Me.ComponentMetaData.OutputCollection(0)
        Dim outputCols As IDTSOutputColumnCollection100 = output.OutputColumnCollection
        For i As Integer = 0 To outputCols.Count - 1
            Call outputCols(i).SetDataTypeProperties( _
                DataType.DT_WSTR, _
                Me.StandardDestinationColumnLength, _
                0, _
                0, _
                0)
        Next
    End Sub ' ResetOutputColumnTypes_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Add column to specified output.
    Private Sub AddStringColumn_( _
        ByVal output As IDTSOutput100, _
        ByVal columnName As String)

        Dim outColumn As IDTSOutputColumn100
        outColumn = output.OutputColumnCollection.New()
        outColumn.Name = columnName
        Call outColumn.SetDataTypeProperties( _
            DataType.DT_WSTR, _
            Me.StandardDestinationColumnLength, _
            0, _
            0, _
            0)
    End Sub ' AddStringColumn_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Gets package variable.
    Private Function GetVariable_(ByVal varName As String) As Object
        Dim result As Object

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

        GetVariable_ = result
    End Function    ' GetVariable_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetOutputColumnIndex_( _
        ByVal output As IDTSOutput100, _
        ByVal columnName As String) As Integer

        GetOutputColumnIndex_ = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            output.Buffer, _
            output.OutputColumnCollection(columnName).LineageID)
    End Function    ' GetOutputColumnIndex_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Get input columns information.
    Private Function GetColumnInfos_(ByVal input As IDTSInput100) As ColumnInfo()
        Dim colsCount As Integer = input.InputColumnCollection.Count
        Dim result() As ColumnInfo = New ColumnInfo(colsCount - 1) {}

        For colIndex As Integer = 0 To colsCount - 1
            Dim inputCol As IDTSInputColumn100 = input.InputColumnCollection(colIndex)

            Dim colInfo As ColumnInfo = New ColumnInfo
            With colInfo
                .Id = inputCol.ID
                .BufferIndex = MyBase.HostComponent.BufferManager.FindColumnByLineageID( _
                    input.Buffer, _
                    inputCol.LineageID)
                .Name = inputCol.Name
                .Component = inputCol.UpstreamComponentName
                .LineageId = inputCol.LineageID
            End With

            result(colIndex) = colInfo
        Next

        GetColumnInfos_ = result
    End Function    ' GetColumnInfos_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Get input info index.
    Private Function GetInputInfoIndex_(ByVal inputID As Integer) As Integer
        Dim result As Integer = -1

        Dim infosCount As Integer = m_inputInfos.Length
        For infoIndex As Integer = 0 To infosCount - 1
            If m_inputInfos(infoIndex).Id = inputID Then
                result = infoIndex
                Exit For
            End If
        Next

        GetInputInfoIndex_ = result
    End Function    ' GetInputInfoIndex_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function IsEndReached_() As Boolean
        Dim result As Boolean = True

        For Each inputInfo As InputInfo In m_inputInfos
            If Not inputInfo.EndOfRowset Then
                ' The end is not yet reached.
                result = False
                Exit For
            End If
        Next

        IsEndReached_ = result
    End Function    ' IsEndReached_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Get properly sized pipeline string.
    Private Function GetPipelineString_(ByVal str As String) As String
        Dim result As String = String.Empty

        If Not String.IsNullOrEmpty(str) Then
            result = str.Substring( _
                0, _
                Min(str.Length, Me.StandardDestinationColumnLength - 1))
        End If

        GetPipelineString_ = result
    End Function    ' GetPipelineString_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetColumnInfoByName_( _
        ByVal colsInfo() As ColumnInfo, _
        ByVal name As String) As Integer

        Dim result As Integer = -1

        Dim colsCount As Integer = colsInfo.Length
        For colIndex As Integer = 0 To colsCount - 1
            If colsInfo(colIndex).Name = name Then
                result = colIndex
                Exit For
            End If
        Next

        GetColumnInfoByName_ = result
    End Function    ' GetColumnInfoByName_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetColumnInfoById_( _
        ByVal colsInfo() As ColumnInfo, _
        ByVal id As Integer) As Integer

        Dim result As Integer = -1

        Dim colsCount As Integer = colsInfo.Length
        For colIndex As Integer = 0 To colsCount - 1
            If colsInfo(colIndex).Id = id Then
                result = colIndex
                Exit For
            End If
        Next

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


#Region "Attributes"
    Private m_packageIdVariable As String
    Private m_executionIdVariable As String
    Private m_standardDestinationColumnLength As Integer
    Private m_inputForRowIdentifierName As String
    Private m_rowIdentifierName As String

    Private m_executionId As String
    Private m_packageId As String
    Private m_stepName As String

    Private m_inputInfos() As InputInfo ' the column info of all the input
#End Region ' Attributes

End Class   ' ScriptMain
]]></arrayElement></arrayElements></property>
<property id="106" name="BinaryCode" dataType="System.String" state="cdata" isArray="true" description="Stores the binary representation of the component" typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None"><arrayElements arrayElementCount="2"><arrayElement dataType="System.String"><![CDATA[\bin\scriptcomponent_3e36dc03710e4ab7a7e685e62c677d65.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v
ZGUuDQ0KJAAAAAAAAABQRQAATAEDAOZPPlUAAAAAAAAAAOAAAiELAQgAAEgAAAAMAAAAAAAA7mYA
AAAgAAAAgAAAAABAAAAgAAAAAgAABAAAAAAAAAAEAAAAAAAAAADAAAAAAgAAAAAAAAIAQIUAABAA
ABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAAKBmAABLAAAAAIAAALgJAAAAAAAAAAAAAAAAAAAA
AAAAAKAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAA9EYAAAAgAAAASAAAAAIA
AAAAAAAAAAAAAAAAACAAAGAucnNyYwAAALgJAAAAgAAAAAoAAABKAAAAAAAAAAAAAAAAAABAAABA
LnJlbG9jAAAMAAAAAKAAAAACAAAAVAAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAADQ
ZgAAAAAAAEgAAAACAAUA6DEAALg0AAABAAAAAAAAAFAgAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAALQAAADOyu++AQAAAJEAAABsU3lzdGVtLlJlc291cmNlcy5S
ZXNvdXJjZVJlYWRlciwgbXNjb3JsaWIsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5I1N5c3RlbS5SZXNvdXJjZXMuUnVudGlt
ZVJlc291cmNlU2V0AgAAAAAAAAAAAAAAUEFEUEFEULQAAAAeAigBAAAKKh4CKAQAAAoqpnMGAAAK
gAEAAARzBwAACoACAAAEcwgAAAqAAwAABHMJAAAKgAQAAAQqAAATMAEACwAAAAEAABF+AQAABG8K
AAAKKgATMAEACwAAAAIAABF+AgAABG8LAAAKKgATMAEACwAAAAMAABF+AwAABG8MAAAKKgATMAEA
CwAAAAQAABF+BAAABG8NAAAKKgATMAIADQAAAAUAABECAygRAAAKKBIAAAoqAAAAEzABAAcAAAAG
AAARAigTAAAKKgATMAEACwAAAAcAABHQBQAAAigUAAAKKgATMAEABwAAAAgAABECKBUAAAoqABMw
AQAQAAAACQAAEQKMAQAAGy0GKAEAACsqAioTMAIAEAAAAAoAABEDEgD+FQIAABsGgQIAABsqHgIo
FwAACioTMAIAKAAAAAsAABECexkAAApvGgAACgsHjAMAABstEigCAAArCwJ7GQAACgdvGwAACgcq
SgIoFwAACgJzHAAACn0ZAAAKKgAyAgMEBQ4EKB4AAAoqAAAAEzABAAcAAAAMAAARFo0dAAABKgAT
MAEABwAAAA0AABEWjR0AAAEqABMwAQAJAAAADgAAEQIoHwAACgoGKgAAABMwAQAJAAAADwAAEQIo
IAAACgoGKgAAADICAwQFDgQoHgAACioAAAATMAEABwAAABAAABEWjR0AAAEqABMwAQAHAAAAEQAA
ERaNHQAAASoAEzABAAkAAAASAAARAigfAAAKCgYqAAAAEzABAAkAAAATAAARAiggAAAKCgYqAAAA
MgIDBAUOBCgeAAAKKgAAABMwAQAHAAAAFAAAERaNHQAAASoAJgIWA28iAAAKKgAAYgMsCQIWbyMA
AAorC3IBAABwcyQAAAp6KgAAACYCFwNvIgAACioAAGIDLAkCF28jAAAKKwtyAQAAcHMkAAAKeioA
AAAmAhgDbyIAAAoqAABiAywJAhhvIwAACisLcgEAAHBzJAAACnoqAAAAJgIZA28iAAAKKgAAYgMs
CQIZbyMAAAorC3IBAABwcyQAAAp6KgAAACYCGgNvIgAACioAAGIDLAkCGm8jAAAKKwtyAQAAcHMk
AAAKeioAAAAmAhsDbyIAAAoqAABiAywJAhtvIwAACisLcgEAAHBzJAAACnoqAAAAJgIcA28iAAAK
KgAAYgMsCQIcbyMAAAorC3IBAABwcyQAAAp6KgAAACYCHQNvIgAACioAAGIDLAkCHW8jAAAKKwty
AQAAcHMkAAAKeioAAAATMAMASQAAABUAABEejR0AAAELBxZyngAAcKIHF3KyAABwogcYcsoAAHCi
Bxly3AAAcKIHGnIAAQBwogcbciABAHCiBxxyQAEAcKIHHXJiAQBwogcqAAAAHgIoJQAACioeAigm
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
AAAGCFkFxwAzAOAtAAAAAAEAgQkTADQAQC4AAAAAAQD0CRQBNAB0LgAAAAABABcKGwE2AMQuAAAA
AAEALAogATcA/C4AAAAAAQBPCicBOQDALwAAAAABAGUKLwE6AAgwAAAAAAEAeAq+ADsATDAAAAAA
AQCGCjQBOwCIMAAAAAABAJ0KOQE8AMwwAAAAAAEAwApBAT4ACDEAAAAABhjvARMAQAAQMQAAAAAD
GO8BEwBAABgxAAAAABYIlgzIAUAAVDEAAAAAFgiqDM0BQABoMQAAAAAWCLYM0gFAAHAxAAAAABEY
KgIXAEEAhDEAAAAABhjvARMAQQCMMQAAAAAWCAwN6QFBAAAAAQDrAgAAAQAkAwAAAQAkAwAAAQBc
BAAAAgBmBAAAAwBvBAAABAB3BAAAAQBcBAAAAgBmBAAAAwBvBAAABAB3BAAAAQBcBAAAAgBmBAAA
AwBvBAAABAB3BAAAAQD2BAAAAQD2BAAAAQD2BAAAAQD2BAAAAQD2BAAAAQD2BAAAAQD2BAAAAQD2
BAAAAQD2BAAAAQD2BAAAAQD2BAAAAQD2BAAAAQD2BAAAAQD2BAAAAQD2BAAAAQD2BAAAAQCgBwAA
AgB3BAAAAQDWBwAAAgDeBwAAAwDoBwAAAQB3BAAAAQAtCAAAAQB3BAAAAQAtCAAAAQBcBAAAAQBc
BAAAAQCACAAAAQCACAAAAQCACAAAAgC8CAAAAQDRCAAAAQDRCAAAAQDRCAAAAQDRCAAAAQDRCAAA
AQAFCgAAAgAMCgAAAQAkCgAAAQAFCgAAAgAMCgAAAQBfCgAAAQCACAAAAQCZCgAAAQCyCgAAAgC7
CgAAAQCyCgAAAgDTCgAAAQD2BAkA7wETAIkA7wHzAZkA7wECAhEA7wETAKEA7wETACQA7wETACwA
7wETADQA7wETADwA7wETACQAQQOLACwAQQOLADQAQQOLADwAQQOLAKkA7wETALEA7wETALkA7wHH
AMEAbA6bAhkA5AJjABkA7QJoACkAjQ6oAhkABgNxANEAqQ64AhkA7wETANkA7wHIAkQAigOQAEwA
DA2LAEwA0w5FA0wA7wETAOEA7wHMADkA7wGvAPEArQS+APEAtQS+APkA7wHMADkAOg9dAzkAQw8P
AQEB7wHHAPEARAYTAPEASwYTAFEA7wETAEEAfg9qAwkBqw9wAxEBvw92A2EAyA9oAEkAzw++AAkB
9w98AxkBvw+CA1kAyA9oABEBWRCNA2EAZxCTAyEBmxCZAzkBvBCfAzEByhClA1EA6BCpAykB+hBo
AEEBKBGvAzEBNRG+AFkBShETABEBUhG9AxEBVhFoAGEBBgPCA+kAbBHHA2EAcxHHAGEAfBHMAFEA
iAgPAREBjxEPAREBvBCfA2EAvRHdA2kB1xETAOkA4RFxAGEA7BFxAHkB7wHHAOkACxJJAUkAERIA
BIEBIhIFBEkAvw8MBGEBMBIRBAkBOhIWBOkAbBEbBOkAThIiBEkArQS+AFkAehI/BIkBVhFoAIkB
vw9FBJEB/RJMBIkBUhFhBJEBcxHHAEEAPRNtBKkBUxNzBKEBvw98BLEBDA2lA6EBchMTAEEBjhOL
BFkAoBNoAJEB+hBoALkBqxORBGkBVhFoAGkBvw+XBEkByA9oAGEAoBNoAEkB+hBoAEkB7BFxAEkB
wRNxAOkA2xNoAMEB6xPCBOkA7xPIBMkB7wETANEB7wHHANkB7wETAOEB7wHHAOkB7wHHAPEB7wEE
BtEB7wEPAfkB7wETACkA1xQwB3EA7wE2B4EA7wETAAkC/RRTBwkCAxVTBxEC7wETABkC7wEPASEC
7wETACkC7wHHADEC7wHHADkC7wHHAEEC7wHHAEkC7wHHAFEC7wHHAFkC7wHHAGEC7wHHAA4AVABV
AQ4AWAB4AQgAXACzASkAgwBpAi4A6wPCBy4AwwNdBy4A4wNSAy4A+wMfCC4AAwRSAy4ACwTiBy4A
8wPiBy4AywNmBy4A0wOFBy4A2wOSBy4A6wBSAy4ACwG8B0AAEwD5AUAAKwAgAkMAEwD5AUMAGwAI
AkkAgwCHAmMAEwD5AWMAGwAIAmkAgwB6AoAAKwAgAoMAcwAgAoMAGwAIAoMAewAgAokAgwBVAqAA
KwAgAqMAwwDQAqMAEwD5AcAAKwAgAsMAEwD5AcMA6wBSA+AAKwAgAuMACwFSAwABEwD5AQABKwAg
AgMBCwFSAyABKwAgAiABEwD5ASMBCwFSA0ABKwAgAkABEwD5AUMBCwFSA2ABKwAgAmABEwD5AYAB
KwAgAqABKwAgAqMBUwMgAqMBCwFSA8ABKwAgAsABEwD5AeABKwAgAgACKwAgAgACEwD5AYkDcwP3
BIkDYwMgAokDawPqBIkDWwPTBKkDcwN7BakDYwMgAqkDawPqBKkDWwNYBckDawPqBMkDgwOPBskD
cwOYBukDawMqBukDiwMgAukDcwPOBgkEcwNKBgkEawMqBgkEewMKBikEEwBKB0kEEwBKB2kEuwMg
AmAHCwFSA4AHCwFSA0ECRgJLAlACoAKkAq8CtALDAsMCSwNYA1gDoAKgAlgDWAOgAqACWANjA6AC
iAPNA+MD9AMnBLQCtAKkArQCtAJXBGcEgwSkAp4ErwS3BM4ErwSvBD4HRQdYBwQAAQAGAAUABwAG
AAgACAAJAAoADQAcABEAIQASACMAAAATAk8AAADMAlQAAAB7AlkAAADYAl4AAACUA5gAAADBBMIA
AADUBMIAAADBBMIAAADUBMIAAADBBMIAAABaBtEAAABkBtUAAAB1BtEAAACBBtUAAACUBtEAAACd
BtUAAACtBtEAAAC/BtUAAADYBtEAAADoBtUAAAD/BtEAAAAPB9UAAAAmB9EAAAA3B9UAAABPB9EA
AABcB9UAAADUBMIAAABaBtEAAAB1BtEAAACEC1EBAACkC9EAAACtBtEAAABRDNgBAADCDN0BAAD2
BO4BAgAEAAMAAgAFAAUAAgAGAAcAAgAHAAkAAgAPAAsAAgASAA0AAgATAA8AAgAXABEAAgAYABMA
AgAcABUAAQAdABcAAQAeABkAAQAfABsAAQAgAB0AAQAhAB8AAQAiACEAAQAjACMAAQAkACUAAQAl
ACcAAQAmACkAAQAnACsAAQAoAC0AAQApAC8AAQAqADEAAQArADMAAQAsADUAAgAtADcAAgBDADkA
AQBEADkAAQBGADsAAgBFADsAAQBIAD0AAgBHAD0AAgBJAD8AAQBKAD8AAgBLAEEAAQBMAEEAAgBZ
AEMAAgBaAEUAAQBbAEUAAgBeAEcAdQB1AIgAJQIsAjMCOgIyAzkDBIAAAAEAAAAAAAAAAAAAAAAA
vAAAAAIAAAAAAAAAAAAAAAEACgAAAAAACAAAAAAAAAAAAAAACgATAAAAAAABAAAAAAAAAAAAAACd
AKADAAAAAAoAAAAAAAAAAAAAAKYA3gMAAAAACgAAAAAAAAAAAAAApgAsBAAAAAAKAAAAAAAAAAAA
AACmAJkJAAAAAAIAAAAAAAAAAAAAAAEAHAIAAAAACgAAAAAAAAAAAAAApgCpEgAAAAAAAAAAAQAA
ACUVAAAFAAQABgAEAA4ADQAPAA0AEAANAAAAEAAMACIDAAAQABkAIgMAAAAAGwAiAy0AvgItAEAD
AAAAAAA8TW9kdWxlPgBtc2NvcmxpYgBNaWNyb3NvZnQuVmlzdWFsQmFzaWMATXlBcHBsaWNhdGlv
bgBTY3JpcHRDb21wb25lbnRfM2UzNmRjMDM3MTBlNGFiN2E3ZTY4NWU2MmM2NzdkNjUudmJwcm9q
Lk15AE15Q29tcHV0ZXIATXlQcm9qZWN0AE15V2ViU2VydmljZXMAVGhyZWFkU2FmZU9iamVjdFBy
b3ZpZGVyYDEASW5wdXRCdWZmZXIAU2NyaXB0Q29tcG9uZW50XzNlMzZkYzAzNzEwZTRhYjdhN2U2
ODVlNjJjNjc3ZDY1LnZicHJvagBJbnB1dDFCdWZmZXIAT3V0cHV0QnVmZmVyAFVzZXJDb21wb25l
bnQAQ29ubmVjdGlvbnMAVmFyaWFibGVzAFNjcmlwdE1haW4AQ29uc3RzAENvbHVtbkluZm8ASW5w
dXRJbmZvAE15UmVzb3VyY2VzAFNjcmlwdENvbXBvbmVudF8zZTM2ZGMwMzcxMGU0YWI3YTdlNjg1
ZTYyYzY3N2Q2NS52YnByb2ouTXkuUmVzb3VyY2VzAE15U2V0dGluZ3MATWljcm9zb2Z0LlZpc3Vh
bEJhc2ljLkFwcGxpY2F0aW9uU2VydmljZXMAQXBwbGljYXRpb25CYXNlAC5jdG9yAE1pY3Jvc29m
dC5WaXN1YWxCYXNpYy5EZXZpY2VzAENvbXB1dGVyAFN5c3RlbQBPYmplY3QALmNjdG9yAGdldF9D
b21wdXRlcgBtX0NvbXB1dGVyT2JqZWN0UHJvdmlkZXIAZ2V0X0FwcGxpY2F0aW9uAG1fQXBwT2Jq
ZWN0UHJvdmlkZXIAVXNlcgBnZXRfVXNlcgBtX1VzZXJPYmplY3RQcm92aWRlcgBnZXRfV2ViU2Vy
dmljZXMAbV9NeVdlYlNlcnZpY2VzT2JqZWN0UHJvdmlkZXIAQXBwbGljYXRpb24AV2ViU2Vydmlj
ZXMARXF1YWxzAG8AR2V0SGFzaENvZGUAVHlwZQBHZXRUeXBlAFRvU3RyaW5nAENyZWF0ZV9fSW5z
dGFuY2VfXwBUAGluc3RhbmNlAERpc3Bvc2VfX0luc3RhbmNlX18AZ2V0X0dldEluc3RhbmNlAE1p
Y3Jvc29mdC5WaXN1YWxCYXNpYy5NeVNlcnZpY2VzLkludGVybmFsAENvbnRleHRWYWx1ZWAxAG1f
Q29udGV4dABHZXRJbnN0YW5jZQBDb3p5Um9jLlNTSVNQbHVzLjIwMDgAQ296eVJvYy5TcWxTZXJ2
ZXIuU1NJUwBTY3JpcHRCdWZmZXJQbHVzAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuVHhTY3JpcHQATWlj
cm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxpbmUAU2NyaXB0Q29tcG9uZW50AE1pY3Jvc29mdC5T
cWxTZXJ2ZXIuUGlwZWxpbmVIb3N0AFBpcGVsaW5lQnVmZmVyAENvbXBvbmVudABPYmplY3RJRABJ
c0lucHV0AEJ1ZmZlcgBnZXRfU3RhdGljSW5wdXRDb2x1bW5zAGdldF9TdGF0aWNPdXRwdXRDb2x1
bW5zAE5leHRSb3cARW5kT2ZSb3dzZXQAU3RhdGljSW5wdXRDb2x1bW5zAFN0YXRpY091dHB1dENv
bHVtbnMAc2V0X1BhY2thZ2VJZABWYWx1ZQBzZXRfUGFja2FnZUlkX0lzTnVsbABzZXRfRXhlY3V0
aW9uSWQAc2V0X0V4ZWN1dGlvbklkX0lzTnVsbABzZXRfU3RlcE5hbWUAc2V0X1N0ZXBOYW1lX0lz
TnVsbABzZXRfUm93SWRlbnRpZmllck5hbWUAc2V0X1Jvd0lkZW50aWZpZXJOYW1lX0lzTnVsbABz
ZXRfUm93SWRlbnRpZmllcklkAHNldF9Sb3dJZGVudGlmaWVySWRfSXNOdWxsAHNldF9FcnJvckNv
bHVtbk5hbWUAc2V0X0Vycm9yQ29sdW1uTmFtZV9Jc051bGwAc2V0X0Vycm9yQ29sdW1uVmFsdWUA
c2V0X0Vycm9yQ29sdW1uVmFsdWVfSXNOdWxsAHNldF9FcnJvck1lc3NhZ2UAc2V0X0Vycm9yTWVz
c2FnZV9Jc051bGwAQWRkUm93AFNldEVuZE9mUm93c2V0AFBhY2thZ2VJZABQYWNrYWdlSWRfSXNO
dWxsAEV4ZWN1dGlvbklkAEV4ZWN1dGlvbklkX0lzTnVsbABTdGVwTmFtZQBTdGVwTmFtZV9Jc051
bGwAUm93SWRlbnRpZmllck5hbWUAUm93SWRlbnRpZmllck5hbWVfSXNOdWxsAFJvd0lkZW50aWZp
ZXJJZABSb3dJZGVudGlmaWVySWRfSXNOdWxsAEVycm9yQ29sdW1uTmFtZQBFcnJvckNvbHVtbk5h
bWVfSXNOdWxsAEVycm9yQ29sdW1uVmFsdWUARXJyb3JDb2x1bW5WYWx1ZV9Jc051bGwARXJyb3JN
ZXNzYWdlAEVycm9yTWVzc2FnZV9Jc051bGwAU2NyaXB0Q29tcG9uZW50UGx1cwBJbnB1dHNGaW5p
c2hlZABQcm9jZXNzSW5wdXQASW5wdXRJRABGaW5pc2hPdXRwdXRzAE1hcmtPdXRwdXRzRmluaXNo
ZWQAUHJpbWVPdXRwdXQAT3V0cHV0cwBPdXRwdXRJRHMAQnVmZmVycwBDcmVhdGVOZXdPdXRwdXRS
b3dzAElucHV0X1Byb2Nlc3NJbnB1dABJbnB1dF9Qcm9jZXNzSW5wdXRSb3cAUm93AElucHV0MV9Q
cm9jZXNzSW5wdXQASW5wdXQxX1Byb2Nlc3NJbnB1dFJvdwBQYXJlbnRDb21wb25lbnQAT25JbnB1
dFBhdGhBdHRhY2hlZABpbnB1dElEAE9uSW5wdXRQYXRoRGV0YWNoZWQAUmVpbml0aWFsaXplTWV0
YURhdGEAUHJlRXhlY3V0ZQBidWZmZXIAZ2V0X1BhY2thZ2VJZAB2YWx1ZQBnZXRfRXhlY3V0aW9u
SWQAZ2V0X1N0YW5kYXJkRGVzdGluYXRpb25Db2x1bW5MZW5ndGgAc2V0X1N0YW5kYXJkRGVzdGlu
YXRpb25Db2x1bW5MZW5ndGgAZ2V0X0lucHV0Rm9yUm93SWRlbnRpZmllck5hbWUAc2V0X0lucHV0
Rm9yUm93SWRlbnRpZmllck5hbWUAZ2V0X1Jvd0lkZW50aWZpZXJOYW1lAFJlc2V0T3V0cHV0Q29s
dW1uVHlwZXNfAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRFRTUGlwZWxpbmVXcmFwAE1pY3Jvc29mdC5T
cWxTZXJ2ZXIuRHRzLlBpcGVsaW5lLldyYXBwZXIASURUU091dHB1dDEwMABBZGRTdHJpbmdDb2x1
bW5fAG91dHB1dABjb2x1bW5OYW1lAEdldFZhcmlhYmxlXwB2YXJOYW1lAEdldE91dHB1dENvbHVt
bkluZGV4XwBJRFRTSW5wdXQxMDAAR2V0Q29sdW1uSW5mb3NfAGlucHV0AEdldElucHV0SW5mb0lu
ZGV4XwBJc0VuZFJlYWNoZWRfAEdldFBpcGVsaW5lU3RyaW5nXwBzdHIAR2V0Q29sdW1uSW5mb0J5
TmFtZV8AY29sc0luZm8AbmFtZQBHZXRDb2x1bW5JbmZvQnlJZF8AaWQAbV9wYWNrYWdlSWRWYXJp
YWJsZQBtX2V4ZWN1dGlvbklkVmFyaWFibGUAbV9zdGFuZGFyZERlc3RpbmF0aW9uQ29sdW1uTGVu
Z3RoAG1faW5wdXRGb3JSb3dJZGVudGlmaWVyTmFtZQBtX3Jvd0lkZW50aWZpZXJOYW1lAG1fZXhl
Y3V0aW9uSWQAbV9wYWNrYWdlSWQAbV9zdGVwTmFtZQBtX2lucHV0SW5mb3MAU3RhbmRhcmREZXN0
aW5hdGlvbkNvbHVtbkxlbmd0aABJbnB1dEZvclJvd0lkZW50aWZpZXJOYW1lAFBhY2thZ2VJZF9E
ZWZhdWx0AEV4ZWN1dGlvbklkX0RlZmF1bHQAU3RhbmRhcmREZXN0aW5hdGlvbkNvbHVtbkxlbmd0
aF9EZWZhdWx0AFZhbHVlVHlwZQBCdWZmZXJJbmRleABOYW1lAElkAExpbmVhZ2VJZABDb2x1bW5J
bmZvcwBTeXN0ZW0uUmVzb3VyY2VzAFJlc291cmNlTWFuYWdlcgBfcmVzTWdyAFN5c3RlbS5HbG9i
YWxpemF0aW9uAEN1bHR1cmVJbmZvAF9yZXNDdWx0dXJlAGdldF9SZXNvdXJjZU1hbmFnZXIAZ2V0
X0N1bHR1cmUAc2V0X0N1bHR1cmUAQ3VsdHVyZQBTeXN0ZW0uQ29uZmlndXJhdGlvbgBBcHBsaWNh
dGlvblNldHRpbmdzQmFzZQBtX1ZhbHVlAG1fU3luY09iamVjdABnZXRfVmFsdWUAU3lzdGVtLkNv
bXBvbmVudE1vZGVsAEVkaXRvckJyb3dzYWJsZUF0dHJpYnV0ZQBFZGl0b3JCcm93c2FibGVTdGF0
ZQBTeXN0ZW0uQ29kZURvbS5Db21waWxlcgBHZW5lcmF0ZWRDb2RlQXR0cmlidXRlAFN5c3RlbS5E
aWFnbm9zdGljcwBEZWJ1Z2dlckhpZGRlbkF0dHJpYnV0ZQBNaWNyb3NvZnQuVmlzdWFsQmFzaWMu
Q29tcGlsZXJTZXJ2aWNlcwBTdGFuZGFyZE1vZHVsZUF0dHJpYnV0ZQBIaWRlTW9kdWxlTmFtZUF0
dHJpYnV0ZQBTeXN0ZW0uQ29tcG9uZW50TW9kZWwuRGVzaWduAEhlbHBLZXl3b3JkQXR0cmlidXRl
AFN5c3RlbS5SdW50aW1lLkNvbXBpbGVyU2VydmljZXMAUnVudGltZUhlbHBlcnMAR2V0T2JqZWN0
VmFsdWUAUnVudGltZVR5cGVIYW5kbGUAR2V0VHlwZUZyb21IYW5kbGUAQWN0aXZhdG9yAENyZWF0
ZUluc3RhbmNlAE15R3JvdXBDb2xsZWN0aW9uQXR0cmlidXRlAHNldF9WYWx1ZQBTeXN0ZW0uUnVu
dGltZS5JbnRlcm9wU2VydmljZXMAQ29tVmlzaWJsZUF0dHJpYnV0ZQBTdHJpbmcAU2NyaXB0QnVm
ZmVyAENMU0NvbXBsaWFudEF0dHJpYnV0ZQBzZXRfSXRlbQBTZXROdWxsAEludmFsaWRPcGVyYXRp
b25FeGNlcHRpb24ASURUU0NvbXBvbmVudE1ldGFEYXRhMTAwAGdldF9Db21wb25lbnRNZXRhRGF0
YQBJRFRTSW5wdXRDb2xsZWN0aW9uMTAwAGdldF9JbnB1dENvbGxlY3Rpb24AZ2V0X0l0ZW0AZ2V0
X0lEAGdldF9FbmRPZlJvd3NldABJRFRTT3V0cHV0Q29sbGVjdGlvbjEwMABnZXRfT3V0cHV0Q29s
bGVjdGlvbgBJRFRTVmlydHVhbElucHV0MTAwAElEVFNWaXJ0dWFsSW5wdXRDb2x1bW4xMDAAU3lz
dGVtLkNvbGxlY3Rpb25zAElFbnVtZXJhdG9yAEdldE9iamVjdEJ5SUQAR2V0VmlydHVhbElucHV0
AElEVFNWaXJ0dWFsSW5wdXRDb2x1bW5Db2xsZWN0aW9uMTAwAGdldF9WaXJ0dWFsSW5wdXRDb2x1
bW5Db2xsZWN0aW9uAEdldEVudW1lcmF0b3IAZ2V0X0N1cnJlbnQAUGlwZWxpbmVDb21wb25lbnQA
Z2V0X0hvc3RDb21wb25lbnQAZ2V0X0xpbmVhZ2VJRABJRFRTSW5wdXRDb2x1bW4xMDAARFRTVXNh
Z2VUeXBlAFNldFVzYWdlVHlwZQBNb3ZlTmV4dABJRGlzcG9zYWJsZQBEaXNwb3NlAE5ldwBnZXRf
Q291bnQAQ29udmVyc2lvbnMAQ29uY2F0AHNldF9OYW1lAHNldF9IYXNTaWRlRWZmZWN0cwBSZW1v
dmVPYmplY3RCeUlEAElEVFNJbnB1dENvbHVtbkNvbGxlY3Rpb24xMDAAZ2V0X0lucHV0Q29sdW1u
Q29sbGVjdGlvbgBSZW1vdmVBbGwAVHJpbQBJbnQzMgBnZXRfTmFtZQBBcmd1bWVudE51bGxFeGNl
cHRpb24ARW1wdHkASXNOdWxsAE9wZXJhdG9ycwBDb21wYXJlU3RyaW5nAFRvSW50ZWdlcgBHZXRF
cnJvckRlc2NyaXB0aW9uAElzTnVsbE9yRW1wdHkASURUU091dHB1dENvbHVtbkNvbGxlY3Rpb24x
MDAAZ2V0X091dHB1dENvbHVtbkNvbGxlY3Rpb24ASURUU091dHB1dENvbHVtbjEwMABNaWNyb3Nv
ZnQuU3FsU2VydmVyLkRUU1J1bnRpbWVXcmFwAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlJ1bnRp
bWUuV3JhcHBlcgBEYXRhVHlwZQBTZXREYXRhVHlwZVByb3BlcnRpZXMASURUU1ZhcmlhYmxlczEw
MABJRFRTVmFyaWFibGVEaXNwZW5zZXIxMDAAZ2V0X1ZhcmlhYmxlRGlzcGVuc2VyAExvY2tPbmVG
b3JSZWFkAElEVFNWYXJpYWJsZTEwMABVbmxvY2sASURUU0J1ZmZlck1hbmFnZXIxMDAAZ2V0X0J1
ZmZlck1hbmFnZXIAZ2V0X0J1ZmZlcgBGaW5kQ29sdW1uQnlMaW5lYWdlSUQAZ2V0X1Vwc3RyZWFt
Q29tcG9uZW50TmFtZQBnZXRfTGVuZ3RoAE1hdGgATWluAFN1YnN0cmluZwBTU0lTU2NyaXB0Q29t
cG9uZW50RW50cnlQb2ludEF0dHJpYnV0ZQBEZWZhdWx0VmFsdWVBdHRyaWJ1dGUAQ296eVJvYy5T
cWxTZXJ2ZXIuU1NJUy5BdHRyaWJ1dGVzAFZhcmlhYmxlQXR0cmlidXRlAENhdGVnb3J5QXR0cmli
dXRlAERlc2NyaXB0aW9uQXR0cmlidXRlAElucHV0VmlydHVhbENvbHVtbkF0dHJpYnV0ZQBJbnB1
dEF0dHJpYnV0ZQBTeXN0ZW0uUmVmbGVjdGlvbgBBc3NlbWJseQBnZXRfQXNzZW1ibHkAU3lzdGVt
LlRocmVhZGluZwBNb25pdG9yAEVudGVyAEV4aXQARGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0
ZQBTY3JpcHRDb21wb25lbnRfM2UzNmRjMDM3MTBlNGFiN2E3ZTY4NWU2MmM2NzdkNjUudmJwcm9q
LlJlc291cmNlcy5yZXNvdXJjZXMAQ29tcGlsYXRpb25SZWxheGF0aW9uc0F0dHJpYnV0ZQBSdW50
aW1lQ29tcGF0aWJpbGl0eUF0dHJpYnV0ZQBBc3NlbWJseUZpbGVWZXJzaW9uQXR0cmlidXRlAEd1
aWRBdHRyaWJ1dGUAQXNzZW1ibHlUcmFkZW1hcmtBdHRyaWJ1dGUAQXNzZW1ibHlDb3B5cmlnaHRB
dHRyaWJ1dGUAQXNzZW1ibHlQcm9kdWN0QXR0cmlidXRlAEFzc2VtYmx5Q29tcGFueUF0dHJpYnV0
ZQBBc3NlbWJseURlc2NyaXB0aW9uQXR0cmlidXRlAEFzc2VtYmx5VGl0bGVBdHRyaWJ1dGUAU2Ny
aXB0Q29tcG9uZW50XzNlMzZkYzAzNzEwZTRhYjdhN2U2ODVlNjJjNjc3ZDY1LnZicHJvai5kbGwA
AAAAgJtJAHMATgB1AGwAbAAgAHAAcgBvAHAAZQByAHQAeQAgAGMAYQBuAG4AbwB0ACAAYgBlACAA
cwBlAHQAIAB0AG8AIABGAGEAbABzAGUALgAgAEEAcwBzAGkAZwBuACAAYQAgAHYAYQBsAHUAZQAg
AHQAbwAgAHQAaABlACAAYwBvAGwAdQBtAG4AIABpAG4AcwB0AGUAYQBkAC4AABNQAGEAYwBrAGEA
ZwBlAEkAZAAAF0UAeABlAGMAdQB0AGkAbwBuAEkAZAAAEVMAdABlAHAATgBhAG0AZQAAI1IAbwB3
AEkAZABlAG4AdABpAGYAaQBlAHIATgBhAG0AZQAAH1IAbwB3AEkAZABlAG4AdABpAGYAaQBlAHIA
SQBkAAAfRQByAHIAbwByAEMAbwBsAHUAbQBuAE4AYQBtAGUAACFFAHIAcgBvAHIAQwBvAGwAdQBt
AG4AVgBhAGwAdQBlAAAZRQByAHIAbwByAE0AZQBzAHMAYQBnAGUAAAtJAG4AcAB1AHQAAA9JAG4A
cAB1AHQAIAAxAAANTwB1AHQAcAB1AHQAAA1JAG4AcAB1AHQAIAAAIVMAeQBzAHQAZQBtADoAOgBU
AGEAcwBrAE4AYQBtAGUAAA1iAHUAZgBmAGUAcgAAD1UAbgBrAG4AbwB3AG4AAAEAE0UAcgByAG8A
cgBDAG8AZABlAAAHIAAtACAAARdFAHIAcgBvAHIAQwBvAGwAdQBtAG4AAA9NAGEAeQBiAGUAOgAg
AAALSQBkACAAPQAgAAAxTQB5AC4AUgBlAHMAbwB1AHIAYwBlAHMALgBNAHkAUgBlAHMAbwB1AHIA
YwBlAHMAAHmpZfOkXkJAt+PKaMQzkKAACLd6XFYZNOCJCLA/X38R1Qo6AyAAAQMAAAEEAAASDAcG
FRIYARIMBAAAEggHBhUSGAESCAQAABIRBwYVEhgBEhEEAAASFAcGFRIYARIUBAgAEgwECAASCAQI
ABIRBAgAEhQEIAECHAMgAAgEIAASFQMgAA4CHgAHEAEBHgAeAAcwAQEBEB4AAhMABCAAEwAHBhUS
GQETAAQoABMACBbPSQu4DDTqCImEXc2AgMyRCSAEARIhCAISJQQgAB0OAyAAAgQoAB0OBCABAQ4E
IAEBAgMoAA4DKAACAwYSLAMGEjADBhIkAgYIBiACAQgSJQkgAwEIHQgdEiUFIAEBEhwFIAEBEiAD
BhIhBSABARIhBCABAQgGIAIBEi0OBCABHA4GIAIIEi0OByABHRE8EjEEIAEICAQgAQ4OByACCB0R
PA4HIAIIHRE8CAIGDgQGHRFAAygACCJTAHkAcwB0AGUAbQA6ADoAUABhAGMAawBhAGcAZQBJAEQA
OlMAeQBzAHQAZQBtADoAOgBFAHgAZQBjAHUAdABpAG8AbgBJAG4AcwB0AGEAbgBjAGUARwBVAEkA
RAAE+gAAAAQGHRE8AgYCAwYSOQMGEj0EAAASOQQAABI9BQABARI9BAgAEjkECAASPQMGEkgCBhwE
AAASSAQIABJIBSABARFJCAEAAQAAAAAABSACAQ4OFwEACk15VGVtcGxhdGUHOC4wLjAuMAAABAEA
AAAGFRIYARIMBhUSGAESCAYVEhgBEhEGFRIYARIUBAcBEgwEBwESCAQHARIRBAcBEhQTAQAOTXku
V2ViU2VydmljZXMAABABAAtNeS5Db21wdXRlcgAADAEAB015LlVzZXIAABMBAA5NeS5BcHBsaWNh
dGlvbgAABAABHBwDBwECAwcBCAYAARIVEWUEBwESFQMHAQ4FEAEAHgAECgEeAAQHAR4AByAEAQ4O
Dg5hAQA0U3lzdGVtLldlYi5TZXJ2aWNlcy5Qcm90b2NvbHMuU29hcEh0dHBDbGllbnRQcm90b2Nv
bBJDcmVhdGVfX0luc3RhbmNlX18TRGlzcG9zZV9fSW5zdGFuY2VfXwAAAAYVEhgBEwAGFRIZARMA
BAoBEwAFIAEBEwAGBwITABMABQEAAAAABAcBHQ4FIAIBCBwGBwIdDh0OBSAAEoCFBSAAEoCJBSAB
EjEcBSAAEoCNBSABEi0cBAcCCAgFIAESMQgFIAASgJEFIAASgJ0FIAASgJkDIAAcBSAAEoChDSAE
EoClCBKAkQgRgKkEIAASMQQAAQ4IBQACDg4ODwcFEjESMRKAkRKAlRKAmQUgABKAtRAHBRKAkRIx
EoCVEoCZEoCZCwcGEoCJCBIxCAgIBCABAggGAAMIDg4CBCABHAgEAAEIHAQgAQ4IBgADDg4ODgQA
AQIOFwcSCAgICA4ODg4IDg4RPBE8ETwIDggIBSAAEoDFBiABEoDJHAogBQERgM0ICAgICQcEEi0S
gMUICAUgABKAyQUHARKAyQUgABKA1QggAgEOEBKA0QYgARKA2RwHBwMcHBKA0QUgABKA3QUgAggI
CAYgARKApRwQBwcIHRE8HRE8CBE8EoClCAcHBQgICAgICgcFAgIRQAgdEUAFAAIICAgFIAIOCAgE
BwIODhYBABFTeXN0ZW06OlBhY2thZ2VJRAAADAEAB0dlbmVyYWwAAGABAFtTZWxlY3QgdmFyaWFi
bGUgdGhhdCBjb250YWlucyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhpcyBwYWNrYWdlLkYu
ZS4gU3lzdGVtOjpQYWNrYWdlSUQuAAAiAQAdU3lzdGVtOjpFeGVjdXRpb25JbnN0YW5jZUdVSUQA
AICHAQCAgVNlbGVjdCB2YXJpYWJsZSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlxdWUgaWRlbnRpZmll
ciBvZiB0aGlzIGV4ZWN1dGlvbi9pbnN0YW5jZSBvZiB0aGUgcGFja2FnZS5GLmUuIFN5c3RlbTo6
RXhlY3V0aW9uSW5zdGFuY2VHVUlELgAABSACAQ4CHwEAGUlucHV0Rm9yUm93SWRlbnRpZmllck5h
bWUBAAAfAQAaU3BlY2lmaWMgZm9yIHRoaXMgZGF0YWZsb3cAAEQBAD9TZWxlY3QgdGhlIGNvbHVt
biB0aGF0IHVuaXF1ZWx5IGRlZmluZXMgZXZlcnkgcm93IGluIHRoaXMgZmxvdy4AAAgBAPoAAAAA
ADUBADBTZWxlY3QgdGhlIGxlbmd0aCBvZiB0aGUgTlZhcmNoYXIgb3V0cHV0IGNvbHVtbnMAAGEB
AFxTZWxlY3QgdGhlIGlucHV0IGZsb3cgdGhhdCBjb250YWlucyB0aGUgY29sdW1uIHRoYXQgdW5p
cXVlbHkgZGVmaW5lcyBldmVyeSByb3cgaW4gdGhpcyBmbG93LgAABSAAEoEBByACAQ4SgQEGBwIS
ORI5BAcBEj0IAQACAAAAAAAEAAEBHAQHARJICAEACAAAAAAAHgEAAQBUAhZXcmFwTm9uRXhjZXB0
aW9uVGhyb3dzAQwBAAcxLjAuMC4wAAApAQAkNjdjZjQ5NzItMDBiYi00ZTEzLTk4ZDItMWNjNzA4
ZTMzN2QxAAAFAQABAAAfAQAaQ29weXJpZ2h0IEAgTWljcm9zb2Z0IDIwMTUAADwBADdTY3JpcHRD
b21wb25lbnRfM2UzNmRjMDM3MTBlNGFiN2E3ZTY4NWU2MmM2NzdkNjUudmJwcm9qAAAOAQAJTWlj
cm9zb2Z0AAAAAMhmAAAAAAAAAAAAAN5mAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQZgAAAAAA
AAAAX0NvckRsbE1haW4AbXNjb3JlZS5kbGwAAAAAAP8lACBAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAwAAACgAAIAOAAAASAAAgBAAAABg
AACAAAAAAAAAAAAAAAAAAAACAAIAAAB4AACAAwAAAJAAAIAAAAAAAAAAAAAAAAAAAAEAAH8AAKgA
AIAAAAAAAAAAAAAAAAAAAAEAAQAAAMAAAIAAAAAAAAAAAAAAAAAAAAEAAAAAANgAAAAAAAAAAAAA
AAAAAAAAAAEAAAAAAOgAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAEA
AAAAAAgBAACAhQAA6AIAAAAAAAAAAAAAaIgAACgBAAAAAAAAAAAAAJCJAAAiAAAAAAAAAAAAAAAY
gQAAaAQAAAAAAAAAAAAAaAQ0AAAAVgBTAF8AVgBFAFIAUwBJAE8ATgBfAEkATgBGAE8AAAAAAL0E
7/4AAAEAAAABAAAAAAAAAAEAAAAAAD8AAAAAAAAABAAAAAIAAAAAAAAAAAAAAAAAAABEAAAAAQBW
AGEAcgBGAGkAbABlAEkAbgBmAG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEAdABpAG8AbgAAAAAA
AACwBMgDAAABAFMAdAByAGkAbgBnAEYAaQBsAGUASQBuAGYAbwAAAKQDAAABADAAMAAwADAAMAA0
AGIAMAAAADQACgABAEMAbwBtAHAAYQBuAHkATgBhAG0AZQAAAAAATQBpAGMAcgBvAHMAbwBmAHQA
AACYADgAAQBGAGkAbABlAEQAZQBzAGMAcgBpAHAAdABpAG8AbgAAAAAAUwBjAHIAaQBwAHQAQwBv
AG0AcABvAG4AZQBuAHQAXwAzAGUAMwA2AGQAYwAwADMANwAxADAAZQA0AGEAYgA3AGEANwBlADYA
OAA1AGUANgAyAGMANgA3ADcAZAA2ADUALgB2AGIAcAByAG8AagAAADAACAABAEYAaQBsAGUAVgBl
AHIAcwBpAG8AbgAAAAAAMQAuADAALgAwAC4AMAAAAJgAPAABAEkAbgB0AGUAcgBuAGEAbABOAGEA
bQBlAAAAUwBjAHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwAzAGUAMwA2AGQAYwAwADMANwAx
ADAAZQA0AGEAYgA3AGEANwBlADYAOAA1AGUANgAyAGMANgA3ADcAZAA2ADUALgB2AGIAcAByAG8A
agAuAGQAbABsAAAAXAAbAAEATABlAGcAYQBsAEMAbwBwAHkAcgBpAGcAaAB0AAAAQwBvAHAAeQBy
AGkAZwBoAHQAIABAACAATQBpAGMAcgBvAHMAbwBmAHQAIAAyADAAMQA1AAAAAACgADwAAQBPAHIA
aQBnAGkAbgBhAGwARgBpAGwAZQBuAGEAbQBlAAAAUwBjAHIAaQBwAHQAQwBvAG0AcABvAG4AZQBu
AHQAXwAzAGUAMwA2AGQAYwAwADMANwAxADAAZQA0AGEAYgA3AGEANwBlADYAOAA1AGUANgAyAGMA
NgA3ADcAZAA2ADUALgB2AGIAcAByAG8AagAuAGQAbABsAAAAkAA4AAEAUAByAG8AZAB1AGMAdABO
AGEAbQBlAAAAAABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfADMAZQAzADYAZABjADAA
MwA3ADEAMABlADQAYQBiADcAYQA3AGUANgA4ADUAZQA2ADIAYwA2ADcANwBkADYANQAuAHYAYgBw
AHIAbwBqAAAANAAIAAEAUAByAG8AZAB1AGMAdABWAGUAcgBzAGkAbwBuAAAAMQAuADAALgAwAC4A
MAAAADgACAABAEEAcwBzAGUAbQBiAGwAeQAgAFYAZQByAHMAaQBvAG4AAAAxAC4AMAAuADAALgAw
AAAAKAAAACAAAABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACA
gACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AHd3d3d3d3d3d3d3d3d3cARERERERERERERERERERHAE//////////////////RwBP//////////
///////0cAT/////////////////9HAE//////////////////RwBP/////////////////0cAT/
////////////////9HAE//////////////////RwBP/////////////////0cAT/////////////
////9HAE//////////////////RwBP/////////////////0cAT/////////////////9HAE////
//////////////RwBP/////////////////0cAT/////////////////9HAE////////////////
//RwBP/////////////////0cAT/////////////////9HAEiIiIiIiIiIiIiIiIiIRwBERERERE
REREREREREREcARMTExMTExMTExOzs5JdHAEzMzMzMzMzMzMzMzMzMQAAERERERERERERERERERA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////
///////////AAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGA
AAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAPAAAAH////////
////////KAAAABAAAAAgAAAAAQAEAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAA
AACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAA
AAAAAAd3d3d3d3d3REREREREREdP///////4R0////////hHT///////+EdP///////4R0//////
//hHT///////+EdP///////4R0////////hHSIiIiIiIiEdMzMzMzMzMR8RERERERETAAAAAAAAA
AAAAAAAAAAAAAP//AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAQAA//8AAP//AAAAAAEAAgAgIBAAAQAEAOgCAAACABAQEAABAAQAKAEAAAMAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAGAAAAwAAADwNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA=]]></arrayElement></arrayElements></property>
<property id="109" name="UserComponentTypeName" dataType="System.String" state="default" isArray="false" description="" typeConverter="" UITypeEditor="" containsID="false" expressionType="None">CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus.2008, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea</property>
<property id="1593" name="VSTAProjectName" dataType="System.String" state="default" isArray="false" description="Specifies the name of the Microsoft Visual Studio Tools for Applications project. Project names must be unique within a package." typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None">ScriptComponent_3e36dc03710e4ab7a7e685e62c677d65</property>
<property id="1594" name="ScriptLanguage" dataType="System.String" state="default" isArray="false" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" UITypeEditor="" containsID="false" expressionType="None">VisualBasic</property></properties>
<inputs>
<input id="1113" name="Input" description="" hasSideEffects="true" dangling="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="False" /></input>
<input id="1509" name="Input 1" description="" hasSideEffects="true" dangling="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="False" /></input>
</inputs>
<outputs>
<output id="124" name="Output" description="" exclusionGroup="0" synchronousInputId="0" deleteOutputOnPathDetached="false" hasSideEffects="true" dangling="false" isErrorOut="false" isSorted="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><outputColumns>
<outputColumn id="125" name="PackageId" description="" lineageId="125" precision="0" scale="0" length="255" dataType="wstr" codePage="0" sortKeyPosition="0" comparisonFlags="0" specialFlags="0" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed" externalMetadataColumnId="0" mappedColumnId="0" />
<outputColumn id="126" name="ExecutionId" description="" lineageId="126" precision="0" scale="0" length="255" dataType="wstr" codePage="0" sortKeyPosition="0" comparisonFlags="0" specialFlags="0" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed" externalMetadataColumnId="0" mappedColumnId="0" />
<outputColumn id="127" name="StepName" description="" lineageId="127" precision="0" scale="0" length="255" dataType="wstr" codePage="0" sortKeyPosition="0" comparisonFlags="0" specialFlags="0" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed" externalMetadataColumnId="0" mappedColumnId="0" />
<outputColumn id="128" name="RowIdentifierName" description="" lineageId="128" precision="0" scale="0" length="255" dataType="wstr" codePage="0" sortKeyPosition="0" comparisonFlags="0" specialFlags="0" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed" externalMetadataColumnId="0" mappedColumnId="0" />
<outputColumn id="129" name="RowIdentifierId" description="" lineageId="129" precision="0" scale="0" length="255" dataType="wstr" codePage="0" sortKeyPosition="0" comparisonFlags="0" specialFlags="0" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed" externalMetadataColumnId="0" mappedColumnId="0" />
<outputColumn id="130" name="ErrorColumnName" description="" lineageId="130" precision="0" scale="0" length="255" dataType="wstr" codePage="0" sortKeyPosition="0" comparisonFlags="0" specialFlags="0" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed" externalMetadataColumnId="0" mappedColumnId="0" />
<outputColumn id="131" name="ErrorColumnValue" description="" lineageId="131" precision="0" scale="0" length="255" dataType="wstr" codePage="0" sortKeyPosition="0" comparisonFlags="0" specialFlags="0" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed" externalMetadataColumnId="0" mappedColumnId="0" />
<outputColumn id="132" name="ErrorMessage" description="" lineageId="132" precision="0" scale="0" length="255" dataType="wstr" codePage="0" sortKeyPosition="0" comparisonFlags="0" specialFlags="0" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed" externalMetadataColumnId="0" mappedColumnId="0" /></outputColumns><externalMetadataColumns isUsed="False" /></output>
</outputs>
</component>