<component id="43" name="Dynamics CRM User Access" 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="47" 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[\scriptcomponent_58cf5d52e3a14f2bb34ab97759d91902.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_58cf5d52e3a14f2bb34ab97759d91902.vbproj</RootNamespace>
    <AssemblyName>ScriptComponent_58cf5d52e3a14f2bb34ab97759d91902.vbproj</AssemblyName>
    <StartupObject>
    </StartupObject>
    <OptionExplicit>On</OptionExplicit>
    <OptionCompare>Binary</OptionCompare>
    <OptionStrict>Off</OptionStrict>
    <OptionInfer>On</OptionInfer>
    <ProjectGuid>{499D5908-881D-458E-88AC-61A8E19DCD68}</ProjectGuid>
  </PropertyGroup>
  <!-- This section defines properties that are set when the "Debug" configuration is
       selected.

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

       DebugSymbols - If true, create symbols (.pdb). If false, do not create symbols.
       Optimize - If true, optimize the build output. If false, do not optimize.
       OutputPath - Output path of the project relative to the project file.
       EnableUnmanagedDebugging - If true, starting the debugger will attach both managed and unmanaged debuggers.
       DefineConstants - Constants defined for the preprocessor.
       Warning Level - Warning level for the compiler.
  -->
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DefineConstants>
    </DefineConstants>
    <DefineDebug>false</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <DebugSymbols>false</DebugSymbols>
    <Optimize>true</Optimize>
    <OutputPath>bin\</OutputPath>
    <RegisterForComInterop>false</RegisterForComInterop>
    <RemoveIntegerChecks>false</RemoveIntegerChecks>
    <NoWarn>42016,42017,42018,42019,42032</NoWarn>
  </PropertyGroup>
  <!-- This section enables pre- and post-build steps. However,
       it is recommended that MSBuild tasks be used instead of these properties.
  -->
  <PropertyGroup>
    <PreBuildEvent>
    </PreBuildEvent>
    <PostBuildEvent>
    </PostBuildEvent>
  </PropertyGroup>
  <!-- This sections specifies references for the project. -->
  <ItemGroup>
    <Reference Include="CozyRoc.Dynamics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL" />
    <Reference Include="CozyRoc.SSISPlus.2008, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea, processorArchitecture=MSIL" />
    <Reference Include="Microsoft.SqlServer.ManagedDTS, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL" />
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.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\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_58cf5d52e3a14f2bb34ab97759d91902.vbproj")> 
<Assembly: AssemblyDescription("")> 
<Assembly: AssemblyCompany("Microsoft")> 
<Assembly: AssemblyProduct("ScriptComponent_58cf5d52e3a14f2bb34ab97759d91902.vbproj")> 
<Assembly: AssemblyCopyright("Copyright @ Microsoft 2012")> 
<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("538b967b-95b8-47d1-b69e-26778deda0d7")> 

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

<Assembly: AssemblyVersion("1.0.0.0")> 
<Assembly: AssemblyFileVersion("1.0.0.0")> 
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\settings.settings]]></arrayElement><arrayElement dataType="System.String"><![CDATA[<?xml version='1.0' encoding='iso-8859-1'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)" GeneratedClassNamespace="" GeneratedClassName="MySettings">
  <Profiles>
    <Profile Name="(Default)" />
  </Profiles>
  <Settings />
</SettingsFile>]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\bufferwrapper.vb]]></arrayElement><arrayElement dataType="System.String"><![CDATA[' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!
' This is CozyRoc Script Component Plus Extended Script
' Microsoft SQL Server Integration Services buffer wrappers
' This module defines classes for accessing data flow buffers
' THIS IS AUTO-GENERATED CODE THAT WILL BE OVERWRITTEN! DO NOT EDIT!


Option Strict Off   ' This allows usage of PipelineBuffer typed accessors.

Imports System
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports CozyRoc.SqlServer.SSIS

<CLSCompliant(False)> _
Public Class InputBuffer
    Inherits ScriptBufferPlus

    Public Sub New(ByVal Component As ScriptComponent, ByVal ObjectID As Integer, ByVal IsInput As Boolean, ByVal Buffer As PipelineBuffer)
        MyBase.New(Component, ObjectID, IsInput, Buffer)
    End Sub

    Public Overrides ReadOnly Property StaticInputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public Overrides ReadOnly Property StaticOutputColumns() As String()
        Get
            Return New String() {}
        End Get
    End Property

    Public Overloads Function NextRow() As Boolean
        NextRow = MyBase.NextRow()
    End Function

    Public Overloads Function EndOfRowset() As Boolean
        EndOfRowset = MyBase.EndOfRowset
    End Function

End Class
]]></arrayElement><arrayElement dataType="System.String"><![CDATA[\my project\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\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

    Public ReadOnly Property CrmConnection() As IDTSConnectionManager100
        Get
            Return ParentComponent.ComponentMetaData.RuntimeConnectionCollection("CrmConnection").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[\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-2012 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.Web.Services.Protocols
Imports System.Collections
Imports System.Reflection

Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports CozyRoc.SqlServer.SSIS
Imports CozyRoc.SqlServer.SSIS.Attributes
Imports CRM2011 = CozyRoc.Dynamics.Crm2011.OrganizationService
Imports CRM4 = CozyRoc.Dynamics.Crm.Service
Imports CRM3 = CozyRoc.Dynamics.Crm3.Service


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<ValidateProperties("Validate")> _
<ColumnMappings()> _
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent


    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer)
        Try
            Dim targetEntity As String = Row.Buffer(m_teIndex).ToString().ToLower()
            Dim targetId As Guid = New Guid(Row.Buffer(m_tiIndex).ToString())
            Dim principalEntity As String = Row.Buffer(m_peIndex).ToString()
            Dim principalId As Guid = New Guid(Row.Buffer(m_piIndex).ToString())
            Dim ar As Integer = Convert.ToInt32(Row.Buffer(m_arIndex))

            If Not m_service2011 Is Nothing Then
                ' CRM 2011

                ' Setup Target.
                Dim target As New CRM2011.EntityReference
                target.LogicalName = targetEntity
                target.Id = targetId

                ' Setup Principal.
                Dim principal As New CRM2011.EntityReference
                principal.LogicalName = principalEntity.ToLower()
                principal.Id = principalId

                ' Revoke previous access first.
                Try
                    Dim raReq As New CRM2011.OrganizationRequest
                    raReq.RequestName = "RevokeAccess"
                    raReq("Target") = target
                    raReq("Revokee") = principal
                    Call m_service2011.Execute(raReq)
                Catch ex As Exception
                    ' Ignore the failure.
                End Try

                If ar <> 0 Then
                    ' Grant new access.
                    Dim gaReq As New CRM2011.OrganizationRequest
                    gaReq.RequestName = "GrantAccess"
                    gaReq("Target") = target

                    Dim pa As New CRM2011.PrincipalAccess
                    pa.Principal = principal
                    pa.AccessMask = CType(ar, CRM2011.AccessRights)
                    gaReq("PrincipalAccess") = pa

                    Call m_service2011.Execute(gaReq)
                End If
            ElseIf Not m_service4 Is Nothing Then
                ' CRM 4.0

                ' Setup Target.
                Dim target As New CRM4.TargetOwnedDynamic
                target.EntityName = targetEntity
                target.EntityId = targetId

                ' Setup Principal.
                Dim principal As New CRM4.SecurityPrincipal()
                principal.Type = CType( _
                    System.Enum.Parse(GetType(CRM4.SecurityPrincipalType), principalEntity),  _
                    CRM4.SecurityPrincipalType)
                principal.PrincipalId = principalId

                ' Revoke previous access first.
                Try
                    Dim raReq As New CRM4.RevokeAccessRequest
                    raReq.Target = target
                    raReq.Revokee = principal
                    Call m_service4.Execute(raReq)
                Catch ex As Exception
                    ' Ignore the failure.
                End Try

                If ar <> 0 Then
                    Dim gaReq As New CRM4.GrantAccessRequest
                    gaReq.Target = target

                    ' Grant new access.
                    Dim pa As New CRM4.PrincipalAccess
                    pa.Principal = principal
                    pa.AccessMask = CType(ar, CRM4.AccessRights)
                    gaReq.PrincipalAccess = pa

                    Call m_service4.Execute(gaReq)
                End If
            Else
                ' CRM 3.0

                ' Setup Target.
                Dim target As New CRM3.TargetOwnedDynamic
                target.EntityName = targetEntity
                target.EntityId = targetId

                ' Setup Principal.
                Dim principal As New CRM3.SecurityPrincipal()
                principal.Type = CType( _
                    System.Enum.Parse(GetType(CRM3.SecurityPrincipalType), principalEntity),  _
                    CRM3.SecurityPrincipalType)
                principal.PrincipalId = principalId

                ' Revoke previous access first.
                Try
                    Dim raReq As New CRM3.RevokeAccessRequest
                    raReq.Target = target
                    raReq.Revokee = principal
                    Call m_service3.Execute(raReq)
                Catch ex As Exception
                    ' Ignore the failure.
                End Try

                If ar <> 0 Then
                    Dim gaReq As New CRM3.GrantAccessRequest
                    gaReq.Target = target

                    ' Grant new access.
                    Dim pa As New CRM3.PrincipalAccess
                    pa.Principal = principal
                    pa.AccessMask = CType(ar, CRM3.AccessRights)
                    gaReq.PrincipalAccess = pa

                    Call m_service3.Execute(gaReq)
                End If
            End If
        Catch ex As SoapException
            Call FireError_(ex.Detail.InnerXml)
        Catch ex As Exception
            Call FireError_(ex.Message)
        End Try
    End Sub ' Input_ProcessInputRow


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

        ' Setup CRM service.
        m_connection = CType( _
            Me.Connections.CrmConnection.AcquireConnection(Nothing), _
            ICrmConnection)
        Call m_connection.Connect()

        Dim service As Object = m_connection.GetService(0)   ' 0 - CRM Service
        m_service2011 = TryCast(service, CRM2011.OrganizationServiceClient)
        If m_service2011 Is Nothing Then
            m_service4 = TryCast(service, CRM4.CrmService)
            If m_service4 Is Nothing Then
                m_service3 = TryCast(service, CRM3.CrmService)
                If m_service3 Is Nothing Then
                    Throw New Exception("Unhandled service object.")
                End If
            End If
        End If

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

        For Each inputCol As IDTSInputColumn100 In input.InputColumnCollection
            Dim extCol As IDTSExternalMetadataColumn100 = input.ExternalMetadataColumnCollection.GetObjectByID( _
                inputCol.ExternalMetadataColumnID)
            Dim index As Integer = Me.HostComponent.BufferManager.FindColumnByLineageID( _
                input.Buffer, _
                inputCol.LineageID)

            Select Case extCol.Name
                Case "TargetEntity"
                    m_teIndex = index
                Case "TargetId"
                    m_tiIndex = index
                Case "PrincipalEntity"
                    m_peIndex = index
                Case "PrincipalId"
                    m_piIndex = index
                Case "AccessRights"
                    m_arIndex = index
                Case Else
                    Throw New Exception("Unhandled column.")
            End Select
        Next
    End Sub ' PreExecute


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

        Call m_connection.Close()
        m_teIndex = -1
        m_tiIndex = -1
        m_peIndex = -1
        m_piIndex = -1
        m_arIndex = -1
    End Sub ' PostExecute


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

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

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

            ' Store connection information in the runtime connection collection, too.
            ' Cannot directly use RuntimeConnectionCollection in the property get/set
            ' because of issues with multi-threading.
            Me.ComponentMetaData.RuntimeConnectionCollection("CrmConnection").ConnectionManagerID = Me.CrmConnection

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

        Validate = result
    End Function    'Validate


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

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

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

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

        Dim column As IDTSExternalMetadataColumn100

        ' Setup target entity column.
        column = input.ExternalMetadataColumnCollection.[New]()
        column.Name = "TargetEntity"
        column.DataType = DataType.DT_WSTR
        column.Length = 50

        ' Setup target id column.
        column = input.ExternalMetadataColumnCollection.[New]()
        column.Name = "TargetId"
        column.DataType = DataType.DT_GUID

        ' Setup principal entity column.
        column = input.ExternalMetadataColumnCollection.[New]()
        column.Name = "PrincipalEntity"
        column.DataType = DataType.DT_WSTR
        column.Length = 50

        ' Setup principal id column.
        column = input.ExternalMetadataColumnCollection.[New]()
        column.Name = "PrincipalId"
        column.DataType = DataType.DT_GUID

        ' Setup access rights column.
        column = input.ExternalMetadataColumnCollection.[New]()
        column.Name = "AccessRights"
        column.DataType = DataType.DT_I4
    End Sub ' ReinitializeMetaData


#Region "Properties"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Description("Select Dynamics CRM Connection Manager.")> _
    <Connection("CrmConnectionType")> _
    Public Property CrmConnection() As String
        Get
            CrmConnection = m_crmConnection
        End Get
        Set(ByVal value As String)
            m_crmConnection = value
        End Set
    End Property    ' CrmConnection
#End Region ' Properties


#Region "Internals"
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private ReadOnly Property CrmConnectionType() As String()
        Get
            CrmConnectionType = New String() {"DYNAMICS-CRM"}
        End Get
    End Property    ' CrmConnectionType


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


#Region "Attributes"
    Private m_crmConnection As String

    Private m_connection As ICrmConnection
    Private m_service2011 As CRM2011.OrganizationServiceClient
    Private m_service4 As CRM4.CrmService
    Private m_service3 As CRM3.CrmService
    Private m_teIndex As Integer
    Private m_tiIndex As Integer
    Private m_peIndex As Integer
    Private m_piIndex As Integer
    Private m_arIndex As Integer
#End Region ' Attributes
End Class   ' ScriptMain
]]></arrayElement></arrayElements></property>
<property id="48" 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_58cf5d52e3a14f2bb34ab97759d91902.vbproj.dll]]></arrayElement><arrayElement dataType="System.String"><![CDATA[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
KBEAAAoojQAACn4WAAAELRxzLAAABoAWAAAE3hB+FwAABCgRAAAKKI4AAArcfhYAAAQqAAEMAAAC
AB0ADCkAEAAAAAFCU0pCAQABAAAAAAAMAAAAdjIuMC41MDcyNwAAAAAFAGwAAAAgDgAAI34AAIwO
AAAsEwAAI1N0cmluZ3MAAAAAuCEAAGwCAAAjVVMAJCQAABAAAAAjR1VJRAAAADQkAACgBQAAI0Js
b2IAAAAAAAAAAgAAAVcVogkJDwAAAPoBMwAWAAABAAAAZAAAAA0AAAAXAAAALQAAABIAAACZAAAA
PQAAABoAAAAHAAAADQAAAA8AAAAJAAAAAQAAAAsAAAABAAAAAgAAAAMAAAACAAAAAADwEgEAAAAA
AAoAqQF/AQoA3QG/AQYA7QHmAQoARQJ/AQYAwwLmAQoARQMbAw4AlwOAAxIA5gPFAxYAFwTFAw4A
sgSAAxoAYwU7BQ4ALQaAAx4AhwZaBh4AzAavBh4AzAbiBgYAYAdPBwYAjQd4ByIA9AffByIAQQgr
CCIAWggrCCIAhwhvCAYAsQieCAoA8AjJCAoACAkTACIAPQkgCQYAcglSCQYAkAnmAQYAtAnmAQoA
zQkTAAYAEQryCQYAJQrmARIALArFAwYAOQrmASYAnApzCiYAywpzCiYA9gpzCiYAEwtzCiYAVgtz
CgYAhQvmAR4AigtaBh4AmgtaBgYArgvmAR4AuAtaBh4AyAuvBh4A2guvBh4A7QuvBh4AAQyvBh4A
uAuvBh4AyAviBh4A2gviBh4A7QviBh4AAQziBh4AuAviBioARgwoDAYAZwzmAR4ApwxaBgoAxAzJ
CB4AAA1aBh4AOA2vBgYATg3mAQoAWQ3JCB4AiA2vBh4Aqw2vBh4AtA2vBh4AAA2vBh4AOA3iBh4A
iA3iBh4Aqw3iBh4AtA3iBh4AAA3iBi4A2w3QDSYABw5zCiYAJQ5zCgYASw44DgYAfA7mASYAgg5z
CiYA0w5zChYASw/FAyYAbw9zCgoAww/JCAYA5A/mARoAXxA7BRIAkBDFAw4A2RC3EA4A8RC3EA4A
DRG3ECIAIRErCAYASBE2EQYAbxFeEQYAghGeCAYA6xFSCQYACxJSCQYAKRI2EQYARhLyCQYAVBI2
EQYAbxI2EQYAihI2EQYAoxI2EQYAvBI2EQYA2RI2EQAAAAABAAAAAAABAAEAAAAAACkANwAFAAEA
AQAAAAAAcgA3AAkAAQACAAABEAB9ADcADQABAAMABQEAAIcAAAANAAUACAAFAQAAlQAAAA0ABQAP
AAEAAACwALwAHQAGABEAAQAAAPQAvAApAAYAFgABAAAAAgG8AA0ACAAaAAEAAAAOAbwADQAJABwA
AQAAABgBvAAgAAoAHQAAAAAAIwEvAQ0AFAAnAAABEAB0AbwASQAWACsAMQAIAiAAMQAxAi0AMQBT
AjoAMQB4AkcAIQBUA5AABgACAccABgAOAcsAAQAIBdwAAQAIBdwAAQAdBvsAAQA8Bv4AAQChBgIB
AQDXBgYBAQAABwoBAQALBw4BAQAVBw4BAQAfBw4BAQApBw4BAQAzBw4BEQBwBxUBEQCZBxkBEQAM
CDcBEQAUCDsBCCEAAAAABhi5ARMAAQAQIQAAAAAGGLkBEwABABghAAAAABEY9AEXAAEARCEAAAAA
Ewj7ARsAAQBcIQAAAAATCCECKAABAHQhAAAAABMISgI1AAEAjCEAAAAAEwhoAkIAAQCkIQAAAABG
Aq4CYwABAMAhAAAAAEYCtwJoAAIA1CEAAAAAgwDIAmwAAgDsIQAAAABGAtACcQACAAAiAAAAABEA
2QJ4AAIAHCIAAAAAAQD3AoAAAwA4IgAAAAAGGLkBEwAEAEAiAAAAAAMICwOLAAQAdCIAAAAABhi5
ARMABACIIgAAAAAGGLkBrwAEAJgiAAAAAEYKSAS5AAgArCIAAAAARgpfBLkACADAIgAAAACGAHcE
vgAIANgiAAAAAIYAfwS+AAgA8CIAAAAABhi5ARMACAAQIwAAAABGAsYEzwAIAEAjAAAAAEYD2wTW
AAoAVCMAAAAARgPuBNYACwBYIwAAAAAGGLkB4AAMAGgjAAAAAAYIfAXmAA0AlCMAAAAABhi5AeAA
DQCkIwAAAAAGGLkBEwAOAKwjAAAAAEYC7gTWAA4AfCcAAAAARgKcBRMADwA8KQAAAABGAqcFEwAP
AHQpAAAAAAYAswXwAA8AICoAAAAARgLHBRMAEAA8KwAAAAAGCHwFcQAQAFQrAAAAAAYI3AX2ABAA
YCsAAAAAAQj0BbkAEQCAKwAAAAABAAoG9gARAKwrAAAAAAMYuQETABIAtCsAAAAAFgilBx0BEgDw
KwAAAAAWCLkHIgESAAQsAAAAABYIxQcnARIADCwAAAAAERj0ARcAEwAgLAAAAAAGGLkBEwATACgs
AAAAABYIIQg+ARMAAAABALUCAAABAO4CAAABAO4CAAABACYEAAACADAEAAADADkEAAAEAEEEAAAB
ANMEAAACAEEEAAABAEEEAAABAAQFAAABACYEAAABACYEAAABAAQFAAABALwFAAABAO4FAAABABUG
AAABANEHCQC5ARMAmQC5AUgBqQC5AVcBEQC5ARMAsQC5ARMAJAC5ARMALAC5ARMANAC5ARMAPAC5
ARMAJAALA4sALAALA4sANAALA4sAPAALA4sAuQC5ARMAwQC5ARMAyQC5AfYA0QCBCfABGQCuAmMA
GQC3AmgAKQCiCf0BGQDQAnEA4QC+CQ0CGQC5ARMA6QC5AR0CRABUA5AATAAhCIsATADoCZoCTAC5
ARMA8QC5AacCOQC5Aa8AAQF3BL4AAQF/BL4ACQG5AacCUQC5ARMAQQC1CrcCEQHiCr0CGQEDC8MC
IQEMC2gAEQE2C8oCKQEDC9ACMQFvC+YAOQBUDNwCSQADC+EC+QBfDHEAOQG5AfYAuQFvDOYCQQG5
ARMAQQF3DPYAQQGHDOsCSQG5ARMASQGODPYASQGeDPICaQC8DPgCyQHQDAEDyQHgDBcAWQG5ARMA
WQHyDAgDWQENDQ8DaQG5ARMAaQEcDfYAaQErDesCYQG5ARMA4QFTDRYD6QFlDeYCYQFvDR0DYQF4
DesCcQG5ARMAcQGUDSQDcQGfDSsDcQC8DDIDeQG5ARMAeQGUDSQDgQG5ARMAgQHyDCsDgQENDTsD
eQG8DUIDkQG5ARMAkQEcDfYAkQErDesCiQG5ARMAiQFvDUkDiQF4DesCmQG5ARMAmQGUDVADmQGf
DVcDeQC8DF4DoQG5ARMAoQGUDVADqQG5ARMAqQHyDFcDqQENDWcDoQG8DW4DsQHjDXUDOQLuDXEA
UQH7DXEAQQCcBRMAWQBXDsMDYQBpDhMAYQBxDuECUQG5AfYAIQGfDsgDYQK5Ds4DUQLHDtQDIQH7
DtgDSQIgD2gAaQI9D94DUQBdD+UDcQKED+sDIQFUDGgASQKWD2gAeQKkD/EDQQK6D3EAgQLND/cD
UQLbD74AiQLwDxMAQQCnBRMAYQD4DxMA+QD+DxAEIQEMEL4AYQIbEGgAMQElEPYAUQDHBRMAGQEb
EGgAaQI9EKcCYQJIEBMAaQJIEBMAaQJSECAEQQJWEPYAQQJoECYEQQJ1EC0E+QCAEPsAEQGGEEIE
mQK5ARMAoQK5ARMAqQK5AfYAsQK5AfYAuQK5AfYAKQBREZ8EgQC5AaUEkQC5ARMAyQJ3EcIEyQJ9
EcIE0QK5ARMA2QK5AS0E4QK5ARMA6QK5AfYA8QK5AfYA+QK5AfYAAQO5AfYACQO5AfYAEQO5AfYA
GQO5AfYAIQO5AfYAKQCDAKoBLgC7BI4FLgCzBFEFLgCLBNUELgCTBPQELgCrBDEFLgDLBFEFLgCD
BMwELgDDBKwCLgCbBAEFLgDrAKwCLgALASsFLgCjBKwCQAArAHUBQAATAE4BQwATAE4BQwAbAF0B
SQCDANwBYwATAE4BYwAbAF0BaQCDALsBgAArAHUBgwBzAHUBgwB7AHUBgwAbAF0BiQCDAMgBoAAr
AHUBowDDACUCowATAE4BwAArAHUBwwDrAKwCwwATAE4B4AArAHUB4wALAawCAAErAHUBAAETAE4B
AwELAawCIAETAE4BIAErAHUBKQFDBFsEKQFLBHIEQAETAE4BQAErAHUBYAETAE4BYAErAHUBYwEr
BHUBYwE7BE0EYwELAawCYwEzBHUBaQETALkEgAErAHUBiQETALkEoAErAHUBqQF7BHUBwAETAE4B
wAErAHUB4AErAHUBAAIrAHUBAAITAE4BQAMLAawCgAMLAawClgGbAaABpQH1AfkBBAIJAhgCGAKg
ArICsgL1AfUB1wJ7A/4DFQQyBAkCOwT1Aa0EtATHBAQAAQAGAAUABwAGAAkACAALAAkADAALAA0A
DQAAAN0BTwAAAJYCVAAAAEUCWQAAAKICXgAAAF4DmAAAAIsEwgAAAJ4EwgAAAI4F6wAAAI4FEQEA
AD0HwgAAAGAHLQEAANcHMgEAANEHQwECAAQAAwACAAUABQACAAYABwACAAcACQACAA8ACwACABIA
DQACABMADwACABsAEQACACMAEwABACQAEwACACUAFQACACgAFwACACkAGQABACoAGQACAC0AGwB1
AHUAiAB6AYEBiAGPAYcCjgIEgAAAAQAAAAAAAAAAAAAAAAC8AAAAAgAAAAAAAAAAAAAAAQAKAAAA
AAAIAAAAAAAAAAAAAAAKABMAAAAAAAEAAAAAAAAAAAAAAJ0AagMAAAAACgAAAAAAAAAAAAAApgCo
AwAAAAAKAAAAAAAAAAAAAACmAPYDAAAAAAoAAAAAAAAAAAAAAKYAGAUAAAAAAQAAAAAAAAAAAAAA
nQBJBgAAAAACAAAAAAAAAAAAAAABAOYBAAAAAAoAAAAAAAAAAAAAAKYATwoAAAAAAgAAAAAAAAAA
AAAACgAUDAAAAAACAAAAAAAAAAAAAAABANANAAAAAAAAAAABAAAAnxEAAAUABAAGAAQAAAAQAAwA
7AIAABAAGQDsAgAAAAAbAOwCLQATAi0AlQIAAAAAADxNb2R1bGU+AG1zY29ybGliAE1pY3Jvc29m
dC5WaXN1YWxCYXNpYwBNeUFwcGxpY2F0aW9uAFNjcmlwdENvbXBvbmVudF81OGNmNWQ1MmUzYTE0
ZjJiYjM0YWI5Nzc1OWQ5MTkwMi52YnByb2ouTXkATXlDb21wdXRlcgBNeVByb2plY3QATXlXZWJT
ZXJ2aWNlcwBUaHJlYWRTYWZlT2JqZWN0UHJvdmlkZXJgMQBJbnB1dEJ1ZmZlcgBTY3JpcHRDb21w
b25lbnRfNThjZjVkNTJlM2ExNGYyYmIzNGFiOTc3NTlkOTE5MDIudmJwcm9qAFVzZXJDb21wb25l
bnQAQ29ubmVjdGlvbnMAVmFyaWFibGVzAFNjcmlwdE1haW4ATXlSZXNvdXJjZXMAU2NyaXB0Q29t
cG9uZW50XzU4Y2Y1ZDUyZTNhMTRmMmJiMzRhYjk3NzU5ZDkxOTAyLnZicHJvai5NeS5SZXNvdXJj
ZXMATXlTZXR0aW5ncwBNaWNyb3NvZnQuVmlzdWFsQmFzaWMuQXBwbGljYXRpb25TZXJ2aWNlcwBB
cHBsaWNhdGlvbkJhc2UALmN0b3IATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkRldmljZXMAQ29tcHV0
ZXIAU3lzdGVtAE9iamVjdAAuY2N0b3IAZ2V0X0NvbXB1dGVyAG1fQ29tcHV0ZXJPYmplY3RQcm92
aWRlcgBnZXRfQXBwbGljYXRpb24AbV9BcHBPYmplY3RQcm92aWRlcgBVc2VyAGdldF9Vc2VyAG1f
VXNlck9iamVjdFByb3ZpZGVyAGdldF9XZWJTZXJ2aWNlcwBtX015V2ViU2VydmljZXNPYmplY3RQ
cm92aWRlcgBBcHBsaWNhdGlvbgBXZWJTZXJ2aWNlcwBFcXVhbHMAbwBHZXRIYXNoQ29kZQBUeXBl
AEdldFR5cGUAVG9TdHJpbmcAQ3JlYXRlX19JbnN0YW5jZV9fAFQAaW5zdGFuY2UARGlzcG9zZV9f
SW5zdGFuY2VfXwBnZXRfR2V0SW5zdGFuY2UATWljcm9zb2Z0LlZpc3VhbEJhc2ljLk15U2Vydmlj
ZXMuSW50ZXJuYWwAQ29udGV4dFZhbHVlYDEAbV9Db250ZXh0AEdldEluc3RhbmNlAENvenlSb2Mu
U1NJU1BsdXMuMjAwOABDb3p5Um9jLlNxbFNlcnZlci5TU0lTAFNjcmlwdEJ1ZmZlclBsdXMATWlj
cm9zb2Z0LlNxbFNlcnZlci5UeFNjcmlwdABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5QaXBlbGlu
ZQBTY3JpcHRDb21wb25lbnQATWljcm9zb2Z0LlNxbFNlcnZlci5QaXBlbGluZUhvc3QAUGlwZWxp
bmVCdWZmZXIAQ29tcG9uZW50AE9iamVjdElEAElzSW5wdXQAQnVmZmVyAGdldF9TdGF0aWNJbnB1
dENvbHVtbnMAZ2V0X1N0YXRpY091dHB1dENvbHVtbnMATmV4dFJvdwBFbmRPZlJvd3NldABTdGF0
aWNJbnB1dENvbHVtbnMAU3RhdGljT3V0cHV0Q29sdW1ucwBTY3JpcHRDb21wb25lbnRQbHVzAFBy
b2Nlc3NJbnB1dABJbnB1dElEAElucHV0X1Byb2Nlc3NJbnB1dABJbnB1dF9Qcm9jZXNzSW5wdXRS
b3cAUm93AFBhcmVudENvbXBvbmVudABNaWNyb3NvZnQuU3FsU2VydmVyLkRUU1J1bnRpbWVXcmFw
AE1pY3Jvc29mdC5TcWxTZXJ2ZXIuRHRzLlJ1bnRpbWUuV3JhcHBlcgBJRFRTQ29ubmVjdGlvbk1h
bmFnZXIxMDAAZ2V0X0NybUNvbm5lY3Rpb24AQ3JtQ29ubmVjdGlvbgBQcmVFeGVjdXRlAFBvc3RF
eGVjdXRlAFZhbGlkYXRlAGVyck1lc3NhZ2UAUmVpbml0aWFsaXplTWV0YURhdGEAc2V0X0NybUNv
bm5lY3Rpb24AdmFsdWUAZ2V0X0NybUNvbm5lY3Rpb25UeXBlAEZpcmVFcnJvcl8AbWVzc2FnZQBt
X2NybUNvbm5lY3Rpb24ASUNybUNvbm5lY3Rpb24AbV9jb25uZWN0aW9uAENvenlSb2MuRHluYW1p
Y3MAQ296eVJvYy5EeW5hbWljcy5Dcm0yMDExLk9yZ2FuaXphdGlvblNlcnZpY2UAT3JnYW5pemF0
aW9uU2VydmljZUNsaWVudABtX3NlcnZpY2UyMDExAENvenlSb2MuRHluYW1pY3MuQ3JtLlNlcnZp
Y2UAQ3JtU2VydmljZQBtX3NlcnZpY2U0AENvenlSb2MuRHluYW1pY3MuQ3JtMy5TZXJ2aWNlAG1f
c2VydmljZTMAbV90ZUluZGV4AG1fdGlJbmRleABtX3BlSW5kZXgAbV9waUluZGV4AG1fYXJJbmRl
eABDcm1Db25uZWN0aW9uVHlwZQBTeXN0ZW0uUmVzb3VyY2VzAFJlc291cmNlTWFuYWdlcgBfcmVz
TWdyAFN5c3RlbS5HbG9iYWxpemF0aW9uAEN1bHR1cmVJbmZvAF9yZXNDdWx0dXJlAGdldF9SZXNv
dXJjZU1hbmFnZXIAZ2V0X0N1bHR1cmUAc2V0X0N1bHR1cmUAVmFsdWUAQ3VsdHVyZQBTeXN0ZW0u
Q29uZmlndXJhdGlvbgBBcHBsaWNhdGlvblNldHRpbmdzQmFzZQBtX1ZhbHVlAG1fU3luY09iamVj
dABnZXRfVmFsdWUAU3lzdGVtLkNvbXBvbmVudE1vZGVsAEVkaXRvckJyb3dzYWJsZUF0dHJpYnV0
ZQBFZGl0b3JCcm93c2FibGVTdGF0ZQBTeXN0ZW0uQ29kZURvbS5Db21waWxlcgBHZW5lcmF0ZWRD
b2RlQXR0cmlidXRlAFN5c3RlbS5EaWFnbm9zdGljcwBEZWJ1Z2dlckhpZGRlbkF0dHJpYnV0ZQBN
aWNyb3NvZnQuVmlzdWFsQmFzaWMuQ29tcGlsZXJTZXJ2aWNlcwBTdGFuZGFyZE1vZHVsZUF0dHJp
YnV0ZQBIaWRlTW9kdWxlTmFtZUF0dHJpYnV0ZQBTeXN0ZW0uQ29tcG9uZW50TW9kZWwuRGVzaWdu
AEhlbHBLZXl3b3JkQXR0cmlidXRlAFN5c3RlbS5SdW50aW1lLkNvbXBpbGVyU2VydmljZXMAUnVu
dGltZUhlbHBlcnMAR2V0T2JqZWN0VmFsdWUAUnVudGltZVR5cGVIYW5kbGUAR2V0VHlwZUZyb21I
YW5kbGUAQWN0aXZhdG9yAENyZWF0ZUluc3RhbmNlAE15R3JvdXBDb2xsZWN0aW9uQXR0cmlidXRl
AHNldF9WYWx1ZQBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMAQ29tVmlzaWJsZUF0dHJp
YnV0ZQBTdHJpbmcAU2NyaXB0QnVmZmVyAENMU0NvbXBsaWFudEF0dHJpYnV0ZQBNaWNyb3NvZnQu
U3FsU2VydmVyLkRUU1BpcGVsaW5lV3JhcABNaWNyb3NvZnQuU3FsU2VydmVyLkR0cy5QaXBlbGlu
ZS5XcmFwcGVyAElEVFNDb21wb25lbnRNZXRhRGF0YTEwMABnZXRfQ29tcG9uZW50TWV0YURhdGEA
SURUU0lucHV0Q29sbGVjdGlvbjEwMABnZXRfSW5wdXRDb2xsZWN0aW9uAElEVFNJbnB1dDEwMABn
ZXRfSXRlbQBnZXRfSUQASURUU1J1bnRpbWVDb25uZWN0aW9uQ29sbGVjdGlvbjEwMABnZXRfUnVu
dGltZUNvbm5lY3Rpb25Db2xsZWN0aW9uAElEVFNSdW50aW1lQ29ubmVjdGlvbjEwMABnZXRfQ29u
bmVjdGlvbk1hbmFnZXIAR3VpZABFbnRpdHlSZWZlcmVuY2UAT3JnYW5pemF0aW9uUmVxdWVzdABF
eGNlcHRpb24AUHJpbmNpcGFsQWNjZXNzAFNlY3VyaXR5UHJpbmNpcGFsAFRhcmdldE93bmVkRHlu
YW1pYwBSZXZva2VBY2Nlc3NSZXF1ZXN0AEdyYW50QWNjZXNzUmVxdWVzdABTeXN0ZW0uV2ViLlNl
cnZpY2VzAFN5c3RlbS5XZWIuU2VydmljZXMuUHJvdG9jb2xzAFNvYXBFeGNlcHRpb24AZ2V0X0J1
ZmZlcgBUb0xvd2VyAENvbnZlcnQAVG9JbnQzMgBzZXRfTG9naWNhbE5hbWUAc2V0X0lkAHNldF9S
ZXF1ZXN0TmFtZQBzZXRfSXRlbQBPcmdhbml6YXRpb25SZXNwb25zZQBFeGVjdXRlAFByb2plY3RE
YXRhAFNldFByb2plY3RFcnJvcgBDbGVhclByb2plY3RFcnJvcgBzZXRfUHJpbmNpcGFsAEFjY2Vz
c1JpZ2h0cwBzZXRfQWNjZXNzTWFzawBzZXRfRW50aXR5TmFtZQBzZXRfRW50aXR5SWQAU2VjdXJp
dHlQcmluY2lwYWxUeXBlAEVudW0AUGFyc2UAQ29udmVyc2lvbnMAVG9JbnRlZ2VyAHNldF9UeXBl
AHNldF9QcmluY2lwYWxJZABUYXJnZXRPd25lZABzZXRfVGFyZ2V0AHNldF9SZXZva2VlAFJlc3Bv
bnNlAFJlcXVlc3QAc2V0X1ByaW5jaXBhbEFjY2VzcwBTeXN0ZW0uWG1sAFhtbE5vZGUAZ2V0X0Rl
dGFpbABnZXRfSW5uZXJYbWwAZ2V0X01lc3NhZ2UASURUU0V4dGVybmFsTWV0YWRhdGFDb2x1bW4x
MDAASURUU0lucHV0Q29sdW1uMTAwAFN5c3RlbS5Db2xsZWN0aW9ucwBJRW51bWVyYXRvcgBBY3F1
aXJlQ29ubmVjdGlvbgBDb25uZWN0AEdldFNlcnZpY2UASW50MzIASURUU0lucHV0Q29sdW1uQ29s
bGVjdGlvbjEwMABnZXRfSW5wdXRDb2x1bW5Db2xsZWN0aW9uAEdldEVudW1lcmF0b3IAZ2V0X0N1
cnJlbnQASURUU0V4dGVybmFsTWV0YWRhdGFDb2x1bW5Db2xsZWN0aW9uMTAwAGdldF9FeHRlcm5h
bE1ldGFkYXRhQ29sdW1uQ29sbGVjdGlvbgBnZXRfRXh0ZXJuYWxNZXRhZGF0YUNvbHVtbklEAEdl
dE9iamVjdEJ5SUQAUGlwZWxpbmVDb21wb25lbnQAZ2V0X0hvc3RDb21wb25lbnQASURUU0J1ZmZl
ck1hbmFnZXIxMDAAZ2V0X0J1ZmZlck1hbmFnZXIAZ2V0X0xpbmVhZ2VJRABGaW5kQ29sdW1uQnlM
aW5lYWdlSUQAZ2V0X05hbWUAT3BlcmF0b3JzAENvbXBhcmVTdHJpbmcATW92ZU5leHQASURpc3Bv
c2FibGUARGlzcG9zZQBDbG9zZQBJc051bGxPckVtcHR5AGdldF9Jc0F0dGFjaGVkAGdldF9Db3Vu
dABzZXRfQ29ubmVjdGlvbk1hbmFnZXJJRABzZXRfSXNVc2VkAFJlbW92ZUFsbABOZXcAc2V0X05h
bWUARGF0YVR5cGUAc2V0X0RhdGFUeXBlAHNldF9MZW5ndGgARW1wdHkARmlyZUVycm9yAFNTSVNT
Y3JpcHRDb21wb25lbnRFbnRyeVBvaW50QXR0cmlidXRlAENvenlSb2MuU3FsU2VydmVyLlNTSVMu
QXR0cmlidXRlcwBDb2x1bW5NYXBwaW5nc0F0dHJpYnV0ZQBWYWxpZGF0ZVByb3BlcnRpZXNBdHRy
aWJ1dGUAQ29ubmVjdGlvbkF0dHJpYnV0ZQBEZXNjcmlwdGlvbkF0dHJpYnV0ZQBTeXN0ZW0uUmVm
bGVjdGlvbgBBc3NlbWJseQBnZXRfQXNzZW1ibHkAU3lzdGVtLlRocmVhZGluZwBNb25pdG9yAEVu
dGVyAEV4aXQARGVidWdnZXJOb25Vc2VyQ29kZUF0dHJpYnV0ZQBTY3JpcHRDb21wb25lbnRfNThj
ZjVkNTJlM2ExNGYyYmIzNGFiOTc3NTlkOTE5MDIudmJwcm9qLlJlc291cmNlcy5yZXNvdXJjZXMA
Q29tcGlsYXRpb25SZWxheGF0aW9uc0F0dHJpYnV0ZQBSdW50aW1lQ29tcGF0aWJpbGl0eUF0dHJp
YnV0ZQBBc3NlbWJseUZpbGVWZXJzaW9uQXR0cmlidXRlAEd1aWRBdHRyaWJ1dGUAQXNzZW1ibHlU
cmFkZW1hcmtBdHRyaWJ1dGUAQXNzZW1ibHlDb3B5cmlnaHRBdHRyaWJ1dGUAQXNzZW1ibHlQcm9k
dWN0QXR0cmlidXRlAEFzc2VtYmx5Q29tcGFueUF0dHJpYnV0ZQBBc3NlbWJseURlc2NyaXB0aW9u
QXR0cmlidXRlAEFzc2VtYmx5VGl0bGVBdHRyaWJ1dGUAU2NyaXB0Q29tcG9uZW50XzU4Y2Y1ZDUy
ZTNhMTRmMmJiMzRhYjk3NzU5ZDkxOTAyLnZicHJvai5kbGwAAAtJAG4AcAB1AHQAABtDAHIAbQBD
AG8AbgBuAGUAYwB0AGkAbwBuAAAZUgBlAHYAbwBrAGUAQQBjAGMAZQBzAHMAAA1UAGEAcgBnAGUA
dAAAD1IAZQB2AG8AawBlAGUAABdHAHIAYQBuAHQAQQBjAGMAZQBzAHMAAB9QAHIAaQBuAGMAaQBw
AGEAbABBAGMAYwBlAHMAcwAAM1UAbgBoAGEAbgBkAGwAZQBkACAAcwBlAHIAdgBpAGMAZQAgAG8A
YgBqAGUAYwB0AC4AABlUAGEAcgBnAGUAdABFAG4AdABpAHQAeQAAEVQAYQByAGcAZQB0AEkAZAAA
H1AAcgBpAG4AYwBpAHAAYQBsAEUAbgB0AGkAdAB5AAAXUAByAGkAbgBjAGkAcABhAGwASQBkAAAZ
QQBjAGMAZQBzAHMAUgBpAGcAaAB0AHMAACNVAG4AaABhAG4AZABsAGUAZAAgAGMAbwBsAHUAbQBu
AC4AAD9TAGUAbABlAGMAdAAgAEQAeQBuAGEAbQBpAGMAcwAgAEMAUgBNACAAQwBvAG4AbgBlAGMA
dABpAG8AbgAuAAAlTQBhAHAAIABpAG4AcAB1AHQAIABjAG8AbAB1AG0AbgBzAC4AABVOAG8AIABp
AG4AcAB1AHQAcwAuAAAZRABZAE4AQQBNAEkAQwBTAC0AQwBSAE0AATNEAHkAbgBhAG0AaQBjAHMA
IABDAFIATQAgAEcAcgBhAG4AdAAgAEEAYwBjAGUAcwBzAAAxTQB5AC4AUgBlAHMAbwB1AHIAYwBl
AHMALgBNAHkAUgBlAHMAbwB1AHIAYwBlAHMAAACHHB06F/xbRZZBt/5aUn39AAi3elxWGTTgiQiw
P19/EdUKOgMgAAEDAAABBAAAEgwHBhUSGAESDAQAABIIBwYVEhgBEggEAAASEQcGFRIYARIRBAAA
EhQHBhUSGAESFAQIABIMBAgAEggECAASEQQIABIUBCABAhwDIAAIBCAAEhUDIAAOAh4ABxABAR4A
HgAHMAEBARAeAAITAAQgABMABwYVEhkBEwAEKAATAAgWz0kLuAw06giJhF3NgIDMkQkgBAESIQgC
EiUEIAAdDgMgAAIEKAAdDgMGEiQDBhIoBiACAQgSJQUgAQESHAMGEiEFIAEBEiEEIAASLQQoABIt
BSABAhAOBCABAQ4CBg4DBhIxAwYSNQMGEjkDBhI9AgYIAygADgMGEkEDBhJFBAAAEkEEAAASRQUA
AQESRQQIABJBBAgAEkUDBhI0AgYcBAAAEjQECAASNAUgAQERUQgBAAEAAAAAAAUgAgEODhcBAApN
eVRlbXBsYXRlBzguMC4wLjAAAAQBAAAABhUSGAESDAYVEhgBEggGFRIYARIRBhUSGAESFAQHARIM
BAcBEggEBwESEQQHARIUEAEAC015LkNvbXB1dGVyAAAMAQAHTXkuVXNlcgAAEwEADk15LldlYlNl
cnZpY2VzAAATAQAOTXkuQXBwbGljYXRpb24AAAQAARwcAwcBAgMHAQgGAAESFRFtBAcBEhUDBwEO
BRABAB4ABAoBHgAEBwEeAAcgBAEODg4OYQEANFN5c3RlbS5XZWIuU2VydmljZXMuUHJvdG9jb2xz
LlNvYXBIdHRwQ2xpZW50UHJvdG9jb2wSQ3JlYXRlX19JbnN0YW5jZV9fE0Rpc3Bvc2VfX0luc3Rh
bmNlX18AAAAGFRIYARMABhUSGQETAAQKARMABSABARMABgcCEwATAAQgAQECBQEAAAAABAcBHQ4F
IAASgIkFIAASgI0GIAESgJEcBSAAEoCVBiABEoCZHAQHARItBCAAEiUEIAEcCAQAAQgcBiABARGA
nQUgAgEOHAggARKA4RKApQYAAQESgKkGIAEBEoChBiABARGA6QYAAhwSFQ4GIAEBEYDtBiABARKA
+QYgAQESgLEIIAESgP0SgQEGIAEBEYEFBiABARKAwQYgAQERgQkGIAEBEoENBiABARKAxQggARKB
ERKBFQYgAQERgRkGIAEBEoDVBSAAEoEdRwcZCA4RgJ0OEYCdEoChEoChEoClEoCpEoClEoCtEoCx
EoC1EoC5EoCpEoC9EoDBEoDFEoDJEoDNEoCpEoDREoDVEoDZEoCpBCABHBwFIAASgTEFIAASgSkD
IAAcBSAAEoE1BiABEoEhCAUgABKBOQUgABKBPQUgAggICAYAAwgODgIRBwcSgJEcEoEhCBKBJRKB
KQ4EAAECDgoHBAICEoCREoCpBSAAEoEhBiABARGBSQQgAQEICAcCEoEhEoCRBgcCHQ4dDgogBgEI
Dg4OCBACDQEACFZhbGlkYXRlAAAWAQARQ3JtQ29ubmVjdGlvblR5cGUAACwBACdTZWxlY3QgRHlu
YW1pY3MgQ1JNIENvbm5lY3Rpb24gTWFuYWdlci4AAAUgABKBYQcgAgEOEoFhBgcCEkESQQQHARJF
CAEAAgAAAAAABAABARwEBwESNAgBAAgAAAAAAB4BAAEAVAIWV3JhcE5vbkV4Y2VwdGlvblRocm93
cwEMAQAHMS4wLjAuMAAAKQEAJDUzOGI5NjdiLTk1YjgtNDdkMS1iNjllLTI2Nzc4ZGVkYTBkNwAA
BQEAAQAAHwEAGkNvcHlyaWdodCBAIE1pY3Jvc29mdCAyMDEyAAA8AQA3U2NyaXB0Q29tcG9uZW50
XzU4Y2Y1ZDUyZTNhMTRmMmJiMzRhYjk3NzU5ZDkxOTAyLnZicHJvagAADgEACU1pY3Jvc29mdAAA
AAAAgFYAAAAAAAAAAAAAnlYAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJBWAAAAAAAAAAAAAAAA
AAAAAF9Db3JEbGxNYWluAG1zY29yZWUuZGxsAAAAAAD/JQAgQAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwADAAAAKAAAgA4AAABI
AACAEAAAAGAAAIAAAAAAAAAAAAAAAAAAAAIAAgAAAHgAAIADAAAAkAAAgAAAAAAAAAAAAAAAAAAA
AQAAfwAAqAAAgAAAAAAAAAAAAAAAAAAAAQABAAAAwAAAgAAAAAAAAAAAAAAAAAAAAQAAAAAA2AAA
AAAAAAAAAAAAAAAAAAAAAQAAAAAA6AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA+AAAAAAAAAAAAAAA
AAAAAAAAAQAAAAAACAEAAIBlAADoAgAAAAAAAAAAAABoaAAAKAEAAAAAAAAAAAAAkGkAACIAAAAA
AAAAAAAAABhhAABoBAAAAAAAAAAAAABoBDQAAABWAFMAXwBWAEUAUgBTAEkATwBOAF8ASQBOAEYA
TwAAAAAAvQTv/gAAAQAAAAEAAAAAAAAAAQAAAAAAPwAAAAAAAAAEAAAAAgAAAAAAAAAAAAAAAAAA
AEQAAAABAFYAYQByAEYAaQBsAGUASQBuAGYAbwAAAAAAJAAEAAAAVAByAGEAbgBzAGwAYQB0AGkA
bwBuAAAAAAAAALAEyAMAAAEAUwB0AHIAaQBuAGcARgBpAGwAZQBJAG4AZgBvAAAApAMAAAEAMAAw
ADAAMAAwADQAYgAwAAAANAAKAAEAQwBvAG0AcABhAG4AeQBOAGEAbQBlAAAAAABNAGkAYwByAG8A
cwBvAGYAdAAAAJgAOAABAEYAaQBsAGUARABlAHMAYwByAGkAcAB0AGkAbwBuAAAAAABTAGMAcgBp
AHAAdABDAG8AbQBwAG8AbgBlAG4AdABfADUAOABjAGYANQBkADUAMgBlADMAYQAxADQAZgAyAGIA
YgAzADQAYQBiADkANwA3ADUAOQBkADkAMQA5ADAAMgAuAHYAYgBwAHIAbwBqAAAAMAAIAAEARgBp
AGwAZQBWAGUAcgBzAGkAbwBuAAAAAAAxAC4AMAAuADAALgAwAAAAmAA8AAEASQBuAHQAZQByAG4A
YQBsAE4AYQBtAGUAAABTAGMAcgBpAHAAdABDAG8AbQBwAG8AbgBlAG4AdABfADUAOABjAGYANQBk
ADUAMgBlADMAYQAxADQAZgAyAGIAYgAzADQAYQBiADkANwA3ADUAOQBkADkAMQA5ADAAMgAuAHYA
YgBwAHIAbwBqAC4AZABsAGwAAABcABsAAQBMAGUAZwBhAGwAQwBvAHAAeQByAGkAZwBoAHQAAABD
AG8AcAB5AHIAaQBnAGgAdAAgAEAAIABNAGkAYwByAG8AcwBvAGYAdAAgADIAMAAxADIAAAAAAKAA
PAABAE8AcgBpAGcAaQBuAGEAbABGAGkAbABlAG4AYQBtAGUAAABTAGMAcgBpAHAAdABDAG8AbQBw
AG8AbgBlAG4AdABfADUAOABjAGYANQBkADUAMgBlADMAYQAxADQAZgAyAGIAYgAzADQAYQBiADkA
NwA3ADUAOQBkADkAMQA5ADAAMgAuAHYAYgBwAHIAbwBqAC4AZABsAGwAAACQADgAAQBQAHIAbwBk
AHUAYwB0AE4AYQBtAGUAAAAAAFMAYwByAGkAcAB0AEMAbwBtAHAAbwBuAGUAbgB0AF8ANQA4AGMA
ZgA1AGQANQAyAGUAMwBhADEANABmADIAYgBiADMANABhAGIAOQA3ADcANQA5AGQAOQAxADkAMAAy
AC4AdgBiAHAAcgBvAGoAAAA0AAgAAQBQAHIAbwBkAHUAYwB0AFYAZQByAHMAaQBvAG4AAAAxAC4A
MAAuADAALgAwAAAAOAAIAAEAQQBzAHMAZQBtAGIAbAB5ACAAVgBlAHIAcwBpAG8AbgAAADEALgAw
AC4AMAAuADAAAAAoAAAAIAAAAEAAAAABAAQAAAAAAIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAd3d3d3d3d3d3d3d3d3dwBEREREREREREREREREREcAT/////////////////9HAE
//////////////////RwBP/////////////////0cAT/////////////////9HAE////////////
//////RwBP/////////////////0cAT/////////////////9HAE//////////////////RwBP//
///////////////0cAT/////////////////9HAE//////////////////RwBP//////////////
///0cAT/////////////////9HAE//////////////////RwBP/////////////////0cAT/////
////////////9HAE//////////////////RwBP/////////////////0cASIiIiIiIiIiIiIiIiI
hHAERERERERERERERERERERwBExMTExMTExMTE7Ozkl0cATMzMzMzMzMzMzMzMzMxAAARERERERE
REREREREREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
/////////////////////8AAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGA
AAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAA8AA
AAf///////////////8oAAAAEAAAACAAAAABAAQAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA
////AAAAAAAAAAAAB3d3d3d3d3dERERERERER0////////hHT///////+EdP///////4R0//////
//hHT///////+EdP///////4R0////////hHT///////+EdIiIiIiIiIR0zMzMzMzMxHxERERERE
RMAAAAAAAAAAAAAAAAAAAAAA//8AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAABAAD//wAA//8AAAAAAQACACAgEAABAAQA6AIAAAIAEBAQAAEABAAoAQAA
AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAADAAAALA2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></arrayElement></arrayElements></property>
<property id="55" 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="210" 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_58cf5d52e3a14f2bb34ab97759d91902</property>
<property id="211" 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>
<connections>
<connection id="69" name="CrmConnection" description="" connectionManagerID="{EB1EB761-DB8F-4F1C-96A3-1EF8BB8AE919}" /></connections>
<inputs>
<input id="45" name="Input" description="" hasSideEffects="true" dangling="false" errorOrTruncationOperation="" errorRowDisposition="NotUsed" truncationRowDisposition="NotUsed"><externalMetadataColumns isUsed="True">
<externalMetadataColumn id="199" name="TargetEntity" description="" precision="0" scale="0" length="50" dataType="wstr" codePage="0" mappedColumnId="0" />
<externalMetadataColumn id="200" name="TargetId" description="" precision="0" scale="0" length="0" dataType="guid" codePage="0" mappedColumnId="0" />
<externalMetadataColumn id="201" name="PrincipalEntity" description="" precision="0" scale="0" length="50" dataType="wstr" codePage="0" mappedColumnId="0" />
<externalMetadataColumn id="202" name="PrincipalId" description="" precision="0" scale="0" length="0" dataType="guid" codePage="0" mappedColumnId="0" />
<externalMetadataColumn id="203" name="AccessRights" description="" precision="0" scale="0" length="0" dataType="i4" codePage="0" mappedColumnId="0" /></externalMetadataColumns></input>
</inputs>
</component>