<component id="2" name="Script Component" componentClassID="Microsoft.ManagedComponentHost" description="Executes a custom script" localeId="1033" version="10" contactInfo="Executes a custom script.;Microsoft Corporation;Microsoft SqlServer v9; © 2004 Microsoft Corporation; All Rights Reserved; http://www.microsoft.com/sql/support;0"><properties><property id="3" name="SourceCode" state="cdata" dataType="System.String" isArray="true" description="Stores the source code of the component" typeConverter="NOTBROWSABLE"><arrayElements arrayElementCount="30"><arrayElement dataType="System.String"><![CDATA[My Project\AssemblyInfo.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices

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

' Review the values of the assembly attributes

<Assembly: AssemblyTitle("ScriptComponent_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[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 OutputBuffer As OutputBuffer

    Dim InputsFinished As Integer = 0

    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

        If InputID = MyBase.ComponentMetaData.InputCollection("Input 1").ID Then
            Input1_ProcessInput(New Input1Buffer(Me, InputID, True, Buffer, OutputMap))
        End If

        If Buffer.EndOfRowset Then
            InputsFinished = InputsFinished + 1
            If InputsFinished = 0 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, ByVal OutputMap As OutputNameMap)

        For I As Integer = 0 To Outputs - 1
            If OutputIDs(I) = GetOutputID(OutputMap, "Output") Then
                OutputBuffer = New OutputBuffer(Me, OutputIDs(I), False, Buffers(I), OutputMap)
            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[scriptcomponent_3e36dc03710e4ab7a7e685e62c677d65.vbproj]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF16LE]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="utf-16"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- This section defines project-level properties.

       Configuration - Specifies whether the default configuration is Release or Debug.
       Platform - Specifies what CPU the output of this project can run on.
       OutputType - Must be "Library" for VSTA.
       NoStandardLibraries - Set to "false" for VSTA.
       RootNamespace - In C#, this specifies the namespace given to new files.
                       In Visual Basic, all objects are wrapped in this namespace at runtime.
       AssemblyName - Name of the output assembly.
  -->
  <PropertyGroup>
    <ProjectTypeGuids>{30D016F9-3734-4E33-A861-5E7D899E18F3};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <OutputType>Library</OutputType>
    <RootNamespace>ScriptComponent_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,42353,42354,42355</NoWarn>
  </PropertyGroup>
  <!-- This section defines properties that are set when the "Release" configuration is
       selected.

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

       Compile - Specifies a source file to compile.
       EmbeddedResource - Specifies a .resx file for embedded resources.
       None - Specifies a file that is not to be passed to the compiler (for instance,
              a text file or XML file).
       AppDesigner - Specifies the directory where the application properties files can
                     be found.
  -->
  <ItemGroup>
    <AppDesigner Include="My Project\" />
    <Compile Include="BufferWrapper.vb" />
    <Compile Include="ComponentWrapper.vb" />
    <Compile Include="main.vb" />
    <Compile Include="My Project\AssemblyInfo.vb">
      <SubType>Code</SubType>
    </Compile>
    <EmbeddedResource Include="My Project\Resources.resx">
      <Generator>VbMyResourcesResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.vb</LastGenOutput>
      <CustomToolNamespace>My.Resources</CustomToolNamespace>
    </EmbeddedResource>
    <Compile Include="My Project\Resources.Designer.vb">
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
      <DependentUpon>Resources.resx</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    <None Include="My Project\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.vb</LastGenOutput>
    </None>
    <Compile Include="My Project\Settings.Designer.vb">
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
      <SubType>Code</SubType>
    </Compile>
    <!-- Include the default configuration information and metadata files for the add-in.
         These files are copied to the build output directory when the project is
         built, and the path to the configuration file is passed to add-in on the command
         line when debugging.
    -->
  </ItemGroup>
  <!-- Include the build rules for a VB project.-->
  <Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
  <!-- This section defines VSTA properties that describe the host-changable project properties. -->
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{30D016F9-3734-4E33-A861-5E7D899E18F3}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{B3A685AA-7EAF-4BC6-9940-57959FA5AC07}" ApplicationType="usd" Language="vb" TemplatesPath="" DebugInfoExeName="devenv.exe" DebugInfoCommandLine="/vstaHostDebugUri:&quot;vstadebug420ed491-c7c0-4ec9-bcdd-d90b816af8d1/89c74728-d312-445a-bc85-05356f336318&quot;" />
        <Host Name="SSIS_ScriptComponent" />
        <ProjectClient>
          <HostIdentifier>SSIS_SC130</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  <PropertyGroup>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
  </PropertyGroup>
  <PropertyGroup>
    <TargetFrameworkProfile>
    </TargetFrameworkProfile>
  </PropertyGroup>
</Project>]]></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

<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, 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

<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, 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 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[My Project\Settings.settings]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version='1.0' encoding='iso-8859-1'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)" GeneratedClassNamespace="" GeneratedClassName="MySettings">
  <Profiles>
    <Profile Name="(Default)" />
  </Profiles>
  <Settings />
