jit 合规信息修改

This commit is contained in:
wule_5900x committed 2025-11-17 01:47:16 +08:00
1 parent 31d11c0341
commit e37ee16782
6 files changed
+1026 -36

No files matched your search

+9
View File
@@ -201,6 +201,12 @@
<Compile Include="KJDForms\ProductForms\TemuJitForm.Designer.cs">
<DependentUpon>TemuJitForm.cs</DependentUpon>
</Compile>
<Compile Include="KJDForms\ProductForms\TemuJitSubForms\ComplianceForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="KJDForms\ProductForms\TemuJitSubForms\ComplianceForm.Designer.cs">
<DependentUpon>ComplianceForm.cs</DependentUpon>
</Compile>
<Compile Include="KJDForms\ProductSelectForms\DbProductCategorySearch.cs">
<SubType>Form</SubType>
</Compile>
@@ -890,6 +896,9 @@
<EmbeddedResource Include="KJDForms\ProductForms\TemuJitForm.resx">
<DependentUpon>TemuJitForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="KJDForms\ProductForms\TemuJitSubForms\ComplianceForm.resx">
<DependentUpon>ComplianceForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="KJDForms\ProductSelectForms\DbProductCategorySearch.resx">
<DependentUpon>DbProductCategorySearch.cs</DependentUpon>
</EmbeddedResource>
+12 -12
View File
@@ -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;
+91 -24
View File
@@ -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<complianceInfo> 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<complianceInfo>(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<DataGridViewRow>().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;
}
/// <summary>
/// 合规信息
@@ -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<task_dto> wait_task_dtolist { get; set; }
public List<task_dto> wait_task_show_dtolist { get; set; }
public List<wait_task_show_dto> 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<task_dto> 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<int> region_list { get; set; } // [105, 106, 107, 108, 109, ...],
public string content { get; set; } // "德国站、法国站、意大利站、荷兰站、西班牙站、葡萄牙站、波兰站、瑞典站、希腊站、爱尔兰站、塞浦路斯站、捷克站、匈牙利站、丹麦站、罗马尼亚站、保加利亚站、比利时站、奥地利站、芬兰站、斯洛伐克站、克罗地亚站、斯洛文尼亚站、立陶宛站、爱沙尼亚站、拉脱维亚站、马耳他站、卢森堡站"
}
}
@@ -0,0 +1,187 @@
namespace TemuKJD.KJDForms.ProductForms.TemuJitSubForms
{
partial class ComplianceForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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;
}
}
@@ -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<complianceDetailTemplateInfo> 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<task_param>();
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<complianceDetailTemplateParam>(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<complianceDetailTemplateInfo>(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<complianceDetailInfo>(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);
}
}
/// <summary>
/// 查询合规信息
/// </summary>
public class complianceDetailParam
{
public long? goods_id { get; set; } // 601103852497488,
public long? spu_id { get; set; } // 5230217458,
public List<task_param> 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> sku_info_list { get; set; }
public List<template_Info> 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<object> suppl_prop_info_list { get; set; } // []
public Dictionary<string, input_text_value_info> input_text { get; set; } // "1100100115":{};
public List<rep_detail_Info> rep_detail_list { get; set; }
public List<object> reject_reason_list { get; set; }
}
public class input_text_value_info
{
public List<multi_line_input> 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天内更新此处的合规信息。<br/>若因未能提供警告提示语而违反65号提案,你可能会受到加州相关行政管控部门的处理或面临有关加州诉讼。您还可能被视为违反了Temu商家协议和Temu商家行为准则,并面临包括帐户和帐户中的所有资金冻结,或暂停账户使用等后果。欲了解更多和填写指南,请参见<a href=\"https://agentseller.temu.com/main/course/detail?courseId=2310200000019\" target=\"_self\">《美国加州65号提案介绍》\n</a><br/>",
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_dto> template_property_dtolist { get; set; }
public List<real_picture_dto> 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; } // "<p>请按照法规要求的形式在实物上展示警示语,并拍摄清晰的实物图,务必如实上传,更多详情可前往<a href=\"https://www.p65warnings.ca.gov/\" target=\"_blank\">https://www.p65warnings.ca.gov/</a>查看。</p>",
public long? ref_pid { get; set; } // 1000000001,
public List<long> 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天内更新此处的合规信息。<br/>若因未能提供警告提示语而违反65号提案,你可能会受到加州相关行政管控部门的处理或面临有关加州诉讼。您还可能被视为违反了Temu商家协议和Temu商家行为准则,并面临包括帐户和帐户中的所有资金冻结,或暂停账户使用等后果。",
public Dictionary<string, List<long>> exclude_vid_map { get; set; } // "1000100066":[1000010001,1000010002,...]
public Dictionary<string, string> 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<object> parent_vid_list { get; set; } // [],
public List<property_value> property_value_list { get; set; }
}
public class property_value
{
public long? vid { get; set; } // 1000100066,
public string value_name { get; set; } // "无需警示",
public List<long> parent_vid_list { get; set; } // [],
public Dictionary<string, string> lang_prompt_map { get; set; } // {"zh-Hans": "无需警示","en": "No Warning Applicable","zh": "无需警示"},
public object remark_lang { get; set; } // {},
public List<object> image_remark_urls { get; set; } // []
}
//-----------------------------------------------------------
public class rep_detail_param
{
public long? rep_id { get; set; } // 21980955,
public string rep_name { get; set; } // "SUCCESSCOURIERSL",
}
}
@@ -0,0 +1,298 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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==
</value>
</data>
</root>