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

Option Strict Off
Option Explicit On



Partial Friend NotInheritable Class MySettings
    Inherits System.Configuration.ApplicationSettingsBase

    Private Shared m_Value As MySettings

    Private Shared m_SyncObject As Object = New Object

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

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

' Review the values of the assembly attributes

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

<Assembly: ComVisible(False)> 

'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("45fc394e-b084-4f2d-8391-312f285505ef")> 

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

<Assembly: AssemblyVersion("1.0.0.0")> 
<Assembly: AssemblyFileVersion("1.0.0.0")> 
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\settings.settings]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version='1.0' encoding='iso-8859-1'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)" GeneratedClassNamespace="" GeneratedClassName="MySettings">
  <Profiles>
    <Profile Name="(Default)" />
  </Profiles>
  <Settings />
</SettingsFile>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\bufferwrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services buffer wrappers
' This module defines classes for accessing data flow buffers
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!


Option Strict Off   ' This allows usage of PipelineBuffer typed accessors.

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class InputBuffer
    Inherits ScriptBufferPlus

    Public Sub New(ByVal Component As ScriptComponent, ByVal ObjectID As Integer, ByVal IsInput As Boolean, ByVal Buffer As PipelineBuffer)
        MyBase.New(Component, ObjectID, IsInput, Buffer)
    End Sub

    Public Overrides ReadOnly Property StaticInputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public Overrides ReadOnly Property StaticOutputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public Overloads Function NextRow() As Boolean
        NextRow = MyBase.NextRow()
    End Function

    Public Overloads Function EndOfRowset() As Boolean
        EndOfRowset = MyBase.EndOfRowset
    End Function

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\resources.designer.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA['------------------------------------------------------------------------------
' <autogenerated>
'     This code was generated by a tool.
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' </autogenerated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On


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

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
</root>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\scriptcomponent_db237b1b862b4617bf8f943a1156d8a0.vbproj]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- This section defines project-level properties.

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

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

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

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

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


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<SortProperties(New String() {"StartColumn", "EndColumn", "ValueColumn", "ResultVariable"})> _
<ValidateProperties("Validate")> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Call m_list.Add(New RangeValue( _
            Row.Buffer(m_startIndex), _
            Row.Buffer(m_endIndex), _
            Row.Buffer(m_valueIndex)))
    End Sub ' Input_ProcessInputRow


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

        ' Setup range list object.
        Dim vars As IDTSVariables100
        Call Me.VariableDispenser.LockOneForWrite(Me.ResultVariable, vars)
        Try
            Try
                Dim rvd As RangeValueDictionary = CType( _
                    vars(Me.ResultVariable).Value, _
                    RangeValueDictionary)
                m_list = rvd.Ranges
            Catch ex As Exception
                ' Dictionary not yet initialized.
                m_list = New List(Of RangeValue)
                vars(Me.ResultVariable).Value = New RangeValueDictionary(m_list)
            End Try
        Finally
            Call vars.Unlock()
        End Try

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

        ' Find range start column index.
        m_startIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            input.InputColumnCollection(Me.StartColumn).LineageID)

        ' Find range end column index.
        m_endIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            input.InputColumnCollection(Me.EndColumn).LineageID)

        ' Find value column index.
        m_valueIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            input.InputColumnCollection(Me.ValueColumn).LineageID)
    End Sub ' PreExecute


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

        ' Sort for binary search to work.
        Call m_list.Sort()

        m_list = Nothing
        m_startIndex = -1
        m_endIndex = -1
        m_valueIndex = -1
    End Sub ' PostExecute


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

        Try
            If String.IsNullOrEmpty(Me.StartColumn) Then
                Throw New Exception("Select range start column.")
            ElseIf String.IsNullOrEmpty(Me.EndColumn) Then
                Throw New Exception("Select range end colum.")
            ElseIf String.IsNullOrEmpty(Me.ValueColumn) Then
                Throw New Exception("Select value colum.")
            ElseIf String.IsNullOrEmpty(Me.ResultVariable) Then
                Throw New Exception("Select dictionary result variable.")
            Else
                Dim managedComponent As CManagedComponentWrapper = Me.ComponentMetaData.Instantiate()
                Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
                Dim virtInput As IDTSVirtualInput100 = input.GetVirtualInput()

                Call input.InputColumnCollection.RemoveAll()

                ' Setup selected range start column.
                Dim startColumn As IDTSInputColumn100 = managedComponent.SetUsageType( _
                    input.ID, _
                    virtInput, _
                    virtInput.VirtualInputColumnCollection(Me.StartColumn).LineageID, _
                    DTSUsageType.UT_READONLY)

                ' Setup selected range start column.
                Dim endColumn As IDTSInputColumn100 = managedComponent.SetUsageType( _
                    input.ID, _
                    virtInput, _
                    virtInput.VirtualInputColumnCollection(Me.EndColumn).LineageID, _
                    DTSUsageType.UT_READONLY)

                ' Setup selected value column.
                Dim valueColumn As IDTSInputColumn100 = managedComponent.SetUsageType( _
                    input.ID, _
                    virtInput, _
                    virtInput.VirtualInputColumnCollection(Me.ValueColumn).LineageID, _
                    DTSUsageType.UT_READONLY)
            End If
        Catch ex As Exception
            result = False
            errMessage = ex.Message
        End Try

        Validate = result
    End Function    ' Validate


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select range start column.")> _
    <Category("Input")> _
    <InputVirtualColumn()> _
    Public Property StartColumn() As String
        Get
            StartColumn = m_startColumn
        End Get
        Set(ByVal value As String)
            m_startColumn = value
        End Set
    End Property    ' StartColumn


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select range end column.")> _
    <Category("Input")> _
    <InputVirtualColumn()> _
    Public Property EndColumn() As String
        Get
            EndColumn = m_endColumn
        End Get
        Set(ByVal value As String)
            m_endColumn = value
        End Set
    End Property    ' EndColumn


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select value column.")> _
    <Category("Input")> _
    <InputVirtualColumn()> _
    Public Property ValueColumn() As String
        Get
            ValueColumn = m_valueColumn
        End Get
        Set(ByVal value As String)
            m_valueColumn = value
        End Set
    End Property    ' ValueColumn


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select variable with dictionary object.")> _
    <Category("Result")> _
    <Variable()> _
    Public Property ResultVariable() As String
        Get
            ResultVariable = m_resultVar
        End Get
        Set(ByVal value As String)
            m_resultVar = value
        End Set
    End Property    ' ResultVariable

#End Region ' Properties


