Globi Integration und Suche Abhängig

This commit is contained in:
2020-11-25 17:44:40 +01:00
parent 0dd9788d8f
commit 1638fdc173
24 changed files with 1545 additions and 3796 deletions

View File

@@ -0,0 +1,150 @@
Imports System.IO
Imports DigitalData.Modules.Logging
Imports Microsoft.Office.Interop
Public Class ClassFileDrop
Public Shared files_dropped As String()
Private _LOGGER As Logger
Private clsFilehandle As ClassFilehandle
Public Sub New(LogConfig As LogConfig)
_LOGGER = LogConfig.GetLogger()
clsFilehandle = New ClassFilehandle(LogConfig)
End Sub
Public Function Drop_File(e As DragEventArgs)
Try
_LOGGER.Info("Available Drop Formats:")
For Each oFormat As String In e.Data.GetFormats()
_LOGGER.Debug(oFormat)
Next
_LOGGER.Info(">> Drop_File")
files_dropped = Nothing
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
Dim MyFiles() As String
Dim i As Integer
' Assign the files to an array.
MyFiles = e.Data.GetData(DataFormats.FileDrop)
' Loop through the array and add the files to the list.
For i = 0 To MyFiles.Length - 1
_LOGGER.Info(">> Simple FileDrop - File: " & MyFiles(i))
ReDim Preserve files_dropped(i)
files_dropped(i) = "|DROPFROMFSYSTEM|" & MyFiles(i)
' ListBox1.Items.Add(MyFiles(i))
Next
Return True
ElseIf (e.Data.GetDataPresent("FileGroupDescriptor")) AndAlso (e.Data.GetDataPresent("FileContents")) Then
'// the first step here is to get the stbFileName
'// of the attachment and
'// build a full-path name so we can store it
'// in the temporary folder
'//
'// set up to obtain the aryFileGroupDescriptor
'// and extract the file name
Dim stmInput As IO.Stream = CType(e.Data.GetData("FileGroupDescriptor"), IO.Stream)
Dim aryFileGroupDescriptor(512) As Byte ' = new byte[512]
stmInput.Read(aryFileGroupDescriptor, 0, 512)
'// used to build the stbFileName from the aryFileGroupDescriptor block
Dim stbFileName As System.Text.StringBuilder = New System.Text.StringBuilder("")
'// this trick gets the stbFileName of the passed attached file
Dim intCnt As Integer = 76
Do While aryFileGroupDescriptor(intCnt) <> 0
stbFileName.Append(Convert.ToChar(aryFileGroupDescriptor(intCnt), System.Globalization.CultureInfo.CreateSpecificCulture("de-DE")))
intCnt += 1
Loop
stmInput.Close()
'Sonderzeichen entfernen
Dim Tempfilename = clsFilehandle.InvalidCharacters(stbFileName.ToString)
Dim anhaenge = e.Data.GetDataPresent("FileContents")
'Dim path As String = "C:\VBProjekte\Dateien"
'// put the zip file into the temp directory
Dim strOutFile As String = Path.GetTempPath() & Tempfilename
'// create the full-path name
'//
'// Second step: we have the file name.
'// Now we need to get the actual raw
'// data for the attached file and copy it to disk so we work on it.
'//
'// get the actual raw file into memory
Dim msInput As IO.MemoryStream = CType(e.Data.GetData("FileContents", True), IO.MemoryStream) 'This returns nothing for an Email
If msInput Is Nothing = False Then
'// allocate enough bytes to hold the raw date
Dim aryFileBytes(CType(msInput.Length, Int32)) As Byte
'// set starting position at first byte and read in the raw data
msInput.Position = 0
msInput.Read(aryFileBytes, 0, CType(msInput.Length, Int32))
'// create a file and save the raw zip file to it
Dim fsOutput As IO.FileStream = New IO.FileStream(strOutFile, IO.FileMode.Create) ';
fsOutput.Write(aryFileBytes, 0, aryFileBytes.Length)
fsOutput.Close() ' // close the file
Dim resultVersion = clsFilehandle.Versionierung_Datei(strOutFile)
If resultVersion <> "" Then
strOutFile = resultVersion
End If
Dim finTemp As IO.FileInfo = New IO.FileInfo(strOutFile)
'// always good to make sure we actually created the file
If (finTemp.Exists = True) Then
ReDim Preserve files_dropped(0)
files_dropped(0) = "|OUTLOOK_ATTACHMENT|" & strOutFile
_LOGGER.Info(">> Drop an Attachment - File: " & strOutFile)
Return True
Else
_LOGGER.Info(">> Attachment File from Outlook could not be created")
End If
End If
End If
If e.Data.GetDataPresent("FileGroupDescriptor") Then
Dim oApp
Try
oApp = New Outlook.Application()
Catch ex As Exception
MsgBox("Unexpected error in Initialisieren von Outlook-API:" & vbNewLine & ex.Message & vbNewLine & vbNewLine & "Evtl ist Outlook nicht in der dafür vorgesehenen For")
End Try
_LOGGER.Info(">> Drop of msg")
'supports a drop of a Outlook message
Dim myobj As Object
For i As Integer = 1 To oApp.ActiveExplorer.Selection.Count
myobj = oApp.ActiveExplorer.Selection.Item(i)
Dim subj As String = myobj.Subject
If subj = "" Then
subj = "NO_SUBJECT"
End If
If subj.Contains("\") Then
subj = subj.Replace("\", "-")
End If
If subj.Contains("/") Then
subj = subj.Replace("/", "-")
End If
'Sonderzeichen entfernen
subj = clsFilehandle.InvalidCharacters(subj)
'hardcode a destination path for testing
Dim strFile As String = IO.Path.Combine(Path.GetTempPath, subj + ".msg")
strFile = strFile.Replace("?", "")
strFile = strFile.Replace("!", "")
strFile = strFile.Replace("%", "")
strFile = strFile.Replace("$", "")
_LOGGER.Info(">> Drop of msg - File:" & strFile)
Try
myobj.SaveAs(strFile)
Catch ex As Exception
MsgBox("Error in Save Email2Tempfile" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
Return False
End Try
ReDim Preserve files_dropped(i)
files_dropped(i) = "|OUTLOOK_MESSAGE|" & strFile
Next
Return True
'Drop eines Outlook Attachments
End If
Catch ex As Exception
MsgBox("Error in Drop-File" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
Return False
End Try
End Function
End Class

View File

@@ -0,0 +1,241 @@
Option Explicit On
Imports System.IO
Imports System.Text.RegularExpressions
Imports DigitalData.Modules.Logging
Imports Independentsoft
Public Class ClassFilehandle
Private _LOGGER As Logger
Public Sub New(LogConfig As LogConfig)
_LOGGER = LogConfig.GetLogger()
End Sub
''' <summary>
''' Diese Funktion entfernt alle Zeichen aus dem übergebenen String
''' die in Dateinamen nicht erlaubt sind.
''' </summary>
''' <param name="Input">Der zu prüfende String</param>
''' <returns>String ohne nichterlaubte Zeichen</returns>
Public Function InvalidCharacters(Input As String) As String
Dim replacement = ""
'Return System.Text.RegularExpressions.Regex.Replace(Input, "[\\/:*?""<>|\r\n]", "", System.Text.RegularExpressions.RegexOptions.Singleline)
Dim regexSearch = New String(Path.GetInvalidFileNameChars()) & New String(Path.GetInvalidPathChars())
Dim r = New Regex(String.Format("[{0}]", Regex.Escape(regexSearch)))
Return r.Replace(Input, replacement)
End Function
Public Function Decide_FileHandle(filename As String, handletype As String)
Try
If filename.EndsWith(".msg") Then
My.Application.Globix.CurrMessageID = ""
Dim _msg As New Msg.Message(filename)
If _msg.Attachments.Count > 0 Then
Dim result As MsgBoxResult
If My.Application.User.Language = "de-DE" Then
result = MessageBox.Show(New Form With {.TopMost = True}, "Achtung: Die Email enthält Anhänge!" & vbNewLine & "Wollen Sie die Anhänge separat indexieren und herauslösen?", "Nachfrage zur Indexierung:", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
Else
result = MessageBox.Show(New Form With {.TopMost = True}, "Attention: This Email contains Attachments!" & vbNewLine & "Do you want to extract the attachments and index them seperately?", "Question about Indexing:", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
End If
If result = MsgBoxResult.Yes Then
If handletype.StartsWith("|FW") Then
Return Email_Decay(filename, True)
Else
Return Email_Decay(filename)
End If
End If
End If
End If
If filename.ToUpper.EndsWith(".LNK") Then
If My.Application.User.Language = "de-DE" Then
MsgBox("Verknüpfungen können nicht abgelegt werden!", MsgBoxStyle.Critical, "Global Indexer")
Else
MsgBox("Shortcuts cannot be droppped!", MsgBoxStyle.Critical, "Global Indexer")
End If
Return False
End If
Return Insert_GI_File(filename, handletype)
Catch ex As Exception
MsgBox("Unexpected Error in Decide_FileHandle: " & ex.Message, MsgBoxStyle.Critical)
Return False
End Try
End Function
Private Function Email_Decay(msgname As String, Optional FW As Boolean = False)
Try
Dim msgonly As String = "|MSGONLY|"
Dim ATT_EXTR As String = "|ATTMNTEXTRACTED|"
If FW = True Then
msgonly = "|FW_MSGONLY|"
ATT_EXTR = "|FW_ATTMNTEXTRACTED|"
End If
Dim erfolgreich As Boolean = False
Dim msg As New Msg.Message(msgname)
If Not msg.InternetMessageId Is Nothing Then
My.Application.Globix.CurrMessageID = msg.InternetMessageId
Else
_LOGGER.Info(">> Email_Decay: Es konnte keine Message-ID gelesen werden. Eine GUID wird erzeugt!")
Dim sGUID As String
sGUID = System.Guid.NewGuid.ToString()
My.Application.Globix.CurrMessageID = sGUID
End If
'Nur die MSGDatei ablegen
Dim tempfile As String = Path.Combine(Path.GetTempPath, Path.GetFileNameWithoutExtension(msgname) & "_excl_att.msg")
If File.Exists(tempfile) Then
File.Delete(tempfile)
End If
Dim _msgEXAtt As New Msg.Message(msgname)
_msgEXAtt.Attachments.Clear()
_msgEXAtt.Save(tempfile)
'Datei in Array zum Templöschen speichern
My.Application.Globix.TEMP_FILES.Add(tempfile)
If Insert_GI_File(tempfile, msgonly) = True Then
erfolgreich = True
'Hier nun die Anhänge herauslösen
Dim _msg As New Msg.Message(msgname)
Dim i1 As Integer = 1
_LOGGER.Info(">> Anzahl der Attachments: " & _msg.Attachments.Count)
For Each attachment As Independentsoft.Msg.Attachment In _msg.Attachments
If erfolgreich = False Then
Exit For
End If
Dim attachment_name As String
If attachment.LongFileName Is Nothing Then
attachment_name = attachment.DisplayName
Else
attachment_name = attachment.LongFileName
End If
If attachment.EmbeddedMessage IsNot Nothing Then
attachment_name = InvalidCharacters(attachment_name)
tempfile = Path.Combine(Path.GetTempPath, attachment_name & ".msg")
tempfile = CType(Versionierung_Datei(tempfile), String)
If tempfile <> String.Empty Then
Dim oMessage = attachment.EmbeddedMessage
oMessage.Save(tempfile)
My.Application.Globix.TEMP_FILES.Add(tempfile)
_LOGGER.Info(">> Attachment (" & i1 & "):" & tempfile)
erfolgreich = Insert_GI_File(tempfile, ATT_EXTR)
i1 += 1
End If
ElseIf Not attachment_name.Contains("inline") Then
'Sonderzeichen entfernen
attachment_name = InvalidCharacters(attachment_name)
tempfile = Path.Combine(Path.GetTempPath, attachment_name)
tempfile = Versionierung_Datei(tempfile)
If tempfile <> "" Then
attachment.Save(tempfile)
'Datei in Array zum Templöschen speichern
My.Application.Globix.TEMP_FILES.Add(tempfile)
_LOGGER.Info(">> Attachment (" & i1 & "):" & tempfile)
'nun der Insert des Anhanges
erfolgreich = Insert_GI_File(tempfile, ATT_EXTR)
i1 += 1
End If
End If
Next
End If
Return erfolgreich
Catch ex As Exception
MsgBox("Error in Email_Decay: " & ex.Message, MsgBoxStyle.Critical)
End Try
End Function
Private Function Insert_GI_File(filename As String, handleType As String)
Try
filename = filename.Replace("'", "''")
Dim filename_only As String = Path.GetFileName(filename)
Dim ins As String = "INSERT INTO TBGI_FILES_USER (FILENAME2WORK, USER@WORK,HANDLE_TYPE,FILENAME_ONLY) VALUES ('" & filename & "','" & Environment.UserName & "','" & handleType & "','" & filename_only & "')"
Return My.Database.ExecuteNonQuery(ins)
Catch ex As Exception
Return False
End Try
End Function
Public Function IsFileInUse(ByVal fullFilePath As String) As Boolean
' Gibt zurück, ob die übergebene Datei momentan exklusiv zu haben ist.
' Prüft, ob die angegeben Datei aktuell durch eine
' andere Anwendung in Benutzung ist
Dim ff As Integer = FreeFile()
If System.IO.File.Exists(fullFilePath) Then
Try
' Versuchen, die Datei mit *exklusiven* Lese- und
' Schreibrechten zu öffnen
FileOpen(ff, fullFilePath, OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.LockReadWrite)
Catch ex As Exception
' Ist ein Fehler aufgetreten, so wird nach außen hin generell
' davon ausgegangen, dass die Datei in Benutzung ist (obwohl
' auch andere Ursachen, etwa Rechteprobleme, möglich sind).
_LOGGER.Info(">> FileInUse Message: " & ex.Message)
IsFileInUse = True
Finally
' Die eventuell geöffnete Datei schließen
FileClose(ff)
End Try
Return False
End If
End Function
Public Function Versionierung_Datei(Dateiname As String)
Dim extension
Dim _NewFileString
Try
Dim version As Integer = 1
Dim Stammname As String = Path.GetDirectoryName(Dateiname) & "\" & Path.GetFileNameWithoutExtension(Dateiname)
extension = Path.GetExtension(Dateiname)
Dim _neuername As String = Stammname
'Dim MoveFilename As String = DATEINAME.Replace(element.Value, "")
'Überprüfen ob File existiert
If File.Exists(_neuername & extension) = False Then
_NewFileString = _neuername
Else
Do While File.Exists(_neuername & extension)
version = version + 1
_neuername = Stammname & "~" & version
_NewFileString = _neuername
Loop
End If
Return _NewFileString & extension
Catch ex As Exception
_LOGGER.Info(" - Error in versioning file - error: " & vbNewLine & ex.Message)
_LOGGER.Error(ex.Message)
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error in versioning file:")
Return ""
End Try
End Function
'' <summary>
''' Ersetzt alle nicht zulässigen Zeichen im angegebenen Dateinamen
''' </summary>
''' <param name="sFilename">Dateiname ohne Pfadangabe</param>
''' <param name="sChar">Ersatzzeichen für alle unzulässigen Zeichen
''' im Dateinamen</param>
Public Function CleanFilename(ByVal sFilename As String, Optional ByVal REPLACEChar As String = "") As String
_LOGGER.Info(" >> Filename before CleanFilename: '" & sFilename & "'")
If sFilename.Contains(".\") Then
sFilename = sFilename.Replace(".\", "\")
End If
'If sFilename.Contains("'") Then
' sFilename = sFilename.Replace("'", "")
'End If
'If sFilename.Contains("..") Then
' sFilename = sFilename.Replace("..", ".")
'End If
' alle nicht zulässigen Zeichen ersetzen
sFilename = System.Text.RegularExpressions.Regex.Replace(sFilename, My.Application.Globix.REGEX_CLEAN_FILENAME, REPLACEChar)
sFilename = System.Text.RegularExpressions.Regex.Replace(sFilename, "[\\/:*?""<>|\r\n]", "", System.Text.RegularExpressions.RegexOptions.Singleline)
'Dim oCleanFileName As String = String.Join(REPLACEChar, sFilename.Split(Path.GetInvalidFileNameChars()))
Dim oCleanFileName As New System.IO.FileInfo(System.Text.RegularExpressions.Regex.Replace(sFilename, String.Format("[{0}]", String.Join(String.Empty, Path.GetInvalidFileNameChars)), REPLACEChar))
_LOGGER.Info(" >> Filename after CleanFilename: '" & sFilename & "'")
Return sFilename
End Function
End Class

View File

@@ -24,8 +24,9 @@
Public Property ECMDirect As Boolean = True
Public Property CURRENT_PROFILE_LOG_INDEX As String
Public Property ShowIndexResult As Boolean = True
Public Property CURR_MAN_INDEXE As DataTable
Public Property CURR_AUTO_INDEXE As DataTable
Public Property CURR_DT_MAN_INDEXE As DataTable
Public Property CURR_DT_AUTO_INDEXE As DataTable
Public Property CURR_DT_DOCTYPE As DataTable
Public Property CURR_INDEX_MAN_POSTPROCESSING As DataTable
Public Property FILE_DELIMITER As String
Public Property VERSION_DELIMITER As String

View File

@@ -48,6 +48,7 @@ Partial Class frmGlobix_Index
Me.SplitContainerControl1 = New DevExpress.XtraEditors.SplitContainerControl()
Me.pnlIndex = New System.Windows.Forms.Panel()
Me.Panel1 = New System.Windows.Forms.Panel()
Me.Label1 = New System.Windows.Forms.Label()
Me.cmbDoctype = New System.Windows.Forms.ComboBox()
Me.DocumentViewer1 = New DigitalData.Controls.DocumentViewer.DocumentViewer()
CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).BeginInit()
@@ -141,6 +142,7 @@ Partial Class frmGlobix_Index
Me.labelError.ImageOptions.SvgImage = CType(resources.GetObject("labelError.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.labelError.Name = "labelError"
Me.labelError.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph
Me.labelError.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
'
'labelNotice
'
@@ -149,6 +151,7 @@ Partial Class frmGlobix_Index
Me.labelNotice.ImageOptions.SvgImage = CType(resources.GetObject("labelNotice.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.labelNotice.Name = "labelNotice"
Me.labelNotice.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph
Me.labelNotice.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
'
'chkMultiindexing
'
@@ -161,10 +164,11 @@ Partial Class frmGlobix_Index
'
'BarButtonItem1
'
Me.BarButtonItem1.Caption = "Starten"
Me.BarButtonItem1.Caption = "Ablage-Flow"
Me.BarButtonItem1.Id = 14
Me.BarButtonItem1.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem1.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.BarButtonItem1.ImageOptions.Image = CType(resources.GetObject("BarButtonItem1.ImageOptions.Image"), System.Drawing.Image)
Me.BarButtonItem1.Name = "BarButtonItem1"
Me.BarButtonItem1.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.Large
'
'RibbonPage1
'
@@ -177,7 +181,7 @@ Partial Class frmGlobix_Index
Me.RibbonPageGroup3.AllowTextClipping = False
Me.RibbonPageGroup3.ItemLinks.Add(Me.BarButtonItem1)
Me.RibbonPageGroup3.Name = "RibbonPageGroup3"
Me.RibbonPageGroup3.Text = "Datei verarbeiten"
Me.RibbonPageGroup3.Text = "Start"
'
'RibbonPageGroup1
'
@@ -242,27 +246,38 @@ Partial Class frmGlobix_Index
'pnlIndex
'
Me.pnlIndex.Dock = System.Windows.Forms.DockStyle.Fill
Me.pnlIndex.Location = New System.Drawing.Point(0, 56)
Me.pnlIndex.Location = New System.Drawing.Point(0, 50)
Me.pnlIndex.Name = "pnlIndex"
Me.pnlIndex.Size = New System.Drawing.Size(591, 359)
Me.pnlIndex.Size = New System.Drawing.Size(591, 365)
Me.pnlIndex.TabIndex = 1
'
'Panel1
'
Me.Panel1.Controls.Add(Me.Label1)
Me.Panel1.Controls.Add(Me.cmbDoctype)
Me.Panel1.Dock = System.Windows.Forms.DockStyle.Top
Me.Panel1.Location = New System.Drawing.Point(0, 0)
Me.Panel1.Name = "Panel1"
Me.Panel1.Size = New System.Drawing.Size(591, 56)
Me.Panel1.Size = New System.Drawing.Size(591, 50)
Me.Panel1.TabIndex = 0
'
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.ImeMode = System.Windows.Forms.ImeMode.NoControl
Me.Label1.Location = New System.Drawing.Point(3, 3)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(192, 13)
Me.Label1.TabIndex = 2
Me.Label1.Text = "Bitte wählen Sie einen Ablage-Flow:"
'
'cmbDoctype
'
Me.cmbDoctype.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.cmbDoctype.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.cmbDoctype.FormattingEnabled = True
Me.cmbDoctype.Location = New System.Drawing.Point(12, 17)
Me.cmbDoctype.Location = New System.Drawing.Point(6, 19)
Me.cmbDoctype.Name = "cmbDoctype"
Me.cmbDoctype.Size = New System.Drawing.Size(555, 25)
Me.cmbDoctype.TabIndex = 0
@@ -291,6 +306,7 @@ Partial Class frmGlobix_Index
CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).EndInit()
Me.SplitContainerControl1.ResumeLayout(False)
Me.Panel1.ResumeLayout(False)
Me.Panel1.PerformLayout()
Me.ResumeLayout(False)
Me.PerformLayout()
@@ -323,4 +339,5 @@ Partial Class frmGlobix_Index
Friend WithEvents cmbDoctype As ComboBox
Friend WithEvents DocumentViewer1 As Controls.DocumentViewer.DocumentViewer
Friend WithEvents pnlIndex As Panel
Friend WithEvents Label1 As Label
End Class

View File

@@ -270,19 +270,27 @@
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjE5LjIsIFZlcnNpb249MTkuMi4z
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAKMCAAAC77u/
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAKUEAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9Cgku
WWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuQmx1ZXtmaWxsOiMxMTc3RDc7fQoJLkdyZWVue2ZpbGw6IzAz
OUMyMzt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
Y2l0eTowLjc1O30KCS5zdDF7b3BhY2l0eTowLjU7fQoJLnN0MntvcGFjaXR5OjAuMjU7fQo8L3N0eWxl
Pg0KICA8ZyBpZD0iQ2hlY2tCb3giPg0KICAgIDxwYXRoIGQ9Ik0yNyw0SDVDNC41LDQsNCw0LjUsNCw1
djIyYzAsMC41LDAuNSwxLDEsMWgyMmMwLjUsMCwxLTAuNSwxLTFWNUMyOCw0LjUsMjcuNSw0LDI3LDR6
IE0xNCwyMmwtNi02bDItMmw0LDQgICBsOC04bDIsMkwxNCwyMnoiIGNsYXNzPSJHcmVlbiIgLz4NCiAg
PC9nPg0KPC9zdmc+Cw==
MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ
LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5HcmVlbntmaWxsOiMwMzlD
MjM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
Y2l0eTowLjU7fQoJLnN0MXtkaXNwbGF5Om5vbmU7fQoJLnN0MntkaXNwbGF5OmlubGluZTtmaWxsOiMw
MzlDMjM7fQoJLnN0M3tkaXNwbGF5OmlubGluZTtmaWxsOiNEMTFDMUM7fQoJLnN0NHtkaXNwbGF5Omlu
bGluZTtmaWxsOiM3MjcyNzI7fQo8L3N0eWxlPg0KICA8ZyBpZD0iRW1wbG95ZWVQcm9maWxlIj4NCiAg
ICA8cGF0aCBkPSJNMjksMEgzQzIuNSwwLDIsMC41LDIsMXYzMGMwLDAuNSwwLjUsMSwxLDFoMjZjMC41
LDAsMS0wLjUsMS0xVjFDMzAsMC41LDI5LjUsMCwyOSwweiBNMjgsMzBINFYyaDI0VjMweiIgY2xhc3M9
IkJsYWNrIiAvPg0KICAgIDxwYXRoIGQ9Ik0xMi4zLDEzLjhjLTAuMS0wLjMtMC4zLTAuNi0wLjMtMC45
YzAuMS0wLjEsMC4zLTAuMiwwLjMtMC4yQzExLjYsMTAuNSwxMiw4LDE1LjIsOGMzLjUsMCwzLjcsMS45
LDMuNywxLjkgICBzMS45LTAuMSwwLjcsMi45YzAuMS0wLjEsMC4zLTAuMSwwLjMsMC4yYzAuMSwwLjMt
MC4xLDAuNi0wLjIsMC45Yy0wLjIsMC4zLDAuMSwxLjEtMC42LDF2MC4xQzE4LjgsMTYuNCwxNy44LDE4
LDE2LDE4ICAgcy0yLjctMS42LTMuMS0zLjFjMC0wLjEsMC0wLjEsMC0wLjFDMTIuMiwxNC45LDEyLjQs
MTQuMSwxMi4zLDEzLjh6IE0xOC43LDE4Yy0wLjUsMS0xLjQsMS45LTIuNywxLjljLTEuMywwLTIuMi0w
LjktMi43LTIgICBDMTEuNywyMC4zLDgsMTguNyw4LDIzLjdWMjRoMTZ2LTAuM0MyNCwxOC43LDIwLjMs
MjAuMiwxOC43LDE4eiIgY2xhc3M9IkJsdWUiIC8+DQogIDwvZz4NCjwvc3ZnPgs=
</value>
</data>
<data name="PreviewItem.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v19.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -403,24 +411,149 @@
cmVlbiIgLz4NCiAgPC9nPg0KPC9zdmc+Cw==
</value>
</data>
<data name="BarButtonItem1.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v19.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="BarButtonItem1.ImageOptions.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjE5LjIsIFZlcnNpb249MTkuMi4z
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAANoCAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ
LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5HcmVlbntmaWxsOiMwMzlD
MjM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
Y2l0eTowLjU7fQoJLnN0MXtkaXNwbGF5Om5vbmU7fQoJLnN0MntkaXNwbGF5OmlubGluZTtmaWxsOiMw
MzlDMjM7fQoJLnN0M3tkaXNwbGF5OmlubGluZTtmaWxsOiNEMTFDMUM7fQoJLnN0NHtkaXNwbGF5Omlu
bGluZTtmaWxsOiM3MjcyNzI7fQo8L3N0eWxlPg0KICA8ZyBpZD0iR2V0dGluZ1N0YXJ0ZWQiPg0KICAg
IDxwYXRoIGQ9Ik0xNiwyQzguMywyLDIsOC4zLDIsMTZzNi4zLDE0LDE0LDE0czE0LTYuMywxNC0xNFMy
My43LDIsMTYsMnogTTEyLDIyVjEwbDEwLDZMMTIsMjJ6IiBjbGFzcz0iR3JlZW4iIC8+DQogIDwvZz4N
Cjwvc3ZnPgs=
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
</value>
</data>
<data name="BarCheckItem2.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v19.2" mimetype="application/x-microsoft.net.object.bytearray.base64">

File diff suppressed because it is too large Load Diff