diff --git a/SDL/SDL.vbproj b/SDL/SDL.vbproj
index d5cc36e3..8a491d17 100644
--- a/SDL/SDL.vbproj
+++ b/SDL/SDL.vbproj
@@ -1339,6 +1339,12 @@
UserControl
+
+ frmImportFromAVISOAnhaenge.vb
+
+
+ Form
+
usrCntlModaltrans_EXIM_Allg.vb
@@ -3684,6 +3690,9 @@
usrCntlATLAS_AnkunftsAnzeige.vb
+
+ frmImportFromAVISOAnhaenge.vb
+
usrCntlModaltrans_EXIM_Allg.vb
diff --git a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.Designer.vb b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.Designer.vb
index 72449c04..675b1c25 100644
--- a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.Designer.vb
+++ b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.Designer.vb
@@ -24,8 +24,17 @@ Partial Class usrCntlATLAS_EZA
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Me.SplitContainer = New System.Windows.Forms.SplitContainer()
+ Me.MyFlowLayoutPanel1 = New VERAG_PROG_ALLGEMEIN.MyFlowLayoutPanel(Me.components)
+ Me.btnAllgemein = New System.Windows.Forms.Button()
+ Me.btnAdressen = New System.Windows.Forms.Button()
+ Me.btnAktiveVeredelung = New System.Windows.Forms.Button()
+ Me.btnPositionen = New System.Windows.Forms.Button()
+ Me.btnDV1 = New System.Windows.Forms.Button()
+ Me.Button5 = New System.Windows.Forms.Button()
Me.pnl = New System.Windows.Forms.Panel()
Me.Label6 = New System.Windows.Forms.Label()
+ Me.cboDakosyAction = New VERAG_PROG_ALLGEMEIN.MyComboBox()
+ Me.cboStammreferenz = New VERAG_PROG_ALLGEMEIN.MyComboBox()
Me.Button1 = New System.Windows.Forms.Button()
Me.Label4 = New System.Windows.Forms.Label()
Me.Label5 = New System.Windows.Forms.Label()
@@ -48,26 +57,18 @@ Partial Class usrCntlATLAS_EZA
Me.DynamicAutomotiveXLSToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.GEZEXLSXToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.MEYLEXLSXToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
+ Me.FressnapToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
+ Me.VERAGIMPORTFormatToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.ToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem()
Me.EZAIDToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
- Me.FressnapToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
- Me.MyFlowLayoutPanel1 = New VERAG_PROG_ALLGEMEIN.MyFlowLayoutPanel(Me.components)
- Me.btnAllgemein = New System.Windows.Forms.Button()
- Me.btnAdressen = New System.Windows.Forms.Button()
- Me.btnAktiveVeredelung = New System.Windows.Forms.Button()
- Me.btnPositionen = New System.Windows.Forms.Button()
- Me.btnDV1 = New System.Windows.Forms.Button()
- Me.Button5 = New System.Windows.Forms.Button()
- Me.cboDakosyAction = New VERAG_PROG_ALLGEMEIN.MyComboBox()
- Me.cboStammreferenz = New VERAG_PROG_ALLGEMEIN.MyComboBox()
CType(Me.SplitContainer, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SplitContainer.Panel1.SuspendLayout()
Me.SplitContainer.SuspendLayout()
+ Me.MyFlowLayoutPanel1.SuspendLayout()
Me.pnl.SuspendLayout()
Me.cntxtBezugsnr.SuspendLayout()
Me.Panel1.SuspendLayout()
Me.MenuStrip.SuspendLayout()
- Me.MyFlowLayoutPanel1.SuspendLayout()
Me.SuspendLayout()
'
'SplitContainer
@@ -93,6 +94,128 @@ Partial Class usrCntlATLAS_EZA
Me.SplitContainer.SplitterWidth = 1
Me.SplitContainer.TabIndex = 0
'
+ 'MyFlowLayoutPanel1
+ '
+ Me.MyFlowLayoutPanel1.BackColor = System.Drawing.Color.WhiteSmoke
+ Me.MyFlowLayoutPanel1.Controls.Add(Me.btnAllgemein)
+ Me.MyFlowLayoutPanel1.Controls.Add(Me.btnAdressen)
+ Me.MyFlowLayoutPanel1.Controls.Add(Me.btnAktiveVeredelung)
+ Me.MyFlowLayoutPanel1.Controls.Add(Me.btnPositionen)
+ Me.MyFlowLayoutPanel1.Controls.Add(Me.btnDV1)
+ Me.MyFlowLayoutPanel1.Controls.Add(Me.Button5)
+ Me.MyFlowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill
+ Me.MyFlowLayoutPanel1.Location = New System.Drawing.Point(0, 0)
+ Me.MyFlowLayoutPanel1.Margin = New System.Windows.Forms.Padding(1)
+ Me.MyFlowLayoutPanel1.Name = "MyFlowLayoutPanel1"
+ Me.MyFlowLayoutPanel1.Size = New System.Drawing.Size(573, 72)
+ Me.MyFlowLayoutPanel1.TabIndex = 0
+ '
+ 'btnAllgemein
+ '
+ Me.btnAllgemein.BackColor = System.Drawing.Color.SteelBlue
+ Me.btnAllgemein.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
+ Me.btnAllgemein.FlatStyle = System.Windows.Forms.FlatStyle.Flat
+ Me.btnAllgemein.ForeColor = System.Drawing.SystemColors.ControlLightLight
+ Me.btnAllgemein.Image = Global.SDL.My.Resources.Resources.android_note12
+ Me.btnAllgemein.ImageAlign = System.Drawing.ContentAlignment.TopCenter
+ Me.btnAllgemein.Location = New System.Drawing.Point(2, 2)
+ Me.btnAllgemein.Margin = New System.Windows.Forms.Padding(2)
+ Me.btnAllgemein.Name = "btnAllgemein"
+ Me.btnAllgemein.Padding = New System.Windows.Forms.Padding(0, 12, 0, 3)
+ Me.btnAllgemein.Size = New System.Drawing.Size(75, 67)
+ Me.btnAllgemein.TabIndex = 0
+ Me.btnAllgemein.Text = "Allgemein"
+ Me.btnAllgemein.TextAlign = System.Drawing.ContentAlignment.BottomCenter
+ Me.btnAllgemein.UseVisualStyleBackColor = False
+ '
+ 'btnAdressen
+ '
+ Me.btnAdressen.BackColor = System.Drawing.Color.White
+ Me.btnAdressen.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
+ Me.btnAdressen.FlatStyle = System.Windows.Forms.FlatStyle.Flat
+ Me.btnAdressen.Image = Global.SDL.My.Resources.Resources.house1
+ Me.btnAdressen.ImageAlign = System.Drawing.ContentAlignment.TopCenter
+ Me.btnAdressen.Location = New System.Drawing.Point(81, 2)
+ Me.btnAdressen.Margin = New System.Windows.Forms.Padding(2)
+ Me.btnAdressen.Name = "btnAdressen"
+ Me.btnAdressen.Padding = New System.Windows.Forms.Padding(0, 0, 0, 3)
+ Me.btnAdressen.Size = New System.Drawing.Size(75, 67)
+ Me.btnAdressen.TabIndex = 1
+ Me.btnAdressen.Text = "Adressen"
+ Me.btnAdressen.TextAlign = System.Drawing.ContentAlignment.BottomCenter
+ Me.btnAdressen.UseVisualStyleBackColor = False
+ '
+ 'btnAktiveVeredelung
+ '
+ Me.btnAktiveVeredelung.BackColor = System.Drawing.Color.White
+ Me.btnAktiveVeredelung.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
+ Me.btnAktiveVeredelung.FlatStyle = System.Windows.Forms.FlatStyle.Flat
+ Me.btnAktiveVeredelung.Image = Global.SDL.My.Resources.Resources.aktiveVeredelung1
+ Me.btnAktiveVeredelung.ImageAlign = System.Drawing.ContentAlignment.TopCenter
+ Me.btnAktiveVeredelung.Location = New System.Drawing.Point(160, 2)
+ Me.btnAktiveVeredelung.Margin = New System.Windows.Forms.Padding(2)
+ Me.btnAktiveVeredelung.Name = "btnAktiveVeredelung"
+ Me.btnAktiveVeredelung.Padding = New System.Windows.Forms.Padding(0, 6, 0, 3)
+ Me.btnAktiveVeredelung.Size = New System.Drawing.Size(94, 67)
+ Me.btnAktiveVeredelung.TabIndex = 3
+ Me.btnAktiveVeredelung.Text = "Pass. Veredel."
+ Me.btnAktiveVeredelung.TextAlign = System.Drawing.ContentAlignment.BottomCenter
+ Me.btnAktiveVeredelung.UseVisualStyleBackColor = False
+ Me.btnAktiveVeredelung.Visible = False
+ '
+ 'btnPositionen
+ '
+ Me.btnPositionen.BackColor = System.Drawing.Color.White
+ Me.btnPositionen.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
+ Me.btnPositionen.FlatStyle = System.Windows.Forms.FlatStyle.Flat
+ Me.btnPositionen.Image = Global.SDL.My.Resources.Resources.list_new_small2
+ Me.btnPositionen.ImageAlign = System.Drawing.ContentAlignment.TopCenter
+ Me.btnPositionen.Location = New System.Drawing.Point(258, 2)
+ Me.btnPositionen.Margin = New System.Windows.Forms.Padding(2)
+ Me.btnPositionen.Name = "btnPositionen"
+ Me.btnPositionen.Padding = New System.Windows.Forms.Padding(0, 0, 0, 3)
+ Me.btnPositionen.Size = New System.Drawing.Size(81, 67)
+ Me.btnPositionen.TabIndex = 4
+ Me.btnPositionen.Text = "Positionen"
+ Me.btnPositionen.TextAlign = System.Drawing.ContentAlignment.BottomCenter
+ Me.btnPositionen.UseVisualStyleBackColor = False
+ '
+ 'btnDV1
+ '
+ Me.btnDV1.BackColor = System.Drawing.Color.White
+ Me.btnDV1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
+ Me.btnDV1.FlatStyle = System.Windows.Forms.FlatStyle.Flat
+ Me.btnDV1.Image = Global.SDL.My.Resources.Resources.moneybag1
+ Me.btnDV1.ImageAlign = System.Drawing.ContentAlignment.TopCenter
+ Me.btnDV1.Location = New System.Drawing.Point(343, 2)
+ Me.btnDV1.Margin = New System.Windows.Forms.Padding(2)
+ Me.btnDV1.Name = "btnDV1"
+ Me.btnDV1.Padding = New System.Windows.Forms.Padding(0, 2, 0, 3)
+ Me.btnDV1.Size = New System.Drawing.Size(94, 67)
+ Me.btnDV1.TabIndex = 6
+ Me.btnDV1.Text = "D.V.1"
+ Me.btnDV1.TextAlign = System.Drawing.ContentAlignment.BottomCenter
+ Me.btnDV1.UseVisualStyleBackColor = False
+ Me.btnDV1.Visible = False
+ '
+ 'Button5
+ '
+ Me.Button5.BackColor = System.Drawing.Color.White
+ Me.Button5.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
+ Me.Button5.FlatStyle = System.Windows.Forms.FlatStyle.Flat
+ Me.Button5.Image = Global.SDL.My.Resources.Resources.android_note12
+ Me.Button5.ImageAlign = System.Drawing.ContentAlignment.TopCenter
+ Me.Button5.Location = New System.Drawing.Point(441, 2)
+ Me.Button5.Margin = New System.Windows.Forms.Padding(2)
+ Me.Button5.Name = "Button5"
+ Me.Button5.Padding = New System.Windows.Forms.Padding(0, 12, 0, 3)
+ Me.Button5.Size = New System.Drawing.Size(81, 67)
+ Me.Button5.TabIndex = 5
+ Me.Button5.Text = "Referenzen"
+ Me.Button5.TextAlign = System.Drawing.ContentAlignment.BottomCenter
+ Me.Button5.UseVisualStyleBackColor = False
+ Me.Button5.Visible = False
+ '
'pnl
'
Me.pnl.BackColor = System.Drawing.Color.WhiteSmoke
@@ -121,6 +244,35 @@ Partial Class usrCntlATLAS_EZA
Me.Label6.Text = "Stammref.:"
Me.Label6.TextAlign = System.Drawing.ContentAlignment.TopRight
'
+ 'cboDakosyAction
+ '
+ Me.cboDakosyAction._allowedValuesFreiText = Nothing
+ Me.cboDakosyAction._allowFreiText = False
+ Me.cboDakosyAction._value = ""
+ Me.cboDakosyAction.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+ Me.cboDakosyAction.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer))
+ Me.cboDakosyAction.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
+ Me.cboDakosyAction.FlatStyle = System.Windows.Forms.FlatStyle.Flat
+ Me.cboDakosyAction.FormattingEnabled = True
+ Me.cboDakosyAction.Location = New System.Drawing.Point(200, 48)
+ Me.cboDakosyAction.Name = "cboDakosyAction"
+ Me.cboDakosyAction.Size = New System.Drawing.Size(158, 21)
+ Me.cboDakosyAction.TabIndex = 1
+ '
+ 'cboStammreferenz
+ '
+ Me.cboStammreferenz._allowedValuesFreiText = Nothing
+ Me.cboStammreferenz._allowFreiText = True
+ Me.cboStammreferenz._value = ""
+ Me.cboStammreferenz.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer))
+ Me.cboStammreferenz.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
+ Me.cboStammreferenz.FlatStyle = System.Windows.Forms.FlatStyle.Flat
+ Me.cboStammreferenz.FormattingEnabled = True
+ Me.cboStammreferenz.Location = New System.Drawing.Point(71, 48)
+ Me.cboStammreferenz.Name = "cboStammreferenz"
+ Me.cboStammreferenz.Size = New System.Drawing.Size(129, 21)
+ Me.cboStammreferenz.TabIndex = 13
+ '
'Button1
'
Me.Button1.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
@@ -295,7 +447,7 @@ Partial Class usrCntlATLAS_EZA
'
'DateiimportToolStripMenuItem
'
- Me.DateiimportToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.DynamicAutomotiveXLSToolStripMenuItem, Me.GEZEXLSXToolStripMenuItem, Me.MEYLEXLSXToolStripMenuItem, Me.FressnapToolStripMenuItem})
+ Me.DateiimportToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.DynamicAutomotiveXLSToolStripMenuItem, Me.GEZEXLSXToolStripMenuItem, Me.MEYLEXLSXToolStripMenuItem, Me.FressnapToolStripMenuItem, Me.VERAGIMPORTFormatToolStripMenuItem})
Me.DateiimportToolStripMenuItem.Name = "DateiimportToolStripMenuItem"
Me.DateiimportToolStripMenuItem.Size = New System.Drawing.Size(87, 20)
Me.DateiimportToolStripMenuItem.Text = "Datei-Import"
@@ -303,21 +455,33 @@ Partial Class usrCntlATLAS_EZA
'DynamicAutomotiveXLSToolStripMenuItem
'
Me.DynamicAutomotiveXLSToolStripMenuItem.Name = "DynamicAutomotiveXLSToolStripMenuItem"
- Me.DynamicAutomotiveXLSToolStripMenuItem.Size = New System.Drawing.Size(224, 22)
+ Me.DynamicAutomotiveXLSToolStripMenuItem.Size = New System.Drawing.Size(238, 22)
Me.DynamicAutomotiveXLSToolStripMenuItem.Text = "Dynamic Automotive (XLSX)"
'
'GEZEXLSXToolStripMenuItem
'
Me.GEZEXLSXToolStripMenuItem.Name = "GEZEXLSXToolStripMenuItem"
- Me.GEZEXLSXToolStripMenuItem.Size = New System.Drawing.Size(224, 22)
+ Me.GEZEXLSXToolStripMenuItem.Size = New System.Drawing.Size(238, 22)
Me.GEZEXLSXToolStripMenuItem.Text = "GEZE (XLSX)"
'
'MEYLEXLSXToolStripMenuItem
'
Me.MEYLEXLSXToolStripMenuItem.Name = "MEYLEXLSXToolStripMenuItem"
- Me.MEYLEXLSXToolStripMenuItem.Size = New System.Drawing.Size(224, 22)
+ Me.MEYLEXLSXToolStripMenuItem.Size = New System.Drawing.Size(238, 22)
Me.MEYLEXLSXToolStripMenuItem.Text = "MEYLE (XLSX)"
'
+ 'FressnapToolStripMenuItem
+ '
+ Me.FressnapToolStripMenuItem.Name = "FressnapToolStripMenuItem"
+ Me.FressnapToolStripMenuItem.Size = New System.Drawing.Size(238, 22)
+ Me.FressnapToolStripMenuItem.Text = "Fressnapf (XLSX)"
+ '
+ 'VERAGIMPORTFormatToolStripMenuItem
+ '
+ Me.VERAGIMPORTFormatToolStripMenuItem.Name = "VERAGIMPORTFormatToolStripMenuItem"
+ Me.VERAGIMPORTFormatToolStripMenuItem.Size = New System.Drawing.Size(238, 22)
+ Me.VERAGIMPORTFormatToolStripMenuItem.Text = "VERAG-IMPORT-Format (XLSX)"
+ '
'ToolStripMenuItem1
'
Me.ToolStripMenuItem1.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.EZAIDToolStripMenuItem})
@@ -331,163 +495,6 @@ Partial Class usrCntlATLAS_EZA
Me.EZAIDToolStripMenuItem.Size = New System.Drawing.Size(109, 22)
Me.EZAIDToolStripMenuItem.Text = "EZA ID"
'
- 'FressnapToolStripMenuItem
- '
- Me.FressnapToolStripMenuItem.Name = "FressnapToolStripMenuItem"
- Me.FressnapToolStripMenuItem.Size = New System.Drawing.Size(224, 22)
- Me.FressnapToolStripMenuItem.Text = "Fressnapf (XLSX)"
- '
- 'MyFlowLayoutPanel1
- '
- Me.MyFlowLayoutPanel1.BackColor = System.Drawing.Color.WhiteSmoke
- Me.MyFlowLayoutPanel1.Controls.Add(Me.btnAllgemein)
- Me.MyFlowLayoutPanel1.Controls.Add(Me.btnAdressen)
- Me.MyFlowLayoutPanel1.Controls.Add(Me.btnAktiveVeredelung)
- Me.MyFlowLayoutPanel1.Controls.Add(Me.btnPositionen)
- Me.MyFlowLayoutPanel1.Controls.Add(Me.btnDV1)
- Me.MyFlowLayoutPanel1.Controls.Add(Me.Button5)
- Me.MyFlowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill
- Me.MyFlowLayoutPanel1.Location = New System.Drawing.Point(0, 0)
- Me.MyFlowLayoutPanel1.Margin = New System.Windows.Forms.Padding(1)
- Me.MyFlowLayoutPanel1.Name = "MyFlowLayoutPanel1"
- Me.MyFlowLayoutPanel1.Size = New System.Drawing.Size(573, 72)
- Me.MyFlowLayoutPanel1.TabIndex = 0
- '
- 'btnAllgemein
- '
- Me.btnAllgemein.BackColor = System.Drawing.Color.SteelBlue
- Me.btnAllgemein.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
- Me.btnAllgemein.FlatStyle = System.Windows.Forms.FlatStyle.Flat
- Me.btnAllgemein.ForeColor = System.Drawing.SystemColors.ControlLightLight
- Me.btnAllgemein.Image = Global.SDL.My.Resources.Resources.android_note12
- Me.btnAllgemein.ImageAlign = System.Drawing.ContentAlignment.TopCenter
- Me.btnAllgemein.Location = New System.Drawing.Point(2, 2)
- Me.btnAllgemein.Margin = New System.Windows.Forms.Padding(2)
- Me.btnAllgemein.Name = "btnAllgemein"
- Me.btnAllgemein.Padding = New System.Windows.Forms.Padding(0, 12, 0, 3)
- Me.btnAllgemein.Size = New System.Drawing.Size(75, 67)
- Me.btnAllgemein.TabIndex = 0
- Me.btnAllgemein.Text = "Allgemein"
- Me.btnAllgemein.TextAlign = System.Drawing.ContentAlignment.BottomCenter
- Me.btnAllgemein.UseVisualStyleBackColor = False
- '
- 'btnAdressen
- '
- Me.btnAdressen.BackColor = System.Drawing.Color.White
- Me.btnAdressen.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
- Me.btnAdressen.FlatStyle = System.Windows.Forms.FlatStyle.Flat
- Me.btnAdressen.Image = Global.SDL.My.Resources.Resources.house1
- Me.btnAdressen.ImageAlign = System.Drawing.ContentAlignment.TopCenter
- Me.btnAdressen.Location = New System.Drawing.Point(81, 2)
- Me.btnAdressen.Margin = New System.Windows.Forms.Padding(2)
- Me.btnAdressen.Name = "btnAdressen"
- Me.btnAdressen.Padding = New System.Windows.Forms.Padding(0, 0, 0, 3)
- Me.btnAdressen.Size = New System.Drawing.Size(75, 67)
- Me.btnAdressen.TabIndex = 1
- Me.btnAdressen.Text = "Adressen"
- Me.btnAdressen.TextAlign = System.Drawing.ContentAlignment.BottomCenter
- Me.btnAdressen.UseVisualStyleBackColor = False
- '
- 'btnAktiveVeredelung
- '
- Me.btnAktiveVeredelung.BackColor = System.Drawing.Color.White
- Me.btnAktiveVeredelung.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
- Me.btnAktiveVeredelung.FlatStyle = System.Windows.Forms.FlatStyle.Flat
- Me.btnAktiveVeredelung.Image = Global.SDL.My.Resources.Resources.aktiveVeredelung1
- Me.btnAktiveVeredelung.ImageAlign = System.Drawing.ContentAlignment.TopCenter
- Me.btnAktiveVeredelung.Location = New System.Drawing.Point(160, 2)
- Me.btnAktiveVeredelung.Margin = New System.Windows.Forms.Padding(2)
- Me.btnAktiveVeredelung.Name = "btnAktiveVeredelung"
- Me.btnAktiveVeredelung.Padding = New System.Windows.Forms.Padding(0, 6, 0, 3)
- Me.btnAktiveVeredelung.Size = New System.Drawing.Size(94, 67)
- Me.btnAktiveVeredelung.TabIndex = 3
- Me.btnAktiveVeredelung.Text = "Pass. Veredel."
- Me.btnAktiveVeredelung.TextAlign = System.Drawing.ContentAlignment.BottomCenter
- Me.btnAktiveVeredelung.UseVisualStyleBackColor = False
- Me.btnAktiveVeredelung.Visible = False
- '
- 'btnPositionen
- '
- Me.btnPositionen.BackColor = System.Drawing.Color.White
- Me.btnPositionen.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
- Me.btnPositionen.FlatStyle = System.Windows.Forms.FlatStyle.Flat
- Me.btnPositionen.Image = Global.SDL.My.Resources.Resources.list_new_small2
- Me.btnPositionen.ImageAlign = System.Drawing.ContentAlignment.TopCenter
- Me.btnPositionen.Location = New System.Drawing.Point(258, 2)
- Me.btnPositionen.Margin = New System.Windows.Forms.Padding(2)
- Me.btnPositionen.Name = "btnPositionen"
- Me.btnPositionen.Padding = New System.Windows.Forms.Padding(0, 0, 0, 3)
- Me.btnPositionen.Size = New System.Drawing.Size(81, 67)
- Me.btnPositionen.TabIndex = 4
- Me.btnPositionen.Text = "Positionen"
- Me.btnPositionen.TextAlign = System.Drawing.ContentAlignment.BottomCenter
- Me.btnPositionen.UseVisualStyleBackColor = False
- '
- 'btnDV1
- '
- Me.btnDV1.BackColor = System.Drawing.Color.White
- Me.btnDV1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
- Me.btnDV1.FlatStyle = System.Windows.Forms.FlatStyle.Flat
- Me.btnDV1.Image = Global.SDL.My.Resources.Resources.moneybag1
- Me.btnDV1.ImageAlign = System.Drawing.ContentAlignment.TopCenter
- Me.btnDV1.Location = New System.Drawing.Point(343, 2)
- Me.btnDV1.Margin = New System.Windows.Forms.Padding(2)
- Me.btnDV1.Name = "btnDV1"
- Me.btnDV1.Padding = New System.Windows.Forms.Padding(0, 2, 0, 3)
- Me.btnDV1.Size = New System.Drawing.Size(94, 67)
- Me.btnDV1.TabIndex = 6
- Me.btnDV1.Text = "D.V.1"
- Me.btnDV1.TextAlign = System.Drawing.ContentAlignment.BottomCenter
- Me.btnDV1.UseVisualStyleBackColor = False
- Me.btnDV1.Visible = False
- '
- 'Button5
- '
- Me.Button5.BackColor = System.Drawing.Color.White
- Me.Button5.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center
- Me.Button5.FlatStyle = System.Windows.Forms.FlatStyle.Flat
- Me.Button5.Image = Global.SDL.My.Resources.Resources.android_note12
- Me.Button5.ImageAlign = System.Drawing.ContentAlignment.TopCenter
- Me.Button5.Location = New System.Drawing.Point(441, 2)
- Me.Button5.Margin = New System.Windows.Forms.Padding(2)
- Me.Button5.Name = "Button5"
- Me.Button5.Padding = New System.Windows.Forms.Padding(0, 12, 0, 3)
- Me.Button5.Size = New System.Drawing.Size(81, 67)
- Me.Button5.TabIndex = 5
- Me.Button5.Text = "Referenzen"
- Me.Button5.TextAlign = System.Drawing.ContentAlignment.BottomCenter
- Me.Button5.UseVisualStyleBackColor = False
- Me.Button5.Visible = False
- '
- 'cboDakosyAction
- '
- Me.cboDakosyAction._allowedValuesFreiText = Nothing
- Me.cboDakosyAction._allowFreiText = False
- Me.cboDakosyAction._value = ""
- Me.cboDakosyAction.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
- Me.cboDakosyAction.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer))
- Me.cboDakosyAction.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
- Me.cboDakosyAction.FlatStyle = System.Windows.Forms.FlatStyle.Flat
- Me.cboDakosyAction.FormattingEnabled = True
- Me.cboDakosyAction.Location = New System.Drawing.Point(200, 48)
- Me.cboDakosyAction.Name = "cboDakosyAction"
- Me.cboDakosyAction.Size = New System.Drawing.Size(158, 21)
- Me.cboDakosyAction.TabIndex = 1
- '
- 'cboStammreferenz
- '
- Me.cboStammreferenz._allowedValuesFreiText = Nothing
- Me.cboStammreferenz._allowFreiText = True
- Me.cboStammreferenz._value = ""
- Me.cboStammreferenz.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer))
- Me.cboStammreferenz.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
- Me.cboStammreferenz.FlatStyle = System.Windows.Forms.FlatStyle.Flat
- Me.cboStammreferenz.FormattingEnabled = True
- Me.cboStammreferenz.Location = New System.Drawing.Point(71, 48)
- Me.cboStammreferenz.Name = "cboStammreferenz"
- Me.cboStammreferenz.Size = New System.Drawing.Size(129, 21)
- Me.cboStammreferenz.TabIndex = 13
- '
'usrCntlATLAS_EZA
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
@@ -500,6 +507,7 @@ Partial Class usrCntlATLAS_EZA
Me.SplitContainer.Panel1.ResumeLayout(False)
CType(Me.SplitContainer, System.ComponentModel.ISupportInitialize).EndInit()
Me.SplitContainer.ResumeLayout(False)
+ Me.MyFlowLayoutPanel1.ResumeLayout(False)
Me.pnl.ResumeLayout(False)
Me.pnl.PerformLayout()
Me.cntxtBezugsnr.ResumeLayout(False)
@@ -507,7 +515,6 @@ Partial Class usrCntlATLAS_EZA
Me.Panel1.PerformLayout()
Me.MenuStrip.ResumeLayout(False)
Me.MenuStrip.PerformLayout()
- Me.MyFlowLayoutPanel1.ResumeLayout(False)
Me.ResumeLayout(False)
End Sub
@@ -548,4 +555,5 @@ Partial Class usrCntlATLAS_EZA
Friend WithEvents GEZEXLSXToolStripMenuItem As ToolStripMenuItem
Friend WithEvents MEYLEXLSXToolStripMenuItem As ToolStripMenuItem
Friend WithEvents FressnapToolStripMenuItem As ToolStripMenuItem
+ Friend WithEvents VERAGIMPORTFormatToolStripMenuItem 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 ec4b8681..ff2c51cf 100644
--- a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.vb
+++ b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.vb
@@ -1135,236 +1135,228 @@ Public Class usrCntlATLAS_EZA
Private Function importExcel_MEYLE() As Boolean
- Dim fd As New OpenFileDialog With {
- .Filter = "Excel Dateien|*.xls;*.xlsx",
- .Multiselect = True,
- .Title = "Bitte eine oder mehrere Excel-Dateien auswählen"
- }
-
- Dim result As DialogResult = fd.ShowDialog()
-
- If result <> DialogResult.OK Then
- Me.Cursor = Cursors.Default
- MsgBox("Keine Datei ausgewählt!")
-
- Return False
-
- Else
-
- Dim cnt = 0
+ Dim f As New frmImportFromAVISOAnhaenge(AVISO, SENDUNG)
+ f.ShowDialog(Me)
+ Dim LIST_FILES = f.LIST_FILES
+ If Not f.DialogResult = DialogResult.OK Then Return False
+ If LIST_FILES.Count = 0 Then Return False
- If EZA.eza_WARENPOS.Count > 0 Then
- If vbYes = MsgBox("Sollten die aktuellen Einträge gelöscht werden?", vbYesNo) Then
- EZA.eza_WARENPOS.Clear() 'Zurücksetzen
- End If
+
+ Dim cnt = 0
+
+
+ If EZA.eza_WARENPOS.Count > 0 Then
+ If vbYes = MsgBox("Sollten die aktuellen Einträge gelöscht werden?", vbYesNo) Then
+ EZA.eza_WARENPOS.Clear() 'Zurücksetzen
+ End If
+ End If
+
+ Me.Cursor = Cursors.WaitCursor
+
+ For Each filePath As String In LIST_FILES
+ If Not filePath.ToLower.EndsWith(".xls") AndAlso Not filePath.ToLower.EndsWith(".xlsx") Then
+ ' Ungültige Datei – überspringen oder abbrechen
+ Continue For
End If
- Me.Cursor = Cursors.WaitCursor
-
- For Each filePath As String In fd.FileNames
- If Not filePath.ToLower.EndsWith(".xls") AndAlso Not filePath.ToLower.EndsWith(".xlsx") Then
- ' Ungültige Datei – überspringen oder abbrechen
- Continue For
- End If
+ Dim exclApp As New Excel.Application 'Object 'as Application
+ Dim Datei As Excel.Workbook ' 'as WorkBook
+ Dim Blatt As Excel.Worksheet 'Object 'as WorkSheet
- Dim exclApp As New Excel.Application 'Object 'as Application
- Dim Datei As Excel.Workbook ' 'as WorkBook
- Dim Blatt As Excel.Worksheet 'Object 'as WorkSheet
+ With exclApp
+ Try
+
+ .CutCopyMode = False
+ .DisplayAlerts = False
+
+
+ Datei = .Workbooks.Open(filePath)
+ Blatt = Datei.Worksheets(1)
+
+ Datei.Activate()
- With exclApp
Try
+ Blatt.ShowAllData() 'Falls Filter ausgewählt wurde
+ Catch ex As Exception
- .CutCopyMode = False
- .DisplayAlerts = False
+ End Try
+
+ Dim startFound As Boolean = False
+ Dim endFound As Boolean = False
+
+ If Not checkExcel_MEYLE(Blatt) Then 'VALIDIERUNG
+ Me.Cursor = Cursors.Default
+ Return False
+ End If
- Datei = .Workbooks.Open(fd.FileName)
- Blatt = Datei.Worksheets(1)
+ Dim startRows As Integer = 6
- Datei.Activate()
-
- Try
- Blatt.ShowAllData() 'Falls Filter ausgewählt wurde
- Catch ex As Exception
-
- End Try
-
- Dim startFound As Boolean = False
- Dim endFound As Boolean = False
-
- If Not checkExcel_MEYLE(Blatt) Then 'VALIDIERUNG
- Me.Cursor = Cursors.Default
- Return False
+ Dim endRows As Integer = startRows
+ While endRows < Blatt.UsedRange.Rows.Count
+ If Not Blatt.Range("A" & endRows) Is Nothing AndAlso Not Blatt.Range("A" & endRows).Value Is Nothing AndAlso Not Blatt.Range("A" & endRows).Value.ToString.Trim = "" Then
+ endFound = True
+ Else
+ Exit While
End If
+ endRows += 1
+ End While
+ endRows -= 1
+
+ If Not endFound Then
+ MsgBox("Keine Daten vorhanden!")
+ Me.Cursor = Cursors.Default
+ Return False
+ End If
- Dim startRows As Integer = 6
+ ' Neue DataTable erstellen
+ Dim DATA As New DataTable()
- Dim endRows As Integer = startRows
- While endRows < Blatt.UsedRange.Rows.Count
- If Not Blatt.Range("A" & endRows) Is Nothing AndAlso Not Blatt.Range("A" & endRows).Value Is Nothing AndAlso Not Blatt.Range("A" & endRows).Value.ToString.Trim = "" Then
- endFound = True
- Else
- Exit While
- End If
- endRows += 1
- End While
- endRows -= 1
+ ' Spalten anhand der Anzahl im Range anlegen
+ Dim colCount As Integer = Blatt.Range("A1:M1").Columns.Count
+ For c As Integer = 1 To colCount
+ DATA.Columns.Add("Spalte" & c, GetType(String))
+ Next
- If Not endFound Then
- MsgBox("Keine Daten vorhanden!")
- Me.Cursor = Cursors.Default
- Return False
- End If
-
-
- ' Neue DataTable erstellen
- Dim DATA As New DataTable()
-
- ' Spalten anhand der Anzahl im Range anlegen
- Dim colCount As Integer = Blatt.Range("A1:M1").Columns.Count
+ ' Range direkt durchlaufen
+ For r As Integer = startRows To endRows
+ Dim newRow As DataRow = DATA.NewRow()
For c As Integer = 1 To colCount
- DATA.Columns.Add("Spalte" & c, GetType(String))
+ Dim value = Blatt.Cells(r, c).Value
+ newRow(c - 1) = If(value IsNot Nothing, value.ToString(), "")
Next
+ DATA.Rows.Add(newRow)
+ Next
- ' Range direkt durchlaufen
- For r As Integer = startRows To endRows
- Dim newRow As DataRow = DATA.NewRow()
- For c As Integer = 1 To colCount
- Dim value = Blatt.Cells(r, c).Value
- newRow(c - 1) = If(value IsNot Nothing, value.ToString(), "")
- Next
- DATA.Rows.Add(newRow)
- Next
-
- ' DataTable durchlaufen und Zeilen löschen, bei denen Spalte 6 "summe" enthält
- For i As Integer = DATA.Rows.Count - 1 To 0 Step -1
- Dim cellValue As String = DATA.Rows(i)(6).ToString().ToLower() ' Spalte 6 = Index 5
- If cellValue.Contains("summe") Then
- DATA.Rows.RemoveAt(i)
- End If
- Next
+ ' DataTable durchlaufen und Zeilen löschen, bei denen Spalte 6 "summe" enthält
+ For i As Integer = DATA.Rows.Count - 1 To 0 Step -1
+ Dim cellValue As String = DATA.Rows(i)(6).ToString().ToLower() ' Spalte 6 = Index 5
+ If cellValue.Contains("summe") Then
+ DATA.Rows.RemoveAt(i)
+ End If
+ Next
- '--------------------------------------------------------------------------------------------------------------
+ '--------------------------------------------------------------------------------------------------------------
- ' Spaltenüberschriften ausgeben
+ ' Spaltenüberschriften ausgeben
+ For Each col As DataColumn In DATA.Columns
+ Console.Write(col.ColumnName & vbTab)
+ Next
+ Console.WriteLine()
+
+ ' Alle Zeilen ausgeben
+ For Each row As DataRow In DATA.Rows
For Each col As DataColumn In DATA.Columns
- Console.Write(col.ColumnName & vbTab)
+ Console.Write(row(col).ToString() & vbTab)
Next
Console.WriteLine()
+ Next
- ' Alle Zeilen ausgeben
- For Each row As DataRow In DATA.Rows
- For Each col As DataColumn In DATA.Columns
- Console.Write(row(col).ToString() & vbTab)
- Next
- Console.WriteLine()
- Next
+ '--------------------------------------------------------------------------------------------------------------
+ '-------------HIER WERDEN DIE Zeilen kommuliert---------------------------------------------------------
+ '--------------------------------------------------------------------------------------------------------------
- '--------------------------------------------------------------------------------------------------------------
- '-------------HIER WERDEN DIE Zeilen kommuliert---------------------------------------------------------
- '--------------------------------------------------------------------------------------------------------------
+ ' Neue Tabelle mit gleicher Struktur
+ Dim resultDATA As DataTable = DATA.Clone()
+ '0 = Wartentarifnummer
+ '6 = Wartenbeschreibung
+ '12 = Währung (immer gleich)?
+ ' Gruppieren nach den Schlüsseln Spalte 0, 6 und 12
+ Dim groups = From row In DATA.AsEnumerable()
+ Group row By key1 = row(0), key2 = row(6), key3 = row(12) Into grp = Group
+ Select key1, key2, key3, grp
- ' Neue Tabelle mit gleicher Struktur
- Dim resultDATA As DataTable = DATA.Clone()
- '0 = Wartentarifnummer
- '6 = Wartenbeschreibung
- '12 = Währung (immer gleich)?
- ' Gruppieren nach den Schlüsseln Spalte 0, 6 und 12
- Dim groups = From row In DATA.AsEnumerable()
- Group row By key1 = row(0), key2 = row(6), key3 = row(12) Into grp = Group
- Select key1, key2, key3, grp
+ ' Gruppen durchlaufen und kumulierte Zeilen erstellen
+ For Each g In groups
+ Dim newRow As DataRow = resultDATA.NewRow()
- ' Gruppen durchlaufen und kumulierte Zeilen erstellen
- For Each g In groups
- Dim newRow As DataRow = resultDATA.NewRow()
+ ' Gruppierungsspalten setzen
+ newRow(0) = g.key1
+ newRow(6) = g.key2
+ newRow(12) = g.key3
- ' Gruppierungsspalten setzen
- newRow(0) = g.key1
- newRow(6) = g.key2
- newRow(12) = g.key3
+ ' Summen berechnen
+ newRow(7) = g.grp.Sum(Function(r) ToDoubleSafe(r(7)))
+ newRow(9) = g.grp.Sum(Function(r) ToDoubleSafe(r(9)))
+ newRow(11) = g.grp.Sum(Function(r) ToDoubleSafe(r(11)))
- ' Summen berechnen
- newRow(7) = g.grp.Sum(Function(r) ToDoubleSafe(r(7)))
- newRow(9) = g.grp.Sum(Function(r) ToDoubleSafe(r(9)))
- newRow(11) = g.grp.Sum(Function(r) ToDoubleSafe(r(11)))
+ ' Restliche Spalten Nothing lassen (bleibt automatisch so)
- ' Restliche Spalten Nothing lassen (bleibt automatisch so)
+ resultDATA.Rows.Add(newRow)
+ Next
- resultDATA.Rows.Add(newRow)
- Next
+ ' Falls du das Ergebnis in DATA zurückschreiben willst:
+ DATA = resultDATA
- ' Falls du das Ergebnis in DATA zurückschreiben willst:
- DATA = resultDATA
+ '--------------------------------------------------------------------------------------------------------------
+ '--------------------------------------------------------------------------------------------------------------
- '--------------------------------------------------------------------------------------------------------------
- '--------------------------------------------------------------------------------------------------------------
+ ' Spaltenüberschriften ausgeben
+ For Each col As DataColumn In DATA.Columns
+ Console.Write(col.ColumnName & vbTab)
+ Next
+ Console.WriteLine()
- ' Spaltenüberschriften ausgeben
+ ' Alle Zeilen ausgeben
+ For Each row As DataRow In DATA.Rows
For Each col As DataColumn In DATA.Columns
- Console.Write(col.ColumnName & vbTab)
+ Console.Write(row(col).ToString() & vbTab)
Next
Console.WriteLine()
+ Next
- ' Alle Zeilen ausgeben
+ '--------------------------------------------------------------------------------------------------------------
+
+
+ Dim HandlesRgNr = ""
+ If Blatt.Range("B3") IsNot Nothing AndAlso Blatt.Range("B3").Value IsNot Nothing Then
+ HandlesRgNr = Blatt.Range("B3").Value.ToString().Trim()
+ End If
+ Dim HandlesRgDat = ""
+ If Blatt.Range("B1") IsNot Nothing AndAlso Blatt.Range("B1").Value IsNot Nothing Then
+ HandlesRgDat = Blatt.Range("B1").Value.ToString().Trim()
+ End If
+
+ ' MsgBox("A" & startRows & ":I" & endRows & "")
+
+
+
+ Try
For Each row As DataRow In DATA.Rows
- For Each col As DataColumn In DATA.Columns
- Console.Write(row(col).ToString() & vbTab)
- Next
- Console.WriteLine()
- Next
+ ' Prüfen, ob Spalte 1 (Index 0) gefüllt ist
+ If row(0) IsNot Nothing AndAlso row(0).ToString().Trim() <> "" Then
- '--------------------------------------------------------------------------------------------------------------
+ Dim POSITION As New DAKOSY_Worker.cDakosy_EZA_Warenposition
+ POSITION.ezaWP_WarennummerEZT = row(0).ToString()
+ POSITION.ezaWP_PackstueckAnzahl = "0" ' row(5).ToString()
+ POSITION.ezaWP_PackstueckArt = "PK"
+ ' Sicher konvertieren, falls leer oder ungültig
+ Dim preis As Double
+ Double.TryParse(row(11).ToString(), preis)
+ POSITION.ezaWP_Artikelpreis = preis.ToString("N2")
- Dim HandlesRgNr = ""
- If Blatt.Range("B3") IsNot Nothing AndAlso Blatt.Range("B3").Value IsNot Nothing Then
- HandlesRgNr = Blatt.Range("B3").Value.ToString().Trim()
- End If
- Dim HandlesRgDat = ""
- If Blatt.Range("B1") IsNot Nothing AndAlso Blatt.Range("B1").Value IsNot Nothing Then
- HandlesRgDat = Blatt.Range("B1").Value.ToString().Trim()
- End If
+ POSITION.ezaWP_ArtikelpreisWaehrung = row(12).ToString()
+ POSITION.ezaWP_Warenbezeichnung = row(6).ToString()
- ' MsgBox("A" & startRows & ":I" & endRows & "")
+ Dim masse As Double
+ Double.TryParse(row(9).ToString(), masse)
+ POSITION.ezaWP_Eigenmasse = masse.ToString("N1")
+ ' Ursprungsland ggf. per Select Case setzen
+ 'Select Case row(3).ToString()
+ ' Case "TURKEY" : POSITION.ezaWP_UrsprungslandCode = "TR"
+ ' Case "ITALY" : POSITION.ezaWP_UrsprungslandCode = "IT"
+ ' ...
+ 'End Select
-
- Try
- For Each row As DataRow In DATA.Rows
- ' Prüfen, ob Spalte 1 (Index 0) gefüllt ist
- If row(0) IsNot Nothing AndAlso row(0).ToString().Trim() <> "" Then
-
- Dim POSITION As New DAKOSY_Worker.cDakosy_EZA_Warenposition
- POSITION.ezaWP_WarennummerEZT = row(0).ToString()
- POSITION.ezaWP_PackstueckAnzahl = "0" ' row(5).ToString()
- POSITION.ezaWP_PackstueckArt = "PK"
-
- ' Sicher konvertieren, falls leer oder ungültig
- Dim preis As Double
- Double.TryParse(row(11).ToString(), preis)
- POSITION.ezaWP_Artikelpreis = preis.ToString("N2")
-
- POSITION.ezaWP_ArtikelpreisWaehrung = row(12).ToString()
- POSITION.ezaWP_Warenbezeichnung = row(6).ToString()
-
- Dim masse As Double
- Double.TryParse(row(9).ToString(), masse)
- POSITION.ezaWP_Eigenmasse = masse.ToString("N1")
-
- ' Ursprungsland ggf. per Select Case setzen
- 'Select Case row(3).ToString()
- ' Case "TURKEY" : POSITION.ezaWP_UrsprungslandCode = "TR"
- ' Case "ITALY" : POSITION.ezaWP_UrsprungslandCode = "IT"
- ' ...
- 'End Select
-
- POSITION.ezaWP_UNTERLAGEN.Add(New DAKOSY_Worker.cDakosy_EZA_WarenpositionVorgelegteUnterlagen With {
+ POSITION.ezaWP_UNTERLAGEN.Add(New DAKOSY_Worker.cDakosy_EZA_WarenpositionVorgelegteUnterlagen With {
.ezaWpUl_Art = "N380",
.ezaWpUl_Bereich = "4",
.ezaWpUl_VorlageKz = "J",
@@ -1372,55 +1364,54 @@ Public Class usrCntlATLAS_EZA
.ezaWpUl_DatumAusstellung = Nothing
})
- EZA.eza_WARENPOS.Add(POSITION)
- cnt += 1
- End If
- Next
- Catch ex As Exception
- MsgBox("Fehler beim Einlesen der Excel-Datei!" & vbNewLine & vbNewLine & ex.Message & ex.StackTrace)
- Me.Cursor = Cursors.Default
- Return False
- End Try
-
-
- .Visible = False
-
- ' AddHandler exclApp.WorkbookBeforeClose, AddressOf BeforeBookClose
- 'Excelobjekte freistellten
- ' For Each obj In New Object() {exclApp, Datei, Datei, Blatt, Blatt}
- ' System.Runtime.InteropServices.Marshal.FinalReleaseComObject(obj)
- ' Next
- Datei.Close()
-
-
-
-
+ EZA.eza_WARENPOS.Add(POSITION)
+ cnt += 1
+ End If
+ Next
Catch ex As Exception
- '
+ MsgBox("Fehler beim Einlesen der Excel-Datei!" & vbNewLine & vbNewLine & ex.Message & ex.StackTrace)
Me.Cursor = Cursors.Default
- MsgBox("FEHLER! Datei im richtigen Format?" & vbNewLine & vbNewLine & ex.Message & ex.StackTrace)
- ' Return False
+ Return False
End Try
- End With
+
+
+ .Visible = False
+
+ ' AddHandler exclApp.WorkbookBeforeClose, AddressOf BeforeBookClose
+ 'Excelobjekte freistellten
+ ' For Each obj In New Object() {exclApp, Datei, Datei, Blatt, Blatt}
+ ' System.Runtime.InteropServices.Marshal.FinalReleaseComObject(obj)
+ ' Next
+ Datei.Close()
- ' >>> Hier kannst du jede gültige Excel-Datei weiterverarbeiten:
- Console.WriteLine("Verarbeite Datei: " & filePath)
- ' z. B. Excel öffnen, Range lesen etc.
- Next
- Me.FindForm.SuspendLayout()
- POSITIONEN.setValues(EZA, True)
- btnPositionen.PerformClick()
- Me.FindForm.ResumeLayout()
+ Catch ex As Exception
+ '
+ Me.Cursor = Cursors.Default
+ MsgBox("FEHLER! Datei im richtigen Format?" & vbNewLine & vbNewLine & ex.Message & ex.StackTrace)
+ ' Return False
+ End Try
+ End With
- MsgBox(cnt & " Datensätze wurden eingelesen. ")
- Me.Cursor = Cursors.Default
- Return True
- End If
+ ' >>> Hier kannst du jede gültige Excel-Datei weiterverarbeiten:
+ Console.WriteLine("Verarbeite Datei: " & filePath)
+ ' z. B. Excel öffnen, Range lesen etc.
+ Next
+
+ Me.FindForm.SuspendLayout()
+ POSITIONEN.setValues(EZA, True)
+ btnPositionen.PerformClick()
+ Me.FindForm.ResumeLayout()
+
+ MsgBox(cnt & " Datensätze wurden eingelesen. ")
+
+ Me.Cursor = Cursors.Default
+ Return True
+
Me.Cursor = Cursors.Default
Return False
@@ -1487,17 +1478,15 @@ Public Class usrCntlATLAS_EZA
End Sub
Private Function importExcel_Fressnapf() As Boolean
- Dim fd As New OpenFileDialog With {
- .Filter = "Excel Dateien|*.xls;*.xlsx",
- .Multiselect = True,
- .Title = "Bitte eine oder mehrere Excel-Dateien auswählen"
- }
- If fd.ShowDialog() <> DialogResult.OK Then
- Me.Cursor = Cursors.Default
- MsgBox("Keine Datei ausgewählt!")
- Return False
- End If
+ Dim f As New frmImportFromAVISOAnhaenge(AVISO, SENDUNG)
+ f.ShowDialog(Me)
+ Dim LIST_FILES = f.LIST_FILES
+ If Not f.DialogResult = DialogResult.OK Then Return False
+ If LIST_FILES.Count = 0 Then Return False
+
+
+
Dim cnt As Integer = 0
@@ -1509,7 +1498,7 @@ Public Class usrCntlATLAS_EZA
Me.Cursor = Cursors.WaitCursor
- For Each filePath As String In fd.FileNames
+ For Each filePath As String In LIST_FILES
If Not (filePath.ToLower().EndsWith(".xls") OrElse filePath.ToLower().EndsWith(".xlsx")) Then
Continue For
End If
@@ -1783,6 +1772,8 @@ Public Class usrCntlATLAS_EZA
End Try
End Function
+ Private Sub VERAGIMPORTFormatToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles VERAGIMPORTFormatToolStripMenuItem.Click
+ End Sub
End Class
diff --git a/SDL/ZOLLSYSTEM/frmImportFromAVISOAnhaenge.Designer.vb b/SDL/ZOLLSYSTEM/frmImportFromAVISOAnhaenge.Designer.vb
new file mode 100644
index 00000000..e2332aba
--- /dev/null
+++ b/SDL/ZOLLSYSTEM/frmImportFromAVISOAnhaenge.Designer.vb
@@ -0,0 +1,122 @@
+ _
+Partial Class frmImportFromAVISOAnhaenge
+ Inherits System.Windows.Forms.Form
+
+ 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+ _
+ Protected Overrides Sub Dispose(ByVal disposing As Boolean)
+ Try
+ If disposing AndAlso components IsNot Nothing Then
+ components.Dispose()
+ End If
+ Finally
+ MyBase.Dispose(disposing)
+ End Try
+ End Sub
+
+ 'Wird vom Windows Form-Designer benötigt.
+ Private components As System.ComponentModel.IContainer
+
+ 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+ 'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
+ '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(frmImportFromAVISOAnhaenge))
+ Me.Panel1 = New System.Windows.Forms.Panel()
+ Me.Button2 = New System.Windows.Forms.Button()
+ Me.Button1 = New System.Windows.Forms.Button()
+ Me.Panel2 = New System.Windows.Forms.Panel()
+ Me.dgvAnhang = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components)
+ Me.Button3 = New System.Windows.Forms.Button()
+ Me.Panel1.SuspendLayout()
+ CType(Me.dgvAnhang, System.ComponentModel.ISupportInitialize).BeginInit()
+ Me.SuspendLayout()
+ '
+ 'Panel1
+ '
+ Me.Panel1.Controls.Add(Me.Button3)
+ Me.Panel1.Controls.Add(Me.Button2)
+ Me.Panel1.Controls.Add(Me.Button1)
+ Me.Panel1.Dock = System.Windows.Forms.DockStyle.Bottom
+ Me.Panel1.Location = New System.Drawing.Point(0, 381)
+ Me.Panel1.Name = "Panel1"
+ Me.Panel1.Size = New System.Drawing.Size(800, 69)
+ Me.Panel1.TabIndex = 0
+ '
+ 'Button2
+ '
+ Me.Button2.Location = New System.Drawing.Point(633, 15)
+ Me.Button2.Name = "Button2"
+ Me.Button2.Size = New System.Drawing.Size(155, 42)
+ Me.Button2.TabIndex = 1
+ Me.Button2.Text = "OK"
+ Me.Button2.UseVisualStyleBackColor = True
+ '
+ 'Button1
+ '
+ Me.Button1.Location = New System.Drawing.Point(29, 16)
+ Me.Button1.Name = "Button1"
+ Me.Button1.Size = New System.Drawing.Size(155, 42)
+ Me.Button1.TabIndex = 0
+ Me.Button1.Text = "Aus Datei-Explorer ..."
+ Me.Button1.UseVisualStyleBackColor = True
+ '
+ 'Panel2
+ '
+ Me.Panel2.Dock = System.Windows.Forms.DockStyle.Top
+ Me.Panel2.Location = New System.Drawing.Point(0, 0)
+ Me.Panel2.Name = "Panel2"
+ Me.Panel2.Size = New System.Drawing.Size(800, 36)
+ Me.Panel2.TabIndex = 1
+ '
+ 'dgvAnhang
+ '
+ Me.dgvAnhang.AKTUALISIERUNGS_INTERVALL = -1
+ Me.dgvAnhang.AllowUserToAddRows = False
+ Me.dgvAnhang.AllowUserToDeleteRows = False
+ Me.dgvAnhang.AllowUserToResizeRows = False
+ Me.dgvAnhang.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
+ Me.dgvAnhang.Dock = System.Windows.Forms.DockStyle.Fill
+ Me.dgvAnhang.Location = New System.Drawing.Point(0, 36)
+ Me.dgvAnhang.Name = "dgvAnhang"
+ Me.dgvAnhang.ReadOnly = True
+ Me.dgvAnhang.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect
+ Me.dgvAnhang.Size = New System.Drawing.Size(800, 345)
+ Me.dgvAnhang.TabIndex = 3
+ '
+ 'Button3
+ '
+ Me.Button3.Location = New System.Drawing.Point(205, 16)
+ Me.Button3.Name = "Button3"
+ Me.Button3.Size = New System.Drawing.Size(155, 42)
+ Me.Button3.TabIndex = 2
+ Me.Button3.Text = "Aus Zwischenablage verwenden"
+ Me.Button3.UseVisualStyleBackColor = True
+ '
+ 'frmImportFromAVISOAnhaenge
+ '
+ Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
+ Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
+ Me.ClientSize = New System.Drawing.Size(800, 450)
+ Me.Controls.Add(Me.dgvAnhang)
+ Me.Controls.Add(Me.Panel2)
+ Me.Controls.Add(Me.Panel1)
+ Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
+ Me.Name = "frmImportFromAVISOAnhaenge"
+ Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
+ Me.Text = "Anhang laden"
+ Me.Panel1.ResumeLayout(False)
+ CType(Me.dgvAnhang, System.ComponentModel.ISupportInitialize).EndInit()
+ Me.ResumeLayout(False)
+
+ End Sub
+
+ Friend WithEvents Panel1 As Panel
+ Friend WithEvents Panel2 As Panel
+ Friend WithEvents Button1 As Button
+ Friend WithEvents dgvAnhang As VERAG_PROG_ALLGEMEIN.MyDatagridview
+ Friend WithEvents Button2 As Button
+ Friend WithEvents Button3 As Button
+End Class
diff --git a/SDL/ZOLLSYSTEM/frmImportFromAVISOAnhaenge.resx b/SDL/ZOLLSYSTEM/frmImportFromAVISOAnhaenge.resx
new file mode 100644
index 00000000..d584bd9e
--- /dev/null
+++ b/SDL/ZOLLSYSTEM/frmImportFromAVISOAnhaenge.resx
@@ -0,0 +1,980 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ 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/ZOLLSYSTEM/frmImportFromAVISOAnhaenge.vb b/SDL/ZOLLSYSTEM/frmImportFromAVISOAnhaenge.vb
new file mode 100644
index 00000000..06b97940
--- /dev/null
+++ b/SDL/ZOLLSYSTEM/frmImportFromAVISOAnhaenge.vb
@@ -0,0 +1,161 @@
+Imports System.IO
+Imports DocumentFormat.OpenXml.Drawing.Charts
+Imports VERAG_PROG_ALLGEMEIN
+
+Public Class frmImportFromAVISOAnhaenge
+
+ Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
+
+ Dim AvisoId As Integer = -1
+ Dim SendungID As Integer = -1
+
+
+ Public LIST_FILES As New List(Of String)
+
+ Sub New(avisoId, sendungId)
+
+ ' Dieser Aufruf ist für den Designer erforderlich.
+ InitializeComponent()
+
+ Me.AvisoId = avisoId
+ Me.SendungID = sendungId
+ ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
+
+ End Sub
+
+ Sub New(aviso As VERAG_PROG_ALLGEMEIN.cAviso, sendung As cSendungen)
+
+ ' Dieser Aufruf ist für den Designer erforderlich.
+ InitializeComponent()
+
+ If aviso IsNot Nothing Then
+ Me.AvisoId = aviso.AvisoID
+ End If
+
+ If sendung IsNot Nothing Then
+ Me.SendungID = sendung.tblSnd_SendungID
+ End If
+
+ Me.SendungID = SendungID
+ ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
+
+ End Sub
+
+ Private Sub frmImportFromAVISOAnhaenge_Load(sender As Object, e As EventArgs) Handles Me.Load
+ initAnhang()
+ End Sub
+
+ Sub initAnhang()
+
+ If AvisoId <= 0 Then Exit Sub
+ If SendungID <= 0 Then Exit Sub
+
+ Dim hSQL As String = " SELECT [anh_id],[anh_Name],anh_Datum,[anh_docId],CASE WHEN (anh_SendungsId is null OR anh_SendungsId <=0) AND isnull(aa_name,'')='' THEN '***' ELSE [aa_name] END as [anh_Art],[anh_Typ]
+ FROM [tblAvisoAnhaenge]
+ left join tblAvisoAnhangsArten on aa_bezeichnung = anh_Art
+ WHERE anh_AvisoId=" & AvisoId & " AND (anh_SendungsId is null OR anh_SendungsId <=0 OR anh_SendungsId=" & SendungID & ")
+ ORDER BY anh_SendungsId desc, case when aa_sort = NULL THEN 15 else aa_sort END, [anh_Reihenfolge],[anh_id]"
+
+ dgvAnhang.DataSource = SQL.loadDgvBySql(hSQL, "AVISO")
+
+ If dgvAnhang.RowCount = 0 Then dgvAnhang.Columns.Clear() : Exit Sub
+
+ With dgvAnhang
+ .RowTemplate.Height = 35
+ '.RowTemplate.MinimumHeight = 30
+ .AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
+ .Columns("anh_id").Visible = False 'VermerkID nicht anzeigen
+ .Columns("anh_docId").Visible = False 'AvisoID nicht anzeigen
+
+ .Columns("anh_Name").MinimumWidth = 150
+ .Columns("anh_Name").HeaderText = "Name"
+ .Columns("anh_Name").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
+
+ .Columns("anh_Datum").Width = 120
+ .Columns("anh_Datum").HeaderText = "Datum"
+
+ .Columns("anh_Art").MinimumWidth = 100
+ .Columns("anh_Art").HeaderText = "Art"
+ .Columns("anh_Art").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter
+
+ .Columns("anh_Typ").Width = 150
+ .Columns("anh_Typ").HeaderText = "Typ"
+ .Columns("anh_Typ").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter
+
+
+
+ .ClearSelection()
+
+ End With
+
+ End Sub
+
+ Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
+ If dgvAnhang.SelectedRows.Count = 0 Then Exit Sub
+ LIST_FILES.Clear()
+
+ For Each r In dgvAnhang.SelectedRows
+ Dim docId As Integer = CInt(r.cells("anh_docId").value)
+ If docId > 0 Then
+ Dim tempFile As String = VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(docId)
+ If tempFile <> "" Then
+ LIST_FILES.Add(tempFile)
+ End If
+ End If
+ Next
+ If LIST_FILES.Count > 0 Then
+ Me.DialogResult = DialogResult.OK
+ Me.Close()
+ Else
+ Me.DialogResult = DialogResult.None
+ End If
+ End Sub
+
+ Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
+ Dim fd As New OpenFileDialog With {
+ .Filter = "Excel Dateien|*.xls;*.xlsx",
+ .Multiselect = True,
+ .Title = "Bitte eine oder mehrere Excel-Dateien auswählen"
+ }
+
+ Dim result As DialogResult = fd.ShowDialog()
+
+ If result <> DialogResult.OK Then
+ Me.Cursor = Cursors.Default
+ MsgBox("Keine Datei ausgewählt!")
+ Me.DialogResult = DialogResult.None
+ Exit Sub
+ Else
+
+ For Each filePath As String In fd.FileNames
+ If Not filePath.ToLower.EndsWith(".xls") AndAlso Not filePath.ToLower.EndsWith(".xlsx") Then
+ ' Ungültige Datei – überspringen oder abbrechen
+ Continue For
+ End If
+ LIST_FILES.Add(filePath)
+ Next
+ If LIST_FILES.Count > 0 Then
+ Me.DialogResult = DialogResult.OK
+ Me.Close()
+ Else
+ Me.DialogResult = DialogResult.None
+ End If
+ End If
+
+ End Sub
+
+ Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
+ Dim data As IDataObject = Clipboard.GetDataObject
+ For Each s As String In My.Computer.Clipboard.GetFileDropList() 'GetData(DataFormats.) 'data.GetData(DataFormats.FileDrop) 'DataFormats.FileDrop)
+ If System.IO.File.Exists(s) Then
+ LIST_FILES.Add(s)
+ End If
+ Next
+ If LIST_FILES.Count > 0 Then
+ Me.DialogResult = DialogResult.OK
+ Me.Close()
+ Else
+ Me.DialogResult = DialogResult.None
+ End If
+ End Sub
+End Class
\ No newline at end of file
diff --git a/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/RELAYHUB/cRelayHub.vb b/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/RELAYHUB/cRelayHub.vb
index c9392957..e799662e 100644
--- a/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/RELAYHUB/cRelayHub.vb
+++ b/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/RELAYHUB/cRelayHub.vb
@@ -44,11 +44,10 @@ Public Class cRelayHub
Public Class cRelayHubHeaderData
Public Property agentContact As cRelayHubAgentContact
Public Property declarantIsConsignee As Boolean
- Public Property representationRelationshipCode As String
- Public Property inputTaxDeduction As String
+ Public Property representationRelationshipCode As Integer ' <- war String
+ Public Property inputTaxDeduction As Boolean ' <- war String
Public Property procedureCodeRequested As String
- Public Property goodsStatus As String
- Public Property costs As List(Of cRelayHubCost)
+ ' Entfernt: goodsStatus, costs (nicht im Schema an dieser Stelle)
Public Property transportMeansArrivalIdentity As String
Public Property transportMeansNationalityCode As String
Public Property previousAdministrativeReferenceType As String
@@ -57,7 +56,7 @@ Public Class cRelayHub
Public Property destinationCountry As String
Public Property departureCountry As String
Public Property addressedCustomsOffice As String
- Public Property dv1CostAllocation As cRelayHubDv1CostAllocation ' <--- NEU
+ Public Property dv1CostAllocation As cRelayHubDv1CostAllocation
End Class
Public Class cRelayHubAddress
@@ -87,9 +86,12 @@ Public Class cRelayHub
Public Property dispatchCountry As String
Public Property destinationCountry As String
Public Property regimeType As String
- Public Property customer As String
+ ' Entfernt: customer (vom Schema abgelehnt)
Public Property documents As List(Of cRelayHubDocument)
Public Property additionalData As cRelayHubAdditionalData
+
+ ' Neu: Pflichtfeld lt. Fehlermeldung
+ Public Property outputApplication As String ' "test" | "dakosy/sftp/vera" | "evrim/excel" | "sec/import/integration"
End Class
Public Class cRelayHubJobOrderResponse
@@ -117,9 +119,9 @@ Public Class cRelayHub
http.SetRequestHeader("Accept", "application/json")
' *** Token aus der separaten Token-Klasse beziehen ***
- Dim token As String = cRelayHubToken.GetValidAccessToken()
+ Dim token As String = cRelayHubToken.GetAccessToken()
http.AuthToken = token ' -> setzt Authorization: Bearer
-
+ Console.WriteLine("Using Token: " & token)
Return http.PostJson2(API_URL & "/job-orders/init", "application/json", jsonPayload)
End Function
@@ -140,29 +142,29 @@ Public Class cRelayHub
}
End If
- ' 401 → Token-Cache invalidieren und genau 1x erneut probieren
- If response.StatusCode = 401 Then
- ' WICHTIG:
- ' Diese Methode sollte in cRelayHubToken als Public verfügbar sein:
- ' Public Shared Sub ResetTokenCache() : ClearToken() : End Sub
- ' → Falls noch nicht vorhanden, bitte dort ergänzen.
- Try
- cRelayHubToken.ResetTokenCache()
- Catch
- ' Falls die Methode (noch) nicht existiert, kann man als Fallback
- ' hier eine kurze Wartezeit einbauen und anschließend erneut GetValidAccessToken() aufrufen.
- ' Threading.Thread.Sleep(100)
- End Try
+ '' 401 → Token-Cache invalidieren und genau 1x erneut probieren
+ 'If response.StatusCode = 401 Then
+ ' ' WICHTIG:
+ ' ' Diese Methode sollte in cRelayHubToken als Public verfügbar sein:
+ ' ' Public Shared Sub ResetTokenCache() : ClearToken() : End Sub
+ ' ' → Falls noch nicht vorhanden, bitte dort ergänzen.
+ ' Try
+ ' cRelayHubToken.ResetTokenCache()
+ ' Catch
+ ' ' Falls die Methode (noch) nicht existiert, kann man als Fallback
+ ' ' hier eine kurze Wartezeit einbauen und anschließend erneut GetValidAccessToken() aufrufen.
+ ' ' Threading.Thread.Sleep(100)
+ ' End Try
- ' Retry
- response = SendJobOrder(jsonPayload)
- If response Is Nothing Then
- Return New cRelayHubApiResult With {
- .Success = False, .StatusCode = 0, .Message = "Verbindungsfehler (nach Refresh)",
- .Details = "Keine Antwort erhalten."
- }
- End If
- End If
+ ' ' Retry
+ ' response = SendJobOrder(jsonPayload)
+ ' If response Is Nothing Then
+ ' Return New cRelayHubApiResult With {
+ ' .Success = False, .StatusCode = 0, .Message = "Verbindungsfehler (nach Refresh)",
+ ' .Details = "Keine Antwort erhalten."
+ ' }
+ ' End If
+ 'End If
' Auswertung
result.StatusCode = response.StatusCode
@@ -208,61 +210,58 @@ Public Class cRelayHub
' Beispielfall
Function CreateSampleJobOrderRequest() As cRelayHubJobOrderRequest
- Dim request As New cRelayHubJobOrderRequest With {
- .referenceNo = "1001K",
- .dispatchCountry = "TR",
- .destinationCountry = "EN",
- .regimeType = "IM",
- .customer = "AVISO",
- .documents = New List(Of cRelayHubDocument) From {
- New cRelayHubDocument With {.type = "base64", .base64String = "SGVsbG8sIHRoaXMgaXMgYSBzYW1wbGUgYmFzZTY0IHN0cmluZy4=", .filename = "test.txt", .fileType = "invoice"},
- New cRelayHubDocument With {.type = "base64", .base64String = "SGVsbG8sIHRoaXMgaXMgYSBzYW1wbGUgYmFzZTY0IHN0cmluZy4=", .filename = "test2.txt", .fileType = "atr"},
- New cRelayHubDocument With {.type = "base64", .base64String = "SGVsbG8sIHRoaXMgaXMgYSBzYW1wbGUgYmFzZTY0IHN0cmluZy4=", .filename = "test3.txt", .fileType = "cmr"}
- },
- .additionalData = New cRelayHubAdditionalData With {
- .transaction = New cRelayHubTransaction With {
- .ioPartner = "VERA",
- .ioDivision3 = "SUB",
- .ioReference = "4803/25001763_1301250935SS/samimx"
+ Dim req As New cRelayHubJobOrderRequest With {
+ .referenceNo = "1001K",
+ .dispatchCountry = "TR", ' ISO-2
+ .destinationCountry = "DE", ' ISO-2 (nicht "EN")
+ .regimeType = "IMPORT", ' "IMPORT" | "EXPORT"
+ .outputApplication = "test", ' Pflichtfeld lt. Validator
+ .documents = New List(Of cRelayHubDocument) From {
+ New cRelayHubDocument With {.type = "base64", .base64String = "SGVsbG8sIHRoaXMgaXMgYSBzYW1wbGUgYmFzZTY0IHN0cmluZy4=", .filename = "test.txt", .fileType = "invoice"},
+ New cRelayHubDocument With {.type = "base64", .base64String = "SGVsbG8sIHRoaXMgaXMgYSBzYW1wbGUgYmFzZTY0IHN0cmluZy4=", .filename = "test2.txt", .fileType = "atr"},
+ New cRelayHubDocument With {.type = "base64", .base64String = "SGVsbG8sIHRoaXMgaXMgYSBzYW1wbGUgYmFzZTY0IHN0cmluZy4=", .filename = "test3.txt", .fileType = "cmr"}
+ },
+ .additionalData = New cRelayHubAdditionalData With {
+ .transaction = New cRelayHubTransaction With {
+ .ioPartner = "VERA",
+ .ioDivision3 = "SUB",
+ .ioReference = "4803/25001763_1301250935SS/samimx"
+ },
+ .declaration = New List(Of cRelayHubDeclaration) From {
+ New cRelayHubDeclaration With {
+ .objectIdentification = New cRelayHubObjectIdentification With {
+ .objectName = "4803/25001763",
+ .objectAlias = "1349846",
+ .declarationType = "EZA-D"
},
- .declaration = New List(Of cRelayHubDeclaration) From {
- New cRelayHubDeclaration With {
- .objectIdentification = New cRelayHubObjectIdentification With {
- .objectName = "4803/25001763",
- .objectAlias = "1349846",
- .declarationType = "EZA-D"
- },
- .headerData = New cRelayHubHeaderData With {
- .agentContact = New cRelayHubAgentContact With {
- .contactPersonName = "AMANN",
- .contactPersonPhoneNumber = "+49 123 456 789",
- .contactPersonPosition = "Manager"
- },
- .declarantIsConsignee = True,
- .representationRelationshipCode = "1",
- .inputTaxDeduction = "true",
- .procedureCodeRequested = "42",
- .goodsStatus = "EU",
- .costs = New List(Of cRelayHubCost) From {
- New cRelayHubCost With {.costAmount = "25909.92", .costCurrency = "EUR"}
- },
- .transportMeansArrivalIdentity = "PB1552EC",
- .transportMeansNationalityCode = "BG",
- .previousAdministrativeReferenceType = "T1",
- .previousAdministrativeReferenceNumber = "25TR160100001472M0",
- .destinationFederalState = "07",
- .destinationCountry = "DE",
- .departureCountry = "TR"
- },
- .addresses = New List(Of cRelayHubAddress) From {
- New cRelayHubAddress With {.addressType = "CZ", .participantEORI = "EORI12345", .participantSubsidiaryNumber = "001", .companyName = "SISECAM DIS TIC.A.S.", .streetAndNumber = "D-100 KARAYOLU CD.YAYLA MH.NO.70/C", .countryCode = "TR", .postalCode = "34949", .city = "TUZLA ISTANBUL"},
- New cRelayHubAddress With {.addressType = "CN", .participantEORI = "EORI67890", .participantSubsidiaryNumber = "002", .companyName = "POLYNT COMPOSITES GERMANY GMBH", .streetAndNumber = "KIESELSTRASSE 2", .countryCode = "DE", .postalCode = "56357", .city = "MIEHLEN"}
- }
- }
+ .headerData = New cRelayHubHeaderData With {
+ .agentContact = New cRelayHubAgentContact With {
+ .contactPersonName = "AMANN",
+ .contactPersonPhoneNumber = "+49 123 456 789",
+ .contactPersonPosition = "Manager",
+ .contactPersonEmail = "a@example.com"
+ },
+ .declarantIsConsignee = True,
+ .representationRelationshipCode = 1, ' Integer
+ .inputTaxDeduction = True, ' Boolean
+ .procedureCodeRequested = "42", ' goodsStatus/costs entfernt
+ .transportMeansArrivalIdentity = "PB1552EC",
+ .transportMeansNationalityCode = "BG",
+ .previousAdministrativeReferenceType = "T1",
+ .previousAdministrativeReferenceNumber = "25TR160100001472M0",
+ .destinationFederalState = "07",
+ .destinationCountry = "DE",
+ .departureCountry = "TR"
+ },
+ .addresses = New List(Of cRelayHubAddress) From {
+ New cRelayHubAddress With {.addressType = "CZ", .participantEORI = "EORI12345", .participantSubsidiaryNumber = "001", .companyName = "SISECAM DIS TIC.A.S.", .streetAndNumber = "D-100 KARAYOLU CD.YAYLA MH.NO.70/C", .countryCode = "TR", .postalCode = "34949", .city = "TUZLA ISTANBUL"},
+ New cRelayHubAddress With {.addressType = "CN", .participantEORI = "EORI67890", .participantSubsidiaryNumber = "002", .companyName = "POLYNT COMPOSITES GERMANY GMBH", .streetAndNumber = "KIESELSTRASSE 2", .countryCode = "DE", .postalCode = "56357", .city = "MIEHLEN"}
}
}
}
- Return request
+ }
+ }
+ Return req
End Function
End Class
diff --git a/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/RELAYHUB/cRelayHubToken.vb b/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/RELAYHUB/cRelayHubToken.vb
index abfcd998..e52969ab 100644
--- a/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/RELAYHUB/cRelayHubToken.vb
+++ b/VERAG_PROG_ALLGEMEIN/Schnittstellen/ATEZ/RELAYHUB/cRelayHubToken.vb
@@ -1,245 +1,199 @@
-Imports Newtonsoft.Json
+Imports System
Imports System.IO
+Imports System.Net.Http
Imports System.Text
+Imports System.Web
+Imports Newtonsoft.Json
+
+' NuGet: Newtonsoft.Json (>= 13.x)
Public Class cRelayHubToken
- ' === Token-Datenmodell ===
- Private Class TokenState
- Public AccessToken As String
- Public RefreshToken As String
- Public AccessExpiryUtc As DateTime
- Public RefreshExpiryUtc As DateTime
- End Class
+ ' ======= KONFIG =======
+ Private Shared ReadOnly TOKEN_ENDPOINT As String =
+ "https://dev-kc.singlewindow.io/auth/realms/agsw/protocol/openid-connect/token"
- ' === Keycloak-Config ===
- Private Shared ReadOnly KC_BASE As String = "https://dev-kc.singlewindow.io"
- Private Shared ReadOnly KC_TOKEN_PATH As String = "/auth/realms/agsw/protocol/openid-connect/token"
- Private Shared ReadOnly KC_CLIENT_ID As String = "agsw-admin"
- Private Shared ReadOnly KC_USERNAME As String = "andreas.test@test.com"
- Private Shared ReadOnly KC_PASSWORD As String = "Password.123"
- Private Shared ReadOnly SKEW As TimeSpan = TimeSpan.FromSeconds(30)
+ Private Shared ReadOnly CLIENT_ID As String = "agsw-admin"
- ' === Cache/Persistenz ===
- Private Shared _ts As TokenState = Nothing
- Private Shared ReadOnly TOKEN_FILE As String = Path.Combine(
- Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
- "RelayHub", "token.cache"
- )
- Private Shared ReadOnly _lockObj As New Object()
+ ' Gewünscht: Zugangsdaten in der Klasse definieren
+ Private Shared ReadOnly USERNAME As String = "andreas.test@test.com"
+ Private Shared ReadOnly PASSWORD As String = "Password.123"
- ' -------------- DPAPI via Reflection (keine Compile-Abhängigkeit!) --------------
- Private Shared Function TryProtect(plain As Byte()) As Byte()
- Try
- ' Versuche: Typen aus Assembly "System.Security" oder aus aktuellen Laufzeit-Assemblys laden
- Dim dpType As Type = Type.GetType("System.Security.Cryptography.ProtectedData, System.Security", throwOnError:=False)
- If dpType Is Nothing Then
- dpType = Type.GetType("System.Security.Cryptography.ProtectedData", throwOnError:=False)
+ ' Token-File pro Benutzer unter %AppData%
+ Private Shared ReadOnly StorePath As String =
+ Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
+ "RelayHub", "token.json")
+
+ ' Sicherheitspuffer, bevor wir erneuern (Sekunden)
+ Private Const ExpirySkewSeconds As Integer = 60
+
+ ' ======= ÖFFENTLICHE API =======
+ '''
+ ''' Liefert einen gültigen Access Token (nie Leerstring).
+ '''
+ Public Shared Function GetAccessToken() As String
+ Dim store = LoadStore()
+
+ ' 1) Wenn wir einen (noch) gültigen Token haben
+ If store IsNot Nothing AndAlso Not String.IsNullOrWhiteSpace(store.AccessToken) Then
+ If store.ExpiresAtUtc > DateTimeOffset.UtcNow.AddSeconds(ExpirySkewSeconds) Then
+ Return store.AccessToken
End If
- Dim scopeType As Type = Type.GetType("System.Security.Cryptography.DataProtectionScope, System.Security", throwOnError:=False)
- If dpType Is Nothing OrElse scopeType Is Nothing Then Return Nothing
-
- Dim scopeObj As Object = [Enum].Parse(scopeType, "CurrentUser")
- Dim mi = dpType.GetMethod("Protect", New Type() {GetType(Byte()), GetType(Byte()), scopeType})
- If mi Is Nothing Then Return Nothing
-
- Dim res = mi.Invoke(Nothing, New Object() {plain, Nothing, scopeObj})
- Return TryCast(res, Byte())
- Catch
- Return Nothing
- End Try
- End Function
-
- Private Shared Function TryUnprotect(protectedBytes As Byte()) As Byte()
- Try
- Dim dpType As Type = Type.GetType("System.Security.Cryptography.ProtectedData, System.Security", throwOnError:=False)
- If dpType Is Nothing Then
- dpType = Type.GetType("System.Security.Cryptography.ProtectedData", throwOnError:=False)
- End If
- Dim scopeType As Type = Type.GetType("System.Security.Cryptography.DataProtectionScope, System.Security", throwOnError:=False)
- If dpType Is Nothing OrElse scopeType Is Nothing Then Return Nothing
-
- Dim scopeObj As Object = [Enum].Parse(scopeType, "CurrentUser")
- Dim mi = dpType.GetMethod("Unprotect", New Type() {GetType(Byte()), GetType(Byte()), scopeType})
- If mi Is Nothing Then Return Nothing
-
- Dim res = mi.Invoke(Nothing, New Object() {protectedBytes, Nothing, scopeObj})
- Return TryCast(res, Byte())
- Catch
- Return Nothing
- End Try
- End Function
-
- ' -------------- Persistenz: bevorzugt DPAPI, Fallback Plain-File --------------
- Private Shared Sub SaveTokenSecure(ts As TokenState)
- Try
- Dim dir = Path.GetDirectoryName(TOKEN_FILE)
- If Not Directory.Exists(dir) Then Directory.CreateDirectory(dir)
-
- Dim payload As String = String.Join(vbLf, {
- ts.AccessToken,
- ts.RefreshToken,
- ts.AccessExpiryUtc.Ticks.ToString(),
- ts.RefreshExpiryUtc.Ticks.ToString()
- })
- Dim plain = Encoding.UTF8.GetBytes(payload)
-
- Dim protectedBytes = TryProtect(plain)
- If protectedBytes IsNot Nothing Then
- File.WriteAllBytes(TOKEN_FILE, protectedBytes)
- Else
- ' Fallback (nur zu Testzwecken!)
- File.WriteAllText(TOKEN_FILE, payload, Encoding.UTF8)
- End If
- Catch
- ' optional loggen
- End Try
- End Sub
-
- Private Shared Function LoadTokenSecure() As TokenState
- Try
- If Not File.Exists(TOKEN_FILE) Then Return Nothing
-
- ' Zuerst versuchen wir, als DPAPI-Bytes zu lesen und zu entschlüsseln
- Dim raw = File.ReadAllBytes(TOKEN_FILE)
- Dim plain = TryUnprotect(raw)
-
- Dim content As String
- If plain Is Nothing Then
- ' Fallback: als Text lesen (falls zuvor ohne DPAPI gespeichert)
- content = File.ReadAllText(TOKEN_FILE, Encoding.UTF8)
- Else
- content = Encoding.UTF8.GetString(plain)
- End If
-
- Dim s = content.Split({vbLf}, StringSplitOptions.None)
- If s.Length < 4 Then Return Nothing
- Return New TokenState With {
- .AccessToken = s(0),
- .RefreshToken = s(1),
- .AccessExpiryUtc = New DateTime(Long.Parse(s(2)), DateTimeKind.Utc),
- .RefreshExpiryUtc = New DateTime(Long.Parse(s(3)), DateTimeKind.Utc)
- }
- Catch
- Return Nothing
- End Try
- End Function
-
- Private Shared Sub ClearToken()
- SyncLock _lockObj
- _ts = Nothing
- Try
- If File.Exists(TOKEN_FILE) Then File.Delete(TOKEN_FILE)
- Catch
- End Try
- End SyncLock
- End Sub
-
- ' -------------- Utilities --------------
- Private Shared Function UtcNow() As DateTime
- Return DateTime.UtcNow
- End Function
-
- Private Shared Function IsAccessValid(ts As TokenState) As Boolean
- Return ts IsNot Nothing AndAlso Not String.IsNullOrEmpty(ts.AccessToken) AndAlso UtcNow() < ts.AccessExpiryUtc - SKEW
- End Function
-
- Private Shared Function IsRefreshValid(ts As TokenState) As Boolean
- Return ts IsNot Nothing AndAlso Not String.IsNullOrEmpty(ts.RefreshToken) AndAlso UtcNow() < ts.RefreshExpiryUtc - SKEW
- End Function
-
- ' -------------- OAuth Flows --------------
- Private Shared Function PasswordLogin() As TokenState
- Dim http As New Chilkat.Http
- Dim req As New Chilkat.HttpRequest
- req.HttpVerb = "POST"
- req.Path = KC_TOKEN_PATH
- req.AddParam("grant_type", "password")
- req.AddParam("username", KC_USERNAME)
- req.AddParam("password", KC_PASSWORD)
- req.AddParam("client_id", KC_CLIENT_ID)
- req.AddParam("scope", "openid offline_access")
- req.AddHeader("Content-Type", "application/x-www-form-urlencoded")
-
- Dim resp = http.PostUrlEncoded(KC_BASE, req)
- If resp Is Nothing Then Throw New Exception("Token-Request fehlgeschlagen: " & http.LastErrorText)
- If resp.StatusCode <> 200 Then Throw New Exception("Password-Grant fehlgeschlagen: " & resp.StatusCode & " - " & resp.BodyStr)
-
- Dim json As New Chilkat.JsonObject : json.Load(resp.BodyStr)
- Dim access = json.StringOf("access_token")
- Dim refresh = json.StringOf("refresh_token")
- Dim exp = Math.Max(60, json.IntOf("expires_in"))
- Dim rexp = Math.Max(300, json.IntOf("refresh_expires_in"))
-
- Dim ts = New TokenState With {
- .AccessToken = access,
- .RefreshToken = refresh,
- .AccessExpiryUtc = UtcNow().AddSeconds(exp),
- .RefreshExpiryUtc = UtcNow().AddSeconds(rexp)
- }
- SaveTokenSecure(ts)
- Return ts
- End Function
-
- Private Shared Function RefreshLogin(oldTs As TokenState) As TokenState
- If oldTs Is Nothing OrElse String.IsNullOrEmpty(oldTs.RefreshToken) Then
- Throw New Exception("Kein gültiger Refresh-Token vorhanden.")
End If
- Dim http As New Chilkat.Http
- Dim req As New Chilkat.HttpRequest
- req.HttpVerb = "POST"
- req.Path = KC_TOKEN_PATH
- req.AddParam("grant_type", "refresh_token")
- req.AddParam("refresh_token", oldTs.RefreshToken)
- req.AddParam("client_id", KC_CLIENT_ID)
- req.AddHeader("Content-Type", "application/x-www-form-urlencoded")
+ ' 2) Versuche Refresh, falls vorhanden
+ If store IsNot Nothing AndAlso Not String.IsNullOrWhiteSpace(store.RefreshToken) Then
+ store = TryRefresh(store.RefreshToken)
+ End If
- Dim resp = http.PostUrlEncoded(KC_BASE, req)
- If resp Is Nothing Then Throw New Exception("Refresh-Request fehlgeschlagen: " & http.LastErrorText)
- If resp.StatusCode <> 200 Then Throw New Exception("Refresh fehlgeschlagen: " & resp.StatusCode & " - " & resp.BodyStr)
+ ' 3) Fallback: Password-Grant Login
+ If store Is Nothing OrElse String.IsNullOrWhiteSpace(store.AccessToken) Then
+ store = PasswordLogin()
+ End If
- Dim json As New Chilkat.JsonObject : json.Load(resp.BodyStr)
- Dim access = json.StringOf("access_token")
- Dim refresh = json.StringOf("refresh_token") ' Rotation beachten
- Dim exp = Math.Max(60, json.IntOf("expires_in"))
- Dim rexp = Math.Max(300, json.IntOf("refresh_expires_in"))
+ ' Validierung
+ If store Is Nothing OrElse String.IsNullOrWhiteSpace(store.AccessToken) Then
+ Throw New ApplicationException("Konnte keinen gültigen Access Token erhalten (leer).")
+ End If
- Dim ts = New TokenState With {
- .AccessToken = access,
- .RefreshToken = refresh,
- .AccessExpiryUtc = UtcNow().AddSeconds(exp),
- .RefreshExpiryUtc = UtcNow().AddSeconds(rexp)
+ ' Persistieren & zurück
+ SaveStore(store)
+ Return store.AccessToken
+ End Function
+
+ ' ======= INTERNES =======
+ Private Shared Function PasswordLogin() As TokenStore
+ Dim form = New Dictionary(Of String, String) From {
+ {"grant_type", "password"},
+ {"username", USERNAME},
+ {"password", PASSWORD},
+ {"client_id", CLIENT_ID}
}
- SaveTokenSecure(ts)
- Return ts
+
+ Dim resp = PostForm(form)
+ Dim token = ParseTokenResponse(resp)
+
+ Return token
End Function
- ' -------------- Public API --------------
- Public Shared Function GetValidAccessToken() As String
- SyncLock _lockObj
- If _ts Is Nothing Then _ts = LoadTokenSecure()
+ Private Shared Function TryRefresh(refreshToken As String) As TokenStore
+ Try
+ Dim form = New Dictionary(Of String, String) From {
+ {"grant_type", "refresh_token"},
+ {"refresh_token", refreshToken},
+ {"client_id", CLIENT_ID}
+ }
+ Dim resp = PostForm(form)
+ Dim token = ParseTokenResponse(resp)
- If IsAccessValid(_ts) Then
- Return _ts.AccessToken
+ ' Nur speichern, wenn ein Access Token vorhanden ist
+ If Not String.IsNullOrWhiteSpace(token.AccessToken) Then
+ SaveStore(token)
+ Return token
End If
+ Catch ex As Exception
+ ' Ignorieren -> fällt auf PasswordLogin zurück
+ End Try
- If IsRefreshValid(_ts) Then
- Try
- _ts = RefreshLogin(_ts)
- Return _ts.AccessToken
- Catch
- ' fällt durch auf PasswordLogin
- End Try
- End If
-
- _ts = PasswordLogin()
- Return _ts.AccessToken
- End SyncLock
+ Return Nothing
End Function
- Public Shared Sub ResetTokenCache()
- ClearToken()
+ Private Shared Function PostForm(formFields As Dictionary(Of String, String)) As String
+ Using client As New HttpClient()
+ Using content As New FormUrlEncodedContent(formFields)
+ Dim response = client.PostAsync(TOKEN_ENDPOINT, content).Result
+ Dim body = response.Content.ReadAsStringAsync().Result
+
+ If Not response.IsSuccessStatusCode Then
+ Throw New ApplicationException(
+ $"Token-Endpoint Fehler ({CInt(response.StatusCode)}): {body}")
+ End If
+
+ Return body
+ End Using
+ End Using
+ End Function
+
+ Private Shared Function ParseTokenResponse(json As String) As TokenStore
+ Dim r = JsonConvert.DeserializeObject(Of TokenResponse)(json)
+
+ If r Is Nothing OrElse String.IsNullOrWhiteSpace(r.access_token) Then
+ Throw New ApplicationException("Token-Antwort ungültig oder ohne access_token.")
+ End If
+
+ Dim now = DateTimeOffset.UtcNow
+ Dim expiresIn = If(r.expires_in <= 0, 3600, r.expires_in) ' Fallback 1h
+
+ Dim store = New TokenStore With {
+ .AccessToken = r.access_token.Trim(),
+ .RefreshToken = If(r.refresh_token, String.Empty),
+ .ExpiresAtUtc = now.AddSeconds(expiresIn)
+ }
+
+ ' === Konsolen-Ausgabe ===
+ Console.WriteLine("== Neuer Token erhalten ==")
+ Console.WriteLine("Access Token: " & store.AccessToken)
+ Console.WriteLine("Refresh Token: " & store.RefreshToken)
+ Console.WriteLine("Gültig bis UTC: " & store.ExpiresAtUtc.ToString("yyyy-MM-dd HH:mm:ss"))
+
+ Return store
+ End Function
+
+ ' ======= PERSISTENZ =======
+ Private Shared Function LoadStore() As TokenStore
+ Try
+ If File.Exists(StorePath) Then
+ Dim json = File.ReadAllText(StorePath, Encoding.UTF8)
+ Dim s = JsonConvert.DeserializeObject(Of TokenStore)(json)
+ ' Ausgabe in Konsole
+ If s IsNot Nothing Then
+ Console.WriteLine("== Token aus Datei geladen ==")
+ Console.WriteLine("Access Token: " & (If(String.IsNullOrWhiteSpace(s.AccessToken), "", s.AccessToken)))
+ Console.WriteLine("Refresh Token: " & (If(String.IsNullOrWhiteSpace(s.RefreshToken), "", s.RefreshToken)))
+ Console.WriteLine("Gültig bis UTC: " & s.ExpiresAtUtc.ToString("yyyy-MM-dd HH:mm:ss"))
+ End If
+ Return s
+ Else
+ ' Datei existiert nicht -> Info ausgeben
+ Console.WriteLine("Keine Token-Datei vorhanden, neuer Login erforderlich.")
+ End If
+ Catch ex As Exception
+ Console.WriteLine("Fehler beim Laden der Token-Datei: " & ex.Message)
+ ' Datei defekt? -> Ignorieren, neu holen
+ End Try
+ Return Nothing
+ End Function
+
+ Private Shared Sub SaveStore(store As TokenStore)
+ Try
+ Dim dir = Path.GetDirectoryName(StorePath)
+ If Not Directory.Exists(dir) Then Directory.CreateDirectory(dir)
+
+ ' Datei immer neu schreiben/überschreiben
+ Dim json = JsonConvert.SerializeObject(store, Formatting.Indented)
+ File.WriteAllText(StorePath, json, Encoding.UTF8)
+
+ Console.WriteLine("Token-Datei gespeichert: " & StorePath)
+ Catch ex As Exception
+ Console.WriteLine("Fehler beim Speichern der Token-Datei: " & ex.Message)
+ End Try
End Sub
-End Class
\ No newline at end of file
+ ' ======= DTOs =======
+ Private Class TokenResponse
+ Public Property access_token As String
+ Public Property expires_in As Integer
+ Public Property refresh_expires_in As Integer
+ Public Property refresh_token As String
+ Public Property token_type As String
+ Public Property scope As String
+ ' … weitere Felder bei Bedarf
+ End Class
+
+ Private Class TokenStore
+ Public Property AccessToken As String
+ Public Property RefreshToken As String
+ Public Property ExpiresAtUtc As DateTimeOffset
+ End Class
+
+End Class