<component id="25" name="Timezone" 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="29" 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="18"><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_dabdc273a51b4faa88704ad79ae2721e.vbproj")> 
<Assembly: AssemblyDescription("")> 
<Assembly: AssemblyCompany("Microsoft")> 
<Assembly: AssemblyProduct("ScriptComponent_dabdc273a51b4faa88704ad79ae2721e.vbproj")> 
<Assembly: AssemblyCopyright("Copyright @ Microsoft 2018")> 
<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("51c58a44-7015-4b4c-9d73-b46a69a5b9c7")> 

' 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[\scriptcomponent_dabdc273a51b4faa88704ad79ae2721e.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_dabdc273a51b4faa88704ad79ae2721e.vbproj</RootNamespace>
    <AssemblyName>ScriptComponent_dabdc273a51b4faa88704ad79ae2721e.vbproj</AssemblyName>
    <StartupObject>
    </StartupObject>
    <OptionExplicit>On</OptionExplicit>
    <OptionCompare>Binary</OptionCompare>
    <OptionStrict>Off</OptionStrict>
    <OptionInfer>On</OptionInfer>
    <ProjectGuid>{2A545211-C6A6-4BB6-8F8F-5AEE5C20F7D7}</ProjectGuid>
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
  </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.Core">
      <RequiredTargetFramework>3.5</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.Data" />
    <Reference Include="System.Web.Services" />
    <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>
    <!-- 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[\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[\main.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' COZYROC SQL Server Integration Services user script component
'
' Copyright (c) 2006-2018 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

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


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


    Private Class Consts
        Public Const ColumnSeparator As String = "," + vbLf
        Public Const LocalTime As String = "[Local Time]"
    End Class   ' Consts


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Dim colsCount As Integer = m_colIdx.Length
        For colIndex As Integer = 0 To colsCount - 1
            Dim bufIndex As Integer = m_colIdx(colIndex)
            If Not Row.Buffer.IsNull(bufIndex) Then
                Row.Buffer(bufIndex) = TimeZoneInfo.ConvertTime( _
                    CType(Row.Buffer(bufIndex), DateTime), _
                    m_inTZI, _
                    m_outTZI)
            End If
        Next
    End Sub ' Input_ProcessInputRow


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

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

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

        ' Get input and output time zones.
        m_inTZI = GetTimeZoneInfo_(m_inputZone)
        m_outTZI = GetTimeZoneInfo_(m_outputZone)
    End Sub ' PreExecute


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

        m_colIdx = Nothing
    End Sub ' PostExecute


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

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

            If String.IsNullOrEmpty(Me.InputZone) Then
                Throw New Exception("Select input time zone.")
            End If

            If String.IsNullOrEmpty(Me.OutputZone) Then
                Throw New Exception("Select output time zone.")
            End If

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

            Call input.InputColumnCollection.RemoveAll()

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

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

        Validate = result
    End Function    'Validate


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Returns list of available time zones.
    Public Function GetZones() As Object()
        Dim result As New ArrayList
        Call result.Add(Consts.LocalTime)

        For Each tzi As TimeZoneInfo In TimeZoneInfo.GetSystemTimeZones()
            Call result.Add(tzi.DisplayName)
        Next

        GetZones = result.ToArray()
    End Function    ' GetZones


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select time columns.")> _
    <InputVirtualColumn("", False)> _
    Public Property TimeColumns() As String
        Get
            TimeColumns = m_cols
        End Get
        Set(ByVal value As String)
            m_cols = value
        End Set
    End Property    ' TimeColumns


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select input time zone.")> _
    <List("GetZones")> _
    Public Property InputZone() As String
        Get
            InputZone = GetDisplayNameFromId_(m_inputZone)
        End Get
        Set(ByVal value As String)
            m_inputZone = GetIdFromDisplayName_(value)
        End Set
    End Property    ' InputZone


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select output time zone.")> _
    <List("GetZones")> _
    Public Property OutputZone() As String
        Get
            OutputZone = GetDisplayNameFromId_(m_outputZone)
        End Get
        Set(ByVal value As String)
            m_outputZone = GetIdFromDisplayName_(value)
        End Set
    End Property    ' OutputZone
#End Region ' Properties


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


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetDisplayNameFromId_(ByVal id As String) As String
        Dim result As String = id

        If Not String.IsNullOrEmpty(id) AndAlso _
            id <> Consts.LocalTime Then

            For Each tzi As TimeZoneInfo In TimeZoneInfo.GetSystemTimeZones()
                If tzi.Id.Equals(id) Then
                    ' Found zone
                    result = tzi.DisplayName
                    Exit For
                End If
            Next
        End If

        GetDisplayNameFromId_ = result
    End Function    ' GetDisplayNameFromId_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetIdFromDisplayName_(ByVal displayName As String) As String
        Dim result As String = displayName

        If Not String.IsNullOrEmpty(displayName) AndAlso _
            displayName <> Consts.LocalTime Then

            For Each tzi As TimeZoneInfo In TimeZoneInfo.GetSystemTimeZones()
                If tzi.DisplayName.Equals(displayName) Then
                    ' Found zone
                    result = tzi.Id
                    Exit For
                End If
            Next
        End If

        GetIdFromDisplayName_ = result
    End Function    ' GetIdFromDisplayName_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Function GetTimeZoneInfo_(ByVal zoneID As String) As TimeZoneInfo
        Dim result As TimeZoneInfo = TimeZoneInfo.Local

        If zoneID <> Consts.LocalTime Then
            result = TimeZoneInfo.FindSystemTimeZoneById(zoneID)
        End If

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


#Region "Attributes"
    Private m_cols As String
    Private m_inputZone As String = TimeZoneInfo.Local.Id
    Private m_outputZone As String

    Private m_colIdx() As Integer
    Private m_inTZI As TimeZoneInfo
    Private m_outTZI As TimeZoneInfo
#End Region ' Attributes
End Class   ' ScriptMain
]]></arrayElement></arrayElements></property>
<property id="30" 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_dabdc273a51b4faa88704ad79ae2721e.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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
AAAELRxzMgAABoAUAAAE3hB+FQAABCgRAAAKKF4AAArcfhQAAAQqAAEMAAACAB0ADCkAEAAAAAFC
U0pCAQABAAAAAAAMAAAAdjIuMC41MDcyNwAAAAAFAGwAAADMDAAAI34AADgNAACMEAAAI1N0cmlu
Z3MAAAAAxB0AAAABAAAjVVMAxB4AABAAAAAjR1VJRAAAANQeAACoBQAAI0Jsb2IAAAAAAAAAAgAA
AVcdogkJDwAAAPoBMwAWAAABAAAASAAAAA4AAAAVAAAAMwAAABcAAABpAAAAAgAAAEEAAAAdAAAA
BgAAAA0AAAARAAAACwAAAAEAAAAIAAAAAQAAAAMAAAADAAAAAgAAAAAAUBABAAAAAAAKALABhgEK
AOQBxgEGAPQB7QEKAEwChgEGAMoC7QEKAEwDIgMOAJ4DhwMSAO0DzAMWAB4EzAMOALkEhwMaAA0G
7QEGALgGpwYGAOUG0AYeAEwHNwceAJkHgwceALIHgwceAN8HxwcGAAkI9gcKAEgIIQgKAGAIEwAe
AJUIeAgGAMoIqggGAOgI7QEGAAwJ7QEKACUJEwAGAGkJSgkGAH0J7QESAIQJzAMGAJEJ7QEiAPQJ
ywkiACMKywkiAE4KywkKAI4KIQgGAJoK7QEGAL8K7QEiAMUKywkWAAYLzAMiACoLywkiAFELywki
AIgLywkiAJwLywkGALYL7QEGAM4L7QEGAOML7QEiABYMywkiAFsMywkKAHUMIQgGAMIMrwwGAOcM
zAwGABgN+QwGAGoNrwwGAH8N7QEKAKsNIQgSANoNzAMOACMOAQ4OAD8OAQ4OAFcOAQ4eAHMOgwcO
AIgOAQ4GAKgOlg4GAM8Ovg4GAOIO9gcGAEsPqggGAGsPqggGAIkPlg4GAKYPSgkGALQPlg4GAM8P
lg4GAOoPlg4GAAMQlg4GABwQlg4GADkQlg4AAAAAAQAAAAAAAQABAAAAAAApADcABQABAAEAAAAA
AHIANwAJAAEAAgAAARAAfQA3AA0AAQADAAUBAACHAAAADQAFAAgABQEAAJUAAAANAAUADwABAAAA
sAC8AB0ABgARAAEAAAD0ALwAKQAGABYAAQAAAAIBvAANAAgAGgABAAAADgG8AA0ACQAbAAEAAAAY
AbwAIAAKABwAAwAAACMBAAANABAALAAAAAAAKgE2AQ0AEgAtAAABEAB7AbwAOQAUADEAMQAPAiAA
MQA4Ai0AMQBaAjoAMQB/AkcAIQBbA5AABgACAccABgAOAcsAAQAPBdwAAQAPBdwAAQAyBgEBAQA5
BgEBAQBFBgEBAQBSBgQBAQBbBggBAQBjBggBVoCNBgEBVoCdBgEBEQDIBi4BEQDxBjIBEQBkB1AB
EQBsB1QBCCEAAAAABhjAARMAAQAQIQAAAAAGGMABEwABABghAAAAABEY+wEXAAEARCEAAAAAEwgC
AhsAAQBcIQAAAAATCCgCKAABAHQhAAAAABMIUQI1AAEAjCEAAAAAEwhvAkIAAQCkIQAAAABGArUC
YwABAMAhAAAAAEYCvgJoAAIA1CEAAAAAgwDPAmwAAgDsIQAAAABGAtcCcQACAAAiAAAAABEA4AJ4
AAIAHCIAAAAAAQD+AoAAAwA4IgAAAAAGGMABEwAEAEAiAAAAAAMIEgOLAAQAdCIAAAAABhjAARMA
BACIIgAAAAAGGMABrwAEAJgiAAAAAEYKTwS5AAgArCIAAAAARgpmBLkACADAIgAAAACGAH4EvgAI
ANgiAAAAAIYAhgS+AAgA8CIAAAAABhjAARMACAAQIwAAAABGAs0EzwAIAEAjAAAAAEYD4gTWAAoA
VCMAAAAARgP1BNYACwBYIwAAAAAGGMAB4AAMAGgjAAAAAAYYwAHgAA0AeCMAAAAABhjAARMADgCQ
IwAAAABGAvUE1gAOAAAkAAAAAEYCHwUTAA8AsCQAAAAARgIqBRMADwDAJAAAAAAGADYF5gAPANgl
AAAAAAYASgXsABAARCYAAAAABghTBXEAEABcJgAAAAAGCGMF8QAQAGgmAAAAAAYIeQVxABEAhCYA
AAAABgiHBfEAEQCUJgAAAAAGCJUFcQASALAmAAAAAAYIpAXxABIAwCYAAAAAAQCzBfEAEwDsJgAA
AAABAMYF9gAUAGQnAAAAAAEA3wX2ABUA3CcAAAAAAQAaBvsAFgAIKAAAAAAGGMABEwAXABAoAAAA
AAMYwAETABcAGCgAAAAAFgj9BjYBFwBUKAAAAAAWCBEHOwEXAGgoAAAAABYIHQdAARcAcCgAAAAA
ERj7ARcAGACEKAAAAAAGGMABEwAYAIwoAAAAABYIeQdXARgAAAABALwCAAABAPUCAAABAPUCAAAB
AC0EAAACADcEAAADAEAEAAAEAEgEAAABANoEAAACAEgEAAABAEgEAAABAAsFAAABAC0EAAABAC0E
AAABAAsFAAABAD8FAAABAHMFAAABAHMFAAABAHMFAAABAL4FAAABANwFAAABAPUFAAABACsGAAAB
ACkHCQDAARMAeQDAAWEBiQDAAXABEQDAARMAkQDAARMAJADAARMALADAARMANADAARMAPADAARMA
JAASA4sALAASA4sANAASA4sAPAASA4sAmQDAARMAoQDAARMAqQDAAfEAsQDZCAkCGQC1AmMAGQC+
AmgAKQD6CBYCGQDXAnEAwQAWCSYCGQDAARMAyQDAATYCRABbA5AATAB5B4sATABACbMCTADAARMA
0QDAAcACOQDAAa8A4QB+BL4A4QCGBL4A6QDAAcACUQDAARMAQQANCtAC8QA6CtUC+QBbCtoCAQFk
CmgAWQBrCuECWQB1CnEAOQB8CuYCSQCHCusCSQBbCvACCQGjCvUCWQCqCvwCSQC2CgkDQQAfBRMA
AQHiChYDIQH8CmgAUQAYCxwDKQE/CyIDAQF8CmgAIQFbCigDOQFkC2gAMQFyCy8DQQAqBRMA2QDA
Cz4DWQHAAfEAUQHAAfEA2QD2C0MDAQH8C00DIQEMDBMAQQE6DFMDaQFbClkDSQFkC2gAQQFoDGAD
eQGBDGgDUQGRDHEAeQGdDBcAgQHAARMAgQH1DIgDWQAtDY0DVABADZ8DXABODYsAWQBaDXEAmQF2
Db4AoQGLDRMAgQGTDewA2QCbDQEB8QChDcIDqQG1Dc0D2QC1AtQDWQDDDecDsQHAARMAuQHAAfEA
wQHAAQIEyQHAATIE0QHAAfEA2QHAAfEAKQCxDqIEYQDAAagEcQDAARMA6QHXDsUE6QHdDsUE8QHA
ARMA+QHAAc8EAQLAARMACQLAAfEAEQLAAfEAGQLAAfEAIQLAAfEAKQLAAfEAMQLAAfEAOQLAAfEA
QQLAAfEADgBAABABDgBEABUBKQCDAMMBLgA7A5YFLgATA/wELgAzA1kFLgBLA1kFLgBDA8UCLgAD
A9QELgALA90ELgAbAwkFLgDrAMUCLgALATMFLgAjA8UCLgArAzkFQAATAGcBQAArAI4BQwATAGcB
QwAbAHYBSQCDAPUBYwATAGcBYwAbAHYBaQCDANQBgAArAI4BgwB7AI4BgwBzAI4BgwAbAHYBiQCD
AOEBoAArAI4BowATAGcBowDDAD4CwAArAI4BwwATAGcBwwDrAMUC4AArAI4B4wALAcUCAAETAGcB
AAErAI4BAwELAcUCCQG7AjgECQHDAj8EIAErAI4BIAETAGcBKQHDAmcEKQHLAlkEQAETAGcBQAEr
AI4BSQHDAoQESQHLAlkEYAETAGcBYAErAI4BYwGrAvQDYwELAcUCYwGjAo4BYwGzAggEaQETALwE
gAErAI4BiQETALwEoAErAI4BqQH7Ao4BwAETAGcBwAErAI4B4AErAI4BAAIrAI4BAAITAGcBQAML
AcUCYAMLAcUCrwG0AbkBvgEOAhICHQIiAjECMQK5AssCywIOAg4CDwM1A28DsQMiAiICIgIOAtkD
2QPtA7AEtwTKBAQAAQAGAAUABwAGAAsACAANAAsADgANAAAA5AFPAAAAnQJUAAAATAJZAAAAqQJe
AAAAZQOYAAAAkgTCAAAApQTCAAAAbAYMAQAAeAYMAQAAggYMAQAAuAZGAQAALwdLAQAAKQdcAQIA
BAADAAIABQAFAAIABgAHAAIABwAJAAIADwALAAIAEgANAAIAEwAPAAEAIwARAAIAIgARAAIAJAAT
AAEAJQATAAEAJwAVAAIAJgAVAAIALgAXAAIALwAZAAEAMAAZAAIAMwAbAHUAdQCIAJMBmgGhAagB
oAKnApcDqQMEgAAAAQAAAAAAAAAAAAAAAAC8AAAAAgAAAAAAAAAAAAAAAQAKAAAAAAAIAAAAAAAA
AAAAAAAKABMAAAAAAAEAAAAAAAAAAAAAAJ0AcQMAAAAACgAAAAAAAAAAAAAApgCvAwAAAAAKAAAA
AAAAAAAAAACmAP0DAAAAAAMABQAAAAAAAAAAAAEAAQYAAAAAAgAAAAAAAAAAAAAAAQDtAQAAAAAK
AAAAAAAAAAAAAACmAKcJAAAAAAAAAAABAAAA/w4AAAUABAAGAAQADAALAAAAEAAMAPMCAAAQABkA
8wIAAAAAGwDzAi0ALAItAK4CAAAAPE1vZHVsZT4AbXNjb3JsaWIATWljcm9zb2Z0LlZpc3VhbEJh
c2ljAE15QXBwbGljYXRpb24AU2NyaXB0Q29tcG9uZW50X2RhYmRjMjczYTUxYjRmYWE4ODcwNGFk
NzlhZTI3MjFlLnZicHJvai5NeQBNeUNvbXB1dGVyAE15UHJvamVjdABNeVdlYlNlcnZpY2VzAFRo
cmVhZFNhZmVPYmplY3RQcm92aWRlcmAxAElucHV0QnVmZmVyAFNjcmlwdENvbXBvbmVudF9kYWJk
YzI3M2E1MWI0ZmFhODg3MDRhZDc5YWUyNzIxZS52YnByb2oAVXNlckNvbXBvbmVudABDb25uZWN0
aW9ucwBWYXJpYWJsZXMAU2NyaXB0TWFpbgBDb25zdHMATXlSZXNvdXJjZXMAU2NyaXB0Q29tcG9u
ZW50X2RhYmRjMjczYTUxYjRmYWE4ODcwNGFkNzlhZTI3MjFlLnZicHJvai5NeS5SZXNvdXJjZXMA
TXlTZXR0aW5ncwBNaWNyb3NvZnQuVmlzdWFsQmFzaWMuQXBwbGljYXRpb25TZXJ2aWNlcwBBcHBs
aWNhdGlvbkJhc2UALmN0b3IATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkRldmljZXMAQ29tcHV0ZXIA
U3lzdGVtAE9iamVjdAAuY2N0b3IAZ2V0X0NvbXB1dGVyAG1fQ29tcHV0ZXJPYmplY3RQcm92aWRl
cgBnZXRfQXBwbGljYXRpb24AbV9BcHBPYmplY3RQcm92aWRlcgBVc2VyAGdldF9Vc2VyAG1fVXNl
ck9iamVjdFByb3ZpZGVyAGdldF9XZWJTZXJ2aWNlcwBtX015V2ViU2VydmljZXNPYmplY3RQcm92
aWRlcgBBcHBsaWNhdGlvbgBXZWJTZXJ2aWNlcwBFcXVhbHMAbwBHZXRIYXNoQ29kZQBUeXBlAEdl
dFR5cGUAVG9TdHJpbmcAQ3JlYXRlX19JbnN0YW5jZV9fAFQAaW5zdGFuY2UARGlzcG9zZV9fSW5z
dGFuY2VfXwBnZXRfR2V0SW5zdGFuY2UATWljcm9zb2Z0LlZpc3VhbEJhc2ljLk15U2VydmljZXMu
SW50ZXJuYWwAQ29udGV4dFZhbHVlYDEAbV9Db250ZXh0AEdldEluc3RhbmNlAENvenlSb2MuU1NJ
U1BsdXMuMjAwOABDb3p5Um9jLlNxbFNlcnZlci5TU0lTAFNjcmlwdEJ1ZmZlclBsdXMATWljcm9z
b2Z0LlNxbFNlcnZlci5UeFNjcmlwdABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5QaXBlbGluZQBT
Y3JpcHRDb21wb25lbnQATWljcm9zb2Z0LlNxbFNlcnZlci5QaXBlbGluZUhvc3QAUGlwZWxpbmVC
dWZmZXIAQ29tcG9uZW50AE9iamVjdElEAElzSW5wdXQAQnVmZmVyAGdldF9TdGF0aWNJbnB1dENv
bHVtbnMAZ2V0X1N0YXRpY091dHB1dENvbHVtbnMATmV4dFJvdwBFbmRPZlJvd3NldABTdGF0aWNJ
bnB1dENvbHVtbnMAU3RhdGljT3V0cHV0Q29sdW1ucwBTY3JpcHRDb21wb25lbnRQbHVzAFByb2Nl
c3NJbnB1dABJbnB1dElEAElucHV0X1Byb2Nlc3NJbnB1dABJbnB1dF9Qcm9jZXNzSW5wdXRSb3cA
Um93AFBhcmVudENvbXBvbmVudABQcmVFeGVjdXRlAFBvc3RFeGVjdXRlAFZhbGlkYXRlAGVyck1l
c3NhZ2UAR2V0Wm9uZXMAZ2V0X1RpbWVDb2x1bW5zAHNldF9UaW1lQ29sdW1ucwB2YWx1ZQBnZXRf
SW5wdXRab25lAHNldF9JbnB1dFpvbmUAZ2V0X091dHB1dFpvbmUAc2V0X091dHB1dFpvbmUARmly
ZUVycm9yXwBtZXNzYWdlAEdldERpc3BsYXlOYW1lRnJvbUlkXwBpZABHZXRJZEZyb21EaXNwbGF5
TmFtZV8AZGlzcGxheU5hbWUAU3lzdGVtLkNvcmUAVGltZVpvbmVJbmZvAEdldFRpbWVab25lSW5m
b18Aem9uZUlEAG1fY29scwBtX2lucHV0Wm9uZQBtX291dHB1dFpvbmUAbV9jb2xJZHgAbV9pblRa
SQBtX291dFRaSQBUaW1lQ29sdW1ucwBJbnB1dFpvbmUAT3V0cHV0Wm9uZQBDb2x1bW5TZXBhcmF0
b3IATG9jYWxUaW1lAFN5c3RlbS5SZXNvdXJjZXMAUmVzb3VyY2VNYW5hZ2VyAF9yZXNNZ3IAU3lz
dGVtLkdsb2JhbGl6YXRpb24AQ3VsdHVyZUluZm8AX3Jlc0N1bHR1cmUAZ2V0X1Jlc291cmNlTWFu
YWdlcgBnZXRfQ3VsdHVyZQBzZXRfQ3VsdHVyZQBWYWx1ZQBDdWx0dXJlAFN5c3RlbS5Db25maWd1
cmF0aW9uAEFwcGxpY2F0aW9uU2V0dGluZ3NCYXNlAG1fVmFsdWUAbV9TeW5jT2JqZWN0AGdldF9W
YWx1ZQBTeXN0ZW0uQ29tcG9uZW50TW9kZWwARWRpdG9yQnJvd3NhYmxlQXR0cmlidXRlAEVkaXRv
ckJyb3dzYWJsZVN0YXRlAFN5c3RlbS5Db2RlRG9tLkNvbXBpbGVyAEdlbmVyYXRlZENvZGVBdHRy
aWJ1dGUAU3lzdGVtLkRpYWdub3N0aWNzAERlYnVnZ2VySGlkZGVuQXR0cmlidXRlAE1pY3Jvc29m
dC5WaXN1YWxCYXNpYy5Db21waWxlclNlcnZpY2VzAFN0YW5kYXJkTW9kdWxlQXR0cmlidXRlAEhp
ZGVNb2R1bGVOYW1lQXR0cmlidXRlAFN5c3RlbS5Db21wb25lbnRNb2RlbC5EZXNpZ24ASGVscEtl
eXdvcmRBdHRyaWJ1dGUAU3lzdGVtLlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNlcwBSdW50aW1lSGVs
cGVycwBHZXRPYmplY3RWYWx1ZQBSdW50aW1lVHlwZUhhbmRsZQBHZXRUeXBlRnJvbUhhbmRsZQBB
Y3RpdmF0b3IAQ3JlYXRlSW5zdGFuY2UATXlHcm91cENvbGxlY3Rpb25BdHRyaWJ1dGUAc2V0X1Zh
bHVlAFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcwBDb21WaXNpYmxlQXR0cmlidXRlAFN0
cmluZwBTY3JpcHRCdWZmZXIAQ0xTQ29tcGxpYW50QXR0cmlidXRlAE1pY3Jvc29mdC5TcWxTZXJ2
ZXIuRFRTUGlwZWxpbmVXcmFwAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlBpcGVsaW5lLldyYXBw
ZXIASURUU0NvbXBvbmVudE1ldGFEYXRhMTAwAGdldF9Db21wb25lbnRNZXRhRGF0YQBJRFRTSW5w
dXRDb2xsZWN0aW9uMTAwAGdldF9JbnB1dENvbGxlY3Rpb24ASURUU0lucHV0MTAwAGdldF9JdGVt
AGdldF9JRABnZXRfTG9jYWwAZ2V0X0lkAGdldF9CdWZmZXIASXNOdWxsAENvbnZlcnNpb25zAERh
dGVUaW1lAFRvRGF0ZQBDb252ZXJ0VGltZQBzZXRfSXRlbQBJbnQzMgBJRFRTSW5wdXRDb2x1bW5D
b2xsZWN0aW9uMTAwAGdldF9JbnB1dENvbHVtbkNvbGxlY3Rpb24AZ2V0X0NvdW50AFBpcGVsaW5l
Q29tcG9uZW50AGdldF9Ib3N0Q29tcG9uZW50AElEVFNCdWZmZXJNYW5hZ2VyMTAwAGdldF9CdWZm
ZXJNYW5hZ2VyAElEVFNJbnB1dENvbHVtbjEwMABnZXRfTGluZWFnZUlEAEZpbmRDb2x1bW5CeUxp
bmVhZ2VJRABJRFRTVmlydHVhbElucHV0MTAwAElEVFNWaXJ0dWFsSW5wdXRDb2x1bW4xMDAARXhj
ZXB0aW9uAElzTnVsbE9yRW1wdHkAQXBwbGljYXRpb25FeGNlcHRpb24AU3RyaW5nU3BsaXRPcHRp
b25zAFNwbGl0AEdldFZpcnR1YWxJbnB1dABSZW1vdmVBbGwASURUU1ZpcnR1YWxJbnB1dENvbHVt
bkNvbGxlY3Rpb24xMDAAZ2V0X1ZpcnR1YWxJbnB1dENvbHVtbkNvbGxlY3Rpb24ARFRTVXNhZ2VU
eXBlAFNldFVzYWdlVHlwZQBQcm9qZWN0RGF0YQBTZXRQcm9qZWN0RXJyb3IAZ2V0X01lc3NhZ2UA
Q2xlYXJQcm9qZWN0RXJyb3IAU3lzdGVtLkNvbGxlY3Rpb25zAEFycmF5TGlzdABTeXN0ZW0uQ29s
bGVjdGlvbnMuR2VuZXJpYwBJRW51bWVyYXRvcmAxAEFkZABTeXN0ZW0uQ29sbGVjdGlvbnMuT2Jq
ZWN0TW9kZWwAUmVhZE9ubHlDb2xsZWN0aW9uYDEAR2V0U3lzdGVtVGltZVpvbmVzAEdldEVudW1l
cmF0b3IAZ2V0X0N1cnJlbnQAZ2V0X0Rpc3BsYXlOYW1lAElFbnVtZXJhdG9yAE1vdmVOZXh0AElE
aXNwb3NhYmxlAERpc3Bvc2UAVG9BcnJheQBFbXB0eQBGaXJlRXJyb3IAT3BlcmF0b3JzAENvbXBh
cmVTdHJpbmcARmluZFN5c3RlbVRpbWVab25lQnlJZABTU0lTU2NyaXB0Q29tcG9uZW50RW50cnlQ
b2ludEF0dHJpYnV0ZQBDb3p5Um9jLlNxbFNlcnZlci5TU0lTLkF0dHJpYnV0ZXMAVmFsaWRhdGVQ
cm9wZXJ0aWVzQXR0cmlidXRlAFNvcnRQcm9wZXJ0aWVzQXR0cmlidXRlAElucHV0VmlydHVhbENv
bHVtbkF0dHJpYnV0ZQBEZXNjcmlwdGlvbkF0dHJpYnV0ZQBMaXN0QXR0cmlidXRlAFN5c3RlbS5S
ZWZsZWN0aW9uAEFzc2VtYmx5AGdldF9Bc3NlbWJseQBTeXN0ZW0uVGhyZWFkaW5nAE1vbml0b3IA
RW50ZXIARXhpdABEZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlAFNjcmlwdENvbXBvbmVudF9k
YWJkYzI3M2E1MWI0ZmFhODg3MDRhZDc5YWUyNzIxZS52YnByb2ouUmVzb3VyY2VzLnJlc291cmNl
cwBDb21waWxhdGlvblJlbGF4YXRpb25zQXR0cmlidXRlAFJ1bnRpbWVDb21wYXRpYmlsaXR5QXR0
cmlidXRlAEFzc2VtYmx5RmlsZVZlcnNpb25BdHRyaWJ1dGUAR3VpZEF0dHJpYnV0ZQBBc3NlbWJs
eVRyYWRlbWFya0F0dHJpYnV0ZQBBc3NlbWJseUNvcHlyaWdodEF0dHJpYnV0ZQBBc3NlbWJseVBy
b2R1Y3RBdHRyaWJ1dGUAQXNzZW1ibHlDb21wYW55QXR0cmlidXRlAEFzc2VtYmx5RGVzY3JpcHRp
b25BdHRyaWJ1dGUAQXNzZW1ibHlUaXRsZUF0dHJpYnV0ZQBTY3JpcHRDb21wb25lbnRfZGFiZGMy
NzNhNTFiNGZhYTg4NzA0YWQ3OWFlMjcyMWUudmJwcm9qLmRsbAAAC0kAbgBwAHUAdAAAKVMAZQBs
AGUAYwB0ACAAdABpAG0AZQAgAGMAbwBsAHUAbQBuAHMALgAAL1MAZQBsAGUAYwB0ACAAaQBuAHAA
dQB0ACAAdABpAG0AZQAgAHoAbwBuAGUALgAAMVMAZQBsAGUAYwB0ACAAbwB1AHQAcAB1AHQAIAB0
AGkAbQBlACAAegBvAG4AZQAuAAAFLAAKAAAZWwBMAG8AYwBhAGwAIABUAGkAbQBlAF0AABNUAGkA
bQBlACAAWgBvAG4AZQAAMU0AeQAuAFIAZQBzAG8AdQByAGMAZQBzAC4ATQB5AFIAZQBzAG8AdQBy
AGMAZQBzAAAAn998vGEyMUq2bg+xA6ZpTAAIt3pcVhk04IkIsD9ffxHVCjoDIAABAwAAAQQAABIM
BwYVEhgBEgwEAAASCAcGFRIYARIIBAAAEhEHBhUSGAESEQQAABIUBwYVEhgBEhQECAASDAQIABII
BAgAEhEECAASFAQgAQIcAyAACAQgABIVAyAADgIeAAcQAQEeAB4ABzABAQEQHgACEwAEIAATAAcG
FRIZARMABCgAEwAIFs9JC7gMNOoIiYRdzYCAzJEJIAQBEiEIAhIlBCAAHQ4DIAACBCgAHQ4DBhIk
AwYSKAYgAgEIEiUFIAEBEhwDBhIhBSABARIhBSABAhAOBCAAHRwEIAEBDgQgAQ4OBSABEi0OAgYO
AwYdCAMGEi0DKAAOBCwACgAYWwBMAG8AYwBhAGwAIABUAGkAbQBlAF0AAwYSMQMGEjUEAAASMQQA
ABI1BQABARI1BAgAEjEECAASNQMGEjgCBhwEAAASOAQIABI4BSABARFBCAEAAQAAAAAABSACAQ4O
FwEACk15VGVtcGxhdGUHOC4wLjAuMAAABAEAAAAGFRIYARIMBhUSGAESCAYVEhgBEhEGFRIYARIU
BAcBEgwEBwESCAQHARIRBAcBEhQQAQALTXkuQ29tcHV0ZXIAAAwBAAdNeS5Vc2VyAAATAQAOTXku
V2ViU2VydmljZXMAABMBAA5NeS5BcHBsaWNhdGlvbgAABAABHBwDBwECAwcBCAYAARIVEV0EBwES
FQMHAQ4FEAEAHgAECgEeAAQHAR4AByAEAQ4ODg5hAQA0U3lzdGVtLldlYi5TZXJ2aWNlcy5Qcm90
b2NvbHMuU29hcEh0dHBDbGllbnRQcm90b2NvbBJDcmVhdGVfX0luc3RhbmNlX18TRGlzcG9zZV9f
SW5zdGFuY2VfXwAAAAYVEhgBEwAGFRIZARMABAoBEwAFIAEBEwAGBwITABMABCABAQIFAQAAAAAE
BwEdDgQgABJ5BCAAEn0GIAESgIEcBAAAEi0EIAASJQQgAQIIBCABHAgGAAERgIkcDAADEYCJEYCJ
Ei0SLQUgAgEIHAYHBAgICAgFIAASgJEFIAASgJUFIAASgJkGIAESgJ0cBSACCAgICAcECBKAgQgI
BAABAg4JIAIdDh0OEYCxBSAAEoChBSAAEoC1BiABEoClHAcgAggIEYC5BgABARKAqRgHCwICEoCB
HQ4SgKEOEoClEoCpHQ4IHQ4EIAEIHAkAABUSgMkBEi0HFRKAyQESLQkgABUSgMUBEwAHFRKAxQES
LRAHBB0cEoDBEi0VEoDFARItCiAGAQgODg4IEAIGAAMIDg4CBCABAg4NBwQODhItFRKAxQESLQUA
ARItDgYHAhItEi0NAQAIVmFsaWRhdGUAAAUgAQEdDikBAAMAAAALVGltZUNvbHVtbnMJSW5wdXRa
b25lCk91dHB1dFpvbmUAAAUgAgEOAgYBAAAAAAAZAQAUU2VsZWN0IHRpbWUgY29sdW1ucy4AAA0B
AAhHZXRab25lcwAAHAEAF1NlbGVjdCBpbnB1dCB0aW1lIHpvbmUuAAAdAQAYU2VsZWN0IG91dHB1
dCB0aW1lIHpvbmUuAAAFIAASgPEHIAIBDhKA8QYHAhIxEjEEBwESNQgBAAIAAAAAAAQAAQEcBAcB
EjgEIAEBCAgBAAgAAAAAAB4BAAEAVAIWV3JhcE5vbkV4Y2VwdGlvblRocm93cwEMAQAHMS4wLjAu
MAAAKQEAJDUxYzU4YTQ0LTcwMTUtNGI0Yy05ZDczLWI0NmE2OWE1YjljNwAABQEAAQAAHwEAGkNv
cHlyaWdodCBAIE1pY3Jvc29mdCAyMDE4AAA8AQA3U2NyaXB0Q29tcG9uZW50X2RhYmRjMjczYTUx
YjRmYWE4ODcwNGFkNzlhZTI3MjFlLnZicHJvagAADgEACU1pY3Jvc29mdAAAAAAAjE0AAAAAAAAA
AAAArk0AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBNAAAAAAAAAAAAAAAAAAAAAAAAAABfQ29y
RGxsTWFpbgBtc2NvcmVlLmRsbAAAAAAA/yUAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAMAAAAoAACA
DgAAAEgAAIAQAAAAYAAAgAAAAAAAAAAAAAAAAAAAAgACAAAAeAAAgAMAAACQAACAAAAAAAAAAAAA
AAAAAAABAAB/AACoAACAAAAAAAAAAAAAAAAAAAABAAEAAADAAACAAAAAAAAAAAAAAAAAAAABAAAA
AADYAAAAAAAAAAAAAAAAAAAAAAABAAAAAADoAAAAAAAAAAAAAAAAAAAAAAABAAAAAAD4AAAAAAAA
AAAAAAAAAAAAAAABAAAAAAAIAQAAgGUAAOgCAAAAAAAAAAAAAGhoAAAoAQAAAAAAAAAAAACQaQAA
IgAAAAAAAAAAAAAAGGEAAGgEAAAAAAAAAAAAAGgENAAAAFYAUwBfAFYARQBSAFMASQBPAE4AXwBJ
AE4ARgBPAAAAAAC9BO/+AAABAAAAAQAAAAAAAAABAAAAAAA/AAAAAAAAAAQAAAACAAAAAAAAAAAA
AAAAAAAARAAAAAEAVgBhAHIARgBpAGwAZQBJAG4AZgBvAAAAAAAkAAQAAABUAHIAYQBuAHMAbABh
AHQAaQBvAG4AAAAAAAAAsATIAwAAAQBTAHQAcgBpAG4AZwBGAGkAbABlAEkAbgBmAG8AAACkAwAA
AQAwADAAMAAwADAANABiADAAAAA0AAoAAQBDAG8AbQBwAGEAbgB5AE4AYQBtAGUAAAAAAE0AaQBj
AHIAbwBzAG8AZgB0AAAAmAA4AAEARgBpAGwAZQBEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAAAAFMA
YwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AZABhAGIAZABjADIANwAzAGEANQAxAGIANABm
AGEAYQA4ADgANwAwADQAYQBkADcAOQBhAGUAMgA3ADIAMQBlAC4AdgBiAHAAcgBvAGoAAAAwAAgA
AQBGAGkAbABlAFYAZQByAHMAaQBvAG4AAAAAADEALgAwAC4AMAAuADAAAACYADwAAQBJAG4AdABl
AHIAbgBhAGwATgBhAG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AZABhAGIA
ZABjADIANwAzAGEANQAxAGIANABmAGEAYQA4ADgANwAwADQAYQBkADcAOQBhAGUAMgA3ADIAMQBl
AC4AdgBiAHAAcgBvAGoALgBkAGwAbAAAAFwAGwABAEwAZQBnAGEAbABDAG8AcAB5AHIAaQBnAGgA
dAAAAEMAbwBwAHkAcgBpAGcAaAB0ACAAQAAgAE0AaQBjAHIAbwBzAG8AZgB0ACAAMgAwADEAOAAA
AAAAoAA8AAEATwByAGkAZwBpAG4AYQBsAEYAaQBsAGUAbgBhAG0AZQAAAFMAYwByAGkAcAB0AEMA
bwBtAHAAbwBuAGUAbgB0AF8AZABhAGIAZABjADIANwAzAGEANQAxAGIANABmAGEAYQA4ADgANwAw
ADQAYQBkADcAOQBhAGUAMgA3ADIAMQBlAC4AdgBiAHAAcgBvAGoALgBkAGwAbAAAAJAAOAABAFAA
cgBvAGQAdQBjAHQATgBhAG0AZQAAAAAAUwBjAHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwBk
AGEAYgBkAGMAMgA3ADMAYQA1ADEAYgA0AGYAYQBhADgAOAA3ADAANABhAGQANwA5AGEAZQAyADcA
MgAxAGUALgB2AGIAcAByAG8AagAAADQACAABAFAAcgBvAGQAdQBjAHQAVgBlAHIAcwBpAG8AbgAA
ADEALgAwAC4AMAAuADAAAAA4AAgAAQBBAHMAcwBlAG0AYgBsAHkAIABWAGUAcgBzAGkAbwBuAAAA
MQAuADAALgAwAC4AMAAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//
AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAB3d3d3d3d3d3d3d3d3d3AERERERERERERERERERERwBP//////////////
///0cAT/////////////////9HAE//////////////////RwBP/////////////////0cAT/////
////////////9HAE//////////////////RwBP/////////////////0cAT/////////////////
9HAE//////////////////RwBP/////////////////0cAT/////////////////9HAE////////
//////////RwBP/////////////////0cAT/////////////////9HAE//////////////////Rw
BP/////////////////0cAT/////////////////9HAE//////////////////RwBIiIiIiIiIiI
iIiIiIiEcARERERERERERERERERERHAETExMTExMTExMTs7OSXRwBMzMzMzMzMzMzMzMzMzEAABE
REREREREREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAD/////////////////////wAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAAB
gAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGA
AAADwAAAB////////////////ygAAAAQAAAAIAAAAAEABAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/
AP//AAD///8AAAAAAAAAAAAHd3d3d3d3d0RERERERERHT///////+EdP///////4R0////////hH
T///////+EdP///////4R0////////hHT///////+EdP///////4R0iIiIiIiIhHTMzMzMzMzEfE
REREREREwAAAAAAAAAAAAAAAAAAAAAD//wAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAEAAP//AAD//wAAAAABAAIAICAQAAEABADoAgAAAgAQEBAAAQAE
ACgBAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAMAAAAwD0AAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA]]></arrayElement></arrayElements></property>
<property id="37" 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="511" 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_dabdc273a51b4faa88704ad79ae2721e</property>
<property id="512" 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="27" name="Input" description="" hasSideEffects="true" dangling="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="False" /></input>
</inputs>
<outputs>
<output id="115" name="Output" description="" exclusionGroup="0" synchronousInputId="27" deleteOutputOnPathDetached="false" hasSideEffects="false" dangling="false" isErrorOut="false" isSorted="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="False" /></output>
</outputs>
</component>