add DataResultList

This commit is contained in:
Developer02 Digital Data
2019-10-14 15:18:45 +02:00
parent c668f692f4
commit a80486dad2
21 changed files with 1120 additions and 223 deletions

View File

@@ -19,6 +19,15 @@ Public Class ProfileFilter
Private _LogConfig As LogConfig
Private _Logger As Logger
Enum ImageIndex
Root
Profile
Clipboard
Process
Window
Control
End Enum
Public ReadOnly Property Profiles As List(Of ProfileData)
Get
Return _Profiles
@@ -51,8 +60,10 @@ Public Class ProfileFilter
Dim oRootNode As TreeNode = New TreeNode() With {
.Text = $"Suche nach '{ClipboardContents}'",
.Tag = "ROOT"
.Tag = "ROOT",
.ImageIndex = ImageIndex.Root
}
_TreeView.Nodes.Clear()
_TreeView.Nodes.Add(oRootNode)
For Each oProfile In Profiles

View File

@@ -27,7 +27,7 @@ Public Class ProfileMatch
Public Function NewProfileNode(Profile As ProfileData) As TreeNode
Dim oNode As New TreeNode() With {
.Text = $"Profile: {Profile.Name}",
.ImageIndex = 0,
.ImageIndex = ProfileFilter.ImageIndex.Profile,
.Tag = Profile.Name & "-PROFILE"
}
@@ -39,7 +39,7 @@ Public Class ProfileMatch
Dim oNode As New TreeNode() With {
.Text = oText,
.ImageIndex = 1,
.ImageIndex = ProfileFilter.ImageIndex.Clipboard,
.Tag = Profile.Name & "-REGEX",
.BackColor = GetMatchColor(IsMatch)
}
@@ -52,7 +52,7 @@ Public Class ProfileMatch
Dim oNode As New TreeNode() With {
.Text = oText,
.ImageIndex = 4,
.ImageIndex = ProfileFilter.ImageIndex.Process,
.Tag = Process.Guid & "-PROCESS",
.BackColor = GetMatchColor(IsMatch)
}
@@ -66,7 +66,7 @@ Public Class ProfileMatch
Dim oNode As New TreeNode() With {
.Text = oText,
.ImageIndex = 3,
.ImageIndex = ProfileFilter.ImageIndex.Window,
.Tag = Window.Guid & "-WINDOW",
.BackColor = GetMatchColor(IsMatch)
}
@@ -80,7 +80,7 @@ Public Class ProfileMatch
Dim oNode As New TreeNode() With {
.Text = oText,
.ImageIndex = 2,
.ImageIndex = ProfileFilter.ImageIndex.Control,
.Tag = Control.Guid & "-CONTROL",
.BackColor = GetMatchColor(IsMatch)
}

View File

@@ -67,34 +67,47 @@ Public Class ProfileSearches
End Function
Private Function DoLoadDataSearches() As List(Of Search)
Dim oMatchingIds = String.Join(",", _Params.MatchingProfiles.Select(Function(p) p.Guid).ToArray())
Dim oSQL As String = $"SELECT * FROM TBCW_PROF_DATA_SEARCH WHERE ACTIVE = 1 AND PROFILE_ID in ({oMatchingIds}) ORDER BY TAB_INDEX"
Dim oSearchesDataTable = _Environment.Database.GetDatatable(oSQL)
Dim oDataSearches As New List(Of Search)
Dim oCounter As Integer = 0
Dim oPatterns As New Patterns.ClassPatterns(_LogConfig)
For Each oRow As DataRow In oSearchesDataTable.Rows
Dim oProfileId As Integer = oRow.Item("PROFILE_ID")
Dim oTabTitle As String = oRow.Item("TAB_TITLE")
Dim oConnectionId As Integer = oRow.Item("CONN_ID")
Try
Dim oMatchingIds = String.Join(",", _Params.MatchingProfiles.Select(Function(p) p.Guid).ToArray())
Dim oSQL As String = $"SELECT * FROM TBCW_PROF_DATA_SEARCH WHERE ACTIVE = 1 AND PROFILE_ID in ({oMatchingIds}) ORDER BY TAB_INDEX"
Dim oSearchesDataTable = _Environment.Database.GetDatatable(oSQL)
oSQL = oRow.Item("SQL_COMMAND")
oSQL = oPatterns.ReplaceUserValues(oSQL, _Environment.User)
oSQL = oPatterns.ReplaceInternalValues(oSQL)
Dim oCounter As Integer = 0
Dim oPatterns As New Patterns.ClassPatterns(_LogConfig)
Dim oDatatable As DataTable = _Environment.Database.GetDatatable(oSQL, oConnectionId)
oDataSearches.Add(New Search() With {
.DataTable = oDatatable,
.ProfileId = oProfileId,
.TabCaption = oTabTitle,
.TabIndex = oCounter,
.SQLCommand = oSQL
})
For Each oRow As DataRow In oSearchesDataTable.Rows
Try
Dim oProfileId As Integer = oRow.Item("PROFILE_ID")
Dim oTabTitle As String = oRow.Item("TAB_TITLE")
Dim oConnectionId As Integer = oRow.Item("CONN_ID")
oCounter += 1
Next
oSQL = oRow.Item("SQL_COMMAND")
oSQL = oPatterns.ReplaceUserValues(oSQL, _Environment.User)
oSQL = oPatterns.ReplaceInternalValues(oSQL)
Return oDataSearches
Dim oDatatable As DataTable = _Environment.Database.GetDatatable(oSQL, oConnectionId)
oDataSearches.Add(New Search() With {
.DataTable = oDatatable,
.ProfileId = oProfileId,
.TabCaption = oTabTitle,
.TabIndex = oCounter,
.SQLCommand = oSQL
})
oCounter += 1
Catch ex As Exception
_Logger.Error(ex)
End Try
Next
Return oDataSearches.
Where(Function(s) Not IsNothing(s.DataTable)).
ToList()
Catch ex As Exception
_Logger.Error(ex)
Return oDataSearches
End Try
End Function
End Class

