diff --git a/TEMUKJD/KJD.csproj b/TEMUKJD/KJD.csproj index 34e4560..21a7b94 100644 --- a/TEMUKJD/KJD.csproj +++ b/TEMUKJD/KJD.csproj @@ -201,6 +201,12 @@ TemuJitForm.cs + + Form + + + ComplianceForm.cs + Form @@ -890,6 +896,9 @@ TemuJitForm.cs + + ComplianceForm.cs + DbProductCategorySearch.cs diff --git a/TEMUKJD/KJDForms/ProductForms/TemuJitForm.Designer.cs b/TEMUKJD/KJDForms/ProductForms/TemuJitForm.Designer.cs index d84b47e..9dc9e5f 100644 --- a/TEMUKJD/KJDForms/ProductForms/TemuJitForm.Designer.cs +++ b/TEMUKJD/KJDForms/ProductForms/TemuJitForm.Designer.cs @@ -50,7 +50,7 @@ namespace TemuKJD.KJDForms.ProductForms this.dtpStartTime = new System.Windows.Forms.DateTimePicker(); this.btnStop = new DevComponents.DotNetBar.PanelEx(); this.btnSearchPrice2 = new DevComponents.DotNetBar.PanelEx(); - this.txtSkcId = new System.Windows.Forms.TextBox(); + this.txtSpuId = new System.Windows.Forms.TextBox(); this.label7 = new System.Windows.Forms.Label(); this.btnEmpty = new DevComponents.DotNetBar.PanelEx(); this.label5 = new System.Windows.Forms.Label(); @@ -160,7 +160,7 @@ namespace TemuKJD.KJDForms.ProductForms this.ucGroupBoxEx1.Controls.Add(this.dtpStartTime); this.ucGroupBoxEx1.Controls.Add(this.btnStop); this.ucGroupBoxEx1.Controls.Add(this.btnSearchPrice2); - this.ucGroupBoxEx1.Controls.Add(this.txtSkcId); + this.ucGroupBoxEx1.Controls.Add(this.txtSpuId); this.ucGroupBoxEx1.Controls.Add(this.label7); this.ucGroupBoxEx1.Controls.Add(this.btnEmpty); this.ucGroupBoxEx1.Controls.Add(this.label5); @@ -200,6 +200,7 @@ namespace TemuKJD.KJDForms.ProductForms this.btnResetExtCode.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; this.btnResetExtCode.TabIndex = 1005; this.btnResetExtCode.Text = "重置"; + this.btnResetExtCode.Click += new System.EventHandler(this.btnResetExtCode_Click); // // txtExtCode // @@ -289,21 +290,21 @@ namespace TemuKJD.KJDForms.ProductForms this.btnSearchPrice2.Text = "查询商品"; this.btnSearchPrice2.Click += new System.EventHandler(this.btnSearchPrice2_Click); // - // txtSkcId + // txtSpuId // - this.txtSkcId.Location = new System.Drawing.Point(340, 17); - this.txtSkcId.Name = "txtSkcId"; - this.txtSkcId.Size = new System.Drawing.Size(251, 23); - this.txtSkcId.TabIndex = 997; + this.txtSpuId.Location = new System.Drawing.Point(340, 17); + this.txtSpuId.Name = "txtSpuId"; + this.txtSpuId.Size = new System.Drawing.Size(251, 23); + this.txtSpuId.TabIndex = 997; // // label7 // this.label7.AutoSize = true; this.label7.Location = new System.Drawing.Point(298, 20); this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(52, 17); + this.label7.Size = new System.Drawing.Size(54, 17); this.label7.TabIndex = 998; - this.label7.Text = "SkcId:"; + this.label7.Text = "SpuId:"; // // btnEmpty // @@ -909,12 +910,11 @@ namespace TemuKJD.KJDForms.ProductForms // dataGridViewCellStyle10.WrapMode = System.Windows.Forms.DataGridViewTriState.True; this.colCompliance.DefaultCellStyle = dataGridViewCellStyle10; - this.colCompliance.HeaderText = "合规"; + this.colCompliance.HeaderText = "合规信息"; this.colCompliance.Name = "colCompliance"; this.colCompliance.ReadOnly = true; this.colCompliance.Resizable = System.Windows.Forms.DataGridViewTriState.True; this.colCompliance.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; - this.colCompliance.Width = 90; // // colMsg // @@ -1004,7 +1004,7 @@ namespace TemuKJD.KJDForms.ProductForms private System.Windows.Forms.DateTimePicker dtpStartTime; private DevComponents.DotNetBar.PanelEx btnStop; private DevComponents.DotNetBar.PanelEx btnSearchPrice2; - private System.Windows.Forms.TextBox txtSkcId; + private System.Windows.Forms.TextBox txtSpuId; private System.Windows.Forms.Label label7; private System.Windows.Forms.Panel pnlSpecDetail; private System.Windows.Forms.TextBox textBox1; diff --git a/TEMUKJD/KJDForms/ProductForms/TemuJitForm.cs b/TEMUKJD/KJDForms/ProductForms/TemuJitForm.cs index ffebd49..fa2bea4 100644 --- a/TEMUKJD/KJDForms/ProductForms/TemuJitForm.cs +++ b/TEMUKJD/KJDForms/ProductForms/TemuJitForm.cs @@ -16,6 +16,7 @@ using TemuKJD.BaseForms; using TemuKJD.BLL; using TemuKJD.Extension; using TemuKJD.KJDForms.AdminForms; +using TemuKJD.KJDForms.ProductForms.TemuJitSubForms; using TemuKJD.KJDForms.ShopForms; using TemuKJD.ToolForms; using Work; @@ -58,10 +59,18 @@ namespace TemuKJD.KJDForms.ProductForms this.txtShopName.Text = setJitConfig.SearchShopName; this.chkSearchAllShop.Checked = setJitConfig.SearchAllShop; + this.txtSpuId.Text = setJitConfig.SearchSpuId; + this.txtExtCode.Text = setJitConfig.SearchExtCode; + this.chkSearchTime.Checked = setJitConfig.SearchDuration; + this.txtNotes.TextChanged += Txt_TextChanged; this.txtShopId.TextChanged += Txt_TextChanged; this.txtShopName.TextChanged += Txt_TextChanged; this.chkSearchAllShop.CheckedChanged += Txt_TextChanged; + + this.txtSpuId.TextChanged += Txt_TextChanged; + this.txtExtCode.TextChanged += Txt_TextChanged; + this.chkSearchTime.CheckedChanged += Txt_TextChanged; } private void Txt_TextChanged(object sender, EventArgs e) @@ -71,6 +80,10 @@ namespace TemuKJD.KJDForms.ProductForms setJitConfig.SearchShopName = this.txtShopName.Text.Trim(); setJitConfig.SearchAllShop = this.chkSearchAllShop.Checked; + setJitConfig.SearchSpuId = this.txtSpuId.Text.Trim(); + setJitConfig.SearchExtCode = this.txtExtCode.Text.Trim(); + setJitConfig.SearchDuration = this.chkSearchTime.Checked; + NaiBa.Util.Helper.ConfigHelper.SaveConfig("set_jit_config", setJitConfig); } @@ -218,10 +231,22 @@ namespace TemuKJD.KJDForms.ProductForms case "登录": case "状态": { - AdminShopLoginForm shopLoginForm = new AdminShopLoginForm(shop); - shopLoginForm.openType = EnumOpenType.login; - shopLoginForm.SaveComplete += shopLoginForm_SaveComplete; - shopLoginForm.ShowDialog(); + AdminShopListForm.Instance.CheckShopLogin(new ShopLoginInfo[] { shop }, false); + if (shop.LoginStatus2 == "国际版在线") + { + AdminShopLoginForm adminLoginForm = new AdminShopLoginForm(shop); + adminLoginForm.openType = EnumOpenType.manage; + adminLoginForm.WindowState = FormWindowState.Maximized; + adminLoginForm.InitUrl = "https://agentseller.temu.com"; + adminLoginForm.Show(); + } + else + { + AdminShopLoginForm shopLoginForm = new AdminShopLoginForm(shop); + shopLoginForm.openType = EnumOpenType.login; + shopLoginForm.SaveComplete += shopLoginForm_SaveComplete; + shopLoginForm.ShowDialog(); + } } break; default: @@ -300,9 +325,9 @@ namespace TemuKJD.KJDForms.ProductForms startTime = BaseClass.DateTimeToTimestampMilliseconds(dtpStartTime.Value.Date); endTime = BaseClass.DateTimeToTimestampMilliseconds(dtpEndTime.Value.Date.AddDays(1).AddMilliseconds(-1)); } - string searchSkcIds = txtSkcId.Text.Trim().Trim(','); + string searchSpuIds = txtSpuId.Text.Trim().Trim(','); string searchExtCodes = txtExtCode.Text.Trim().Trim(','); - var searchRst = this.SearchForChainSupplier(shop, page, 50, searchSkcIds, searchExtCodes, type, startTime, endTime); + var searchRst = this.SearchForChainSupplier(shop, page, 50, "", searchSpuIds, searchExtCodes, type, startTime, endTime); if (searchRst.Contains("登录过期") || searchRst.Contains("Invalid Login State")) { AdminShopListForm.Instance.CheckShopLogin(new ShopLoginInfo[] { shop }, false); @@ -334,6 +359,7 @@ namespace TemuKJD.KJDForms.ProductForms extCodeLst.Add(priceInfo.skcList.FirstOrDefault()?.extCode); } + // 查询合规信息 var spuIds = ""; foreach (var priceInfo in checkPriceInfoTmpLst) { @@ -341,10 +367,11 @@ namespace TemuKJD.KJDForms.ProductForms } spuIds = "\"" + spuIds.Trim(',').Replace(",", "\",\"") + "\""; List complianceInfoTmpLst = null; + string sErrMsg = ""; if (spuIds.Length > 2) { Thread.Sleep(Randomx.GetId(50, 100)); - var queryComplianceRst = this.QueryComplianceInfo(shop, 50, spuIds); + var queryComplianceRst = this.QueryComplianceInfoList(shop, 50, spuIds); queryComplianceRst = GetHtml.Unicode2String(queryComplianceRst); if (queryComplianceRst.Contains("\"success\":true")) { @@ -354,6 +381,14 @@ namespace TemuKJD.KJDForms.ProductForms complianceInfoTmpLst = JsonHelper.DeserializeJsonToList(sData); lstComplianceInfo.AddRange(complianceInfoTmpLst); } + else + { + sErrMsg = BaseRegex.GetStringJson(ref queryComplianceRst, "errorMsg").ParseToString(); + if (string.IsNullOrEmpty(sErrMsg)) + sErrMsg = BaseRegex.GetStringJson(ref queryComplianceRst, "error_msg").ParseToString(); + if (string.IsNullOrEmpty(sErrMsg)) + sErrMsg = queryComplianceRst; + } } int num = 0; @@ -400,13 +435,18 @@ namespace TemuKJD.KJDForms.ProductForms var reviewExtCode = priceInfo.skcList.FirstOrDefault()?.extCode; Thread.Sleep(Randomx.GetId(20, 50)); - var complianceInfo = complianceInfoTmpLst.FirstOrDefault(c => c.spu_id == priceInfo.productId); - if (complianceInfo == null) - complianceInfo = new complianceInfo(); - var complianceTaskNames = complianceInfo.wait_task_dtolist - .Where(t => t.task_name == "欧盟负责人" || t.task_name == "制造商信息" || t.is_not_required == false) - .Select(t => t.task_name).ToList(); - var complianceStr = string.Join("\r\n", complianceTaskNames); + var complianceStr = sErrMsg; + if (sErrMsg.IsNullOrEmpty()) + { + var complianceInfo = complianceInfoTmpLst.FirstOrDefault(c => c.spu_id == priceInfo.productId); + if (complianceInfo == null) + complianceInfo = new complianceInfo(); + var complianceTaskNames = complianceInfo.wait_task_show_dtolist.Where(ta => ta.status == 2) + .Where(t => t.wait_task_dtolist.Any(ta => ta.task_name == "欧盟负责人" || + ta.task_name == "制造商信息" || ta.is_not_required == false)) + .Select(t => t.show_name).ToList(); + complianceStr = string.Join("\r\n", complianceTaskNames); + } Invoke(new Action(() => { int rowId = this.dgvPriceCheck.Rows.Add( @@ -426,7 +466,7 @@ namespace TemuKJD.KJDForms.ProductForms // sku不同价的会被分成多个review,priceInfo此时为价格范围 reviewInfo.productSkuList.FirstOrDefault()?.supplierPrice, //priceInfo.supplierPrice BaseClass.StampToDateTime((priceInfo.skcList.FirstOrDefault()?.statusTime.createdTime.ParseToLong() / 1000).ParseToInt()).ToString("yy/MM/dd HH:mm:ss"), - complianceStr, + complianceStr.IsNullOrEmpty() ? "已填写" : complianceStr, "" ); dgvPriceCheck.Rows[rowId].Height = 60; @@ -459,7 +499,7 @@ namespace TemuKJD.KJDForms.ProductForms } - private string SearchForChainSupplier(ShopLoginInfo shop, int page, int pageSize = 50, string prodSkcIds = null, string skcExtCode = null, + private string SearchForChainSupplier(ShopLoginInfo shop, int page, int pageSize = 50, string prodSkcIds = null, string prodSpuIds = null, string skcExtCode = null, string type = "待创建首单", long startTime = 0, long endTime = 0) { string url = "https://agentseller.temu.com/api/kiana/mms/robin/searchForChainSupplier"; @@ -475,14 +515,18 @@ namespace TemuKJD.KJDForms.ProductForms body += "\"secondarySelectStatusList\":[10],"; body += "\"supplierTodoTypeList\":[],"; if (!string.IsNullOrEmpty(prodSkcIds)) - body += "\"productSkcIdList\":[" + prodSkcIds + "],"; + body += "\"productSkcIdList\":[" + prodSpuIds + "],"; + if (!string.IsNullOrEmpty(prodSpuIds)) + body += "\"productSpuIdList\":[" + prodSpuIds + "],"; + + //":[],"productSpuIdList":[5296122040]} body = body.TrimEnd(','); body += "}"; string referer = "https://agentseller.temu.com/newon/product-select"; return HttpResponseBLL.PostResponse2(shop, url, body, referer); } - private string QueryComplianceInfo(ShopLoginInfo shop, int pageSize = 50, string prodSpuIds = null) + private string QueryComplianceInfoList(ShopLoginInfo shop, int pageSize = 50, string prodSpuIds = null) { string url = "https://agentseller.temu.com/ms/bg-flux-ms/compliance_property/page_query"; string body = ""; @@ -500,6 +544,7 @@ namespace TemuKJD.KJDForms.ProductForms string prodId = dgvPriceCheck.Rows[e.RowIndex].Cells["colProductId"].Value.ParseToString(); string accountId = dgvPriceCheck.Rows[e.RowIndex].Cells["colSupplierId"].Value.ParseToString(); var shop = lstAdminShopInfo.FirstOrDefault(v => v.ShopId == accountId); + var compInfo = this.lstComplianceInfo.FirstOrDefault(c => c.spu_id.ParseToString() == prodId); switch (headerText) { @@ -549,11 +594,19 @@ namespace TemuKJD.KJDForms.ProductForms // } // break; case "合规": + case "合规信息": { - //加州65号提案 - //欧盟负责人 - //制造商信息 - //其他合规信息 商品识别码 + //填写以下信息: //加州65号提案 //欧盟负责人 //制造商信息 //其他合规信息-商品识别码 + ComplianceForm compForm = new ComplianceForm(shop, compInfo); + compForm.ShowDialog(); + if (compForm.EditSuccess == true) + { + var rows = dgvPriceCheck.Rows.Cast().Where(r => r.Cells["colProductId"].Value.ParseToString() == prodId); + foreach (var row in rows) + { + row.Cells["colCompliance"].Value = "已填写"; + } + } } break; case "Skc图片": @@ -574,6 +627,12 @@ namespace TemuKJD.KJDForms.ProductForms { this.pnlSpecDetail.Visible = false; } + + private void btnResetExtCode_Click(object sender, EventArgs e) + { + this.txtSpuId.Text = ""; + this.txtExtCode.Text = ""; + } } public class SetJitConfig @@ -582,6 +641,9 @@ namespace TemuKJD.KJDForms.ProductForms public string SearchShopName { get; set; } = ""; public string SearchNotes { get; set; } = ""; public bool SearchAllShop { get; set; } = true; + public string SearchSpuId { get; set; } = ""; + public string SearchExtCode { get; set; } = ""; + public bool SearchDuration { get; set; } = true; } /// /// 合规信息 @@ -595,9 +657,15 @@ namespace TemuKJD.KJDForms.ProductForms public long? goods_id { get; set; } // 601103852497488, public string goods_url { get; set; } // "https://img.kwcdn.com/product/fancy/0f52acc1-edfe-4f70-8032-012505ad0da5.jpg", public List wait_task_dtolist { get; set; } - public List wait_task_show_dtolist { get; set; } + public List wait_task_show_dtolist { get; set; } public bool? on_sale { get; set; } // false } + public class wait_task_show_dto + { + public string show_name { get; set; } // "加州 65 号提案" + public int? status { get; set; } // 2 + public List wait_task_dtolist { get; set; } + } public class task_dto { public long? task_id { get; set; } // 101042759897649, @@ -614,6 +682,5 @@ namespace TemuKJD.KJDForms.ProductForms public bool? on_site { get; set; } // false, public List region_list { get; set; } // [105, 106, 107, 108, 109, ...], public string content { get; set; } // "德国站、法国站、意大利站、荷兰站、西班牙站、葡萄牙站、波兰站、瑞典站、希腊站、爱尔兰站、塞浦路斯站、捷克站、匈牙利站、丹麦站、罗马尼亚站、保加利亚站、比利时站、奥地利站、芬兰站、斯洛伐克站、克罗地亚站、斯洛文尼亚站、立陶宛站、爱沙尼亚站、拉脱维亚站、马耳他站、卢森堡站" - } } diff --git a/TEMUKJD/KJDForms/ProductForms/TemuJitSubForms/ComplianceForm.Designer.cs b/TEMUKJD/KJDForms/ProductForms/TemuJitSubForms/ComplianceForm.Designer.cs new file mode 100644 index 0000000..07757d7 --- /dev/null +++ b/TEMUKJD/KJDForms/ProductForms/TemuJitSubForms/ComplianceForm.Designer.cs @@ -0,0 +1,187 @@ + +namespace TemuKJD.KJDForms.ProductForms.TemuJitSubForms +{ + partial class ComplianceForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ComplianceForm)); + this.panel2 = new System.Windows.Forms.Panel(); + this.label4 = new System.Windows.Forms.Label(); + this.cmbLaw65 = new System.Windows.Forms.ComboBox(); + this.label3 = new System.Windows.Forms.Label(); + this.cmbMakerInfo = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.cmbEUPerson = new System.Windows.Forms.ComboBox(); + this.label1 = new System.Windows.Forms.Label(); + this.txtCode = new System.Windows.Forms.TextBox(); + this.btnSave = new DevComponents.DotNetBar.PanelEx(); + this.panel2.SuspendLayout(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.Controls.Add(this.btnSave); + this.panel2.Controls.Add(this.label4); + this.panel2.Controls.Add(this.cmbLaw65); + this.panel2.Controls.Add(this.label3); + this.panel2.Controls.Add(this.cmbMakerInfo); + this.panel2.Controls.Add(this.label2); + this.panel2.Controls.Add(this.cmbEUPerson); + this.panel2.Controls.Add(this.label1); + this.panel2.Controls.Add(this.txtCode); + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(1, 33); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(428, 319); + this.panel2.TabIndex = 1; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(61, 64); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(82, 17); + this.label4.TabIndex = 7; + this.label4.Text = "加州65号法案"; + // + // cmbLaw65 + // + this.cmbLaw65.FormattingEnabled = true; + this.cmbLaw65.Location = new System.Drawing.Point(143, 61); + this.cmbLaw65.Name = "cmbLaw65"; + this.cmbLaw65.Size = new System.Drawing.Size(211, 25); + this.cmbLaw65.TabIndex = 6; + this.cmbLaw65.Text = "无需警示"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(75, 145); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(68, 17); + this.label3.TabIndex = 5; + this.label3.Text = "制造商信息"; + // + // cmbMakerInfo + // + this.cmbMakerInfo.FormattingEnabled = true; + this.cmbMakerInfo.Location = new System.Drawing.Point(143, 142); + this.cmbMakerInfo.Name = "cmbMakerInfo"; + this.cmbMakerInfo.Size = new System.Drawing.Size(211, 25); + this.cmbMakerInfo.TabIndex = 4; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(75, 104); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(68, 17); + this.label2.TabIndex = 3; + this.label2.Text = "欧盟负责人"; + // + // cmbEUPerson + // + this.cmbEUPerson.FormattingEnabled = true; + this.cmbEUPerson.Location = new System.Drawing.Point(143, 101); + this.cmbEUPerson.Name = "cmbEUPerson"; + this.cmbEUPerson.Size = new System.Drawing.Size(211, 25); + this.cmbEUPerson.TabIndex = 2; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(75, 189); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(68, 17); + this.label1.TabIndex = 1; + this.label1.Text = "商品识别码"; + // + // txtCode + // + this.txtCode.Location = new System.Drawing.Point(143, 186); + this.txtCode.Name = "txtCode"; + this.txtCode.Size = new System.Drawing.Size(211, 23); + this.txtCode.TabIndex = 0; + // + // btnSave + // + this.btnSave.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnSave.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSave.DisabledBackColor = System.Drawing.Color.Empty; + this.btnSave.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSave.Location = new System.Drawing.Point(287, 226); + this.btnSave.Name = "btnSave"; + this.btnSave.Size = new System.Drawing.Size(67, 23); + this.btnSave.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnSave.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSave.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnSave.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnSave.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnSave.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnSave.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnSave.Style.GradientAngle = 90; + this.btnSave.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnSave.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSave.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnSave.TabIndex = 1000; + this.btnSave.Text = "保存编辑"; + this.btnSave.Click += new System.EventHandler(this.btnSave_Click); + // + // ComplianceForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(430, 353); + this.Controls.Add(this.panel2); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "ComplianceForm"; + this.Text = "ComplianceForm"; + this.TitleText = "ComplianceForm"; + this.Load += new System.EventHandler(this.ComplianceForm_Load); + this.Controls.SetChildIndex(this.panel2, 0); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.TextBox txtCode; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.ComboBox cmbEUPerson; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.ComboBox cmbMakerInfo; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.ComboBox cmbLaw65; + private DevComponents.DotNetBar.PanelEx btnSave; + } +} \ No newline at end of file diff --git a/TEMUKJD/KJDForms/ProductForms/TemuJitSubForms/ComplianceForm.cs b/TEMUKJD/KJDForms/ProductForms/TemuJitSubForms/ComplianceForm.cs new file mode 100644 index 0000000..059e066 --- /dev/null +++ b/TEMUKJD/KJDForms/ProductForms/TemuJitSubForms/ComplianceForm.cs @@ -0,0 +1,429 @@ +using AllBase; +using AllBase.Model.Result; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using TemuKJD.BaseForms; +using TemuKJD.BLL; + +namespace TemuKJD.KJDForms.ProductForms.TemuJitSubForms +{ + public partial class ComplianceForm : LRBaseForm + { + public bool EditSuccess = false; + public ShopLoginInfo shop; + public complianceInfo complianceInfo; + public complianceDetailInfo complianceDetailInfo; + public List lstComplianceDetailTemplateInfo; + + public ComplianceForm(ShopLoginInfo _shop, complianceInfo _complianceInfo) + { + InitializeComponent(); + + shop = _shop; + complianceInfo = _complianceInfo; + } + + private void ComplianceForm_Load(object sender, EventArgs e) + { + if (shop != null && complianceInfo != null) + this.GetComplianceInfo(); + } + + void GetComplianceInfo() + { + var complianceParam = new complianceDetailParam(); + complianceParam.goods_id = complianceInfo.goods_id; + complianceParam.spu_id = complianceInfo.spu_id; + complianceParam.wait_task_list = new List(); + foreach (var task in complianceInfo.wait_task_dtolist) + { + complianceParam.wait_task_list.Add(new task_param() + { + is_not_required = task.is_not_required, + punish_time = task.punish_time, + sale_effect_info = task.sale_effect_info, + status = task.status, + task_id = task.task_id, + task_name = task.task_name, + task_type = task.task_type, + }); + } + var complianceTemplateParam = JsonHelper.DeserializeJsonToObject(JsonHelper.SerializeObject(complianceParam)); + complianceTemplateParam.cat_id = complianceInfo.cat_id; + var compDetailTemplateRst = QueryComplianceDetailTemplate(shop, complianceTemplateParam); + compDetailTemplateRst = GetHtml.Unicode2String(compDetailTemplateRst); + if (compDetailTemplateRst.Contains("\"success\":true")) + { + try + { + JObject jObj = JObject.Parse(compDetailTemplateRst); + lstComplianceDetailTemplateInfo = JsonHelper.DeserializeJsonToList(jObj["result"]["template_list"].ToString()); + + this.cmbLaw65.Text = "无需警示"; + var complianceDetailTemp = lstComplianceDetailTemplateInfo.FirstOrDefault(t => t.task_type == 4); + if (complianceDetailTemp != null && complianceDetailTemp.template_property_dtolist != null && complianceDetailTemp.template_property_dtolist.Count > 0) + { + foreach (var item in complianceDetailTemp.template_property_dtolist.FirstOrDefault().property_value_list) + { + this.cmbLaw65.Items.Add(item.lang_prompt_map["zh-Hans"]); + } + } + } + catch (Exception ex) + { + BaseMsgForm.ShowError(ex.Message); + } + } + + var compDetailRst = QueryComplianceDetail(shop, complianceParam); + compDetailRst = GetHtml.Unicode2String(compDetailRst); + if (compDetailRst.Contains("\"success\":true")) + { + try + { + JObject jObj = JObject.Parse(compDetailRst); + complianceDetailInfo = JsonHelper.DeserializeJsonToObject(jObj["result"].ToString()); + + // 欧盟负责人 + cmbEUPerson.Text = complianceDetailInfo.template_list.FirstOrDefault(t => t.task_type == 25)?.rep_detail_list.FirstOrDefault()?.rep_name; + if (complianceDetailInfo.template_list.FirstOrDefault(t => t.task_type == 25)?.rep_detail_list != null) + { + foreach (var item in complianceDetailInfo.template_list.FirstOrDefault(t => t.task_type == 25)?.rep_detail_list) + { + cmbEUPerson.Items.Add(item.rep_name); + } + } + // 制造商信息 + cmbMakerInfo.Text = complianceDetailInfo.template_list.FirstOrDefault(t => t.task_type == 60)?.rep_detail_list.FirstOrDefault()?.rep_name; + if (complianceDetailInfo.template_list.FirstOrDefault(t => t.task_type == 60)?.rep_detail_list != null) + { + foreach (var item in complianceDetailInfo.template_list.FirstOrDefault(t => t.task_type == 60)?.rep_detail_list) + { + cmbMakerInfo.Items.Add(item.rep_name); + } + } + // 商品识别码 + var complianceDetail = complianceDetailInfo.template_list.FirstOrDefault(t => t.task_type == 61); + if (complianceDetail != null && complianceDetail.task_status == 3) + { + this.txtCode.Text = complianceDetail?.input_text?.Values?.FirstOrDefault()?.multi_line_inputs?.FirstOrDefault()?.name; + } + } + catch (Exception ex) + { + BaseMsgForm.ShowError(ex.Message); + } + } + } + + private void btnSave_Click(object sender, EventArgs e) + { + try + { + EditCompliance(); + } + catch (Exception ex) { BaseMsgForm.ShowError(ex.Message); } + } + + private void EditCompliance() + { + JObject compObj = new JObject(); + compObj.Add("cat_id", complianceInfo.cat_id); + compObj.Add("spu_id", complianceInfo.spu_id); + compObj.Add("goods_id", complianceInfo.goods_id); + compObj.Add("template_edit_request_list", new JArray()); + var j_template_edit_list = compObj["template_edit_request_list"] as JArray; + foreach (var temp in complianceDetailInfo.template_list) + { + var wait_task = complianceInfo.wait_task_dtolist.FirstOrDefault(t => t.task_type == temp.task_type); + + JObject j_template_edit = new JObject(); + j_template_edit_list.Add(j_template_edit); + j_template_edit.Add("task_id", wait_task.task_id); + j_template_edit.Add("task_status", temp.task_status); + j_template_edit.Add("task_type", temp.task_type); + if (temp.template_id != null) + j_template_edit.Add("template_id", temp.template_id); + + //加利福尼亚州65号法案 + if (temp.task_type == 4) + { + var detailTemplateInfo = lstComplianceDetailTemplateInfo.FirstOrDefault(t => t.task_type == temp.task_type); + if (detailTemplateInfo != null) + { + j_template_edit.Add("properties", new JObject()); + j_template_edit.Add("images", new JObject()); + j_template_edit.Add("input_text", new JObject()); + + var property_id = detailTemplateInfo?.template_property_dtolist?.FirstOrDefault()?.property_id; + var value_id = detailTemplateInfo?.template_property_dtolist?.FirstOrDefault()?.property_value_list?.FirstOrDefault(p => p.value_name == this.cmbLaw65.Text.Trim())?.vid; + if (property_id != null && value_id != null) + { + var jArr = new JArray(); + jArr.Add(value_id); + (j_template_edit["properties"] as JObject).Add(property_id.ParseToString(), jArr); + } + } + } + //材质分类 // task_id = 101044552836267 // task_type = 166 // template_id == 1004 + else if (temp.task_type == 166) + { + j_template_edit.Add("sku_multi_detail", new JObject()); + } + //商品识别码 // task_id = 101044552818783 // task_type = 61 // template_id == 51 + else if (temp.task_type == 61) + { + j_template_edit.Add("properties", new JObject()); + j_template_edit.Add("images", new JObject()); + j_template_edit.Add("input_text", new JObject()); + var detailTemplateInfo = lstComplianceDetailTemplateInfo.FirstOrDefault(t => t.task_type == temp.task_type); + var property_id = detailTemplateInfo?.template_property_dtolist?.FirstOrDefault()?.property_id; // 1100100115 + if (property_id != null) + { + (j_template_edit["input_text"] as JObject).Add(property_id.ParseToString(), new JObject()); + (j_template_edit["input_text"][property_id.ParseToString()] as JObject).Add("multi_line_inputs", new JArray()); + var multi_line_input = new JObject(); + multi_line_input.Add("name", txtCode.Text.Trim()); + (j_template_edit["input_text"][property_id.ParseToString()]["multi_line_inputs"] as JArray).Add(multi_line_input); + } + } + // 欧盟负责人 + else if (temp.task_type == 25) + { + j_template_edit.Add("is_not_required", wait_task.is_not_required); + j_template_edit.Add("task_name", "欧盟负责人"); + j_template_edit.Add("status", wait_task.status); + j_template_edit.Add("punish_time", wait_task.punish_time); + j_template_edit.Add("sale_effect_info", JObject.Parse(JsonHelper.SerializeObject(wait_task.sale_effect_info))); + j_template_edit.Add("rep_detail_list", new JArray()); + var rep_detail = temp.rep_detail_list.FirstOrDefault(r => r.rep_name == cmbEUPerson.Text.Trim()); + rep_detail_param rep_param = new rep_detail_param { rep_id = rep_detail?.rep_id, rep_name = rep_detail?.rep_name }; + (j_template_edit["rep_detail_list"] as JArray).Add(JObject.Parse(JsonHelper.SerializeObject(rep_param))); + } + // 制造商信息 + else if (temp.task_type == 60) + { + j_template_edit.Add("is_not_required", wait_task.is_not_required); + j_template_edit.Add("task_name", "制造商信息"); + j_template_edit.Add("status", wait_task.status); + j_template_edit.Add("punish_time", wait_task.punish_time); + j_template_edit.Add("sale_effect_info", JObject.Parse(JsonHelper.SerializeObject(wait_task.sale_effect_info))); + j_template_edit.Add("rep_detail_list", new JArray()); + var rep_detail = temp.rep_detail_list.FirstOrDefault(r => r.rep_name == cmbMakerInfo.Text.Trim()); + rep_detail_param rep_param = new rep_detail_param { rep_id = rep_detail?.rep_id, rep_name = rep_detail?.rep_name }; + (j_template_edit["rep_detail_list"] as JArray).Add(JObject.Parse(JsonHelper.SerializeObject(rep_param))); + } + else + { + var detailTemplateInfo = lstComplianceDetailTemplateInfo.FirstOrDefault(t => t.task_type == temp.task_type); + if (detailTemplateInfo != null && detailTemplateInfo.template_property_dtolist?.FirstOrDefault()?.control_type == 3) + { + j_template_edit.Add("properties", new JObject()); + j_template_edit.Add("images", new JObject()); + j_template_edit.Add("input_text", new JObject()); + + var property_id = detailTemplateInfo?.template_property_dtolist?.FirstOrDefault()?.property_id; // 1100100115 + var value_id = detailTemplateInfo?.template_property_dtolist?.FirstOrDefault()?.property_value_list?.FirstOrDefault(p => p.value_name == "该信息不适用该产品")?.vid; + if (property_id != null && value_id != null) + { + var jArr = new JArray(); + jArr.Add(value_id); + (j_template_edit["properties"] as JObject).Add(property_id.ParseToString(), jArr); + } + } + } + } + var data = JsonHelper.SerializeObject(compObj); + var editComplianceRst = EditCompliance(shop, compObj); // {"success":true,"error_code":1000000,"result":{"result":true}} + editComplianceRst = GetHtml.Unicode2String(editComplianceRst); + if (editComplianceRst.Contains("\"success\":true")) + { + EditSuccess = true; + BaseMsgForm.ShowInfo("修改成功!"); + this.Close(); + } + else + { + string sErrMsg = BaseRegex.GetStringJson(ref editComplianceRst, "errorMsg").ParseToString(); + if (string.IsNullOrEmpty(sErrMsg)) + sErrMsg = BaseRegex.GetStringJson(ref editComplianceRst, "error_msg").ParseToString(); + if (string.IsNullOrEmpty(sErrMsg)) + sErrMsg = editComplianceRst; + BaseMsgForm.ShowError(sErrMsg); + } + } + + private string QueryComplianceDetail(ShopLoginInfo shop, complianceDetailParam compParam) + { + string url = "https://agentseller.temu.com/ms/bg-flux-ms/compliance_property/query_detail"; + string body = ""; + body = JsonHelper.SerializeObject(compParam); + string referer = "https://agentseller.temu.com/govern/information-supplementation"; + return HttpResponseBLL.PostResponse2(shop, url, body, referer); + } + + private string QueryComplianceDetailTemplate(ShopLoginInfo shop, complianceDetailTemplateParam compParam) + { + string url = "https://agentseller.temu.com/ms/bg-flux-ms/compliance_property/query_template"; + string body = ""; + body = JsonHelper.SerializeObject(compParam); + string referer = "https://agentseller.temu.com/govern/information-supplementation"; + return HttpResponseBLL.PostResponse2(shop, url, body, referer); + } + + private string EditCompliance(ShopLoginInfo shop, JObject editComplianceParam) + { + string url = "https://agentseller.temu.com/ms/bg-flux-ms/compliance_property/edit_compliance"; + string body = ""; + body = JsonHelper.SerializeObject(editComplianceParam); + string referer = "https://agentseller.temu.com/govern/information-supplementation"; + return HttpResponseBLL.PostResponse2(shop, url, body, referer); + } + } + + /// + /// 查询合规信息 + /// + public class complianceDetailParam + { + public long? goods_id { get; set; } // 601103852497488, + public long? spu_id { get; set; } // 5230217458, + public List wait_task_list { get; set; } + } + public class complianceDetailTemplateParam : complianceDetailParam + { + public long? cat_id { get; set; } // 29186 + } + public class task_param + { + public long? task_id { get; set; } // 101042759897649, + public int? task_type { get; set; } // 25, + public bool? is_not_required { get; set; } // true, + public string task_name { get; set; } // "欧盟负责人", + public int? status { get; set; } // 2, + public long? punish_time { get; set; } // 0, + public sale_effect_info sale_effect_info { get; set; } + public int? task_status { get { return status; } } + } + //---------------------------------------------------------------------------------- + public class complianceDetailInfo + { + public long? goods_id { get; set; } // 601104090833023, + public long? spu_id { get; set; } // 5296122040, + public List sku_info_list { get; set; } + public List template_list { get; set; } + } + public class template_Info + { + public int? template_id { get; set; } // 1 + public int? task_type { get; set; } // 4 + public int? task_status { get; set; } // 2 + public object properties { get; set; } // {} + public List suppl_prop_info_list { get; set; } // [] + public Dictionary input_text { get; set; } // "1100100115":{}; + public List rep_detail_list { get; set; } + public List reject_reason_list { get; set; } + } + public class input_text_value_info + { + public List multi_line_inputs { get; set; } + } + public class multi_line_input + { + public string name { get; set; } // "DGH0102" + } + public class rep_detail_Info + { + public int? rep_type { get; set; } // 3, + public long? rep_id { get; set; } // 22018308, + public string rep_name { get; set; } // "Dugonghai", + public rep_address_Info rep_address_info { get; set; } + public long? rep_mobile { get; set; } // "13966274028", + public int? rep_tel_code { get; set; } // 86, + public string rep_mail { get; set; } // "919341360@qq.com", + public int? rep_status { get; set; } // 3, + public bool? skip_edit { get; set; } // false, + public bool? forbid_select { get; set; } // false, + public bool? default_select { get; set; } // false + } + public class rep_address_Info + { + public int? region_id { get; set; } // 43, + public string region_name { get; set; } // "China", + public string region_name_short { get; set; } // "CN", + public long? city_id { get; set; } // 341500, + public string city { get; set; } // "Lu'an", + public long? state_id { get; set; } // 340000, + public string state_name { get; set; } // "Anhui", + public string address_line_one { get; set; } // "No. 85, Pihe East Road, Hengshan Town, Huoshan County, Anhui Province", + public int? post_code { get; set; } // "237200" + } + public class sku_Info + { + public long? sku_id { get; set; } // 17613092810727, + public string sku_name { get; set; } // "39-米白色" + } + //----------------------------------------------------------- + public class complianceDetailTemplateInfo + { + public int? template_id { get; set; } // 1, + public string template_name { get; set; } // "加利福尼亚州65号法案", + public string desc { get; set; } // "卖家销售的产品,产品本身(在适用的情况下)和产品展示页必须清晰显示任何所需的加州第65号提案警告通知。如果您的商品属于加州65号提案管控范围(即含有特定化学物质或属于加州65号提案规定的特殊类型),请务必如实填写并展示必要的警示信息。如果相关情况发生变化,例如法规新增化学物质或暴露类型,或您的商品成分发生变化,您必须在60天内更新此处的合规信息。
若因未能提供警告提示语而违反65号提案,你可能会受到加州相关行政管控部门的处理或面临有关加州诉讼。您还可能被视为违反了Temu商家协议和Temu商家行为准则,并面临包括帐户和帐户中的所有资金冻结,或暂停账户使用等后果。欲了解更多和填写指南,请参见《美国加州65号提案介绍》\n
", + public int? task_type { get; set; } // 4, + public int? template_dimension_type { get; set; } // 1, + public bool? support_multi_group { get; set; } // false, + public List template_property_dtolist { get; set; } + public List real_picture_dtolist { get; set; } + } + public class real_picture_dto + { + public int? template_id { get; set; } // 1, + public string name { get; set; } // "上传实拍图", + public string desc { get; set; } // "