</SettingsFile>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[main.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></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><arrayElement dataType="System.String"><![CDATA[Project]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF16LE]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<c:Project xmlns:c="http://schemas.microsoft.com/codeprojectml/2010/08/main" xmlns:msb="http://schemas.microsoft.com/developer/msbuild/2003" runtimeVersion="4.0" schemaVersion="1.0">
	<msb:PropertyGroup>
		<msb:CodeName>scriptcomponent_3e36dc03710e4ab7a7e685e62c677d65</msb:CodeName>
		<msb:Language>msBuild</msb:Language>
		<msb:ProjectId>{C9F7159D-4F93-4C05-9123-8605F3ADB5F6}</msb:ProjectId>
		<msb:NoContent>Reference;Import;Folder</msb:NoContent>
		<msb:DisplayName>scriptcomponent_3e36dc03710e4ab7a7e685e62c677d65</msb:DisplayName>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:File Include="My Project\Settings.Designer.vb"/>
		<msb:File Include="main.vb"/>
		<msb:File Include="BufferWrapper.vb"/>
		<msb:File Include="My Project\Resources.resx"/>
		<msb:File Include="ComponentWrapper.vb"/>
		<msb:File Include="My Project\AssemblyInfo.vb"/>
		<msb:File Include="My Project\Resources.Designer.vb"/>
		<msb:File Include="My Project\Settings.settings"/>
		<msb:Project Include="scriptcomponent_3e36dc03710e4ab7a7e685e62c677d65.vbproj"/>
	</msb:ItemGroup>
</c:Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[My Project\Settings.Designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA['------------------------------------------------------------------------------
' <autogenerated>
'     This code was generated by a tool.
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' </autogenerated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On



Partial Friend NotInheritable Class MySettings
    Inherits System.Configuration.ApplicationSettingsBase

    Private Shared m_Value As MySettings

    Private Shared m_SyncObject As Object = New Object

    <System.Diagnostics.DebuggerNonUserCode()> _
    Public Shared ReadOnly Property Value() As MySettings
        Get
            If (MySettings.m_Value Is Nothing) Then
                System.Threading.Monitor.Enter(MySettings.m_SyncObject)
                If (MySettings.m_Value Is Nothing) Then
                    Try
                        MySettings.m_Value = New MySettings
                    Finally
                        System.Threading.Monitor.Exit(MySettings.m_SyncObject)
                    End Try
                End If
            End If
            Return MySettings.m_Value
        End Get
    End Property
End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[My Project\Resources.resx]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    
    Example:
    
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
                
    There are any number of "resheader" rows that contain simple 
    name/value pairs.
    
    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.
    
    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:
    
    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.
    
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
</root>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[My Project\Resources.Designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA['------------------------------------------------------------------------------
' <autogenerated>
'     This code was generated by a tool.
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' </autogenerated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On


Namespace My.Resources
    
    '''<summary>
    '''   A strongly-typed resource class, for looking up localized strings, etc.
    '''</summary>
    'This class was auto-generated by the Strongly Typed Resource Builder
    'class via a tool like ResGen or Visual Studio.NET.
    'To add or remove a member, edit your .ResX file then rerun ResGen
    'with the /str option, or rebuild your VS project.
    Class MyResources
        
        Private Shared _resMgr As System.Resources.ResourceManager
        
        Private Shared _resCulture As System.Globalization.CultureInfo
        
        Friend Sub New()
            MyBase.New
        End Sub
        
        '''<summary>
        '''   Returns the cached ResourceManager instance used by this class.
        '''</summary>
        <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)>  _
        Public Shared ReadOnly Property ResourceManager() As System.Resources.ResourceManager
            Get
                If (_resMgr Is Nothing) Then
                    Dim temp As System.Resources.ResourceManager = New System.Resources.ResourceManager("My.Resources.MyResources", GetType(MyResources).Assembly)
                    _resMgr = temp
                End If
                Return _resMgr
            End Get
        End Property
        
        '''<summary>
        '''   Overrides the current thread's CurrentUICulture property for all
        '''   resource lookups using this strongly typed resource class.
        '''</summary>
        <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)>  _
        Public Shared Property Culture() As System.Globalization.CultureInfo
            Get
                Return _resCulture
            End Get
            Set
                _resCulture = value
            End Set
        End Property
    End Class
End Namespace
]]></arrayElement></arrayElements></property><property id="4" name="BinaryCode" state="cdata" dataType="System.String" isArray="true" description="Stores the binary representation of the component" typeConverter="NOTBROWSABLE"><arrayElements arrayElementCount="2"><arrayElement dataType="System.String"><![CDATA[ScriptComponent_3e36dc03710e4ab7a7e685e62c677d65.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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
8gEAAAEAuw8AAAEAfg0AAAIA5AUAAAEAfg0AAAIANQQAAAEAjw0AAAEAVwQAAAEAVwQJAKYPAQAR
AKYPBgAZAKYPCgApAKYPEAAxAKYPEAA5AKYPEABBAKYPEABJAKYPEABRAKYPEABZAKYPFQBhAKYP
FQBpAKYPEABxAKYPEAB5AKYPEACBAKYPGgCRAKYPIACpAKYPBgCxAKYPBgC5AKYPBgDRAKYPJgDp
AKYPEAApAaYPBgCJAaYPEACRAaYPEACZAaYPBgChAaYPEAChAaYPAQCpAaYPBgCxAaYPLgDBAaYP
BgCZAKYPBgChAKYPBgAMAKYPBgAUAKYPBgAcAKYPBgAkAKYPBgAMAEcEUAAUAEcEUAAcAEcEUAAk
AEcEUADBAKYPBgDZAMUEVQDZANYUXQDxAKYPYwABAaYPawDhAYcUfgDhAd8SfgABAQkMggABAfgL
AQDpAaYPEADhAVMUBgDhAdwSBgAhAaYPBgAJATIDiADxAfoMjgBZAQAMlABRAbYBmwARAcwSfgAJ
AfoBpABZARcCuABRAeQTvwA5Ab4MxQD5AY4PywBBAZAT0QAhAX4T1QBJAb0BmwABAiAG2wBBATwU
fgARAosGBgBZAU8U6QBZAZwTmwAZAt8J7wDZAa4S9ABRAeAEEABRAU0SFQAhAeoDAQBZAQYCAQBZ
AY4PywBRAaQMDAEhAusKBgDBAN8JHgHZARkMHgFRAdcEHgExAqYPEADZAesUOgERAfELPQE5AtEJ
QgERAQAMSQEZAsoOTgHxAVMNUwHZAa4SWAHZAeMUXwERAYcUfgDxAQ4NdAFBAgAMegFpAd8MgQFh
AZwTmwBhAQAMhwFJAmURjgFhAU8UmQFJAuAEEAAJAUYPpwFZAtsDrQFxAQAMtgFhAmgJ0QBpApEJ
vQFxAaQKBgABArgOwgFpAV0OmwBJAr0BmwBxAssByAEhApwTmwAhAgAM3wF5AbYBmwBRAV0OmwB5
Ab0BmwB5AdcEHgF5AcAFHgHZAfcJmwAxATsM+wHZAegJAQK5AaYPBgB5AlwPBwJ5AusSBwLBALIR
DALBAGAEmwCBAjgEGQI0AEUUMAI8AGgJUAA8AHIJRwI8AKYPBgAOAGQAcQIOAGgAlAIIAGwAzwIp
AKsAwgUuAAsAEQQuABMAGgQuABsAOQQuACMAQgQuACsAfwQuADMAhQQuADsAQgQuAEMAlAQuAEsA
fwQuAFMAtAQuAFsAfwQuAGMAugQuAGsA5AQuAHMA8QRAAIsAOQVAAIMAPgVDAHsARwVDAIMAPgVJ
AKsA0wVjAHsARwVjAIMAPgVpAKsA5wWAAIsAOQWDAJMAOQWDAJsAOQWDAHsARwWJAKsA9AWgAIsA
OQWpAIMAOQTAAIsAOQXDAFMAfwTJAIMAOQTgAIsAOQXjAFMAfwQDAVMAfwQjAVMAfwSDAbMAOQWD
AVMAfwTDAYMAPgXDAaMAYAXjAYMAPgXjAVsAfwSpA7sACAapA8MAaQapA8sAOQWpA9MAdgbJA7sA
jQbJA8MAaQbJA8sAOQXJA9MAFgfpA7sAOQfpA8MAaQbpA9sAbwcJBLsAeAcJBMMA2gcJBOMAOQUp
BLsA+gcpBMMA2gcpBOsAPwhJBPMAOQXABlMAfwTgBlMAfwSgCoMAPgWgCosAOQXACoMAPgXACosA
OQXgCoMAPgXgCosAOQUAC4MAPgUAC4sAOQUgC4sAOQVAC4sAOQVgC4sAOQVgC4MAPgWAC4sAOQWg
C4sAOQWgC4MAPgV6AJ8ArAD6ABIBIgFkAWgBbAGfAc4B5gHtAfYBEQIkAgQAAQAFAAUABgAHAAcA
CQAIAAsADAAdAA0AIgAPACMAAABxD9gDAABcDN0DAABBD+IDAAAMEOcDAACoDuwDAABbBvEDAAC9
EfYDAADUEfYDAAC9EfYDAADUEfYDAAC9EfYDAACDA/sDAAA1C/8DAACtA/sDAABKC/8DAAAMBfsD
AACvC/8DAACaBfsDAADDC/8DAADLA/sDAABhC/8DAADtBPsDAACUC/8DAACACfsDAADgC/8DAABw
BPsDAAB8C/8DAADUEfYDAACDA/sDAACtA/sDAAAqCgMEAAB2BfsDAACaBfsDAACaCQcEAABLBAwE
AgAEAAMAAgAFAAUAAgAGAAcAAgAHAAkAAgAJAAsAAgAKAA0AAQALAA0AAgANAA8AAgAOABEAAgAS
ABMAAgATABUAAgAXABcAAQAYABkAAQAZABsAAQAaAB0AAQAbAB8AAQAcACEAAQAdACMAAQAeACUA
AQAfACcAAQAgACkAAQAhACsAAQAiAC0AAQAjAC8AAQAkADEAAQAlADMAAQAmADUAAQAnADcAAgAo
ADkAAgA+ADsAAQA/ADsAAgBAAD0AAQBBAD0AAgBCAD8AAQBDAD8AAgBEAEEAAQBFAEEAAgBGAEMA
AQBHAEMAAgBUAEUAAgBcAEcANAA7AEIASQAWAikCOAI/AgSAAAABAAAAAAAAAAAAAAAAAGwKAAAE
AAAAAAAAAAAAAABNAkgDAAAAAAQAAAAAAAAAAAAAAE0CEgwAAAAACgAAAAAAAAAAAAAAVgJRAwAA
AAABAAAAAAAAAAAAAABfApcBAAAAAA0AAAAAAAAAAAAAAGgCphMAAAAADQAAAAAAAAAAAAAAaALD
EwAAAAANAAAAAAAAAAAAAABoAswNAAAAAA0AAAAAAAAAAAAAAGgCqQ0AAAAAAAAAAAEAAAAKEQAA
DgAEAA8ABAAQAAwAEQAMABIADAAAABAAHgA8AgAAEACzADwCAAAAALUAPAL/AB8C/wBCAgAAAAAA
SURUU0NvbXBvbmVudE1ldGFEYXRhMTAwAElEVFNWYXJpYWJsZTEwMABJRFRTSW5wdXRDb2x1bW4x
MDAASURUU1ZpcnR1YWxJbnB1dENvbHVtbjEwMABJRFRTT3V0cHV0Q29sdW1uMTAwAElEVFNJbnB1
dENvbHVtbkNvbGxlY3Rpb24xMDAASURUU1ZpcnR1YWxJbnB1dENvbHVtbkNvbGxlY3Rpb24xMDAA
SURUU091dHB1dENvbHVtbkNvbGxlY3Rpb24xMDAASURUU0lucHV0Q29sbGVjdGlvbjEwMABJRFRT
T3V0cHV0Q29sbGVjdGlvbjEwMABJRFRTQnVmZmVyTWFuYWdlcjEwMABJRFRTVmFyaWFibGVEaXNw
ZW5zZXIxMDAASURUU1ZhcmlhYmxlczEwMABJRFRTSW5wdXQxMDAASURUU1ZpcnR1YWxJbnB1dDEw
MABJRFRTT3V0cHV0MTAwAENvbnRleHRWYWx1ZWAxAFRocmVhZFNhZmVPYmplY3RQcm92aWRlcmAx
AEludDMyAENvenlSb2MuU1NJU1BsdXMuMjAxNgA8TW9kdWxlPgBnZXRfSUQAZ2V0X0xpbmVhZ2VJ
RABGaW5kQ29sdW1uQnlMaW5lYWdlSUQAT2JqZWN0SUQASW5wdXRJRABpbnB1dElEAEdldE91dHB1
dElEAFJlbW92ZU9iamVjdEJ5SUQAR2V0T2JqZWN0QnlJRABDb3p5Um9jLlNxbFNlcnZlci5TU0lT
AFQARGlzcG9zZV9fSW5zdGFuY2VfXwBDcmVhdGVfX0luc3RhbmNlX18AR2V0Q29sdW1uSW5mb0J5
SWRfAElzRW5kUmVhY2hlZF8AR2V0VmFyaWFibGVfAEdldENvbHVtbkluZm9CeU5hbWVfAEdldFBp
cGVsaW5lU3RyaW5nXwBBZGRTdHJpbmdDb2x1bW5fAFJlc2V0T3V0cHV0Q29sdW1uVHlwZXNfAEdl
dENvbHVtbkluZm9zXwBHZXRPdXRwdXRDb2x1bW5JbmRleF8AR2V0SW5wdXRJbmZvSW5kZXhfAFJl
aW5pdGlhbGl6ZU1ldGFEYXRhAGdldF9Db21wb25lbnRNZXRhRGF0YQBtc2NvcmxpYgBNaWNyb3Nv
ZnQuVmlzdWFsQmFzaWMATGluZWFnZUlkAGdldF9QYWNrYWdlSWQAc2V0X1BhY2thZ2VJZABtX3Bh
Y2thZ2VJZABnZXRfRXhlY3V0aW9uSWQAc2V0X0V4ZWN1dGlvbklkAG1fZXhlY3V0aW9uSWQAc2V0
X1Jvd0lkZW50aWZpZXJJZABMb2NrT25lRm9yUmVhZABPbklucHV0UGF0aERldGFjaGVkAE9uSW5w
dXRQYXRoQXR0YWNoZWQASW5wdXRzRmluaXNoZWQATWFya091dHB1dHNGaW5pc2hlZABpZABDcmVh
dGVJbnN0YW5jZQBnZXRfR2V0SW5zdGFuY2UAaW5zdGFuY2UAR2V0SGFzaENvZGUAc2V0X0Vycm9y
TWVzc2FnZQBtX3BhY2thZ2VJZFZhcmlhYmxlAG1fZXhlY3V0aW9uSWRWYXJpYWJsZQBJRGlzcG9z
YWJsZQBSdW50aW1lVHlwZUhhbmRsZQBHZXRUeXBlRnJvbUhhbmRsZQBnZXRfTmFtZQBzZXRfTmFt
ZQBzZXRfRXJyb3JDb2x1bW5OYW1lAGNvbHVtbk5hbWUAc2V0X1N0ZXBOYW1lAG1fc3RlcE5hbWUA
dmFyTmFtZQBnZXRfUm93SWRlbnRpZmllck5hbWUAc2V0X1Jvd0lkZW50aWZpZXJOYW1lAGdldF9J
bnB1dEZvclJvd0lkZW50aWZpZXJOYW1lAHNldF9JbnB1dEZvclJvd0lkZW50aWZpZXJOYW1lAG1f
aW5wdXRGb3JSb3dJZGVudGlmaWVyTmFtZQBtX3Jvd0lkZW50aWZpZXJOYW1lAGdldF9VcHN0cmVh
bUNvbXBvbmVudE5hbWUASW5wdXROYW1lAG5hbWUATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlw
ZWxpbmUARGF0YVR5cGUARFRTVXNhZ2VUeXBlAFNldFVzYWdlVHlwZQBWYWx1ZVR5cGUAR2V0VHlw
ZQBnZXRfQ3VsdHVyZQBzZXRfQ3VsdHVyZQBfcmVzQ3VsdHVyZQBBcHBsaWNhdGlvbkJhc2UAQXBw
bGljYXRpb25TZXR0aW5nc0Jhc2UARGlzcG9zZQBFZGl0b3JCcm93c2FibGVTdGF0ZQBHdWlkQXR0
cmlidXRlAEhlbHBLZXl3b3JkQXR0cmlidXRlAEdlbmVyYXRlZENvZGVBdHRyaWJ1dGUARGVidWdn
ZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZQBEZWJ1Z2dhYmxlQXR0cmlidXRlAFZhcmlhYmxlQXR0cmli
dXRlAEVkaXRvckJyb3dzYWJsZUF0dHJpYnV0ZQBDb21WaXNpYmxlQXR0cmlidXRlAEFzc2VtYmx5
VGl0bGVBdHRyaWJ1dGUAU3RhbmRhcmRNb2R1bGVBdHRyaWJ1dGUASGlkZU1vZHVsZU5hbWVBdHRy
aWJ1dGUARGVmYXVsdFZhbHVlQXR0cmlidXRlAEFzc2VtYmx5VHJhZGVtYXJrQXR0cmlidXRlAFRh
cmdldEZyYW1ld29ya0F0dHJpYnV0ZQBEZWJ1Z2dlckhpZGRlbkF0dHJpYnV0ZQBJbnB1dFZpcnR1
YWxDb2x1bW5BdHRyaWJ1dGUAQXNzZW1ibHlGaWxlVmVyc2lvbkF0dHJpYnV0ZQBNeUdyb3VwQ29s
bGVjdGlvbkF0dHJpYnV0ZQBBc3NlbWJseURlc2NyaXB0aW9uQXR0cmlidXRlAENvbXBpbGF0aW9u
UmVsYXhhdGlvbnNBdHRyaWJ1dGUAQXNzZW1ibHlQcm9kdWN0QXR0cmlidXRlAEFzc2VtYmx5Q29w
eXJpZ2h0QXR0cmlidXRlAENMU0NvbXBsaWFudEF0dHJpYnV0ZQBTU0lTU2NyaXB0Q29tcG9uZW50
RW50cnlQb2ludEF0dHJpYnV0ZQBJbnB1dEF0dHJpYnV0ZQBBc3NlbWJseUNvbXBhbnlBdHRyaWJ1
dGUAQ2F0ZWdvcnlBdHRyaWJ1dGUAUnVudGltZUNvbXBhdGliaWxpdHlBdHRyaWJ1dGUAUHJlRXhl
Y3V0ZQBtX1ZhbHVlAGdldF9WYWx1ZQBzZXRfVmFsdWUAc2V0X0Vycm9yQ29sdW1uVmFsdWUAR2V0
T2JqZWN0VmFsdWUAdmFsdWUAU3lzdGVtLlRocmVhZGluZwBTeXN0ZW0uUnVudGltZS5WZXJzaW9u
aW5nAENvbXBhcmVTdHJpbmcAVG9TdHJpbmcAU3Vic3RyaW5nAE1hdGgAZ2V0X0xlbmd0aABnZXRf
U3RhbmRhcmREZXN0aW5hdGlvbkNvbHVtbkxlbmd0aABzZXRfU3RhbmRhcmREZXN0aW5hdGlvbkNv
bHVtbkxlbmd0aABtX3N0YW5kYXJkRGVzdGluYXRpb25Db2x1bW5MZW5ndGgAU2NyaXB0Q29tcG9u
ZW50XzNlMzZkYzAzNzEwZTRhYjdhN2U2ODVlNjJjNjc3ZDY1LnZicHJvagBVbmxvY2sATWljcm9z
b2Z0LlZpc3VhbEJhc2ljLk15U2VydmljZXMuSW50ZXJuYWwAU3lzdGVtLkNvbXBvbmVudE1vZGVs
AFJlbW92ZUFsbABTY3JpcHRDb21wb25lbnRfM2UzNmRjMDM3MTBlNGFiN2E3ZTY4NWU2MmM2Nzdk
NjUudmJwcm9qLmRsbABzZXRfUGFja2FnZUlkX0lzTnVsbABzZXRfRXhlY3V0aW9uSWRfSXNOdWxs
AHNldF9Sb3dJZGVudGlmaWVySWRfSXNOdWxsAHNldF9FcnJvck1lc3NhZ2VfSXNOdWxsAHNldF9F
cnJvckNvbHVtbk5hbWVfSXNOdWxsAHNldF9TdGVwTmFtZV9Jc051bGwAc2V0X1Jvd0lkZW50aWZp
ZXJOYW1lX0lzTnVsbABzZXRfRXJyb3JDb2x1bW5WYWx1ZV9Jc051bGwAU2V0TnVsbABnZXRfSXRl
bQBzZXRfSXRlbQBTeXN0ZW0AVHJpbQBTeXN0ZW0uQ29tcG9uZW50TW9kZWwuRGVzaWduAE1pbgBT
Y3JpcHRNYWluAGdldF9BcHBsaWNhdGlvbgBNeUFwcGxpY2F0aW9uAFN5c3RlbS5Db25maWd1cmF0
aW9uAFN5c3RlbS5HbG9iYWxpemF0aW9uAFN5c3RlbS5SZWZsZWN0aW9uAGdldF9JbnB1dENvbHVt
bkNvbGxlY3Rpb24AZ2V0X1ZpcnR1YWxJbnB1dENvbHVtbkNvbGxlY3Rpb24AZ2V0X091dHB1dENv
bHVtbkNvbGxlY3Rpb24AZ2V0X0lucHV0Q29sbGVjdGlvbgBnZXRfT3V0cHV0Q29sbGVjdGlvbgBB
cmd1bWVudE51bGxFeGNlcHRpb24ASW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbgBHZXRFcnJvckRl
c2NyaXB0aW9uAEN1bHR1cmVJbmZvAENvbHVtbkluZm8AY29sc0luZm8ASW5wdXRJbmZvAE91dHB1
dE5hbWVNYXAAT3V0cHV0TWFwAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRFRTUnVudGltZVdyYXAATWlj
cm9zb2Z0LlNxbFNlcnZlci5EVFNQaXBlbGluZVdyYXAAbV9BcHBPYmplY3RQcm92aWRlcgBtX1Vz
ZXJPYmplY3RQcm92aWRlcgBtX0NvbXB1dGVyT2JqZWN0UHJvdmlkZXIAbV9NeVdlYlNlcnZpY2Vz
T2JqZWN0UHJvdmlkZXIASW5wdXQxQnVmZmVyAGdldF9CdWZmZXIAUGlwZWxpbmVCdWZmZXIAU2Ny
aXB0QnVmZmVyAElucHV0QnVmZmVyAE91dHB1dEJ1ZmZlcgBidWZmZXIAZ2V0X1Jlc291cmNlTWFu
YWdlcgBnZXRfQnVmZmVyTWFuYWdlcgBUb0ludGVnZXIAU3lzdGVtLkNvZGVEb20uQ29tcGlsZXIA
TWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUnVudGltZS5XcmFwcGVyAE1pY3Jvc29mdC5TcWxTZXJ2
ZXIuRHRzLlBpcGVsaW5lLldyYXBwZXIAZ2V0X1VzZXIAZ2V0X1ZhcmlhYmxlRGlzcGVuc2VyAEVu
dGVyAGdldF9Db21wdXRlcgBNeUNvbXB1dGVyAF9yZXNNZ3IASUVudW1lcmF0b3IAR2V0RW51bWVy
YXRvcgBBY3RpdmF0b3IALmN0b3IALmNjdG9yAE1vbml0b3IAc3RyAE91dHB1dElEcwBTeXN0ZW0u
RGlhZ25vc3RpY3MATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkRldmljZXMAZ2V0X1dlYlNlcnZpY2Vz
AE15V2ViU2VydmljZXMATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkFwcGxpY2F0aW9uU2VydmljZXMA
U3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5Db21w
aWxlclNlcnZpY2VzAFN5c3RlbS5SdW50aW1lLkNvbXBpbGVyU2VydmljZXMAU3lzdGVtLlJlc291
cmNlcwBTY3JpcHRDb21wb25lbnRfM2UzNmRjMDM3MTBlNGFiN2E3ZTY4NWU2MmM2NzdkNjUudmJw
cm9qLk15LlJlc291cmNlcwBNeVJlc291cmNlcwBTY3JpcHRDb21wb25lbnRfM2UzNmRjMDM3MTBl
NGFiN2E3ZTY4NWU2MmM2NzdkNjUudmJwcm9qLlJlc291cmNlcy5yZXNvdXJjZXMARGVidWdnaW5n
TW9kZXMAU2V0RGF0YVR5cGVQcm9wZXJ0aWVzAFZhcmlhYmxlcwBDb3p5Um9jLlNxbFNlcnZlci5T
U0lTLkF0dHJpYnV0ZXMATXlTZXR0aW5ncwBFcXVhbHMAZ2V0X1N0YXRpY0lucHV0Q29sdW1ucwBn
ZXRfU3RhdGljT3V0cHV0Q29sdW1ucwBDb252ZXJzaW9ucwBTeXN0ZW0uQ29sbGVjdGlvbnMAQ29u
bmVjdGlvbnMAQ29sdW1uSW5mb3MAbV9pbnB1dEluZm9zAEJ1ZmZlcnMAUnVudGltZUhlbHBlcnMA
T3BlcmF0b3JzAHNldF9IYXNTaWRlRWZmZWN0cwBDb25zdHMARmluaXNoT3V0cHV0cwBTY3JpcHRC
dWZmZXJQbHVzAFNjcmlwdENvbXBvbmVudFBsdXMAQ3JlYXRlTmV3T3V0cHV0Um93cwBDb25jYXQA
bV9TeW5jT2JqZWN0AE15UHJvamVjdABnZXRfRW5kT2ZSb3dzZXQAU2V0RW5kT2ZSb3dzZXQARXhp
dABQYWNrYWdlSWRfRGVmYXVsdABFeGVjdXRpb25JZF9EZWZhdWx0AFN0YW5kYXJkRGVzdGluYXRp
b25Db2x1bW5MZW5ndGhfRGVmYXVsdABQaXBlbGluZUNvbXBvbmVudABVc2VyQ29tcG9uZW50AFBh
cmVudENvbXBvbmVudABTY3JpcHRDb21wb25lbnQAZ2V0X0hvc3RDb21wb25lbnQAZ2V0X0N1cnJl
bnQAZ2V0X0NvdW50AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuVHhTY3JpcHQATWljcm9zb2Z0LlNxbFNl
cnZlci5QaXBlbGluZUhvc3QAR2V0VmlydHVhbElucHV0AElzSW5wdXQASW5wdXQxX1Byb2Nlc3NJ
bnB1dABJbnB1dF9Qcm9jZXNzSW5wdXQAaW5wdXQAUHJpbWVPdXRwdXQAb3V0cHV0AE1vdmVOZXh0
AG1fQ29udGV4dABOZXcAQWRkUm93AElucHV0MV9Qcm9jZXNzSW5wdXRSb3cASW5wdXRfUHJvY2Vz
c0lucHV0Um93AE5leHRSb3cAQnVmZmVySW5kZXgAU2NyaXB0Q29tcG9uZW50XzNlMzZkYzAzNzEw
ZTRhYjdhN2U2ODVlNjJjNjc3ZDY1LnZicHJvai5NeQBnZXRfQXNzZW1ibHkASXNOdWxsT3JFbXB0
eQAAAAAAMU0AeQAuAFIAZQBzAG8AdQByAGMAZQBzAC4ATQB5AFIAZQBzAG8AdQByAGMAZQBzAACA
m0kAcwBOAHUAbABsACAAcAByAG8AcABlAHIAdAB5ACAAYwBhAG4AbgBvAHQAIABiAGUAIABzAGUA
dAAgAHQAbwAgAEYAYQBsAHMAZQAuACAAQQBzAHMAaQBnAG4AIABhACAAdgBhAGwAdQBlACAAdABv
ACAAdABoAGUAIABjAG8AbAB1AG0AbgAgAGkAbgBzAHQAZQBhAGQALgAAE1AAYQBjAGsAYQBnAGUA
SQBkAAAXRQB4AGUAYwB1AHQAaQBvAG4ASQBkAAARUwB0AGUAcABOAGEAbQBlAAAjUgBvAHcASQBk
AGUAbgB0AGkAZgBpAGUAcgBOAGEAbQBlAAAfUgBvAHcASQBkAGUAbgB0AGkAZgBpAGUAcgBJAGQA
AB9FAHIAcgBvAHIAQwBvAGwAdQBtAG4ATgBhAG0AZQAAIUUAcgByAG8AcgBDAG8AbAB1AG0AbgBW
AGEAbAB1AGUAABlFAHIAcgBvAHIATQBlAHMAcwBhAGcAZQAAC0kAbgBwAHUAdAAAD0kAbgBwAHUA
dAAgADEAAA1PAHUAdABwAHUAdAAADUkAbgBwAHUAdAAgAAAhUwB5AHMAdABlAG0AOgA6AFQAYQBz
AGsATgBhAG0AZQAADWIAdQBmAGYAZQByAAAPVQBuAGsAbgBvAHcAbgAAAQATRQByAHIAbwByAEMA
bwBkAGUAAAcgAC0AIAABF0UAcgByAG8AcgBDAG8AbAB1AG0AbgAAD00AYQB5AGIAZQA6ACAAAAtJ
AGQAIAA9ACAAAGye6owY2OdOhm/uWisCkfYABCABAQgDIAABBSABARERBCABAQ4EIAEBAgUgAgEO
DgUgAQERRQcgBAEODg4OBSACAQ4CBhUSPAESDAYVEjwBEggGFRI8ARJlBhUSPAESOAQgABMABwAB
Em0RgOUFIAASgOkHIAIBDhKA6Q4gBQESgIUIAhKAiRKAjQMHAQIDIAACBSACAQgcBSAAEoD5BSAA
EoCtBiABEoCpHAMgAAgEBwIICAcAAggSgI0OCwcDEoCdEoChEoClBiABEoCpCAUgABKAnQUgABKA
/QUgABKAoQMgABwFIAASgQENIAQSgL0IEoCdCBGBBQUgABKAqQQAAQ4IBQACDg4OEQcFEoCdEoCh
EoCpEoChEoClBSAAEoERCwcFEoCtCAgIEoCpAyAADhcHEggIDg4OCA4ODggICBFEDggIEUQRRAIG
DgQgAQIIBgADCA4OAgQgARwIBAABCBwEIAEOCAYAAw4ODg4EAAECDgMHAQ4DBwEIBwcDEoCxCAgF
IAASgSEGIAESgLUcBSAAEoCxBiABEoElHAogBQERgSkICAgIBSAAEoElBwcDHBwSgLkFIAASgS0I
IAIBDhASgLkGIAESgTEcBAABHBwFIAASgTkFIAIICAgQBwcdEUQIHRFECAgSgL0RRAYgARKAvRwG
BwQICAgICAcEAgIdEUgIBAcCDg4FAAIICAgFIAIOCAgEAAEBHAQgAQIcBAcBHgACHgAFEAEAHgAE
CgEeAAQHARMABhUSPAETAAcGFRJxARMABhUScQETAAITAAQKARMABSABARMACLd6XFYZNOCJCLA/
X38R1Qo6CBbPSQu4DDTqCImEXc2AgMyRIlMAeQBzAHQAZQBtADoAOgBQAGEAYwBrAGEAZwBlAEkA
RAA6UwB5AHMAdABlAG0AOgA6AEUAeABlAGMAdQB0AGkAbwBuAEkAbgBzAHQAYQBuAGMAZQBHAFUA
SQBEAAT6AAAABwYVEjwBEgwHBhUSPAESCAcGFRI8ARJlBwYVEjwBEjgDBhJ5AwYSfQMGEigDBhIs
AwYSIAIGCAQGEoCFBAYdEUgDBhI0AgYcBAYdEUQCBgIDAAABBAAAEgwEAAASCAQAABJlBAAAEjgE
AAASeQQAABJ9BQABARJ9BCAAHQ4LIAQBCA4SgIkSgI0NIAQBCB0IHRKAiRKAjQUgAQESGAUgAQES
HAYgAQESgIUHIAIBCBKAiQcgAgESgLUOBCABHA4HIAIIEoC1DgggAR0RRBKAqQQgAQgIBCABDg4H
IAIIHRFEDgcgAggdEUQIBAAAEjQEIAASbQcQAQEeAB4ABzABAQEQHgAECAASDAQIABIIBAgAEmUE
CAASOAQIABJ5BAgAEn0EKAAdDgMoAA4DKAACAygACAQIABI0BCgAEwAIAQAIAAAAAAAeAQABAFQC
FldyYXBOb25FeGNlcHRpb25UaHJvd3MBCAEAAgAAAAAAPAEAN1NjcmlwdENvbXBvbmVudF8zZTM2
ZGMwMzcxMGU0YWI3YTdlNjg1ZTYyYzY3N2Q2NS52YnByb2oAAAUBAAAAAA4BAAlNaWNyb3NvZnQA
AB8BABpDb3B5cmlnaHQgQCBNaWNyb3NvZnQgMjAxNQAABQEAAQAAKQEAJDY3Y2Y0OTcyLTAwYmIt
NGUxMy05OGQyLTFjYzcwOGUzMzdkMQAADAEABzEuMC4wLjAAAEcBABouTkVURnJhbWV3b3JrLFZl
cnNpb249djQuMAEAVA4URnJhbWV3b3JrRGlzcGxheU5hbWUQLk5FVCBGcmFtZXdvcmsgNAQBAAAA
CAEAAQAAAAAAGAEACk15VGVtcGxhdGUIMTEuMC4wLjAAAGEBADRTeXN0ZW0uV2ViLlNlcnZpY2Vz
LlByb3RvY29scy5Tb2FwSHR0cENsaWVudFByb3RvY29sEkNyZWF0ZV9fSW5zdGFuY2VfXxNEaXNw
b3NlX19JbnN0YW5jZV9fAAAAEAEAC015LkNvbXB1dGVyAAATAQAOTXkuQXBwbGljYXRpb24AAAwB
AAdNeS5Vc2VyAAATAQAOTXkuV2ViU2VydmljZXMAAGABAFtTZWxlY3QgdmFyaWFibGUgdGhhdCBj
b250YWlucyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhpcyBwYWNrYWdlLkYuZS4gU3lzdGVt
OjpQYWNrYWdlSUQuAAAMAQAHR2VuZXJhbAAAFgEAEVN5c3RlbTo6UGFja2FnZUlEAACAhwEAgIFT
ZWxlY3QgdmFyaWFibGUgdGhhdCBjb250YWlucyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhp
cyBleGVjdXRpb24vaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuRi5lLiBTeXN0ZW06OkV4ZWN1dGlv
bkluc3RhbmNlR1VJRC4AACIBAB1TeXN0ZW06OkV4ZWN1dGlvbkluc3RhbmNlR1VJRAAANQEAMFNl
bGVjdCB0aGUgbGVuZ3RoIG9mIHRoZSBOVmFyY2hhciBvdXRwdXQgY29sdW1ucwAACAEA+gAAAAAA
YQEAXFNlbGVjdCB0aGUgaW5wdXQgZmxvdyB0aGF0IGNvbnRhaW5zIHRoZSBjb2x1bW4gdGhhdCB1
bmlxdWVseSBkZWZpbmVzIGV2ZXJ5IHJvdyBpbiB0aGlzIGZsb3cuAAAfAQAaU3BlY2lmaWMgZm9y
IHRoaXMgZGF0YWZsb3cAAEQBAD9TZWxlY3QgdGhlIGNvbHVtbiB0aGF0IHVuaXF1ZWx5IGRlZmlu
ZXMgZXZlcnkgcm93IGluIHRoaXMgZmxvdy4AAB8BABlJbnB1dEZvclJvd0lkZW50aWZpZXJOYW1l
AQAAALQAAADOyu++AQAAAJEAAABsU3lzdGVtLlJlc291cmNlcy5SZXNvdXJjZVJlYWRlciwgbXNj
b3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1i
NzdhNWM1NjE5MzRlMDg5I1N5c3RlbS5SZXNvdXJjZXMuUnVudGltZVJlc291cmNlU2V0AgAAAAAA
AAAAAAAAUEFEUEFEULQAAAB4YwAAAAAAAAAAAACSYwAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
hGMAAAAAAAAAAAAAAABfQ29yRGxsTWFpbgBtc2NvcmVlLmRsbAAAAAAA/yUAIAAQAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAQAAAAGAAAgAAAAAAAAAAAAAAA
AAAAAQABAAAAMAAAgAAAAAAAAAAAAAAAAAAAAQAAAAAASAAAAFiAAACwBAAAAAAAAAAAAACwBDQA
AABWAFMAXwBWAEUAUgBTAEkATwBOAF8ASQBOAEYATwAAAAAAvQTv/gAAAQAAAAEAAAAAAAAAAQAA
AAAAPwAAAAAAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAEQAAAABAFYAYQByAEYAaQBsAGUASQBuAGYA
bwAAAAAAJAAEAAAAVAByAGEAbgBzAGwAYQB0AGkAbwBuAAAAAAAAALAEEAQAAAEAUwB0AHIAaQBu
AGcARgBpAGwAZQBJAG4AZgBvAAAA7AMAAAEAMAAwADAAMAAwADQAYgAwAAAAGgABAAEAQwBvAG0A
bQBlAG4AdABzAAAAAAAAADQACgABAEMAbwBtAHAAYQBuAHkATgBhAG0AZQAAAAAATQBpAGMAcgBv
AHMAbwBmAHQAAACYADgAAQBGAGkAbABlAEQAZQBzAGMAcgBpAHAAdABpAG8AbgAAAAAAUwBjAHIA
aQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwAzAGUAMwA2AGQAYwAwADMANwAxADAAZQA0AGEAYgA3
AGEANwBlADYAOAA1AGUANgAyAGMANgA3ADcAZAA2ADUALgB2AGIAcAByAG8AagAAADAACAABAEYA
aQBsAGUAVgBlAHIAcwBpAG8AbgAAAAAAMQAuADAALgAwAC4AMAAAAJgAPAABAEkAbgB0AGUAcgBu
AGEAbABOAGEAbQBlAAAAUwBjAHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwAzAGUAMwA2AGQA
YwAwADMANwAxADAAZQA0AGEAYgA3AGEANwBlADYAOAA1AGUANgAyAGMANgA3ADcAZAA2ADUALgB2
AGIAcAByAG8AagAuAGQAbABsAAAAWgAbAAEATABlAGcAYQBsAEMAbwBwAHkAcgBpAGcAaAB0AAAA
QwBvAHAAeQByAGkAZwBoAHQAIABAACAATQBpAGMAcgBvAHMAbwBmAHQAIAAyADAAMQA1AAAAAAAq
AAEAAQBMAGUAZwBhAGwAVAByAGEAZABlAG0AYQByAGsAcwAAAAAAAAAAAKAAPAABAE8AcgBpAGcA
aQBuAGEAbABGAGkAbABlAG4AYQBtAGUAAABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABf
ADMAZQAzADYAZABjADAAMwA3ADEAMABlADQAYQBiADcAYQA3AGUANgA4ADUAZQA2ADIAYwA2ADcA
NwBkADYANQAuAHYAYgBwAHIAbwBqAC4AZABsAGwAAACQADgAAQBQAHIAbwBkAHUAYwB0AE4AYQBt
AGUAAAAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AMwBlADMANgBkAGMAMAAzADcA
MQAwAGUANABhAGIANwBhADcAZQA2ADgANQBlADYAMgBjADYANwA3AGQANgA1AC4AdgBiAHAAcgBv
AGoAAAA0AAgAAQBQAHIAbwBkAHUAYwB0AFYAZQByAHMAaQBvAG4AAAAxAC4AMAAuADAALgAwAAAA
OAAIAAEAQQBzAHMAZQBtAGIAbAB5ACAAVgBlAHIAcwBpAG8AbgAAADEALgAwAC4AMAAuADAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAABgAAAMAAAApDMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA]]></arrayElement></arrayElements></property><property id="5" 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_3e36dc03710e4ab7a7e685e62c677d65</property><property id="6" name="ScriptLanguage" dataType="System.String" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91">VisualBasic</property><property id="12" name="UserComponentTypeName" dataType="System.String">CozyRoc.ScriptComponentHostPlus</property></properties><inputs><input id="15" name="Input" hasSideEffects="true"><externalMetadataColumns /></input><input id="16" name="Input 1" hasSideEffects="true"><externalMetadataColumns /></input></inputs><outputs><output id="17" name="Output" hasSideEffects="true"><outputColumns><outputColumn id="18" name="PackageId" lineageId="18" length="250" dataType="wstr" /><outputColumn id="19" name="ExecutionId" lineageId="19" length="250" dataType="wstr" /><outputColumn id="20" name="StepName" lineageId="20" length="250" dataType="wstr" /><outputColumn id="21" name="RowIdentifierName" lineageId="21" length="250" dataType="wstr" /><outputColumn id="22" name="RowIdentifierId" lineageId="22" length="250" dataType="wstr" /><outputColumn id="23" name="ErrorColumnName" lineageId="23" length="250" dataType="wstr" /><outputColumn id="24" name="ErrorColumnValue" lineageId="24" length="250" dataType="wstr" /><outputColumn id="25" name="ErrorMessage" lineageId="25" length="250" dataType="wstr" /></outputColumns><externalMetadataColumns /></output></outputs></component>