View File

@@ -55,6 +55,7 @@ Partial Class frmMatch
'
Me.TileGroupDocumentsData.Name = "TileGroupDocumentsData"
Me.TileGroupDocumentsData.Text = "Kombiniert"
Me.TileGroupDocumentsData.Visible = False
'
'TileGroupDocuments
'
@@ -100,6 +101,7 @@ Partial Class frmMatch
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.TileControlMatch)
Me.Name = "frmMatch"
Me.ShowIcon = False
Me.Text = "Profile gefunden"
Me.ResumeLayout(False)
Me.PerformLayout()

View File

@@ -55,6 +55,13 @@ Public Class frmMatch
_Params = Params
End Sub
Public Sub ShowTreeView()
Dim oForm As New frmTreeView(_Params.MatchTreeView.Nodes) With {
.StartPosition = FormStartPosition.CenterScreen
}
oForm.ShowDialog()
End Sub
Private Sub frmMatch_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim oCreatedTiles = CreateTiles()
@@ -172,10 +179,7 @@ Public Class frmMatch
End Function
Private Sub Label2_Click(sender As Object, e As EventArgs) Handles Label2.Click
Dim oForm As New frmTreeView(_Params.MatchTreeView.Nodes) With {
.StartPosition = FormStartPosition.CenterScreen
}
oForm.ShowDialog()
ShowTreeView()
End Sub
Private Async Sub TileControlMatch_ItemClick(sender As Object, e As TileItemEventArgs) Handles TileControlMatch.ItemClick
@@ -190,13 +194,15 @@ Public Class frmMatch
Select Case oItem.Group.Name
Case TileGroupData.Name
'OpenResultForms(oProfileId, ProfileType.DATA_ONLY)
Dim oSearches = Await oProfileSearch.LoadDataSearchesAsync()
OpenDataResults(oProfile, oSearches)
Case TileGroupDocuments.Name
Dim oSearches = Await oProfileSearch.LoadDocumentSearchesAsync()
OpenDocumentResults(oProfile, oSearches)
Case Else
' TODO: Load combined results
'OpenResultForms(oProfileId, ProfileType.ANY)
End Select
@@ -219,51 +225,54 @@ Public Class frmMatch
Next
Dim oForm As New frmDocumentResultList(_LogConfig, _Environment, oParams)
AddHandler oForm.FormClosed, AddressOf ProfileResultForm_Closed
OpenForms.Add(oForm)
oForm.Show()
End Sub
Private Sub OpenResultForms(ProfileId As Integer, OpenType As ProfileType)
'If OpenType = ProfileType.ANY Or OpenType = ProfileType.DOCS_ONLY Then
' ' Show Result Document Form
' Dim oForm As New frmResult(_LogConfig, _Environment, _Params, frmResult.ResultType.Document)
' AddHandler oForm.FormClosed, AddressOf ProfileResultForm_Closed
' OpenForms.Add(oForm)
Private Sub OpenDataResults(Profile As ProfileData, Searches As List(Of ProfileSearches.Search))
Dim oNameSlug = Language.Utils.ConvertTextToSlug(Profile.Name)
Dim oSearchGuids = Searches.Select(Function(s) s.Guid).ToArray
Dim oWindowGuid = $"{Profile.Guid}-{oNameSlug}-{String.Join("-", oSearchGuids)}"
Dim oParams = New DataResultParams() With {
.WindowGuid = oWindowGuid
}
' oForm.Show()
'End If
For Each oSearch In Searches
oParams.Results.Add(New DataResult() With {
.Title = oSearch.TabCaption,
.Datatable = oSearch.DataTable
})
Next
'If OpenType = ProfileType.ANY Or OpenType = ProfileType.DATA_ONLY Then
' ' Show Result Data Form
' Dim oForm As New frmResult(_LogConfig, _Environment, _Params, frmResult.ResultType.Data)
' AddHandler oForm.FormClosed, AddressOf ProfileResultForm_Closed
' OpenForms.Add(oForm)
' oForm.Show()
'End If
Dim oForm As New frmDataResultList(_LogConfig, _Environment, oParams)
AddHandler oForm.FormClosed, AddressOf ProfileResultForm_Closed
OpenForms.Add(oForm)
oForm.Show()
End Sub
Private Sub ProfileResultForm_Closed(sender As Object, e As FormClosedEventArgs)
Dim oShouldOpenAgain As Boolean = False
Dim oThisForm = New List(Of IResultForm) From {sender}
'If TypeOf sender Is frmResult Then
' For Each oForm As IResultForm In OpenForms
' ' Determine if frmProfileMatch should be shown
' If oForm.ShouldReturnToMatchForm Then
' oShouldOpenAgain = True
' End If
' Next
'End If
If TypeOf sender Is frmDataResultList Or TypeOf sender Is frmDocumentResultList Then
For Each oForm As IResultForm In OpenForms
' Determine if frmProfileMatch should be shown
If oForm.ShouldReturnToMatchForm Then
oShouldOpenAgain = True
End If
Next
End If
'' If frmProfileMatch should be shown, close all windows of this profile
'If oShouldOpenAgain Then
' For Each oForm As Form In OpenForms.Except(oThisForm)
' ' Remove the Handler to prevent a loop
' RemoveHandler oForm.FormClosed, AddressOf ProfileResultForm_Closed
' oForm.Close()
' Next
' If frmProfileMatch should be shown, close all windows of this profile
If oShouldOpenAgain Then
For Each oForm As Form In OpenForms.Except(oThisForm)
' Remove the Handler to prevent a loop
RemoveHandler oForm.FormClosed, AddressOf ProfileResultForm_Closed
oForm.Close()
Next
' Show()
'End If
Show()
End If
End Sub
End Class

