From ded2ffdabb0a5a39dda2173d7710564a4929d429 Mon Sep 17 00:00:00 2001 From: caihaohan Date: Wed, 25 Oct 2023 08:16:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8F=91=E8=B5=B7=E5=B9=B4=E5=BA=A6?= =?UTF-8?q?=E5=88=B6=E4=BF=AE=E8=AE=A2=E6=A0=87=E5=87=86=E5=8C=96=E5=8F=91?= =?UTF-8?q?=E8=B5=B7=20=E6=A8=A1=E6=9D=BF=E4=B8=8B=E8=BD=BD=E5=AF=BC?= =?UTF-8?q?=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ESAnnualInitController.java | 48 +++++++------- .../entity/ProcessEsAnnualInit.java | 36 +++++++---- .../impl/ProcessEsAnnualInitServiceImpl.java | 60 ++++++++++-------- .../ProcessEsAnnualReportServiceImpl.java | 3 + .../excelTemplate/es-annual-init.xlsx | Bin 0 -> 10387 bytes 5 files changed, 84 insertions(+), 63 deletions(-) create mode 100644 laws-modules/src/main/resources/excelTemplate/es-annual-init.xlsx diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/controller/ESAnnualInitController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/controller/ESAnnualInitController.java index 90c32f1f..b805b86c 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/controller/ESAnnualInitController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/controller/ESAnnualInitController.java @@ -4,24 +4,22 @@ import com.jero.common.api.vo.Result; import com.jero.common.aspect.annotation.AutoLog; import com.jero.common.aspect.annotation.Translation; import com.jero.common.constant.enums.YesOrNoEnum; -import com.jero.modules.activiti.process.esAnnualInit.entity.ProcessEsAnnualInit; + import com.jero.modules.activiti.process.esAnnualInit.service.ProcessEsAnnualInitService; import io.swagger.annotations.*; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.ss.formula.functions.T; -import org.jeecgframework.poi.excel.def.NormalExcelConstants; -import org.jeecgframework.poi.excel.entity.ExportParams; -import org.jeecgframework.poi.excel.entity.enmus.ExcelType; -import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.apache.commons.compress.utils.IOUtils; +import org.springframework.core.io.ClassPathResource; +import org.springframework.http.HttpHeaders; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.servlet.ModelAndView; import javax.annotation.Resource; -import java.util.ArrayList; +import javax.servlet.http.HttpServletResponse; +import java.io.InputStream; +import java.io.OutputStream; import java.util.Map; -import static com.jero.common.system.base.controller.JeroController.*; /** * @author: Mzaxd @@ -40,21 +38,23 @@ public class ESAnnualInitController { * 导入模板下载 */ @GetMapping("/templateDownload") - @ApiOperation(value = "企标年度制修订标准化发起流程-模板下载", notes = "企标年度制修订标准化发起流程-模板下载", - produces = "application/octet-stream") - @AutoLog(value = "企标年度制修订标准化发起流程-模板下载") - public ModelAndView templateDownload() { - // AutoPoi 导出Excel - ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); - String title = "标准化发起导入模板"; - mv.addObject(FILE_NAME, title); - mv.addObject(CLASS, ProcessEsAnnualInit.class); - ExportParams exportParams = new ExportParams(title, title); - // 导出xlsx - exportParams.setType(ExcelType.XSSF); - mv.addObject(PARAMS, exportParams); - mv.addObject(NormalExcelConstants.DATA_LIST, new ArrayList()); - return mv; + @ApiOperation(value = "企标年度制修订标准化发起流程-导入模板下载", notes = "企标年度制修订标准化发起流程-导入模板下载" + ,produces = "application/octet-stream") + @AutoLog(value = "企标年度制修订标准化发起流程-导入模板下载") + public void templateDownload(HttpServletResponse response) { + try { + ClassPathResource resource = new ClassPathResource("excelTemplate/es-annual-init.xlsx"); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=es-annual-init.xlsx"); + + try (InputStream in = resource.getInputStream(); OutputStream out = response.getOutputStream()) { + IOUtils.copy(in, out); + } + response.flushBuffer(); + } catch (Exception e) { + // 记录错误或执行其他处理 + e.printStackTrace(); + } } /** diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/entity/ProcessEsAnnualInit.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/entity/ProcessEsAnnualInit.java index 5a21917e..1a6e9e1a 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/entity/ProcessEsAnnualInit.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/entity/ProcessEsAnnualInit.java @@ -93,7 +93,7 @@ public class ProcessEsAnnualInit implements Serializable { /** * 制修订类型 */ - @Excel(name = "制修订类型", width = 15, orderNum = "1") + @Excel(name = "*制修订类型", width = 15, orderNum = "1") @Dict(dicCode = "esp_revision_type") @ApiModelProperty(value = "制修订类型") private String projectType; @@ -114,14 +114,13 @@ public class ProcessEsAnnualInit implements Serializable { /** * 原企标名称 */ - @Excel(name = "原企标名称", width = 15, orderNum = "4") @ApiModelProperty(value = "原企标名称") private String originEnStandardName; /** * 新企标名称 */ - @Excel(name = "新企标名称", width = 15, orderNum = "5") + @Excel(name = "*新企标名称", width = 15, orderNum = "3") @ApiModelProperty(value = "新企标名称") private String newEnStandardName; @@ -134,6 +133,7 @@ public class ProcessEsAnnualInit implements Serializable { /** * 企标体系 */ + @Excel(name = "*标准体系", width = 25, orderNum = "5") @Dict(dictTable = "laws_tree_node", dicCode = "id", dicText = "node_name") @ApiModelProperty(value = "企标体系") private String enStandardSystem; @@ -141,19 +141,23 @@ public class ProcessEsAnnualInit implements Serializable { /** * 企业标准代号 */ - @Excel(name = "企业标准代号", width = 15, orderNum = "7") + @Excel(name = "企业标准代号", width = 15, orderNum = "6") @ApiModelProperty(value = "企业标准代号") private String enStandardCode; /** * 企业名称代号 */ + @Excel(name = "企业名称代号", width = 15, orderNum = "7") + @Dict(dicCode = "enterprise_name_code") @ApiModelProperty(value = "企业名称代号") private String enNameCode; /** * 标准类别代号 */ + @Excel(name = "标准类别代号", width = 15, orderNum = "8") + @Dict(dicCode = "standard_category_code") @ApiModelProperty(value = "标准类别代号") private String standardCategoryCode; @@ -166,19 +170,23 @@ public class ProcessEsAnnualInit implements Serializable { /** * 标准类型 */ + @Excel(name = "*标准类型", width = 15, orderNum = "13") + @Dict(dicCode = "esp_standard_type") @ApiModelProperty(value = "标准类型") private String standardType; /** * 企标等级分类 */ + @Excel(name = "*标准等级分类", width = 15, orderNum = "14") + @Dict(dicCode = "standard_grade_classify") @ApiModelProperty(value = "企标等级分类") private String enStandardClassification; /** * 草稿计划完成日期 */ - @Excel(name = "草稿计划完成日期", width = 20, orderNum = "13") + @Excel(name = "草稿计划完成日期", width = 20, orderNum = "17") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") @ApiModelProperty(value = "草稿计划完成日期") @@ -187,7 +195,7 @@ public class ProcessEsAnnualInit implements Serializable { /** * 征求意见稿计划完成日期 */ - @Excel(name = "征求意见稿计划完成日期", width = 24, orderNum = "14") + @Excel(name = "征求意见稿计划完成日期", width = 24, orderNum = "18") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") @ApiModelProperty(value = "征求意见稿计划完成日期") @@ -196,7 +204,7 @@ public class ProcessEsAnnualInit implements Serializable { /** * 计划报批日期 */ - @Excel(name = "计划报批日期", width = 15, orderNum = "15") + @Excel(name = "计划报批日期", width = 15, orderNum = "19") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") @ApiModelProperty(value = "计划报批日期") @@ -223,7 +231,7 @@ public class ProcessEsAnnualInit implements Serializable { /** * 主起草人 */ - @Excel(name = "主起草人", width = 15, orderNum = "9") + @Excel(name = "*主起草人", width = 15, orderNum = "10") @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") @ApiModelProperty(value = "主起草人") private String mainDraftingUser; @@ -231,7 +239,7 @@ public class ProcessEsAnnualInit implements Serializable { /** * 主起草单位 */ - @Excel(name = "主起草单位", width = 15, orderNum = "10") + @Excel(name = "*主起草单位", width = 15, orderNum = "11") @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") @ApiModelProperty(value = "主起草单位") private String mainDraftingUnit; @@ -239,12 +247,12 @@ public class ProcessEsAnnualInit implements Serializable { /** * 主起草单位责任人 */ - @Excel(name = "主起草单位责任人", width = 20, orderNum = "11") + @Excel(name = "*起草单位责任人", width = 20, orderNum = "12") @Dict(dicCode = "id", dictTable = "sys_user", dicText = "username") @ApiModelProperty(value = "主起草单位责任人") private String mainDraftingUnitResponsiblePerson; - @Excel(name = "标准推进人", width = 15, orderNum = "12") + @Excel(name = "*标准推进人", width = 15, orderNum = "16") @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") @ApiModelProperty(value = "标准推进人") private String standardPromoter; @@ -280,7 +288,7 @@ public class ProcessEsAnnualInit implements Serializable { /** * 授权部门 */ - @Excel(name = "授权部门", width = 15, orderNum = "6") + @Excel(name = "*授权部门", width = 15, orderNum = "4") @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") @ApiModelProperty(value = "授权部门") private String authDept; @@ -288,7 +296,7 @@ public class ProcessEsAnnualInit implements Serializable { /** * 配合单位 */ - @Excel(name = "配合单位", width = 15, orderNum = "8") + @Excel(name = "*配合单位", width = 15, orderNum = "9") @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") @ApiModelProperty(value = "配合单位") private String cooperationUnit; @@ -296,7 +304,7 @@ public class ProcessEsAnnualInit implements Serializable { /** * 联络人 */ - @Excel(name = "联络人", width = 15, orderNum = "17") + @Excel(name = "*联络人", width = 15, orderNum = "15") @ApiModelProperty(value = "联络人") private String contactUser; diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/service/impl/ProcessEsAnnualInitServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/service/impl/ProcessEsAnnualInitServiceImpl.java index e69b88b9..0fe35df7 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/service/impl/ProcessEsAnnualInitServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/service/impl/ProcessEsAnnualInitServiceImpl.java @@ -71,12 +71,14 @@ public class ProcessEsAnnualInitServiceImpl extends ServiceImpl list = ExcelImportUtil.importExcel(file.getInputStream(), ProcessEsAnnualInit.class, params); + list.remove(0); + list.remove(0); if (list.isEmpty()) { errorMsgs.add("文件暂无数据,请检查后重试。"); resultMap.put("msg", errorMsgs); @@ -161,6 +163,9 @@ public class ProcessEsAnnualInitServiceImpl extends ServiceImpl listDict, List esList) { + StringBuilder errMsg = new StringBuilder(); String projectType = plan.getProjectType(); String originEnStandardNo = plan.getProjectType(); String newEnStandardName = plan.getNewEnStandardName(); @@ -212,46 +220,48 @@ public class ProcessEsAnnualInitServiceImpl extends ServiceImpl 50) { - return "'新企标名称'过长(最多50字)。"; + errMsg.append("'新企标名称'过长(最多50字)。"); } - return ""; + return errMsg.toString(); } - } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/impl/ProcessEsAnnualReportServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/impl/ProcessEsAnnualReportServiceImpl.java index ff27e054..d7fad187 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/impl/ProcessEsAnnualReportServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/impl/ProcessEsAnnualReportServiceImpl.java @@ -247,6 +247,9 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImplSKxD(vn-62Tu0KwgZX3$_k!f$r(-fwra z_xlU(?K!9W%z59Z&P;bbRn=9cBo70N1Aqqr0RR96!1y%VQXdKch=&CLumM159dQSH zS2KH812r#4GZ#G;Pdi)k0$6CeJODK0{r`>s;vJ|;9#w?T6@QFF=5$YZ`Ts^eyCFgB`R>FS6!c& zmvwL$O!E<+Fwt3C>nsn4Sd^X6z#zsv6OiWAI-tTOu`MQ7MP!MKCmgVwy)vwUxjEF1 zQlVYOKeF1lrKqui$v0L$i?KV6J!fr2|4#q=F0(9b6y>`$Ja_$KC5pGI^u{Xf&i5bW zdtB(+IOh#bpf}jU;=9q-CpY0cdw5A-a}hO^M_yHE55?Ose)Q4x@%~5`8+E00-@$`x zX~3+LBN|8%G_wRyvWaTKtLCtu^8F-&Tc|L8-cP>%K(mca@@bRUv?C`j-c*r*(vE4X zcsNJm4L>hKkYDM@Xd7Sen-dcfAN!JNgs-rYch5LCm`5GodqEhZy%f~G;U`-oM}qIb zU-oo@PcKrB{5gKY0|3v@FaV{$(Xv^cjp_=bYYGt7Awy_s;B02=!pid7{69MW7jy70 zf4wU4^_u}Ul&~|I$MBKc`So}Vki3VOOeck!Ux4fydUH%6HSzk#mn0Z!M8Po9{@s3$ zW2@`0Vva{BZg#k;qOfoTsaia$!#>6|RcD;zEI{dHU~1d@T_W=%_LC2@V%CTX zB^TBm$CUIiP2RP?b`#gdc(&IkUc`aQk@L}@D6+B*h==+oNv1QFuofT$VTVu%9kMf? zwyYiw&Njvl4mQ8}ts*rchgCL=b>u4%;2N&)l7=mXv*9q0bslpN4_Q=TK&oXFn`8wJ zt{{-3S&zf*+g!eQfUO>KljyU;3-adz>1F2~Pg(3f;YfjIs0S-CS}6hGg%G53ZYpjp=ktw-bTQnTyc+?nUMlk zmR&@$<9T$5LS0ZbiH;TnVr)YiMhe?_v)z;&+n#0M*7&gD`|0;#MO6K-D0G=csg2%3 zJu#J7X%x_Gn`~h*z4WpUqm+d*mLXKPfTQC`{Bjo89`89q4o+9)G{^EIeSAS2t+N4J z6H|#rB$p78umWvqBj!!zH{3#E!3@_pLGlW%+*;OI&J9(ws_0fiV*_ct6UGH>QOHkT z4Pq3gK8vty#^uH5_K-?WC=7K)%_?zlDqtLp?{h5az*MJ3`od#7m|W!>@3k^X4^#VX ze%;QLThn>tgOr36pT#jCM7Lku!c%{s`Y4G!8c$WixoRY53(2)D`dfPjW8JMW6cX=7 z0y=*RED`b*Tz$}Beq8vnutt4?JYJrVzhj!%U2t&Pr7W?x(-%zDNm#DstsH?1bH>MT zVW+a-7V=}b#=(aH6oA;#2ck92nSfir1MazPA>q&p(UU^6*&B)z#l4X584tzDclMRj zPIgmOybNxQ+GiRQ?zNqEH`;ouR?VHO-Et4mK?ylzNLiJhT8^kM@)*=S2Cm_!cBvF-LI?X z$@}T{p!NsN(s<^0<&U_{?^Bw*i<=HTPl3ucr4GtarZNTwtPcsQYHboI?8y1ZR|V)R zp^aHL6aEkd|0e|kg_A#ghdk+k(0~X4go04uU#{Y>MEJMcfPzGE5F-6|k1Cbd@}Jl+ zx{-f|vw38?<6ULaag;2c`*hto8wJi1MWjq!PP-ct*zu4^yYid?c%F9@VP-=WYgaX z5oKSYdI6>n=O`HO`Xq0FmtBwMue~O1`U>w+_DCw_Nh`R8e8ODG!$+ja{OJ>2_6pKF z)z7wFK@Vf}A6GA##;?xIzm5*iZ$eJ`pDLqeXMH>hiT1@X0RRHX8-G|$7fUlUR~Odb z7xv%GXO`M(>@N%usU9; z37BOBcG)L+m-S;ndBGHY2&vjR1I0v6)JYH6JbDy&_9i$k`R%Y;pLI2P>C3t+ql=&G zk9iXd8h}{x;0FHcESmcW67KpN4Wn4Z9@!{25fv)Ay;f^f+=V^m4efk z&s7TvEiU7Xnr<EKNq|H2xDkxjM4AYwbWqp%T@<_w3EsRFG}ccDiM{;V0MB!o-I{sEd5S9Xbs zqoIu5i7^{8Jl*j>PB@koarmEzb46f$X#L*Tiu2yavFwNTV&Bxf59BD#O|<3CpEf4F zKPU|d_Qk~>USKQ>6znBJr0Ee_)OL94rztTuwM~O|*5>vcF^ZX;(4^1p}-%8DV#PJkxxY-vFr|joC{VZ_W^(yq+ zrL7DU&FcJVrmzoGeRllM$R%a9g&3t?wu@XD}reqC2e}nh~(KymRMbny{NZ9%?j8Jj_L{m}iZl zy481CZZG|#lux?7@ihsqTtg357Y6c58GQ;{Fi-@5L|rd!7sS}w7@3f=&mjir`T2K+ zOHN%?31-6xGbm0%hzC{Tg}VG(rp-2s0fwobFpVUJrZf@JqRj4@$K?u?@ERJF=~}9a)auFG(?Nl_W4K7B zHHRrbEVG$M)-*8TI5Zh>yg-81qS28=2Z01#hv8$bd6$y>t5LZt&o+TkbUwri(wyNd zy16(>gr$idh!?;ML_{DWVgxV(Q5Lw2k%*OunTV}|(Lhr~Z7MCpO*@luAr-V9**Ru! zX7J=eFL_S08;9DB)H2(_TO$q6MW|`xImc!sfA3B6C6;@RC}H9KHH@q!hOMeL)jUzU zds+JeU6aGIbxb1BmsSt$!uyH%$ZQYQ@+JSLFGyNG9sb^*i2|c~#kZ({7$HDPSoR>; zK6tT6a`AX7I`29H^G?Y^aG(%@AnZI)#_Hgi&;Lzld~p+%Bc>o-7!i}nY^Fb3SXLrGsl`}ybvnjs)H)@uQ4Ve;#&x}K~0&S7qNG} z#8C!$7;!5ls~U93Z6FfApHuOnJP@tNNpkaS0fRnUe=^F^s=dkM6Tghd9VVEA6Be9nG80qR_3+{zvkMDdVuiE$JMJd4)4ZkAkoyx; z4SJL=g|ecT(x_)s{ayIzxP0EoBu8VKA=>{yW_t8!+4TEHxsr$(TaR!Vu>@ikNpx;e zXNtr`p>hhGaD?7`O%Rt5A}!1u%P#=m&CaYLSFFu0MSal?JD7K~VhWO4dU%><_4m0x zZ$%dl6Y+n?FP+;j5rJcEDDk5w14<`|NKlxGG34!gmc0$k0%o!j;>KNy9xC5BN{a2M zRD&52Kc@#{Ogl4>nteR?SNQvvN#n3X;kZICb4jacQG?jZnl-0c#d)GD@JQa0gTox0|NtI9BywW4`@%}LDDttopklk zYq?Va`VsPGy#1-^i}Z5T89T7@Zy0u_~}anyYiwreWX7d&r4wjVt6x*-6Mud;Tqiot)ZL&11(c`$!p#x0h^CJqZ17G*E? z3CW+OU{al#$7Ad@_;qGD6cSbCMuhC;=bZz!W$d4VW^tVX{J}xP)pzQ0*{_ouTq=5( zLmtpmxrMmi)R^$eF7SWrs^G7+eth;-Z?s~~UF0}u{_MrP>;2%(+^nGABWjl9;pIB@ za%1T-9YgMRFK9vNf-mU|lkh~^623aW z!QN0&vc#LAixB$@`^-Q`VdR^m1>aJyuHhl8(nehky@|O{=uw|8oSLD0c^XyM>KuILX{F;2`Px!Wdq`|{xVWBs zH(Qe3d*Na$VqxYa$pEtzLHOHDf)l9^T0kU|`r2zMX1L2fskI&6iL%$NuhvQ7R#RL%2k;fNqlF7(9DI+PmaW%m&Q< zDX3i2Bn5VingJLaZ+A09867g5FkA&kJURNPtisj_lyelx0=HFb9Q`T>4M?k~mr44& z$ztNVVFV6%F^b;4Wo1N&jR=Sec0Qh956rB?P1yV4acnqdx!4ss!=D^WB@m_LUXW&* z)6X4I^LhFWBN@S)<&3`kZ!E9UDqwC>-mF`Y&5yajTkTtv3^E+gxh5Tb6a0!=c_}{E zz))=eq{!@CW5d#phBfac_iA^}Hx{OkjXC!-$7`)F#evAiM&;EeP9`AAn>n64J2xpl zp^Ju>A|u(8+HRsu-{i9I?)TTa=FJgW17CSN`ty~l94hr^b4x2-74yc^+x6nLQ#BG{ z3VXRIYX4kUSwibbsnen3?)Rf8gD(bA*=i!6uvMi#7`4xRQ#RC?fILw_0{~F}<&Irky==`~e!GHv)|`l4<-zDd zI1~hS*<729)}zXbk<%xG?et*Q#EIm@eg~xBM z5>HSq8=6DCDHO@jZT{6*_I-MW|{@^ZX zI?XEtRzjM zd6L0;w(0ldsx$#NO|`|oxCfJK`!v-FDbpb&7HXz{nUILAz~xJTma#fiy|z#A7N1}^ z-_?%+2mhyw2e)v0?w{)Z_wIAXq=h)7_&L5JWGl&GSJ3Xf%BzxxT#PXWxUi8NEqgHz zbkIT6L9nxs*n(Drw@3Gbp{^*iN2Zji4CYL6(Jzo zSy>1O9Z#(Ge|y2NY^7Sg%Hb4naO+sveDB)W>54|(b(LAmfY)Gph^^JLYG-B<}$In;r>ltLqutlSE; za)Zuz4gd`!jBpZ9&rc%kTs%k8Jh}4v0<#mrx1;G)W7Euc3MOkew1-mNC2fmXt<~ck z77+x#KkqKiJRG*ZF1eA}^b{zlPTx=#x;?-he*UHxY!@rELeibN(Af$HKJsnbQf`A;f=5Llto~;hj+DjNJp@9w$Kltss{f-n)kMzz9CIbxyw9%Foja~+AdX=-A0$%`dJU|Cld!SKP{uKHGp3up+nP0jr#Feq-hI8s4E+?<={^LUn^X{amFVOh z`OU3St9O9f{$LXonOsa8i`vkfN3hL}9~%ux4Jhg&T<#akLRbw&bnq-^zuB9pn?Q0i zvdm6;s$6Qn7>SUp9&x`ATdCfd$nSHJLA|;K-`|uWFe5jV+mTO3ae{Jt@2Ld!qH?)Z zLrQNTv?qmS<$hKP0BhwRe~e4?I$Ca6PQz$ZqZ(Srxs!BVfC_=I$Y5O{lPEZSUS>xs zoJ-LHX)lP~lGqJ5?j|8s`W}%P3eZf&f**6kzkndcD>CbFeWG-)$pdtoKHgpDDvypy zkfRYrR5Vj?LlLOtb&Su9L;YgtF)u#|u(2a6^uxoyb@C4HB3#K=90)V5b*|KZL)j(F z+$aItAsrExBm237j&3s~fAOufhUFbSul-S4)eXFDqOi&4-OJYcSRQGRL>)?(1!v* zwG)~$(Ggfwc0Okoi(6Vj!+7#GqFnO>)}%4|%l+4euZUI)W>U(XsOd%@6{b2bEi(ej zv1!f;*RxNq4M?Oz*`9;KLxg`ibnSp~Gs;TtGlgdL4;+l!G!dUz2?|k>3B&5I*gBE{ zB-}EU)ASr3S!<2{^eap~s{^C5d!^d3Bw4cqIp)3eKLx{a=*>oJ1s4>DE8IysPK%IP zXxnVbmMqm=4?B`rijMYIZQ8^N`+D6;)x^Qs?2pca|K+S9TNj=98d7=33AvS7qqr1y^2-RSqQ(`e z2$7Jai4+AhJv7J2kc{&*btB*#jzVq8;12i7uEZnZF+G_-dhL&nTI%6VBGYASQc4CM zP$9rpda~frcVxz_tA4c+W zrX?iNdP*P!_aKF#yk5GwH?iSm2Y}@MC&mXuy3(*6qQkM+_wF*20!2O=k}z8+;!rfe zLZ>abyI~vAl=~^HMU_GOt>EBw}}{VH6+TkV5vr)F)h%CZQf?+ABB&c3T^ZZ67a zkx*k;lR#C`*ToH-tL})CSNjZo-A>*8LDro0t2qa~Q@qPJyS@)Uwtc#LXzp6A(_e?; zp{&*C%jg)@u1Vv6Xk;G)iA1mUdJOb^j+6BP6>Qb}J#P8EXn2v_34Eps!z4tJCAoe7 zPITd`@FT(Uf7Z!cWqik0h)xnfd=tiBb<)Vu@qa1_(ZxSTR${$9q_`S(3+;;#_)dYJ zIjBF609G~%h1t4S(LGFHS;9<(oHb~@`DCYD=Y#u*VXw|GtV~pof-RRrLedohK zSbTx+M()vIcJ3&WH4DuG4ocoh38#G;>4SO=$O=grBQ{H@tEk^s zTJ*yFGCsezvwyI-i7($L>)`FSOlr5d-ws}YQL{zYfJa3@Tn!Nq<_~GrGVpptaBM}@ z<>YGf#}M)FdaCPsYUpb3(4ROGG?>D#JQLB##rw85c)waJedtC2d$HJD8{>ZA~O-^IaC!YCMY<+oq2bkb|pc-YXn7?C@8)m5Fdh0e%) z206BW1z}Lo%#eWVKevDV`*8og{)c8TCHcP#_