diff --git a/SDL/App.config b/SDL/App.config index 905de8ae..9b6859a6 100644 --- a/SDL/App.config +++ b/SDL/App.config @@ -37,7 +37,7 @@ - + diff --git a/SDL/My Project/Resources.Designer.vb b/SDL/My Project/Resources.Designer.vb index 7761b5d4..32680b0a 100644 --- a/SDL/My Project/Resources.Designer.vb +++ b/SDL/My Project/Resources.Designer.vb @@ -548,6 +548,16 @@ Namespace My.Resources End Get End Property + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Byte[]. + ''' + Friend ReadOnly Property Customs_Clearance_Template() As Byte() + Get + Dim obj As Object = ResourceManager.GetObject("Customs_Clearance_Template", resourceCulture) + Return CType(obj,Byte()) + End Get + End Property + ''' ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. ''' diff --git a/SDL/My Project/Resources.resx b/SDL/My Project/Resources.resx index 71ef8b82..d3792c5a 100644 --- a/SDL/My Project/Resources.resx +++ b/SDL/My Project/Resources.resx @@ -964,4 +964,7 @@ ..\Resources\ico_greenpulse.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Customs_Clearance_Template.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/SDL/Resources/Customs_Clearance_Template.xlsx b/SDL/Resources/Customs_Clearance_Template.xlsx new file mode 100644 index 00000000..75099d4b Binary files /dev/null and b/SDL/Resources/Customs_Clearance_Template.xlsx differ diff --git a/SDL/SDL.vbproj b/SDL/SDL.vbproj index 883b2bf9..3a374372 100644 --- a/SDL/SDL.vbproj +++ b/SDL/SDL.vbproj @@ -450,6 +450,9 @@ ..\..\..\AVISO\Aviso\packages\WpfAnimatedGif.1.4.14\lib\net\WpfAnimatedGif.dll True + + ..\packages\ZUGFeRD.NET.1.0.1\lib\ZUGFeRD.NET.dll + @@ -4711,6 +4714,7 @@ + Always diff --git a/SDL/USTV/frmMDM_USTVAntrag.vb b/SDL/USTV/frmMDM_USTVAntrag.vb index a67ae057..e81c7843 100644 --- a/SDL/USTV/frmMDM_USTVAntrag.vb +++ b/SDL/USTV/frmMDM_USTVAntrag.vb @@ -2430,7 +2430,7 @@ Public Class frmMDM_USTVAntrag Dim pdf As String = "" pdf = func.getPDF(dgvUSTVPositionen.Rows(e.RowIndex).Cells("UStVPo_SchnittstellenNr").Value, dgvUSTVPositionen.Rows(e.RowIndex).Cells("UStVPo_ReNr").Value, dgvUSTVPositionen.Rows(e.RowIndex).Cells("UStVPo_ReDat").Value, dgvUSTVPositionen.Rows(e.RowIndex).Cells("UStVPo_daId").Value, False, False, Antrag_LandKz, USTV_ANTRAG, New cFakturierung, False) - If IO.File.Exists(pdf) Then + If System.IO.File.Exists(pdf) Then Process.Start(pdf) End If diff --git a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.Designer.vb b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.Designer.vb index 675b1c25..0fb75051 100644 --- a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.Designer.vb +++ b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.Designer.vb @@ -61,6 +61,7 @@ Partial Class usrCntlATLAS_EZA Me.VERAGIMPORTFormatToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.ToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() Me.EZAIDToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.VERAGFormatÖffnen2025V1ToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() CType(Me.SplitContainer, System.ComponentModel.ISupportInitialize).BeginInit() Me.SplitContainer.Panel1.SuspendLayout() Me.SplitContainer.SuspendLayout() @@ -447,7 +448,7 @@ Partial Class usrCntlATLAS_EZA ' 'DateiimportToolStripMenuItem ' - Me.DateiimportToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.DynamicAutomotiveXLSToolStripMenuItem, Me.GEZEXLSXToolStripMenuItem, Me.MEYLEXLSXToolStripMenuItem, Me.FressnapToolStripMenuItem, Me.VERAGIMPORTFormatToolStripMenuItem}) + Me.DateiimportToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.DynamicAutomotiveXLSToolStripMenuItem, Me.GEZEXLSXToolStripMenuItem, Me.MEYLEXLSXToolStripMenuItem, Me.FressnapToolStripMenuItem, Me.VERAGIMPORTFormatToolStripMenuItem, Me.VERAGFormatÖffnen2025V1ToolStripMenuItem}) Me.DateiimportToolStripMenuItem.Name = "DateiimportToolStripMenuItem" Me.DateiimportToolStripMenuItem.Size = New System.Drawing.Size(87, 20) Me.DateiimportToolStripMenuItem.Text = "Datei-Import" @@ -455,31 +456,31 @@ Partial Class usrCntlATLAS_EZA 'DynamicAutomotiveXLSToolStripMenuItem ' Me.DynamicAutomotiveXLSToolStripMenuItem.Name = "DynamicAutomotiveXLSToolStripMenuItem" - Me.DynamicAutomotiveXLSToolStripMenuItem.Size = New System.Drawing.Size(238, 22) + Me.DynamicAutomotiveXLSToolStripMenuItem.Size = New System.Drawing.Size(244, 22) Me.DynamicAutomotiveXLSToolStripMenuItem.Text = "Dynamic Automotive (XLSX)" ' 'GEZEXLSXToolStripMenuItem ' Me.GEZEXLSXToolStripMenuItem.Name = "GEZEXLSXToolStripMenuItem" - Me.GEZEXLSXToolStripMenuItem.Size = New System.Drawing.Size(238, 22) + Me.GEZEXLSXToolStripMenuItem.Size = New System.Drawing.Size(244, 22) Me.GEZEXLSXToolStripMenuItem.Text = "GEZE (XLSX)" ' 'MEYLEXLSXToolStripMenuItem ' Me.MEYLEXLSXToolStripMenuItem.Name = "MEYLEXLSXToolStripMenuItem" - Me.MEYLEXLSXToolStripMenuItem.Size = New System.Drawing.Size(238, 22) + Me.MEYLEXLSXToolStripMenuItem.Size = New System.Drawing.Size(244, 22) Me.MEYLEXLSXToolStripMenuItem.Text = "MEYLE (XLSX)" ' 'FressnapToolStripMenuItem ' Me.FressnapToolStripMenuItem.Name = "FressnapToolStripMenuItem" - Me.FressnapToolStripMenuItem.Size = New System.Drawing.Size(238, 22) + Me.FressnapToolStripMenuItem.Size = New System.Drawing.Size(244, 22) Me.FressnapToolStripMenuItem.Text = "Fressnapf (XLSX)" ' 'VERAGIMPORTFormatToolStripMenuItem ' Me.VERAGIMPORTFormatToolStripMenuItem.Name = "VERAGIMPORTFormatToolStripMenuItem" - Me.VERAGIMPORTFormatToolStripMenuItem.Size = New System.Drawing.Size(238, 22) + Me.VERAGIMPORTFormatToolStripMenuItem.Size = New System.Drawing.Size(244, 22) Me.VERAGIMPORTFormatToolStripMenuItem.Text = "VERAG-IMPORT-Format (XLSX)" ' 'ToolStripMenuItem1 @@ -495,6 +496,12 @@ Partial Class usrCntlATLAS_EZA Me.EZAIDToolStripMenuItem.Size = New System.Drawing.Size(109, 22) Me.EZAIDToolStripMenuItem.Text = "EZA ID" ' + 'VERAGFormatÖffnen2025V1ToolStripMenuItem + ' + Me.VERAGFormatÖffnen2025V1ToolStripMenuItem.Name = "VERAGFormatÖffnen2025V1ToolStripMenuItem" + Me.VERAGFormatÖffnen2025V1ToolStripMenuItem.Size = New System.Drawing.Size(244, 22) + Me.VERAGFormatÖffnen2025V1ToolStripMenuItem.Text = "VERAG-Format öffnen (2025-V1)" + ' 'usrCntlATLAS_EZA ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) @@ -556,4 +563,5 @@ Partial Class usrCntlATLAS_EZA Friend WithEvents MEYLEXLSXToolStripMenuItem As ToolStripMenuItem Friend WithEvents FressnapToolStripMenuItem As ToolStripMenuItem Friend WithEvents VERAGIMPORTFormatToolStripMenuItem As ToolStripMenuItem + Friend WithEvents VERAGFormatÖffnen2025V1ToolStripMenuItem As ToolStripMenuItem End Class diff --git a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.vb b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.vb index ff2c51cf..2a86af9e 100644 --- a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.vb +++ b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.vb @@ -1773,7 +1773,395 @@ Public Class usrCntlATLAS_EZA End Function Private Sub VERAGIMPORTFormatToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles VERAGIMPORTFormatToolStripMenuItem.Click - + ImportExcel_CustomsTemplate_V1() End Sub + + '================================================================================================================================ + '================================================================================================================================ + '================================================================================================================================ + Public Function ImportExcel_CustomsTemplate_V1() As Boolean + ' --- Dateiauswahl wie gehabt --- + Dim f As New frmImportFromAVISOAnhaenge(AVISO, SENDUNG) + f.ShowDialog(Me) + If f.DialogResult <> DialogResult.OK Then Return False + If f.LIST_FILES Is Nothing OrElse f.LIST_FILES.Count = 0 Then Return False + + ' --- ggf. vorhandene Positionen leeren --- + If EZA.eza_WARENPOS.Count > 0 Then + If vbYes = MsgBox("Sollen vorhandene Positionen gelöscht werden?", vbYesNo) Then + EZA.eza_WARENPOS.Clear() + End If + End If + + Me.Cursor = Cursors.WaitCursor + Dim cnt As Integer = 0 + + For Each filePath As String In f.LIST_FILES + If Not (filePath.EndsWith(".xlsx", StringComparison.OrdinalIgnoreCase) OrElse filePath.EndsWith(".xls", StringComparison.OrdinalIgnoreCase)) Then + Continue For + End If + + Dim xlApp As Excel.Application = Nothing + Dim wb As Excel.Workbook = Nothing + Dim ws As Excel.Worksheet = Nothing + + Try + xlApp = New Excel.Application() + xlApp.DisplayAlerts = False + xlApp.CutCopyMode = False + + wb = xlApp.Workbooks.Open(filePath) + ws = CType(wb.Worksheets(1), Excel.Worksheet) + wb.Activate() + + ' Falls Autofilter aktiv: ShowAllData() versuchen (optional) + Try + ws.ShowAllData() + Catch + End Try + + ' ---------- VERSIONSPRÜFUNG ---------- + Dim versionTag As String = GetCellStr(ws, 2, 8) ' H2 + If Not String.Equals(versionTag, "2025-V1", StringComparison.OrdinalIgnoreCase) Then + Throw New ApplicationException("Version nicht unterstützt (gefunden: '" & versionTag & "', erwartet: '2025-V1').") + End If + + ' ---------- 1) HEADER KEY/VALUE (A/B) ---------- + Dim header As New Dictionary(Of String, String)(StringComparer.OrdinalIgnoreCase) + Dim usedRows As Integer = ws.UsedRange.Rows.Count + Dim r As Integer + + For r = 3 To Math.Min(80, usedRows + 5) + Dim k As String = GetCellStr(ws, r, 1) + Dim v As String = GetCellStr(ws, r, 2) + If Not String.IsNullOrWhiteSpace(k) Then header(k) = v + Next + + ' ein paar Kopfwerte ins EZA (alle optional) + Dim HandelsRgNr As String = "" + If header.ContainsKey("Invoice No.") Then HandelsRgNr = header("Invoice No.") + If header.ContainsKey("Currency") Then EZA.eza_Rechnungswaehrung = header("Currency") + If header.ContainsKey("Delivery Terms (Incoterms)") Then EZA.eza_LieferbedingungCode = header("Delivery Terms (Incoterms)") + If header.ContainsKey("Total Gross Weight (kg)") Then EZA.eza_GesamtRohmasse = ToDoubleSafeVERAGTmpl(header("Total Gross Weight (kg)")) + If header.ContainsKey("Truck Plate (Tractor)") Then EZA.eza_KennzeichenNameBefoerderungsmittelAnkunft = header("Truck Plate (Tractor)") + + ' ---------- 2) CONSIGNOR / CONSIGNEE ---------- + Dim rowCons As Integer = -1 + Dim rowCee As Integer = -1 + For r = 3 To Math.Min(80, usedRows + 5) + Dim aVal As String = GetCellStr(ws, r, 1) + If rowCons < 0 AndAlso String.Equals(aVal, "Consignor / Exporter", StringComparison.OrdinalIgnoreCase) Then rowCons = r + If rowCee < 0 AndAlso String.Equals(aVal, "Consignee / Importer", StringComparison.OrdinalIgnoreCase) Then rowCee = r + If rowCons > 0 AndAlso rowCee > 0 Then Exit For + Next + + ' Kundennummern nur ermitteln, wenn die Blöcke auch existieren + Dim kdnrImp As String = If(rowCee > 0, GetCellStr(ws, rowCee + 1, 6), "") + Dim kdnrCons As String = If(rowCons > 0, GetCellStr(ws, rowCons + 1, 6), "") + + If rowCons > 0 Then + 'Prüfen, ob Adresse schon vorhanden: + If Not EZA.eza_ADRESSEN.Any(Function(a) a.ezaAd_AdressTyp IsNot Nothing AndAlso a.ezaAd_AdressTyp.ToString().ToUpper() = "CZ") Then + Dim rr As Integer = rowCons + 1 + Dim adrC As New cDakosy_EZA_Adressen() + adrC.ezaAd_AdressTyp = "CZ" + + If Not String.IsNullOrWhiteSpace(kdnrCons) Then + ' --- Daten aus Datenbank (cAdressen) laden --- + Dim AD As New cAdressen(kdnrCons) + Dim KD As New cKunde(kdnrCons) + adrC.ezaAd_NameFirma1 = AD.Name_1 + adrC.ezaAd_LandCode = cProgramFunctions.getISO2Land(AD.LandKz) + adrC.ezaAd_PLZ = AD.PLZ + adrC.ezaAd_Ort = AD.Ort + adrC.ezaAd_StrasseHausNr1 = AD.Straße + If Not String.IsNullOrWhiteSpace(KD.EORITIN) Then adrC.ezaAd_TeilnehmerEORI = KD.EORITIN + Else + ' --- Excel-Werte (alle optional) --- + Dim consCompany As String = GetCellStr(ws, rr, 1) + Dim consCountry As String = GetCellStr(ws, rr, 2).ToUpperInvariant() + Dim consZIP As String = GetCellStr(ws, rr, 3) + Dim consCity As String = GetCellStr(ws, rr, 4) + Dim consStreet As String = GetCellStr(ws, rr, 5) + If consCompany <> "" Then adrC.ezaAd_NameFirma1 = consCompany + If consCountry <> "" Then adrC.ezaAd_LandCode = consCountry + If consZIP <> "" Then adrC.ezaAd_PLZ = consZIP + If consCity <> "" Then adrC.ezaAd_Ort = consCity + If consStreet <> "" Then adrC.ezaAd_StrasseHausNr1 = consStreet + End If + + EZA.eza_ADRESSEN.Add(adrC) + End If + End If + + If rowCee > 0 Then + 'Prüfen, ob Adresse schon vorhanden: + If Not EZA.eza_ADRESSEN.Any(Function(a) a.ezaAd_AdressTyp IsNot Nothing AndAlso a.ezaAd_AdressTyp.ToString().ToUpper() = "CN") Then + Dim rr As Integer = rowCee + 1 + Dim adrE As New cDakosy_EZA_Adressen() + adrE.ezaAd_AdressTyp = "CN" + + If Not String.IsNullOrWhiteSpace(kdnrImp) Then + ' --- Daten aus Datenbank (cAdressen) laden --- + Dim AD As New cAdressen(kdnrImp) + Dim KD As New cKunde(kdnrImp) + adrE.ezaAd_NameFirma1 = AD.Name_1 + adrE.ezaAd_LandCode = cProgramFunctions.getISO2Land(AD.LandKz) + adrE.ezaAd_PLZ = AD.PLZ + adrE.ezaAd_Ort = AD.Ort + adrE.ezaAd_StrasseHausNr1 = AD.Straße + If Not String.IsNullOrWhiteSpace(KD.EORITIN) Then adrE.ezaAd_TeilnehmerEORI = KD.EORITIN + Else + ' --- Excel-Werte (alle optional) --- + Dim ceeCompany As String = GetCellStr(ws, rr, 1) + Dim ceeCountry As String = GetCellStr(ws, rr, 2).ToUpperInvariant() + Dim ceeZIP As String = GetCellStr(ws, rr, 3) + Dim ceeCity As String = GetCellStr(ws, rr, 4) + Dim ceeStreet As String = GetCellStr(ws, rr, 5) + If ceeCompany <> "" Then adrE.ezaAd_NameFirma1 = ceeCompany + If ceeCountry <> "" Then adrE.ezaAd_LandCode = ceeCountry + If ceeZIP <> "" Then adrE.ezaAd_PLZ = ceeZIP + If ceeCity <> "" Then adrE.ezaAd_Ort = ceeCity + If ceeStreet <> "" Then adrE.ezaAd_StrasseHausNr1 = ceeStreet + End If + + EZA.eza_ADRESSEN.Add(adrE) + End If + End If + + ' ---------- 3) ITEM-TABELLE (optional) ---------- + ' Finde Titelzeile "Item Lines (add as many as needed)" in Spalte A + Dim rowItemsTitle As Integer = -1 + For r = 10 To Math.Min(200, usedRows + 10) + If String.Equals(GetCellStr(ws, r, 1), "Item Lines (add as many as needed)", StringComparison.OrdinalIgnoreCase) Then + rowItemsTitle = r + Exit For + End If + Next + + If rowItemsTitle > 0 Then + Dim rowHdr As Integer = rowItemsTitle + 1 + Dim usedCols As Integer = ws.UsedRange.Columns.Count + + ' Header-Indices (alle optional) + Dim cLine As Integer = -1, cArticle As Integer = -1, cDesc As Integer = -1, cShortDesc As Integer = -1 + Dim cHs As Integer = -1, cOrigin As Integer = -1, cPkgs As Integer = -1, cPkgType As Integer = -1 + Dim cGross As Integer = -1, cNet As Integer = -1, cUnit As Integer = -1, cTotal As Integer = -1, cCurr As Integer = -1 + + Dim c As Integer + For c = 1 To usedCols + Dim h As String = GetCellStr(ws, rowHdr, c).ToLowerInvariant() + Select Case h + Case "line no.", "line no" : cLine = c + Case "article no.", "article no" : cArticle = c + Case "goods description" : cDesc = c + Case "short description" : cShortDesc = c + Case "hs code" : cHs = c + Case "origin country" : cOrigin = c + Case "packages" : cPkgs = c + Case "package type" : cPkgType = c + Case "gross weight (kg)" : cGross = c + Case "net weight (kg)" : cNet = c + Case "unit price" : cUnit = c + Case "total value" : cTotal = c + Case "currency" : cCurr = c + End Select + Next + + ' Datenzeilen lesen: ab rowHdr+1 bis zur ersten komplett leeren Zeile + Dim rData As Integer = rowHdr + 1 + Dim lastRow As Integer = ws.UsedRange.Rows.Count + 5 + + While rData <= lastRow + Dim anyVal As Boolean = False + For c = 1 To usedCols + If GetCellStr(ws, rData, c) <> "" Then + anyVal = True + Exit For + End If + Next + If Not anyVal Then Exit While + + ' Werte nur holen, wenn es die Spalten gibt + Dim descTxt As String = If(cDesc > 0, GetCellStr(ws, rData, cDesc), "") + Dim hs As String = If(cHs > 0, GetCellStr(ws, rData, cHs), "") + + ' Wenn gar nichts Sinnvolles da ist, Zeile überspringen + If descTxt = "" AndAlso hs = "" AndAlso (cArticle <= 0 OrElse GetCellStr(ws, rData, cArticle) = "") Then + rData += 1 + Continue While + End If + + Dim pos As New cDakosy_EZA_Warenposition() + + If cLine > 0 Then pos.ezaWP_PositionsNummer = GetCellStr(ws, rData, cLine) + If cArticle > 0 Then pos.ezaWP_Artikelnummer = GetCellStr(ws, rData, cArticle) + + Dim shortTxt As String = If(cShortDesc > 0, GetCellStr(ws, rData, cShortDesc), "") + If shortTxt <> "" Then + pos.ezaWP_Warenbezeichnung = shortTxt + ElseIf descTxt <> "" Then + pos.ezaWP_Warenbezeichnung = descTxt + End If + If hs <> "" Then pos.ezaWP_WarennummerEZT = hs + + ' Optional: Zollartikel-Stammdaten überschreiben, wenn Kundennummer vorhanden + Dim Kdnr As String = If(Not String.IsNullOrWhiteSpace(kdnrImp), kdnrImp, If(Not String.IsNullOrWhiteSpace(kdnrCons), kdnrCons, "")) + If Kdnr <> "" Then + Try + Dim ZAL = cZollArtikel.GetListByKundenNr(Kdnr) ' Annahme: Methode vorhanden + ' Artikelnummer als Schlüssel: nur wenn vorhanden + Dim artKey As String = If(cArticle > 0, GetCellStr(ws, rData, cArticle), "") + If Not String.IsNullOrWhiteSpace(artKey) AndAlso ZAL IsNot Nothing Then + Dim Artikel = cZollArtikel.FindZollArtikelByNummer(ZAL, artKey) + If Artikel IsNot Nothing Then + If Artikel.zollArt_Warenbeschreibung IsNot Nothing AndAlso Artikel.zollArt_Warenbeschreibung.ToString() <> "" Then + pos.ezaWP_Warenbezeichnung = Artikel.zollArt_Warenbeschreibung.ToString() + End If + If Artikel.zollArt_Warencodenummer IsNot Nothing AndAlso Artikel.zollArt_Warencodenummer.ToString() <> "" Then + pos.ezaWP_WarennummerEZT = Artikel.zollArt_Warencodenummer.ToString() + End If + End If + End If + Catch + ' Stammdaten-Lookup ist optional; Fehler hier nicht fatal + End Try + End If + + Dim origin As String = If(cOrigin > 0, GetCellStr(ws, rData, cOrigin).ToUpperInvariant(), "") + If origin.Length >= 2 Then pos.ezaWP_UrsprungslandCode = origin.Substring(0, 2) + + If cPkgs > 0 Then + Dim pk As String = GetCellStr(ws, rData, cPkgs) + If pk <> "" Then pos.ezaWP_PackstueckAnzahl = pk + End If + If cPkgType > 0 Then + Dim pt As String = GetCellStr(ws, rData, cPkgType) + If pt <> "" Then pos.ezaWP_PackstueckArt = pt + End If + + If cGross > 0 Then + Dim g As Double = ToDoubleSafeVERAGTmpl(GetCellStr(ws, rData, cGross)) + If g > 0 Then pos.ezaWP_Rohmasse = g + End If + If cNet > 0 Then + Dim n As Double = ToDoubleSafeVERAGTmpl(GetCellStr(ws, rData, cNet)) + If n > 0 Then pos.ezaWP_Eigenmasse = n + End If + + If cTotal > 0 Then + Dim totalVal As Double = ToDoubleSafeVERAGTmpl(GetCellStr(ws, rData, cTotal)) + pos.ezaWP_Artikelpreis = totalVal + End If + + Dim curr As String = If(cCurr > 0, GetCellStr(ws, rData, cCurr).ToUpperInvariant(), "") + If curr = "" Then + If header.ContainsKey("Currency") Then + pos.ezaWP_ArtikelpreisWaehrung = header("Currency").ToUpperInvariant() + Else + pos.ezaWP_ArtikelpreisWaehrung = "EUR" + End If + Else + pos.ezaWP_ArtikelpreisWaehrung = curr + End If + + If HandelsRgNr <> "" Then + Try + pos.ezaWP_UNTERLAGEN.Add(New DAKOSY_Worker.cDakosy_EZA_WarenpositionVorgelegteUnterlagen With { + .ezaWpUl_Art = "N380", + .ezaWpUl_Bereich = "4", + .ezaWpUl_VorlageKz = "J", + .ezaWpUl_Nummer = HandelsRgNr, + .ezaWpUl_DatumAusstellung = Nothing + }) + Catch + End Try + End If + + EZA.eza_WARENPOS.Add(pos) + cnt += 1 + rData += 1 + End While + End If ' rowItemsTitle > 0 (wenn nicht gefunden: Items optional – Abschnitt wird einfach übersprungen) + + Catch ex As Exception + MsgBox("FEHLER beim Einlesen (" & filePath & "):" & vbCrLf & ex.Message, vbCritical) + Finally + ' --- COM sauber freigeben --- + Try + If wb IsNot Nothing Then wb.Close(False) + Catch + End Try + Try + If xlApp IsNot Nothing Then xlApp.Quit() + Catch + End Try + Try + If ws IsNot Nothing Then System.Runtime.InteropServices.Marshal.FinalReleaseComObject(ws) + Catch + End Try + Try + If wb IsNot Nothing Then System.Runtime.InteropServices.Marshal.FinalReleaseComObject(wb) + Catch + End Try + Try + If xlApp IsNot Nothing Then System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlApp) + Catch + End Try + ws = Nothing : wb = Nothing : xlApp = Nothing + GC.Collect() + GC.WaitForPendingFinalizers() + End Try + Next + + ' --- UI Refresh wie gehabt --- + Me.FindForm.SuspendLayout() + POSITIONEN.setValues(EZA, True) + btnPositionen.PerformClick() + Me.FindForm.ResumeLayout() + + MsgBox(cnt & " Datensätze wurden eingelesen.") + Me.Cursor = Cursors.Default + Return True + End Function + + Private Function GetCellStr(ws As Excel.Worksheet, r As Integer, c As Integer) As String + Try + Dim v = ws.Cells(r, c).Value + Return If(v IsNot Nothing, v.ToString().Trim(), "") + Catch + Return "" + End Try + End Function + + Private Function ToDoubleSafeVERAGTmpl(v As Object) As Double + If v Is Nothing Then Return 0 + Dim s As String = v.ToString().Trim().Replace(",", ".") + Dim d As Double + If Double.TryParse(s, NumberStyles.Any, CultureInfo.InvariantCulture, d) Then + Return d + End If + Return 0 + End Function + + Private Sub VERAGFormatÖffnen2025V1ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles VERAGFormatÖffnen2025V1ToolStripMenuItem.Click + Try + ' Zielpfad im Temp-Ordner festlegen + Dim tempFile As String = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "Customs_Clearance_Template_2025V1.xlsx") + + ' Ressource (als Binärdatei eingebunden) schreiben + System.IO.File.WriteAllBytes(tempFile, My.Resources.Customs_Clearance_Template) + + ' Datei mit dem Standardprogramm öffnen (z. B. Excel) + Process.Start(New ProcessStartInfo(tempFile) With {.UseShellExecute = True}) + + Catch ex As Exception + MsgBox("Fehler beim Öffnen der Vorlage: " & ex.Message, vbCritical) + End Try + End Sub + '================================================================================================================================ + '================================================================================================================================ + '================================================================================================================================ + End Class diff --git a/SDL/kunden/usrCntlCBAM.Designer.vb b/SDL/kunden/usrCntlCBAM.Designer.vb index 900c77a7..35257c4f 100644 --- a/SDL/kunden/usrCntlCBAM.Designer.vb +++ b/SDL/kunden/usrCntlCBAM.Designer.vb @@ -75,6 +75,7 @@ Partial Class usrCntlCBAM Me.btnCBAM_DS_DHF_UNISPED_GP = New System.Windows.Forms.Button() Me.btnCBAM_DS_TELOTEC_GP = New System.Windows.Forms.Button() Me.Button3 = New System.Windows.Forms.Button() + Me.lblKafkaCnt = New System.Windows.Forms.Label() Me.cntxtAddSdl.SuspendLayout() Me.MyPanel1.SuspendLayout() Me.SuspendLayout() @@ -726,11 +727,21 @@ Partial Class usrCntlCBAM Me.Button3.TextAlign = System.Drawing.ContentAlignment.MiddleRight Me.Button3.UseVisualStyleBackColor = True ' + 'lblKafkaCnt + ' + Me.lblKafkaCnt.AutoSize = True + Me.lblKafkaCnt.Location = New System.Drawing.Point(280, 609) + Me.lblKafkaCnt.Name = "lblKafkaCnt" + Me.lblKafkaCnt.Size = New System.Drawing.Size(10, 13) + Me.lblKafkaCnt.TabIndex = 51 + Me.lblKafkaCnt.Text = "-" + ' 'usrCntlCBAM ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.BackColor = System.Drawing.Color.White + Me.Controls.Add(Me.lblKafkaCnt) Me.Controls.Add(Me.Button3) Me.Controls.Add(Me.btnCBAM_DS_TELOTEC_GP) Me.Controls.Add(Me.btnCBAM_DS_DHF_UNISPED_GP) @@ -840,4 +851,5 @@ Partial Class usrCntlCBAM Friend WithEvents btnCBAM_DS_DHF_UNISPED_GP As Button Friend WithEvents btnCBAM_DS_TELOTEC_GP As Button Friend WithEvents Button3 As Button + Friend WithEvents lblKafkaCnt As Label End Class diff --git a/SDL/kunden/usrCntlCBAM.vb b/SDL/kunden/usrCntlCBAM.vb index 1a689494..808c8a90 100644 --- a/SDL/kunden/usrCntlCBAM.vb +++ b/SDL/kunden/usrCntlCBAM.vb @@ -1109,12 +1109,13 @@ Public Class usrCntlCBAM Dim dt = SQL.loadDgvBySql(SQL_DAKOSY, "AVISO", 600) - - + lblKafkaCnt.Text = "-" '----- kafka / Greenpulse ---------------------------------------------------------------------------------------------------------------------------------------- If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then + lblKafkaCnt.Text = "0/" & dt.Rows.Count + doCBAM_KafkaFromDakosy(dt) End If @@ -1131,8 +1132,12 @@ Public Class usrCntlCBAM Private Sub doCBAM_KafkaFromDakosy(dt As DataTable) Try - + Dim cnt = 1 For Each g In dt.Rows + lblKafkaCnt.Text = cnt & "/" & dt.Rows.Count + Me.Refresh() + cnt += 1 + Dim mrn As String = g("RegistriernummerATLAS") Dim EZA = cDakosyEZA.LOADByMRN(mrn, True) ' Objekt diff --git a/SDL/mdm/frmMDMDatenverarbetiung.vb b/SDL/mdm/frmMDMDatenverarbetiung.vb index 3a9dc2a4..dc051b0b 100644 --- a/SDL/mdm/frmMDMDatenverarbetiung.vb +++ b/SDL/mdm/frmMDMDatenverarbetiung.vb @@ -4795,7 +4795,7 @@ RabattBerechnen: Private Function AddAttachementToRE(pathFile As String, kdNr As Integer, RECHNUNG As cRechnungsausgang, Lieferant As String) As Boolean - If Not IO.File.Exists(pathFile) Then Return False + If Not System.IO.File.Exists(pathFile) Then Return False Dim fi As New System.IO.FileInfo(pathFile) diff --git a/SDL/packages.config b/SDL/packages.config index 4d5c8907..90278ae5 100644 --- a/SDL/packages.config +++ b/SDL/packages.config @@ -55,5 +55,6 @@ + \ No newline at end of file diff --git a/SDL/seriendruck/usrCntlFakturierung.vb b/SDL/seriendruck/usrCntlFakturierung.vb index 2d5f8d0b..57c44e47 100644 --- a/SDL/seriendruck/usrCntlFakturierung.vb +++ b/SDL/seriendruck/usrCntlFakturierung.vb @@ -1060,7 +1060,7 @@ Public Class usrcntlFakturierung 'TODO: Prüfung, damit anhänge nicht doppelt eingearbeitet werden! -> ist DBteschnisch unterbunden mit PrimaryKey-Einschränkung!!! - If Not IO.File.Exists(pathFile) Then Return False + If Not System.IO.File.Exists(pathFile) Then Return False Dim fi As New System.IO.FileInfo(pathFile) diff --git a/SDL/zoll/frmZollBrgBuchungenFremd.Designer.vb b/SDL/zoll/frmZollBrgBuchungenFremd.Designer.vb index 51e01ee0..d2133c37 100644 --- a/SDL/zoll/frmZollBrgBuchungenFremd.Designer.vb +++ b/SDL/zoll/frmZollBrgBuchungenFremd.Designer.vb @@ -22,16 +22,121 @@ Partial Class frmZollBrgBuchungenFremd 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. _ Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmZollBrgBuchungenFremd)) + Me.Button1 = New System.Windows.Forms.Button() + Me.Button2 = New System.Windows.Forms.Button() + Me.Label1 = New System.Windows.Forms.Label() + Me.Button3 = New System.Windows.Forms.Button() + Me.MyDatagridview1 = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components) + Me.clmnMRN = New System.Windows.Forms.DataGridViewTextBoxColumn() + Me.cbxEZollDaten = New System.Windows.Forms.CheckBox() + CType(Me.MyDatagridview1, System.ComponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() ' + 'Button1 + ' + Me.Button1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.Button1.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer)) + Me.Button1.Image = Global.SDL.My.Resources.Resources.Excel_logo + Me.Button1.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.Button1.Location = New System.Drawing.Point(995, 609) + Me.Button1.Name = "Button1" + Me.Button1.Size = New System.Drawing.Size(121, 37) + Me.Button1.TabIndex = 18 + Me.Button1.Text = "Excel" + Me.Button1.UseVisualStyleBackColor = True + ' + 'Button2 + ' + Me.Button2.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.Button2.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer)) + Me.Button2.Location = New System.Drawing.Point(995, 26) + Me.Button2.Name = "Button2" + Me.Button2.Size = New System.Drawing.Size(121, 37) + Me.Button2.TabIndex = 19 + Me.Button2.Text = "Prüfen" + Me.Button2.UseVisualStyleBackColor = True + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(13, 26) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(346, 13) + Me.Label1.TabIndex = 20 + Me.Label1.Text = "MRN Nummern in Liste eintrtagen und mit ""Prüfen"" die Daten ergänzen." + ' + 'Button3 + ' + Me.Button3.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.Button3.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer)) + Me.Button3.Location = New System.Drawing.Point(868, 26) + Me.Button3.Name = "Button3" + Me.Button3.Size = New System.Drawing.Size(121, 37) + Me.Button3.TabIndex = 21 + Me.Button3.Text = "Tabelle leeren" + Me.Button3.UseVisualStyleBackColor = True + ' + 'MyDatagridview1 + ' + Me.MyDatagridview1.AKTUALISIERUNGS_INTERVALL = -1 + Me.MyDatagridview1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.MyDatagridview1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize + Me.MyDatagridview1.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.clmnMRN}) + Me.MyDatagridview1.Location = New System.Drawing.Point(12, 69) + Me.MyDatagridview1.Name = "MyDatagridview1" + Me.MyDatagridview1.Size = New System.Drawing.Size(1104, 534) + Me.MyDatagridview1.TabIndex = 0 + ' + 'clmnMRN + ' + Me.clmnMRN.HeaderText = "MRN" + Me.clmnMRN.Name = "clmnMRN" + ' + 'cbxEZollDaten + ' + Me.cbxEZollDaten.AutoSize = True + Me.cbxEZollDaten.Checked = True + Me.cbxEZollDaten.CheckState = System.Windows.Forms.CheckState.Checked + Me.cbxEZollDaten.Location = New System.Drawing.Point(995, 3) + Me.cbxEZollDaten.Name = "cbxEZollDaten" + Me.cbxEZollDaten.Size = New System.Drawing.Size(85, 17) + Me.cbxEZollDaten.TabIndex = 22 + Me.cbxEZollDaten.Text = "E-Zoll Daten" + Me.cbxEZollDaten.UseVisualStyleBackColor = True + ' 'frmZollBrgBuchungenFremd ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(1128, 658) + Me.Controls.Add(Me.cbxEZollDaten) + Me.Controls.Add(Me.Button3) + Me.Controls.Add(Me.Label1) + Me.Controls.Add(Me.Button2) + Me.Controls.Add(Me.Button1) + Me.Controls.Add(Me.MyDatagridview1) + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) Me.Name = "frmZollBrgBuchungenFremd" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen Me.Text = "Brg-Buchungen Fremd" + CType(Me.MyDatagridview1, System.ComponentModel.ISupportInitialize).EndInit() Me.ResumeLayout(False) + Me.PerformLayout() End Sub + + Friend WithEvents MyDatagridview1 As VERAG_PROG_ALLGEMEIN.MyDatagridview + Friend WithEvents clmnMRN As DataGridViewTextBoxColumn + Friend WithEvents Button1 As Button + Friend WithEvents Button2 As Button + Friend WithEvents Label1 As Label + Friend WithEvents Button3 As Button + Friend WithEvents cbxEZollDaten As CheckBox End Class diff --git a/SDL/zoll/frmZollBrgBuchungenFremd.resx b/SDL/zoll/frmZollBrgBuchungenFremd.resx index 1af7de15..59825072 100644 --- a/SDL/zoll/frmZollBrgBuchungenFremd.resx +++ b/SDL/zoll/frmZollBrgBuchungenFremd.resx @@ -117,4 +117,867 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + True + + + + + AAABAAEAgIAAAAEAGAAoyAAAFgAAACgAAACAAAAAAAEAAAEAGAAAAAAAAMgAAMQOAADEDgAAAAAAAAAA + AACRbEd5TB+CWC59USZ8USV9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ8USV9USaCWC55TB+RbEd4Sx5mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB4Sx5/VClmMwBuPg5r + OglrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOgluPg5mMwB/VCl0RhhmMwBmMwBnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFmMwBmMwB0RhhzRBVmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBz + RBV3Sh1mMwBnNQJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBnNQJmMwB3Sh18UCRmMwBqOQdnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFqOQdmMwB8UCR9USZmMwBrOQhn + NAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9 + USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwDm4N3///////// + ///////39fR0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////// + //////////////////////////////////////////////90SSZmMwBmMwBmMwBmMwBmMwB0SSb39fT/ + //////////////9mMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////////+YfWtmMwBmMwBm + MwBmMwB0SSbu6+n////////////39fR0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT///// + ///////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5zUy8X////////////////L + v7itmo1mMwBmMwCYfWv///////90SSZmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhn + NAFmMwBmMwBmMwB0SSb////////////////////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwDu6+n///////////////////////////////////////////////////////////+j + jH1mMwBmMwBmMwBmMwBmMwBmMwDm4N3///////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwC3p5z/ + ///////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwCYfWv////////////////Bs6pmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwB0SSb///////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCt + mo3////////////////////////////////////m4N2Mbli3p5z///////+jjH1mMwBmMwBmMwBmMwBm + MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwCMblj///////////////////////////+M + blhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////////////////// + ///////////////////////////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwDBs6r///////////////+3 + p5xmMwBmMwBmMwBmMwBmMwBmMwDm4N3///////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwDU + y8X///////////////+AXUJmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv///////////////////90SSZm + MwBmMwBmMwBmMwBmMwBmMwBmMwDLv7j////////////////////////////////////////////39fTm + 4N3///////+3p5xmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwC3 + p5z////////////////////////////d1tFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3 + p5z////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwCjjH3////////////////Lv7hmMwBmMwBmMwBmMwBmMwCAXUL///////////////////90 + SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL39fT////////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwBm + MwC3p5z////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z////////////////////U + y8WAXUJmMwBmMwC3p5z39fT////////////////////Uy8VmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9 + USZ9USZmMwBrOQhnNAFmMwBmMwBmMwDBs6r////////////////u6+n///////////+tmo1mMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj///////////////////90SSZmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj////////////////m4N1mMwBmMwBmMwBm + MwBmMwC3p5z////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z///////// + ///////////////////////////////////////////////////////Uy8VmMwBmMwBmMwBmMwBmMwBm + MwBmMwD39fT////////////////Lv7hmMwBmMwBmMwBmMwBmMwCAXULu6+n////////////////39fRm + MwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwDm4N3///////////// + //+jjH3////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb///////////// + //////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD3 + 9fT///////////////90SSZmMwBmMwBmMwBmMwDm4N3///////////////+jjH1mMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwDu6+n///////////////////////////////////////////////////// + //////+3p5xmMwBmMwBmMwBmMwBmMwBmMwCjjH3///////////////////+MblhmMwBmMwBmMwBmMwBm + MwBmMwCMblj///////////////////90SSZmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhn + NAFmMwBmMwBmMwD39fT///////////////9mMwDLv7j///////////+3p5xmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwDm4N3////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////+YfWtmMwBmMwBmMwCAXUL///////// + ///////39fR0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv///////////////////// + //////////////////////////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwC3p5z///////// + //////////9mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////+jjH1mMwBmMwBmMwBm + MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwCMblj////////////////m4N1mMwCAXUL39fT/ + ///////39fSAXUJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r////////////////Uy8VmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z///////////// + ///////////////////////////////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwDUy8X////////////u6+lmMwBmMwBmMwBmMwCMblj///////////////////90SSZmMwBm + MwBmMwBmMwBmMwBmMwC3p5z///////////////////9mMwBmMwBmMwB0SSb///////////////////// + //////////////+3p5xmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwCjjH3/ + ///////////////Uy8VmMwBmMwC3p5z////////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwC3p5z////////////////////////////////////////////////////m4N1mMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwCjjH3////////////////////////////////////////////////////////////d + 1tGMblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////+tmo1mMwBmMwBmMwCt + mo3////////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z///////////////////90SSZm + MwBmMwBmMwDm4N3////////////////////////////////Uy8VmMwBmMwBmMwBmMwBnNAFrOQhmMwB9 + USZ9USZmMwBrOQhnNAFmMwBmMwC3p5z///////////////+3p5xmMwBmMwB0SSb39fT///////////+Y + fWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj///////////////////////////////////////// + //////////////9mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb///////////////////////////// + //////////////////////////////////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3 + p5z////////////39fR0SSZmMwBmMwDBs6r////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBm + MwCjjH3///////////////////+jjH1mMwBmMwBmMwDBs6r////////////////////////////////3 + 9fRmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwDUy8X///////////////+t + mo1mMwBmMwBmMwCtmo3////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT///// + //////////////////////////////////////////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwDu6+n///////////////90SSZmMwBmMwBmMwBmMwBmMwCjjH3m4N3////////////////39fR0SSZm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDu6+n///////////+3p5xmMwBmMwDUy8X///////////// + //+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb////////////////////Bs6pmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhn + NAFmMwBmMwDu6+n///////////////+MblhmMwBmMwBmMwBmMwDu6+n///////////+tmo1mMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwDd1tH////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////+YfWtmMwBmMwBmMwBmMwBmMwBm + MwB0SSbu6+n///////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3///////// + ///39fSAXUJmMwD39fT///////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///// + ///////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r////Uy8W3p5y3p5yYfWtmMwBmMwBm + MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwB0SSb///////////////////90SSZmMwBmMwBmMwBm + MwCtmo3////////////u6+l0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r////////////////m4N1m + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z///////// + //////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwDLv7j////////////////Bs6pmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwDUy8X////////////Lv7h0SSb///////////////////90SSZmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwCYfWv///////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwDu + 6+n///////////////+jjH1mMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwCYfWv///// + ///////////u6+lmMwBmMwBmMwBmMwBmMwBmMwDd1tH///////////+3p5xmMwBmMwBmMwBmMwBmMwBm + MwBmMwCjjH3///////////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwCYfWv////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3///// + //////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////+tmo3/ + ///////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r///////////////// + //+YfWtmMwBmMwBmMwBmMwBmMwCtmo3////////////////u6+lmMwBmMwBmMwBmMwBnNAFrOQhmMwB9 + USZ9USZmMwBrOQhnNAFmMwC3p5z////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwCYfWv///// + //////////+AXUJmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////////+MblhmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb////////////////u6+lmMwBm + MwBmMwBmMwBmMwCAXULLv7j///////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwC3p5z////////////////////////////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwDd1tH///////////////////+3p5x0SSZmMwBmMwC3p5z///////////////////+t + mo1mMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwDLv7j////////////////Bs6pm + MwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT/ + //////////////////////////////////////////////////////////90SSZmMwBmMwBmMwBmMwBm + MwBmMwDm4N3////////////////////////////////////////////////////////////Bs6pmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDu6+n///////////////////////////+3 + p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////////////// + ///////////////////////////Lv7hmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhn + NAFmMwDm4N3///////////////+tmo1mMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////+Y + fWtmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////////////////////////////////////// + //////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwDLv7j///////////////////////////////////// + ///////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCj + jH3///////////////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwCtmo339fT///////////////////////////////////////+tmo1mMwBmMwBmMwBmMwBmMwBm + MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAF0SSb///////////////////+MblhmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwDLv7j////////////u6+l0SSZmMwBmMwBmMwBmMwBmMwC3p5z///////////////// + //////////////////////////////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwC3p5z///// + ///////////////////////////////////////m4N23p5yMblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH///////////////////////9mMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH23p5z39fT////////////////Uy8W3 + p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9 + USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhn + NAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9 + USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ8UCRmMwBqOQdn + NAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBnNAFqOQdmMwB8UCR3Sh1mMwBnNQJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNQJmMwB3Sh1zRBVmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBz + RBV0RhhmMwBmMwBnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFmMwBmMwB0Rhh/VClmMwBuPg5rOglrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOgluPg5mMwB/VCl4Sx5mMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwB4Sx6RbEd5TB+CWC59USZ8USV9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ8USV9USaCWC55TB+RbEf///////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////Bs6rBs6qYfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWvBs6rBs6r///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////Uy8WYfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWvUy8X////////////////////////////////////////B + s6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwCjjH3Bs6rBs6r39fT///////////////////////////////////////////////////////// + ///Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3///////////////////////////////////////////// + ///////////////////////////////////////////////////////////////d1tGMblhmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWvm4N3/ + ///////////////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMbljLv7j///////////////// + ///////////////////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X////////////////////////////d1tFmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwCMbljm4N3////////////////////////////////////////////m4N1mMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwC3p5z///////////////////////////////////////////////////////////// + //////////////////////////////////////+tmo1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDLv7j///////// + ///////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r///////////////////// + ///////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3///////////////////////////// + ///////////////////////////////////////////////////////////////////Bs6pmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwDm4N3///////////////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwCtmo3///////////////////////////////////////+MblhmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCA + XUL///////////////////////////////////////////////////////////////////////////// + ///////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL39fT///////////////// + //+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCtmo3///////////////////////////// + //////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT///////////////////////////////////////// + //////////////////////////////////////////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwDBs6r///////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwDBs6r////////////////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////// + ///////////////////////////////////////////////////////////////////////////d1tFm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6rd1tH////////39fTBs6qAXUJm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb////////////////////Lv7hmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH////////////////////////////Uy8VmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwDLv7j///////////////////////////////////////////////////////// + //////////////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3/ + //////////////////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd + 1tH////////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r///////////// + ///////Uy8XBs6qMblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL///// + ///////////////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////+AXUJmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwCtmo3///////////////////////////////////////+AXUJmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwC3p5z////////////////////////////////d1tGMblhmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r///////////////////////////9mMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwB0SSb///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL39fT///////////////////// + ///////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCtmo3///////////// + //////+AXUJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj///////////////////////////// + //////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb39fT///////////// + //////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3///////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwDBs6r////////////////////////////////////////////d1tFmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwCYfWv///////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0 + SSb///////////////////////////////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwDBs6r///////////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwDUy8X///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///u6+nBs6rBs6rBs6qYfWtmMwBmMwBmMwDu6+n///////////////////////////////////////// + ///Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv///////////////////+3p5xmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDu6+n////////////////////////////////////////u + 6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj////////////////////////Bs6pm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////u6+l0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCY + fWv////////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////// + //////////////////////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwDm4N3////////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////u6+m3p5xmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3////////////////////m4N1mMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwDBs6r////////////////////////////////////////////d1tFmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r////////////////////u6+lmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwCMblj///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////Uy8XB + s6p0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z///////////// + //////////9mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCtmo3///////////////////////// + //////////////////////+AXUJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3///////// + //////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////m4N3Bs6qMblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwDUy8X///////////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwCMblj///////////////////////////////////////////////+3p5xmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwB0SSb///////////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwDm4N3///////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////Bs6qAXUJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb39fT///////////////////////+jjH1m + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb///////////////////////////////////////// + ///////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT///////////////////+t + mo1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////Lv7hmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r/ + ///////////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3///// + ///////////////////////////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwDm4N3////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r/ + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwCAXUL39fT////////////////////////////Uy8VmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////////////////////////////////////90SSZm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH////////////////////Uy8VmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3///////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSbm4N3///////////////////// + ///////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r///////////////////// + //////////////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///// + ///////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj///////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////Bs6pmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCM + bljm4N3///////////////////////////////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwCjjH3///////////////////////////////////////////////+YfWtmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwDLv7j///////////////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwD39fT///////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////39fR0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r///////////////////////////////////////////////+M + blhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj///////////////////////////////////// + //////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDLv7j///////////////////// + //+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3///////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWvBs6r///////////////////////// + //////////////////////////////+tmo1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD///// + //////////////////////////////////////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwDd1tH///////////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDL + v7j///////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////+Mblhm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCtmo3Bs6r///// + ///////////////////////////////////////////////////////////////Bs6pmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3///////////////////////////////////////////+AXUJm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH////////////////////////Bs6pmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////9mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwCtmo3Bs6r39fT///////////////////////////////////////////////////////////////// + ///////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////// + ///////////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDu6+n///// + ///////////////////d1tFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3///////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////u6+lmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwB0SSbLv7j///////////////////////////////////////////////// + ///////////////////////////////////////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwC3p5z////////////////////////////////////////Uy8VmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwB0SSb////////////////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwCAXUL///////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSbu6+n///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3///////////////////////////////// + //////+tmo1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3///////////////////////// + //////90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwC3p5z////////////////////////////////////39fRmMwBmMwB0SSbBs6rBs6r39fT///////// + //////////////////////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL/ + ///////////////////////////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwDBs6r///////////////////////////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwDm4N3///////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////39fRmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z////////////////////////////////////Bs6pm + MwBmMwBmMwBmMwBmMwBmMwBmMwCtmo3Bs6rBs6r///////////////////////////+3p5xmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT////////////////////////////39fSMblhmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDu6+n///////////////////////////////+3p5xmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDLv7j///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////// + ///////////////////////u6+l0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD///////// + ///////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3///////////// + ///////////u6+mMblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv///////////// + ///////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////+jjH1mMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwCjjH3////////////////////////u6+mAXUJmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwCYfWv////////////////////////////d1tFmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwDLv7j////////////////Uy8W3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwDd1tH////////////////////////////////////d1tFmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwCYfWv///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMbljBs6r////////d1tG3 + p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH///////////////////////// + ///39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv///////////////////////////////// + ///////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////39fR0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCM + blj///////////////////////////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSbu6+n/ + //////////////////////////////////////////+AXUJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwD39fT///////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////L + v7hmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH///////////////////////////////////+YfWtmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwDLv7j///////////////////////////////////////////////+jjH1m + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z///////////////// + //////////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r///////////////////////// + //////////////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r///// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////39fSAXUJmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwCYfWv////////////////////////////////////////////Bs6pmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDB + s6r////////////////////////////////////////////////////////Lv7hmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwC3p5z///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////u6+mMblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv///////////////////////////////////////// + ///////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwB0SSbUy8X///////////////////////////////////////////////// + ///////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////+jjH1mMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDLv7j///////////// + ///////////////////////////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSbBs6r///////////////////////// + ///////////////////////////////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwB0SSb///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////d1tGYfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwDBs6r39fT///////////////////////////////////////////////////////////+AXUJm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXULBs6rBs6rm4N3/ + //////////////////////////////////////////////////////////////////////////////+A + XUJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////39fTBs6rBs6pmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwCjjH3Bs6rUy8X///////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + \ No newline at end of file diff --git a/SDL/zoll/frmZollBrgBuchungenFremd.vb b/SDL/zoll/frmZollBrgBuchungenFremd.vb index 01c69b55..7c4a0d7e 100644 --- a/SDL/zoll/frmZollBrgBuchungenFremd.vb +++ b/SDL/zoll/frmZollBrgBuchungenFremd.vb @@ -1,3 +1,232 @@ -Public Class frmZollBrgBuchungenFremd +Imports System.Data +Imports System.Data.SqlClient +Imports System.Linq + + + + +Public Class frmZollBrgBuchungenFremd + + Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL + + Public Sub EnrichDgvWithMrnData(dgv As DataGridView) + If dgv Is Nothing OrElse dgv.Columns.Count = 0 Then Exit Sub + + ' 1) Zielspalten in der DGV sicherstellen + EnsureDgvColumn(dgv, "Datum", GetType(Date)) + EnsureDgvColumn(dgv, "CustomsOfficeOfDestination", GetType(String)) + EnsureDgvColumn(dgv, "PlateNumber", GetType(String)) + EnsureDgvColumn(dgv, "Customer", GetType(String)) + EnsureDgvColumn(dgv, "Agent", GetType(String)) + EnsureDgvColumn(dgv, "Comment", GetType(String)) + dgv.Columns("Datum").DefaultCellStyle.Format = "dd.MM.yyyy" + + ' 2) MRNs aus der ersten Spalte einsammeln (Distinct, nicht leer) + Dim mrns As List(Of String) = + (From r As DataGridViewRow In dgv.Rows + Where Not r.IsNewRow + Let v = If(r.Cells(0).Value, "").ToString().Trim() + Where v <> "" + Select v).Distinct(StringComparer.OrdinalIgnoreCase).ToList() + + If mrns.Count = 0 Then Exit Sub + + ' 3) Daten aus DB laden (beide Quellen) + Dim results As Dictionary(Of String, MrnRow) = LoadMrnData(mrns) + + ' 4) Ergebnisse in die DGV zurückschreiben + For Each row As DataGridViewRow In dgv.Rows + If row.IsNewRow Then Continue For + Dim key As String = If(row.Cells(0).Value, "").ToString().Trim() + If key = "" Then Continue For + + Dim hit As MrnRow = Nothing + If results.TryGetValue(key, hit) Then + row.Cells("Datum").Value = If(hit.Datum.HasValue, hit.Datum.Value, CType(Nothing, Date?)) + row.Cells("CustomsOfficeOfDestination").Value = hit.CustomsOfficeOfDestination + row.Cells("PlateNumber").Value = hit.PlateNumber + row.Cells("Customer").Value = hit.Customer + row.Cells("Agent").Value = hit.Firma + row.Cells("Comment").Value = "" + Else + ' Falls nicht gefunden, optional leeren: + row.Cells("Datum").Value = Nothing + row.Cells("CustomsOfficeOfDestination").Value = Nothing + row.Cells("PlateNumber").Value = Nothing + row.Cells("Customer").Value = Nothing + row.Cells("Agent").Value = Nothing + row.Cells("Comment").Value = "Not found" + End If + Next + End Sub + + Private Sub EnsureDgvColumn(dgv As DataGridView, colName As String, t As Type) + If Not dgv.Columns.Contains(colName) Then + Dim c As New DataGridViewTextBoxColumn() + c.Name = colName + c.HeaderText = colName + dgv.Columns.Add(c) + End If + End Sub + + Private Class MrnRow + Public Property MRN As String + Public Property Datum As Date? + Public Property CustomsOfficeOfDestination As String + Public Property PlateNumber As String + Public Property Customer As String + Public Property Firma As String + Public Property Source As String ' "NCTS" oder "TELOTEC" + End Class + + Private Function LoadMrnData(mrns As List(Of String)) As Dictionary(Of String, MrnRow) + Dim res As New Dictionary(Of String, MrnRow)(StringComparer.OrdinalIgnoreCase) + + Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL() + ' ---------- DAKOSY / NCTS ---------- + Dim nctsParam = mrns.Select(Function(val, i) "@pN" & i).ToArray() + Dim nctsSql As String = + "SELECT + ncts_MRN AS MRN, + CAST(ncts_Trans_DatumZeit AS date) AS Datum, + ncts_CustomsOfficeOfDestinationDeclared AS CustomsOfficeOfDestination, + ISNULL(ncts_DepartureTransportMeans_1_IdentificationNumber, ncts_ActiveBorderTransportMeans_1_IdentificationNumber) AS PlateNumber, + [Aviso].Auftraggeber AS Customer, + CASE + WHEN LEFT(ncts_ObjectName,4) IN ('4801','4802') THEN 'ATILLA' + WHEN LEFT(ncts_ObjectName,4) = '5601' THEN 'UNISPED' + ELSE 'VERAG' + END AS Firma + FROM [VERAG].[dbo].[tblDakosy_NCTSOut004] + INNER JOIN tblDakosy_Zollanmeldungen ON ncts_dyaAnmID = dy_Id + LEFT JOIN [SQLGUIDE01].[AVISO].[dbo].[Aviso] ON dy_AvisoId = Avisoid + WHERE ncts_MRN IN (" & String.Join(",", nctsParam) & ");" + + Using cmd As New SqlCommand(nctsSql, conn) + For i = 0 To mrns.Count - 1 : cmd.Parameters.AddWithValue(nctsParam(i), mrns(i)) : Next + Using rd = cmd.ExecuteReader() + While rd.Read() + Dim m As New MrnRow With { + .MRN = rd("MRN").ToString(), + .Datum = If(IsDBNull(rd("Datum")), CType(Nothing, Date?), CType(rd("Datum"), Date)), + .CustomsOfficeOfDestination = If(rd("CustomsOfficeOfDestination") Is DBNull.Value, Nothing, rd("CustomsOfficeOfDestination").ToString()), + .PlateNumber = If(rd("PlateNumber") Is DBNull.Value, Nothing, rd("PlateNumber").ToString()), + .Customer = If(rd("Customer") Is DBNull.Value, Nothing, rd("Customer").ToString()), + .Firma = If(rd("Firma") Is DBNull.Value, Nothing, rd("Firma").ToString()), + .Source = "DAKOSY/NCTS" + } + res(m.MRN) = m ' NCTS hat Vorrang + End While + End Using + End Using + + ' ---------- TELOTEC ---------- + Dim telParam = mrns.Select(Function(val, i) "@pT" & i).ToArray() + Dim teloSql As String = + "SELECT + telanm_CRN AS MRN, + CAST(Hea_DecDT AS date) AS Datum, + DestCO_Ref AS CustomsOfficeOfDestination, + Transp_CrossIdnt AS PlateNumber, + CAST(Mandant_ID AS nvarchar(50)) AS Customer, + '' AS Firma + FROM [VERAG].[dbo].[tblTelotec_Anmeldung] + WHERE telanm_CRN IN (" & String.Join(",", telParam) & ") + AND [telnam_aktuellsteNachricht] = 1;" + + Using cmd As New SqlCommand(teloSql, conn) + For i = 0 To mrns.Count - 1 : cmd.Parameters.AddWithValue(telParam(i), mrns(i)) : Next + Using rd = cmd.ExecuteReader() + While rd.Read() + Dim mrn As String = rd("MRN").ToString() + If Not res.ContainsKey(mrn) Then + Dim m As New MrnRow With { + .MRN = mrn, + .Datum = If(IsDBNull(rd("Datum")), CType(Nothing, Date?), CType(rd("Datum"), Date)), + .CustomsOfficeOfDestination = If(rd("CustomsOfficeOfDestination") Is DBNull.Value, Nothing, rd("CustomsOfficeOfDestination").ToString()), + .PlateNumber = If(rd("PlateNumber") Is DBNull.Value, Nothing, rd("PlateNumber").ToString()), + .Customer = If(rd("Customer") Is DBNull.Value, Nothing, rd("Customer").ToString()), + .Firma = "", + .Source = "TELOTEC" + } + res.Add(mrn, m) + End If + End While + End Using + End Using + + + End Using + If cbxEZollDaten.Checked Then + + Using conn As SqlConnection = SQL.GetNewOpenConnectionEZOLL() + ' ---------- EZOLL ---------- + ' Hinweis: Falls die View in einer anderen DB/Connection liegt, ggf. eigene Connection öffnen (z. B. SQL.GetNewOpenConnectionEZOLL()). + Dim ezParam = mrns.Select(Function(val, i) "@pE" & i).ToArray() + Dim ezSql As String = + "SELECT + ISNULL(v.CRN,'') AS MRN, + CAST(v.AnmeldungsDatum AS date) AS Datum, + ISNULL(v.Bestimmungszollstelle,'') AS CustomsOfficeOfDestination, + (SELECT TOP 1 t.CrossIdnt FROM ezoll.dbo.zsAnmTransp t WHERE t.AnmID = v.AnmID) AS PlateNumber, + (SELECT TOP 1 c.Na FROM ezoll.dbo.zsAnmCarrTra c WHERE c.AnmID = v.AnmID) AS Firma, + (SELECT TOP 1 c.Na FROM ezoll.dbo.zsAnmCarrTra c WHERE c.AnmID = v.AnmID) AS Customer + FROM vwVERAG_Zolaris_EZoll_NCTS_Datenübernahme_Eroeffnung v + WHERE v.CRN IN (" & String.Join(",", ezParam) & ");" + + Using cmd As New SqlCommand(ezSql, conn) + For i = 0 To mrns.Count - 1 : cmd.Parameters.AddWithValue(ezParam(i), mrns(i)) : Next + Using rd = cmd.ExecuteReader() + While rd.Read() + Dim mrn As String = rd("MRN").ToString() + If mrn = "" Then Continue While + If Not res.ContainsKey(mrn) Then + Dim m As New MrnRow With { + .MRN = mrn, + .Datum = If(IsDBNull(rd("Datum")), CType(Nothing, Date?), CType(rd("Datum"), Date)), + .CustomsOfficeOfDestination = If(rd("CustomsOfficeOfDestination") Is DBNull.Value, Nothing, rd("CustomsOfficeOfDestination").ToString()), + .PlateNumber = If(rd("PlateNumber") Is DBNull.Value, Nothing, rd("PlateNumber").ToString()), + .Customer = If(rd("Customer") Is DBNull.Value, Nothing, rd("Customer").ToString()), + .Firma = If(rd("Firma") Is DBNull.Value, Nothing, rd("Firma").ToString()), + .Source = "EZOLL" + } + res.Add(mrn, m) + End If + End While + End Using + End Using + + End Using + + End If + Return res + End Function + + Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click + EnrichDgvWithMrnData(MyDatagridview1) + End Sub + + Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click + Me.Cursor = Cursors.WaitCursor + cProgramFunctions.genExcelFromDGV_NEW(MyDatagridview1, False) + Me.Cursor = Cursors.Default + End Sub + + Public Sub ClearDgvKeepMrn(dgv As DataGridView) + If dgv Is Nothing Then Exit Sub + + ' --- Spalten löschen (alle außer der ersten) --- + For i As Integer = dgv.Columns.Count - 1 To 1 Step -1 + dgv.Columns.RemoveAt(i) + Next + + ' --- Zeilen löschen --- + dgv.Rows.Clear() + End Sub + + Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click + ClearDgvKeepMrn(MyDatagridview1) + End Sub + End Class \ No newline at end of file diff --git a/SDL/zoll/usrCntlBrgBuchungenFremd.Designer.vb b/SDL/zoll/usrCntlBrgBuchungenFremd.Designer.vb index 65affe11..377b0ad5 100644 --- a/SDL/zoll/usrCntlBrgBuchungenFremd.Designer.vb +++ b/SDL/zoll/usrCntlBrgBuchungenFremd.Designer.vb @@ -37,6 +37,7 @@ Partial Class usrCntlBrgBuchungenFremd Me.MyComboBox1 = New VERAG_PROG_ALLGEMEIN.MyComboBox() Me.Label1 = New System.Windows.Forms.Label() Me.Label8 = New System.Windows.Forms.Label() + Me.Button1 = New System.Windows.Forms.Button() CType(Me.picDurmaz, System.ComponentModel.ISupportInitialize).BeginInit() Me.GroupBox2.SuspendLayout() Me.SuspendLayout() @@ -142,6 +143,7 @@ Partial Class usrCntlBrgBuchungenFremd ' 'GroupBox2 ' + Me.GroupBox2.Controls.Add(Me.Button1) Me.GroupBox2.Controls.Add(Me.cbxEZollDaten) Me.GroupBox2.Controls.Add(Me.MyComboBox1) Me.GroupBox2.Controls.Add(Me.Label1) @@ -206,6 +208,17 @@ Partial Class usrCntlBrgBuchungenFremd Me.Label8.TabIndex = 14 Me.Label8.Text = "Bürgschaftsbuchungen Fremd" ' + 'Button1 + ' + Me.Button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.Button1.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer)) + Me.Button1.Location = New System.Drawing.Point(6, 84) + Me.Button1.Name = "Button1" + Me.Button1.Size = New System.Drawing.Size(121, 37) + Me.Button1.TabIndex = 17 + Me.Button1.Text = "MRN Liste prüfen" + Me.Button1.UseVisualStyleBackColor = True + ' 'usrCntlBrgBuchungenFremd ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) @@ -237,5 +250,5 @@ Partial Class usrCntlBrgBuchungenFremd Friend WithEvents MyComboBox1 As VERAG_PROG_ALLGEMEIN.MyComboBox Friend WithEvents Label1 As System.Windows.Forms.Label Friend WithEvents cbxEZollDaten As System.Windows.Forms.CheckBox - + Friend WithEvents Button1 As Button End Class diff --git a/SDL/zoll/usrCntlBrgBuchungenFremd.vb b/SDL/zoll/usrCntlBrgBuchungenFremd.vb index 6c0f1b6f..c9ab8337 100644 --- a/SDL/zoll/usrCntlBrgBuchungenFremd.vb +++ b/SDL/zoll/usrCntlBrgBuchungenFremd.vb @@ -176,4 +176,9 @@ Public Class usrCntlBrgBuchungenFremd Private Sub MyComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles MyComboBox1.SelectedIndexChanged cbxEZollDaten.Enabled = (MyComboBox1._value = "VERAG/ATILLA") End Sub + + Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click + Dim f As New frmZollBrgBuchungenFremd + f.Show(Me) + End Sub End Class diff --git a/VERAG_PROG_ALLGEMEIN/Benutzerdefinierte Steuerelemente/MyDatagridview.vb b/VERAG_PROG_ALLGEMEIN/Benutzerdefinierte Steuerelemente/MyDatagridview.vb index 12ef5fcb..a923e844 100644 --- a/VERAG_PROG_ALLGEMEIN/Benutzerdefinierte Steuerelemente/MyDatagridview.vb +++ b/VERAG_PROG_ALLGEMEIN/Benutzerdefinierte Steuerelemente/MyDatagridview.vb @@ -319,4 +319,184 @@ Public Class MyDatagridview End Sub + ' ======================================================== + ' ================== COPY/PASTE SUPPORT ================== + ' ======================================================== + ' Standard: Nur erste Spalte (MRN) befüllen. Auf False setzen, um Blöcke (mehrere Spalten) zuzulassen. + + Public Property _PasteSingleColumn As Boolean = True + + Protected Overrides Sub OnKeyDown(e As KeyEventArgs) + ' Strg+V oder Shift+Insert => Einfügen + If (e.Control AndAlso e.KeyCode = Keys.V) OrElse (e.Shift AndAlso e.KeyCode = Keys.Insert) Then + PasteFromClipboard() + e.Handled = True + Return + End If + MyBase.OnKeyDown(e) + End Sub + + ''' + ''' Fügt den Clipboard-Text (Excel: TAB/CRLF) in die DGV ein. + ''' + Public Sub PasteFromClipboard() + Dim text As String = Clipboard.GetText() + If String.IsNullOrWhiteSpace(text) Then Exit Sub + + Dim lines = text.Split({vbCrLf, vbLf, vbCr}, StringSplitOptions.None) + If lines.Length > 0 AndAlso lines(lines.Length - 1).Trim() = "" Then + ReDim Preserve lines(lines.Length - 2) + End If + If lines.Length = 0 Then Exit Sub + + Dim startRow As Integer = If(Me.CurrentCell IsNot Nothing, Me.CurrentCell.RowIndex, 0) + Dim startCol As Integer = If(Me.CurrentCell IsNot Nothing, Me.CurrentCell.ColumnIndex, 0) + If startRow < 0 Then startRow = 0 + If startCol < 0 Then startCol = 0 + + ' Temporär das „Neue-Zeile“-Verhalten und Binding einfrieren + Dim oldAddRows = Me.AllowUserToAddRows + Me.AllowUserToAddRows = False + Me.SuspendLayout() + Dim cm As CurrencyManager = Nothing + Try + If TypeOf Me.DataSource Is DataTable Then + Dim bs As CurrencyManager = TryCast(Me.BindingContext(Me.DataSource), CurrencyManager) + cm = bs + cm?.SuspendBinding() + End If + + For i As Integer = 0 To lines.Length - 1 + Dim r As Integer = startRow + i + Dim rowText As String = lines(i) + If String.IsNullOrWhiteSpace(rowText) Then Continue For + + Dim cells = rowText.Split(vbTab) + EnsureRowExists(r) + + If _PasteSingleColumn Then + Dim targetCol As Integer = 0 ' MRN-Spalte + If targetCol >= 0 AndAlso targetCol < Me.Columns.Count Then + SetCellValueSafe(r, targetCol, cells(0)) + End If + Else + For j As Integer = 0 To cells.Length - 1 + Dim c As Integer = startCol + j + If c >= 0 AndAlso c < Me.Columns.Count Then + SetCellValueSafe(r, c, cells(j)) + End If + Next + End If + Next + + Me.EndEdit() ' Commits pending edits im Grid + If TypeOf Me.DataSource Is DataTable Then + DirectCast(Me.DataSource, DataTable).AcceptChanges() + End If + Finally + cm?.ResumeBinding() + Me.ResumeLayout() + Me.AllowUserToAddRows = oldAddRows + Me.Refresh() + End Try + End Sub + + Private Sub SetCellValueSafe(rowIndex As Integer, colIndex As Integer, raw As String) + If rowIndex < 0 OrElse rowIndex >= Me.Rows.Count Then Exit Sub + Dim col = Me.Columns(colIndex) + Dim v As String = If(raw, String.Empty).Trim() + + ' Fall A: Datengebunden -> direkt in DataTable schreiben (über DataPropertyName) + If TypeOf Me.DataSource Is DataTable Then + Dim dt = DirectCast(Me.DataSource, DataTable) + Dim prop = If(String.IsNullOrWhiteSpace(col.DataPropertyName), col.Name, col.DataPropertyName) + If Not dt.Columns.Contains(prop) Then + ' Kein gebundenes Feld vorhanden -> fallback auf Zellenwert + GoTo FallbackCell + End If + + Dim targetType As Type = dt.Columns(prop).DataType + Dim obj As Object = DBNull.Value + + Try + If targetType Is GetType(String) Then + obj = If(v = "", DBNull.Value, CType(v, String)) + ElseIf targetType Is GetType(Date) OrElse targetType Is GetType(DateTime) Then + If v = "" Then + obj = DBNull.Value + Else + Dim d As DateTime + obj = If(DateTime.TryParse(v, d), d.Date, CType(v, Object)) + End If + ElseIf targetType Is GetType(Integer) Then + Dim n As Integer + obj = If(Integer.TryParse(v, n), n, If(v = "", DBNull.Value, CType(v, Object))) + ElseIf targetType Is GetType(Decimal) OrElse targetType Is GetType(Double) OrElse targetType Is GetType(Single) Then + Dim decv As Decimal + obj = If(Decimal.TryParse(v, Globalization.NumberStyles.Any, Globalization.CultureInfo.CurrentCulture, decv), + Convert.ChangeType(decv, targetType), + If(v = "", DBNull.Value, CType(v, Object))) + Else + ' generischer Versuch + obj = If(v = "", DBNull.Value, Convert.ChangeType(v, targetType)) + End If + Catch + obj = If(v = "", DBNull.Value, v) + End Try + + ' DataRow sichern (bei neu erzeugten Zeilen existiert sie sicher) + Dim drv As DataRowView = TryCast(Me.Rows(rowIndex).DataBoundItem, DataRowView) + If drv IsNot Nothing Then + drv(prop) = obj + Else + ' Falls kein DataRowView (unwahrscheinlich): direkt über Index + dt.Rows(rowIndex)(prop) = obj + End If + + Return + End If + +FallbackCell: + ' Fall B: Ungebunden -> direkt in die Zelle schreiben + Dim cell = Me.Rows(rowIndex).Cells(colIndex) + If cell Is Nothing OrElse cell.ReadOnly Then Exit Sub + + Try + If cell.ValueType Is GetType(Date) OrElse cell.ValueType Is GetType(DateTime) Then + If v = "" Then + cell.Value = Nothing + Else + Dim d As DateTime + cell.Value = If(DateTime.TryParse(v, d), d.Date, CType(v, Object)) + End If + ElseIf cell.ValueType Is GetType(Integer) Then + Dim n As Integer + cell.Value = If(Integer.TryParse(v, n), n, If(v = "", Nothing, v)) + ElseIf cell.ValueType Is GetType(Decimal) OrElse cell.ValueType Is GetType(Double) Then + Dim decv As Decimal + cell.Value = If(Decimal.TryParse(v, Globalization.NumberStyles.Any, Globalization.CultureInfo.CurrentCulture, decv), decv, If(v = "", Nothing, v)) + Else + cell.Value = If(v = "", Nothing, v) + End If + Catch + cell.Value = If(v = "", Nothing, v) + End Try + End Sub + + Private Sub EnsureRowExists(targetRow As Integer) + If targetRow < Me.Rows.Count Then Exit Sub + + If TypeOf Me.DataSource Is DataTable Then + Dim dt = DirectCast(Me.DataSource, DataTable) + Do While targetRow >= (If(Me.AllowUserToAddRows, Me.Rows.Count - 1, Me.Rows.Count)) + dt.Rows.Add(dt.NewRow()) + Loop + Else + Do While targetRow >= (If(Me.AllowUserToAddRows, Me.Rows.Count - 1, Me.Rows.Count)) + Me.Rows.Add() + Loop + End If + End Sub + ' ======================================================== + ' ======================================================== End Class diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cZollArtikel.vb b/VERAG_PROG_ALLGEMEIN/Classes/cZollArtikel.vb index a591ae56..f8f1e3b7 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cZollArtikel.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cZollArtikel.vb @@ -200,4 +200,29 @@ Public Class cZollArtikel Return result End Function + Public Shared Function FindZollArtikelByNummer(artikelListe As List(Of cZollArtikel), artikelnummer As String) As cZollArtikel + If artikelListe Is Nothing OrElse artikelnummer Is Nothing Then Return Nothing + + Dim suchNr As String = artikelnummer.Trim().ToUpperInvariant() + + ' Finde alle Artikel mit gleicher Artikelnummer + Dim treffer = artikelListe. + Where(Function(a) a IsNot Nothing AndAlso + a.zollArt_Artikelnummer IsNot Nothing AndAlso + a.zollArt_Artikelnummer.ToString().Trim().ToUpperInvariant() = suchNr). + ToList() + + If treffer.Count = 0 Then Return Nothing + If treffer.Count = 1 Then Return treffer(0) + + ' Wenn mehrere gefunden: wähle den mit längster Warencodenummer (zollArt_Warencodenummer) + Dim bester = treffer.OrderByDescending(Function(a) + Dim code = If(a.zollArt_Warencodenummer, "").ToString().Trim() + Return code.Length + End Function). + FirstOrDefault() + + Return bester + End Function + End Class diff --git a/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/GREENPULSE/cATEZ_Greenpulse_KafkaDecs.vb b/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/GREENPULSE/cATEZ_Greenpulse_KafkaDecs.vb index 040ed230..6f005aca 100644 --- a/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/GREENPULSE/cATEZ_Greenpulse_KafkaDecs.vb +++ b/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/GREENPULSE/cATEZ_Greenpulse_KafkaDecs.vb @@ -23,8 +23,8 @@ Public Class cATEZ_Greenpulse_KafkaDecs '== Kafka: Konfiguration (Klassenebene) '======================== Public Shared BootstrapServers As String = "192.168.85.250:9092" 'http://192.168.85.250:8888 - Public Shared TopicName As String = "greenpulse.declarationdata.v1" - ' Public Shared TopicName As String = "dev.greenpulse.declarationdata.v1" + ' Public Shared TopicName As String = "greenpulse.declarationdata.v1" + Public Shared TopicName As String = "dev.greenpulse.declarationdata.v1" ' Falls SASL/TLS benötigt: Public Shared UseSasl As Boolean = False Public Shared SaslUsername As String = "" @@ -66,6 +66,11 @@ Public Class cATEZ_Greenpulse_KafkaDecs Public Property ImporterDetails As ImporterDetailsNode + '--- documents --- + + Public Property Documents As List(Of DocumentNode) + + '--- declaration --- Public Class DeclarationNode @@ -201,6 +206,19 @@ Public Class cATEZ_Greenpulse_KafkaDecs Public Property ImporterCoordinateLatitudeY As String End Class + Public Class DocumentNode + + Public Property Reference As String + + + Public Property DocType As String + + + Public Property MimeType As String + + + Public Property Blob As String + End Class '======================== '== Serialisierung @@ -267,7 +285,8 @@ Public Class cATEZ_Greenpulse_KafkaDecs .ImporterPoBox = "PO DCL-123", .ImporterCoordinateLongitudeX = "41.0091982", .ImporterCoordinateLatitudeY = "28.9662187" - } + }, + .Documents = New List(Of cATEZ_Greenpulse_KafkaDecs.DocumentNode)() } End Function @@ -298,6 +317,8 @@ Public Class cATEZ_Greenpulse_KafkaDecs .MaxInFlight = 5, .MessageTimeoutMs = Math.Max(waitMs, 60000), .RequestTimeoutMs = 30000, + .CompressionType = Confluent.Kafka.CompressionType.Zstd, ' gute Kompression + .MessageMaxBytes = 20971520, ' ≈ 20 MB – darf Topic/Broker nicht übersteigen .EnableDeliveryReports = True, .AllowAutoCreateTopics = True } @@ -379,7 +400,7 @@ Public Class cATEZ_Greenpulse_KafkaDecsBuilder_DAKOSY Dim obj As New cATEZ_Greenpulse_KafkaDecs() With { .Declaration = New cATEZ_Greenpulse_KafkaDecs.DeclarationNode() With { - .DeclarationSourceId = SafeStr(head("Bezugsnummer_LRN")), + .DeclarationSourceId = SafeStr(head("Registriernummer_MRN")), .DeclarationNo = SafeStr(head("Registriernummer_MRN")), .DeclarationDate = FirstNonEmptyDateStr(head, {"Annahmedatum", "Überlassungsdatum"}), .RequestedProcedure = SafeStr(head("Verfahren")), @@ -412,7 +433,8 @@ Public Class cATEZ_Greenpulse_KafkaDecsBuilder_DAKOSY .ImporterPoBox = "", .ImporterCoordinateLongitudeX = "", .ImporterCoordinateLatitudeY = "" - } + }, + .Documents = New List(Of cATEZ_Greenpulse_KafkaDecs.DocumentNode)() } ' 2) Commercial (Rechnung) – aus Unterlagen N380, falls vorhanden @@ -424,6 +446,38 @@ Public Class cATEZ_Greenpulse_KafkaDecsBuilder_DAKOSY .DefaultIfEmpty(Nothing) _ .FirstOrDefault() + ' --- Dokumente aus Unterlagen übernehmen --- + Dim SQLS As New VERAG_PROG_ALLGEMEIN.SQL + Dim SenungsId = SQLS.getValueTxtBySql("SELECT dy_SendungsId from [tblDakosy_Zollanmeldungen] where dy_BezugsNr=''", "FMZOLL",,, Nothing) + + + If SenungsId IsNot Nothing Then + If IsNumeric(SenungsId) AndAlso SenungsId > 0 Then + Dim ANH_LIST As New List(Of cAvisoAnhaenge) + cAvisoAnhaenge.LOAD_LIST_BySendung(ANH_LIST, SenungsId) + + + For Each doc In ANH_LIST + Select Case doc.anh_Art + Case "Rechnung", "eFatura" + + Dim dateiBytes As Byte() = System.IO.File.ReadAllBytes(VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(doc.anh_docId)) + + Dim d As New cATEZ_Greenpulse_KafkaDecs.DocumentNode With { + .Reference = doc.anh_Name, + .DocType = "invoice", + .MimeType = cATEZ_Greenpulse_KafkaDecsBuilder_DAKOSY.GuessMimeTypeFromNumber(doc.anh_Typ), + .Blob = Convert.ToBase64String(dateiBytes) + } + obj.Documents.Add(d) + End Select + + Next + End If + + End If + + If invRow IsNot Nothing Then obj.Commercial.InvoiceNumbers = SafeStr(invRow("Unterlagennummer")) obj.Commercial.InvoiceDate = SafeDateStr(invRow("Unterlagendatum")) @@ -519,4 +573,15 @@ Public Class cATEZ_Greenpulse_KafkaDecsBuilder_DAKOSY Return String.IsNullOrWhiteSpace(Convert.ToString(value)) End Function + + Public Shared Function GuessMimeTypeFromNumber(num As Object) As String + ' Wenn du Dateiendungen erkennst (z. B. .pdf oder .jpg im Namen) + Dim s As String = SafeStr(num).ToLowerInvariant() + If s.EndsWith(".pdf") Or s.ToLower = "PDF" Then Return "application/pdf" + If s.EndsWith(".jpg") Or s.EndsWith(".jpeg") Or s.ToLower = "JPG" Or s.ToLower = "JPEG" Then Return "image/jpeg" + If s.EndsWith(".png") Or s.ToLower = "PNG" Then Return "image/png" + Return "application/octet-stream" + End Function + + End Class diff --git a/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/RELAYHUB/cRelayHub.vb b/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/RELAYHUB/cRelayHub.vb index e799662e..88d63d69 100644 --- a/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/RELAYHUB/cRelayHub.vb +++ b/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/RELAYHUB/cRelayHub.vb @@ -62,7 +62,7 @@ Public Class cRelayHub Public Class cRelayHubAddress Public Property addressType As String Public Property participantEORI As String - Public Property participantSubsidiaryNumber As String + Public Property participantSubsidiaryNumber As Integer Public Property companyName As String Public Property streetAndNumber As String Public Property countryCode As String @@ -131,7 +131,21 @@ Public Class cRelayHub Try VERAG_PROG_ALLGEMEIN.cChilkat_Helper.UnlockCilkat() - Dim jsonPayload As String = JsonConvert.SerializeObject(request) + + Dim sanitized = Sanitize(request) + Dim settings As New JsonSerializerSettings With { + .NullValueHandling = NullValueHandling.Ignore, + .ContractResolver = New Newtonsoft.Json.Serialization.DefaultContractResolver With { + .NamingStrategy = New Newtonsoft.Json.Serialization.CamelCaseNamingStrategy() + } + } + Dim jsonPayload As String = JsonConvert.SerializeObject(sanitized, settings) + Console.WriteLine("JSON → " & jsonPayload) + + + 'Dim jsonPayload As String = JsonConvert.SerializeObject(request) + + ' 1. Versuch Dim response As Chilkat.HttpResponse = SendJobOrder(jsonPayload) @@ -208,6 +222,26 @@ Public Class cRelayHub End Try End Function + Private Shared Function Sanitize(req As cRelayHub.cRelayHubJobOrderRequest) As cRelayHub.cRelayHubJobOrderRequest + req.outputApplication = If(req.outputApplication, "").Trim() + req.dispatchCountry = If(req.dispatchCountry, "").Trim().ToUpperInvariant() + req.destinationCountry = If(req.destinationCountry, "").Trim().ToUpperInvariant() + + ' lokale Fail-fast Checks + If req.dispatchCountry.Length <> 2 Then Throw New ApplicationException("dispatchCountry ISO-2 erforderlich.") + If req.destinationCountry.Length <> 2 Then Throw New ApplicationException("destinationCountry ISO-2 erforderlich.") + Dim allowed = New HashSet(Of String)(StringComparer.Ordinal) From { + "test", "dakosy/sftp/vera", "evrim/excel", "sec/import/integration" + } + If Not allowed.Contains(req.outputApplication) Then + Throw New ApplicationException("outputApplication muss 'test' | 'dakosy/sftp/vera' | 'evrim/excel' | 'sec/import/integration' sein.") + End If + If req.regimeType <> "IMPORT" AndAlso req.regimeType <> "EXPORT" Then + Throw New ApplicationException("regimeType muss 'IMPORT' oder 'EXPORT' sein.") + End If + Return req + End Function + ' Beispielfall Function CreateSampleJobOrderRequest() As cRelayHubJobOrderRequest Dim req As New cRelayHubJobOrderRequest With {