<component id="36" name="Geocode" componentClassID="Microsoft.ManagedComponentHost" description="Executes a custom script." localeId="1033" version="9" contactInfo="Executes a custom script.;Microsoft Corporation;Microsoft SqlServer v9; © 2004 Microsoft Corporation; All Rights Reserved; http://www.microsoft.com/sql/support;0"><properties><property id="37" name="SourceCode" state="cdata" dataType="System.String" isArray="true" description="Stores the source code of the component" typeConverter="NOTBROWSABLE"><arrayElements arrayElementCount="15"><arrayElement dataType="System.String"><![CDATA[ScriptMain.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' CozyRoc SQL Server Integration Services user script component
'
' Copyright (c) 2006-2009 CozyRoc LLC
' 
' Permission is hereby granted, free of charge, to any person
' obtaining a copy of this software and associated documentation
' files (the "Software"), to deal in the Software without
' restriction, including without limitation the rights to use,
' copy, modify, merge, publish, distribute, sublicense, and/or sell
' copies of the Software, and to permit persons to whom the
' Software is furnished to do so, subject to the following
' conditions:
' 
' The above copyright notice and this permission notice shall be
' included in all copies or substantial portions of the Software.
' 
' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
' EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
' OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
' NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
' HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
' WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
' FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
' OTHER DEALINGS IN THE SOFTWARE.

' Following resources were used as reference:
' http://code.google.com/apis/maps/documentation/geocoding/index.html
' http://code.google.com/apis/maps/articles/phpsqlgeocode.html

Imports System
Imports System.ComponentModel
Imports System.Collections
Imports System.Net
Imports System.Web
Imports System.IO
Imports System.Threading

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


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


    Private Const Query_2P As String = "http://maps.google.com/maps/geo?output=csv&oe=utf8&sensor=false&key={0}&q={1}"


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Dim address As String = CStr(Row.Buffer(m_addressIndex))

        ' Geocode address.
        Dim geo() As Object = GeoCode_(address)
        Row.Accuracy = CInt(geo(0))
        Row.Latitude = CDbl(geo(1))
        Row.Longitude = CDbl(geo(2))
    End Sub ' Input_ProcessInputRow


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

        ' Setup address index.
        Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
        m_addressIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _
            input.Buffer, _
            input.InputColumnCollection(Me.AddressColumn).LineageID)

        ' Setup API key.
        Dim vars As IDTSVariables100
        Call Me.VariableDispenser.LockOneForRead(Me.ApiKeyVariable, vars)
        Try
            m_apiKey = CStr(vars(Me.ApiKeyVariable).Value)
        Finally
            Call vars.Unlock()
        End Try

        ' Setup cache.
        m_cache = LoadCache_()
        m_cacheModified = False
    End Sub ' PreExecute


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

        If m_cacheModified Then
            ' Cache has been modified. Store it.
            Call StoreCache_(m_cache)
        End If
    End Sub ' PostExecute


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

        ' Setup address column.
        Dim input As IDTSInput100 = Me.ComponentMetaData.InputCollection(0)
        Dim virtInput As IDTSVirtualInput100 = input.GetVirtualInput()
        Call input.InputColumnCollection.RemoveAll()
        Call virtInput.SetUsageType( _
            virtInput.VirtualInputColumnCollection(Me.AddressColumn).LineageID, _
            DTSUsageType.UT_READONLY)

        ' Setup cache file connection manager.
        Me.ComponentMetaData.RuntimeConnectionCollection("CacheFile").ConnectionManagerID = Me.CacheFile
    End Sub ' ReinitializeMetaData


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

        Try
            If String.IsNullOrEmpty(Me.AddressColumn) Then
                Throw New ApplicationException("Select address column.")
            End If

            If String.IsNullOrEmpty(Me.ApiKeyVariable) Then
                Throw New ApplicationException("Select API key variable.")
            End If

            If String.IsNullOrEmpty(Me.CacheFile) Then
                Throw New ArgumentException("Select cache file connection manager.")
            End If

            Call ReinitializeMetaData()

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

        Validate = result
    End Function    'Validate


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select address column.")> _
    <InputVirtualColumn()> _
    Public Property AddressColumn() As String
        Get
            AddressColumn = m_addressColumn
        End Get
        Set(ByVal value As String)
            m_addressColumn = value
        End Set
    End Property    ' AddressColumn


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select file containing geocoding cache.")> _
    <Connection("FileConnectionType", True)> _
    Public Property CacheFile() As String
        Get
            CacheFile = m_cacheFile
        End Get
        Set(ByVal value As String)
            m_cacheFile = value
        End Set
    End Property    ' CacheFile


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select variable containing Google Maps API key.")> _
    <Variable()> _
    Public Property ApiKeyVariable() As String
        Get
            ApiKeyVariable = m_apiKeyVariable
        End Get
        Set(ByVal value As String)
            m_apiKeyVariable = value
        End Set
    End Property    ' ApiKeyVariable
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private ReadOnly Property FileConnectionType() As String()
        Get
            FileConnectionType = New String() {"FILE"}
        End Get
    End Property    ' FileConnectionType


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Loads current geocode cache file.
    Private Function LoadCache_() As Hashtable
        Dim result As Hashtable = New Hashtable()
        Dim fileName As String

        fileName = Me.Connections.CacheFile.ConnectionString
        If File.Exists(fileName) Then
            ' Cache file exists. Load it.
            Using reader As StreamReader = New StreamReader(fileName)
                While Not reader.EndOfStream
                    Dim line() As String = reader.ReadLine().Split(Chr(124))
                    result.Add(line(0), New Object() {CInt(line(1)), CDbl(line(2)), CDbl(line(3))})
                End While
            End Using

            Dim fireAgain As Boolean
            Me.ComponentMetaData.FireInformation( _
                0, _
                "Geocode", _
                String.Format("Loaded {0} cached addresses.", result.Count), _
                String.Empty, _
                0, _
                fireAgain)
        End If

        LoadCache_ = result
    End Function    ' LoadCache_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Stores current geocode cache.
    Private Sub StoreCache_(ByVal cache As Hashtable)
        Dim fileName As String = Me.Connections.CacheFile.ConnectionString

        Using writer As StreamWriter = File.CreateText(fileName)
            For Each pair As DictionaryEntry In cache
                Dim line As String = CStr(pair.Key)
                For Each item As Object In CType(pair.Value, Object())
                    line += Chr(124) + item.ToString()
                Next

                Call writer.WriteLine(line)
            Next
        End Using
    End Sub ' StoreCache_


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' If not yet cached, geocode specified address.
    Private Function GeoCode_(ByVal address As String) As Object()
        Dim result() As Object

        If Not m_cache.Contains(address) Then
            ' Address not cached yet. Load it.
            While result Is Nothing
                Dim ra() As String
                Dim response As WebResponse = HttpWebRequest.Create(String.Format( _
                    Query_2P, _
                    m_apiKey, _
                    address)).GetResponse()
                Using reader As StreamReader = New StreamReader(response.GetResponseStream())
                    ra = reader.ReadLine().Split(Chr(44))
                End Using

                If ra(0) = "200" Then
                    result = New Object() {CInt(ra(1)), CDbl(ra(2)), CDbl(ra(3))}
                ElseIf ra(0) = "620" Then
                    ' Too many queries. Increase delay between calls.
                    m_delay += 100
                    Me.ComponentMetaData.FireWarning( _
                        0, _
                        "Geocode", _
                        "Geocode service has too many queries. Delay between calls is incremented.", _
                        String.Empty, _
                        0)
                Else
                    ' Failed to geocode.
                    Throw New ApplicationException(String.Format( _
                        "Failed to geocode '{0}'. Received code: {1}", _
                        address, _
                        ra(0)))
                End If

                Call Thread.Sleep(m_delay)
            End While

            ' Address was successfully geocoded. Cache it.
            m_cacheModified = True
            m_cache.Add(address, result)
        End If

        GeoCode_ = CType(m_cache(address), Object())
    End Function    ' GeoCode_
#End Region ' Internals


#Region "Attributes"
    Private m_addressColumn As String
    Private m_cacheFile As String
    Private m_apiKeyVariable As String

    Private m_addressIndex As Integer
    Private m_apiKey As String
    Private m_cache As Hashtable
    Private m_cacheModified As Boolean

    ' Milliseconds to wait between geocode calls.
    ' It will gradually increase if service responds too many queries (620).
    Private m_delay As Integer = 200
#End Region ' Attributes
End Class   ' ScriptMain
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[ScriptComponent_2e714c6deb8346b79a3cd31154cf303a.vbproj]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF16LE]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="utf-16"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ProjectTypeGuids>{30D016F9-3734-4E33-A861-5E7D899E18F3};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>8.0.30703</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{D76505A1-CECC-4731-9009-CF3156401A61}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>My Project</AppDesignerFolder>
    <RootNamespace>ScriptComponent_2e714c6deb8346b79a3cd31154cf303a</RootNamespace>
    <AssemblyName>ScriptComponent_2e714c6deb8346b79a3cd31154cf303a</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <OptionCompare>Binary</OptionCompare>
    <OptionExplicit>On</OptionExplicit>
    <OptionStrict>On</OptionStrict>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>.\bin\Debug\</OutputPath>
    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
    <DefineDebug>true</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>false</DebugSymbols>
    <Optimize>true</Optimize>
    <OutputPath>.\bin\Release\</OutputPath>
    <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
    <DefineDebug>false</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <!-- This sections specifies references for the project. -->
  <ItemGroup>
    <Reference Include="CozyRoc.SSISPlus.2014, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files (x86)\Microsoft SQL Server\120\SDK\Assemblies\CozyRoc.SSISPlus.2014.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.SqlServer.TxScript, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSRuntimeWrap, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.DTSPipelineWrap, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="Microsoft.SqlServer.PipelineHost, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <Reference Include="System">
      <Private>False</Private>
    </Reference>
    <Reference Include="System.Data">
      <Private>False</Private>
    </Reference>
    <Reference Include="Microsoft.SqlServer.ManagedDTS">
      <Private>False</Private>
    </Reference>
    <Reference Include="System.Web">
      <Private>False</Private>
    </Reference>
  </ItemGroup>
  <!-- Visual Basic supports Importing namespaces (equivalent to using statements in C#).-->
  <ItemGroup>
    <Import Include="Microsoft.VisualBasic" />
    <Import Include="System" />
    <Import Include="System.Collections" />
    <Import Include="System.Data" />
    <Import Include="System.Diagnostics" />
    <Import Include="System.Windows.Forms" />
  </ItemGroup>
  <ItemGroup>
    <AppDesigner Include="My Project\" />
  </ItemGroup>
  <!-- Include the build rules for a VB project.-->
  <Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
  <!-- This section defines VSTA properties that describe the host-changable project properties. -->
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{30D016F9-3734-4E33-A861-5E7D899E18F3}">
        <ProjectProperties HostName="VSTAHostName" HostPackage="{B3A685AA-7EAF-4BC6-9940-57959FA5AC07}" ApplicationType="usd" Language="vb" TemplatesPath="" />
        <Host Name="SSIS_SC120" />
        <ProjectClient>
          <HostIdentifier>SSIS_SC120</HostIdentifier>
        </ProjectClient>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  <ItemGroup>
    <Compile Include="ScriptMain.vb" />
    <Compile Include="BufferWrapper.vb" />
    <Compile Include="ComponentWrapper.vb" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="My Project\" />
  </ItemGroup>
</Project>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[BufferWrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services buffer wrappers
' This module defines classes for accessing data flow buffers
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!


Option Strict Off   ' This allows usage of PipelineBuffer typed accessors.

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class InputBuffer
    Inherits ScriptBufferPlus

    Public Sub New(ByVal Component As ScriptComponent, ByVal ObjectID As Integer, ByVal IsInput As Boolean, ByVal Buffer As PipelineBuffer, ByVal OutputMap As OutputNameMap)
        MyBase.New(Component, ObjectID, IsInput, Buffer, OutputMap)
    End Sub

    Public Overrides ReadOnly Property StaticInputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public WriteOnly Property [Accuracy]() As Int32
        Set
            Me(0) = Value
        End Set
    End Property
    Public WriteOnly Property [Accuracy_IsNull] As Boolean
        Set
            If (value)
                SetNull(0)
            Else
                Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.")
            End If
        End Set
    End Property

    Public WriteOnly Property [Latitude]() As Double
        Set
            Me(1) = Value
        End Set
    End Property
    Public WriteOnly Property [Latitude_IsNull] As Boolean
        Set
            If (value)
                SetNull(1)
            Else
                Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.")
            End If
        End Set
    End Property

    Public WriteOnly Property [Longitude]() As Double
        Set
            Me(2) = Value
        End Set
    End Property
    Public WriteOnly Property [Longitude_IsNull] As Boolean
        Set
            If (value)
                SetNull(2)
            Else
                Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.")
            End If
        End Set
    End Property

    Public Overrides ReadOnly Property StaticOutputColumns() As String()
        Get
            Return New String() {"Accuracy", "Latitude", "Longitude"}
        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[ComponentWrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF8]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services component wrapper
' This module defines the base class for your component
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class UserComponent
    Inherits ScriptComponentPlus

    Public Connections As New Connections(Me)
    Public Variables As New Variables(Me)

    Public Overrides Sub ProcessInput(ByVal InputID As Integer, ByVal InputName As String, ByVal Buffer As PipelineBuffer, ByVal OutputMap As OutputNameMap)

        If InputID = MyBase.ComponentMetaData.InputCollection("Input").ID Then
            Input_ProcessInput(New InputBuffer(Me, InputID, True, Buffer, OutputMap))
        End If

    End Sub

    Public Overridable Sub Input_ProcessInput(ByVal Buffer As InputBuffer)

        While Buffer.NextRow()
            Input_ProcessInputRow(Buffer)
        End While

    End Sub

    Public Overridable Sub Input_ProcessInputRow(ByVal Row As InputBuffer)

    End Sub

End Class

Public Class Connections

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

    Public ReadOnly Property CacheFile() As IDTSConnectionManager100
        Get
            Return ParentComponent.ComponentMetaData.RuntimeConnectionCollection("CacheFile").ConnectionManager
        End Get
    End Property

End Class

Public Class Variables

    Dim ParentComponent As ScriptComponent

    <CLSCompliant(False)> _
    Public Sub New(ByVal Component As ScriptComponent)
        ParentComponent = Component
    End Sub

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[Project]]></arrayElement><arrayElement dataType="System.String"><![CDATA[UTF16LE]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<c:Project xmlns:c="http://schemas.microsoft.com/codeprojectml/2010/08/main" xmlns:msb="http://schemas.microsoft.com/developer/msbuild/2003" runtimeVersion="4.0" schemaVersion="1.0">
	<msb:PropertyGroup>
		<msb:Language>msBuild</msb:Language>
		<msb:CodeName>ScriptComponent_2e714c6deb8346b79a3cd31154cf303a</msb:CodeName>
		<msb:DisplayName>ScriptComponent_2e714c6deb8346b79a3cd31154cf303a</msb:DisplayName>
		<msb:ProjectId>{3117FEB9-D341-443A-892A-0AA413A940CA}</msb:ProjectId>
	</msb:PropertyGroup>
	<msb:ItemGroup>
		<msb:Project Include="ScriptComponent_2e714c6deb8346b79a3cd31154cf303a.vbproj"/>
		<msb:Folder Include="My Project\"/>
		<msb:File Include="ScriptMain.vb"/>
		<msb:File Include="ComponentWrapper.vb"/>
		<msb:File Include="BufferWrapper.vb"/>
	</msb:ItemGroup>
</c:Project>]]></arrayElement></arrayElements></property><property id="38" name="BinaryCode" state="cdata" dataType="System.String" isArray="true" description="Stores the binary representation of the component" typeConverter="NOTBROWSABLE"><arrayElements arrayElementCount="2"><arrayElement dataType="System.String"><![CDATA[ScriptComponent_2e714c6deb8346b79a3cd31154cf303a.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v
ZGUuDQ0KJAAAAAAAAABQRQAATAEDAOs0ElQAAAAAAAAAAOAAAiELAQsAADIAAAAGAAAAAAAA3lEA
AAAgAAAAYAAAAAAAEAAgAAAAAgAABAAAAAAAAAAEAAAAAAAAAACgAAAAAgAAAAAAAAIAQIUAABAA
ABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAAJBRAABLAAAAAGAAAEgDAAAAAAAAAAAAAAAAAAAA
AAAAAIAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAA5DEAAAAgAAAAMgAAAAIA
AAAAAAAAAAAAAAAAACAAAGAucnNyYwAAAEgDAAAAYAAAAAQAAAA0AAAAAAAAAAAAAAAAAABAAABA
LnJlbG9jAAAMAAAAAIAAAAACAAAAOAAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAADA
UQAAAAAAAEgAAAACAAUAhCkAAAwoAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4CKAEAAAoqHgIoBAAACiqmcwYAAAqAAQAABHMHAAAKgAIA
AARzCAAACoADAAAEcwkAAAqABAAABCoAABMwAQALAAAAAQAAEX4BAAAEbwoAAAoqABMwAQALAAAA
AgAAEX4CAAAEbwsAAAoqABMwAQALAAAAAwAAEX4DAAAEbwwAAAoqABMwAQALAAAABAAAEX4EAAAE
bw0AAAoqABMwAgANAAAABQAAEQIDKBEAAAooEgAACioAAAATMAEABwAAAAYAABECKBMAAAoqABMw
AQALAAAABwAAEdAFAAACKBQAAAoqABMwAQAHAAAACAAAEQIoFQAACioAEzABABAAAAAJAAARAowB
AAAbLQYoAQAAKyoCKhMwAgAQAAAACgAAEQMSAP4VAgAAGwaBAgAAGyoeAigXAAAKKhMwAgAoAAAA
CwAAEQJ7GQAACm8aAAAKCweMAwAAGy0SKAIAACsLAnsZAAAKB28bAAAKBypKAigXAAAKAnMcAAAK
fRkAAAoqADoCAwQFDgQOBSgeAAAKKgATMAEABwAAAAwAABEWjRoAAAEqADoCFgOMGwAAAW8fAAAK
KgBiAywJAhZvIAAACisLcgEAAHBzIQAACnoqAAAAOgIXA4wdAAABbx8AAAoqAGIDLAkCF28gAAAK
KwtyAQAAcHMhAAAKeioAAAA6AhgDjB0AAAFvHwAACioAYgMsCQIYbyAAAAorC3IBAABwcyEAAAp6
KgAAABMwAwAhAAAADQAAERmNGgAAAQsHFnKeAABwogcXcrAAAHCiBxhywgAAcKIHKgAAABMwAQAJ
AAAADgAAEQIoIgAACgoGKgAAABMwAQAJAAAADwAAEQIoIwAACgoGKgAAAH4CKCUAAAoCAnMgAAAG
fQYAAAQCAnMiAAAGfQcAAAQqvgMCKCYAAApvJwAACnLWAABwbygAAApvKQAACjMRAgIDFwUOBHMR
AAAGbx4AAAYqSisHAgNvHwAABgNvGgAABi3xKgAGKgAAOgIoFwAACgIDfQgAAAQqABMwAgAgAAAA
EAAAEQJ7CAAABG8mAAAKbyoAAApy4gAAcG8rAAAKbywAAAoqOgIoFwAACgIDfQkAAAQqAEoCKBwA
AAYCIMgAAAB9EgAABCoAEzADAEoAAAARAAARA28tAAAKAnsOAAAEby4AAAooLwAACgoCBm8yAAAG
CwMHFpooMAAACm8TAAAGAwcXmigxAAAKbxUAAAYDBxiaKDEAAApvFwAABioAABswBQCbAAAAEgAA
EQIoMgAACgJvJgAACm8nAAAKFowbAAABbygAAAoKAgJvMwAACm80AAAKBm81AAAKBm82AAAKAm8p
AAAGbzcAAApvOAAACm85AAAKfQ4AAAQCbzoAAAoCby0AAAYSAW87AAAKAgcCby0AAAZvPAAACm89
AAAKKC8AAAp9DwAABN4HB28+AAAK3AICbzAAAAZ9EAAABAIWfREAAAQqAAEQAAACAGIAHoAABwAA
AABuAig/AAAKAnsRAAAELAwCAnsQAAAEbzEAAAYqEzADAG4AAAATAAARAihAAAAKAm8mAAAKbycA
AAoWjBsAAAFvKAAACgoGb0EAAAoLBm82AAAKb0IAAAoHB29DAAAKAm8pAAAGb0QAAApvRQAAChZv
RgAACiYCbyYAAApvKgAACnLiAABwbysAAAoCbysAAAZvRwAACioAABswAgBuAAAAFAAAEQJvKQAA
BihIAAAKLAty9gAAcHNJAAAKegJvLQAABihIAAAKLAtyJAEAcHNJAAAKegJvKwAABihIAAAKLAty
VgEAcHNKAAAKegJvJwAABhcK3hglKEsAAAoMFgoDCG9MAAAKUShNAAAK3gAGCwcqAAABEAAAAAAA
AFJSABgxAAABEzABAAkAAAAVAAARAnsLAAAECgYqAAAAIgIDfQsAAAQqAAAAEzABAAkAAAAWAAAR
AnsMAAAECgYqAAAAIgIDfQwAAAQqAAAAEzABAAkAAAAXAAARAnsNAAAECgYqAAAAIgIDfQ0AAAQq
AAAAEzADABMAAAAYAAARF40aAAABCwcWcqIBAHCiBwoGKgAbMAcA3QAAABkAABFzTgAACgwCewYA
AARvIQAABm9PAAAKCgYoUAAACjm3AAAABnNRAAAKEwQraBEEb1IAAAoXjTcAAAETBhEGFh98nREG
b1MAAAoTBQgRBRaaGY0DAAABEwcRBxYRBReaKFQAAAqMGwAAAaIRBxcRBRiaKFUAAAqMHQAAAaIR
BxgRBRmaKFUAAAqMHQAAAaIRB29WAAAKEQRvVwAACiyP3gwRBCwHEQRvWAAACtwCbyYAAAoWcqwB
AHByvAEAcAhvWQAACowbAAABKFoAAAp+WwAAChYSA29cAAAKCAsHKgAAAAEQAAACACoAdZ8ADAAA
AAAbMAMApgAAABoAABECewYAAARvIQAABm9PAAAKCgYoXQAACgsDb14AAAoTBStuEQVvXwAACiUt
BSYRBisKeToAAAFxOgAAAQ0SAyhgAAAKKC8AAAoMEgMoYQAACnQKAAAbEwgWEwcrJREIEQeaKBEA
AAoTBAhy9gEAcBEEbxUAAAooYgAACgwRBxfWEwcRBxEIjrcy0wcIb2MAAAoRBW9kAAAKLYneCgcs
BgdvWAAACtwqAAABEAAAAgAYAIObAAoAAAAAGzAGAEYBAAAbAAARAnsQAAAEA29lAAAKOiEBAAA4
AgEAAHL6AQBwAnsPAAAEAyhmAAAKKGcAAApvaAAACg0Jb2kAAApzagAAChMEEQRvUgAACheNNwAA
ARMFEQUWHyydEQVvUwAACgzeDBEELAcRBG9YAAAK3AgWmnKXAgBwFihrAAAKFjNAGY0DAAABEwYR
BhYIF5ooVAAACowbAAABohEGFwgYmihVAAAKjB0AAAGiEQYYCBmaKFUAAAqMHQAAAaIRBgsrUggW
mnKfAgBwFihrAAAKFjMtAgJ7EgAABB9k1n0SAAAEAm8mAAAKFnKsAQBwcqcCAHB+WwAAChZvbAAA
CisUcjwDAHADCBaaKGYAAApzSQAACnoCexIAAAQobQAACgc5+P7//wIXfREAAAQCexAAAAQDB29W
AAAKAnsQAAAEA29uAAAKdAoAABsKBioAAAEQAAACAD8AH14ADAAAAABCU0pCAQABAAAAAAAMAAAA
djQuMC4zMDMxOQAAAAAFAGwAAADkDAAAI34AAFANAAAAEQAAI1N0cmluZ3MAAAAAUB4AAJQDAAAj
VVMA5CEAABAAAAAjR1VJRAAAAPQhAAAYBgAAI0Jsb2IAAAAAAAAAAgAAAVcdogkJDgAAAPolMwAW
AAABAAAATAAAAAsAAAASAAAAMgAAAB0AAAB4AAAAAQAAADUAAAAbAAAABQAAABIAAAAVAAAACgAA
AAEAAAAIAAAAAgAAAAMAAAACAAAAAADJEAEAAAAAAAoAPwEVAQoAcwFVAQYAgwF8AQoA2wEVAQYA
WQJ8AQoA2wKxAg4ALQMWAxIAfANbAxYArQNbAxIAvANbAw4AGAUWAxoA0wWrBQYA1QbCBh4AuAei
Bx4A0QeiBx4A/gfmBwYAKAgVCAoAZwhACAoAfwgTAB4AtAiXCAYA6QjJCAYABwl8AQYAKwl8AQoA
RAkTAAYAkglzCQYApgl8AQYArQl8AQYAxAl8AQYA3gl8ARIA5QlbAwYA8gl8ASIAVQosCiIAhAos
CiIArwosCiIAzAosCiIADwssCgoASQtACBoAaAurBRYAeQtbAyIAnQssCiIAxAssCiIA+wssChoA
MgyrBRoAcAyrBSIAhwwsCiIAtQwsCiIA+gwsCiIAFA0sCgYARg18AQYAXg18AQYAcw18AQoAhQ1A
CAYAyQ2/DQYA6w2/DQYAAA58AQYAHw58AQYAWg6/DQYAZw7CBgYAdw7CBgYApg7CBgYAzQ6/DR4A
9g7rDh4ACw/rDgYAKQ+/DQoAQg9ACAYAdw9mDxIAhA9bAw4AzQ+rDw4A6Q+rDw4AARCrDx4AExCi
Bw4AKBCrDw4APBCrDwYAWBDJCAYAeBDJCAYAsBCWEAAAAAABAAAAAAABAAEAAAAAACkANwAFAAEA
AQAAAAAAawA3AAkAAQACAAABEAB2ADcADQABAAMABQEAAIAAAAANAAUACAAFAQAAjgAAAA0ABQAP
AAEAAACpALUAHQAGABEAAQAAAOYAtQAtAAYAHAABAAAA9AC1AA0ACAAgAAEAAAAAAbUADQAJACIA
AQAAAAoBtQAgAAoAIwAxAJ4BIAAxAMcBLQAxAOkBOgAxAA4CRwAhAOoCkAAGAPQA5AAGAAAB6AAB
AHgF/AABAHgF/ABRgAQGEAEBAA0HEAEBAB0HEAEBACkHEAEBADoHywEBAEkHEAEBAFIHzgEBAFoH
0gEBAGoHywFQIAAAAAAGGE8BEwABAFggAAAAAAYYTwETAAEAYCAAAAAAERiKARcAAQCMIAAAAAAT
CJEBGwABAKQgAAAAABMItwEoAAEAvCAAAAAAEwjgATUAAQDUIAAAAAATCP4BQgABAOwgAAAAAEYC
RAJjAAEACCEAAAAARgJNAmgAAgAcIQAAAACDAF4CbAACADQhAAAAAEYCZgJxAAIASCEAAAAAEQBv
AngAAgBkIQAAAAABAI0CgAADAIAhAAAAAAYYTwETAAQAiCEAAAAAAwihAosABAC8IQAAAAAGGE8B
EwAEANAhAAAAAAYYTwGvAAQA4CEAAAAARgr2A7sACQD0IQAAAAAGCA0EwAAJAAQiAAAAAAYIIATF
AAoAICIAAAAABgg0BMoACwAwIgAAAAAGCEEExQAMAEwiAAAAAAYIVQTKAA0AXCIAAAAABghjBMUA
DgB4IgAAAABGCngEuwAPAKgiAAAAAIYAkATPAA8AwCIAAAAAhgCYBM8ADwDYIgAAAAAGGE8BEwAP
APgiAAAAAEYCLAXsAA8AKCMAAAAARgNLBfYAEwA8IwAAAABGA14F9gAUAEAjAAAAAAYYTwEAARUA
UCMAAAAABgjsBQYBFgB8IwAAAAAGGE8BAAEWAIwjAAAAAAYYTwETABcAoCMAAAAARgJeBfYAFwD4
IwAAAABGAg0GEwAYALAkAAAAAEYCGAYTABgAzCQAAAAARgIkBhMAGABIJQAAAAAGADkGrwEYANQl
AAAAAAYITQZxABkA7CUAAAAABghfBrUBGQD4JQAAAAAGCOwFcQAaABAmAAAAAAYIdwa1ARoAHCYA
AAAABgiFBnEAGwA0JgAAAAAGCJgGtQEbAEAmAAAAAAEIqwa7ABwAYCYAAAAAAQDfBroBHABcJwAA
AAABAOoGvwEcACAoAAAAAAEA/AbFAR0AAAABAEsCAAABAIQCAAABAIQCAAABAMoDAAACANQDAAAD
AN0DAAAEAOUDAAAFAOwDAAABABoEAAABABoEAAABABoEAAABABoEAAABABoEAAABABoEAAABADkF
AAACAEEFAAADAOUDAAAEAOwDAAABAOUDAAABAHQFAAABAMoDAAABAMoDAAABAHQFAAABAEIGAAAB
AHEGAAABAHEGAAABAHEGAAABAPYGAAABAAUHCQBPARMAcQBPAdkBgQBPAegBEQBPARMAiQBPARMA
JABPARMALABPARMANABPARMAPABPARMAJAChAosALAChAosANAChAosAPAChAosAkQBPARMAmQBP
ARMAoQBPAbUBqQD4CIICGQBEAmMAGQBNAmgAKQAZCY8CGQBmAnEAuQA1CZ8CGQBPARMAwQBPAa8C
RADqApAATABfCYsATABpCSwDTABPARMAyQBPAcUAOQBPAa8AOQCzCUYDOQC8CcAA4QBPAbUB8QCQ
BM8A8QCYBM8A+QBPAcUAWQBPARMAQQBuClMDAQGbClkDCQG8Cl8DEQHFCmgAAQHvCmYDGQG8CmwD
IQEoCwYBOQA+C3gDSQC8Cn0DKQFmAoIDKQFVC4cDKQFfC4wDQQANBhMAWQCLC5cDOQGyC50DEQE+
C2gAEQHhC6MDSQG8CqkDUQEODGgAQQEcDLADQQBLDLYDWQFhDLwDMQG8CsUDYQFfCcwDMQGADBMA
QQAYBhMAWQAkBhMAEQGbDNkDSQGrDBMAaQHZDN8DcQG8CuUDeQEODGgAaQEhDewDIQEuDbUB0QBQ
Df0DkQFPAbUBmQFPAbUBoQGRDQIEiQGhDXEAoQGtDRcAaQBPARMAYQDWDXEAsQHwDf0DqQFPAbUB
qQH3DXEA0QAFDhEEKQFVCxgEKQFfCx0EaQALDiIEqQEPDs8AwQErDhMAaQAzDmgA0QA9DigE0QBE
DhABAQFKDi4EsQGNDksEaQCYDlIE4QGyDswD0QG+DswD0QFfCcwD0QDGDlsE6QHYDrUB4QHiDs8A
aQACD2MA0QA9DncE+QEWD34E+QEdD4UE8QEwD4sEqQFPAZEECQJMD5gEAQFaD58EEQJ+D6gEaQC8
Cq0EGQJPARMAIQJPAbUBKQJPAdMEMQJPARMAOQJPAbUBQQJPAT4FSQJPARMAUQJPAcAAWQJPARMA
YQJPAbUBDgAoABMBKQCDADwCLgCzA6YFLgC7A68FLgDDA84FQAArAAcCQAATAN8BQwAbAO4BQwAT
AN8BSQCDAG4CYwAbAO4BYwATAN8BaQCDAE0CgAArAAcCgwB7AAcCgwBzAAcCgwAbAO4BiQCDAFoC
oAArAAcCowATAN8BowDDALcCwAArAAcCwwATAN8BwwDrADsD4AArAAcC4wAjATsDAAETAN8BAAEr
AAcCAwEjATsDIAErAAcCIAETAN8BQAErAAcCQAETAN8BYAETAN8BYAErAAcCYwGLA9kEYwEjATsD
YwGDA8UEYwF7AwcCgAErAAcCoAErAAcCwAErAAcCwAETAN8B4AErAAcC6QGrAwcC6QGbA4oFAAIT
AN8BAAIrAAcCCQKjA0QFCQKbA10FKQKbAwkFKQKTAwcCAAQjATsDQAQjATsDKAItAjICNwKHAosC
lgKbAqoCqgIyA0EDTAOHAocCcwORA9AD9AMJBJsCmwKbAkwDOQRiBLIEBAABAAYABQAHAAYACQAO
AAsADwAAAHMBTwAAACwCVAAAANsBWQAAADgCXgAAAPQCmAAAAKQE0wAAALcE2AAAAMAE3AAAANAE
4AAAANkE3AAAAOkE4AAAAPME3AAAAAQF0wAAAPoFCwEAAHIH1QEAAPoF1QEAAIAH1QEAAI8H0wAC
AAQAAwACAAUABQACAAYABwACAAcACQACAA8ACwACABIADQABABMADwABABQAEQABABUAEwABABYA
FQABABcAFwABABgAGQACABkAGwACACEAHQABACoAHwACACkAHwABACwAIQACACsAIQACAC0AIwAB
AC4AIwACAC8AJQB1AHUAiAAMAhMCGgIhAhkDIANYBASAAAAAAAAAAAAAAAAAAAAAALUAAAAEAAAA
AAAAAAAAAAABAAoAAAAAAAoAAAAAAAAAAAAAAAoAEwAAAAAAAQAAAAAAAAAAAAAAnQAAAwAAAAAM
AAAAAAAAAAAAAACmAD4DAAAAAAwAAAAAAAAAAAAAAKYAjAMAAAAADAAAAAAAAAAAAAAApgCIBQAA
AAAEAAAAAAAAAAAAAAABAHwBAAAAAAwAAAAAAAAAAAAAAKYACAoAAAAABQAEAAYABAAAABAADACC
AgAAEAAZAIICAAAAABsAggItAKUCLQAnAwAAAAAAPE1vZHVsZT4AbXNjb3JsaWIATWljcm9zb2Z0
LlZpc3VhbEJhc2ljAE15QXBwbGljYXRpb24AU2NyaXB0Q29tcG9uZW50XzJlNzE0YzZkZWI4MzQ2
Yjc5YTNjZDMxMTU0Y2YzMDNhLk15AE15Q29tcHV0ZXIATXlQcm9qZWN0AE15V2ViU2VydmljZXMA
VGhyZWFkU2FmZU9iamVjdFByb3ZpZGVyYDEASW5wdXRCdWZmZXIAU2NyaXB0Q29tcG9uZW50XzJl
NzE0YzZkZWI4MzQ2Yjc5YTNjZDMxMTU0Y2YzMDNhAFVzZXJDb21wb25lbnQAQ29ubmVjdGlvbnMA
VmFyaWFibGVzAFNjcmlwdE1haW4ATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkFwcGxpY2F0aW9uU2Vy
dmljZXMAQXBwbGljYXRpb25CYXNlAC5jdG9yAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5EZXZpY2Vz
AENvbXB1dGVyAFN5c3RlbQBPYmplY3QALmNjdG9yAGdldF9Db21wdXRlcgBtX0NvbXB1dGVyT2Jq
ZWN0UHJvdmlkZXIAZ2V0X0FwcGxpY2F0aW9uAG1fQXBwT2JqZWN0UHJvdmlkZXIAVXNlcgBnZXRf
VXNlcgBtX1VzZXJPYmplY3RQcm92aWRlcgBnZXRfV2ViU2VydmljZXMAbV9NeVdlYlNlcnZpY2Vz
T2JqZWN0UHJvdmlkZXIAQXBwbGljYXRpb24AV2ViU2VydmljZXMARXF1YWxzAG8AR2V0SGFzaENv
ZGUAVHlwZQBHZXRUeXBlAFRvU3RyaW5nAENyZWF0ZV9fSW5zdGFuY2VfXwBUAGluc3RhbmNlAERp
c3Bvc2VfX0luc3RhbmNlX18AZ2V0X0dldEluc3RhbmNlAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5N
eVNlcnZpY2VzLkludGVybmFsAENvbnRleHRWYWx1ZWAxAG1fQ29udGV4dABHZXRJbnN0YW5jZQBD
b3p5Um9jLlNTSVNQbHVzLjIwMTQAQ296eVJvYy5TcWxTZXJ2ZXIuU1NJUwBTY3JpcHRCdWZmZXJQ
bHVzAE1pY3Jvc29mdC5TcWxTZXJ2ZXIuVHhTY3JpcHQATWljcm9zb2Z0LlNxbFNlcnZlci5EdHMu
UGlwZWxpbmUAU2NyaXB0Q29tcG9uZW50AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuUGlwZWxpbmVIb3N0
AFBpcGVsaW5lQnVmZmVyAE91dHB1dE5hbWVNYXAAQ29tcG9uZW50AE9iamVjdElEAElzSW5wdXQA
QnVmZmVyAE91dHB1dE1hcABnZXRfU3RhdGljSW5wdXRDb2x1bW5zAHNldF9BY2N1cmFjeQBWYWx1
ZQBzZXRfQWNjdXJhY3lfSXNOdWxsAHNldF9MYXRpdHVkZQBzZXRfTGF0aXR1ZGVfSXNOdWxsAHNl
dF9Mb25naXR1ZGUAc2V0X0xvbmdpdHVkZV9Jc051bGwAZ2V0X1N0YXRpY091dHB1dENvbHVtbnMA
TmV4dFJvdwBFbmRPZlJvd3NldABTdGF0aWNJbnB1dENvbHVtbnMAQWNjdXJhY3kAQWNjdXJhY3lf
SXNOdWxsAExhdGl0dWRlAExhdGl0dWRlX0lzTnVsbABMb25naXR1ZGUATG9uZ2l0dWRlX0lzTnVs
bABTdGF0aWNPdXRwdXRDb2x1bW5zAFNjcmlwdENvbXBvbmVudFBsdXMAUHJvY2Vzc0lucHV0AElu
cHV0SUQASW5wdXROYW1lAElucHV0X1Byb2Nlc3NJbnB1dABJbnB1dF9Qcm9jZXNzSW5wdXRSb3cA
Um93AFBhcmVudENvbXBvbmVudABNaWNyb3NvZnQuU3FsU2VydmVyLkRUU1J1bnRpbWVXcmFwAE1p
Y3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlJ1bnRpbWUuV3JhcHBlcgBJRFRTQ29ubmVjdGlvbk1hbmFn
ZXIxMDAAZ2V0X0NhY2hlRmlsZQBDYWNoZUZpbGUAUXVlcnlfMlAAUHJlRXhlY3V0ZQBQb3N0RXhl
Y3V0ZQBSZWluaXRpYWxpemVNZXRhRGF0YQBWYWxpZGF0ZQBlcnJNZXNzYWdlAGdldF9BZGRyZXNz
Q29sdW1uAHNldF9BZGRyZXNzQ29sdW1uAHZhbHVlAHNldF9DYWNoZUZpbGUAZ2V0X0FwaUtleVZh
cmlhYmxlAHNldF9BcGlLZXlWYXJpYWJsZQBnZXRfRmlsZUNvbm5lY3Rpb25UeXBlAFN5c3RlbS5D
b2xsZWN0aW9ucwBIYXNodGFibGUATG9hZENhY2hlXwBTdG9yZUNhY2hlXwBjYWNoZQBHZW9Db2Rl
XwBhZGRyZXNzAG1fYWRkcmVzc0NvbHVtbgBtX2NhY2hlRmlsZQBtX2FwaUtleVZhcmlhYmxlAG1f
YWRkcmVzc0luZGV4AG1fYXBpS2V5AG1fY2FjaGUAbV9jYWNoZU1vZGlmaWVkAG1fZGVsYXkAQWRk
cmVzc0NvbHVtbgBBcGlLZXlWYXJpYWJsZQBGaWxlQ29ubmVjdGlvblR5cGUAU3lzdGVtLkNvbXBv
bmVudE1vZGVsAEVkaXRvckJyb3dzYWJsZUF0dHJpYnV0ZQBFZGl0b3JCcm93c2FibGVTdGF0ZQBT
eXN0ZW0uQ29kZURvbS5Db21waWxlcgBHZW5lcmF0ZWRDb2RlQXR0cmlidXRlAFN5c3RlbS5EaWFn
bm9zdGljcwBEZWJ1Z2dlckhpZGRlbkF0dHJpYnV0ZQBNaWNyb3NvZnQuVmlzdWFsQmFzaWMuQ29t
cGlsZXJTZXJ2aWNlcwBTdGFuZGFyZE1vZHVsZUF0dHJpYnV0ZQBIaWRlTW9kdWxlTmFtZUF0dHJp
YnV0ZQBTeXN0ZW0uQ29tcG9uZW50TW9kZWwuRGVzaWduAEhlbHBLZXl3b3JkQXR0cmlidXRlAFN5
c3RlbS5SdW50aW1lLkNvbXBpbGVyU2VydmljZXMAUnVudGltZUhlbHBlcnMAR2V0T2JqZWN0VmFs
dWUAUnVudGltZVR5cGVIYW5kbGUAR2V0VHlwZUZyb21IYW5kbGUAQWN0aXZhdG9yAENyZWF0ZUlu
c3RhbmNlAE15R3JvdXBDb2xsZWN0aW9uQXR0cmlidXRlAGdldF9WYWx1ZQBzZXRfVmFsdWUAU3lz
dGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzAENvbVZpc2libGVBdHRyaWJ1dGUAU3RyaW5nAElu
dDMyAHNldF9JdGVtAFNldE51bGwASW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbgBEb3VibGUAU2Ny
aXB0QnVmZmVyAENMU0NvbXBsaWFudEF0dHJpYnV0ZQBNaWNyb3NvZnQuU3FsU2VydmVyLkRUU1Bp
cGVsaW5lV3JhcABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5QaXBlbGluZS5XcmFwcGVyAElEVFND
b21wb25lbnRNZXRhRGF0YTEwMABnZXRfQ29tcG9uZW50TWV0YURhdGEASURUU0lucHV0Q29sbGVj
dGlvbjEwMABnZXRfSW5wdXRDb2xsZWN0aW9uAElEVFNJbnB1dDEwMABnZXRfSXRlbQBnZXRfSUQA
SURUU1J1bnRpbWVDb25uZWN0aW9uQ29sbGVjdGlvbjEwMABnZXRfUnVudGltZUNvbm5lY3Rpb25D
b2xsZWN0aW9uAElEVFNSdW50aW1lQ29ubmVjdGlvbjEwMABnZXRfQ29ubmVjdGlvbk1hbmFnZXIA
Z2V0X0J1ZmZlcgBDb252ZXJzaW9ucwBUb0ludGVnZXIAVG9Eb3VibGUASURUU1ZhcmlhYmxlczEw
MABQaXBlbGluZUNvbXBvbmVudABnZXRfSG9zdENvbXBvbmVudABJRFRTQnVmZmVyTWFuYWdlcjEw
MABnZXRfQnVmZmVyTWFuYWdlcgBJRFRTSW5wdXRDb2x1bW5Db2xsZWN0aW9uMTAwAGdldF9JbnB1
dENvbHVtbkNvbGxlY3Rpb24ASURUU0lucHV0Q29sdW1uMTAwAGdldF9MaW5lYWdlSUQARmluZENv
bHVtbkJ5TGluZWFnZUlEAElEVFNWYXJpYWJsZURpc3BlbnNlcjEwMABnZXRfVmFyaWFibGVEaXNw
ZW5zZXIATG9ja09uZUZvclJlYWQASURUU1ZhcmlhYmxlMTAwAFVubG9jawBJRFRTVmlydHVhbElu
cHV0MTAwAEdldFZpcnR1YWxJbnB1dABSZW1vdmVBbGwASURUU1ZpcnR1YWxJbnB1dENvbHVtbkNv
bGxlY3Rpb24xMDAAZ2V0X1ZpcnR1YWxJbnB1dENvbHVtbkNvbGxlY3Rpb24ASURUU1ZpcnR1YWxJ
bnB1dENvbHVtbjEwMABEVFNVc2FnZVR5cGUAU2V0VXNhZ2VUeXBlAHNldF9Db25uZWN0aW9uTWFu
YWdlcklEAEV4Y2VwdGlvbgBJc051bGxPckVtcHR5AEFwcGxpY2F0aW9uRXhjZXB0aW9uAEFyZ3Vt
ZW50RXhjZXB0aW9uAFByb2plY3REYXRhAFNldFByb2plY3RFcnJvcgBnZXRfTWVzc2FnZQBDbGVh
clByb2plY3RFcnJvcgBTeXN0ZW0uSU8AU3RyZWFtUmVhZGVyAGdldF9Db25uZWN0aW9uU3RyaW5n
AEZpbGUARXhpc3RzAFJlYWRMaW5lAENoYXIAU3BsaXQAQWRkAGdldF9FbmRPZlN0cmVhbQBJRGlz
cG9zYWJsZQBEaXNwb3NlAGdldF9Db3VudABGb3JtYXQARW1wdHkARmlyZUluZm9ybWF0aW9uAFN0
cmVhbVdyaXRlcgBEaWN0aW9uYXJ5RW50cnkASURpY3Rpb25hcnlFbnVtZXJhdG9yAENyZWF0ZVRl
eHQAR2V0RW51bWVyYXRvcgBJRW51bWVyYXRvcgBnZXRfQ3VycmVudABnZXRfS2V5AENvbmNhdABU
ZXh0V3JpdGVyAFdyaXRlTGluZQBNb3ZlTmV4dABTeXN0ZW0uTmV0AFdlYlJlc3BvbnNlAENvbnRh
aW5zAFdlYlJlcXVlc3QAQ3JlYXRlAEdldFJlc3BvbnNlAFN0cmVhbQBHZXRSZXNwb25zZVN0cmVh
bQBPcGVyYXRvcnMAQ29tcGFyZVN0cmluZwBGaXJlV2FybmluZwBTeXN0ZW0uVGhyZWFkaW5nAFRo
cmVhZABTbGVlcABTU0lTU2NyaXB0Q29tcG9uZW50RW50cnlQb2ludEF0dHJpYnV0ZQBDb3p5Um9j
LlNxbFNlcnZlci5TU0lTLkF0dHJpYnV0ZXMAVmFsaWRhdGVQcm9wZXJ0aWVzQXR0cmlidXRlAFNv
cnRQcm9wZXJ0aWVzQXR0cmlidXRlAFZhcmlhYmxlQXR0cmlidXRlAERlc2NyaXB0aW9uQXR0cmli
dXRlAENvbm5lY3Rpb25BdHRyaWJ1dGUASW5wdXRWaXJ0dWFsQ29sdW1uQXR0cmlidXRlAENvbXBp
bGF0aW9uUmVsYXhhdGlvbnNBdHRyaWJ1dGUAUnVudGltZUNvbXBhdGliaWxpdHlBdHRyaWJ1dGUA
U3lzdGVtLlJ1bnRpbWUuVmVyc2lvbmluZwBUYXJnZXRGcmFtZXdvcmtBdHRyaWJ1dGUAU2NyaXB0
Q29tcG9uZW50XzJlNzE0YzZkZWI4MzQ2Yjc5YTNjZDMxMTU0Y2YzMDNhLmRsbAAAAACAm0kAcwBO
AHUAbABsACAAcAByAG8AcABlAHIAdAB5ACAAYwBhAG4AbgBvAHQAIABiAGUAIABzAGUAdAAgAHQA
bwAgAEYAYQBsAHMAZQAuACAAQQBzAHMAaQBnAG4AIABhACAAdgBhAGwAdQBlACAAdABvACAAdABo
AGUAIABjAG8AbAB1AG0AbgAgAGkAbgBzAHQAZQBhAGQALgAAEUEAYwBjAHUAcgBhAGMAeQAAEUwA
YQB0AGkAdAB1AGQAZQAAE0wAbwBuAGcAaQB0AHUAZABlAAALSQBuAHAAdQB0AAATQwBhAGMAaABl
AEYAaQBsAGUAAC1TAGUAbABlAGMAdAAgAGEAZABkAHIAZQBzAHMAIABjAG8AbAB1AG0AbgAuAAAx
UwBlAGwAZQBjAHQAIABBAFAASQAgAGsAZQB5ACAAdgBhAHIAaQBhAGIAbABlAC4AAEtTAGUAbABl
AGMAdAAgAGMAYQBjAGgAZQAgAGYAaQBsAGUAIABjAG8AbgBuAGUAYwB0AGkAbwBuACAAbQBhAG4A
YQBnAGUAcgAuAAAJRgBJAEwARQAAD0cAZQBvAGMAbwBkAGUAADlMAG8AYQBkAGUAZAAgAHsAMAB9
ACAAYwBhAGMAaABlAGQAIABhAGQAZAByAGUAcwBzAGUAcwAuAAADfAAAgJtoAHQAdABwADoALwAv
AG0AYQBwAHMALgBnAG8AbwBnAGwAZQAuAGMAbwBtAC8AbQBhAHAAcwAvAGcAZQBvAD8AbwB1AHQA
cAB1AHQAPQBjAHMAdgAmAG8AZQA9AHUAdABmADgAJgBzAGUAbgBzAG8AcgA9AGYAYQBsAHMAZQAm
AGsAZQB5AD0AewAwAH0AJgBxAD0AewAxAH0AAAcyADAAMAAABzYAMgAwAACAk0cAZQBvAGMAbwBk
AGUAIABzAGUAcgB2AGkAYwBlACAAaABhAHMAIAB0AG8AbwAgAG0AYQBuAHkAIABxAHUAZQByAGkA
ZQBzAC4AIABEAGUAbABhAHkAIABiAGUAdAB3AGUAZQBuACAAYwBhAGwAbABzACAAaQBzACAAaQBu
AGMAcgBlAG0AZQBuAHQAZQBkAC4AAFdGAGEAaQBsAGUAZAAgAHQAbwAgAGcAZQBvAGMAbwBkAGUA
IAAnAHsAMAB9ACcALgAgAFIAZQBjAGUAaQB2AGUAZAAgAGMAbwBkAGUAOgAgAHsAMQB9AAGCG1M3
CxGJTLaSI3HVObgyAAi3elxWGTTgiQiwP19/EdUKOgMgAAEDAAABBAAAEgwHBhUSGAESDAQAABII
BwYVEhgBEggEAAASEQcGFRIYARIRBAAAEhQHBhUSGAESFAQIABIMBAgAEggECAASEQQIABIUBCAB
AhwDIAAIBCAAEhUDIAAOAh4ABxABAR4AHgAHMAEBARAeAAITAAQgABMABwYVEhkBEwAEKAATAAgW
z0kLuAw06giJhF3NgIDMkQsgBQESIQgCEiUSKQQgAB0OBCABAQgEIAEBAgQgAQENAyAAAgQoAB0O
AygACAMoAAIDKAANAwYSJAMGEigJIAQBCA4SJRIpBSABARIcAwYSIQUgAQESIQQgABIxBCgAEjEC
Bg6AmmgAdAB0AHAAOgAvAC8AbQBhAHAAcwAuAGcAbwBvAGcAbABlAC4AYwBvAG0ALwBtAGEAcABz
AC8AZwBlAG8APwBvAHUAdABwAHUAdAA9AGMAcwB2ACYAbwBlAD0AdQB0AGYAOAAmAHMAZQBuAHMA
bwByAD0AZgBhAGwAcwBlACYAawBlAHkAPQB7ADAAfQAmAHEAPQB7ADEAfQAFIAECEA4EIAEBDgQg
ABI1BSABARI1BSABHRwOAgYIAwYSNQIGAgMoAA4FIAEBET0IAQABAAAAAAAFIAIBDg4YAQAKTXlU
ZW1wbGF0ZQgxMC4wLjAuMAAABAEAAAAGFRIYARIMBhUSGAESCAYVEhgBEhEGFRIYARIUBAcBEgwE
BwESCAQHARIRBAcBEhQQAQALTXkuQ29tcHV0ZXIAAAwBAAdNeS5Vc2VyAAATAQAOTXkuV2ViU2Vy
dmljZXMAABMBAA5NeS5BcHBsaWNhdGlvbgAABAABHBwDBwECAwcBCAYAARIVEVkEBwESFQMHAQ4F
EAEAHgAECgEeAAQHAR4AByAEAQ4ODg5hAQA0U3lzdGVtLldlYi5TZXJ2aWNlcy5Qcm90b2NvbHMu
U29hcEh0dHBDbGllbnRQcm90b2NvbBJDcmVhdGVfX0luc3RhbmNlX18TRGlzcG9zZV9fSW5zdGFu
Y2VfXwAAAAYVEhgBEwAGFRIZARMABAoBEwAFIAEBEwAIBwMTABMAEwAFAQAAAAAEBwEdDgUgAgEI
HAYHAh0OHQ4FIAASgIEFIAASgIUGIAESgIkcBSAAEoCNBiABEoCRHAQHARIxBCAAEiUEIAEcCAQA
AQ4cBAABCBwEAAENHAUHAg4dHAUgABKAnQUgABKAoQUgABKApQYgARKAqRwFIAIICAgFIAASgK0I
IAIBDhASgJkGIAESgLEcAyAAHAgHAhKAiRKAmQUgABKAtQUgABKAuQYgARKAvRwHIAIICBGAwQgH
AhKAiRKAtQQAAQIOBgABARKAxQcHAwICEoDFBiABHQ4dAwQAAQgOBAABDQ4FIAIBHBwFAAIODhwK
IAYBCA4ODggQAhEHCA4SNRI1AhKA1R0OHQMdHAYAARKA5Q4FIAASgO0CHRwGAAMODg4OFAcJDhKA
5Q4RgOkcEoDtEYDpCB0cBgADDg4cHAYAARKA/Q4FIAASgPkFIAASgQEGIAEBEoEBBgADCA4OAggg
BQEIDg4OCAQAAQEIBCABHBwSBwcdHB0cHQ4SgPkSgNUdAx0cDQEACFZhbGlkYXRlAAAFIAEBHQ4v
AQADAAAADUFkZHJlc3NDb2x1bW4OQXBpS2V5VmFyaWFibGUJQ2FjaGVGaWxlAAA0AQAvU2VsZWN0
IHZhcmlhYmxlIGNvbnRhaW5pbmcgR29vZ2xlIE1hcHMgQVBJIGtleS4AAAUgAgEOAhgBABJGaWxl
Q29ubmVjdGlvblR5cGUBAAAsAQAnU2VsZWN0IGZpbGUgY29udGFpbmluZyBnZW9jb2RpbmcgY2Fj
aGUuAAAbAQAWU2VsZWN0IGFkZHJlc3MgY29sdW1uLgAACAEACAAAAAAAHgEAAQBUAhZXcmFwTm9u
RXhjZXB0aW9uVGhyb3dzAUcBABouTkVURnJhbWV3b3JrLFZlcnNpb249djQuMAEAVA4URnJhbWV3
b3JrRGlzcGxheU5hbWUQLk5FVCBGcmFtZXdvcmsgNAAAuFEAAAAAAAAAAAAAzlEAAAAgAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAMBRAAAAAAAAAABfQ29yRGxsTWFpbgBtc2NvcmVlLmRsbAAAAAAA/yUA
IAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAQAAAAGAAAgAAA
AAAAAAAAAAAAAAAAAQABAAAAMAAAgAAAAAAAAAAAAAAAAAAAAQAAAAAASAAAAFhgAADsAgAAAAAA
AAAAAADsAjQAAABWAFMAXwBWAEUAUgBTAEkATwBOAF8ASQBOAEYATwAAAAAAvQTv/gAAAQAAAAAA
AAAAAAAAAAAAAAAAPwAAAAAAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAEQAAAABAFYAYQByAEYAaQBs
AGUASQBuAGYAbwAAAAAAJAAEAAAAVAByAGEAbgBzAGwAYQB0AGkAbwBuAAAAAAAAALAETAIAAAEA
UwB0AHIAaQBuAGcARgBpAGwAZQBJAG4AZgBvAAAAKAIAAAEAMAAwADAAMAAwADQAYgAwAAAALAAC
AAEARgBpAGwAZQBEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAAAACAAAAAwAAgAAQBGAGkAbABlAFYA
ZQByAHMAaQBvAG4AAAAAADAALgAwAC4AMAAuADAAAACMADUAAQBJAG4AdABlAHIAbgBhAGwATgBh
AG0AZQAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8AMgBlADcAMQA0AGMANgBkAGUA
YgA4ADMANAA2AGIANwA5AGEAMwBjAGQAMwAxADEANQA0AGMAZgAzADAAMwBhAC4AZABsAGwAAAAA
ACgAAgABAEwAZQBnAGEAbABDAG8AcAB5AHIAaQBnAGgAdAAAACAAAACUADUAAQBPAHIAaQBnAGkA
bgBhAGwARgBpAGwAZQBuAGEAbQBlAAAAUwBjAHIAaQBwAHQAQwBvAG0AcABvAG4AZQBuAHQAXwAy
AGUANwAxADQAYwA2AGQAZQBiADgAMwA0ADYAYgA3ADkAYQAzAGMAZAAzADEAMQA1ADQAYwBmADMA
MAAzAGEALgBkAGwAbAAAAAAANAAIAAEAUAByAG8AZAB1AGMAdABWAGUAcgBzAGkAbwBuAAAAMAAu
ADAALgAwAC4AMAAAADgACAABAEEAcwBzAGUAbQBiAGwAeQAgAFYAZQByAHMAaQBvAG4AAAAwAC4A
MAAuADAALgAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAADAAAAOAxAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></arrayElement></arrayElements></property><property id="43" name="UserComponentTypeName" dataType="System.String">CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus.2014, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea</property><property id="45" name="VSTAProjectName" dataType="System.String" description="Specifies the name of the Microsoft Visual Studio Tools for Applications project. Project names must be unique within a package." typeConverter="NOTBROWSABLE">ScriptComponent_2e714c6deb8346b79a3cd31154cf303a</property><property id="46" name="ScriptLanguage" dataType="System.String" description="Specifies the programming language used by the script." typeConverter="Microsoft.SqlServer.VSTAHosting.ScriptingLanguages, Microsoft.SqlServer.VSTAScriptingLib, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91">VisualBasic</property></properties><connections><connection id="48" name="CacheFile" connectionManagerID="{148509A5-21D5-47D4-BFC3-1F0BC2E8030C}" /></connections><inputs><input id="49" name="Input" hasSideEffects="true"></input></inputs><outputs><output id="51" name="Output" synchronousInputId="49"><outputColumns><outputColumn id="52" name="Accuracy" lineageId="52" dataType="i4" /><outputColumn id="53" name="Latitude" lineageId="53" dataType="r8" /><outputColumn id="54" name="Longitude" lineageId="54" dataType="r8" /></outputColumns><externalMetadataColumns /></output></outputs></component>