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