<component id="2" name="Checksum" componentClassID="Microsoft.ManagedComponentHost" description="Executes a custom script." localeId="1033" version="9" contactInfo="Executes a custom script.;Microsoft Corporation;Microsoft SqlServer v9; © 2004 Microsoft Corporation; All Rights Reserved; http://www.microsoft.com/sql/support;0"><properties><property id="3" name="SourceCode" state="cdata" dataType="System.String" isArray="true" description="Stores the source code of the component" typeConverter="NOTBROWSABLE"><arrayElements arrayElementCount="18"><arrayElement dataType="System.String"><![CDATA[ScriptComponent_34de6a2852f74048adcd913b9e905a25.vbproj]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF16LE]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="utf-16"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ProjectTypeGuids>{30D016F9-3734-4E33-A861-5E7D899E18F3};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>8.0.30703</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{0307EFC9-D066-4C8A-9909-2BE8A061046E}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>My Project</AppDesignerFolder>
    <RootNamespace>ScriptComponent_34de6a2852f74048adcd913b9e905a25</RootNamespace>
    <AssemblyName>ScriptComponent_34de6a2852f74048adcd913b9e905a25</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <OptionCompare>Binary</OptionCompare>
    <OptionExplicit>On</OptionExplicit>
    <OptionStrict>On</OptionStrict>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>.\bin\Debug\</OutputPath>
    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
    <DefineDebug>true</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>false</DebugSymbols>
    <Optimize>true</Optimize>
    <OutputPath>.\bin\Release\</OutputPath>
    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
    <DefineDebug>false</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <!-- This sections specifies references for the project. -->
  <ItemGroup>
    <Reference Include="CozyRoc.SSISPlus.2014, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files (x86)\Microsoft SQL Server\120\SDK\Assemblies\CozyRoc.SSISPlus.2014.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.SqlServer.TxScript, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="System">
      <Private>False</Private>
    </Reference>
    <Reference Include="System.Data">
      <Private>False</Private>
    </Reference>
    <Reference Include="Microsoft.SqlServer.ManagedDTS">
      <Private>False</Private>
    </Reference>
    <Reference Include="System.Drawing">
      <Private>False</Private>
    </Reference>
  </ItemGroup>
  <!-- Visual Basic supports Importing namespaces (equivalent to using statements in C#).-->
  <ItemGroup>
    <Import Include="Microsoft.VisualBasic" />
    <Import Include="System" />
    <Import Include="System.Collections" />
    <Import Include="System.Data" />
    <Import Include="System.Diagnostics" />
    <Import Include="System.Windows.Forms" />
  </ItemGroup>
  <ItemGroup>
    <AppDesigner Include="My Project\" />
  </ItemGroup>
  <!-- Include the build rules for a VB project.-->
  <Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
  <!-- This section defines VSTA properties that describe the host-changable project properties. -->
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{30D016F9-3734-4E33-A861-5E7D899E18F3}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{B3A685AA-7EAF-4BC6-9940-57959FA5AC07}" ApplicationType="usd" Language="vb" TemplatesPath="" />
        <Host Name="SSIS_SC120" />
        <ProjectClient>
          <HostIdentifier>SSIS_SC120</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  <ItemGroup>
    <Compile Include="ScriptMain.vb" />
    <Compile Include="CRC32.vb" />
    <Compile Include="BufferWrapper.vb" />
    <Compile Include="ComponentWrapper.vb" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="My Project\" />
  </ItemGroup>
</Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[ScriptMain.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' CozyRoc SQL Server Integration Services user script component
'
' Copyright (c) 2006-2009 CozyRoc LLC
' 
' Permission is hereby granted, free of charge, to any person
' obtaining a copy of this software and associated documentation
' files (the "Software"), to deal in the Software without
' restriction, including without limitation the rights to use,
' copy, modify, merge, publish, distribute, sublicense, and/or sell
' copies of the Software, and to permit persons to whom the
' Software is furnished to do so, subject to the following
' conditions:
' 
' The above copyright notice and this permission notice shall be
' included in all copies or substantial portions of the Software.
' 
' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
' EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
' OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
' NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
' HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
' WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
' FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
' OTHER DEALINGS IN THE SOFTWARE.

Imports System
Imports System.ComponentModel
Imports System.Drawing.Design
Imports System.Windows.Forms
Imports System.Windows.Forms.Design
Imports System.Text

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


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


    Private Const ColumnSeparator As String = "," + vbCr


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        m_sb.Length = 0

        Dim colsCount As Integer = m_inputIndexes.Length
        For colIndex As Integer = 0 To colsCount - 1
            Dim bufIndex As Integer = m_inputIndexes(colIndex)

            If Row.Buffer.IsNull(bufIndex) Then
                Call m_sb.Append("\0")
            Else
                Call m_sb.Append(Row.Buffer(bufIndex).ToString())
            End If

            m_sb.Append("\n")
        Next

        ' Setup hash.
        m_crc32.Initialize()
        Row.Checksum = BitConverter.ToInt32(m_crc32.ComputeHash(Encoding.Unicode.GetBytes(m_sb.ToString())), 0)
    End Sub ' Input_ProcessInputRow


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

        Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)

        ' Initialize.
        m_sb = New StringBuilder()
        m_crc32 = New CRC32()

        ' Setup dynamic input columns indexes.
        Dim colsCount As Integer = input.InputColumnCollection.Count
        m_inputIndexes = New Integer(colsCount - 1) {}
        For colIndex As Integer = 0 To colsCount - 1
            m_inputIndexes(colIndex) = Me.HostComponent.BufferManager.FindColumnByLineageID( _
                input.Buffer, _
                input.InputColumnCollection(colIndex).LineageID)
        Next
    End Sub ' PreExecute


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

        Try
            If String.IsNullOrEmpty(Me.InputColumns) Then
                Throw New ApplicationException("Select input columns.")
            End If

            ' Setup input columns based on selection.
            Dim selectedCols() As String = CStr(Me.InputColumns).Split( _
                New String() {ColumnSeparator}, _
                StringSplitOptions.None)
            Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
            Dim virtInput As IDTSVirtualInput100 = input.GetVirtualInput()

            Call input.InputColumnCollection.RemoveAll()

            For Each col As String In selectedCols
                If Not String.IsNullOrEmpty(col) Then
                    Dim virtColumn As IDTSVirtualInputColumn100 = virtInput.VirtualInputColumnCollection(col)
                    Call virtInput.SetUsageType(virtColumn.LineageID, DTSUsageType.UT_READONLY)
                End If
            Next

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

        Validate = result
    End Function    'Validate


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select input columns for checksum.")> _
    <Editor(GetType(ColumnsEditor), GetType(UITypeEditor))> _
    <TypeConverter(GetType(ColumnsConverter))> _
    Public Property InputColumns() As String
        Get
            InputColumns = m_inputCols
        End Get
        Set(ByVal value As String)
            m_inputCols = value
        End Set
    End Property    ' InputColumns
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Provides multiple input columns selection
    Private Class ColumnsEditor
        Inherits UITypeEditor


        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        Public Overrides Function EditValue( _
            ByVal context As ITypeDescriptorContext, _
            ByVal provider As IServiceProvider, _
            ByVal value As Object) As Object

            Dim result As Object = value

            If Not context Is Nothing AndAlso _
                Not context.Instance Is Nothing AndAlso _
                Not context.PropertyDescriptor Is Nothing AndAlso _
                Not provider Is Nothing Then

                Dim edSvc As IWindowsFormsEditorService = CType(provider.GetService( _
                    GetType(IWindowsFormsEditorService)), _
                    IWindowsFormsEditorService)
                Dim descriptor As ICustomTypeDescriptor = CType( _
                    context.Instance, _
                    ICustomTypeDescriptor)
                Dim component As ScriptMain = CType( _
                    descriptor.GetPropertyOwner(context.PropertyDescriptor), _
                    ScriptMain)
                Dim virtInput As IDTSVirtualInput100 = component.ComponentMetaData.InputCollection(0).GetVirtualInput()

                If value Is Nothing Then
                    value = String.Empty
                End If

                ' Load selected columns.
                Dim selectedCols() As String = CStr(value).Split( _
                    New String() {ColumnSeparator}, _
                    StringSplitOptions.None)

                ' Build input columns list.
                Dim clb As CheckedListBox = New CheckedListBox()
                clb.CheckOnClick = True
                clb.BorderStyle = BorderStyle.None

                For Each virtCol As IDTSVirtualInputColumn100 In virtInput.VirtualInputColumnCollection
                    Dim selected As Boolean = ContainsString_(selectedCols, virtCol.Name)
                    Call clb.Items.Add(virtCol.Name, selected)
                Next

                Call edSvc.DropDownControl(clb)

                ' Store selected columns.
                Dim selCount As Integer = clb.CheckedItems.Count
                If selCount > 0 Then
                    selectedCols = New String(selCount - 1) {}
                    For selIndex As Integer = 0 To selCount - 1
                        Dim col As String = CStr(clb.CheckedItems(selIndex))
                        selectedCols(selIndex) = col
                    Next

                    Call Array.Sort(selectedCols)
                    result = String.Join(ColumnSeparator, selectedCols)
                End If
            End If

            EditValue = result
        End Function    ' EditValue


        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        Public Overrides Function GetEditStyle( _
            ByVal context As ITypeDescriptorContext) As UITypeEditorEditStyle

            If Not context Is Nothing AndAlso Not context.Instance Is Nothing Then
                Return UITypeEditorEditStyle.DropDown
            End If

            Return MyBase.GetEditStyle(context)
        End Function    ' GetEditStyle


#Region "Internals"
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        ' Returns true if specified string exists in array.
        Private Function ContainsString_(ByVal array() As String, ByVal str As String) As Boolean
            Dim result As Boolean = False

            For Each item As String In array
                If item = str Then
                    ' Found match.
                    result = True
                    Exit For
                End If
            Next

            ContainsString_ = result
        End Function    ' ContainsString_

#End Region ' Internals


#Region "Attributes"
#End Region ' Attributes
    End Class   ' ColumnsEditor


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' The only purpose of this class is to limit edit in grid.
    Private Class ColumnsConverter
        Inherits TypeConverter

        Public Sub New()
        End Sub ' New


        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        Public Overrides Function CanConvertFrom( _
            ByVal context As ITypeDescriptorContext, _
            ByVal sourceType As Type) As Boolean

            CanConvertFrom = False
        End Function    ' CanConvertFrom
    End Class   ' ColumnsConverter



#End Region ' Internals


#Region "Attributes"
    Private m_inputCols As String

    Private m_sb As StringBuilder
    Private m_crc32 As CRC32
    Private m_inputIndexes() As Integer
#End Region ' Attributes
End Class   ' ScriptMain
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[ComponentWrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services component wrapper
' This module defines the base class for your component
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class UserComponent
    Inherits ScriptComponentPlus

    Public Connections As New Connections(Me)
    Public Variables As New Variables(Me)

    Public Overrides Sub ProcessInput(ByVal InputID As Integer, ByVal InputName As String, ByVal Buffer As PipelineBuffer, ByVal OutputMap As OutputNameMap)

        If InputID = MyBase.ComponentMetaData.InputCollection("Input").ID Then
            Input_ProcessInput(New InputBuffer(Me, InputID, True, Buffer, OutputMap))
        End If

    End Sub

    Public Overridable Sub Input_ProcessInput(ByVal Buffer As InputBuffer)

        While Buffer.NextRow()
            Input_ProcessInputRow(Buffer)
        End While

    End Sub

    Public Overridable Sub Input_ProcessInputRow(ByVal Row As InputBuffer)

    End Sub

End Class

Public Class Connections

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

End Class

Public Class Variables

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[BufferWrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services buffer wrappers
' This module defines classes for accessing data flow buffers
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!


Option Strict Off   ' This allows usage of PipelineBuffer typed accessors.

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class InputBuffer
    Inherits ScriptBufferPlus

    Public Sub New(ByVal Component As ScriptComponent, ByVal ObjectID As Integer, ByVal IsInput As Boolean, ByVal Buffer As PipelineBuffer, ByVal OutputMap As OutputNameMap)
        MyBase.New(Component, ObjectID, IsInput, Buffer, OutputMap)
    End Sub

    Public Overrides ReadOnly Property StaticInputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public WriteOnly Property [Checksum]() As Int32
        Set
            Me(0) = Value
        End Set
    End Property
    Public WriteOnly Property [Checksum_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 Overrides ReadOnly Property StaticOutputColumns() As String()
        Get
            Return New String() {"Checksum"}
        End Get
    End Property

    Public Overloads Function NextRow() As Boolean
        NextRow = MyBase.NextRow()
    End Function

    Public Overloads Function EndOfRowset() As Boolean
        EndOfRowset = MyBase.EndOfRowset
    End Function

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[CRC32.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' CozyRoc SQL Server Integration Services user script component
'
' Copyright (c) 2006-2009 CozyRoc LLC
' 
' Permission is hereby granted, free of charge, to any person
' obtaining a copy of this software and associated documentation
' files (the "Software"), to deal in the Software without
' restriction, including without limitation the rights to use,
' copy, modify, merge, publish, distribute, sublicense, and/or sell
' copies of the Software, and to permit persons to whom the
' Software is furnished to do so, subject to the following
' conditions:
' 
' The above copyright notice and this permission notice shall be
' included in all copies or substantial portions of the Software.
' 
' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
' EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
' OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
' NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
' HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
' WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
' FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
' OTHER DEALINGS IN THE SOFTWARE.

Imports System
Imports System.Collections
Imports System.IO
Imports System.Security.Cryptography


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Calculates CRC32 hash.
' Based on code found here: http://www.algorithm-code.com/wiki/CRC32_Algorithm
Public Class CRC32
    Inherits HashAlgorithm


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Initialize the cache
    Shared Sub New()
        g_AllOnes = UInteger.MaxValue
        g_cachedCRC32Tables = Hashtable.Synchronized(New Hashtable)
        g_autoCache = True
    End Sub ' New


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Creates a CRC32 object using the DefaultPolynomial
    Public Sub New()
        Call Me.New(CRC32.DefaultPolynomial)
    End Sub ' New


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Creates a CRC32 object using the specified polynomial
    Public Sub New(ByVal aPolynomial As UInteger)
        Call Me.New(aPolynomial, CRC32.AutoCache)
    End Sub ' New


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Creates a CRC32 object using the specified polynomial
    Public Sub New(ByVal aPolynomial As UInteger, ByVal cacheTable As Boolean)
        MyBase.HashSizeValue = &H20

        m_crc32Table = DirectCast(g_cachedCRC32Tables(aPolynomial), UInteger())
        If m_crc32Table Is Nothing Then
            m_crc32Table = CRC32.BuildCRC32Table(aPolynomial)
            If cacheTable Then
                Call g_cachedCRC32Tables.Add(aPolynomial, m_crc32Table)
            End If
        End If

        Call Me.Initialize()
    End Sub ' New


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Shared Sub ClearCache()
        Call g_cachedCRC32Tables.Clear()
    End Sub ' ClearCache


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Initializes an implementation of HashAlgorithm.
    Public Overrides Sub Initialize()
        m_crc = g_AllOnes
    End Sub 'Initialize


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Protected Overrides Sub HashCore( _
        ByVal buffer As Byte(), _
        ByVal offset As Integer, _
        ByVal count As Integer)

        ' Save the text in the buffer. 
        For i As Integer = offset To count - 1
            Dim tabPtr As ULong = CULng((m_crc And &HFF) Xor buffer(i))
            m_crc >>= 8
            m_crc = m_crc Xor m_crc32Table(CInt(tabPtr))
        Next
    End Sub ' HashCore


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Protected Overrides Function HashFinal() As Byte()
        Dim result As Byte() = New Byte(4 - 1) {}

        Dim finalCRC As ULong = m_crc Xor g_AllOnes
        result(0) = CByte((finalCRC >> 24) And CULng(&HFF))
        result(1) = CByte((finalCRC >> 16) And CULng(&HFF))
        result(2) = CByte((finalCRC >> 8) And CULng(&HFF))
        result(3) = CByte(finalCRC And CULng(&HFF))

        HashFinal = result
    End Function    ' HashFinal


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Computes the hash value for the specified Stream.
    Public Function ComputeHash(ByVal stream As Stream) As Byte()
        Dim buffer As Byte() = New Byte(4096 - 1) {}

        Do While True
            Dim bytesRead As Integer = stream.Read(buffer, 0, 4096)
            If bytesRead = 0 Then
                Exit Do
            End If

            Call HashCore(buffer, 0, bytesRead)
        Loop

        ComputeHash = HashFinal()
    End Function    ' ComputeHash


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Overloaded. Computes the hash value for the input data.
    Public Function ComputeHash(ByVal buffer As Byte()) As Byte()
        ComputeHash = Me.ComputeHash(buffer, 0, buffer.Length)
    End Function    ' ComputeHash


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Computes the hash value for the input data.
    Public Function ComputeHash( _
        ByVal buffer As Byte(), _
        ByVal offset As Integer, _
        ByVal count As Integer) As Byte()

        Call Me.HashCore(buffer, offset, count)
        ComputeHash = Me.HashFinal()
    End Function    ' ComputeHash


#Region "Propeties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns the default polynomial (used in WinZip, Ethernet, etc)
    Public Shared ReadOnly Property DefaultPolynomial() As UInteger
        Get
            Return &H4C11DB7
        End Get
    End Property    ' DefaultPolynomial


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Gets or sets the auto-cache setting of this class.
    Public Shared Property AutoCache() As Boolean
        Get
            Return g_autoCache
        End Get
        Set(ByVal value As Boolean)
            g_autoCache = value
        End Set
    End Property    ' AutoCache
#End Region ' Propeties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Builds a crc32 table given a polynomial
    Protected Shared Function BuildCRC32Table(ByVal ulPolynomial As UInteger) As UInteger()
        Dim result() As UInteger = New UInteger(255) {}
        Dim dwSrc As UInteger

        ' 256 values representing ASCII character codes. 
        For i As Integer = 0 To 255
            dwSrc = CUInt(i)

            For j As Integer = 8 To 1 Step -1
                If ((dwSrc And 1) = 1) Then
                    dwSrc = (dwSrc >> 1) Xor ulPolynomial
                Else
                    dwSrc >>= 1
                End If
            Next

            result(i) = dwSrc
        Next

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


#Region "Attributes"
    Protected Shared g_AllOnes As UInteger
    Protected Shared g_cachedCRC32Tables As Hashtable
    Protected Shared g_autoCache As Boolean

    Protected m_crc32Table As UInteger()
    Private m_crc As UInteger
#End Region ' Attributes
End Class   ' CRC32
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[Project]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF16LE]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<c:Project xmlns:c="http://schemas.microsoft.com/codeprojectml/2010/08/main" xmlns:msb="http://schemas.microsoft.com/developer/msbuild/2003" runtimeVersion="4.0" schemaVersion="1.0">
	<msb:PropertyGroup>
		<msb:Language>msBuild</msb:Language>
		<msb:CodeName>ScriptComponent_34de6a2852f74048adcd913b9e905a25</msb:CodeName>
		<msb:DisplayName>ScriptComponent_34de6a2852f74048adcd913b9e905a25</msb:DisplayName>
		<msb:ProjectId>{CF646D7A-ADE9-4A01-83DD-F2214BE42912}</msb:ProjectId>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:Project Include="ScriptComponent_34de6a2852f74048adcd913b9e905a25.vbproj"/>
		<msb:Folder Include="My Project\"/>
		<msb:File Include="ScriptMain.vb"/>
		<msb:File Include="ComponentWrapper.vb"/>
		<msb:File Include="CRC32.vb"/>
		<msb:File Include="BufferWrapper.vb"/>
	</msb:ItemGroup>
</c:Project>]]></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_34de6a2852f74048adcd913b9e905a25.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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
FACkIwAAAAAWAHcFFwAWALAjAAAAAEYCggUTABYAwCMAAAAARAKNBQgBFgAYJAAAAABEAqoFEAEZ
AHgkAAAAAAYAxQUVARkAuCQAAAAABgDFBRwBGgDUJAAAAAAGAMUFIwEbAPQkAAAAABYI2AUsAR4A
CCUAAAAAFgjuBTABHgAcJQAAAAAWCPwFNAEeACQlAAAAABQAEAY5AR8AeCUAAAAABhh0ARMAIACA
JQAAAABGAgsF7QAgAEQmAAAAAEYCswYTACEA5CYAAAAABgC+Bl0BIQDMJwAAAAAGCNIGcQAiAOQn
AAAAAAYI4wZjASIA8CcAAAAABhh0ARMAIwD4JwAAAABGArMHeAEjAKwpAAAAAEYC5AeBASYA0CkA
AAAAAQDxB4gBJwAIKgAAAAAGGHQBEwApABAqAAAAAEYCGQiPASkAAAABAHACAAABAKkCAAABAKkC
AAABAO8DAAACAPkDAAADAAIEAAAEAAoEAAAFABEEAAABAD8EAAABAD8EAAABAOYEAAACAO4EAAAD
AAoEAAAEABEEAAABAAoEAAABACEFAAABAO8DAAABAO8DAAABAGAFAAABAGAFAAACAGwFAAABAJYF
AAACAJ0FAAADAKQFAAABANEFAAABAJYFAAABAJYFAAACAJ0FAAADAKQFAAABAAoGAAABACAGAAAB
ACEFAAABAMcGAAABAAoGAAABAL0HAAACAMUHAAADAAoGAAABAL0HAAABAAEIAAACAAcIAAABAL0H
AAACACgICQB0ARMAqQB0AZcBuQB0AaYBEQB0ARMAwQB0ARMAJAB0ARMALAB0ARMANAB0ARMAPAB0
ARMAJADGAosALADGAosANADGAosAPADGAosAyQB0ARMA0QB0ARMA2QB0AWMB4QBzCUACGQBpAmMA
GQByAmgAKQCUCU0CGQCLAnEA8QCwCV0CGQB0ARMA+QB0AW0CRAAPA5AATADaCYsATADkCeoCTAB0
ARMAAQF0AcUAOQB0Aa8AOQAuCgQDOQA3CsAAGQF0AWMBIQFxBMoAIQF5BMoAKQF0AcUAWQB0ARMA
QQDiChEDMQEPCxcDOQEwCx0DQQE5C2gAcQB0ARMAcQBACyQDYQB0ARMAYQBNCysDcQAwCy4DcQBi
CzYDcQBmCxMAaQBxC0oDeQB2C8AAOQCBC20DSQCMC3IDeQCTC3cDSQAwC30DWQGjC4IDeQCLAnEA
WQGvC4gDYQHFC44DQQCzBhMAeQB0ARMAQQHqC5wDaQEEDGgAWQAgDKIDcQFHDKgDQQGBC2gAaQEw
C64DgQFsDGgAeQF6DLUDCQHIDMQDoQF0AWMBCQH+DMkDQQEEDdMDaQEUDRMAiQFCDdkDsQEwC98D
kQFsDGgAiQFwDeYDwQGJDe4DmQGZDXEAwQGlDRcAyQF0ARMA0QF0AWMB2QF0ARwE4QF0AXQE6QF0
AWMBgQB0ARMAiQDVDmoFiQD1Dm4FkQAMD3QF+QEXD3oFCQEoD1UBGQKLAoEF8QF0ARMA8QE6D8UA
IQJfD4YFsQFvD40FCQJ9D2oFkQGJD3EA8QGjD5MFMQJiC5kFCQKtD8oAOQLCDxMAAQLSD58F8QH4
D6YFSQIEDGgASQIwC30DUQIPEKwFCQEUELgFgQDkB4EBWQIjEOYFoQB0ARMAYQJ0AcAAaQJ0ARMA
cQJ0AWMBDgA8AFgBKQCDAA4CLgCDA/YFLgCLA/8FLgCTAx4GQAATAJ0BQAArAMUBQwAbAKwBQwAT
AJ0BSQCDAB8CYwATAJ0BYwAbAKwBaQCDADMCgAArAMUBgwB7AMUBgwAbAKwBgwBzAMUBiQCDAPoB
oAArAMUBowDDAHUCowATAJ0BwAArAMUBwwDrAPkCwwATAJ0B4AArAMUB4wAjAfkCAAETAJ0BAAEr
AMUBAwEjAfkCIAErAMUBIAETAJ0BQAETAJ0BQAErAMUBYAETAJ0BYAErAMUBgAErAMUBgwGTAg4E
gwGLAsUBgwEjAfkCiQGjAnwEiQGbAiIEiQGrAkIFoAErAMUBwAErAMUBwAETAJ0B4AErAMUBAAIT
AJ0BAAIrAMUBgAMjAfkCoAMjAfkC5gHrAfAB9QFFAkkCVAJZAmgCaALwAv8CCgNFAkUCPANCA1ID
WgNaA18DRQJjA5UDuwP1A1kCvwXhBe0FRQIEAAEABgAFAAcABgALAAoADAAMAAAAmAFPAAAAUQJU
AAAAAAJZAAAAXQJeAAAAGQOYAAAAhQTOAAAAmATTAAAAoQTXAAAAsQTOAAAAhwZNAQAAmQZRAQAA
Ngd0AQIABAADAAIABQAFAAIABgAHAAIABwAJAAIADwALAAIAEgANAAEAEwAPAAEAFAARAAIAFQAT
AAIAKQAVAAIAKgAXAAEAKwAXAAIAMQAZAAEAMgAZAHUAdQCIAMoB0QHYAd8B1wLeAjMDBIAAAAAA
AAAAAAAAAAAAAAAAtQAAAAQAAAAAAAAAAAAAAAEACgAAAAAACgAAAAAAAAAAAAAACgATAAAAAAAB
AAAAAAAAAAAAAACdACUDAAAAAAwAAAAAAAAAAAAAAKYAYwMAAAAADAAAAAAAAAAAAAAApgCxAwAA
AAAEAAAAAAAAAAAAAAAKAEMHAAAAAAQAAAAAAAAAAAAAAAEAoQEAAAAADAAAAAAAAAAAAAAApgB8
CgAAAAAEAAAAAAAAAAAAAAABAFgOAAAAAAUABAAGAAQADQAMAA4ADAAAABAADACnAgAAEAAZAKcC
AAAAABsApwItAGMCLQDlAtcAtAUAAAAAADxNb2R1bGU+AG1zY29ybGliAE1pY3Jvc29mdC5WaXN1
YWxCYXNpYwBNeUFwcGxpY2F0aW9uAFNjcmlwdENvbXBvbmVudF8zNGRlNmEyODUyZjc0MDQ4YWRj
ZDkxM2I5ZTkwNWEyNS5NeQBNeUNvbXB1dGVyAE15UHJvamVjdABNeVdlYlNlcnZpY2VzAFRocmVh
ZFNhZmVPYmplY3RQcm92aWRlcmAxAElucHV0QnVmZmVyAFNjcmlwdENvbXBvbmVudF8zNGRlNmEy
ODUyZjc0MDQ4YWRjZDkxM2I5ZTkwNWEyNQBVc2VyQ29tcG9uZW50AENvbm5lY3Rpb25zAFZhcmlh
YmxlcwBDUkMzMgBTY3JpcHRNYWluAENvbHVtbnNFZGl0b3IAQ29sdW1uc0NvbnZlcnRlcgBNaWNy
b3NvZnQuVmlzdWFsQmFzaWMuQXBwbGljYXRpb25TZXJ2aWNlcwBBcHBsaWNhdGlvbkJhc2UALmN0
b3IATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkRldmljZXMAQ29tcHV0ZXIAU3lzdGVtAE9iamVjdAAu
Y2N0b3IAZ2V0X0NvbXB1dGVyAG1fQ29tcHV0ZXJPYmplY3RQcm92aWRlcgBnZXRfQXBwbGljYXRp
b24AbV9BcHBPYmplY3RQcm92aWRlcgBVc2VyAGdldF9Vc2VyAG1fVXNlck9iamVjdFByb3ZpZGVy
AGdldF9XZWJTZXJ2aWNlcwBtX015V2ViU2VydmljZXNPYmplY3RQcm92aWRlcgBBcHBsaWNhdGlv
bgBXZWJTZXJ2aWNlcwBFcXVhbHMAbwBHZXRIYXNoQ29kZQBUeXBlAEdldFR5cGUAVG9TdHJpbmcA
Q3JlYXRlX19JbnN0YW5jZV9fAFQAaW5zdGFuY2UARGlzcG9zZV9fSW5zdGFuY2VfXwBnZXRfR2V0
SW5zdGFuY2UATWljcm9zb2Z0LlZpc3VhbEJhc2ljLk15U2VydmljZXMuSW50ZXJuYWwAQ29udGV4
dFZhbHVlYDEAbV9Db250ZXh0AEdldEluc3RhbmNlAENvenlSb2MuU1NJU1BsdXMuMjAxNABDb3p5
Um9jLlNxbFNlcnZlci5TU0lTAFNjcmlwdEJ1ZmZlclBsdXMATWljcm9zb2Z0LlNxbFNlcnZlci5U
eFNjcmlwdABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5QaXBlbGluZQBTY3JpcHRDb21wb25lbnQA
TWljcm9zb2Z0LlNxbFNlcnZlci5QaXBlbGluZUhvc3QAUGlwZWxpbmVCdWZmZXIAT3V0cHV0TmFt
ZU1hcABDb21wb25lbnQAT2JqZWN0SUQASXNJbnB1dABCdWZmZXIAT3V0cHV0TWFwAGdldF9TdGF0
aWNJbnB1dENvbHVtbnMAc2V0X0NoZWNrc3VtAFZhbHVlAHNldF9DaGVja3N1bV9Jc051bGwAZ2V0
X1N0YXRpY091dHB1dENvbHVtbnMATmV4dFJvdwBFbmRPZlJvd3NldABTdGF0aWNJbnB1dENvbHVt
bnMAQ2hlY2tzdW0AQ2hlY2tzdW1fSXNOdWxsAFN0YXRpY091dHB1dENvbHVtbnMAU2NyaXB0Q29t
cG9uZW50UGx1cwBQcm9jZXNzSW5wdXQASW5wdXRJRABJbnB1dE5hbWUASW5wdXRfUHJvY2Vzc0lu
cHV0AElucHV0X1Byb2Nlc3NJbnB1dFJvdwBSb3cAUGFyZW50Q29tcG9uZW50AFN5c3RlbS5TZWN1
cml0eS5DcnlwdG9ncmFwaHkASGFzaEFsZ29yaXRobQBhUG9seW5vbWlhbABjYWNoZVRhYmxlAENs
ZWFyQ2FjaGUASW5pdGlhbGl6ZQBIYXNoQ29yZQBidWZmZXIAb2Zmc2V0AGNvdW50AEhhc2hGaW5h
bABTeXN0ZW0uSU8AU3RyZWFtAENvbXB1dGVIYXNoAHN0cmVhbQBnZXRfRGVmYXVsdFBvbHlub21p
YWwAZ2V0X0F1dG9DYWNoZQBzZXRfQXV0b0NhY2hlAHZhbHVlAEJ1aWxkQ1JDMzJUYWJsZQB1bFBv
bHlub21pYWwAZ19BbGxPbmVzAFN5c3RlbS5Db2xsZWN0aW9ucwBIYXNodGFibGUAZ19jYWNoZWRD
UkMzMlRhYmxlcwBnX2F1dG9DYWNoZQBtX2NyYzMyVGFibGUAbV9jcmMARGVmYXVsdFBvbHlub21p
YWwAQXV0b0NhY2hlAENvbHVtblNlcGFyYXRvcgBQcmVFeGVjdXRlAFZhbGlkYXRlAGVyck1lc3Nh
Z2UAZ2V0X0lucHV0Q29sdW1ucwBzZXRfSW5wdXRDb2x1bW5zAG1faW5wdXRDb2xzAFN5c3RlbS5U
ZXh0AFN0cmluZ0J1aWxkZXIAbV9zYgBtX2NyYzMyAG1faW5wdXRJbmRleGVzAElucHV0Q29sdW1u
cwBTeXN0ZW0uRHJhd2luZwBTeXN0ZW0uRHJhd2luZy5EZXNpZ24AVUlUeXBlRWRpdG9yAFN5c3Rl
bS5Db21wb25lbnRNb2RlbABJVHlwZURlc2NyaXB0b3JDb250ZXh0AElTZXJ2aWNlUHJvdmlkZXIA
RWRpdFZhbHVlAGNvbnRleHQAcHJvdmlkZXIAVUlUeXBlRWRpdG9yRWRpdFN0eWxlAEdldEVkaXRT
dHlsZQBDb250YWluc1N0cmluZ18AYXJyYXkAc3RyAFR5cGVDb252ZXJ0ZXIAQ2FuQ29udmVydEZy
b20Ac291cmNlVHlwZQBFZGl0b3JCcm93c2FibGVBdHRyaWJ1dGUARWRpdG9yQnJvd3NhYmxlU3Rh
dGUAU3lzdGVtLkNvZGVEb20uQ29tcGlsZXIAR2VuZXJhdGVkQ29kZUF0dHJpYnV0ZQBTeXN0ZW0u
RGlhZ25vc3RpY3MARGVidWdnZXJIaWRkZW5BdHRyaWJ1dGUATWljcm9zb2Z0LlZpc3VhbEJhc2lj
LkNvbXBpbGVyU2VydmljZXMAU3RhbmRhcmRNb2R1bGVBdHRyaWJ1dGUASGlkZU1vZHVsZU5hbWVB
dHRyaWJ1dGUAU3lzdGVtLkNvbXBvbmVudE1vZGVsLkRlc2lnbgBIZWxwS2V5d29yZEF0dHJpYnV0
ZQBTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzAFJ1bnRpbWVIZWxwZXJzAEdldE9iamVj
dFZhbHVlAFJ1bnRpbWVUeXBlSGFuZGxlAEdldFR5cGVGcm9tSGFuZGxlAEFjdGl2YXRvcgBDcmVh
dGVJbnN0YW5jZQBNeUdyb3VwQ29sbGVjdGlvbkF0dHJpYnV0ZQBnZXRfVmFsdWUAc2V0X1ZhbHVl
AFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcwBDb21WaXNpYmxlQXR0cmlidXRlAFN0cmlu
ZwBJbnQzMgBzZXRfSXRlbQBTZXROdWxsAEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24AU2NyaXB0
QnVmZmVyAENMU0NvbXBsaWFudEF0dHJpYnV0ZQBNaWNyb3NvZnQuU3FsU2VydmVyLkRUU1BpcGVs
aW5lV3JhcABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5QaXBlbGluZS5XcmFwcGVyAElEVFNDb21w
b25lbnRNZXRhRGF0YTEwMABnZXRfQ29tcG9uZW50TWV0YURhdGEASURUU0lucHV0Q29sbGVjdGlv
bjEwMABnZXRfSW5wdXRDb2xsZWN0aW9uAElEVFNJbnB1dDEwMABnZXRfSXRlbQBnZXRfSUQAU3lu
Y2hyb25pemVkAEhhc2hTaXplVmFsdWUAVUludDMyAEFkZABDbGVhcgBCeXRlAFJlYWQAc2V0X0xl
bmd0aABnZXRfQnVmZmVyAElzTnVsbABBcHBlbmQARW5jb2RpbmcAZ2V0X1VuaWNvZGUAR2V0Qnl0
ZXMAQml0Q29udmVydGVyAFRvSW50MzIASURUU0lucHV0Q29sdW1uQ29sbGVjdGlvbjEwMABnZXRf
SW5wdXRDb2x1bW5Db2xsZWN0aW9uAGdldF9Db3VudABQaXBlbGluZUNvbXBvbmVudABnZXRfSG9z
dENvbXBvbmVudABJRFRTQnVmZmVyTWFuYWdlcjEwMABnZXRfQnVmZmVyTWFuYWdlcgBJRFRTSW5w
dXRDb2x1bW4xMDAAZ2V0X0xpbmVhZ2VJRABGaW5kQ29sdW1uQnlMaW5lYWdlSUQASURUU1ZpcnR1
YWxJbnB1dDEwMABJRFRTVmlydHVhbElucHV0Q29sdW1uMTAwAEV4Y2VwdGlvbgBJc051bGxPckVt
cHR5AEFwcGxpY2F0aW9uRXhjZXB0aW9uAFN0cmluZ1NwbGl0T3B0aW9ucwBTcGxpdABHZXRWaXJ0
dWFsSW5wdXQAUmVtb3ZlQWxsAElEVFNWaXJ0dWFsSW5wdXRDb2x1bW5Db2xsZWN0aW9uMTAwAGdl
dF9WaXJ0dWFsSW5wdXRDb2x1bW5Db2xsZWN0aW9uAERUU1VzYWdlVHlwZQBTZXRVc2FnZVR5cGUA
UHJvamVjdERhdGEAU2V0UHJvamVjdEVycm9yAGdldF9NZXNzYWdlAENsZWFyUHJvamVjdEVycm9y
AFNTSVNTY3JpcHRDb21wb25lbnRFbnRyeVBvaW50QXR0cmlidXRlAENvenlSb2MuU3FsU2VydmVy
LlNTSVMuQXR0cmlidXRlcwBWYWxpZGF0ZVByb3BlcnRpZXNBdHRyaWJ1dGUAVHlwZUNvbnZlcnRl
ckF0dHJpYnV0ZQBFZGl0b3JBdHRyaWJ1dGUARGVzY3JpcHRpb25BdHRyaWJ1dGUAU3lzdGVtLldp
bmRvd3MuRm9ybXMAQ2hlY2tlZExpc3RCb3gASUN1c3RvbVR5cGVEZXNjcmlwdG9yAFN5c3RlbS5X
aW5kb3dzLkZvcm1zLkRlc2lnbgBJV2luZG93c0Zvcm1zRWRpdG9yU2VydmljZQBJRW51bWVyYXRv
cgBnZXRfSW5zdGFuY2UAUHJvcGVydHlEZXNjcmlwdG9yAGdldF9Qcm9wZXJ0eURlc2NyaXB0b3IA
R2V0U2VydmljZQBHZXRQcm9wZXJ0eU93bmVyAEVtcHR5AENvbnZlcnNpb25zAHNldF9DaGVja09u
Q2xpY2sATGlzdEJveABCb3JkZXJTdHlsZQBzZXRfQm9yZGVyU3R5bGUAR2V0RW51bWVyYXRvcgBn
ZXRfQ3VycmVudABnZXRfTmFtZQBPYmplY3RDb2xsZWN0aW9uAGdldF9JdGVtcwBNb3ZlTmV4dABJ
RGlzcG9zYWJsZQBEaXNwb3NlAENvbnRyb2wARHJvcERvd25Db250cm9sAENoZWNrZWRJdGVtQ29s
bGVjdGlvbgBnZXRfQ2hlY2tlZEl0ZW1zAEFycmF5AFNvcnQASm9pbgBPcGVyYXRvcnMAQ29tcGFy
ZVN0cmluZwBDb21waWxhdGlvblJlbGF4YXRpb25zQXR0cmlidXRlAFJ1bnRpbWVDb21wYXRpYmls
aXR5QXR0cmlidXRlAFN5c3RlbS5SdW50aW1lLlZlcnNpb25pbmcAVGFyZ2V0RnJhbWV3b3JrQXR0
cmlidXRlAFNjcmlwdENvbXBvbmVudF8zNGRlNmEyODUyZjc0MDQ4YWRjZDkxM2I5ZTkwNWEyNS5k
bGwAAACAm0kAcwBOAHUAbABsACAAcAByAG8AcABlAHIAdAB5ACAAYwBhAG4AbgBvAHQAIABiAGUA
IABzAGUAdAAgAHQAbwAgAEYAYQBsAHMAZQAuACAAQQBzAHMAaQBnAG4AIABhACAAdgBhAGwAdQBl
ACAAdABvACAAdABoAGUAIABjAG8AbAB1AG0AbgAgAGkAbgBzAHQAZQBhAGQALgAAEUMAaABlAGMA
awBzAHUAbQAAC0kAbgBwAHUAdAAABVwAMAAABVwAbgAAK1MAZQBsAGUAYwB0ACAAaQBuAHAAdQB0
ACAAYwBvAGwAdQBtAG4AcwAuAAAFLAANAAAAAAeITgWIxNRBiaxIOMPnrP4ACLd6XFYZNOCJCLA/
X38R1Qo6AyAAAQMAAAEEAAASDAcGFRIYARIMBAAAEggHBhUSGAESCAQAABIRBwYVEhgBEhEEAAAS
FAcGFRIYARIUBAgAEgwECAASCAQIABIRBAgAEhQEIAECHAMgAAgEIAASFQMgAA4CHgAHEAEBHgAe
AAcwAQEBEB4AAhMABCAAEwAHBhUSGQETAAQoABMACBbPSQu4DDTqCImEXc2AgMyRCyAFARIhCAIS
JRIpBCAAHQ4EIAEBCAQgAQECAyAAAgQoAB0OAygACAMoAAIDBhIkAwYSKAkgBAEIDhIlEikFIAEB
EhwDBhIhBSABARIhBCABAQkFIAIBCQIHIAMBHQUICAQgAB0FBiABHQUSNQYgAR0FHQUIIAMdBR0F
CAgDAAAJAwAAAgQAAQECBQABHQkJAgYJAwYSOQIGAgMGHQkDCAAJAwgAAgIGDgQsAA0ABSABAhAO
BCABAQ4DBhI9AwYSLAMGHQgDKAAOCCADHBJFEkkcBiABEU0SRQYgAgIdDg4HIAICEkUSFQUgAQER
WQgBAAEAAAAAAAUgAgEODhgBAApNeVRlbXBsYXRlCDEwLjAuMC4wAAAEAQAAAAYVEhgBEgwGFRIY
ARIIBhUSGAESEQYVEhgBEhQEBwESDAQHARIIBAcBEhEEBwESFBMBAA5NeS5XZWJTZXJ2aWNlcwAA
EAEAC015LkNvbXB1dGVyAAATAQAOTXkuQXBwbGljYXRpb24AAAwBAAdNeS5Vc2VyAAAEAAEcHAMH
AQIDBwEIBgABEhURdQQHARIVAwcBDgUQAQAeAAQKAR4ABAcBHgAHIAQBDg4ODmEBADRTeXN0ZW0u
V2ViLlNlcnZpY2VzLlByb3RvY29scy5Tb2FwSHR0cENsaWVudFByb3RvY29sEkNyZWF0ZV9fSW5z
dGFuY2VfXxNEaXNwb3NlX19JbnN0YW5jZV9fAAAABhUSGAETAAYVEhkBEwAECgETAAUgAQETAAgH
AxMAEwATAAUBAAAAAAQHAR0OBSACAQgcBgcCHQ4dDgUgABKAmQUgABKAnQYgARKAoRwGAAESORI5
AgYIBCABHBwCHQkFIAIBHBwFBwMICwgHBwMLHQUdBQcgAwgdBQgIBwcDHQUdBQgEBwEdBQMHAQkJ
BwUdCQkdCQgIBCAAEiUEIAECCAUgARI9DgQgARwIBQAAEoCtBSABHQUOBgACCB0FCAYHBAgICAgF
IAASgLUFIAASgLkFIAASgL0GIAESgMEcBSACCAgICAcECBKAoQgIBAABAg4JIAIdDh0OEYDVBSAA
EoDFBSAAEoDZBiABEoDJHAcgAggIEYDdBgABARKAzRgHCwICEoChHQ4SgMUOEoDJEoDNHQ4IHQ4N
AQAIVmFsaWRhdGUAAAUgAQESFVEBAExTY3JpcHRDb21wb25lbnRfMzRkZTZhMjg1MmY3NDA0OGFk
Y2Q5MTNiOWU5MDVhMjUuU2NyaXB0TWFpbitDb2x1bW5zQ29udmVydGVyAAAHIAIBEhUSFYDEAQBJ
U2NyaXB0Q29tcG9uZW50XzM0ZGU2YTI4NTJmNzQwNDhhZGNkOTEzYjllOTA1YTI1LlNjcmlwdE1h
aW4rQ29sdW1uc0VkaXRvcnVTeXN0ZW0uRHJhd2luZy5EZXNpZ24uVUlUeXBlRWRpdG9yLCBTeXN0
ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRv
a2VuPWIwM2Y1ZjdmMTFkNTBhM2EAACcBACJTZWxlY3QgaW5wdXQgY29sdW1ucyBmb3IgY2hlY2tz
dW0uAAADIAAcBSAAEoEJBSABHBIVBiABHBKBCQQAAQ4cBiABARGBFQUgABKBBQUgABKBGQUgAggc
AgYgAQESgSEFIAASgSUHEAEBAR0eAAMKAQ4GAAIODh0OIQcQHBwSgPkSMBKA/RKBAQgdDhKAxQIS
gMkOCB0OEoEFCAQHARFNBgADCA4OAggHBQICDggdDggBAAgAAAAAAB4BAAEAVAIWV3JhcE5vbkV4
Y2VwdGlvblRocm93cwFHAQAaLk5FVEZyYW1ld29yayxWZXJzaW9uPXY0LjABAFQOFEZyYW1ld29y
a0Rpc3BsYXlOYW1lEC5ORVQgRnJhbWV3b3JrIDQAAGBQAAAAAAAAAAAAAH5QAAAAIAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABwUAAAAAAAAAAAAAAAAAAAAABfQ29yRGxsTWFpbgBtc2NvcmVlLmRsbAAA
AAAA/yUAIAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAQAAAAGAAAgAAA
AAAAAAAAAAAAAAAAAQABAAAAMAAAgAAAAAAAAAAAAAAAAAAAAQAAAAAASAAAAFhgAADsAgAAAAAA
AAAAAADsAjQAAABWAFMAXwBWAEUAUgBTAEkATwBOAF8ASQBOAEYATwAAAAAAvQTv/gAAAQAAAAAA
AAAAAAAAAAAAAAAAPwAAAAAAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAEQAAAABAFYAYQByAEYAaQBs
AGUASQBuAGYAbwAAAAAAJAAEAAAAVAByAGEAbgBzAGwAYQB0AGkAbwBuAAAAAAAAALAETAIAAAEA
UwB0AHIAaQBuAGcARgBpAGwAZQBJAG4AZgBvAAAAKAIAAAEAMAAwADAAMAAwADQAYgAwAAAALAAC
AAEARgBpAGwAZQBEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAAAACAAAAAwAAgAAQBGAGkAbABlAFYA
ZQByAHMAaQBvAG4AAAAAADAALgAwAC4AMAAuADAAAACMADUAAQBJAG4AdABlAHIAbgBhAGwATgBh
AG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AMwA0AGQAZQA2AGEAMgA4ADUA
MgBmADcANAAwADQAOABhAGQAYwBkADkAMQAzAGIAOQBlADkAMAA1AGEAMgA1AC4AZABsAGwAAAAA
ACgAAgABAEwAZQBnAGEAbABDAG8AcAB5AHIAaQBnAGgAdAAAACAAAACUADUAAQBPAHIAaQBnAGkA
bgBhAGwARgBpAGwAZQBuAGEAbQBlAAAAUwBjAHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwAz
ADQAZABlADYAYQAyADgANQAyAGYANwA0ADAANAA4AGEAZABjAGQAOQAxADMAYgA5AGUAOQAwADUA
YQAyADUALgBkAGwAbAAAAAAANAAIAAEAUAByAG8AZAB1AGMAdABWAGUAcgBzAGkAbwBuAAAAMAAu
ADAALgAwAC4AMAAAADgACAABAEEAcwBzAGUAbQBiAGwAeQAgAFYAZQByAHMAaQBvAG4AAAAwAC4A
MAAuADAALgAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAADAAAAJAwAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></arrayElement></arrayElements></property><property id="9" name="UserComponentTypeName" dataType="System.String">CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus.2014, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea</property><property id="11" name="VSTAProjectName" dataType="System.String" description="Specifies the name of the Microsoft Visual Studio Tools for Applications project. Project names must be unique within a package." typeConverter="NOTBROWSABLE">ScriptComponent_34de6a2852f74048adcd913b9e905a25</property><property id="12" name="ScriptLanguage" dataType="System.String" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91">VisualBasic</property></properties><inputs><input id="14" name="Input" hasSideEffects="true"></input></inputs><outputs><output id="18" name="Output" synchronousInputId="14"><outputColumns><outputColumn id="19" name="Checksum" lineageId="19" dataType="i4" /></outputColumns><externalMetadataColumns /></output></outputs></component>