<component id="2" name="Oracle Destination" 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="15"><arrayElement dataType="System.String"><![CDATA[ComponentWrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services component wrapper
' This module defines the base class for your component
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class UserComponent
    Inherits ScriptComponentPlus

    Public Connections As New Connections(Me)
    Public Variables As New Variables(Me)

    Public Overrides Sub ProcessInput(ByVal InputID As Integer, ByVal InputName As String, ByVal Buffer As PipelineBuffer, ByVal OutputMap As OutputNameMap)

        If InputID = MyBase.ComponentMetaData.InputCollection("Input").ID Then
            Input_ProcessInput(New InputBuffer(Me, InputID, True, Buffer, OutputMap))
        End If

    End Sub

    Public Overridable Sub Input_ProcessInput(ByVal Buffer As InputBuffer)

        While Buffer.NextRow()
            Input_ProcessInputRow(Buffer)
        End While

    End Sub

    Public Overridable Sub Input_ProcessInputRow(ByVal Row As InputBuffer)

    End Sub

End Class

Public Class Connections

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

    Public ReadOnly Property Oracle() As IDTSConnectionManager100
        Get
            Return ParentComponent.ComponentMetaData.RuntimeConnectionCollection("Oracle").ConnectionManager
        End Get
    End Property

End Class

Public Class Variables

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[BufferWrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services buffer wrappers
' This module defines classes for accessing data flow buffers
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!


Option Strict Off   ' This allows usage of PipelineBuffer typed accessors.

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class InputBuffer
    Inherits ScriptBufferPlus

    Public Sub New(ByVal Component As ScriptComponent, ByVal ObjectID As Integer, ByVal IsInput As Boolean, ByVal Buffer As PipelineBuffer, ByVal OutputMap As OutputNameMap)
        MyBase.New(Component, ObjectID, IsInput, Buffer, OutputMap)
    End Sub

    Public Overrides ReadOnly Property StaticInputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public Overrides ReadOnly Property StaticOutputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public Overloads Function NextRow() As Boolean
        NextRow = MyBase.NextRow()
    End Function

    Public Overloads Function EndOfRowset() As Boolean
        EndOfRowset = MyBase.EndOfRowset
    End Function

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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-2013 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.

' The following resources were used as a reference:
' http://blog.jun.bz/2008/07/super-fast-ssis-oracle-loader.html

Imports System
Imports System.ComponentModel
Imports System.Collections
Imports System.Data
Imports System.Data.Common
Imports System.Reflection
Imports System.IO

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


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<ColumnMappings()> _
<SortProperties(New String() { _
    "Connection", "BatchSize", "Timeout", _
    "IsTableVariable", "Table", "TableVariable"})> _
<FilterProperties("GetProperties")> _
<ValidateProperties("Validate")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    Private Const OracleTypeProperty As String = "OracleType"


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Dim colsCount As Integer = m_inputIndexes.Length
        For colIndex As Integer = 0 To colsCount - 1
            Dim bufIndex As Integer = m_inputIndexes(colIndex)
            Dim param As DbParameter = m_command.Parameters.Item(colIndex)
            Dim value As Object = Nothing

            If Not Row.Buffer.IsNull(bufIndex) Then
                value = Row.Buffer(bufIndex)

                Select Case param.DbType
                    Case DbType.Object
                        ' Blob columns need special handling.
                        value = GetOracleBlob_(CType(value, BlobColumn))
                End Select
            End If

            Dim buffer() As Object = CType(param.Value, Object())
            buffer(m_currentRow) = value
        Next

        m_currentRow += 1

        If m_currentRow = Me.BatchSize Then
            ' Time to send current batch of data.
            Try
                Call m_command.ExecuteNonQuery()
            Catch ex As Exception
                Call FireError_(ex.Message)
            End Try

            m_currentRow = 0
        End If
    End Sub ' Input_ProcessInputRow


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

        Dim input As IDTSInput100 = MyBase.ComponentMetaData.InputCollection(0)
        Dim colsCount As Integer = input.InputColumnCollection.Count

        ' Setup dynamic input columns indexes.
        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

        ' Setup Oracle command.
        Call m_command.GetType().InvokeMember( _
            "BindByName", _
            BindingFlags.SetProperty Or BindingFlags.Public Or BindingFlags.Instance, _
            Nothing, _
            m_command, _
            New Object() {True})
        Call m_command.GetType().InvokeMember( _
            "ArrayBindCount", _
            BindingFlags.SetProperty Or BindingFlags.Public Or BindingFlags.Instance, _
            Nothing, _
            m_command, _
            New Object() {Me.BatchSize})
        m_command.CommandTimeout = Me.Timeout
        m_command.CommandType = CommandType.Text

        ' Setup command parameters.
        Dim colsList As String = String.Empty
        Dim paramsList As String = String.Empty
        For colIndex As Integer = 0 To colsCount - 1
            Dim extCol As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection.GetObjectByID( _
                input.InputColumnCollection(colIndex).ExternalMetadataColumnID)

            If Not String.IsNullOrEmpty(colsList) Then
                colsList += ", "
                paramsList += ", "
            End If

            colsList += String.Format("""{0}""", extCol.Name)
            paramsList += String.Format(":{0}", extCol.Name)

            Dim parameter As DbParameter = m_command.CreateParameter()
            parameter.ParameterName = extCol.Name

            Dim paramType As Type = parameter.GetType()
            Call paramType.InvokeMember( _
                "OracleDbType", _
                BindingFlags.SetProperty Or BindingFlags.Public Or BindingFlags.Instance, _
                Nothing, _
                parameter, _
                New Object() {System.Enum.Parse( _
                    paramType.GetProperty("OracleDbType").PropertyType, _
                    extCol.CustomPropertyCollection(OracleTypeProperty).Value.ToString())})

            parameter.Value = New Object(Me.BatchSize) {}
            parameter.Direction = ParameterDirection.Input

            Call m_command.Parameters.Add(parameter)
        Next

        Dim destTable As String = Me.Table
        If Me.IsTableVariable Then
            ' Destination table is contained in variable.
            destTable = CStr(GetVariable_(Me.TableVariable))
        End If

        If String.IsNullOrEmpty(destTable) Then
            Throw New Exception("Destination table not specified. Check package protection level.")
        End If

        ' Setup command statement.
        m_command.CommandText = String.Format( _
            "INSERT INTO {0} ( {1} ) VALUES ( {2} )", _
            destTable, _
            colsList, _
            paramsList)

        m_currentRow = 0

        ' Setup OracleClob constructor.
        Dim clobType As Type = Type.GetType( _
            "Oracle.DataAccess.Types.OracleClob, " + _
            m_command.Connection.GetType().Assembly.FullName)
        m_clobCI = clobType.GetConstructor(New Type() {m_command.Connection.GetType()})

        ' Setup OracleBlob constructor.
        Dim blobType As Type = Type.GetType( _
            "Oracle.DataAccess.Types.OracleBlob, " + _
            m_command.Connection.GetType().Assembly.FullName)
        m_blobCI = blobType.GetConstructor(New Type() {Connection.GetType()})
    End Sub ' PreExecute


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

        If m_currentRow > 0 Then
            Call m_command.GetType().InvokeMember( _
                "ArrayBindCount", _
                BindingFlags.SetProperty Or BindingFlags.Public Or BindingFlags.Instance, _
                Nothing, _
                m_command, _
                New Object() {m_currentRow})
            Call m_command.ExecuteNonQuery()
            m_currentRow = 0
        End If
    End Sub ' PostExecute


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub AcquireConnections(ByVal Transaction As Object)
        Call MyBase.AcquireConnections(Transaction)

        ' Setup command.
        Dim conn As DbConnection = CType( _
            Me.Connections.Oracle.AcquireConnection(Transaction), _
            DbConnection)
        m_command = conn.CreateCommand()
    End Sub ' AcquireConnections


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

        If Not m_command Is Nothing Then
            ' Dispose command and connection.
            Dim conn As DbConnection = m_command.Connection
            Call m_command.Dispose()
            Call conn.Dispose()
            m_command = Nothing
        End If
    End Sub ' ReleaseConnections


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of current properties based on current state.
    Public Function GetProperties() As String()
        Dim result As New ArrayList

        Call result.Add("Connection")
        Call result.Add("IsTableVariable")
        Call result.Add(IIf(Me.IsTableVariable, "TableVariable", "Table"))
        Call result.Add("BatchSize")
        Call result.Add("Timeout")

        Return CType(result.ToArray(GetType(String)), String())
    End Function    ' GetProperties


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

        Try
            If String.IsNullOrEmpty(Me.Connection) Then
                Throw New Exception("Select connection.")
            End If

            If String.IsNullOrEmpty(Me.Table) Then
                Throw New Exception("Select destination table.")
            End If

            Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
            If input.IsAttached AndAlso input.InputColumnCollection.Count = 0 Then
                Throw New Exception("Map input columns.")
            End If

            Me.ComponentMetaData.RuntimeConnectionCollection("Oracle").ConnectionManagerID = Me.Connection
        Catch ex As Exception
            result = False
            errMessage = ex.Message
        End Try

        Validate = result
    End Function    'Validate


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

        If MyBase.ComponentMetaData.InputCollection.Count = 0 Then
            ' At least one input must exist.
            Throw New Exception("No inputs.")
        End If

        If String.IsNullOrEmpty(Me.Connection) Then
            Throw New Exception("Connection not selected.")
        End If

        If String.IsNullOrEmpty(Me.Table) Then
            Throw New Exception("Destination table not selected.")
        End If

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

        ' Get table schema.
        Dim tableSchema As DataTable
        Using connection As DbConnection = CType( _
            Me.DesignConnections(Me.Connection).AcquireConnection(Nothing), _
            DbConnection), _
            command As DbCommand = connection.CreateCommand()

            command.CommandType = CommandType.TableDirect

            ' Setup destination table.
            If Me.IsTableVariable Then
                command.CommandText = CStr(GetVariable_(Me.TableVariable))
            Else
                command.CommandText = Me.Table
            End If

            tableSchema = command.ExecuteReader(CommandBehavior.SchemaOnly).GetSchemaTable()
        End Using

        ' Cleanup.
        input.ExternalMetadataColumnCollection.IsUsed = True
        Call input.InputColumnCollection.RemoveAll()
        Call input.ExternalMetadataColumnCollection.RemoveAll()

        ' Setup column metadata.
        Dim colsCount As Integer = tableSchema.Rows.Count
        For colIndex As Integer = 0 To colsCount - 1
            Dim columnRow As DataRow = tableSchema.Rows(colIndex)

            Dim column As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection.NewAt( _
                colIndex)
            column.Name = CStr(columnRow("ColumnName"))

            ' Get type.
            Dim rawType As Type = CType(columnRow("DataType"), Type)
            Dim columnType As DataType = DataRecordTypeToBufferType_(rawType)
            If CBool(columnRow("IsLong")) Then
                ' This is extended type. Have to modify the column type a bit.
                Select Case columnType
                    Case DataType.DT_WSTR
                        columnType = DataType.DT_NTEXT

                    Case DataType.DT_STR
                        columnType = DataType.DT_TEXT

                    Case DataType.DT_BYTES
                        columnType = DataType.DT_IMAGE
                End Select
            End If

            ' Get length.
            Dim length As Integer = 0
            Select Case columnType
                Case DataType.DT_WSTR, DataType.DT_STR, DataType.DT_BYTES, DataType.DT_IMAGE, DataType.DT_NTEXT, DataType.DT_TEXT
                    length = CInt(columnRow("ColumnSize"))
            End Select

            ' Get code page.
            Dim codepage As Integer = 0
            If columnType = DataType.DT_STR Then
                codepage = -1
            End If

            ' Get precision and scale.
            Dim precision As Integer = 0
            Dim scale As Integer = 0
            If columnType = DataType.DT_NUMERIC OrElse columnType = DataType.DT_BYREF_DECIMAL Then
                If columnRow.IsNull("NumericPrecision") Then
                    precision = 29
                Else
                    precision = CInt(columnRow("NumericPrecision"))
                End If

                If columnRow.IsNull("NumericScale") Then
                    scale = 0
                Else
                    scale = CInt(columnRow("NumericScale"))
                End If

                If scale = 255 Then
                    scale = 0
                End If
            End If

            column.DataType = columnType
            column.Length = length
            column.Precision = precision
            column.Scale = scale
            column.CodePage = codepage

            ' Include Oracle type as property.
            Dim propType As IDTSCustomProperty100 = column.CustomPropertyCollection.[New]()
            propType.Name = OracleTypeProperty
            propType.Value = columnRow("ProviderType")
        Next
    End Sub ' ReinitializeMetaData


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of tables in the currently selected Oracle connection.
    Public Function GetTables() As String()
        Dim result As ArrayList = New ArrayList()

        Dim connection As DbConnection = CType( _
            Me.DesignConnections(Me.Connection).AcquireConnection(Nothing), _
            DbConnection)

        Try
            Dim tables As DataTable = connection.GetSchema("Tables")
            For Each table As DataRow In tables.Rows
                Dim tableType As String = table(2).ToString().ToUpper()
                If tableType <> "USER" Then
                    ' Include only user tables.
                End If

                Dim tableName As String = String.Format( _
                    """{0}"".""{1}""", _
                    table(0), _
                    table(1))

                Call result.Add(tableName)
            Next
        Finally
            Call connection.Dispose()
        End Try

        Return CType(result.ToArray(GetType(String)), String())
    End Function    ' GetTables


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select connection to Oracle Data Provider for .NET")> _
    <Category("Connection")> _
    <Connection("AdoNetConnectionType")> _
    Public Property Connection() As String
        Get
            Connection = m_connection
        End Get
        Set(ByVal value As String)
            m_connection = value
        End Set
    End Property    ' Connection


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specifies the number of rows to be sent as a batch to the database.")> _
    <Category("Connection")> _
    <DefaultValue(10000)> _
    Public Property BatchSize() As Integer
        Get
            BatchSize = m_batchSize
        End Get
        Set(ByVal value As Integer)
            m_batchSize = value
        End Set
    End Property    ' BatchSize


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specifies the number of seconds allowed for the bulk copy operation to complete before it is aborted.")> _
    <Category("Connection")> _
    <DefaultValue(30)> _
    Public Property Timeout() As Integer
        Get
            Timeout = m_timeout
        End Get
        Set(ByVal value As Integer)
            m_timeout = value
        End Set
    End Property    ' Timeout


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Indicates whether the destination table is stored in a variable.")> _
    <Category("Destination")> _
    <RefreshProperties(RefreshProperties.All)> _
    <DefaultValue(False)> _
    Public Property IsTableVariable() As Boolean
        Get
            IsTableVariable = m_isTableVariable
        End Get
        Set(ByVal value As Boolean)
            If m_isTableVariable <> value Then
                m_isTableVariable = value
                Me.Table = String.Empty
            End If
        End Set
    End Property    ' IsTableVariable


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Destination table to load in bulk.")> _
    <Category("Destination")> _
    <List("GetTables")> _
    Public Property Table() As String
        Get
            Table = m_table
        End Get
        Set(ByVal value As String)
            If m_table <> value Then
                If Not String.IsNullOrEmpty(m_table) Then
                    ' Force external columns to be reloaded.
                    If Me.ComponentMetaData.InputCollection.Count > 0 Then
                        Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
                        Call input.ExternalMetadataColumnCollection.RemoveAll()
                    End If
                End If

                m_table = value
            End If
        End Set
    End Property    ' Table


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Specifies the variable that contains the destination table.")> _
    <Category("Destination")> _
    <Variable()> _
    Public Property TableVariable() As String
        Get
            TableVariable = Me.Table
        End Get
        Set(ByVal value As String)
            Me.Table = value
        End Set
    End Property    ' TableVariable
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private ReadOnly Property AdoNetConnectionType() As String()
        Get
            AdoNetConnectionType = New String() {"ADO.NET"}
        End Get
    End Property    ' AdoNetConnectionType


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns SSIS data type from .NET type. Uses private PipelineComponent method.
    Private Function DataRecordTypeToBufferType_(ByVal type As Type) As DataType
        DataRecordTypeToBufferType_ = CType( _
            GetType(PipelineComponent).InvokeMember( _
                "DataRecordTypeToBufferType", _
                BindingFlags.InvokeMethod Or BindingFlags.NonPublic Or BindingFlags.Static, _
                Nothing, _
                Nothing, _
                New Object() {type}), _
            DataType)
    End Function    ' DataRecordTypeToBufferType_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetVariable_(ByVal varName As String) As Object
        Dim result As Object

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

        GetVariable_ = result
    End Function    ' GetVariable_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Creates Oracle specific BLOB out of SSIS BLOB.
    Private Function GetOracleBlob_(ByVal blob As BlobColumn) As Stream
        Dim result As Stream

        If blob.ColumnInfo.DataType = DataType.DT_STR OrElse _
            blob.ColumnInfo.DataType = DataType.DT_WSTR Then

            result = CType(m_clobCI.Invoke(New Object() {m_command.Connection}), Stream)
        Else
            result = CType(m_blobCI.Invoke(New Object() {m_command.Connection}), Stream)
        End If

        Dim data() As Byte = blob.GetBlobData(0, CInt(blob.Length))
        Call result.Write(data, 0, data.Length)
        Call result.Flush()

        GetOracleBlob_ = result
    End Function    ' GetOracleBlob_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub FireError_(ByVal message As String)
        Dim cancel As Boolean = False
        Call MyBase.ComponentMetaData.FireError( _
            0, _
            "Oracle Destination", _
            message, _
            String.Empty, _
            0, _
            cancel)
    End Sub ' FireError_
#End Region ' Internals


#Region "Attributes"
    Private m_connection As String
    Private m_batchSize As Integer
    Private m_timeout As Integer
    Private m_isTableVariable As Boolean
    Private m_table As String

    Private m_command As DbCommand
    Private m_inputIndexes() As Integer
    Private m_currentRow As Integer
    Private m_clobCI As ConstructorInfo
    Private m_blobCI As ConstructorInfo
#End Region ' Attributes

End Class   ' ScriptMain
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[ScriptComponent_e8c6f2cbccf645ae862b6dbf4ea8a3d9.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>{180CF706-38AC-4A21-BB78-9C54E410C0B2}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>My Project</AppDesignerFolder>
    <RootNamespace>ScriptComponent_e8c6f2cbccf645ae862b6dbf4ea8a3d9</RootNamespace>
    <AssemblyName>ScriptComponent_e8c6f2cbccf645ae862b6dbf4ea8a3d9</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.Xml">
      <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="BufferWrapper.vb" />
    <Compile Include="ComponentWrapper.vb" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="My Project\" />
  </ItemGroup>
</Project>]]></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_e8c6f2cbccf645ae862b6dbf4ea8a3d9</msb:CodeName>
		<msb:DisplayName>ScriptComponent_e8c6f2cbccf645ae862b6dbf4ea8a3d9</msb:DisplayName>
		<msb:ProjectId>{39C90C2C-C8FD-44B4-A5C0-348DBD4C23B3}</msb:ProjectId>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:Project Include="ScriptComponent_e8c6f2cbccf645ae862b6dbf4ea8a3d9.vbproj"/>
		<msb:Folder Include="My Project\"/>
		<msb:File Include="ScriptMain.vb"/>
		<msb:File Include="ComponentWrapper.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_e8c6f2cbccf645ae862b6dbf4ea8a3d9.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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
EQpvfwAAChEHEQtvgAAAChEHEQ5vgQAAChEHEQVvggAAChEHb04AAApvgwAAChMMEQxyhQAAcG+E
AAAKEQwRCHISBABwb3kAAAooEQAACm+FAAAKEQYX1hMGEQYRDz4o/v//KgEcAAACAJEAR9gACgAA
AAACAIkAW+QADAAAAAAbMAQA3wAAABkAABFzZAAACgwCb2wAAAoCbycAAAZvbQAAChRvbgAACnQ8
AAABCgZyLAQAcG+GAAAKDQlvdQAACm+HAAAKEwcrYREHb4gAAAp0QwAAARMEEQQYb4kAAApvFQAA
Cm+KAAAKEwYRBnI6BABwFiiLAAAKFi4AckQEAHARBBZviQAACigRAAAKEQQXb4kAAAooEQAACiiM
AAAKEwUIEQVvZQAACiYRB2+NAAAKLZbeHxEHdUgAAAEsDBEHdUgAAAFvcQAACtzeBwZvYwAACtwI
0B4AAAEoFAAACm9nAAAKdAsAABsqAAEcAAACAC8Ae6oAFgAAAAACACMAn8IABwAAAAATMAEACQAA
ABoAABECewsAAAQKBioAAAAiAgN9CwAABCoAAAATMAEACQAAABsAABECewwAAAQKBioAAAAiAgN9
DAAABCoAAAATMAEACQAAABwAABECew0AAAQKBioAAAAiAgN9DQAABCoAAAATMAEACQAAAB0AABEC
ew4AAAQKBioAAAByAnsOAAAEAy4SAgN9DgAABAJ+QgAACm8wAAAGKgAAABMwAQAJAAAAHgAAEQJ7
DwAABAoGKgAAABMwAwBaAAAAHwAAEQJ7DwAABAMWKIsAAAoWLkkCew8AAAQoRgAACi01Am8jAAAK
byQAAApvawAAChYxIgJvIwAACm8kAAAKFowsAAABbyUAAAoKBm9DAAAKb3QAAAoCA30PAAAEKgAA
EzABAAkAAAAgAAARAm8vAAAGCgYqAAAAIgIDbzAAAAYqAAAAEzADABMAAAAhAAARF40eAAABCwcW
clwEAHCiBwoGKgATMAgALwAAACIAABHQLgAAASgUAAAKcmwEAHAgKAEAABQUF40DAAABCwcWA6IH
bz8AAAoofAAACgoGKgAbMAMANAAAACMAABEUDAIojgAACgMSAm+PAAAKCANvkAAACm+RAAAKKBEA
AAoL3gcIb5IAAArcBygRAAAKCgYqARAAAAIAEAAUJAAHAAAAABMwBAClAAAAJAAAEQNvkwAACg0S
A3uUAAAKIIEAAAAuFgNvkwAAChMEEgR7lAAACiCCAAAAMywCexMAAAQXjQMAAAETBREFFgJ7EAAA
BG9ZAAAKohEFb5UAAAp0DgAAAQwrKgJ7FAAABBeNAwAAARMFEQUWAnsQAAAEb1kAAAqiEQVvlQAA
CnQOAAABDAMWA2+WAAAKhG+XAAAKCggGFgaOt2+YAAAKCG+ZAAAKCAsHKgAAABMwBwAdAAAAJQAA
ERYKAigjAAAKFnKiBABwA35CAAAKFhIAb5oAAAoqAAAAQlNKQgEAAQAAAAAADAAAAHY0LjAuMzAz
MTkAAAAABQBsAAAAWA8AACN+AADEDwAARBQAACNTdHJpbmdzAAAAAAgkAADIBAAAI1VTANAoAAAQ
AAAAI0dVSUQAAADgKAAAGAgAACNCbG9iAAAAAAAAAAIAAAFXHaIJCQ4AAAD6JTMAFgAAAQAAAF8A
AAALAAAAFAAAADcAAAAdAAAAqgAAAAEAAABEAAAAJQAAAAUAAAAPAAAAFQAAAAsAAAABAAAACgAA
AAIAAAADAAAAAgAAAAAADxQBAAAAAAAKAD8BFQEKAHMBVQEGAIMBfAEKANsBFQEGAFkCfAEKANsC
sQIOAC0DFgMSAHwDWwMWAK0DWwMSALwDWwMOAGAEFgMaABsF8wQaALQG8wQGAP0G8wYWAAQHWwMe
AJIHfwcGANQHwgciAGIITAgiAHsITAgiAKgIkAgGANIIvwgKABEJ6ggKACkJEwAiAF4JQQkGAJMJ
cwkGALEJfAEGANUJfAEKAO4JEwAGADwKHQoGAFAKfAESAFcKWwMGAGQKfAEmAMcKngomAPYKngom
ACELngomAD4LngomAIELngoeALALfwcGALwLfAEeAMYLcwceAM0LfwcKAB8M6ggmAFkMngoGAHcM
fAEmAH0MngoWAL4MWwMmAOIMngomAAkNngoGAEANfAEGAEgNwgcGAFUNwgceAHwNcwcmAJ4NngoG
AF0OwgcmAIcOngomAMQOngoGANoOfAEeAOUOcwcKAAoP6ggeACYPfwcGADMPwgciAMoDTAgGAKAP
jQ8KAKoPEwAGALoPfAEeAO8PcwceAPkPcwcqAPQAIBAqAFYQIBAeAGgQfwceAHUQcwcGAKIQfAEe
AMMQcwcGAEIRjQ8KAHoR6ggaAJsR8wQaAKwR8wQaAOoR8wQWAAESWwMSAFESWwMOAJoSeBIOALYS
eBIOANASeBIOAOgSeBIiAAATTAgiABYTTAgiACgTTAgOAD0TeBIOAFETeBIiAF8TTAgiAHoTTAgO
AIwTeBIGAJ4TcwkGAL4TcwkGAPYT3BMAAAAAAQAAAAAAAQABAAAAAAApADcABQABAAEAAAAAAGsA
NwAJAAEAAgAAARAAdgA3AA0AAQADAAUBAACAAAAADQAFAAgABQEAAI4AAAANAAUADwABAAAAqQC1
AB0ABgARAAEAAADmALUALQAGABYAAQAAAPQAtQANAAgAGgABAAAAAAG1AA0ACQAcAAEAAAAKAbUA
IAAKAB0AMQCeASAAMQDHAS0AMQDpAToAMQAOAkcAIQDqApAABgD0AMkABgAAAc0AAQDABOEAAQDA
BOEAUYBGBfUAAQA2B/UAAQBDBzoBAQBPBzoBAQBZBz0BAQBrB/UAAQCcB0ABAQCmB0QBAQC1BzoB
AQDkB0gBAQDtB0gBUCAAAAAABhhPARMAAQBYIAAAAAAGGE8BEwABAGAgAAAAABEYigEXAAEAjCAA
AAAAEwiRARsAAQCkIAAAAAATCLcBKAABALwgAAAAABMI4AE1AAEA1CAAAAAAEwj+AUIAAQDsIAAA
AABGAkQCYwABAAghAAAAAEYCTQJoAAIAHCEAAAAAgwBeAmwAAgA0IQAAAABGAmYCcQACAEghAAAA
ABEAbwJ4AAIAZCEAAAAAAQCNAoAAAwCAIQAAAAAGGE8BEwAEAIghAAAAAAMIoQKLAAQAvCEAAAAA
BhhPARMABADQIQAAAAAGGE8BrwAEAOAhAAAAAEYK9gO7AAkA9CEAAAAARgoNBLsACQAIIgAAAACG
ACUEwAAJACAiAAAAAIYALQTAAAkAOCIAAAAABhhPARMACQBYIgAAAABGAnQE0QAJAIgiAAAAAEYD
kwTbAA0AnCIAAAAARgOmBNsADgCgIgAAAAAGGE8B5QAPALAiAAAAAAYINAXrABAA3CIAAAAABhhP
AeUAEADsIgAAAAAGGE8BEwARAPQiAAAAAEYCpgTbABEA+CMAAAAARgJZBRMAEgBoJwAAAABGAmQF
EwASANAnAAAAAEYCcAUNARIAFCgAAAAARgKPBRMAEwBUKAAAAAAGAKIFuwATANAoAAAAAAYAsAUS
ARMAlCkAAAAARgLEBRMAFADALAAAAAAGANkFuwAUAMgtAAAAAAYI4wVxABQA4C0AAAAABgjyBRgB
FADsLQAAAAAGCAcGaAAVAAQuAAAAAAYIFQYdARUAEC4AAAAABggjBmgAFgAoLgAAAAAGCC8GHQEW
ADQuAAAAAAYIOwbAABcATC4AAAAABghPBiIBFwBsLgAAAAAGCGMGcQAYAIQuAAAAAAYIbQYYARgA
7C4AAAAABgh3BnEAGQAELwAAAAAGCIkGGAEZABAvAAAAAAEImwa7ABoAMC8AAAAAAQC9BicBGgBs
LwAAAAABAN4GLgEbALwvAAAAAAEADwczARwAcDAAAAAAAQAjBxgBHQAAAAEASwIAAAEAhAIAAAEA
hAIAAAEAygMAAAIA1AMAAAMA3QMAAAQA5QMAAAUA7AMAAAEAgQQAAAIAiQQAAAMA5QMAAAQA7AMA
AAEA5QMAAAEAvAQAAAEAygMAAAEAygMAAAEAvAQAAAEAgwUAAAEAuQUAAAEAAQYAAAEAAQYAAAEA
AQYAAAEAAQYAAAEAAQYAAAEAAQYAAAEA2QYAAAEA6wYAAAEAHgcAAAEALgcJAE8BEwCRAE8BWAGh
AE8BZwERAE8BEwCpAE8BEwAkAE8BEwAsAE8BEwA0AE8BEwA8AE8BEwAkAKECiwAsAKECiwA0AKEC
iwA8AKECiwCxAE8BEwC5AE8BEwDBAE8BGAHJAKIJAQIZAEQCYwAZAE0CaAApAMMJDgIZAGYCcQDZ
AN8JHgIZAE8BEwDhAE8BLgJEAOoCkABMAAkKiwBMABMKqwJMAE8BEwDpAE8BIgE5AE8BrwD5ACUE
wAD5AC0EwAABAU8BIgFZAE8BEwBBAOAKxQIJAQ0LywIRAS4L0QIZATcLaAAJAWEL2AIhAS4L3gIp
AZoL6wCBAOML6gJJAS4L8AI5APIL9wJJAP0L/AJJAC4LAQMxAQQMBgMxAQkKDAOBAA8MaABRASsM
EwM5ATsMcQBRAUcMFwBBAFkFEwAZAZoMLQNpAbQMaABZANAMMwNxAfcMOQMZAfILaABpAS4LPwOB
ARwNaAB5ASoNRgMZAF4CbAApAFwNTAOBAGkNHQGBAIgNWgPxAJgN9QAZAcYNYQOBAesNaACpAQgO
ZwPxABYObgPxACQOcwNZASsOcQDxADQOeQOBADsOfwMxAUsOGAEpAGoOhQOxAXYObABZAacOjAO5
AS4LkgPBAQkKDAPJAd8OmQMxARMKDQExAfgOoANJAQYPpwPZAWYCrAM5AU8BGAHxADQOsQOBABYP
GAGBAOMFuQMpADwPvwPpAUkPcQApAF4CxQMpAFYPywNBAGQFEwBBAHAFDQFhAGUP9wPhAXcP/ANB
AI8FEwDxAYUPEwD5AU8BEwD5AQYPpwMBArYPBwT5AcAPDgQZAcgPwAApAdcPGAFZAMQFEwARAbQM
aABZAEAQLAQhAi4LMgQpAmUP9wOBAIUQOQQxApMQQgRBAoUPEwCpAa4QIgFpAbkQEwCpAbkQEwAR
AtUQSARJArQMaABJAi4LTgSpAd4QZwMZAi4LLgFZAeQQGAHZAe0QVQTZAfcQWgQZAv0LXwRZAQER
ZARZAQ4RHQFZARkRHQFZAScRHQFZATERHQG5AT4RagTBAeQQGAHBARMKDQHhAU4RlgRJAlgRnQRR
AmYRDAMZAi4LAQPxAHIRcQBZAoQRowTxADQOqgRRApIRwABBAMUR2wRpAtsR4QRhAi4L6gRxAgkK
DANhAvoREwB5AA4S+QR5ArQG/wSJAB0SAwV5ACQSCQV5AC8SDQVxADsSFAVxAEESEwAJAUcSLQWB
Ak8BEwCJAk8BGAGRAk8BGAGZAk8BWQWhAk8BEwCpAk8BHQGxAk8BGAG5Ak8BGAHBAk8BGAHJAk8B
GAGpAk8BIgHRAk8BpQbhAk8BEwDpAk8BHQHxAk8BEwD5Ak8BGAEOACgA+AApAIMAuwEuAFMFzwcu
AEMFpwcuAEsFsAdAACsAhgFAABMAXgFDABMAXgFDABsAbQFJAIMA2QFjABsAbQFjABMAXgFpAIMA
zAGAACsAhgGDABsAbQGDAHMAhgGDAHsAhgGJAIMA7QGgACsAhgGjAMMANgKjABMAXgHAACsAhgHD
AOsAugLDABMAXgHgACsAhgHjAAsBugIAASsAhgEAARMAXgEDAQsBugIgARMAXgEgASsAhgEpARMF
JQYpARsFCwYpAQsFsgVAARMAXgFAASsAhgFJAQsFsgVJAQMFqQVJARMFwgVgASsAhgFgARMAXgFj
AfsEhgFjAesERgVjAfMEXwVjAeMEOAVjAdsEhgFjAQsBugJpAQMFMwdpAQsFsgVpARMFPAeAASsA
hgGJASsFugKJARMFrAaJATMFXgGJAQsFbAagASsAhgGpAQsFbAapASMFXQapARMFfQbAARMAXgHA
ASsAhgHJAQsFbAbJATsFhgHJARMF8gbgASsAhgEAAhMAXgEAAisAhgFAAwsBugKAAwsBugKnAawB
sQG2AQYCCgIVAhoCKQIpArECwALAAgYCBgLlAhoD0wPyAwEEAQQZBCEEcASxBBoCCgIKAgYCGgLH
BBoCzQTUBPEEHAUGAgQAAQAGAAUABwAGAAkACAALAAkAAABzAU8AAAAsAlQAAADbAVkAAAA4Al4A
AAD0ApgAAAA5BMQAAABMBMQAAAA/BfAAAAD2B0wBAAABCFABAAALCFABAAATCFQBAAAjCEwBAAAp
CEwBAAA3CMQAAgAEAAMAAgAFAAUAAgAGAAcAAgAHAAkAAgAPAAsAAgASAA0AAgATAA8AAgAbABEA
AgAnABMAAQAoABMAAgApABUAAQAqABUAAgArABcAAQAsABcAAQAuABkAAgAtABkAAQAwABsAAgAv
ABsAAgAxAB0AAQAyAB0AAgAzAB8AdQB1AIgAiwGSAZkBoAGYAp8CEAMWBASAAAAAAAAAAAAAAAAA
AAAAALUAAAAEAAAAAAAAAAAAAAABAAoAAAAAAAoAAAAAAAAAAAAAAAoAEwAAAAAAAQAAAAAAAAAA
AAAAnQAAAwAAAAAMAAAAAAAAAAAAAACmAD4DAAAAAAwAAAAAAAAAAAAAAKYAjAMAAAAADAAAAAAA
AAAAAAAApgDQBAAAAAAEAAAAAAAAAAAAAAABAHMHAAAAAAQAAAAAAAAAAAAAAAEAfAEAAAAADAAA
AAAAAAAAAAAApgB6CgAAAAAMAAAAAAAAAAAAAACmAAEQAAAAAAUABAAGAAQAAAAQAAwAggIAABAA
GQCCAgAAAAAbAIICLQAkAi0ApgIAAAA8TW9kdWxlPgBtc2NvcmxpYgBNaWNyb3NvZnQuVmlzdWFs
QmFzaWMATXlBcHBsaWNhdGlvbgBTY3JpcHRDb21wb25lbnRfZThjNmYyY2JjY2Y2NDVhZTg2MmI2
ZGJmNGVhOGEzZDkuTXkATXlDb21wdXRlcgBNeVByb2plY3QATXlXZWJTZXJ2aWNlcwBUaHJlYWRT
YWZlT2JqZWN0UHJvdmlkZXJgMQBJbnB1dEJ1ZmZlcgBTY3JpcHRDb21wb25lbnRfZThjNmYyY2Jj
Y2Y2NDVhZTg2MmI2ZGJmNGVhOGEzZDkAVXNlckNvbXBvbmVudABDb25uZWN0aW9ucwBWYXJpYWJs
ZXMAU2NyaXB0TWFpbgBNaWNyb3NvZnQuVmlzdWFsQmFzaWMuQXBwbGljYXRpb25TZXJ2aWNlcwBB
cHBsaWNhdGlvbkJhc2UALmN0b3IATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkRldmljZXMAQ29tcHV0
ZXIAU3lzdGVtAE9iamVjdAAuY2N0b3IAZ2V0X0NvbXB1dGVyAG1fQ29tcHV0ZXJPYmplY3RQcm92
aWRlcgBnZXRfQXBwbGljYXRpb24AbV9BcHBPYmplY3RQcm92aWRlcgBVc2VyAGdldF9Vc2VyAG1f
VXNlck9iamVjdFByb3ZpZGVyAGdldF9XZWJTZXJ2aWNlcwBtX015V2ViU2VydmljZXNPYmplY3RQ
cm92aWRlcgBBcHBsaWNhdGlvbgBXZWJTZXJ2aWNlcwBFcXVhbHMAbwBHZXRIYXNoQ29kZQBUeXBl
AEdldFR5cGUAVG9TdHJpbmcAQ3JlYXRlX19JbnN0YW5jZV9fAFQAaW5zdGFuY2UARGlzcG9zZV9f
SW5zdGFuY2VfXwBnZXRfR2V0SW5zdGFuY2UATWljcm9zb2Z0LlZpc3VhbEJhc2ljLk15U2Vydmlj
ZXMuSW50ZXJuYWwAQ29udGV4dFZhbHVlYDEAbV9Db250ZXh0AEdldEluc3RhbmNlAENvenlSb2Mu
U1NJU1BsdXMuMjAxNABDb3p5Um9jLlNxbFNlcnZlci5TU0lTAFNjcmlwdEJ1ZmZlclBsdXMATWlj
cm9zb2Z0LlNxbFNlcnZlci5UeFNjcmlwdABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5QaXBlbGlu
ZQBTY3JpcHRDb21wb25lbnQATWljcm9zb2Z0LlNxbFNlcnZlci5QaXBlbGluZUhvc3QAUGlwZWxp
bmVCdWZmZXIAT3V0cHV0TmFtZU1hcABDb21wb25lbnQAT2JqZWN0SUQASXNJbnB1dABCdWZmZXIA
T3V0cHV0TWFwAGdldF9TdGF0aWNJbnB1dENvbHVtbnMAZ2V0X1N0YXRpY091dHB1dENvbHVtbnMA
TmV4dFJvdwBFbmRPZlJvd3NldABTdGF0aWNJbnB1dENvbHVtbnMAU3RhdGljT3V0cHV0Q29sdW1u
cwBTY3JpcHRDb21wb25lbnRQbHVzAFByb2Nlc3NJbnB1dABJbnB1dElEAElucHV0TmFtZQBJbnB1
dF9Qcm9jZXNzSW5wdXQASW5wdXRfUHJvY2Vzc0lucHV0Um93AFJvdwBQYXJlbnRDb21wb25lbnQA
TWljcm9zb2Z0LlNxbFNlcnZlci5EVFNSdW50aW1lV3JhcABNaWNyb3NvZnQuU3FsU2VydmVyLkR0
cy5SdW50aW1lLldyYXBwZXIASURUU0Nvbm5lY3Rpb25NYW5hZ2VyMTAwAGdldF9PcmFjbGUAT3Jh
Y2xlAE9yYWNsZVR5cGVQcm9wZXJ0eQBQcmVFeGVjdXRlAFBvc3RFeGVjdXRlAEFjcXVpcmVDb25u
ZWN0aW9ucwBUcmFuc2FjdGlvbgBSZWxlYXNlQ29ubmVjdGlvbnMAR2V0UHJvcGVydGllcwBWYWxp
ZGF0ZQBlcnJNZXNzYWdlAFJlaW5pdGlhbGl6ZU1ldGFEYXRhAEdldFRhYmxlcwBnZXRfQ29ubmVj
dGlvbgBzZXRfQ29ubmVjdGlvbgB2YWx1ZQBnZXRfQmF0Y2hTaXplAHNldF9CYXRjaFNpemUAZ2V0
X1RpbWVvdXQAc2V0X1RpbWVvdXQAZ2V0X0lzVGFibGVWYXJpYWJsZQBzZXRfSXNUYWJsZVZhcmlh
YmxlAGdldF9UYWJsZQBzZXRfVGFibGUAZ2V0X1RhYmxlVmFyaWFibGUAc2V0X1RhYmxlVmFyaWFi
bGUAZ2V0X0Fkb05ldENvbm5lY3Rpb25UeXBlAERhdGFUeXBlAERhdGFSZWNvcmRUeXBlVG9CdWZm
ZXJUeXBlXwB0eXBlAEdldFZhcmlhYmxlXwB2YXJOYW1lAFN5c3RlbS5JTwBTdHJlYW0AQmxvYkNv
bHVtbgBHZXRPcmFjbGVCbG9iXwBibG9iAEZpcmVFcnJvcl8AbWVzc2FnZQBtX2Nvbm5lY3Rpb24A
bV9iYXRjaFNpemUAbV90aW1lb3V0AG1faXNUYWJsZVZhcmlhYmxlAG1fdGFibGUAU3lzdGVtLkRh
dGEAU3lzdGVtLkRhdGEuQ29tbW9uAERiQ29tbWFuZABtX2NvbW1hbmQAbV9pbnB1dEluZGV4ZXMA
bV9jdXJyZW50Um93AFN5c3RlbS5SZWZsZWN0aW9uAENvbnN0cnVjdG9ySW5mbwBtX2Nsb2JDSQBt
X2Jsb2JDSQBDb25uZWN0aW9uAEJhdGNoU2l6ZQBUaW1lb3V0AElzVGFibGVWYXJpYWJsZQBUYWJs
ZQBUYWJsZVZhcmlhYmxlAEFkb05ldENvbm5lY3Rpb25UeXBlAFN5c3RlbS5Db21wb25lbnRNb2Rl
bABFZGl0b3JCcm93c2FibGVBdHRyaWJ1dGUARWRpdG9yQnJvd3NhYmxlU3RhdGUAU3lzdGVtLkNv
ZGVEb20uQ29tcGlsZXIAR2VuZXJhdGVkQ29kZUF0dHJpYnV0ZQBTeXN0ZW0uRGlhZ25vc3RpY3MA
RGVidWdnZXJIaWRkZW5BdHRyaWJ1dGUATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkNvbXBpbGVyU2Vy
dmljZXMAU3RhbmRhcmRNb2R1bGVBdHRyaWJ1dGUASGlkZU1vZHVsZU5hbWVBdHRyaWJ1dGUAU3lz
dGVtLkNvbXBvbmVudE1vZGVsLkRlc2lnbgBIZWxwS2V5d29yZEF0dHJpYnV0ZQBTeXN0ZW0uUnVu
dGltZS5Db21waWxlclNlcnZpY2VzAFJ1bnRpbWVIZWxwZXJzAEdldE9iamVjdFZhbHVlAFJ1bnRp
bWVUeXBlSGFuZGxlAEdldFR5cGVGcm9tSGFuZGxlAEFjdGl2YXRvcgBDcmVhdGVJbnN0YW5jZQBN
eUdyb3VwQ29sbGVjdGlvbkF0dHJpYnV0ZQBnZXRfVmFsdWUAc2V0X1ZhbHVlAFN5c3RlbS5SdW50
aW1lLkludGVyb3BTZXJ2aWNlcwBDb21WaXNpYmxlQXR0cmlidXRlAFN0cmluZwBTY3JpcHRCdWZm
ZXIAQ0xTQ29tcGxpYW50QXR0cmlidXRlAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRFRTUGlwZWxpbmVX
cmFwAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlBpcGVsaW5lLldyYXBwZXIASURUU0NvbXBvbmVu
dE1ldGFEYXRhMTAwAGdldF9Db21wb25lbnRNZXRhRGF0YQBJRFRTSW5wdXRDb2xsZWN0aW9uMTAw
AGdldF9JbnB1dENvbGxlY3Rpb24ASURUU0lucHV0MTAwAGdldF9JdGVtAGdldF9JRABJRFRTUnVu
dGltZUNvbm5lY3Rpb25Db2xsZWN0aW9uMTAwAGdldF9SdW50aW1lQ29ubmVjdGlvbkNvbGxlY3Rp
b24ASURUU1J1bnRpbWVDb25uZWN0aW9uMTAwAGdldF9Db25uZWN0aW9uTWFuYWdlcgBEYlBhcmFt
ZXRlcgBFeGNlcHRpb24ARGJUeXBlAERiUGFyYW1ldGVyQ29sbGVjdGlvbgBnZXRfUGFyYW1ldGVy
cwBnZXRfQnVmZmVyAElzTnVsbABnZXRfRGJUeXBlAEV4ZWN1dGVOb25RdWVyeQBQcm9qZWN0RGF0
YQBTZXRQcm9qZWN0RXJyb3IAZ2V0X01lc3NhZ2UAQ2xlYXJQcm9qZWN0RXJyb3IASURUU0V4dGVy
bmFsTWV0YWRhdGFDb2x1bW4xMDAASW50MzIASURUU0lucHV0Q29sdW1uQ29sbGVjdGlvbjEwMABn
ZXRfSW5wdXRDb2x1bW5Db2xsZWN0aW9uAGdldF9Db3VudABQaXBlbGluZUNvbXBvbmVudABnZXRf
SG9zdENvbXBvbmVudABJRFRTQnVmZmVyTWFuYWdlcjEwMABnZXRfQnVmZmVyTWFuYWdlcgBJRFRT
SW5wdXRDb2x1bW4xMDAAZ2V0X0xpbmVhZ2VJRABGaW5kQ29sdW1uQnlMaW5lYWdlSUQAQm9vbGVh
bgBCaW5kaW5nRmxhZ3MAQmluZGVyAEludm9rZU1lbWJlcgBzZXRfQ29tbWFuZFRpbWVvdXQAQ29t
bWFuZFR5cGUAc2V0X0NvbW1hbmRUeXBlAEVtcHR5AElEVFNFeHRlcm5hbE1ldGFkYXRhQ29sdW1u
Q29sbGVjdGlvbjEwMABnZXRfRXh0ZXJuYWxNZXRhZGF0YUNvbHVtbkNvbGxlY3Rpb24AZ2V0X0V4
dGVybmFsTWV0YWRhdGFDb2x1bW5JRABHZXRPYmplY3RCeUlEAElzTnVsbE9yRW1wdHkAQ29uY2F0
AGdldF9OYW1lAEZvcm1hdABDcmVhdGVQYXJhbWV0ZXIAc2V0X1BhcmFtZXRlck5hbWUAUHJvcGVy
dHlJbmZvAEdldFByb3BlcnR5AGdldF9Qcm9wZXJ0eVR5cGUASURUU0N1c3RvbVByb3BlcnR5Q29s
bGVjdGlvbjEwMABnZXRfQ3VzdG9tUHJvcGVydHlDb2xsZWN0aW9uAElEVFNDdXN0b21Qcm9wZXJ0
eTEwMABFbnVtAFBhcnNlAFBhcmFtZXRlckRpcmVjdGlvbgBzZXRfRGlyZWN0aW9uAEFkZABDb252
ZXJzaW9ucwBzZXRfQ29tbWFuZFRleHQARGJDb25uZWN0aW9uAEFzc2VtYmx5AGdldF9Bc3NlbWJs
eQBnZXRfRnVsbE5hbWUAR2V0Q29uc3RydWN0b3IAQWNxdWlyZUNvbm5lY3Rpb24AQ3JlYXRlQ29t
bWFuZABEaXNwb3NlAFN5c3RlbS5Db2xsZWN0aW9ucwBBcnJheUxpc3QASW50ZXJhY3Rpb24ASUlm
AEFycmF5AFRvQXJyYXkAZ2V0X0lzQXR0YWNoZWQAc2V0X0Nvbm5lY3Rpb25NYW5hZ2VySUQARGF0
YVRhYmxlAERhdGFSb3cATWljcm9zb2Z0LlNxbFNlcnZlci5NYW5hZ2VkRFRTAE1pY3Jvc29mdC5T
cWxTZXJ2ZXIuRHRzLlJ1bnRpbWUAZ2V0X0Rlc2lnbkNvbm5lY3Rpb25zAENvbm5lY3Rpb25NYW5h
Z2VyAERiRGF0YVJlYWRlcgBDb21tYW5kQmVoYXZpb3IARXhlY3V0ZVJlYWRlcgBHZXRTY2hlbWFU
YWJsZQBJRGlzcG9zYWJsZQBzZXRfSXNVc2VkAFJlbW92ZUFsbABEYXRhUm93Q29sbGVjdGlvbgBn
ZXRfUm93cwBOZXdBdABzZXRfTmFtZQBUb0Jvb2xlYW4AVG9JbnRlZ2VyAHNldF9EYXRhVHlwZQBz
ZXRfTGVuZ3RoAHNldF9QcmVjaXNpb24Ac2V0X1NjYWxlAHNldF9Db2RlUGFnZQBOZXcASUVudW1l
cmF0b3IAR2V0U2NoZW1hAEdldEVudW1lcmF0b3IAZ2V0X0N1cnJlbnQAVG9VcHBlcgBPcGVyYXRv
cnMAQ29tcGFyZVN0cmluZwBNb3ZlTmV4dABJRFRTVmFyaWFibGVzMTAwAElEVFNWYXJpYWJsZURp
c3BlbnNlcjEwMABnZXRfVmFyaWFibGVEaXNwZW5zZXIATG9ja09uZUZvclJlYWQASURUU1Zhcmlh
YmxlMTAwAFVubG9jawBCdWZmZXJDb2x1bW4AZ2V0X0NvbHVtbkluZm8ASW52b2tlAGdldF9MZW5n
dGgAR2V0QmxvYkRhdGEAV3JpdGUARmx1c2gARmlyZUVycm9yAFNTSVNTY3JpcHRDb21wb25lbnRF
bnRyeVBvaW50QXR0cmlidXRlAENvenlSb2MuU3FsU2VydmVyLlNTSVMuQXR0cmlidXRlcwBWYWxp
ZGF0ZVByb3BlcnRpZXNBdHRyaWJ1dGUARmlsdGVyUHJvcGVydGllc0F0dHJpYnV0ZQBTb3J0UHJv
cGVydGllc0F0dHJpYnV0ZQBDb2x1bW5NYXBwaW5nc0F0dHJpYnV0ZQBEZWZhdWx0VmFsdWVBdHRy
aWJ1dGUAQ2F0ZWdvcnlBdHRyaWJ1dGUARGVzY3JpcHRpb25BdHRyaWJ1dGUAQ29ubmVjdGlvbkF0
dHJpYnV0ZQBMaXN0QXR0cmlidXRlAFJlZnJlc2hQcm9wZXJ0aWVzQXR0cmlidXRlAFJlZnJlc2hQ
cm9wZXJ0aWVzAFZhcmlhYmxlQXR0cmlidXRlAENvbXBpbGF0aW9uUmVsYXhhdGlvbnNBdHRyaWJ1
dGUAUnVudGltZUNvbXBhdGliaWxpdHlBdHRyaWJ1dGUAU3lzdGVtLlJ1bnRpbWUuVmVyc2lvbmlu
ZwBUYXJnZXRGcmFtZXdvcmtBdHRyaWJ1dGUAU2NyaXB0Q29tcG9uZW50X2U4YzZmMmNiY2NmNjQ1
YWU4NjJiNmRiZjRlYThhM2Q5LmRsbAAAC0kAbgBwAHUAdAAADU8AcgBhAGMAbABlAAAVQgBpAG4A
ZABCAHkATgBhAG0AZQAAHUEAcgByAGEAeQBCAGkAbgBkAEMAbwB1AG4AdAAABSwAIAAACyIAewAw
AH0AIgAACToAewAwAH0AABlPAHIAYQBjAGwAZQBEAGIAVAB5AHAAZQAAFU8AcgBhAGMAbABlAFQA
eQBwAGUAAICBRABlAHMAdABpAG4AYQB0AGkAbwBuACAAdABhAGIAbABlACAAbgBvAHQAIABzAHAA
ZQBjAGkAZgBpAGUAZAAuACAAQwBoAGUAYwBrACAAcABhAGMAawBhAGcAZQAgAHAAcgBvAHQAZQBj
AHQAaQBvAG4AIABsAGUAdgBlAGwALgAATUkATgBTAEUAUgBUACAASQBOAFQATwAgAHsAMAB9ACAA
KAAgAHsAMQB9ACAAKQAgAFYAQQBMAFUARQBTACAAKAAgAHsAMgB9ACAAKQAASU8AcgBhAGMAbABl
AC4ARABhAHQAYQBBAGMAYwBlAHMAcwAuAFQAeQBwAGUAcwAuAE8AcgBhAGMAbABlAEMAbABvAGIA
LAAgAABJTwByAGEAYwBsAGUALgBEAGEAdABhAEEAYwBjAGUAcwBzAC4AVAB5AHAAZQBzAC4ATwBy
AGEAYwBsAGUAQgBsAG8AYgAsACAAABVDAG8AbgBuAGUAYwB0AGkAbwBuAAAfSQBzAFQAYQBiAGwA
ZQBWAGEAcgBpAGEAYgBsAGUAABtUAGEAYgBsAGUAVgBhAHIAaQBhAGIAbABlAAALVABhAGIAbABl
AAATQgBhAHQAYwBoAFMAaQB6AGUAAA9UAGkAbQBlAG8AdQB0AAAlUwBlAGwAZQBjAHQAIABjAG8A
bgBuAGUAYwB0AGkAbwBuAC4AADNTAGUAbABlAGMAdAAgAGQAZQBzAHQAaQBuAGEAdABpAG8AbgAg
AHQAYQBiAGwAZQAuAAAlTQBhAHAAIABpAG4AcAB1AHQAIABjAG8AbAB1AG0AbgBzAC4AABVOAG8A
IABpAG4AcAB1AHQAcwAuAAAxQwBvAG4AbgBlAGMAdABpAG8AbgAgAG4AbwB0ACAAcwBlAGwAZQBj
AHQAZQBkAC4AAD9EAGUAcwB0AGkAbgBhAHQAaQBvAG4AIAB0AGEAYgBsAGUAIABuAG8AdAAgAHMA
ZQBsAGUAYwB0AGUAZAAuAAAVQwBvAGwAdQBtAG4ATgBhAG0AZQAAEUQAYQB0AGEAVAB5AHAAZQAA
DUkAcwBMAG8AbgBnAAAVQwBvAGwAdQBtAG4AUwBpAHoAZQAAIU4AdQBtAGUAcgBpAGMAUAByAGUA
YwBpAHMAaQBvAG4AABlOAHUAbQBlAHIAaQBjAFMAYwBhAGwAZQAAGVAAcgBvAHYAaQBkAGUAcgBU
AHkAcABlAAANVABhAGIAbABlAHMAAAlVAFMARQBSAAAXIgB7ADAAfQAiAC4AIgB7ADEAfQAiAAAP
QQBEAE8ALgBOAEUAVAAANUQAYQB0AGEAUgBlAGMAbwByAGQAVAB5AHAAZQBUAG8AQgB1AGYAZgBl
AHIAVAB5AHAAZQAAJU8AcgBhAGMAbABlACAARABlAHMAdABpAG4AYQB0AGkAbwBuAAA5Q1rzhPdw
ToRd1JD/4DNpAAi3elxWGTTgiQiwP19/EdUKOgMgAAEDAAABBAAAEgwHBhUSGAESDAQAABIIBwYV
EhgBEggEAAASEQcGFRIYARIRBAAAEhQHBhUSGAESFAQIABIMBAgAEggECAASEQQIABIUBCABAhwD
IAAIBCAAEhUDIAAOAh4ABxABAR4AHgAHMAEBARAeAAITAAQgABMABwYVEhkBEwAEKAATAAgWz0kL
uAw06giJhF3NgIDMkQsgBQESIQgCEiUSKQQgAB0OAyAAAgQoAB0OAwYSJAMGEigJIAQBCA4SJRIp
BSABARIcAwYSIQUgAQESIQQgABIxBCgAEjECBg4UTwByAGEAYwBsAGUAVAB5AHAAZQAEIAEBHAUg
AQIQDgQgAQEOBCABAQgEIAEBAgYgARE1EhUEIAEcDgYgARI5Ej0CBggCBgIDBhJBAwYdCAMGEkUD
KAAOAygACAMoAAIFIAEBEU0IAQABAAAAAAAFIAIBDg4YAQAKTXlUZW1wbGF0ZQgxMC4wLjAuMAAA
BAEAAAAGFRIYARIMBhUSGAESCAYVEhgBEhEGFRIYARIUBAcBEgwEBwESCAQHARIRBAcBEhQQAQAL
TXkuQ29tcHV0ZXIAAAwBAAdNeS5Vc2VyAAATAQAOTXkuQXBwbGljYXRpb24AABMBAA5NeS5XZWJT
ZXJ2aWNlcwAABAABHBwDBwECAwcBCAYAARIVEWkEBwESFQMHAQ4FEAEAHgAECgEeAAQHAR4AByAE
AQ4ODg5hAQA0U3lzdGVtLldlYi5TZXJ2aWNlcy5Qcm90b2NvbHMuU29hcEh0dHBDbGllbnRQcm90
b2NvbBJDcmVhdGVfX0luc3RhbmNlX18TRGlzcG9zZV9fSW5zdGFuY2VfXwAAAAYVEhgBEwAGFRIZ
ARMABAoBEwAFIAEBEwAIBwMTABMAEwAFAQAAAAAEBwEdDgUgABKAhQUgABKAiQYgARKAjRwFIAAS
gJEGIAESgJUcBAcBEjEFIAASgKUGIAESgJkIBCAAEiUEIAECCAQgARwIBSAAEYChAyAAHAIdHAYA
AQESgJ0SBwkIHRwICBKAmRwSgJ0IEYChBSAAEoC1BSAAEoC5BSAAEoC9BiABEoDBHAUgAggICA0g
BRwOEYDJEoDNHB0cBiABARGA0QUgABKA1QYgARKArQgEAAECDgUAAg4ODgUAAg4OHAUgABKAmQYg
ARKA2Q4FIAASgN0GIAESgOEcBgACHBIVDgYgAQERgOkEIAEIHAQAAQ4cBwAEDg4cHBwFIAASgPEF
IAASgPUFAAESFQ4HIAESRR0SFR4HEBIVEhUIDg4SgI0OCAgSgK0SgJkSFQgdHAgdEhUEBwEdHAQg
ARwcBCAAEkEFBwESgPEGAAMcAhwcByABEoEFEhUCHQ4HBwIdDhKA/QoHBAICEoCNEoCdBSAAEoER
BiABEoEVHAggARKBGRGBHQUgABKBCQUgABKBJQYgARKBDQgEAAECHAQAAQgcBCABAg4FIAEBETUF
IAASgOElBxIIEoCNEoEJEkESgPEICBKArRKBDRE1CAgSgOESFQgIETURNQYgARKBCQ4FIAASgSkG
AAMIDg4CBgADDg4cHBUHCBKA8R0OEoD9EoEJEoENDg4SgSkFBwESgI0GBwIdDh0OBgcCETUdHAUg
ABKBNQggAgEOEBKBMQYgARKBORwHBwMcHBKBMQUgABGBPQMGETUFIAEcHRwDIAAJBiACHQUICAcg
AwEdBQgIEAcGHQUSORI5EYE9EYE9HRwKIAYBCA4ODggQAg0BAAhWYWxpZGF0ZQAAEgEADUdldFBy
b3BlcnRpZXMAAAUgAQEdDkkBAAYAAAAKQ29ubmVjdGlvbglCYXRjaFNpemUHVGltZW91dA9Jc1Rh
YmxlVmFyaWFibGUFVGFibGUNVGFibGVWYXJpYWJsZQAACAEAECcAAAAADwEACkNvbm5lY3Rpb24A
AEgBAENTcGVjaWZpZXMgdGhlIG51bWJlciBvZiByb3dzIHRvIGJlIHNlbnQgYXMgYSBiYXRjaCB0
byB0aGUgZGF0YWJhc2UuAAAZAQAUQWRvTmV0Q29ubmVjdGlvblR5cGUAADcBADJTZWxlY3QgY29u
bmVjdGlvbiB0byBPcmFjbGUgRGF0YSBQcm92aWRlciBmb3IgLk5FVAAADgEACUdldFRhYmxlcwAA
EAEAC0Rlc3RpbmF0aW9uAAAnAQAiRGVzdGluYXRpb24gdGFibGUgdG8gbG9hZCBpbiBidWxrLgAA
BiABARGBbUUBAEBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZGVzdGluYXRpb24gdGFibGUgaXMgc3Rv
cmVkIGluIGEgdmFyaWFibGUuAABAAQA7U3BlY2lmaWVzIHRoZSB2YXJpYWJsZSB0aGF0IGNvbnRh
aW5zIHRoZSBkZXN0aW5hdGlvbiB0YWJsZS4AAAgBAB4AAAAAAGoBAGVTcGVjaWZpZXMgdGhlIG51
bWJlciBvZiBzZWNvbmRzIGFsbG93ZWQgZm9yIHRoZSBidWxrIGNvcHkgb3BlcmF0aW9uIHRvIGNv
bXBsZXRlIGJlZm9yZSBpdCBpcyBhYm9ydGVkLgAACAEACAAAAAAAHgEAAQBUAhZXcmFwTm9uRXhj
ZXB0aW9uVGhyb3dzAUcBABouTkVURnJhbWV3b3JrLFZlcnNpb249djQuMAEAVA4URnJhbWV3b3Jr
RGlzcGxheU5hbWUQLk5FVCBGcmFtZXdvcmsgNAC8YQAAAAAAAAAAAADeYQAAACAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA0GEAAAAAAAAAAAAAAAAAAAAAAAAAAF9Db3JEbGxNYWluAG1zY29yZWUuZGxs
AAAAAAD/JQAgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEAAAABgAAIAAAAAAAAAAAAAA
AAAAAAEAAQAAADAAAIAAAAAAAAAAAAAAAAAAAAEAAAAAAEgAAABYgAAA7AIAAAAAAAAAAAAA7AI0
AAAAVgBTAF8AVgBFAFIAUwBJAE8ATgBfAEkATgBGAE8AAAAAAL0E7/4AAAEAAAAAAAAAAAAAAAAA
AAAAAD8AAAAAAAAABAAAAAIAAAAAAAAAAAAAAAAAAABEAAAAAQBWAGEAcgBGAGkAbABlAEkAbgBm
AG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEAdABpAG8AbgAAAAAAAACwBEwCAAABAFMAdAByAGkA
bgBnAEYAaQBsAGUASQBuAGYAbwAAACgCAAABADAAMAAwADAAMAA0AGIAMAAAACwAAgABAEYAaQBs
AGUARABlAHMAYwByAGkAcAB0AGkAbwBuAAAAAAAgAAAAMAAIAAEARgBpAGwAZQBWAGUAcgBzAGkA
bwBuAAAAAAAwAC4AMAAuADAALgAwAAAAjAA1AAEASQBuAHQAZQByAG4AYQBsAE4AYQBtAGUAAABT
AGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfAGUAOABjADYAZgAyAGMAYgBjAGMAZgA2ADQA
NQBhAGUAOAA2ADIAYgA2AGQAYgBmADQAZQBhADgAYQAzAGQAOQAuAGQAbABsAAAAAAAoAAIAAQBM
AGUAZwBhAGwAQwBvAHAAeQByAGkAZwBoAHQAAAAgAAAAlAA1AAEATwByAGkAZwBpAG4AYQBsAEYA
aQBsAGUAbgBhAG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AZQA4AGMANgBm
ADIAYwBiAGMAYwBmADYANAA1AGEAZQA4ADYAMgBiADYAZABiAGYANABlAGEAOABhADMAZAA5AC4A
ZABsAGwAAAAAADQACAABAFAAcgBvAGQAdQBjAHQAVgBlAHIAcwBpAG8AbgAAADAALgAwAC4AMAAu
ADAAAAA4AAgAAQBBAHMAcwBlAG0AYgBsAHkAIABWAGUAcgBzAGkAbwBuAAAAMAAuADAALgAwAC4A
MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAwAAADwMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA=]]></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_e8c6f2cbccf645ae862b6dbf4ea8a3d9</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><connections><connection id="14" name="Oracle" connectionManagerID="{6147BAA9-12FB-4778-BD94-8512576CBD18}" /></connections><inputs><input id="15" name="Input" hasSideEffects="true"><externalMetadataColumns isUsed="True" /></input></inputs></component>