订餐系统之Excel批量导入

时间:2024-03-30 21:36:55

   批量导入现在基本已经成为各类系统的标配了,当前,我们订餐系统也不例外,什么商家呀、商品呀、优惠码之类的,都少不了。毕竟嘛,对非开发人员来说,看到Excel肯定比看到很多管理系统还是要亲切很多的。这里,我就分享下自己如何一步步踩坑、爬坑到最后完成Excel批量导入的历程。或许,你还有更好的方案,不妨也分享下;当然,也希望能给正在坑中,或者爬坑的同仁们一点帮助。

   注:Excel操作用了 org.in2bits.myxls.dll  这个不知道是否是免费的,没仔细查过。

年轻时的代码是我们曾经年轻过的证明

  第一次,遇到Excel批量导入时,很自然的,onclick,INSERT...本地用只有几条数据的Excel测试正常,select下,呀! 数据正常导入,笑咪咪的生成、发布,ok,搞定。客户使用时,用了几百条数据的Excel导入,会出现什么问题相信大家都知道吧,多半是执行超时,于是,再baidu,google...,原来可以设置executionTimeout。【设置这个后,应该还有问题,就是想不起了来,于是才有了下文】

努力不一定成功,但一定在成长

  当我费尽心思希望通过设置解决超时问题,处处碰壁后才知道,这个通常要用多线程。那会才知道见识有多重要,才知道多看博客有多重要。一翻baidu,google后,有了下面的代码。

    protected void btDo_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(InportUser));
t.Start();
} public void InportUser()
{
///读取excel,循环insert
}

  这样写,超时的情况变少了(好像也会,具体什么时候,真是惭愧,没有好好研究过),但是有一个不能接受的现像就是,我不知道什么时候执行完了,也就不知道什么时候可以关浏览器。那会儿,只想到了一个好笨的办法,一直select看条数还有没有增加。由于一直没有找到好的办法,这个情况一直存在于我们系统中很长时间,也像一个石头一直压在我心中,每每看到,心里总是隐隐不快,我都不能接受的东西,还要让客户去接受。。。直到前不久,才看到 BackgroundWorker 。那会才知道见识有多重要,才知道多看博客有多重要。

 

失败让我们慢慢蜕去年轻的印记

  BackgroundWorker 具体内容,这里就不去写了,baidu,google,msdn有全面、权威的介绍。我只分享下这个过程中自己踩的坑吧:

  1.一直没执行 DoWork,也没有错误日志;您可能页面中没有加入 Async="true。

  2.HttpContext.Current 为null;当时要在DoWork中为每个记录生成一个二维码图片(在一个类中生成),HttpContext.Current.Server一直为空,瞬间想起之前有个博客是《HttpContext.Curren并非无处不在》,当时一下就知道了多看博客有多重要。

  3.执行不超时,数据库链接可能会超时。这个和BackgroundWorker没什么关系,不过好像一起出现的概率比较大哦。正常情况简单一句SqlCommand.CommandTimeout = 0; 就ok了。

  关于BackgroundWorker的代码,应该随便一搜就是一箩筐,我还是帖下自己的吧,愿意搜索的自己搜索吧,愿意将就的就看下下面的吧:

  aspx主要代码,主要就是一个设置和上传控件的问题

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="importshopcart.aspx.cs" Inherits="importshopcart"
Async="true" %> <asp:FileUpload runat="server" ID="fuFoodExcel" />
<asp:Button ID="btSave" runat="server" CssClass="button_1" OnClick="btSave_Click"
Text="导入" OnClientClick=" showload_super();"></asp:Button>
<a href="demo.xls">下载模版</a>

  aspx.cs主要代码,只实现了执行完成方法,这点就是之前一直无法实现的东西,开始执行时弹出加载框,执行完成可以进行提示,详细的东西,大家可以自己动手搜索下。