请按照法规要求的形式在实物上展示警示语,并拍摄清晰的实物图,务必如实上传,更多详情可前往https://www.p65warnings.ca.gov/查看。

", + public long? ref_pid { get; set; } // 1000000001, + public List vid { get; set; } // [1000100040,1000100041,1000100042] + + } + public class template_property_dto + { + public long? property_id { get; set; } // 1000000001, + public string property_name { get; set; } // "California Proposition 65 Warning Type", + public string desc { get; set; } // "卖家销售的产品,产品本身(在适用的情况下)和产品展示页必须清晰显示任何所需的加州第65号提案警告通知。如果您的商品属于加州65号提案管控范围(即含有特定化学物质或属于加州65号提案规定的特殊类型),请务必如实填写并展示必要的警示信息。如果相关情况发生变化,例如法规新增化学物质或暴露类型,或您的商品成分发生变化,您必须在60天内更新此处的合规信息。
若因未能提供警告提示语而违反65号提案,你可能会受到加州相关行政管控部门的处理或面临有关加州诉讼。您还可能被视为违反了Temu商家协议和Temu商家行为准则,并面临包括帐户和帐户中的所有资金冻结,或暂停账户使用等后果。", + public Dictionary> exclude_vid_map { get; set; } // "1000100066":[1000010001,1000010002,...] + public Dictionary lang_desc_map { get; set; } // {"zh-Hans":"警示类型", "en":"California Proposition 65 Warning Type","zh":"警示类型",...} + public int? control_type { get; set; } // 1, + public int? select_num { get; set; } // 3, // 需要control_type==1 + public int? input_type { get; set; } // 0, // 输入类型,需要control_type==17 // 如商品识别码 + public int? input_num { get; set; } // 50, // 输入长度限制,需要control_type==17 // 如商品识别码 + public object tpvp_rule_ext_map { get; set; } // {}, + public int? value_precision { get; set; } // 0, + public object input_title_lang_map { get; set; } // {}, + public int? parent_pid { get; set; } // 0, + public List parent_vid_list { get; set; } // [], + public List property_value_list { get; set; } + } + public class property_value + { + public long? vid { get; set; } // 1000100066, + public string value_name { get; set; } // "无需警示", + public List parent_vid_list { get; set; } // [], + public Dictionary lang_prompt_map { get; set; } // {"zh-Hans": "无需警示","en": "No Warning Applicable","zh": "无需警示"}, + public object remark_lang { get; set; } // {}, + public List image_remark_urls { get; set; } // [] + } + //----------------------------------------------------------- + public class rep_detail_param + { + public long? rep_id { get; set; } // 21980955, + public string rep_name { get; set; } // "SUCCESSCOURIERSL", + } +} diff --git a/TEMUKJD/KJDForms/ProductForms/TemuJitSubForms/ComplianceForm.resx b/TEMUKJD/KJDForms/ProductForms/TemuJitSubForms/ComplianceForm.resx new file mode 100644 index 0000000..8a8a46d --- /dev/null +++ b/TEMUKJD/KJDForms/ProductForms/TemuJitSubForms/ComplianceForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + AAABAAEAgIAQdAAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMQ + AAAAAAAAAAAAAAAAAAAAAAAAABM5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZkzEAAAAAAAAAAAAAAAAAAAAAADOZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZMwAAAAAAAAAAAAAAAAAAABOZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZkzAAAAAAAAAAAAAAAAAAOZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmTEAAAAAAAAAAAAAAAOZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZMAAAAAAAAAAAAAA5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZMAAAAAAAAAAAADmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZMAAAAAAAAAAAOZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZMAAAAAAAAAA5mZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZMAAAAAAAADmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZMAAAAAAAGZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZMAAAAAAJmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZAAAAAA + OZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmT + AAAAAZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmRAAAAOZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZkwAAAZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZkwAAOZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZMAAJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZEAOZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmTADmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkwCZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkRmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZM5mZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmTOZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkzmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZM5mZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmTOZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkzmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZM5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmTOZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZkzmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZM5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmTOZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZkzmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZM5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmTOZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZOZmZOZmZmZmZmZmZmZmZmZmZmZmZmZkzmZmZmZmZmZmZmZmP+JmZmZmZmZj/////// + ///4OZmZj/eZmZmZmZmZmPg5OZmZmZuI//iIuZmZmZmZmZmZmZM5mZmZmZmZmZmZmb//+JmZmZmZmP// + //////////OZmP//uZmZmZmZmY//+ZmZOZf///////h5k5mZmZmZmZmTOZmZmZmZmZmZmZmP//iZmZmZ + mZ/////////////4mZ///4mZmZmZmZP///uZmZmP////////+JmZmZmZmZmZkzmZmZmZmZmZmZmZj//4 + mZmZmZmf////////////+Jmf//+JmZmZmZmb///4mZmY//////////+JmZmZmZmZmZM5mZmZmZmZmZmZ + mY//+JmZmZmZn/////////////mZmP//iZmZmZmZk///+5mZj/////iP////+JmZmZmZmZmTOZmZmZmZ + mZmZmZmP//iZmZmZmZ////iIiIiIiIiZOZj//4mZmZmZmZP///uZmf////eZmT////+ZmZmZmZmZkzmZ + mZmZmZmZmZmZj//4mZmZmZmf//+JmZmZmZmZk5mY//+JmZmZmZmT///7mZj///+ZmZmZj///uZmZmZmZ + mZM5mZmZmZmZmZmZmY//+JmZmZmZn///iZmZmZmZmZmZmP//iZmZN5k5k///+5mY///zk5mZOT///4mZ + mZmZmZmTOZmZmZmZmZmZmZmP//iZmZmZmZ///4mZmZmZmZmZmZj//4mZmP/5k5P///uZmP//+ZmZmZmY + //+JmZmZmZmZkzmZmZmZmZmZmZmZj//4mZmZmZmf///4iIiIiIg5mZmY//+JOb//+JmT///7mZj//4mZ + mZmZmP//+ZmZmZmZmZM5mZmZmZmZmZmZmY//+JmZmZmZn///////////85mZmP//iZn///+Jk///+5mf + //+JmZmZmZj///mZmZmZmZmTOZmZmZmZmZmZmZmP//iZmZmZmZ////////////+ZmZj//4mY////85v/ + //uZmP//iZmZmZmY///5mZmZmZmZkzmZmZmZmZmZmZmZj//4mZmZmZmf////////////mZmY//+Jv/// + //+Z///7mZj//4mZmZmZmP//+ZmZmZmZmZM5mZmZmZmZmZmZmY//+JmZmZmZn///////////+JmZmP// + if//////if//+5mY//+JmZmZmZj///mZmZmZmZmTOZmZmZmZmZmZmZmP//iZmZmZmZ///////////4mZ + mZj//4j///////j///uZmP//iZmZmZmY///5mZmZmZmZkzmZmZmZmZmZmZmZj//4mZmZmZmf//+JMzMz + MzOZOZmY//////+D///////7mZj//4mZmZmZmP//+ZmZmZmZmZM5mZmZmZmZmZmZmY//+JmZmZmZn/// + iZmZmZmZmZmZmP//////mY//////+5mY//+JmZmZmZj///mZmZmZmZmTOZmZmZmZmZmZmZmP//iZmZmZ + mZ///4mZmZmZmZmZmZj/////+5mf//////uZmP//iZmZmZmY///5mZmZmZmZkzmZmZmZmZmZMzM5j//4 + kzMzmZmf//+JMzMzMzM5mZmY/////4mTk//////7mZj//4mZmZmZmP//+ZmZmZmZmZM5mZmZmZmZmP// + /////////4mZn////////////4mZmP////+ZmZmP////+5mY//+JmZmZmZj///mZmZmZmZmTOZmZmZmZ + mY/////////////4mZ/////////////7mZj////7mZmZn/////uZmP//iZmZmZmY///5mZmZmZmZkzmZ + mZmZmZn//////////////5mf////////////+Jmf////iZmZk5P////4mZ///4mZmZmZmP//+ZmZmZmZ + mZM5mZmZmZmZj/////////////iZn/////////////iZmP///5mZmZmZj///+5mY//+JmZmZmZj//4mZ + mZmZmZmTOZmZmZmZmZ/////////////zmZP///////////+JmZP///uTmZmZmZj//4mZm///mZmZmZmZ + //85mZmZmZmZkzmZmZmZmZOZiIiIiIiIiIiImTmZOIiIiIiIiIiImTmZOIi5mZmZmZOZiIuZmZk4iZOZ + mZmZOZiDmZmZmZmZmZM5mZmZmZmZOZmZmZmZmZmZmZOZmZmZmZmZmZmZmZOZmZmZmZmZmZmZOZmZmZmZ + mZk5mZmZmZOZmZmZmZmZmZmTOZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZkzmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZM5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmTOZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkzmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZM5mZmZmZmZmZmTuIiIiIs5mZmZmZmZ + mTu4i7mZmZmZmZmZmTMzmZOZmZkzOZmZmZmZmZmZmZmZmZmZmZmZmZmTOZmZmZmZmTmbj///////+HmT + mZmZk4j/////iJmZmZk4iP////iZOZmZj/mZOZOIiIiIiIiIiDmZmZmZmZmZkzmZmZmZmZmZj/////// + ///4mZk5k4///4iI///4OZOY////////iZOZmb/5mZmP///////////4mZmZmZmZmZM5mZmZmZmZn/// + //////////mZmY///5mZmZP///iZmP////////+ZOZk/iZmY/////////////4mZmZmZmZmTOZmZmZmZ + mZ/////////////5mZ////+JmZmY////iZl/////////+ZmZP4mZP//////////////7mZmZmZmZkzmZ + mZmZmZmb////////////uZP/j///+HM3j/////+ZmYj///////iZmT+JmY//////////////+JmZmZmZ + mZM5mZmZmZmZmY//////////+JmT+Jv///////////iPmTmZOI/4mP//uTk/iZmP//////////////iZ + mZmZmZmTOZmZmZmZmZmf//////////mZmZmZ///////////5mZmZmZmTOZk///mZP4mZj/////////// + ///4mZmZmZmZkzmZmZmZmZmTmP////////+JOZmZOY//////////iZmZmZmZmZk5mf/4mT+JmY////// + ////////+JmZmZmZmZM5mZmZmZmZmZn/////////mZmZmZk//////////zmZmZmZmZmZmTmP/zm/iZmP + //////////////iZmZmZmZmTOZmZmZmZmZk5v///////85OZmZkzmP////////iZmZmZmZmZmZmZn//4 + /4mZj/////hzN4/////4mZmZmZmZkzmZmZmZmZmZmZj//////4mZmTmY/4j////////4mZmZmZmZmZmZ + mZj///+JmY////+JmZmY////+JmZmZmZmZM5mZmZmZmZmZmZ//////+ZmZmZj////////////4mZmZmZ + mZmZmZmb////+ZmP///4mZu5mY////iZmZmZmZmTOZmZmZmZmZmZOb/////4k5mZmP/////////////7 + mZmZmZmZmZmZk/////OZv///+ZmP+Jmf///4mZmZmZmZkzmZmZmZmZmZmZmf////+ZmZmZj////////4 + eI//+JmZmZmZmZmZmZP////4mb///4mY//+JmP//+5mZmZmZmZM5mZmZmZmZmZk5v/////uTmZmb//// + ///4mZmX//iZmZmZmZmZmZmZ////+Jmf//95n///+Zj///OZmZmZmZmTOZmZmZmZmZmZmf//////mZmZ + mY//////+ZOZmZiJmZmZmZmZmZmZmY////+ZmP//+I////iP//+JmZmZmZmZkzmZmZmZmZmZmZj///// + /4mZmZmf/////5k5mZOZmTmZmZmZmZmZmZmP///4mZP/////////////OZmZmZmZmZM5mZmZmZmZmZk/ + ///////zmZmZm/////iZmZmZmZmZmZmZmZmZmZmZj///85mZj///////////+JmZmZmZmZmTOZmZmZmZ + mZmZv///////+5mZmZmP///5mZmZmZmZmZmZmZmZmZmZmZ///3mZmZj//////////4mZmZmZmZmZkzmZ + mZmZmZmZmb///4j///uZmZmZmP//mTmZmZmZmZmZmZmZmZmZmZmY/4OZmZmZeP///////4eZmZmZmZmZ + mZM5mZmZmZmZmZmY/4OZOP+JmZmZmZmIiZOZmZmZmZmZmZmZmZmZmZmZmYiZmZmZmZk4iIiIiIOZmZmZ + mZmZmZmTOZmZmZmZmZmZmTOZmZkzmZmZmZmZmZk5mZmZmZmZmZmZmZmZmZmZmZmZk5mZmZmZmZmZmZmZ + mZmZmZmZmZmZkzmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZM5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmTOZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZkzmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZM5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmTOZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkzmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZM5mZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmTOZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkzmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZM5mZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmTOZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkzmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZM5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmTGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZkwmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZADmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZkwA5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZMACZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmQAAOZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZMAABmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmTAAADmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZMAAAAJmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmRAAAAA5mZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZMAAAAACZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmQAAAAAAGZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZMAAAAAAAOZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkwAAAAAA + AAOZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmTAA + AAAAAAAAOZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZMAAAAAAAAAAAOZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZkwAAAAAAAAAAAAOZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmTAAAAAAAAAAAAAAGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZEAAAAAAAAAAAAAAAA5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZMAAAAAAAAAAAAAAAAAATmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZMQAAAAAAAAAAAAAAAAAAABOZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZMQAAAAAAAAAAAAAAAAAAAAAAAzmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmTMAAAAAAAAAAAAAAAAAAAAAAAAAAAEzMzMzMzMzMzMzMzMzMz + MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxAAAAAAAAAAAAAAD////////////////////////4AAAA + AAAAAAAAAB//////wAAAAAAAAAAAAAAD/////wAAAAAAAAAAAAAAAP////wAAAAAAAAAAAAAAAA////w + AAAAAAAAAAAAAAAAD///4AAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAA + Af//AAAAAAAAAAAAAAAAAAD//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAA + AAAAAAAf+AAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAA + AAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AA + AAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAA + AAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAA + AAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAA + AAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAA + AAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAA + AAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAA + AAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAA + AAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAA + AAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAA + AAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAA + AAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAA + AAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAA+AA + AAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAA + AA/4AAAAAAAAAAAAAAAAAAAf/AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAAAD/+AAAAAAAAAAAA + AAAAAAB//wAAAAAAAAAAAAAAAAAA//+AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAP//+AAAAAA + AAAAAAAAAAAH///4AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAD///// + wAAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAH////////////////////////w== + + + \ No newline at end of file