View File

@@ -22,16 +22,15 @@ Partial Class frmTreeView
'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTreeView))
Me.tvProfileMatch = New System.Windows.Forms.TreeView()
Me.ImageList1 = New System.Windows.Forms.ImageList(Me.components)
Me.ImageList1 = New System.Windows.Forms.ImageList()
Me.SuspendLayout()
'
'tvProfileMatch
'
Me.tvProfileMatch.Dock = System.Windows.Forms.DockStyle.Fill
Me.tvProfileMatch.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.tvProfileMatch.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.tvProfileMatch.ImageIndex = 0
Me.tvProfileMatch.ImageList = Me.ImageList1
Me.tvProfileMatch.Location = New System.Drawing.Point(0, 0)
@@ -44,11 +43,12 @@ Partial Class frmTreeView
'
Me.ImageList1.ImageStream = CType(resources.GetObject("ImageList1.ImageStream"), System.Windows.Forms.ImageListStreamer)
Me.ImageList1.TransparentColor = System.Drawing.Color.Transparent
Me.ImageList1.Images.SetKeyName(0, "award_star_gold_1.png")
Me.ImageList1.Images.SetKeyName(1, "application_xp.png")
Me.ImageList1.Images.SetKeyName(2, "application_form.png")
Me.ImageList1.Images.SetKeyName(3, "brick.png")
Me.ImageList1.Images.SetKeyName(4, "application_view_tile.png")
Me.ImageList1.Images.SetKeyName(0, "root.png")
Me.ImageList1.Images.SetKeyName(1, "profile.png")
Me.ImageList1.Images.SetKeyName(2, "clipboard.png")
Me.ImageList1.Images.SetKeyName(3, "process.png")
Me.ImageList1.Images.SetKeyName(4, "window.png")
Me.ImageList1.Images.SetKeyName(5, "control.png")
'
'frmTreeView
'
@@ -57,7 +57,8 @@ Partial Class frmTreeView
Me.ClientSize = New System.Drawing.Size(800, 450)
Me.Controls.Add(Me.tvProfileMatch)
Me.Name = "frmTreeView"
Me.Text = "frmTreeView"
Me.ShowIcon = False
Me.Text = "Profilsuchen Algorithmus"
Me.ResumeLayout(False)
End Sub