protected void btSave_Click(object sender, EventArgs e)
{
bgw = new BackgroundWorker();
bgw.WorkerSupportsCancellation = true;
bgw.WorkerReportsProgress = true; bgw.DoWork += new DoWorkEventHandler(DoWork);
bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted); bgw.RunWorkerAsync();
} /// <summary>
/// 耗时操作
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void DoWork(object sender, DoWorkEventArgs e)
{
string suffix = "";
if (this.fuFoodExcel.HasFile)
{
suffix = Path.GetExtension(this.fuFoodExcel.PostedFile.FileName);
if (suffix == ".xls" || suffix == ".XLS")
{ }
else
{
msg = "文件格式不正确,请上传excel文件";
return;
}
}
else
{
msg = "请上传excel文件";
return;
}
string filepath = "~/upload/excel/";
if (!System.IO.Directory.Exists(Server.MapPath(filepath)))
{
System.IO.Directory.CreateDirectory(Server.MapPath(filepath));
} string sFile = filepath + System.DateTime.Now.ToString("yyyyMMddHHmmssffff") + suffix; //上传后文件的新名
//保存文件
try
{
this.fuFoodExcel.PostedFile.SaveAs(Server.MapPath(sFile));
}
catch (Exception ex)
{
HJlog.toLog(ex.ToString());
return;
} //必要的判断以防止excel格式的问题导致程序错误
try
{
//解析文件并保存数据到数据库
XlsDocument xls = new XlsDocument(Server.MapPath(sFile));
Worksheet sheet = xls.Workbook.Worksheets[]; //excel格式:第一行是说明,第二行是标题,第三行开始是数据
for (int i = ; i < sheet.Rows.Count; i++) //
{
if (sheet.Rows[ushort.Parse(i.ToString())] != null && sheet.Rows[ushort.Parse(i.ToString())].CellCount >= && sheet.Rows[ushort.Parse(i.ToString())].GetCell(ushort.Parse("")) != null && sheet.Rows[ushort.Parse(i.ToString())].GetCell(ushort.Parse("")).Value != null)
{
addressbookInfo mm = new addressbookInfo();
mm.Parentid = ;
mm.Status = ;
mm.Isdel = ;
mm.Classname = sheet.Rows[ushort.Parse(i.ToString())].GetCell(ushort.Parse("")).Value.ToString();
mm.Depth = ;
mm.Priority = ;
mm.Pic = sheet.Rows[ushort.Parse(i.ToString())].GetCell(ushort.Parse("")).Value.ToString();
mm.Revevar = sheet.Rows[ushort.Parse(i.ToString())].GetCell(ushort.Parse("")).Value.ToString();
mm.path = ChineseConvert.UtilIndexCode(mm.Classname); dal.Add(mm);
count++; }
else
{
break;
}
}
}
catch (Exception ex)
{
msg = "导入出错,请检查excel";
HJlog.toLog(ex.ToString());
return;
} msg = "操作成功,已经导入" + count + "个地址。"; } /// <summary>
/// 完成
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
string tipmsg = "";
if (count == )
{
tipmsg = "操作未完成," + msg;
}
else
{
tipmsg = msg;
} AlertScript.RegScript(this.Page, "alert('" + tipmsg + "');hideload_super();");
}

  执行过程,和完成提示效果:

  aaarticlea/png;base64,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" alt="" />

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2kAAAFQCAIAAACqAKG9AAAgAElEQVR4nO3d25IbV37veTzGhNWsExh9sCxTrBNQUNvenrBH3TqQEkU2JZIqUmSp2SlRJFvb7tZcjETWCUCe1vlCE7Zv+0EUvnX4Bfpy7xl7jjEvwLlYicUsAIUC0EUUCvj+w6FYDeWnVmYCGfp5rcyVlWazuX/Q3N072D9odrX39g939w4ODpuHh829/cO9/cPDw+bBYXN372Bv/xAIBAKBQCAQOG+w0mw2Dw+b3373fO/gsNls7h0cfvvd84PDZrPZ3N07+O75brPZbDabz3f3n+/u+/az57u7ewdAIBAIBAKBwHmDFSG1MtY5p43LpdLGOeeUsUJqY51zTmkjlbHWWeekMn4LYx0QCAQCgUAgcN5gJRdS6YKluSiYtrmQ1jrnnFRGSOWcc84JqaQyzjlrHRAIBAKBQCBw3mDFOWesy4XSRfC0uVCdsGmF1AEXPTknpPY9AYFAIBAIBALnCg6RHV3f/gwQCAQCgUAgcN7gkTnrbNxxTiAQCAQCgUDgPMChn5Vx495fCQQCgUAgEAicFVhxzlnr0qwYo1TGppnwQCqTC+mcc84JqYXUvp0LGRIrEAgEAoFAIHB+YMU5p42TSvuwWW4rbaUyxjprndJWaWOtM9YHTwsEAoFAIBAInDdYSTPhRyC1cXGaBZBmwjnnnBNSh+CZCxmCJxAIBAKBQCBw3mBFaaONtdaHTaONs9ZpY5Uu2spYpa2xzvjg2dkYCAQCgUAgEDhvsHLj3s71uzvv3Lzz4faDG/d2Ptx+8M7NO9fv7ty4t/PBnfvvfbx9497OjXs7V27du3Lrnm+/9/H2B3c+AwKBQCAQCATOG6xc2965tr3z4faDa9s7H9192S5/fm1759r2g2uddu8GQCAQCAQCgcB5gJV3bt754M79G/d2Prq788sbt65t79y4t/PBp/ffuXmnCJu37733SRE83/9k+8rtIngCgUAgEAgEAucNHhl3HNgelFWBQCAQCAQCgfMA+93v+Ktx58iBQCAQCAQCgTMNK0pbbez1uzvXtnc++PT+te2d63d3rm0/+PDTB9e2dz66u/Ph9oMPP33w0d2dj+7ufPjpgw+3HxQz4p8+uLb9AAgEAoFAIBA4P7DP+o437u18+OmDEDav3v7syq27neB59+rtz0Lw/PDT+zfu7Vzb3nnn5p1r2ztAIBAIBAKBwNmGFefcte0dv6iPxx/cuR/wB3fuf3R357oPm58+uH5356O7Ox/cuf/hpw+6NgYCgUAgEAgEzjws3mf93sfb/lWGH24/eO/j7Y86U93vd8Lm1dufhZR65dbdD+7cv3Fv5/rdnfc+3g5z5EAgEAgEAoHA2YYVIbVPjdq4XKpiznr7wdXbn3n84af3P7hz//rdnev3fEotnuW+evsz39O17Z0rt+8VKRUIBAKBQCAQOLuwkguptL1xb0cbl+YiDFReuXX3eid4Xu2sA3T19r2QUq/cuhtGO9/7ZBsIBAKBQCAQOPOw4pwz1uVCaWOdc9e2H1y5da8TNh9cvf1ZwEVP93au3v7M9/TR3Z0rt+5dKxIrEAgEAoFAIHDGYZEdr9y6d2x2vNe3v/sn9wcEAoFAIBAInC1YzFn7+x2zXIQ1ekYa53x/3AFSIBAIBAKBQOA5gpWrtz/7cPuBz46DbpO8N+79lUAgEAgEAoHAWYEV59z1uztpJpSxHpQfz74y7nPdQCAQCAQCgcDZg5Ub93a0cVLp0trgn4VByw+OLAt5/3qf9SSLjYFAIBAIBAKBMw8r752TF+AAgUAgEAgEAs8cVj789P618BrsO+XXYBftD3teg329eH82EAgEAoFAIHC+YOXGvZ3rd3feuXknTHW/c/PO9c5UdwieV27du3LrXkipH9z5DAgEAoFAIBA4b7BybXvn2vbOh9sPrm3vfHT3Zbv8+bXtnWvbD6512r0bAIFAIBAIBALnAVbeuXnngzvFo9q/vHHr2vbOjXs7H3x6/52bd4qwefvee58UwfP9T7avdJb5AQKBQCAQCATOG6w8e7737Pned893feP49u6zTnuIjYFAIBAIBAKBMwgrxhitTStOhNLGGKF0q51obYwxuVBxkhljjDFpJtJM+HacZLmQQCAQCAQCgcB5gxUhtVRaayOVyaWSymhtpNJCaqmM0kYoLaRW2ihthNRCaaWNVAYIBAKBQCAQOG+wEieZkMoYI5VpxYlUxhgjpA5hM8tlmuWd4JlnuQzBEwgEAoFAIBA4V7DiQS6UB+W2kDoXSmmjfdiUWmujtMmFElIDgUAgEAgEAucNFvc7xkkWprrjJFOdqe6kEzazXIaUmmZ5LhQQCAQCgUAgcN5gJculB1KZNBdF2FQ6y6XHQqpcKK2NNj6lKmOM0gYIBAKBQCAQOG+wkmZ5GLSM06xgUqdZrrUxxuRCZXnxcE2Wi5BSgUAgEAgEAoHzBivGGKVNmglZBE+dFiOXRkid5TLgoidjslz6noBAIBAIBAKBcwWHyI6mb38KCAQCgUAgEDhv8MicdTLuOCcQCAQCgUAgcB7g0M/KmHHvrwQCgUAgEAgEzgo8YY2edNznuoFAIBAIBAKBswfD2uDSh81yW3QvC6l0n/UkgUAgEAgEAoHzAnknIRAIBAKBQCBw6HcSCqlkeA22KL8Gu2iLntdg6+L92UAgEAgEAoHA+YKVr5vyt4fy4betxwfi66Z8fCAeftv67aH8uim/2suj7+Kvm/Lrpvzyefrl89S3o+/ir/YyIBAIBAKBQOC8wUqqXKpcomyqXKZftsufp8qlyqaddu8GQCAQCAQCgcB5gJX9OIuFEcZl2u21klQ5YVwszX6cCeOEca1cHabCt5upaOXKt4FAIBAIBAKB8waPjDsObA/KqkAgEAgEAoHAeYAVYVyu3X6cJcoK4xJl99tZrp0wLhbmMCnCZitTraxIqYeJiIUGAoFAIBAIBM4brCTSpsrm2qXKxdKkyuXapcom0qbKZdolyibSZtpl2iXSJsoWM+JAIBAIBAKBwDmDlcNEJNII41Ll9uMsVU4Yl0gbwmY7161MdoKnbOc6BE8gEAgEAoFA4FzBiqtWU+ViYTwotxNpY2Ey7XIfNqXNtcu0k4vLibR+Y7m47DfWy9UA1dJKGaqlFQ9jYQKMhdHL1a523x7NSrULDt5VtbQSdnUAHKZHV63q5apcXNbL1a4TddzJKfdYPjnhj3SdnERau1LtOqvHHaNcXB7co9/Y72roffDJGeMH8Cd+HV09ln85J/4Ayhv3/R7tSrV8Vnt/cuE79SdKLa3IxWWzUv1TjhEIBAKBwPmBFVet5todJkItr7hqVS2vpK9dMCtVV63KxeXswoKrVl21KhaWfNh01Work7EwHqavXUiUddVqouxhIjLthHFycbnZSantXIuFJdFJrLEwwrjQozAuQFetxsKUYVePHqavXeiCwrgyDLva22OYzj9MhFmpdsHeHsPJ6XuM5ZMjFpZctdrVoz85wji1vHLcyWnn2sP8wkLvrg74Ovr22LWrfY/Rfx2uWs0vLMjFZVet2pWqP6seDu7Rn5xe2LWrx/0A5OJy79eRvnbhuLPqYfnkhLNaPsbQo6tWw1ktH2PXT873GH5y/kyGH8DgX07vTw44Mfj9P/3L/v5+RFHnvPb39//Xf/6XKbmsgMBRYUUsLHmQKtfKVRE2lW3n2uNEGrm4nGuXGycXl9XSsqtWzUrVQz+K0wX9f84TaWJhcu1s1Y8bGWGcWam2c+3Thl6u5guLqR/+WV4RC0s+eailZQ9z42Jh1NKyMC7TTiws+f/29+5qgHJx2a5UbbXau6vCON9jMf43dI/lXe09OWXojzHTrp1rf3L8rnb12PfkhF0NPXo4oEe5uBzOateulnscvKsj/QB6j9Gf1RN3tS8c0GPvL6cX+h7V8kr5J1f+rfqz2rWr4eQkyh73AxhjV4GTgXt7e//+7//+gqLOef3bv/3b8+fPp+SyAgJHhZX8wkIYtDxMRRiobGUy7wRPsbDYCZ4qpNRWJpPO/KOHrlr10HaGu9q5EsVQkArDeL2wt8d2Z+Whdq7CEJeHY+9qF1RLK709umpVLCyGHssnJ/3RhRN3NfSYX1hQS0WSG3yM/uT40bghj7G3xy445K6GYzxxV/ue1TJMf3QhzMjnFxbKsDOIeOSsqqWVcIxh0tn36McCu345x/UYvsfwk/O7WobHndXwAyj3OMwvZ5gfAPAVwSiKzvo/+hR1OhVF0ZRcVkDgqLAijMu0a2UqLQYRV/ILi53BmJV2rsN/XIv/ElerYmHJ/yfcQ10Md63kFxZ9SlVLK2Jhya5UPSyCUbXazrXfxUy7/MKiLgYRbStTftwo9Oh3N/RYhn5XA+zkYtt3VwfAzkiVHdCjHwv0u+qq1QD9yQnHKBeXi2BUrYqFpfIxls+qnyT1MO9M0RZzuMa1c+0TVd9d7e2x+OL7wbCrXSent0d/jIPPaohl5R7L0H+PennFQ///Qgz/PQboewwn57hfTlePXd9j+QcQdvXEH8BxxzjMTw44SUh2pGamoiiakssKCBwVVsrRoStzFEnO9A1kZkDmCDAkAFetdna0mGMNCSBVNoTOIjqYlyknBLIwAd2V5I6knOqRBBB2VZTSam8+FgtLtlrte4wnn1PTN6y87DGc1ZAdwzGWg3UnAr48xgE99n6LXbAcc3thCGTDnFV/cvzX0XWMXbB8Vvvu6nFnNUTA3q8jnByxsFT+yfXNjgH2/nJG/QF0fY+DfwD9rkbgq4JkR2pmql92PGfXI3BuYaU8XJkdnevsmgcUR2eQ/Xyun3puHh3nPG7OWnQGSMPMY9Zv5lEuLnfNWYvOlGXY1WbPyKoPDX1h+Ribnen1rtnV3lnyrknSsKvJKBP6AfpElV9YCMOxvSena3a19xh7d7UL+q8jfI/Hzcv33kIgjNPL1b7fYzirvd/jcTCMcQ6Ysw6/nOHnrP0vJ/RY/uUMmHrue1bD1zH8YP7wXwfw1UGyIzUzdeKc9fRfj8C5hZXybZJdj4Mcef7A9HmOpOtxkF4YC5ObY594KD9k0/XEg4d9exTHPCsjjCueeDCu61mZrltB+z5j0QXLuxqOcfDJCU+u+F1VxTCe6zrGIzefmj4PEnXtau9jPXJx2VaL54G6oO8xPIHU53ZXc8LTOeEYw0M24awO/3TO4O+x79dRfuZpwC9HFSOO1a7vsTOme/JZ9bt6XI9j3kQMnBQkO1IzU1EUTcllBQSOCl+u0eOTR9dKK62j656Io2u75Mev0VOGA9bocUdXkwlQlB4Id6U1euxK9bgnyVs9K624o4v7HLd+TX5h4bgewzGWd7XvMfbtMZycrrNa7rFr/RpXWvimfIx+UK23R3F04ZveVYHKsKvHrlWByuvXhJNz4lntu2JOV4/t/IR1iMq7OuDk9D3Gvt/jcbDv6k7+GHvPau+u9sKuXw7wVUOyIzUzFUXRlFxWQOCosCKMS5WLhU47a0r7tjAu6V5v2eRH181OlZOLS2GJb7m4FKZKY2HCestqaTnvrCcZ5hzLMPSedC9E+bLH8GRu6CVVLv7urlq+qjq7Wlrh+ciuBljusbymtFmpDj7Glz327GoZZt0Lp7+EvvfeY+w9OeWvYJgeu85q+nJt8KWX8Lt7euWqPNqjXFwOM/K9X4c45qxmpQVFQ49dxzvSMerlavnrKK9/Xt7V0GPYuPd7zF6uRm76rQ2uS2uDFyenZ23w7mPs+3X0HiNwMpDsSM1MRVE0JZcVEDgqHOqdhGFEp5XJMKKTvnbBz3sG6GPKYSLCKE4YJ2t13mPjqtXQo16uhh7V0oqHvscQdX2P/vMyjP/sNQ+zd6+0OrsqFpa6oG/3PUbfYzjGvrD3GHth+eSEATbfY4DhzrzeYzzu5AzTY35h4cSzmr52wW+c/PK9uNOjh71nte8PoOushv/Po+vrCBmu66y6zgLmAfqzGo6xDPv+csrfo5/47v3lhF3tPTnlHgP0v9Vwck48xgFXB3CSkOxIzUyF+x3P/LICAkeFFbW0rJdXcv8abFF+DbZJlbMrVbW8opZWss5rsNXySq6dXq6qpWX//uzwwj27UvVQL1fzo+/PVksrannFrlT1cjWRJsBYmDIMPSalF2+rzu4FWNrVfXH366Tz9m4PzUrVrFTLPYZdLR+jXl4JsHdX/e4l0ujOH/HHWD45vsfyyUk6vQSYdt4NWO7RrlRDj8YPInZOSNcxdp2csKvhGBNlfS8e+nb5e1RLvvf9/O7XXT12wfC6v95jTI6+Bz38AMIxemhXqnp5pdPjUCfHH2NXj4myamnFH2MZ9n6Pvkf/kyuf1fDL6foBdP1W1VLR7nuMx/zkuncVOElIdqRmpqIompLLCggcFVaEcbl2+3EWprr34yzvTHWH4NnKVCtTIaXGQgOBQOCEIdmRmpmKomhKLisgcFRYSZVLlUuUTZXL9Mt2+fNUuVTZtNPu3QAIBAInAMmO1MxUFEVTclkBgaPCyn6c+QdtMu32WkmqnDAulmY/zoqwmavDtAiezVS0Osv8AIFA4IQh2ZGamQr3O575ZQUEjgqPjDsObA/KqkAgEDgBSHakZqZOHHec/usROLew3/2O7XHnyIFAIPBVQrIjNTM17P2OU3w9AucWVhJp0/CIjSw/YmNT5bJ+j9gUM+JAIBA4WUh2pGamup6zPo/XI3BuYSX6Ln68n3/dlE8O5MNvW08O5NdN+XhfRN/FXzfl1035aDf78nni218+Tx7tZr4NBAKBE4ZkR2pmKoqiKbmsgMBRYcUYI5XJhZLKdLWF1LlQShutjZBaSK21UdrkQgmpgUAgcMKQ7EjNTEVRNCWXFRA4KqwYY7Q2cZIJpY0xQuk4yZQ2xphcqCTLjTHGmCyXWS59O83yXCggEAicMCQ7UjNTURRNyWUFBI4KK1kuPZDKpLkowqbSWS49FlLlQmlttPEpVRljlDZAIBA4YUh2pGamoiiakssKCBwVVtIsD4OWcZqFgco0y3UneGa5MMYYY7JchJQKBAKBE4ZkR2pmKoqiKbmsgMBRYcUYo7RJMyGL4KnTYuTSCKmzXAZc9GRMlkvfExAIBE4Skh2pmakoiqbksgICR4VDZEfTtz8FBAKBE4ZkR2pmql92PGfXI3Bu4ZE562TccU4gEAicACQ7UjNTJ85ZT//1CJxbOPSzMmbc+yuBQCDwlCDZkZqZiqJoSi4rIHBUeMIaPem4z3UDgUDgqUOyIzUzNcYaPdN2PQLnFoa1waUPm+W26F4WUuk+60kCgUDghCDZkZqZ6qwNfvaXFRA4KqzESeZHIKUyrTgJIE4yY4wxJstlCJ5plofgCQQCgROGZEdqZirc73jmlxUQOCqsCKmk0lr7sKmkMlobqbSQRVsoLaRW2igfPDsbA88dfPTVk8dPnj5+8vTRV08ePX7y5MnTrx4/ffTV46867S8fPf7q8dMnT55+9fjJo6+K9qPHT84WTvlZBZ4ijK9cTK9ebF+ptt+vJlcvJlcvtt+vtq9U06sX4ysX2++vkB2pmakoiqb8egQCj4PF/Y6tOAlT3a040Z2p7hA800ykmQgpNRcSeO7g06dPm6242YrzPM/z/OCw1Y6TPM+zLN87OIzTLM/zOM32Dg6zLM/zvB2nB4ctv/FZwadPn075WQWeImy9t5I+fMs9+Vv35G/z6K/y6K98O334lvzyr92TvyU7UjNTURRN+fUIBB4HK1IZqYxQWiqj9Mu2/7/N+lanraXStXqjawOhdK3eKMOebfpD/5d7e+yCPR8eu6vAE+FXj58maZakWZLmSZrHnUZop1n/z5M0Pyv41eOnU35WgacI4ysX1Zd/o7/8L/rL/6K//BvdaYcPyY7UzFQURVN+PQKBx8HKpcur/kEbpU2z1ZbKGGNyqVpx0mg0jDFpLuK0CJ6ra+tpZ5mfVpx4WN9qlOGly6tFSh0IG41Gb4+9MEmz3h4HwW8fvNu49Y2H327v//y+HBKO3eP5gQ+jL/yQ3mGz1WwXY4F7B4ftOM3zPM3y3b39JM3zPG8n6d7BYTH+144Pmq2zgr+Jvpjyswo8RZh9cNE9+pv84Vvp51vu0d+4R3+Tfb6VP3zLt+MHNbIjNTMV7nec2usRCDwOVqQytXqjN2bW6o1avbFZ3/KNMHwYPgwbh7YfSvT/s7SNHjDueFz4PTEdH9vei35R/+QflY6v/Pi7xs+fNd56fvHH+78d8o+M1eP5gV89fhonaZykcZLFSdbuNIZrnw08btxxes4q8BRhfOWijP5KRX+tor9W0V+pTjt8SHakZqZOHHc88+sRCDx23NEYs7XVODLV3U60No1GI0x1NxqNNBNr65s+eMZJtrFZM5058s36loeX3lz1cGOzHidZMWyZiTQTvl2Gly6vHu3xm1uNxsZm/fLq9W+MMcb89vrm3z14bow5iN69fO3rXEhjvvlkq3Hp8upm/Z3owMOnn2w1Go3GxubHT/ys/EH0d+u/+m0mjDHy/s//54Wl3Sf9pvPb494HcJ7h06dPD5vtw2Y7y7Isy/YPmq12nGVZmma7+wftJM2ybHF5ZXfvIE2zLMsWFpf3D5p+Yw+r1WoX/B/+7LVe2GonXXBAj+0kHQBPuN+xc4xr65vHnZy19Y0uuL5Z63tWL6+up5mo1+v1ev3Sm6tr6xv1er1Wq4/ao9/VLvjGX7555j+A6Yet91aS+5v2i5/bL36e7dSznbpvJ/c3xa+37Bc/JztSM1PD3u94Di9k4MzDymZtSyq9tdWQyuTy5SM2m7XifkSh9GZtq77VCI/YKG1q9YaQulbf2tpq1OqNjVpdKrO11ajVtwLcrG8JqetbjfpWY7O2tVnfCtD3GKDW5h8/3nr71/tSmb3fvLv58e+F1Ep/8/HWrX+Qv/9V/ZPfaSPVwee/2Lr5O621kb+7tfGLh7vK/P6Txi8e7gupdx++W//kG6G02P3NL7du/U6b9O5b3zY+y/V/3b/484Nn+uVjRLL8GJEOx9j1GFEx6y9nCj766om/ibAdp+0kTdIsTrJ2nMZJmqZZnGStOImTbGWlGidpO07jJFteqbaTtB2nHi4urXi4tFz1cGWl6uHScnVlpbq0vLK4tLK0XE3SrAwH95imWeixC/rnrE88xo3N+oCTs75R83Bjs55LtbFZ73tWN2t1D9c3a6HHjc3acWd1s1Yf8HV46HuUytRq9TP/AUw/jK9c1A/fkr9uyM8b+uFb+uFb8vOG/HVDP3xL/fot+XmD7EjNTHU9Zz2F1yMQeBysXF5dF1I1Gg15dGmfy6vrPmBmufQjN8aYtfUNv7RPo9GIO2sC1eqNVpzU6o1Go1GG6xu1sCZQLzza4ze/qr1z73/x8fab6xs3f5vlxpiD6N219Y2/39k1xpiD6H9cvf4PsrwK0Te3Gu9+vutXIfrmVuPW17lMv9vx9zuexwWTXjWMvviyM6TXarbiMBbYjpMsy+Ik290/iJMsy7J2nIbxv2YrPmy2/Ijjjy4seFitVj2sVqseLi1XsyxbXFrpgmP36NvRF18ed4wbm/V6vb6+Ubv05qofLFxd27i8ulav1487ORub9TcuvRlg11ktQ9++9ObqkD3W6/XLq2uhxwA3Nuv+66jX62f+A5h+mH1w0T5s5Pdr2Wcb9mHDPmxkn23k92u+ndxdJztSM1Os7wg8v7DiM9zGZt0D2Vngp9FobNa2Njbr9a3G1lZDSC2k1trUtxq5UJu1rbBxrd7wbf9HfILMhapvNXSxFrne2moobcrwaI+/u1lvlHp89zf7Rkgtdn/zzta7D/dNLpTY/c2770a7nd0zxkj1zY3Neu0l/OXDfaP3o7drn/yD1LrPsumq6xhNn2XTZxk+efK0HaftOE3TLEmzVjtpx6nPcK124jNcaFer1cWllYXF5eWV6spKdXFppR2nKytVDxeXVvzGC4vLfuMybMdpq50kaZb6EcfhevQJsgs+efJ0mGNc36ideHLW1jf9xhub9a6Ts1mr12r19Y3a+kYtwPWNWt8eNzbrXV/H+katq8d6vR42rtfrG5v1tfXNED3P3S9nYrD9fjW/v6k+r+vP6+JBTTyo6c/r6vN6fn9TPKiZX9fJjtTMVOe9MtN7PQKBx8GX77MOty3GSaY69zsmWW6MaTQa4VWGjUYjzXL/n88ueHl1PcDV9Q1/j6OHnXsfX8LLq+thcj1Ovv5469Y3xoQePfz6Ru3WrVuNW9+kWZ4/f/hu49bvj7x18fcfrl7/XWdWvoAH0d9v3Px6lNc1lnvMZhqG+x3TNE3T9OCw2WzFaZomSbq3f9iKkzRNF5dX9vYP4yRN07TZivcPm9VqNU3TCwtL/n7HLvhnr13wsBUnXTBN02q16qFv+2HLNE1XVqqDYZqm5fsdTzzGtfXNvifn8ura2vpmvV4vw/XNWt+zurq2UYa5UF3Q97hZqw+AaZaHHi+9+fKm3ktvrp75D2D6Yeu9lWR71ezUzE4tu7ue3V337XR7Nb+3YXYm95x1pVIJjXL13az38wF/c/DGQ/6psevEv185vno3e5V7OmhXe3dmGP6qd3jUGuN91uflQgbOPKxkufSgVm+kuSjCptLrGzWPRef+MG18SlXGmPpWoxc2Go0umAvl4cZmvQv68c7Q4z98vPX3O7tKG/PNrc1fPHwmlN6P3nk3eib2Pv/FL6MDo/TBg/+p9qvfaWOM3Iv+buNX/6jMN7cabz/cz3Kpfn+r8W70XKr8+cN3tm79vrSrSpuwq+UehdJZLnt3dYbhl48eJ0mapGmzFbfacZqmcZIeNts+w7Xj9KDZasdptVptxcmFhSWf5xaXlputeGWlmqTpwuJygBcWlhaXV6rV6tJy9UcLi0vL1Wq1uri8EmCrHS8sLnvYbMV+C9+jh6FHnyAPm+0Am63Y7+qXjx73PcbLa+vFMN5mbXVtY7Pmh/Q219Y3a7V6rV4vn5zVtQ2htB//64Lls1qr1bUxa+ub6/SRhBsAACAASURBVBubxpjNWj3L5fpmzQ8ils9qGa6tb/Z+Hb7H8tdRr9eP+x5Dj1P7y5kYTK5eNPc3xN21fHtNf7ah72/k22vi7pq5v6E+28g+XT2T7Nj7YdcnI2XHwduPnW+Gz3x9tz9xB4bMZ6dY85Adp/x6BAKPg5U0y8Og5eW19TBQuba+oTvB0/+HzRiT5cKn1K2tRoC1esNDP1udZrmHG5v1rLOA0PrGph9xDNBnxzjNOj3+/qP1ja2tRqPx7s5zleXPo3cbt74xWS7yf/i48W60r02a/ddf1bYajUat/u69bz385le1rbX1ja2td6MDkwuVPfvc3+8YdlVrUz7GUo8vdzUXKuzqDMMvvnzUGdJrhYHDg8Nmq11kR7/yYpqmrXZycNhcWammabqwuOzvd0zT9MLCYoA/urDQF/7owkLSGUQ8bLZG6rEXfvHloxOP8fLqWq1Wr9frx52cy6trAV66vCo7dx92nVV/22KAtVp9QI8Brq6tD+7Rw749GmNCj36ocjp/OROD6dWL5rP1/NPV7M6b5rN189l6dufN/NNV89m6vree3r40VeOOx20z4POubfp+8ooO5Lg/3ntQw2TQwX8zVLvdDu23337b/50//OEP/pMoivwn5c3Kf/bETsubnRiCpzA7Tvn1CAQeByvGGKVNmglZDCJupZlQurjfcX2jtrXV8NPQRU/GZLn0ty3Wtxpr65uySKx6bX2zk1J1lsutrYYxZmOzXsxTl6DSpgzTYqy0gGF3yz36YyvvKnBUGN5JmKZpkqaHzbbPcHGS+rcFpmnajpODYvo6XVxaOWy2Q4JstuJqtRqgH0T0sFqtBlitVlvt5LDZDkFw+B574dOnTwcfo59BXt+oZbmsdWaTu05OvV4PsF6vy879FeHk+Oi5tr5ZpMZ6fXVtY32jVq/XN2v1vmd1mB4vr677EdGNzdrl1fXO4Git/D36pa+0MatrG1P7y5kYbL9fTW9dUtur+u5qdvvN7Pab+u6qurua3rqU37ms705i3PHEtFTe8sXAlHNc1jxusyHj2kjVFbNenJQmR+30uO19Lgyh8I9//GP47qrV6osXL3744YfyJ3/84x/7/s3BJ7YrNfaFfQ98GiqKoim/HoHA42B3dgwR0A8iZrnUxpSz41ajsb5RC6OdXf3VtxovQ2ej0dXf+kZts1ZvNBo+dNbqW41Go8+Omr5H2L9H4PAw3O+YJEmcJAeHrWarnSRJO078yotJkrTa8f5Bc3mlmiRJsxVfWFiKkyRJkoXFZX+/Y4A+L3pYrVY99Dmy2YoPDlseDtljO058j12wlB37HGOIgEUgM8aPPnadnJAd/fKiAfqxwHBWQ3b0MMwjH3dWV9c2jvs6ymm1a1d7v8d6vV6r16f5lzMx2H6/mn7yhtp+U2+/md36y+zWX+rtN9X2m+knb+S3/1Jvvznhcce+Y4RhgzGG9Ab0Nbg95A4P+Lw3j/ZNvQM6PS5oHkf+8Ic/9A4ovnjx4u23337x4sUPP/wQ/m0URSE7nhh2B38pfbc57gycbfXLjtN1PQKBx8Ejc9bJuOOcwHMBv/jyUZIkSZIcHDaLPBcn+weHzZbPcMne/oEfUGy24v2Dw5WVqk+NB4dNDy8sLPbCpeXq3v7B0nIRN/cPDuO4CH8BDu5xADxuzvrNy6vheec0y8P4X+/Uc5hB9rcthpOzvlErTz17aIxZXVv3D7vUavXLq2t+9LH3rPoe19Y3T5wlTwbOWZ+LX87EYHr1or5zKfv4jfTm6/rOJX3nUnrz9ezjN/SdS+r2peRXfz757HjiP8P2fcPZcSGmt6/B7SF3+MTPjwtkXdscV33/+PDZ0U9bh//ZbrcrlUoURX4Wu2+0Le9Sb78DTuzgDHrcX55knThnfebXIxB4HHz5rIwcfJukGff+SuDUwC8fPY6TJE6Sw2Y7jP8dHLaaxfhfsn/YLCJgOz44bPnRx8Wl5cNm28OFxeUy9I+8HAebrXaAA3ossmM79rPYXfC4Z2W6jtHPXPc9OeGRlxPPaq1e74W9PXY9ZLO2vtkF1fDPypyTX87EYHL1or79Rv7x69nN19XtN9TtN7Kbr+cfv65vvyFvvZFONjsOHuJ6MdbUat+Nh/mbJ0acYQLfgBQ1Xn4aNTt29eX/7dtvv+1HIoffpWFO7DDZcXCsfNUVRdGUX49A4HHw5Ro9Houjj2en4z7XDZxC+PTp0/2D5v5BM47jOI739g8ODltxHLfb8fPd/cNWO47jw1b7+e6+n4Y+OGzt7R/4jfcPmhcWlqrVqocLi8vVarUL/tlrF5ZXqtVqdWFxuQyH7DGO464e9w+aw6/R0/fk+KV2PLz0ZnHL4fpm7dKbq5udx2s89At9Z0eX2unq0cO+X8fq2kZYWjzvt7jPcfBc/HImBlvvrcTXf6Ju/YW69RfJjZ8lN37m2/H1n6S/+nN16y8meb9j14d9txxyg3LEGZzb/pTsOODfvjgaLl/0ZM0T7eAP+25wXHZst9t+wvqHH34ofzJMp13/quvEnrvsOOXXIxB4HKwYY6QyuZA+bJbbontZSKX7rCcJPDfwyRN/v2Or3Y5b7fjgsHXYbMdx3GzFfsnGrvZhs31w2Gq143Y7PivYb23w6TqrwFOE7fer6fWfiZuvy5uvZzf+PLvxM3nzdXHz9fT6z7Ibf64+fv2s7nccPIzXu2XXBoNzzHEZbpj8OuS/HVL1Pd5hdu/E7Nj7ZMwf/vCH8Mnbb7/9p2fHwdsM2OxMguOLl2uDT+/1CAQeByvn5QU4wD8dRl98Gcb/wljg8939w2bLZ7jvnu+GDPd8dz+M/4WxwMnDAe8knJKzCjxFmH1wUd38WXLtx/GHF9XNn6mbP4s/vJhc+7Fvt65WJ79Gz4vjn7E4MTx1jYf1/eeAP3Li3z9u4xOPZZjd/hM/Cevv+KeqX7x4Ua1W/SfDrNFz4hH1TY19j3RwdjzD4p2EwPMLK0IqGV6DLcqvwS7aouc12Lp4fzbwnMFHXz1pttrNVvvgsHXQbLVabf9UymGnvX/QPGy2W632YbPln25ptdoHzZZ/PvpM4KOvnkz5WQWeIoyvXJQ3fppd/0n20U/EjZ+KGz/NPvpJdv0n8sZP8+s/zT768VmtDT5MUhnwR3rb4+WzYXb4uH81ZKd9Px/8P4fZhzFqmGHCvjt23DZTmB2n/HoEAo+Dxf2OrTgJU92tONGdqe4QPNNMpJkIKTUXEnju4NOnT3f3Dnb3DtrtdrvdfvZ8b//gsN1ut1rtb589P2i22u32QbP17bPnrVa73W7vHzSfPd/zG58V9Pc7TvNZBZ4ibL230np/Wd34ibrxk/hqNb5a9e3W+8vphxfVjZ9MJjsOGLIaEAd7/8iQ/7bv/xwj6FSOr2G2HPw3BxzLgAP5U2rIP3VaRzr5iqJoyq9HIPA4WJHKSGWE0lIZpV+2y59LZaTSstPu3QB4LuBXj59+9fjJV4+ffPX46VePnz7qNEL78ZP+n58tnPKzCjxFGF+5mF37cX7tJ/m1n+TXfpx32uHDiY07UtSrriiKpvx6BAKPg5VWnPgHbZQ2zVZbKmOMyaVqxUkRNnMRp0XwTNIs7SzzAwQCgacLv/zb6pd/W935+eL9xgXfftC4sPPzRd++V3+N7EjNTIX7Haf2egQCj4NHxh0HtgdlVSAQCJwAJDtSM1MnjjtO//UInFvY737H9rhz5EAgEPgqIdmRmpka9n7HKb4egXMLK0Lql4/YyPIjNloqo/o9YlPMiAOBQOBkIdmRmpnqes76PF6PwLmFrO8IBALPDSQ7UjNTrO8IPL8wvFdGeVBui+4lxbXusxY5EAgETgiSHamZqc57Zc7+sgICR4UnvM86GfcdiEAgEHjqkOxIzUyN8T7rabsegXMLK1kuPZDKpLkowqbSWS49FlLlQmlttPEpVRljlDZAIBA4YUh2pGamoiiakssKCBwVVtIsD4OWcZqFgco0y3UneGaddYCyXISUCgQCgROGZEdqZirc73jmlxUQOCqsGGOUNmkmZBE8dVqMXBohdZbLgIuejMly6XsCAoHASUKyIzUzFUXRlFxWQOCocIjsaPr2p4BAIHDCkOxIzUz1y47n7HoEzi08MmedjDvOCQQCgROAZEdqZurEOevpvx6BcwuHflbGjHt/JRAIBJ4SJDtSM1NRFE3JZQUEjgpPWKMnHfe5biAQCDx1SHakZqbGWKNn2q5H4NzCsDa49GGz3Bbdy0Iq3Wc9SSAQCJwQJDtSM1OdtcHP/rICAkeFvJMQCASeG0h2pGameCch8PzCynfPnj97vru7u/fs+d633z1/9nxvd3fv2fPd754V7e+e7373bPf57t7z3b3vnu1+19kYCAQCJwzJjtTMVBRFU3JZAYGjwopzzloXp5ky1jmnjI3TzFrnnJPKpJlwzjnncqFyoXzbP8sNBAKBE4ZkR2pmKqzRc+aXFRA4Kqxo47RxylhtnLEv2+XPtXHaWN1p924ABAKBE4BkR2pmKoqiKbmsgMBRYcW/gsY5Z6xrx4k2zjkntYnTrAibUqV5ETyzXOSyCJ5AIBA4YUh2pGamoiiakssKCBwVHhl3HNgelFWBQCBwApDsSM1MnTjuOP3XI3BuYb/7HZNx58iBQCDwVUKyIzUzNez9jlN8PQLnFlaUttpYa502TmqjjbPWaWOVtto4Y50yVmlrrDPWKW2VscWMOBAIBE4Wkh2pmakoiqbksgICR4WVNBNKG+ecNi5OM22cc05pG8KmkDoXshM8pZA6BE8gEAicJCQ7UjNT4X7HM7+sgMBRYcUDqYwH5bbSVipjrLM+bGprrTPWSWWUtkAgEDhhSHakZqaiKJqSywoIHBUW9zummQhT3WkmTGeqO+uETSF1SKn+fTVAIBA4YUh2pGamOu8kPPvLCggcFVaE1B5o43KpirBprJDaY6WNVMZaZ51PqcY5Z6wDAoHACUOyIzUzFUXRlFxWQOCosJILGQYt01yEgcpcSNsJnqKzDpCQKqRUIBAInDAkO1IzU+F+xzO/rIDAUWHFOWesy4XSRfC0eTFy6ZS2QuqAi56cE1L7noBAIHCSkOxIzUxFUTQllxUQOCocIju6vv0ZIBAInDAkO1IzU/2y4zm7HoFzC4/MWWfjjnMCgUDgBCDZkZqZOnHOevqvR+DcwqGflXHj3l8JBAKBpwTJjtTMVBRFU3JZAYGjwhPW6MnHfa4bCAQCTx2SHamZqTHW6Jm26xE4tzCsDa592Cy3VfeykMb2WU8SCAQCJwTJjtTMVGdt8LO/rIDAUSHvJAQCgecGkh2pmSneSQg8v7CitNHhNdiq/Brsoq16XoNti/dnA4FA4EQh2ZGamYqiaEouKyBwVFjc7xinWZjqjtPMdqa6Q/DMhcqFCilVKg0EAoEThlEU/XeKmomKomhKLisgcFRY0cZp45Sx2jhjX7bLn2vjtLG60+7dAAgEAicAoyj6/yhqJiqKoim5rIDAUWElTjOpjHPOWNeOE22cc05qE6dZETalSvMieGa5yDvL/ACBQOCEIdmRmpkK9zue+WUFBI4Kj4w7DmwPyqpAIBA4AUh2pGamThx3nP7rETi3sN/9jsm4c+RAIBD4KiHZkZqZGvZ+xym+HoFzCytKWx0esdHlR2ysNs70e8SmmBEHAoHAyUKyIzUz1fWc9Xm8HoFzC1nfEQgEnhtIdqRmpljfEXh+YXivjPGg3FbdS4pb22ctciAQCJwQJDtSM1Od98qc/WUFBI4KT3ifdTbuOxCBQCDw1CHZkZqZGuN91tN2PQLnFlaE1B5o43KpirBprJDaY6WNVMZaZ51PqcY5Z6wDAoHACUOyIzUzFUXRlFxWQOCosJILGQYt01yEgcpcSNsJnqKzDpCQKqRUIBAInDAkO1IzU+F+xzO/rIDAUWHFOWesy4XSRfC0eTFy6ZS2QuqAi56cE1L7noBAIHCSkOxIzUxFUTQllxUQOCocIju6vv0ZIBAInDAkO1IzU/2y4zm7HoFzC4/MWWfjjnMCgUDgBCDZkZqZOnHOevqvR+DcwqGflXHj3l8JBAKBpwTJjtTMVBRFU3JZAYGjwhPW6MnHfa4bCAQCTx2SHae81r5/McP/d7rnaow1eqbtegTOLQxrg2sfNstt1b0spLF91pMEAoHACUGy45TX2vcv/t8ZrVeRHafksgICR4W8kxAIBJ4bSHac8lr7/sX/M6P1KrLjlFxWQOCosKK00eE12Kr8GuyirXpeg22L92cDgUDgRCHZccqL7Dh8RVE0JZcVEDgqLO53jNMsTHXHaWY7U90heOZC5UKFlCqVBgKBwAlDsuOU19r3L/7vGa1XkR2n5LICAkeFFW2cNk4Zq40z9mW7/Lk2ThurO+3eDYBAIHACkOw45fVKs2OlUhn73/7p9Sqy45RcVkDgqLASp5lUxjlnrGvHiTbOOSe1idOsCJtSpXkRPLNc5J1lfoBAIHDCkOw45bX2/Yv/65SqUqrjPuklp9V7b726+x3P/LICAkeFR8YdB7YHZVUgEAicACQ7Tnmtff/i/zzVqlQqXY2uDwfXKe7J5Mcdp/96BM4t7He/YzLuHDkQCAS+Skh2nPJ6ddmx7yeD0+H0Z8cpuayAwFFhRWmrwyM2uvyIjdXGmX6P2BQz4kAgEDhZSHac8jrd7NgVE1/dmOIw9aqfsz6P1yNwbiHrOwKBwHMDyY5TXmvfv/g/Tq9CTPTt8M/y/xxcp7gzrO8IBL5c39EVy4gbD8pt1b2kuLV91iIHAoHACUGy45TX2vcv/vOUyoc/3wj/s1x9yWn13luv7L0yZ39ZAYGjwhPeZ52N+w5EIBAIPHVIdpzyOsXs+J+l1Nj1z/88GhP7fnjqNQ3vs5626xE4t7AipPZAG5dLVYRNY4XUHittpDLWOut8SjXOOWMdEAgEThiSHae81r5/8R+nV5VKpfzPrurarHebU9yT//iP/3gV2XFKLisgcFRYyYUMg5ZpLsJAZS6k7QRP0VkHSEgVUioQCAROGJIdp7zWvn/xv59ehRTo2+Gf5cZxH556vbr7Hc/8sgICR4UV55yxLhdKF8HT5sXIpVPaCqkDLnpyTkjtewICgcBJQrLjlNepZ8e+/+xtdP3bV1GvIjtOyWUFBI4Kh8iOrm9/BggEAicMyY5TXqebHUN1hcKuwcjyh111ivswkex4zq5H4NzCI3PW2bjjnEAgEDgBSHac8lr7/sX/NqM1+Tnr6b8egXMLh35Wxo17fyUQCASeEiQ7Tnmtff/iv89ovZJnZabjsgICR4UnrNGTj/tcNxAIBJ46JDtOeZEdh68x1uiZtusROLcwrA2ufdgst1X3spDG9llPEggEAicEyY5TXmvfv/hvM1qvbG3ws7+sgMBRIe8kBAKB5waSHae8yI7DF+8kBJ5fWFHa6PAabFV+DXbRVj2vwbbF+7OBQCBwopDsOOW19v2LGf6/0z1XURRNyWUFBI4Ki/sd4zQLU91xmtnOVHcInrlQuVAhpUqlgUAgcMKQ7EjNTEVRNCWXFRA4Kqxo47RxylhtnLEv2+XPtXHaWN1p924ABAKBE4BkR2pmKoqiKbmsgMBRYSVOM6mMc85Y144TbZxzTmoTp1kRNqVK8yJ4ZrnIO8v8AIFA4IQh2ZGamQr3O575ZQUEjgqPjDsObA/KqkAgEDgBSHakZqZOHHec/usROLew3/2Oybhz5EAgEPgqIdmRmpka9n7HKb4egXMLK0pbHR6x0eVHbKw2zvR7xKaYEQcCgcDJQrIjNTPV9Zz1ebwegXMLWd8RCASeG0h2pGamWN8ReH5heK+M8aDcVt1LilvbZy1yIBAInBAkO1IzU533ypz9ZQUEjgpPeJ91Nu47EIFAIPDUIdmRmpka433W03Y9AucWVoTUHmjjcqmKsGmskNpjpY1UxlpnnU+pxjlnrAMCgcAJQ7IjNTMVRdGUXFZA4KiwkgsZBi3TXISBylxI2wmeorMOkJAqpFQgEAicMCQ7UjNT4X7HM7+sgMBRYcU5Z6zLhdJF8LR5MXLplLZC6oCLnpwTUvuegEAgcJKQ7EjNTEVRNCWXFRA4KhwiO7q+/RkgEAicMCQ7UjNT/bLjObsegXMLj8xZZ+OOcwKBQOAEINmRmpk6cc56+q9H4NzCoZ+VcePeXwkEAoGnBMmO1MxUFEVTclkBgaPCE9boycd9rhsIBAJPHZIdqZmpMdbombbrETi3MKwNrn3YLLdV97KQxvZZTxIIBAInBMmO1MxUZ23ws7+sgMBRIe8kBAKB5wbu7u7+67/+61n/R5+i/tT64Ycfnj17NiWXFRA4KqwobXR4DbYqvwa7aKue12Db4v3ZQCAQOFH4T//8z3t7exFFnfPa29v7p3/+lym5rIDAUWFxv2OcZmGqO04z25nqDsEzFyoXKqRUqTQQCAQCgUAgcN5gRRunjVPGauOMfdkuf66N08bqTrt3AyAQCAQCgUDgPMBKnGZSGeecsa4dJ9o455zUJk6zImxKleZF8MxykXeW+QECgUAgEAgEzhs8Mu44sD0oqwKBQCAQCAQC5wH2u98xGXeOHAgEAoFAIBA407CitNXhERtdfsTGauNMv0dsihlxIBAIBAKBQOCcQdZ3BAKBQCAQCAQOvb6jK5YRNx6U26p7SXFr+6xFDgQCgUAgEAicF3jC+6yzcd+BCAQCgUAgEAicPVgRUnugjculKsKmsUJqj5U2UhlrnXU+pRrnnLEOCAQCgUAgEDhvsJILGQYt01wUTNtcSGudc04qIzrrAAmpQkoFAoFAIBAIBM4brDjnjHW5ULoInjYvRi6d0lZIHXDRk3NCat8TEAgEAoFAIHCu4BDZ0fXtzwCBQCAQCAQC5w0embPOxh3nBAKBQCAQCATOAxz6WRk37v2VQCAQCAQCgcBZgSes0ZOP+1w3EAgEAoFAIHD2YFgbXPuwWW6r7mUhje2zniQQCAQCgUAgcF4g7yQEAoFAIBAIBA79TkKljQ6vwVbl12AXbdXzGmxbvD8bCAQCgUAgEDhfsLjfMU6zMNUdp5ntTHWH4JkLlQsVUqpUGggEAoFAIBA4b7CijdPGKWO1cca+bJc/18ZpY3Wn3bsBEAgEAoFAIHAeYCVOM6mMc85Y144TbZxzTmoTp1kRNqVK8yJ4ZrnIO8v8AIFAIBAIBALnDR4ZdxzYHpRVgUAgEAgEAoHzAPvd75iMO0cOBAKBQCAQCJxpWFHa6vCIjS4/YmO1cabfIzbFjDgQCAQCgUAgcM4g6zsCgUAgEAgEAode39EVy4gbD8pt1b2kuLV91iIHAoFAIBAIBM4LPOF91tm470AEAoFAIBAIBM4erAipPdDG5VIVYdNYIbXHShupjLXOOp9SjXPOWAcEAoFAIBAInDdYyYUMg5ZpLgqmbS6ktc45J5URnXWAhFQhpQKBQCAQCAQC5w1WnHPGulwoXQRPmxcjl05pK6QOuOjJOSG17wkIBAKBQCAQOFdwiOzo+vZngEAgEAgEAoHzBo/MWWfjjnMCgUAgEAgEAucBDv2sjBv3/kogEAgEAoFA4KzAE9boycd9rhsIBAKBQCAQOHswrA2ufdgst1X3spDG9llPEggEAoFAIBA4L5B3EgKBQCAQCAQCh34nodJGh9dgq/JrsIu26nkNti3enw0EAoFAIBAInC9Y3O8Yp1mY6o7TzHamukPwzIXKhQopVSoNBAKBQCAQCJw3WNHGaeOUsdo4Y1+2y59r47SxutPu3QAIBAKBQCAQOA+wEqeZVMY5Z6xrx4k2zjkntYnTrAibUqV5ETyzXOSdZX6AQCAQCAQCgfMGj4w7DmwPyqpAIBAIBAKBwHmA/e53TMadIwcCgUAgEAgEzjSsKG11eMRGlx+xsdo40+8Rm2JGHAgEAoFAIBA4Z5D1HYFAIBAIBAKBQ6/v6IplxI0H5bbqXlLc2j5rkQOBQCAQCAQC5wWe8D7rbNx3IAKBQCAQCAQCZw9WhNQeaONyqYqwaayQ2mOljVTGWmedT6nGOWesAwKBQCAQCATOG6zkQoZByzQXBdM2F9Ja55yTyojOOkBCqpBSgUAgEAgEAoHzBivOOWNdLpQugqfNi5FLp7QVUgdc9OSckNr3BAQCgUAgEAicKzhEdnR9+zNAIBAIBAKBwHmDR+ass3HHOYFAIBAIBAKB8wCHflbGjXt/JRAIBAKBQCBwVuAJa/Tk4z7XDQQCgUAgEAicPRjWBtc+bJbbqntZSGP7rCcJBAKBQCAQCJwXyDsJgUAgEAgEAoFDv5NQaaPDa7BV+TXYRVv1vAbbFu/PBgKBQCAQCATOFyzud4zTLEx1x2lmO1PdIXjmQuVChZQqlQYCgUAgEAgEzhusaOO0ccpYbZyxL9vlz7Vx2ljdafduAAQCgUAgEAicB1iJ00wq45wz1rXjRBvnnJPaxGlWhE2p0rwInlku8s4yP0AgEAgEAoHAeYNHxh0HtgdlVSAQCAQCgUDgPMB+9zsm486RA4FAIBAIBAJnGlaUtjo8YqPLj9hYbZzp94hNMSMOBAKBQCAQCJwzyPqOQCAQCAQCgcCh13d0xTLixoNyW3UvKW5tn7XIgUAgEAgEAoHzAk94n3U27jsQgUAgEAgEAoGzBytCag+0cblURdg0VkjtsdJGKmOts86nVOOcM9YBgUAgEAgEAucNVnIhw6BlmouCaZsLaa1zzkllRGcdICFVSKlAIBAIBAKBwHmDFeecsS4XShfB0+bFyKVT2gqpAy56ck5I7XsCAoFAIBAIBM4VHCI7ur79GSAQCAQCgUDgvMEjc9bZuOOcQCAQCAQCgcB5gEM/K+PGvb8SCAQCgUAgEDgr8IQ1evJxn+sGAoFAIBAIBM4eDGuDax82y23VvSyksX3WkwQCgUAgEAgEzgvknYRAIBAIBAKBwKHfSai00eE12Kr8GuyirXpeg22L92cDgUAgEAgEAucLFvc7xmkWprrjNLOdqe4QPHOh0H5Z8wAABbNJREFUcqFCSpVKA4FAIBAIBALnDVa0cdo4Zaw2ztiX7fLn2jhtrO60ezcAAoFAIBAIBM4DrMRpJpVxzhnr2nGijXPOSW3iNCvCplRpXgTPLBd5Z5kfIBAIBAKBQOC8wSPjjgPbg7IqEAgEAoFAIHAeYL/7HZNx58iBQCAQCAQCgTMNK0pbHR6x0eVHbKw2zvR7xKaYEQcCgUAgEAgEzhlkfUcgEAgEAoFA4NDrO7piGXHjQbmtupcUt7bPWuRAIBAIBAKBwHmBJ7zPOhv3HYhAIBAIBAKBwNmDFSG1B9q4XKoibBorpPZYaSOVsdZZ51Oqcc4Z64BAIBAIBAKB8wYruZBh0DLNRcG0zYW01jnnpDKisw6QkCqkVCAQCAQCgUDgvMGKc85Ylwuli+Bp82Lk0ilthdQBFz05J6T2PQGBQCAQCAQC5woOkR1d3/4MEAgEAoFAIHDe4JE562zccU4gEAgEAoFA4DzAoZ+VcePeXwkEAoFAIBAInBV4who9+bjPdQOBQCAQCAQCZw+GtcG1D5vltupeFtLYPutJAoFAIBAIBALnBfJOQiAQCAQCgUDg0O8kVNro8BpsVX4NdtFWPa/BtsX7s4FAIBAIBAKB8wWL+x3jNAtT3XGa2c5UdwieuVC5UCGlSqWBQCAQCAQCgfMGK9o4bZwyVhtn7Mt2+XNtnDZWd9q9GwCBQCAQCAQC5wFW4jSTyjjnjHXtONHGOeekNnGaFWFTqjQvgmeWi7yzzA8QCAQCgUAgcN7gkXHHge1BWRUIBAKBQCAQOA+w3/2Oybhz5EAgEAgEAoHAmYYVpa0Oj9jo8iM2Vhtn+j1iU8yIA4FAIBAIBALnDLK+IxAIBAKBQCBw6PUdXbGMuPGg3FbdS4pb22ctciAQCAQCgUDgvMAT3medjfsORCAQCAQCgUDg7MGKkNoDbVwuVRE2jRVSe6y0kcpY66zzKdU454x1QCAQCAQCgcB5g5VcyDBomeaiYNrmQlrrnHNSGdFZB0hIFVIqEAgEAoFAIHDeYMU5Z6zLhdJF8LR5MXLplLZC6oCLnpwTUvuegEAgEAgEAoFzBYfIjq5vfwYIBAKBQCAQOG/wyJx1Nu44JxAIBAKBQCBwHuDQz8q4ce+vBAKBQCAQCATOCjxhjZ583Oe6gUAgEAgEAoGzB8Pa4NqHzXJbdS8LaWyf9SSBQCAQCAQCgfMCeSchEAgEAoFAIHDodxIqbXR4DbYqvwa7aKue12Db4v3ZQCAQCAQCgcD5gsX9jnGahanuOM1sZ6o7BM9cqFyokFKl0kAgEAgEAoHAeYMVbZw2ThmrjTP2Zbv8uTZOG6s77d4NgEAgEAgEAoHzACtxmkllnHPGunacaOOcc1KbOM2KsClVmhfBM8tF3lnmBwgEAoFAIBA4b/DIuOPA9qCsCgQCgUAgEAicB9jvfsdk3DlyIBAIBAKBQOBMw4rSVodHbHT5ERurjTP9HrEpZsSBQCAQCAQCgXMGWd8RCAQCgUAgEDj0+o6uWEbceFBuq+4lxa3tsxY5EAgEAoFAIHBe4Anvs87GfQciEAgEAoFAIHD2YEVI7YE2LpeqCJvGCqk9VtpIZax11vmUapxzxjogEAgEAoFA4LzBSi5kGLRMc1EwbXMhrXXOOamM6KwDJKQKKRUIBAKBQCAQOG+w4pwz1uVC6SJ42rwYuXRKWyF1wEVPzgmpfU9AIBAIBAKBwLmCQ2RH17c/AwQCgUAgEAicN3hkzjobd5wTCAQCgUAgEDgPcOhnZdy491cCgUAgEAgEAmcFnrBGTz7uc91AIBAIBAKBwNmDYW1w7cNmua26l4U0ts96kkAgEAgEAoHAeYG8kxAIBAKBQCAQOPQ7CZU2OrwGW5Vfg120Vc9rsG3x/mwgEAgEAoFA4HzB4n7HOM3CVHecZrYz1R2CZy5ULlRIqVJpIBAIBAKBQOC8wf8fd9OnZnMerBgAAAAASUVORK5CYII=" alt="" />

结语

  文章到此就结束了,分享还会继续。说实在的很多细节其实我自己也不是很清楚,有错误的地方,请指正,也希望能给部分园子里的同学带来帮助。

  成为一名优秀的程序员!