#Region "Attributes"
    Private m_startColumn As String
    Private m_endColumn As String
    Private m_valueColumn As String
    Private m_resultVar As String

    Private m_list As List(Of RangeValue)
    Private m_startIndex As Integer
    Private m_endIndex As Integer
    Private m_valueIndex As Integer
#End Region ' Attributes
End Class   ' ScriptMain
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\rangedictionary.vb]]></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.Collections.Generic


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Container class for range value.
Public Class RangeValue
    Implements IComparable(Of RangeValue)


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub New(ByVal startR As Object, ByVal endR As Object, ByVal value As Object)
        m_start = CType(startR, IComparable)
        m_end = CType(endR, IComparable)
        m_value = value
    End Sub ' RangeValue


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function CompareTo(ByVal other As RangeValue) As Integer Implements IComparable(Of RangeValue).CompareTo
        Dim compareStart As Integer = m_start.CompareTo(other.m_start)
        Dim compareEnd As Integer = m_end.CompareTo(other.m_end)

        If compareStart < 0 AndAlso compareEnd < 0 Then
            Return -1
        End If

        If compareStart > 0 AndAlso compareEnd > 0 Then
            Return 1
        End If

        If compareStart = 0 AndAlso compareEnd = 0 Then
            Return 0
        End If

        Throw New ArgumentException("Overlapping Range.")
    End Function    ' CompareTo


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns:
    ' 0 if value is in the specified range.
    ' < 0 if value is below the range.
    ' > 0 if value is above the range.
    Public Function CompareTo(ByVal key As Object) As Integer
        Dim compareStart As Integer = m_start.CompareTo(key)
        Dim compareEnd As Integer = m_end.CompareTo(key)

        If compareStart <= 0 AndAlso compareEnd >= 0 Then
            Return 0
        ElseIf compareEnd < 0 Then
            Return -1
        End If

        Return 1
    End Function    ' CompareTo


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public ReadOnly Property Value() As Object
        Get
            Return m_value
        End Get
    End Property    ' Value
#End Region ' Properties


#Region "Attributes"
    Private m_start As IComparable
    Private m_end As IComparable
    Private m_value As Object
#End Region ' Attributes
End Class   ' RangeValue


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' The only implemented IDictionary interface methods are: Contains, Item Get
'
' Uses binary search to find value in specialized Ranges array.
Public Class RangeValueDictionary
    Implements IDictionary


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub New(ByVal list As List(Of RangeValue))
        m_list = list
    End Sub ' RangeValueDictionary


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub CopyTo(ByVal array As Array, ByVal index As Integer) Implements ICollection.CopyTo
        Throw New Exception("Not Implemented.")
    End Sub ' CopyTo


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub Add(ByVal key As Object, ByVal value As Object) Implements IDictionary.Add
        Throw New Exception("Not Implemented.")
    End Sub ' Add


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub Clear() Implements IDictionary.Clear
        Throw New Exception("Not Implemented.")
    End Sub ' Clear


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function Contains(ByVal key As Object) As Boolean Implements IDictionary.Contains
        Contains = GetKeyIndex_(key) >= 0
    End Function    ' Contains


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function GetEnumerator() As IDictionaryEnumerator Implements IDictionary.GetEnumerator
        Throw New Exception("Not Implemented.")
    End Function    ' GetEnumerator


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub Remove(ByVal key As Object) Implements IDictionary.Remove
        Throw New Exception("Not Implemented.")
    End Sub ' Remove


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Function GetEnumerator1() As IEnumerator Implements IEnumerable.GetEnumerator
        Throw New Exception("Not Implemented.")
    End Function    ' GetEnumerator1


#Region "Properties"
    Public ReadOnly Property Ranges() As List(Of RangeValue)
        Get
            Return m_list
        End Get
    End Property    ' Ranges


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public ReadOnly Property Count() As Integer Implements ICollection.Count
        Get
            Throw New Exception("Not Implemented.")
        End Get
    End Property    ' Count


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public ReadOnly Property IsSynchronized() As Boolean Implements ICollection.IsSynchronized
        Get
            IsSynchronized = False
        End Get
    End Property    ' IsSynchronized


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public ReadOnly Property SyncRoot() As Object Implements ICollection.SyncRoot
        Get
            Return m_list
        End Get
    End Property    ' SyncRoot


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public ReadOnly Property IsFixedSize() As Boolean Implements IDictionary.IsFixedSize
        Get
            IsFixedSize = True
        End Get
    End Property    ' IsFixedSize


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public ReadOnly Property IsReadOnly() As Boolean Implements IDictionary.IsReadOnly
        Get
            IsReadOnly = True
        End Get
    End Property    ' IsReadOnly


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Default Public Property Item(ByVal key As Object) As Object Implements IDictionary.Item
        Get
            Dim index As Integer = GetKeyIndex_(key)
            Dim rangeValue As RangeValue = m_list(index)

            Return rangeValue.Value
        End Get
        Set(ByVal value As Object)
            Throw New Exception("Not Implemented.")
        End Set
    End Property    ' Item


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public ReadOnly Property Keys() As ICollection Implements IDictionary.Keys
        Get
            Throw New Exception("Not Implemented.")
        End Get
    End Property    ' Keys


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public ReadOnly Property Values() As ICollection Implements IDictionary.Values
        Get
            Throw New Exception("Not Implemented.")
        End Get
    End Property    ' Values
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetKeyIndex_(ByVal key As Object) As Integer
        If Not m_cachedKey Is Nothing AndAlso m_cachedKey.CompareTo(key) = 0 Then
            ' Searched key index is already cached.
            Return m_cachedIndex
        End If

        m_cachedKey = CType(key, IComparable)
        m_cachedIndex = BinarySearch_(key)

        GetKeyIndex_ = m_cachedIndex
    End Function    ' GetKeyIndex_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Binary search for specified key.
    Private Function BinarySearch_(ByVal key As Object) As Integer
        Dim min As Integer = 0
        Dim max As Integer = m_list.Count - 1

        Do While min <= max
            Dim mid As Integer = (min + max) >> 1
            Dim compare As Integer = m_list(mid).CompareTo(key)

            If compare = 0 Then
                Return mid
            End If

            If compare < 0 Then
                min = mid + 1
            Else
                max = mid - 1
            End If
        Loop

        Return Not min
    End Function    ' BinarySearch_
#End Region ' Internals


#Region "Attributes"
    Private m_list As List(Of RangeValue)
    Private m_cachedKey As IComparable
    Private m_cachedIndex As Integer
