<component id="37" name="Script Component Plus" componentClassID="{874F7595-FB5F-40FF-96AF-FBFF8250E3EF}" description="Executes a custom script" localeId="1033" version="7" contactInfo="Executes a custom script.;Microsoft Corporation;Microsoft SqlServer v9; © 2004 Microsoft Corporation; All Rights Reserved; http://www.microsoft.com/sql/support;0"><properties><property id="41" 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[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[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>{6A9E0FC6-2FAD-43A9-9955-0632A69EAF29}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>My Project</AppDesignerFolder>
    <RootNamespace>ScriptComponent_34de6a2852f74048adcd913b9e905a25</RootNamespace>
    <AssemblyName>ScriptComponent_34de6a2852f74048adcd913b9e905a25</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>.\bin\Debug\</OutputPath>
    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
    <DefineDebug>true</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>false</DebugSymbols>
    <Optimize>true</Optimize>
    <OutputPath>.\bin\Release\</OutputPath>
    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
    <DefineDebug>false</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <!-- This sections specifies references for the project. -->
  <ItemGroup>
    <Reference Include="CozyRoc.SSISPlus.2012, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files (x86)\Microsoft SQL Server\110\SDK\Assemblies\CozyRoc.SSISPlus.2012.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.SqlServer.TxScript, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Drawing" />
  </ItemGroup>
  <!-- Visual Basic supports Importing namespaces (equivalent to using statements in C#).-->
  <ItemGroup>
    <Import Include="Microsoft.VisualBasic" />
    <Import Include="System" />
    <Import Include="System.Collections" />
    <Import Include="System.Data" />
    <Import Include="System.Diagnostics" />
    <Import Include="System.Windows.Forms" />
  </ItemGroup>
  <ItemGroup>
    <AppDesigner Include="My Project\" />
  </ItemGroup>
  <!-- Include the build rules for a VB project.-->
  <Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
  <!-- This section defines VSTA properties that describe the host-changable project properties. -->
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{30D016F9-3734-4E33-A861-5E7D899E18F3}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{B3A685AA-7EAF-4BC6-9940-57959FA5AC07}" ApplicationType="usd" Language="vb" TemplatesPath="" DebugInfoExeName="devenv.exe" DebugInfoCommandLine="/vstaHostDebugUri:&quot;vstadebug70062647-d5c5-4509-8473-d3c908b480b6/ab047384-f041-4d39-95f1-f74975b7328c&quot;" />
        <Host Name="SSIS_SC110" />
        <ProjectClient>
          <HostIdentifier>SSIS_SC110</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>
  <PropertyGroup>
    <OptionCompare>Binary</OptionCompare>
  </PropertyGroup>
  <PropertyGroup>
    <OptionExplicit>On</OptionExplicit>
  </PropertyGroup>
  <PropertyGroup>
    <OptionStrict>On</OptionStrict>
  </PropertyGroup>
</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()

                ' 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 inputCol As IDTSVirtualInputColumn100 In virtInput.VirtualInputColumnCollection
                    Dim selected As Boolean = ContainsString_(selectedCols, inputCol.Name)
                    Call clb.Items.Add(inputCol.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 = String.Empty

    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[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:ProjectId>{4D3EF5C3-9C87-428C-8317-48C1DEC92833}</msb:ProjectId>
		<msb:NoContent>Reference;Import;Folder</msb:NoContent>
		<msb:Language>msBuild</msb:Language>
		<msb:DisplayName>ScriptComponent_34de6a2852f74048adcd913b9e905a25</msb:DisplayName>
		<msb:CodeName>ScriptComponent_34de6a2852f74048adcd913b9e905a25</msb:CodeName>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:File Include="CRC32.vb"/>
		<msb:File Include="ScriptMain.vb"/>
		<msb:File Include="ComponentWrapper.vb"/>
		<msb:File Include="BufferWrapper.vb"/>
		<msb:Folder Include="My Project\"/>
		<msb:Project Include="ScriptComponent_34de6a2852f74048adcd913b9e905a25.vbproj"/>
	</msb:ItemGroup>
</c:Project>]]></arrayElement></arrayElements></property><property id="42" 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[TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v
ZGUuDQ0KJAAAAAAAAABQRQAATAEDABexWVAAAAAAAAAAAOAAAiELAQgAADIAAAAGAAAAAAAAjlAA
AAAgAAAAYAAAAABAAAAgAAAAAgAABAAAAAAAAAAEAAAAAAAAAACgAAAAAgAAAAAAAAIAQIUAABAA
ABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAADxQAABPAAAAAGAAAEgDAAAAAAAAAAAAAAAAAAAA
AAAAAIAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAAlDAAAAAgAAAAMgAAAAIA
AAAAAAAAAAAAAAAAACAAAGAucnNyYwAAAEgDAAAAYAAAAAQAAAA0AAAAAAAAAAAAAAAAAABAAABA
LnJlbG9jAAAMAAAAAIAAAAACAAAAOAAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAABw
UAAAAAAAAEgAAAACAAUAJCoAABgmAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4CKAEAAAoqHgIoBAAACiqmcwYAAAqAAQAABHMHAAAKgAIA
AARzCAAACoADAAAEcwkAAAqABAAABCoAABMwAQALAAAAAQAAEX4BAAAEbwoAAAoqABMwAQALAAAA
AgAAEX4CAAAEbwsAAAoqABMwAQALAAAAAwAAEX4DAAAEbwwAAAoqABMwAQALAAAABAAAEX4EAAAE
bw0AAAoqABMwAgANAAAABQAAEQIDKBEAAAooEgAACioAAAATMAEABwAAAAYAABECKBMAAAoqABMw
AQALAAAABwAAEdAFAAACKBQAAAoqABMwAQAHAAAACAAAEQIoFQAACioAEzABABAAAAAJAAARAowB
AAAbLQYoAQAAKyoCKhMwAgAQAAAACgAAEQMSAP4VAgAAGwaBAgAAGyoeAigXAAAKKhMwAgAoAAAA
CwAAEQJ7GQAACm8aAAAKCweMAwAAGy0SKAIAACsLAnsZAAAKB28bAAAKBypKAigXAAAKAnMcAAAK
fRkAAAoqADoCAwQFDgQOBSgeAAAKKgATMAEABwAAAAwAABEWjSEAAAEqADoCFgOMIgAAAW8fAAAK
KgBiAywJAhZvIAAACisLcgEAAHBzIQAACnoqAAAAEzADABEAAAANAAARF40hAAABCwcWcp4AAHCi
ByoAAAATMAEACQAAAA4AABECKCIAAAoKBioAAAATMAEACQAAAA8AABECKCMAAAoKBioAAAB+Aigl
AAAKAgJzHAAABn0GAAAEAgJzHQAABn0HAAAEKr4DAigmAAAKbycAAApysAAAcG8oAAAKbykAAAoz
EQICAxcFDgRzEQAABm8aAAAGKkorBwIDbxsAAAYDbxYAAAYt8SoABioAADoCKBcAAAoCA30IAAAE
KgA6AigXAAAKAgN9CQAABCoAchWACgAABHMqAAAKKCsAAAqACwAABBeADAAABCoAAAAyAigpAAAG
KCAAAAYqAAAANgIDKCoAAAYoIQAABioAABMwAwBdAAAAAAAAAAIoLAAACgIfIH0tAAAKAn4LAAAE
A4wpAAABby4AAAp0CgAAG30NAAAEAnsNAAAELSUCAygsAAAGfQ0AAAQELBZ+CwAABAOMKQAAAQJ7
DQAABG8vAAAKAm8jAAAGKgAAAC5+CwAABG8wAAAKKjICfgoAAAR9DgAABCoAAAATMAQASgAAABAA
ABEEBRfaDAorPQJ7DgAABG4g/wAAAGpfAwaRbmG6CwICew4AAAQeZH0OAAAEAgJ7DgAABAJ7DQAA
BAeElWF9DgAABAYX1goGCDG/KgAAEzAEAFEAAAARAAARGo0qAAABDAJ7DgAABH4KAAAEYW4KCBYG
HxhkIP8AAABqX4acCBcGHxBkIP8AAABqX4acCBgGHmQg/wAAAGpfhpwIGQYg/wAAAGpfhpwICwcq
AAAAEzAEADEAAAASAAARIAAQAACNKgAAAQoDBhYgABAAAG8xAAAKDAgWLgsCBhYIbyQAAAYr4wJv
JQAABgsHKgAAABMwBAAOAAAAEwAAEQIDFgOOt28oAAAGCgYqAAATMAQAEgAAABQAABECAwQFbyQA
AAYCbyUAAAYKBioAABMwAQAGAAAAFQAAESC3HcEEKgAAEzABAAYAAAAWAAARfgwAAAQqAAAeAoAM
AAAEKhMwAwBHAAAAFwAAESAAAQAAjSkAAAEMFg0JuAseEwQHbhdqXxdqMwgHF2QCYQsrBAcXZAsR
BBXWEwQRBBcv4AgJB54JF9YNCSD/AAAAMcoICgYqAEoCKBgAAAYCfjIAAAp9EAAABCoAEzAEALUA
AAAYAAARAnsRAAAEFm8zAAAKAnsTAAAEjrcKFgYX2g0MK1wCexMAAAQIlAsDbzQAAAoHbzUAAAos
EwJ7EQAABHK8AABwbzYAAAomKx0CexEAAAQDbzQAAAoHbzcAAApvFQAACm82AAAKJgJ7EQAABHLC
AABwbzYAAAomCBfWDAgJMaACexIAAARvIwAABgMCexIAAAQoOAAACgJ7EQAABG85AAAKbzoAAApv
JwAABhYoOwAACm8TAAAGKgAAABMwBgCUAAAAGQAAEQIoPAAACgJvJgAACm8nAAAKFowiAAABbygA
AAoLAnM9AAAKfREAAAQCcx8AAAZ9EgAABAdvPgAACm8/AAAKCgIGF9oX1o0iAAABfRMAAAQWBhfa
DQwrOAJ7EwAABAgCb0AAAApvQQAACgdvQgAACgdvPgAACgiMIgAAAW9DAAAKb0QAAApvRQAACp4I
F9YMCAkxxCobMAQAygAAABoAABECbzEAAAYoRgAACiwLcsgAAHBzRwAACnoCbzEAAAYXjSEAAAET
CBEIFnL0AABwohEIFm9IAAAKDQJvJgAACm8nAAAKFowiAAABbygAAAoMCG9JAAAKEwQIbz4AAApv
SgAACgkTChYTCSs2EQoRCZoTBREFKEYAAAotIBEEb0sAAAoRBW9MAAAKEwYRBBEGb00AAAoWb04A
AAomEQkX1hMJEQkRCo63MsIXCt4aJShPAAAKEwcWCgMRB29QAAAKUShRAAAK3gAGCwcqAAABEAAA
AAAAAKysABozAAABEzABAAkAAAAbAAARAnsQAAAECgYqAAAAIgIDfRAAAAQqAAAAHgIoVwAACiob
MAQAjQEAABwAABEFKBEAAAoLAzl3AQAAA29YAAAKOWwBAAADb1kAAAo5YQEAAAQ5WwEAAATQQAAA
ASgUAAAKb1oAAAp0QAAAARMFA29YAAAKdD8AAAETBBEEA29ZAAAKb1sAAAp0DAAAAg0JbyYAAApv
JwAAChaMIgAAAW8oAAAKb0kAAAoTCAUoXAAACheNIQAAARMNEQ0WcvQAAHCiEQ0Wb0gAAAoTB3Nd
AAAKDAgXb14AAAoIFm9fAAAKEQhvSwAACm9gAAAKEw4rNBEOb2EAAAp0MgAAARMJAhEHEQlvYgAA
Cm82AAAGEwoIb2MAAAoRCW9iAAAKEQpvZAAACiYRDm9lAAAKLcPeFhEOdUcAAAEsDBEOdUcAAAFv
ZgAACtwRBQhvZwAACghvaAAACm9pAAAKEwYRBhYxUxEGF9oX1o0hAAABEwcWEQYX2hMPEwwrIQhv
aAAAChEMb2oAAAooXAAAChMLEQcRDBELohEMF9YTDBEMEQ8x2REHKAMAACty9AAAcBEHKGwAAAoL
BygRAAAKCgYqAAAAARAAAAIAsgBPAQEWAAAAARMwAgAVAAAAHQAAEQMsCgNvWAAACiwCGSoCAyht
AAAKKgAAABMwAwAsAAAAHgAAERYLAxMEFg0rGBEECZoMCAQWKG4AAAoWMwQXCysLCRfWDQkRBI63
MuEHCgYqHgIobwAACioTMAEABAAAAB8AABEWCgYqQlNKQgEAAQAAAAAADAAAAHY0LjAuMzAzMTkA
AAAABQBsAAAAYA0AACN+AADMDQAA2BAAACNTdHJpbmdzAAAAAKQeAAD8AAAAI1VTAKAfAAAQAAAA
I0dVSUQAAACwHwAAaAYAACNCbG9iAAAAAAAAAAIAAAFXHaIJCQ4AAAD6JTMAFgAAAQAAAE4AAAAO
AAAAEwAAADgAAAAqAAAAcgAAAAEAAAAxAAAAHwAAAAUAAAAMAAAADgAAAAoAAAABAAAACQAAAAQA
AAADAAAAAwAAAAAAohABAAAAAAAKAGQBOgEKAJgBegEGAKgBoQEKAAACOgEGAH4CoQEKAAAD1gIO
AFIDOwMSAKEDgAMWANIDgAMSAOEDgAMOAMUEOwMGAFIFNQUGAL4FtAUGAEoGNwYGAAwHAAcaAGgH
UgceAIsHdQcGAKIHoQEaAM4HUgceAAsIdQceADMIdQceAEwIdQceAHkIYQgGAKMIkAgKAOIIuwgK
APoIEwAeAC8JEgkGAGQJRAkGAIIJoQEGAKYJoQEKAL8JEwAGAA0K7gkGACEKoQEGACgKoQEGAD8K
oQESAFkKgAMGAGYKoQEiAMkKoAoiAPgKoAoiACMLoAoGAFsLoQEGAGwLoQEGAKALAAcGAL4LoQEi
ANMLoAoWABQMgAMiADgMoAoiAF8MoAoiAJYMoAoiAKoMoAoGAMQMoQEGANwMoQEGAPEMoQEiACQN
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
qQuCA3kAiwJxAFkBtQuIA2EBywuOA0EAswYTAHkAdAETAEEB8AucA2kBCgxoAFkAJgyiA3EBTQyo
A0EBhwtoAGkBMAuuA4EBcgxoAHkBgAy1AwkBzgzEA6EBdAFjAQkBBA3JA0EBCg3TA2kBGg0TAIkB
SA3ZA7EBMAvfA5EBcgxoAIkBdg3mA8EBjw3uA5kBnw1xAMEBqw0XAMkBdAETANEBdAFjAdkBdAEc
BOEBdAF0BOkBdAFjAYEAdAETAIkA2w5qBYkA+w5uBZEAEg90BfkBHQ96BRkCiwKBBfEBdAETAPEB
Og/FACECXw+GBbEBbw+NBQkCfQ9qBZEBiQ9xAPEBow+TBTECYguZBQkCrQ/KADkCwg8TAAEC0g+f
BfEB+A+mBUkCCgxoAEkCMAt9A1ECDxCsBQkBFBC4BYEA5AeBAVkCIxDmBaEAdAETAGECdAHAAGkC
dAETAHECdAFjAQ4APABYASkAgwAbAi4AgwP2BS4AkwMeBi4AiwP/BUAAEwCdAUAAKwDFAUMAEwCd
AUMAGwCsAUkAgwAsAmMAEwCdAWMAGwCsAWkAgwD6AYAAKwDFAYMAewDFAYMAcwDFAYMAGwCsAYkA
gwAHAqAAKwDFAaMAwwB1AqMAEwCdAcAAKwDFAcMA6wD5AsMAEwCdAeAAKwDFAeMAIwH5AgABKwDF
AQABEwCdAQMBIwH5AiABEwCdASABKwDFAUABEwCdAUABKwDFAWABEwCdAWABKwDFAYABKwDFAYMB
mwIOBIMBIwH5AoMBkwLFAYkBowIiBIkBqwJ8BIkBswJCBaABKwDFAcABKwDFAcABEwCdAeABKwDF
AQACKwDFAQACEwCdAYADIwH5AqADIwH5AuYB6wHwAfUBRQJJAlQCWQJoAmgC8AL/AgoDRQJFAjwD
QgNSA1oDWgNfA0UCYwOVA7sD9QNZAr8F4QXtBUUCBAABAAYABQAHAAYACwAKAAwADAAAAJgBTwAA
AFECVAAAAAACWQAAAF0CXgAAABkDmAAAAIUEzgAAAJgE0wAAAKEE1wAAALEEzgAAAIcGTQEAAJkG
UQEAADYHdAECAAQAAwACAAUABQACAAYABwACAAcACQACAA8ACwACABIADQABABMADwABABQAEQAC
ABUAEwACACkAFQACACoAFwABACsAFwACADEAGQABADIAGQB1AHUAiADKAdEB2AHfAdcC3gIzAwSA
AAAAAAAAAAAAAAAAAAAAALUAAAAEAAAAAAAAAAAAAAABAAoAAAAAAAoAAAAAAAAAAAAAAAoAEwAA
AAAAAQAAAAAAAAAAAAAAnQAlAwAAAAALAAAAAAAAAAAAAACmAGMDAAAAAAsAAAAAAAAAAAAAAKYA
sQMAAAAABAAAAAAAAAAAAAAACgBDBwAAAAAEAAAAAAAAAAAAAAABAKEBAAAAAAsAAAAAAAAAAAAA
AKYAfAoAAAAABAAAAAAAAAAAAAAAAQBeDgAAAAAFAAQABgAEAA0ADAAOAAwAAAAQAAwApwIAABAA
GQCnAgAAAAAbAKcCLQBjAi0A5QLXALQFAAAAAAA8TW9kdWxlPgBtc2NvcmxpYgBNaWNyb3NvZnQu
VmlzdWFsQmFzaWMATXlBcHBsaWNhdGlvbgBTY3JpcHRDb21wb25lbnRfMzRkZTZhMjg1MmY3NDA0
OGFkY2Q5MTNiOWU5MDVhMjUuTXkATXlDb21wdXRlcgBNeVByb2plY3QATXlXZWJTZXJ2aWNlcwBU
aHJlYWRTYWZlT2JqZWN0UHJvdmlkZXJgMQBJbnB1dEJ1ZmZlcgBTY3JpcHRDb21wb25lbnRfMzRk
ZTZhMjg1MmY3NDA0OGFkY2Q5MTNiOWU5MDVhMjUAVXNlckNvbXBvbmVudABDb25uZWN0aW9ucwBW
YXJpYWJsZXMAQ1JDMzIAU2NyaXB0TWFpbgBDb2x1bW5zRWRpdG9yAENvbHVtbnNDb252ZXJ0ZXIA
TWljcm9zb2Z0LlZpc3VhbEJhc2ljLkFwcGxpY2F0aW9uU2VydmljZXMAQXBwbGljYXRpb25CYXNl
AC5jdG9yAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5EZXZpY2VzAENvbXB1dGVyAFN5c3RlbQBPYmpl
Y3QALmNjdG9yAGdldF9Db21wdXRlcgBtX0NvbXB1dGVyT2JqZWN0UHJvdmlkZXIAZ2V0X0FwcGxp
Y2F0aW9uAG1fQXBwT2JqZWN0UHJvdmlkZXIAVXNlcgBnZXRfVXNlcgBtX1VzZXJPYmplY3RQcm92
aWRlcgBnZXRfV2ViU2VydmljZXMAbV9NeVdlYlNlcnZpY2VzT2JqZWN0UHJvdmlkZXIAQXBwbGlj
YXRpb24AV2ViU2VydmljZXMARXF1YWxzAG8AR2V0SGFzaENvZGUAVHlwZQBHZXRUeXBlAFRvU3Ry
aW5nAENyZWF0ZV9fSW5zdGFuY2VfXwBUAGluc3RhbmNlAERpc3Bvc2VfX0luc3RhbmNlX18AZ2V0
X0dldEluc3RhbmNlAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5NeVNlcnZpY2VzLkludGVybmFsAENv
bnRleHRWYWx1ZWAxAG1fQ29udGV4dABHZXRJbnN0YW5jZQBDb3p5Um9jLlNTSVNQbHVzLjIwMTIA
Q296eVJvYy5TcWxTZXJ2ZXIuU1NJUwBTY3JpcHRCdWZmZXJQbHVzAE1pY3Jvc29mdC5TcWxTZXJ2
ZXIuVHhTY3JpcHQATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxpbmUAU2NyaXB0Q29tcG9u
ZW50AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuUGlwZWxpbmVIb3N0AFBpcGVsaW5lQnVmZmVyAE91dHB1
dE5hbWVNYXAAQ29tcG9uZW50AE9iamVjdElEAElzSW5wdXQAQnVmZmVyAE91dHB1dE1hcABnZXRf
U3RhdGljSW5wdXRDb2x1bW5zAHNldF9DaGVja3N1bQBWYWx1ZQBzZXRfQ2hlY2tzdW1fSXNOdWxs
AGdldF9TdGF0aWNPdXRwdXRDb2x1bW5zAE5leHRSb3cARW5kT2ZSb3dzZXQAU3RhdGljSW5wdXRD
b2x1bW5zAENoZWNrc3VtAENoZWNrc3VtX0lzTnVsbABTdGF0aWNPdXRwdXRDb2x1bW5zAFNjcmlw
dENvbXBvbmVudFBsdXMAUHJvY2Vzc0lucHV0AElucHV0SUQASW5wdXROYW1lAElucHV0X1Byb2Nl
c3NJbnB1dABJbnB1dF9Qcm9jZXNzSW5wdXRSb3cAUm93AFBhcmVudENvbXBvbmVudABTeXN0ZW0u
U2VjdXJpdHkuQ3J5cHRvZ3JhcGh5AEhhc2hBbGdvcml0aG0AYVBvbHlub21pYWwAY2FjaGVUYWJs
ZQBDbGVhckNhY2hlAEluaXRpYWxpemUASGFzaENvcmUAYnVmZmVyAG9mZnNldABjb3VudABIYXNo
RmluYWwAU3lzdGVtLklPAFN0cmVhbQBDb21wdXRlSGFzaABzdHJlYW0AZ2V0X0RlZmF1bHRQb2x5
bm9taWFsAGdldF9BdXRvQ2FjaGUAc2V0X0F1dG9DYWNoZQB2YWx1ZQBCdWlsZENSQzMyVGFibGUA
dWxQb2x5bm9taWFsAGdfQWxsT25lcwBTeXN0ZW0uQ29sbGVjdGlvbnMASGFzaHRhYmxlAGdfY2Fj
aGVkQ1JDMzJUYWJsZXMAZ19hdXRvQ2FjaGUAbV9jcmMzMlRhYmxlAG1fY3JjAERlZmF1bHRQb2x5
bm9taWFsAEF1dG9DYWNoZQBDb2x1bW5TZXBhcmF0b3IAUHJlRXhlY3V0ZQBWYWxpZGF0ZQBlcnJN
ZXNzYWdlAGdldF9JbnB1dENvbHVtbnMAc2V0X0lucHV0Q29sdW1ucwBtX2lucHV0Q29scwBTeXN0
ZW0uVGV4dABTdHJpbmdCdWlsZGVyAG1fc2IAbV9jcmMzMgBtX2lucHV0SW5kZXhlcwBJbnB1dENv
bHVtbnMAU3lzdGVtLkRyYXdpbmcAU3lzdGVtLkRyYXdpbmcuRGVzaWduAFVJVHlwZUVkaXRvcgBT
eXN0ZW0uQ29tcG9uZW50TW9kZWwASVR5cGVEZXNjcmlwdG9yQ29udGV4dABJU2VydmljZVByb3Zp
ZGVyAEVkaXRWYWx1ZQBjb250ZXh0AHByb3ZpZGVyAFVJVHlwZUVkaXRvckVkaXRTdHlsZQBHZXRF
ZGl0U3R5bGUAQ29udGFpbnNTdHJpbmdfAGFycmF5AHN0cgBUeXBlQ29udmVydGVyAENhbkNvbnZl
cnRGcm9tAHNvdXJjZVR5cGUARWRpdG9yQnJvd3NhYmxlQXR0cmlidXRlAEVkaXRvckJyb3dzYWJs
ZVN0YXRlAFN5c3RlbS5Db2RlRG9tLkNvbXBpbGVyAEdlbmVyYXRlZENvZGVBdHRyaWJ1dGUAU3lz
dGVtLkRpYWdub3N0aWNzAERlYnVnZ2VySGlkZGVuQXR0cmlidXRlAE1pY3Jvc29mdC5WaXN1YWxC
YXNpYy5Db21waWxlclNlcnZpY2VzAFN0YW5kYXJkTW9kdWxlQXR0cmlidXRlAEhpZGVNb2R1bGVO
YW1lQXR0cmlidXRlAFN5c3RlbS5Db21wb25lbnRNb2RlbC5EZXNpZ24ASGVscEtleXdvcmRBdHRy
aWJ1dGUAU3lzdGVtLlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNlcwBSdW50aW1lSGVscGVycwBHZXRP
YmplY3RWYWx1ZQBSdW50aW1lVHlwZUhhbmRsZQBHZXRUeXBlRnJvbUhhbmRsZQBBY3RpdmF0b3IA
Q3JlYXRlSW5zdGFuY2UATXlHcm91cENvbGxlY3Rpb25BdHRyaWJ1dGUAZ2V0X1ZhbHVlAHNldF9W
YWx1ZQBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMAQ29tVmlzaWJsZUF0dHJpYnV0ZQBT
dHJpbmcASW50MzIAc2V0X0l0ZW0AU2V0TnVsbABJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uAFNj
cmlwdEJ1ZmZlcgBDTFNDb21wbGlhbnRBdHRyaWJ1dGUATWljcm9zb2Z0LlNxbFNlcnZlci5EVFNQ
aXBlbGluZVdyYXAATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxpbmUuV3JhcHBlcgBJRFRT
Q29tcG9uZW50TWV0YURhdGExMDAAZ2V0X0NvbXBvbmVudE1ldGFEYXRhAElEVFNJbnB1dENvbGxl
Y3Rpb24xMDAAZ2V0X0lucHV0Q29sbGVjdGlvbgBJRFRTSW5wdXQxMDAAZ2V0X0l0ZW0AZ2V0X0lE
AFN5bmNocm9uaXplZABIYXNoU2l6ZVZhbHVlAFVJbnQzMgBBZGQAQ2xlYXIAQnl0ZQBSZWFkAEVt
cHR5AHNldF9MZW5ndGgAZ2V0X0J1ZmZlcgBJc051bGwAQXBwZW5kAEVuY29kaW5nAGdldF9Vbmlj
b2RlAEdldEJ5dGVzAEJpdENvbnZlcnRlcgBUb0ludDMyAElEVFNJbnB1dENvbHVtbkNvbGxlY3Rp
b24xMDAAZ2V0X0lucHV0Q29sdW1uQ29sbGVjdGlvbgBnZXRfQ291bnQAUGlwZWxpbmVDb21wb25l
bnQAZ2V0X0hvc3RDb21wb25lbnQASURUU0J1ZmZlck1hbmFnZXIxMDAAZ2V0X0J1ZmZlck1hbmFn
ZXIASURUU0lucHV0Q29sdW1uMTAwAGdldF9MaW5lYWdlSUQARmluZENvbHVtbkJ5TGluZWFnZUlE
AElEVFNWaXJ0dWFsSW5wdXQxMDAASURUU1ZpcnR1YWxJbnB1dENvbHVtbjEwMABFeGNlcHRpb24A
SXNOdWxsT3JFbXB0eQBBcHBsaWNhdGlvbkV4Y2VwdGlvbgBTdHJpbmdTcGxpdE9wdGlvbnMAU3Bs
aXQAR2V0VmlydHVhbElucHV0AFJlbW92ZUFsbABJRFRTVmlydHVhbElucHV0Q29sdW1uQ29sbGVj
dGlvbjEwMABnZXRfVmlydHVhbElucHV0Q29sdW1uQ29sbGVjdGlvbgBEVFNVc2FnZVR5cGUAU2V0
VXNhZ2VUeXBlAFByb2plY3REYXRhAFNldFByb2plY3RFcnJvcgBnZXRfTWVzc2FnZQBDbGVhclBy
b2plY3RFcnJvcgBTU0lTU2NyaXB0Q29tcG9uZW50RW50cnlQb2ludEF0dHJpYnV0ZQBDb3p5Um9j
LlNxbFNlcnZlci5TU0lTLkF0dHJpYnV0ZXMAVmFsaWRhdGVQcm9wZXJ0aWVzQXR0cmlidXRlAFR5
cGVDb252ZXJ0ZXJBdHRyaWJ1dGUARWRpdG9yQXR0cmlidXRlAERlc2NyaXB0aW9uQXR0cmlidXRl
AFN5c3RlbS5XaW5kb3dzLkZvcm1zAENoZWNrZWRMaXN0Qm94AElDdXN0b21UeXBlRGVzY3JpcHRv
cgBTeXN0ZW0uV2luZG93cy5Gb3Jtcy5EZXNpZ24ASVdpbmRvd3NGb3Jtc0VkaXRvclNlcnZpY2UA
SUVudW1lcmF0b3IAZ2V0X0luc3RhbmNlAFByb3BlcnR5RGVzY3JpcHRvcgBnZXRfUHJvcGVydHlE
ZXNjcmlwdG9yAEdldFNlcnZpY2UAR2V0UHJvcGVydHlPd25lcgBDb252ZXJzaW9ucwBzZXRfQ2hl
Y2tPbkNsaWNrAExpc3RCb3gAQm9yZGVyU3R5bGUAc2V0X0JvcmRlclN0eWxlAEdldEVudW1lcmF0
b3IAZ2V0X0N1cnJlbnQAZ2V0X05hbWUAT2JqZWN0Q29sbGVjdGlvbgBnZXRfSXRlbXMATW92ZU5l
eHQASURpc3Bvc2FibGUARGlzcG9zZQBDb250cm9sAERyb3BEb3duQ29udHJvbABDaGVja2VkSXRl
bUNvbGxlY3Rpb24AZ2V0X0NoZWNrZWRJdGVtcwBBcnJheQBTb3J0AEpvaW4AT3BlcmF0b3JzAENv
bXBhcmVTdHJpbmcAQ29tcGlsYXRpb25SZWxheGF0aW9uc0F0dHJpYnV0ZQBSdW50aW1lQ29tcGF0
aWJpbGl0eUF0dHJpYnV0ZQBTeXN0ZW0uUnVudGltZS5WZXJzaW9uaW5nAFRhcmdldEZyYW1ld29y
a0F0dHJpYnV0ZQBTY3JpcHRDb21wb25lbnRfMzRkZTZhMjg1MmY3NDA0OGFkY2Q5MTNiOWU5MDVh
MjUuZGxsAAAAgJtJAHMATgB1AGwAbAAgAHAAcgBvAHAAZQByAHQAeQAgAGMAYQBuAG4AbwB0ACAA
YgBlACAAcwBlAHQAIAB0AG8AIABGAGEAbABzAGUALgAgAEEAcwBzAGkAZwBuACAAYQAgAHYAYQBs
AHUAZQAgAHQAbwAgAHQAaABlACAAYwBvAGwAdQBtAG4AIABpAG4AcwB0AGUAYQBkAC4AABFDAGgA
ZQBjAGsAcwB1AG0AAAtJAG4AcAB1AHQAAAVcADAAAAVcAG4AACtTAGUAbABlAGMAdAAgAGkAbgBw
AHUAdAAgAGMAbwBsAHUAbQBuAHMALgAABSwADQAAAAB9FPPhvR9MTYyTuGiZ2j//AAi3elxWGTTg
iQiwP19/EdUKOgMgAAEDAAABBAAAEgwHBhUSGAESDAQAABIIBwYVEhgBEggEAAASEQcGFRIYARIR
BAAAEhQHBhUSGAESFAQIABIMBAgAEggECAASEQQIABIUBCABAhwDIAAIBCAAEhUDIAAOAh4ABxAB
AR4AHgAHMAEBARAeAAITAAQgABMABwYVEhkBEwAEKAATAAgWz0kLuAw06giJhF3NgIDMkQsgBQES
IQgCEiUSKQQgAB0OBCABAQgEIAEBAgMgAAIEKAAdDgMoAAgDKAACAwYSJAMGEigJIAQBCA4SJRIp
BSABARIcAwYSIQUgAQESIQQgAQEJBSACAQkCByADAR0FCAgEIAAdBQYgAR0FEjUGIAEdBR0FCCAD
HQUdBQgIAwAACQMAAAIEAAEBAgUAAR0JCQIGCQMGEjkCBgIDBh0JAwgACQMIAAICBg4ELAANAAUg
AQIQDgQgAQEOAwYSPQMGEiwDBh0IAygADgggAxwSRRJJHAYgARFNEkUGIAICHQ4OByACAhJFEhUF
IAEBEVkIAQABAAAAAAAFIAIBDg4YAQAKTXlUZW1wbGF0ZQgxMC4wLjAuMAAABAEAAAAGFRIYARIM
BhUSGAESCAYVEhgBEhEGFRIYARIUBAcBEgwEBwESCAQHARIRBAcBEhQMAQAHTXkuVXNlcgAAEwEA
Dk15LldlYlNlcnZpY2VzAAAQAQALTXkuQ29tcHV0ZXIAABMBAA5NeS5BcHBsaWNhdGlvbgAABAAB
HBwDBwECAwcBCAYAARIVEXUEBwESFQMHAQ4FEAEAHgAECgEeAAQHAR4AByAEAQ4ODg5hAQA0U3lz
dGVtLldlYi5TZXJ2aWNlcy5Qcm90b2NvbHMuU29hcEh0dHBDbGllbnRQcm90b2NvbBJDcmVhdGVf
X0luc3RhbmNlX18TRGlzcG9zZV9fSW5zdGFuY2VfXwAAAAYVEhgBEwAGFRIZARMABAoBEwAFIAEB
EwAIBwMTABMAEwAFAQAAAAAEBwEdDgUgAgEIHAYHAh0OHQ4FIAASgJkFIAASgJ0GIAESgKEcBgAB
EjkSOQIGCAQgARwcAh0JBSACARwcBQcDCAsIBwcDCx0FHQUHIAMIHQUICAcHAx0FHQUIBAcBHQUD
BwEJCQcFHQkJHQkICAQgABIlBCABAggFIAESPQ4EIAEcCAUAABKArQUgAR0FDgYAAggdBQgGBwQI
CAgIBSAAEoC1BSAAEoC5BSAAEoC9BiABEoDBHAUgAggICAgHBAgSgKEICAQAAQIOCSACHQ4dDhGA
1QUgABKAxQUgABKA2QYgARKAyRwHIAIICBGA3QYAAQESgM0YBwsCAhKAoR0OEoDFDhKAyRKAzR0O
CB0ODQEACFZhbGlkYXRlAAAFIAEBEhVRAQBMU2NyaXB0Q29tcG9uZW50XzM0ZGU2YTI4NTJmNzQw
NDhhZGNkOTEzYjllOTA1YTI1LlNjcmlwdE1haW4rQ29sdW1uc0NvbnZlcnRlcgAAByACARIVEhWA
xAEASVNjcmlwdENvbXBvbmVudF8zNGRlNmEyODUyZjc0MDQ4YWRjZDkxM2I5ZTkwNWEyNS5TY3Jp
cHRNYWluK0NvbHVtbnNFZGl0b3J1U3lzdGVtLkRyYXdpbmcuRGVzaWduLlVJVHlwZUVkaXRvciwg
U3lzdGVtLkRyYXdpbmcsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNL
ZXlUb2tlbj1iMDNmNWY3ZjExZDUwYTNhAAAnAQAiU2VsZWN0IGlucHV0IGNvbHVtbnMgZm9yIGNo
ZWNrc3VtLgAAAyAAHAUgABKBCQUgARwSFQYgARwSgQkEAAEOHAYgAQERgRUFIAASgQUFIAASgRkF
IAIIHAIGIAEBEoEhBSAAEoElBxABAQEdHgADCgEOBgACDg4dDiEHEBwcEoD5EjASgP0SgQEIHQ4S
gMUSgMkCDggdDhKBBQgEBwERTQYAAwgODgIIBwUCAg4IHQ4IAQAIAAAAAAAeAQABAFQCFldyYXBO
b25FeGNlcHRpb25UaHJvd3MBRwEAGi5ORVRGcmFtZXdvcmssVmVyc2lvbj12NC4wAQBUDhRGcmFt
ZXdvcmtEaXNwbGF5TmFtZRAuTkVUIEZyYW1ld29yayA0AABkUAAAAAAAAAAAAAB+UAAAACAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAcFAAAAAAAAAAAAAAAABfQ29yRGxsTWFpbgBtc2NvcmVlLmRsbAAA
AAAA/yUAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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="43" 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="44" name="ScriptLanguage" dataType="System.String" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91">VisualBasic</property><property id="51" name="UserComponentTypeName" dataType="System.String">CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus.2012, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea</property></properties><inputs><input id="52" name="Input" hasSideEffects="true"><externalMetadataColumns /></input></inputs><outputs><output id="53" name="Output" synchronousInputId="52"><outputColumns><outputColumn id="54" name="Checksum" lineageId="54" dataType="i4" /></outputColumns><externalMetadataColumns /></output></outputs></component>