View File

@@ -124,58 +124,89 @@
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADm
CwAAAk1TRnQBSQFMAgEBBQEAARgBAAEYAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/4EAAQcFtAPPBa4BBzEA
AbQN/wGuMQABtAH/A5cB/wN1Af8DegH/Aa4xAAG0Af8BlwGYAZcB/wN1Af8BegGgAXoB/wGuMQABtAH/
A5cB/wN1Af8DegH/Ac8xAAG0Df8BzzEAAbQB/wPcAf8DlwH/A9wB/wHPMQABtAH/A9wB/wGXAZgBlwH/
AdwBCQHcAf8BtDEAAbQB/wPcAf8DlwH/A9wB/wG0MQABtA3/AbQxAA+0MQABtQ0JAbQxAAHxAbsLtAG1
AfF0AAEaAVIB8wQAAf8BmQFSNgAB8wFZAVIBmQH/AQAB8wJSAXQDAAG8BrQDzwWuAQcWAAHzAgcB8wkA
Af8BWQGaAVkBUgGZAVIBegFYARoDAAG0AbwE8AS8BAcB7wGuAQcFtAPPBa4BBwUAAfQBvAGSAbwBBwH3
AQcB9AgAA5oEegFSAfQDAAG0Dv8BrgG0DfIBrgMAAf8B8QH3AQcC8wK8Ae8BkgHwAf8GAAEaAXoBmgR6
AVIEAAG0Af8M9AH/Aa4BtAHyAfMD8gEHBv8B8gGuAQAB/wHyAe8BBwLzAfEB8AIHAbwBBwLvAfIB/wMA
Af8CegGaBHoBUgHzAwABtAP/CvQB/wGuAbQB8wO0AfMBBwb/AfMBrgEAAgcB8gH0AfIC8QHwBAcBvAEH
AfcBBwIAAfYBWQF6ApoFegErARoCAAG0Bf8I9AH/Ac8BtAXzBwcB8wHPAQAB7wL0AvIC8QHwBgcBvAGS
AQABGwEyAXoBwwOaA3oCmgFSAXkB/wG0B/8G9AH/Ac8BtA3zAc8BAAHvAvQC8wHyAvEGBwG8AfcBAAVZ
AXoCmgF6BFkBMQEbAbQJ/wT0Af8BzwG0BfQBBwb/AfQBzwEAAe8C9AHzAfIBBwG8AvABvAHvAwcBvAH3
AQAC/wL2AZoBUwKaAVkBmgP0AfYBAAG0C/8C9AH/ArQB9AO0AfQBBwb/AfQBtAEAAe8B9AHzAvEBBwHx
Av8B8QEHAfACBwG8AfcEAAG9AeMBUwF6AZoBMgEXAb0EAAG0Dv8CtAX0BwcB9AG0AQAB7wHxArwB8AHv
BP8B7wHwAbwCBwGSAwABvQHjARYB4wE4AXoBUwEWARcBvQMAAbQO8AK0DfQBtAEAAfAB7wHwAv8BBwHv
AvcB7wEHAv8B8AHvAbwDAAHjARYB4wFHAVMBWQFHAeMBFgFHAwAftAIAAe8D/wHyAe8C8AHvAfID/wHv
BAAB4wGUAkcBTQFTAkcBFgFHAwABtQEZBwkBvAEJAbwBCQFNAQkBtAG1DQkBtAIAAfIBBwL3Ae8B8AL/
AfAB7wL3AQcB8gQAAeMBlAZHARYBRwMAAQkBuwy0AbUBuwHxAbsLtAG1AfEFAAH/Ae8E/wHvAf8HAAHj
AZQGRwEWARcoAAHyAQcC9wEHAfIFAAFCAU0BPgcAAT4DAAEoAwABQAMAASADAAEBAQABAQYAAQEWAAP/
AQAC/wYAAv8HAAEBBwABAQcAAQEHAAEBBwABAQcAAQEHAAEBBwABAQcAAQEHAAEBBwABAQcAAQEHAAEB
BgAC/wYAAeMBxwb/AeABhwIAAv8B/AE/AeABBwMAAQEB8AEPAfABBwMAAQEBwAEDAfABDwMAAQECAAHg
AQcDAAEBAgABwAEDAwABAQIAAYAEAAEBAgABgAQAAQECAAGAAQEDAAEBAgAB8AEPAwABAQIAAeABBwMA
AQECAAHgAQcDAAEBAYABAQHgAQcDAAEBAYABAQHgAQcDAAEBAfABDwHgAQcE/wH4AR8L
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD8
EgAAAk1TRnQBSQFMAgEBBgEAAQgBAAEIAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEgBgABIDYABP8DmQH/A+oF/wPMAf8DwAH/xAADhgH/A4YB/wOGAf8DhgH/A4YB/wOG
Af8DhgH/A4YF/wPXAf8D+AH/AcwBmQEyAf8BzAGZATIB/wHMApkF/wOWAf8EAAOGAf8DhgH/A4YB/wOG
Af8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/hAADhgH/HAADhgX/AcwBmQFl
Af8BzAGZATIB/wHMAZkBMgH/AcwBmQEyCf8QAAOGAf8YAAOGAf+QAAOGAf8cAAOyBf8B8AHKAaYB/wHM
AZkBMg3/A8wB/xAAA4YB/xgAA4YB/5AAA4YB/yAAA5YF/wHwAcoBpgn/A8AB/wPqAf8EAAOGAf8DhgH/
A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/hAADhgH/JAAD8QH/
A5YB/wOGAf8DwAH/BAADmQH/EAADhgH/GAADhgH/kAADhgH/OAADhgH/EAADhgH/GAADhgH/kAADhgH/
OAADhgH/BAADhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/
A4YB/4QAA4YB/zgAA4YB/xAAA4YB/xgAA4YB/5AAA4YB/zgAA4YB/xAAA4YB/xgAA4YB/5AAAcwBmQEy
Af8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHM
AZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wQAA4YB/wQAA4YB/wOG
Af8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf+EAAHMAZkBMgH/
AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZ
ATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8EAAOGAf8EAAPXAf8D1wH/
A9cB/wOGAf8D1wH/A9cB/wPXAf8D1wH/A9cB/wPXAf8DhgH/A9cB/wPXAf8D1wH/hAABzAGZATIB/wHM
AZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEy
Af8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/BAADhgH/BAAD1wH/A9cB/wPX
Af8DhgH/A9cB/wPXAf8D1wH/A9cB/wPXAf8D1wH/A4YB/wPXAf8D1wH/A9cB/4wAAcwBmQEyAf8BzAGZ
ATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/
AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wQAA4YB/wOGAf8DhgH/A4YB/wOG
Af8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf+MAAHMAZkBMgH/AcwBmQEyAf8BzAGZ
ATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/
AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf/IAAHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHM
AZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEy
Af8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf//AF0AA4Yh/xwAAcwBmQFlAf8BzAGZATIB/wPqAf8kAAOG
Af8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/ZAADhiH/HAABzAGZATIB/wHM
AZkBMgH/AcwBmQEyAf9MAAOGAf8QAAHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEy
Af8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHM
AZkBMgH/EAABMgHMAv8BZQHMAv8BZQHMAv8BZQHMAv8DhiH/CAAE/wHMAZkBMgH/AcwBmQEyBf8D3QH/
AcwBmQEyAf8BzAGZATIB/wHMAZkBMgX/AswBmQH/AcwBmQEyAf8CzAGZAf8gAAOGAf8DhgH/A4YB/wOG
Af8DhgH/CAADhgH/EAABzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEy
Af8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/xAA
ATIBzAL/AWUBzAL/AWUBzAL/AWUBzAL/A4Yh/wgAAcwBmQFlAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEy
Af8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHM
AZkBMgH/IAABZQHMAv8BZQHMAv8BZQHMAv8BZQHMAv8DhgH/CAADhgH/EAABzAGZATIB/wHMAZkBMgH/
AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZ
ATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/xAAATIBzAL/AWUBzAL/AWUBzAL/AWUBzAL/A4Yh/wgA
BP8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHM
AZkBMgH/AcwBmQEyAf8BzAGZATIB/wLMAZkB/yAAAWUBzAL/AWUBzAL/AWUBzAL/AWUBzAL/A4YB/wgA
A4YB/xAAAcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEy
Af8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8QAAEyAcwC/wFl
AcwC/wFlAcwC/wFlAcwC/wOGIf8MAAHMAZkBZQH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/A/EF/wLM
AZkB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIF/yAAAWUBzAL/AWUBzAL/AWUBzAL/AWUBzAL/A4YB/wgA
A4YB/xAAAcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEy
Af8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8QAAEyAcwC/wFl
AcwC/wFlAcwC/wFlAcwC/wOGIf8EAAHMAZkBZQH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEy
Af8QAALMAZkB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/A+oB/wQAA+MB/wOGBf8kAAOG
Af8DhgH/DAABzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/CAABzAGZATIB/wHM
AZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8QAAEyAcwC/wFlAcwC/wFlAcwC/wFl
AcwC/wOGIf8EAAHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8QAAT/AcwBmQEy
Af8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wQABP8DhgH/A4YF/xwAA8AB/wOGAf8DzAH/
DAABzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/CAABzAGZATIB/wHMAZkBMgH/
AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8QAAEyAcwC/wFlAcwC/wFlAcwC/wFlAcwC/wOG
If8EAAHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8QAAPxAf8BzAGZATIB/wHM
AZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBZQH/CAAE/wOGAf8DhgX/FAADwAH/A4YB/wPMAf8QAAHM
AZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEy
Af8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/EAABMgHMAv8BZQHMAv8BZQHM
Av8BZQHMAv8DhiH/DAABzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8D1wH/DAABzAGZATIB/wHMAZkBMgH/
AcwBmQEyAf8D3QH/FAAE/wOGAf8DhgX/DAADwAH/A4YB/wPMAf8UAAHMAZkBMgH/AcwBmQEyAf8BzAGZ
ATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/
AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/EAABMgHMAv8BZQHMAv8BZQHMAv8BZQHMAv8DhgH/A4YB/wOG
Af8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8MAAHMApkB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHM
AZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIF/xgABP8DhgH/A4YF/wQA
A8AB/wOGAf8DzAH/AcwBmQFlAf8UAAHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEy
Af8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wPq
Af8QAAEyAcwC/yAAAWUBzAL/FAAB8AHKAaYB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/
AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8cAAT/
A4YB/wOGAf8DwAH/A4YB/wPMAf8BzAGZAWUB/wHMAZkBMgH/IAABzAGZATIB/xAAAcwBmQEyAf8gAAEy
AcwC/wQAA4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wFlAcwC/xQAA8wB/wHMAZkBMgH/AcwBmQEy
Af8BzAKZAf8BzAGZATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBZQH/AcwBmQEyAf8BzAGZ
ATIB/wHMAZkBMgH/IAAE/wOGAf8DhgH/A8wB/wQAAcwBmQEyAf8BzAGZATIB/yAAAcwBmQEyAf8BzAGZ
ATIB/wHMAZkBMgH/AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/MAADhgH/BAADhgH/JAADzAH/A8wB/wgA
AcwBmQEyAf8BzAGZATIB/wHMAZkBMgH/BAAE/wHMAZkBZQX/JAAE/wPMAf+4AAHMAZkBMgH/AcwBmQEy
Af8BzAGZAWUB//8AGQABQgFNAT4HAAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/wEAAf8BgQL/
BgABgAEBBAABfwEAAfcB7wQAAX8BAAH3Ae8EAAF/AoABAQQAAX8BwgH3Ae8EAAF/Af4B9wHvBAABfwH+
AYABAQQAAX8B/gH3Ae8EAAF/Af4B9wHvBQABAgGAAQEFAAECAYABAQUAAQIBgAEBBAABwAEAAYABAQQA
AcABAAL/BAABwAEAAv8EAAT/Af4BAAH+AT8B4AEDAv8B/gEAAf4BPwH/AfsBwAEBAeABAAHAAQMB/AEb
AcABAQHgAQABwAEDAfwBGwHAAQEB4AEAAcABAwH8ARsBwAEBAeABAAHgAQMB/AEbAcABAQHgAQABgwHA
AY8B+QHBAYEB4AEAAYMBwAGHAfEBwQGBAeABAAGDAcABwwHjAcABAQHgAQAB4QHDAeEBxwHAAQEB4AEA
AeABAwHwAYcBwAEBAe8B9wHAAQMB+AEHAfsB3wHoAQcBwAEDAfwBJwH4AR8B/gG/AeYBIwH+AX8E/wH+
AT8I/ws=
</value>
</data>
</root>