#End Region ' Attributes
End Class   ' RangeDictionary
]]></arrayElement></arrayElements></property>
<property id="38" name="BinaryCode" dataType="System.String" state="cdata" isArray="true" description="Stores the binary representation of the component" typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None"><arrayElements arrayElementCount="2"><arrayElement dataType="System.String"><![CDATA[\bin\scriptcomponent_db237b1b862b4617bf8f943a1156d8a0.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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
DgDSBKADBgA6Bh8GBgCvBp4GBgDcBscGGgBDBy4HBgB6BwYCBgCoBwYCBgDdB8oHBgDuBwYCBgAa
CMoHBgBFCMoHBgDGCMoHGgB+CWgJGgCXCWgJGgDECawJBgDuCdsJCgAtCgYKCgBFChMAGgB6Cl0K
BgCvCo8KBgDNCgYCBgDxCgYCCgAKCxMABgBOCy8LBgBiCwYCEgBpC+UDBgB2CwYCHgDZC7ALHgAI
DLALHgAzDLALIgCdDHUMBgCuDAYCIgC4DHUMIgD3DHUMCgAHDQYKBgA8DQYCFgBCDeUDHgBmDbAL
HgCNDbALHgDEDbALHgAADrALHgAZDrALHgBhDrALHgCmDrALHgDADrALHgDbDrALEgABD+UDDgBK
DygPDgBmDygPDgB+DygPGgCaD2gJGgCsD2gJDgDBDygPBgDlD9MPBgAMEPsPBgAfENsJBgA8EAYC
BgBOEMoHBgBaENMPBgC9EI8KBgDdEI8KBgD7ENMPBgAYES8LBgAmEdMPBgBBEdMPBgBcEdMPBgB1
EdMPBgCOEdMPBgCrEdMPAAAAAAEAAAAAAAEAAQAAAAAAKQA3AAUAAQABAAAAAAByADcACQABAAIA
AAEQAH0ANwANAAEAAwAFAQAAhwAAAA0ABQAIAAUBAACVAAAADQAFAA8AAQAAALAAvAAdAAYAEQAB
AAAA9AC8ACkABgAWAAEAAAACAbwADQAIABoAAQAAAA4BvAANAAkAGwABAAAAGAG8ACAACgAcAAAA
AAAjAS8BDQASACkAAAEQAHQBvAA5ABQALQABAAAAfwG8AA0AFgAwAAEAAACKAbwADQAZADQAMQAo
AiAAMQBRAi0AMQBzAjoAMQCYAkcAIQB0A5AABgACAccABgAOAcsAAQAoBdwAAQAoBdwAAQDrBfEA
AQD5BfEAAQAFBvEAAQATBvEAAQBBBvQAAQBIBvwAAQBVBvwAAQBgBvwAEQC/BgMBEQDoBgcBEQBb
ByUBEQBjBykBAQC0B1MBAQC8B1MBAQDCBykBAQBBBvQAAQABCVMBAQANCfwACCEAAAAABhjZARMA
AQAQIQAAAAAGGNkBEwABABghAAAAABEYFAIXAAEARCEAAAAAEwgbAhsAAQBcIQAAAAATCEECKAAB
AHQhAAAAABMIagI1AAEAjCEAAAAAEwiIAkIAAQCkIQAAAABGAs4CYwABAMAhAAAAAEYC1wJoAAIA
1CEAAAAAgwDoAmwAAgDsIQAAAABGAvACcQACAAAiAAAAABEA+QJ4AAIAHCIAAAAAAQAXA4AAAwA4
IgAAAAAGGNkBEwAEAEAiAAAAAAMIKwOLAAQAdCIAAAAABhjZARMABACIIgAAAAAGGNkBrwAEAJgi
AAAAAEYKaAS5AAgArCIAAAAARgp/BLkACADAIgAAAACGAJcEvgAIANgiAAAAAIYAnwS+AAgA8CIA
AAAABhjZARMACAAQIwAAAABGAuYEzwAIAEAjAAAAAEYD+wTWAAoAVCMAAAAARgMOBdYACwBYIwAA
AAAGGNkB4AAMAGgjAAAAAAYY2QHgAA0AeCMAAAAABhjZARMADgCAIwAAAABGAg4F1gAOAOAjAAAA
AEYCOAUTAA8AMCUAAAAARgJDBRMADwBgJQAAAAAGAE8F5gAPALwmAAAAAAYIYwVxABAA1CYAAAAA
BghzBewAEADgJgAAAAAGCIkFcQARAPgmAAAAAAYIlwXsABEABCcAAAAABgilBXEAEgAcJwAAAAAG
CLUF7AASACgnAAAAAAYIxQVxABMAQCcAAAAABgjYBewAEwBMJwAAAAADGNkBEwAUAFQnAAAAABYI
9AYLARQAkCcAAAAAFggIBxABFACkJwAAAAAWCBQHFQEUAKwnAAAAABEYFAIXABUAwCcAAAAABhjZ
ARMAFQDIJwAAAAAWCHAHLAEVACQoAAAAAAYY2QE9ARUAUCgAAAAAZgOUB0QBGACsKAAAAAAGAJQH
SgEZAPAoAAAAAAYIcAdPARoABCkAAAAABhjZAVsBGgAUKQAAAABmA/QHZQEbACApAAAAAGYDBwhs
AR0ALCkAAAAAZgMLCBMAHwA4KQAAAABmAxEIYwAfAFwpAAAAAGYDMAhyASAAdCkAAAAAZgM+CHcB
IACAKQAAAABmA1EIfAEhAJgpAAAAAAYIYAiBASEArCkAAAAAZgtrCGgAIQDEKQAAAABmC3UIvgAh
ANQpAAAAAGYLiAhPASEA6CkAAAAAZguVCL4AIQD4KQAAAABmC6UIvgAhAAgqAAAAAGYLtAiKASEA
OCoAAAAAZgu9CGwBIgBEKgAAAABmC9IIjwEkAFwqAAAAAGYL2wiPASQAdCoAAAAAAQDmCEoBJADM
KgAAAAABAPMISgElAAAAAQDVAgAAAQAOAwAAAQAOAwAAAQBGBAAAAgBQBAAAAwBZBAAABABhBAAA
AQDzBAAAAgBhBAAAAQBhBAAAAQAkBQAAAQBGBAAAAQBGBAAAAQAkBQAAAQBYBQAAAQCDBQAAAQCD
BQAAAQCDBQAAAQCDBQAAAQAgBwAAAQCIBwAAAgCPBwAAAwCDBQAAAQCeBwAAAQCkBwAAAQDpBwAA
AQD7BwAAAgABCAAAAQCkBwAAAgCDBQAAAQCkBwAAAQCkBwAAAQCkBwAAAQCkBwAAAgCDBQAAAQCk
BwAAAQCkBw4AEgAPAEUACQDZARMAsQDZAa8BwQDZAb4BEQDZARMAyQDZARMALADZARMANADZARMA
PADZARMARADZARMALAArA4sANAArA4sAPAArA4sARAArA4sA0QDZARMA2QDZARMA4QDZAewA6QC+
ClcCGQDOAmMAGQDXAmgAKQDfCmQCGQDwAnEA+QD7CnQCGQDZARMAAQHZAYQCTAB0A5AAVABwB4sA
VAAlCwEDVADZARMACQHZAQ4DOQDZAa8AGQGXBL4AGQGfBL4AIQHZAQ4DUQDZARMAQQDyCx4DKQEf
DCQDMQG0CCoDOQFADGgAOQBHDDEDSQC0CDYDXAAHCAEDQQA4BRMAQQDRDEIDUQHnDEgDQQG0CFED
WQFwB08BYQETDVgDXADZARMAWQElC3cBYQEjDRcAQQE1DRMAUQBUDV8DcQF7DWUDOQFHDGgAOQGq
DWsDgQG0CHEDiQHXDWgAeQHlDXgDQQBDBRMAXAD7DRMAEQEtDowDSQHZAewAKQE7DpEDOQFHDpcD
gQFXDhMAmQGFDp0DoQG0CKMDqQHXDWgAsQHoDqoDSQH1DnEAwQHZARMAyQHZAewA0QHZAeAD2QHZ
ARMA4QHZAewA6QHZAewA8QHZARMAKQDuD7wEYQDZAcIEcQDZARMAAQIUEN8EAQIaEN8ECQLZARMA
JACUB+kEgQCUB0oBEQLZAewAqQD0B2UBiQAHCGwBiQALCBMAiQARCGMAiQAwCHIBiQA+CHcBGQIw
CHwBqQBrCGgAqQB1CL4AqQCICE8BiQCVCL4AiQClCL4AiQC0CIoBiQC9CGwBiQDSCI8BiQDbCI8B
XAC0CAwFXABrCGgAIQLZAewAKQLZATAFMQLZARMAOQLZAewAQQLZAewASQLZAewAUQLZAewAWQLZ
AewAYQLZAewAaQLZAewAcQLZAewAKQCDABECLgCDA7oFLgB7A5oFLgCTAxMDLgCbA7oFLgBzAxMD
LgCLA/cFLgBTAzUFLgBbAz4FLgBjA10FLgBrA2oFLgDrABMDLgALAZQFQAArANwBQAATALUBQwAT
ALUBQwAbAMQBSQCDAC8CYwATALUBYwAbAMQBaQCDACICgAArANwBgwAbAMQBgwB7ANwBgwBzANwB
iQCDAEMCoAArANwBowDDAIwCowATALUBwAArANwBwwATALUBwwDrABMD4AArANwB4wALARMDAAET
ALUBAAErANwBAwELARMDCQFjAn4ECQFTAtwBCQFbAiAEIAETALUBIAErANwBKQFjAp4EKQFbAiAE
KQFTAtwBQAErANwBQAETALUBSQFTAtwBSQFbAiAESQFjAisEYAErANwBYAETALUBYwFDAtIDYwE7
AtwBYwFLAuYDYwELARMDaQFjAlEEaQFbAkUEaQFrAtwBgAErANwBiQETANYEoAErANwBqQETANYE
wAETALUBwAErANwByQGbAtwB4AErANwB4wFLAyYFAAITALUBAAIrANwBQAMLARMDYAMLARMD/QEC
AgcCDAJcAmACawJwAn8CfwIHAxkDGQNcAlwCfgO4A3ACcAJwAnACygTRBOQE7wTvBPUEXAL5BP4E
AwVgAlwC9QRcAlwCEgUZBRkFYAIeBQQAAQAGAAUABwAGAAsACAAMAAwADQAOAA4ADwAPABAAAAD9
AU8AAAC2AlQAAABlAlkAAADCAl4AAAB+A5gAAACrBMIAAAC+BMIAAABtBv8AAAB5Bv8AAACDBv8A
AACPBv8AAACvBhsBAAAmByABAAAgBzEBAAAgB1cBAAAbCZQBAAAiCZ0BAAAoCaEBAAA3CVcBAABA
CaEBAABMCaEBAABXCaUBAABcCaoBAABhCaoBAgAEAAMAAgAFAAUAAgAGAAcAAgAHAAkAAgAPAAsA
AgASAA0AAgATAA8AAgAhABEAAQAiABEAAgAjABMAAQAkABMAAgAlABUAAQAmABUAAQAoABcAAgAn
ABcAAgAqABkAAQAsABsAAgArABsAAgAvAB0AAgAzAB8AAgA8ACEAAgA9ACMAAgA+ACUAAgA/ACcA
AgBAACkAAgBBACsAAgBCAC0AAQBDAC0AAgBEAC8AAgBFADEADgBiAKkADwB6AL0ADwBsALEADwBu
ALMADwBwALUADwByALcADwB0ALkADwB2ALsADwBqAK8ADwB8AL8ADwB+AMEADwCAAMMADwCCAMUA
DwCEAMcADwCGAMkADwCIAMsADwCKAM0AdQB1AIgANgHhAegB7wH2Ae4C9QI7AwSAAAABAAAAAAAA
AAAAAAAAALwAAAACAAAAAAAAAAAAAAABAAoAAAAAAAgAAAAAAAAAAAAAAAoAEwAAAAAAAQAAAAAA
AAAAAAAAnQCKAwAAAAAKAAAAAAAAAAAAAACmAMgDAAAAAAoAAAAAAAAAAAAAAKYAFgQAAAAAAgAA
AAAAAAAAAAAAAQAGAgAAAAAKAAAAAAAAAAAAAACmAIwLAAAAAAoAAAAAAAAAAAAAAKYAUgwAAAAA
AAAAAAEAAABxEAAABQAEAAYABAAAABAADAAMAwAAEAAZAAwDAAAAABsADAMtAHoCLQD8AgAAAAAA
PE1vZHVsZT4AbXNjb3JsaWIATWljcm9zb2Z0LlZpc3VhbEJhc2ljAE15QXBwbGljYXRpb24AU2Ny
aXB0Q29tcG9uZW50X2RiMjM3YjFiODYyYjQ2MTdiZjhmOTQzYTExNTZkOGEwLnZicHJvai5NeQBN
eUNvbXB1dGVyAE15UHJvamVjdABNeVdlYlNlcnZpY2VzAFRocmVhZFNhZmVPYmplY3RQcm92aWRl
cmAxAElucHV0QnVmZmVyAFNjcmlwdENvbXBvbmVudF9kYjIzN2IxYjg2MmI0NjE3YmY4Zjk0M2Ex
MTU2ZDhhMC52YnByb2oAVXNlckNvbXBvbmVudABDb25uZWN0aW9ucwBWYXJpYWJsZXMAU2NyaXB0
TWFpbgBNeVJlc291cmNlcwBTY3JpcHRDb21wb25lbnRfZGIyMzdiMWI4NjJiNDYxN2JmOGY5NDNh
MTE1NmQ4YTAudmJwcm9qLk15LlJlc291cmNlcwBNeVNldHRpbmdzAFJhbmdlVmFsdWUAUmFuZ2VW
YWx1ZURpY3Rpb25hcnkATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkFwcGxpY2F0aW9uU2VydmljZXMA
QXBwbGljYXRpb25CYXNlAC5jdG9yAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5EZXZpY2VzAENvbXB1
dGVyAFN5c3RlbQBPYmplY3QALmNjdG9yAGdldF9Db21wdXRlcgBtX0NvbXB1dGVyT2JqZWN0UHJv
dmlkZXIAZ2V0X0FwcGxpY2F0aW9uAG1fQXBwT2JqZWN0UHJvdmlkZXIAVXNlcgBnZXRfVXNlcgBt
X1VzZXJPYmplY3RQcm92aWRlcgBnZXRfV2ViU2VydmljZXMAbV9NeVdlYlNlcnZpY2VzT2JqZWN0
UHJvdmlkZXIAQXBwbGljYXRpb24AV2ViU2VydmljZXMARXF1YWxzAG8AR2V0SGFzaENvZGUAVHlw
ZQBHZXRUeXBlAFRvU3RyaW5nAENyZWF0ZV9fSW5zdGFuY2VfXwBUAGluc3RhbmNlAERpc3Bvc2Vf
X0luc3RhbmNlX18AZ2V0X0dldEluc3RhbmNlAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5NeVNlcnZp
Y2VzLkludGVybmFsAENvbnRleHRWYWx1ZWAxAG1fQ29udGV4dABHZXRJbnN0YW5jZQBDb3p5Um9j
LlNTSVNQbHVzLjIwMDgAQ296eVJvYy5TcWxTZXJ2ZXIuU1NJUwBTY3JpcHRCdWZmZXJQbHVzAE1p
Y3Jvc29mdC5TcWxTZXJ2ZXIuVHhTY3JpcHQATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxp
bmUAU2NyaXB0Q29tcG9uZW50AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuUGlwZWxpbmVIb3N0AFBpcGVs
aW5lQnVmZmVyAENvbXBvbmVudABPYmplY3RJRABJc0lucHV0AEJ1ZmZlcgBnZXRfU3RhdGljSW5w
dXRDb2x1bW5zAGdldF9TdGF0aWNPdXRwdXRDb2x1bW5zAE5leHRSb3cARW5kT2ZSb3dzZXQAU3Rh
dGljSW5wdXRDb2x1bW5zAFN0YXRpY091dHB1dENvbHVtbnMAU2NyaXB0Q29tcG9uZW50UGx1cwBQ
cm9jZXNzSW5wdXQASW5wdXRJRABJbnB1dF9Qcm9jZXNzSW5wdXQASW5wdXRfUHJvY2Vzc0lucHV0
Um93AFJvdwBQYXJlbnRDb21wb25lbnQAUHJlRXhlY3V0ZQBQb3N0RXhlY3V0ZQBWYWxpZGF0ZQBl
cnJNZXNzYWdlAGdldF9TdGFydENvbHVtbgBzZXRfU3RhcnRDb2x1bW4AdmFsdWUAZ2V0X0VuZENv
bHVtbgBzZXRfRW5kQ29sdW1uAGdldF9WYWx1ZUNvbHVtbgBzZXRfVmFsdWVDb2x1bW4AZ2V0X1Jl
c3VsdFZhcmlhYmxlAHNldF9SZXN1bHRWYXJpYWJsZQBtX3N0YXJ0Q29sdW1uAG1fZW5kQ29sdW1u
AG1fdmFsdWVDb2x1bW4AbV9yZXN1bHRWYXIAU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMATGlz
dGAxAG1fbGlzdABtX3N0YXJ0SW5kZXgAbV9lbmRJbmRleABtX3ZhbHVlSW5kZXgAU3RhcnRDb2x1
bW4ARW5kQ29sdW1uAFZhbHVlQ29sdW1uAFJlc3VsdFZhcmlhYmxlAFN5c3RlbS5SZXNvdXJjZXMA
UmVzb3VyY2VNYW5hZ2VyAF9yZXNNZ3IAU3lzdGVtLkdsb2JhbGl6YXRpb24AQ3VsdHVyZUluZm8A
X3Jlc0N1bHR1cmUAZ2V0X1Jlc291cmNlTWFuYWdlcgBnZXRfQ3VsdHVyZQBzZXRfQ3VsdHVyZQBW
YWx1ZQBDdWx0dXJlAFN5c3RlbS5Db25maWd1cmF0aW9uAEFwcGxpY2F0aW9uU2V0dGluZ3NCYXNl
AG1fVmFsdWUAbV9TeW5jT2JqZWN0AGdldF9WYWx1ZQBJQ29tcGFyYWJsZWAxAHN0YXJ0UgBlbmRS
AENvbXBhcmVUbwBvdGhlcgBrZXkASUNvbXBhcmFibGUAbV9zdGFydABtX2VuZABtX3ZhbHVlAFN5
c3RlbS5Db2xsZWN0aW9ucwBJRGljdGlvbmFyeQBsaXN0AEFycmF5AENvcHlUbwBhcnJheQBpbmRl
eABBZGQAQ2xlYXIAQ29udGFpbnMASURpY3Rpb25hcnlFbnVtZXJhdG9yAEdldEVudW1lcmF0b3IA
UmVtb3ZlAElFbnVtZXJhdG9yAEdldEVudW1lcmF0b3IxAGdldF9SYW5nZXMAZ2V0X0NvdW50AGdl
dF9Jc1N5bmNocm9uaXplZABnZXRfU3luY1Jvb3QAZ2V0X0lzRml4ZWRTaXplAGdldF9Jc1JlYWRP
bmx5AGdldF9JdGVtAHNldF9JdGVtAElDb2xsZWN0aW9uAGdldF9LZXlzAGdldF9WYWx1ZXMAR2V0
S2V5SW5kZXhfAEJpbmFyeVNlYXJjaF8AbV9jYWNoZWRLZXkAbV9jYWNoZWRJbmRleABSYW5nZXMA
Q291bnQASXNTeW5jaHJvbml6ZWQAU3luY1Jvb3QASXNGaXhlZFNpemUASXNSZWFkT25seQBJdGVt
AEtleXMAVmFsdWVzAFN5c3RlbS5Db21wb25lbnRNb2RlbABFZGl0b3JCcm93c2FibGVBdHRyaWJ1
dGUARWRpdG9yQnJvd3NhYmxlU3RhdGUAU3lzdGVtLkNvZGVEb20uQ29tcGlsZXIAR2VuZXJhdGVk
Q29kZUF0dHJpYnV0ZQBTeXN0ZW0uRGlhZ25vc3RpY3MARGVidWdnZXJIaWRkZW5BdHRyaWJ1dGUA
TWljcm9zb2Z0LlZpc3VhbEJhc2ljLkNvbXBpbGVyU2VydmljZXMAU3RhbmRhcmRNb2R1bGVBdHRy
aWJ1dGUASGlkZU1vZHVsZU5hbWVBdHRyaWJ1dGUAU3lzdGVtLkNvbXBvbmVudE1vZGVsLkRlc2ln
bgBIZWxwS2V5d29yZEF0dHJpYnV0ZQBTeXN0ZW0uUnVudGltZS5Db21waWxlclNlcnZpY2VzAFJ1
bnRpbWVIZWxwZXJzAEdldE9iamVjdFZhbHVlAFJ1bnRpbWVUeXBlSGFuZGxlAEdldFR5cGVGcm9t
SGFuZGxlAEFjdGl2YXRvcgBDcmVhdGVJbnN0YW5jZQBNeUdyb3VwQ29sbGVjdGlvbkF0dHJpYnV0
ZQBzZXRfVmFsdWUAU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzAENvbVZpc2libGVBdHRy
aWJ1dGUAU3RyaW5nAFNjcmlwdEJ1ZmZlcgBDTFNDb21wbGlhbnRBdHRyaWJ1dGUATWljcm9zb2Z0
LlNxbFNlcnZlci5EVFNQaXBlbGluZVdyYXAATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMuUGlwZWxp
bmUuV3JhcHBlcgBJRFRTQ29tcG9uZW50TWV0YURhdGExMDAAZ2V0X0NvbXBvbmVudE1ldGFEYXRh
AElEVFNJbnB1dENvbGxlY3Rpb24xMDAAZ2V0X0lucHV0Q29sbGVjdGlvbgBJRFRTSW5wdXQxMDAA
Z2V0X0lEAGdldF9CdWZmZXIATWljcm9zb2Z0LlNxbFNlcnZlci5EVFNSdW50aW1lV3JhcABNaWNy
b3NvZnQuU3FsU2VydmVyLkR0cy5SdW50aW1lLldyYXBwZXIASURUU1ZhcmlhYmxlczEwMABFeGNl
cHRpb24ASURUU1ZhcmlhYmxlRGlzcGVuc2VyMTAwAGdldF9WYXJpYWJsZURpc3BlbnNlcgBMb2Nr
T25lRm9yV3JpdGUASURUU1ZhcmlhYmxlMTAwAFByb2plY3REYXRhAFNldFByb2plY3RFcnJvcgBD
bGVhclByb2plY3RFcnJvcgBVbmxvY2sASW50MzIAUGlwZWxpbmVDb21wb25lbnQAZ2V0X0hvc3RD
b21wb25lbnQASURUU0J1ZmZlck1hbmFnZXIxMDAAZ2V0X0J1ZmZlck1hbmFnZXIASURUU0lucHV0
Q29sdW1uQ29sbGVjdGlvbjEwMABnZXRfSW5wdXRDb2x1bW5Db2xsZWN0aW9uAElEVFNJbnB1dENv
bHVtbjEwMABnZXRfTGluZWFnZUlEAEZpbmRDb2x1bW5CeUxpbmVhZ2VJRABTb3J0AENNYW5hZ2Vk
Q29tcG9uZW50V3JhcHBlcgBJRFRTVmlydHVhbElucHV0MTAwAElzTnVsbE9yRW1wdHkASW5zdGFu
dGlhdGUAR2V0VmlydHVhbElucHV0AFJlbW92ZUFsbABJRFRTVmlydHVhbElucHV0Q29sdW1uQ29s
bGVjdGlvbjEwMABnZXRfVmlydHVhbElucHV0Q29sdW1uQ29sbGVjdGlvbgBJRFRTVmlydHVhbElu
cHV0Q29sdW1uMTAwAElEVFNEZXNpZ250aW1lQ29tcG9uZW50MTAwAERUU1VzYWdlVHlwZQBTZXRV
c2FnZVR5cGUAZ2V0X01lc3NhZ2UAU1NJU1NjcmlwdENvbXBvbmVudEVudHJ5UG9pbnRBdHRyaWJ1
dGUAQ296eVJvYy5TcWxTZXJ2ZXIuU1NJUy5BdHRyaWJ1dGVzAFZhbGlkYXRlUHJvcGVydGllc0F0
dHJpYnV0ZQBTb3J0UHJvcGVydGllc0F0dHJpYnV0ZQBJbnB1dFZpcnR1YWxDb2x1bW5BdHRyaWJ1
dGUAQ2F0ZWdvcnlBdHRyaWJ1dGUARGVzY3JpcHRpb25BdHRyaWJ1dGUAVmFyaWFibGVBdHRyaWJ1
dGUAU3lzdGVtLlJlZmxlY3Rpb24AQXNzZW1ibHkAZ2V0X0Fzc2VtYmx5AFN5c3RlbS5UaHJlYWRp
bmcATW9uaXRvcgBFbnRlcgBFeGl0AERlYnVnZ2VyTm9uVXNlckNvZGVBdHRyaWJ1dGUAQXJndW1l
bnRFeGNlcHRpb24ASUVudW1lcmFibGUARGVmYXVsdE1lbWJlckF0dHJpYnV0ZQBTY3JpcHRDb21w
b25lbnRfZGIyMzdiMWI4NjJiNDYxN2JmOGY5NDNhMTE1NmQ4YTAudmJwcm9qLlJlc291cmNlcy5y
ZXNvdXJjZXMAQ29tcGlsYXRpb25SZWxheGF0aW9uc0F0dHJpYnV0ZQBSdW50aW1lQ29tcGF0aWJp
bGl0eUF0dHJpYnV0ZQBBc3NlbWJseUZpbGVWZXJzaW9uQXR0cmlidXRlAEd1aWRBdHRyaWJ1dGUA
QXNzZW1ibHlUcmFkZW1hcmtBdHRyaWJ1dGUAQXNzZW1ibHlDb3B5cmlnaHRBdHRyaWJ1dGUAQXNz
ZW1ibHlQcm9kdWN0QXR0cmlidXRlAEFzc2VtYmx5Q29tcGFueUF0dHJpYnV0ZQBBc3NlbWJseURl
c2NyaXB0aW9uQXR0cmlidXRlAEFzc2VtYmx5VGl0bGVBdHRyaWJ1dGUAU2NyaXB0Q29tcG9uZW50
X2RiMjM3YjFiODYyYjQ2MTdiZjhmOTQzYTExNTZkOGEwLnZicHJvai5kbGwAAAAAC0kAbgBwAHUA
dAAANVMAZQBsAGUAYwB0ACAAcgBhAG4AZwBlACAAcwB0AGEAcgB0ACAAYwBvAGwAdQBtAG4ALgAA
L1MAZQBsAGUAYwB0ACAAcgBhAG4AZwBlACAAZQBuAGQAIABjAG8AbAB1AG0ALgAAJ1MAZQBsAGUA
YwB0ACAAdgBhAGwAdQBlACAAYwBvAGwAdQBtAC4AAEVTAGUAbABlAGMAdAAgAGQAaQBjAHQAaQBv
AG4AYQByAHkAIAByAGUAcwB1AGwAdAAgAHYAYQByAGkAYQBiAGwAZQAuAAAxTQB5AC4AUgBlAHMA
bwB1AHIAYwBlAHMALgBNAHkAUgBlAHMAbwB1AHIAYwBlAHMAACVPAHYAZQByAGwAYQBwAHAAaQBu
AGcAIABSAGEAbgBnAGUALgAAIU4AbwB0ACAASQBtAHAAbABlAG0AZQBuAHQAZQBkAC4AAACnDZit
UB6mQ4+Z+TUf7DYEAAi3elxWGTTgiQiwP19/EdUKOgMgAAEDAAABBAAAEgwHBhUSGAESDAQAABII
BwYVEhgBEggEAAASEQcGFRIYARIRBAAAEhQHBhUSGAESFAQIABIMBAgAEggECAASEQQIABIUBCAB
AhwDIAAIBCAAEhUDIAAOAh4ABxABAR4AHgAHMAEBARAeAAITAAQgABMABwYVEhkBEwAEKAATAAgW
z0kLuAw06giJhF3NgIDMkQkgBAESIQgCEiUEIAAdDgMgAAIEKAAdDgMGEiQDBhIoBiACAQgSJQUg
AQESHAMGEiEFIAEBEiEFIAECEA4EIAEBDgIGDgcGFRItARI4AgYIAygADgMGEjEDBhI1BAAAEjEE
AAASNQUAAQESNQQIABIxBAgAEjUDBhI0AgYcBAAAEjQECAASNAYVEj0BEjgGIAMBHBwcBSABCBI4
BCABCBwDIAAcAwYSQQMoABwJIAEBFRItARI4BiACARJJCAUgAgEcHAQgABJNBCABARwEIAASUQgg
ABUSLQESOAQgARwcBCAAElUIKAAVEi0BEjgDKAAIAygAAgQoARwcBCgAElUFIAEBEV0IAQABAAAA
AAAFIAIBDg4XAQAKTXlUZW1wbGF0ZQc4LjAuMC4wAAAEAQAAAAYVEhgBEgwGFRIYARIIBhUSGAES
EQYVEhgBEhQEBwESDAQHARIIBAcBEhEEBwESFBABAAtNeS5Db21wdXRlcgAADAEAB015LlVzZXIA
ABMBAA5NeS5BcHBsaWNhdGlvbgAAEwEADk15LldlYlNlcnZpY2VzAAAEAAEcHAMHAQIDBwEIBgAB
EhUReQQHARIVAwcBDgUQAQAeAAQKAR4ABAcBHgAHIAQBDg4ODmEBADRTeXN0ZW0uV2ViLlNlcnZp
Y2VzLlByb3RvY29scy5Tb2FwSHR0cENsaWVudFByb3RvY29sEkNyZWF0ZV9fSW5zdGFuY2VfXxNE
aXNwb3NlX19JbnN0YW5jZV9fAAAABhUSGAETAAYVEhkBEwAECgETAAUgAQETAAYHAhMAEwAEIAEB
AgUBAAAAAAQHAR0OBSAAEoCVBSAAEoCZBiABEoCdHAQgABIlBCABHAgGFRItARI4BSAAEoCpCCAC
AQ4QEoChBiABEoCtHAYAAQESgKUFIAASgLkFIAASgL0FIAASgMEGIAESgMUcBSACCAgIDQcEEoCd
EoChEjwSgKUEAAECDgUgABKAyQUgABKAzQUgABKA0QYgARKA1RwNIAQSgMUIEoDNCBGA3RkHCQIC
EoDFEoCdEoDJEoDFEoDFEoDNEoClDQEACFZhbGlkYXRlAAAFIAEBHQ45AQAEAAAAC1N0YXJ0Q29s
dW1uCUVuZENvbHVtbgtWYWx1ZUNvbHVtbg5SZXN1bHRWYXJpYWJsZQAACgEABUlucHV0AAAZAQAU
U2VsZWN0IHZhbHVlIGNvbHVtbi4AAAsBAAZSZXN1bHQAACwBACdTZWxlY3QgdmFyaWFibGUgd2l0
aCBkaWN0aW9uYXJ5IG9iamVjdC4AAB8BABpTZWxlY3QgcmFuZ2Ugc3RhcnQgY29sdW1uLgAAHQEA
GFNlbGVjdCByYW5nZSBlbmQgY29sdW1uLgAABSAAEoD9ByACAQ4SgP0GBwISMRIxBAcBEjUIAQAC
AAAAAAAEAAEBHAQHARI0BSABCBMABQcDCAgIAwcBHAQHARJNBAcBElEIBwEVEi0BEjgFIAETAAgG
BwMIHBI4BAcBElUHBwUICAgICAkBAARJdGVtAAAEIAEBCAgBAAgAAAAAAB4BAAEAVAIWV3JhcE5v
bkV4Y2VwdGlvblRocm93cwEMAQAHMS4wLjAuMAAAKQEAJDQ1ZmMzOTRlLWIwODQtNGYyZC04Mzkx
LTMxMmYyODU1MDVlZgAABQEAAQAAHwEAGkNvcHlyaWdodCBAIE1pY3Jvc29mdCAyMDEwAAA8AQA3
U2NyaXB0Q29tcG9uZW50X2RiMjM3YjFiODYyYjQ2MTdiZjhmOTQzYTExNTZkOGEwLnZicHJvagAA
DgEACU1pY3Jvc29mdAAAAAA4VQAAAAAAAAAAAABOVQAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
QFUAAAAAAAAAAF9Db3JEbGxNYWluAG1zY29yZWUuZGxsAAAAAAD/JQAgQAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAwAAACgAAIAOAAAA
SAAAgBAAAABgAACAAAAAAAAAAAAAAAAAAAACAAIAAAB4AACAAwAAAJAAAIAAAAAAAAAAAAAAAAAA
AAEAAH8AAKgAAIAAAAAAAAAAAAAAAAAAAAEAAQAAAMAAAIAAAAAAAAAAAAAAAAAAAAEAAAAAANgA
AAAAAAAAAAAAAAAAAAAAAAEAAAAAAOgAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAPgAAAAAAAAAAAAA
AAAAAAAAAAEAAAAAAAgBAACAZQAA6AIAAAAAAAAAAAAAaGgAACgBAAAAAAAAAAAAAJBpAAAiAAAA
AAAAAAAAAAAYYQAAaAQAAAAAAAAAAAAAaAQ0AAAAVgBTAF8AVgBFAFIAUwBJAE8ATgBfAEkATgBG
AE8AAAAAAL0E7/4AAAEAAAABAAAAAAAAAAEAAAAAAD8AAAAAAAAABAAAAAIAAAAAAAAAAAAAAAAA
AABEAAAAAQBWAGEAcgBGAGkAbABlAEkAbgBmAG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEAdABp
AG8AbgAAAAAAAACwBMgDAAABAFMAdAByAGkAbgBnAEYAaQBsAGUASQBuAGYAbwAAAKQDAAABADAA
MAAwADAAMAA0AGIAMAAAADQACgABAEMAbwBtAHAAYQBuAHkATgBhAG0AZQAAAAAATQBpAGMAcgBv
AHMAbwBmAHQAAACYADgAAQBGAGkAbABlAEQAZQBzAGMAcgBpAHAAdABpAG8AbgAAAAAAUwBjAHIA
aQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwBkAGIAMgAzADcAYgAxAGIAOAA2ADIAYgA0ADYAMQA3
AGIAZgA4AGYAOQA0ADMAYQAxADEANQA2AGQAOABhADAALgB2AGIAcAByAG8AagAAADAACAABAEYA
aQBsAGUAVgBlAHIAcwBpAG8AbgAAAAAAMQAuADAALgAwAC4AMAAAAJgAPAABAEkAbgB0AGUAcgBu
AGEAbABOAGEAbQBlAAAAUwBjAHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwBkAGIAMgAzADcA
YgAxAGIAOAA2ADIAYgA0ADYAMQA3AGIAZgA4AGYAOQA0ADMAYQAxADEANQA2AGQAOABhADAALgB2
AGIAcAByAG8AagAuAGQAbABsAAAAXAAbAAEATABlAGcAYQBsAEMAbwBwAHkAcgBpAGcAaAB0AAAA
QwBvAHAAeQByAGkAZwBoAHQAIABAACAATQBpAGMAcgBvAHMAbwBmAHQAIAAyADAAMQAwAAAAAACg
ADwAAQBPAHIAaQBnAGkAbgBhAGwARgBpAGwAZQBuAGEAbQBlAAAAUwBjAHIAaQBwAHQAQwBvAG0A
cABvAG4AZQBuAHQAXwBkAGIAMgAzADcAYgAxAGIAOAA2ADIAYgA0ADYAMQA3AGIAZgA4AGYAOQA0
ADMAYQAxADEANQA2AGQAOABhADAALgB2AGIAcAByAG8AagAuAGQAbABsAAAAkAA4AAEAUAByAG8A
ZAB1AGMAdABOAGEAbQBlAAAAAABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfAGQAYgAy
ADMANwBiADEAYgA4ADYAMgBiADQANgAxADcAYgBmADgAZgA5ADQAMwBhADEAMQA1ADYAZAA4AGEA
MAAuAHYAYgBwAHIAbwBqAAAANAAIAAEAUAByAG8AZAB1AGMAdABWAGUAcgBzAGkAbwBuAAAAMQAu
ADAALgAwAC4AMAAAADgACAABAEEAcwBzAGUAbQBiAGwAeQAgAFYAZQByAHMAaQBvAG4AAAAxAC4A
MAAuADAALgAwAAAAKAAAACAAAABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP//
/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAHd3d3d3d3d3d3d3d3d3cARERERERERERERERERERHAE//////////////////Rw
BP/////////////////0cAT/////////////////9HAE//////////////////RwBP//////////
///////0cAT/////////////////9HAE//////////////////RwBP/////////////////0cAT/
////////////////9HAE//////////////////RwBP/////////////////0cAT/////////////
////9HAE//////////////////RwBP/////////////////0cAT/////////////////9HAE////
//////////////RwBP/////////////////0cAT/////////////////9HAEiIiIiIiIiIiIiIiI
iIRwBEREREREREREREREREREcARMTExMTExMTExOzs5JdHAEzMzMzMzMzMzMzMzMzMQAAERERERE
RERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AP/////////////////////AAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAAB
gAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAPA
AAAH////////////////KAAAABAAAAAgAAAAAQAEAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8A
AP///wAAAAAAAAAAAAd3d3d3d3d3REREREREREdP///////4R0////////hHT///////+EdP////
///4R0////////hHT///////+EdP///////4R0////////hHSIiIiIiIiEdMzMzMzMzMR8RERERE
RETAAAAAAAAAAAAAAAAAAAAAAP//AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAQAA//8AAP//AAAAAAEAAgAgIBAAAQAEAOgCAAACABAQEAABAAQAKAEA
AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAwAAABgNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=]]></arrayElement></arrayElements></property>
<property id="45" name="UserComponentTypeName" dataType="System.String" state="default" isArray="false" description="" typeConverter="" UITypeEditor="" containsID="false" expressionType="None">CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus.2008, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea</property>
<property id="259" name="VSTAProjectName" dataType="System.String" state="default" isArray="false" description="Specifies the name of the Microsoft Visual Studio Tools for Applications project. Project names must be unique within a package." typeConverter="NOTBROWSABLE" UITypeEditor="" containsID="false" expressionType="None">ScriptComponent_db237b1b862b4617bf8f943a1156d8a0</property>
<property id="260" name="ScriptLanguage" dataType="System.String" state="default" isArray="false" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" UITypeEditor="" containsID="false" expressionType="None">VisualBasic</property></properties>
<inputs>
<input id="35" name="Input" description="" hasSideEffects="true" dangling="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="False" /></input>
</inputs>
</component>