From 0fa1ff505c57e76b5394acdf54cd1b465b5dc6e5 Mon Sep 17 00:00:00 2001 From: songyunpeng Date: Tue, 8 Sep 2020 19:24:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B1=85=E6=B0=91=E4=BF=A1=E6=81=AF=E9=87=87?= =?UTF-8?q?=E9=9B=86-bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HousingInformationController.java | 270 ++---------------- .../excel/居民信息录入模板.xls | Bin 0 -> 43008 bytes 2 files changed, 21 insertions(+), 249 deletions(-) create mode 100644 esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/resources/excel/居民信息录入模板.xls diff --git a/esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/controller/HousingInformationController.java b/esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/controller/HousingInformationController.java index da698e67..9f51415d 100644 --- a/esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/controller/HousingInformationController.java +++ b/esua-epdc/epdc-module/epdc-user/epdc-user-server/src/main/java/com/elink/esua/epdc/controller/HousingInformationController.java @@ -20,7 +20,6 @@ package com.elink.esua.epdc.controller; import com.elink.esua.epdc.commons.tools.exception.RenException; import com.elink.esua.epdc.commons.tools.page.PageData; import com.elink.esua.epdc.commons.tools.utils.ConvertUtils; -import com.elink.esua.epdc.commons.tools.utils.ExcelSelectionDto; import com.elink.esua.epdc.commons.tools.utils.ExcelUtils; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.commons.tools.validator.AssertUtils; @@ -31,9 +30,7 @@ import com.elink.esua.epdc.commons.tools.validator.group.UpdateGroup; import com.elink.esua.epdc.constant.PopulationDictConstant; import com.elink.esua.epdc.dto.*; import com.elink.esua.epdc.dto.epdc.form.SysPopulationSimpleDictFormDTO; -import com.elink.esua.epdc.excel.BasePopulationInformationExcel; import com.elink.esua.epdc.excel.BasePopulationInformationExportExcel; -import com.elink.esua.epdc.excel.BaseResidentInformationExcel; import com.elink.esua.epdc.excel.BaseResidentInformationExportExcel; import com.elink.esua.epdc.feign.AdminFeignClient; import com.elink.esua.epdc.service.HousingInformationService; @@ -45,9 +42,11 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; +import java.io.InputStream; +import java.io.OutputStream; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.math.BigDecimal; +import java.net.URLEncoder; import java.util.*; import java.util.stream.Collectors; @@ -234,258 +233,31 @@ public class HousingInformationController { return housingInformationService.importPopulationInfo(file,gridId); } - - /** - * @Description 导出模板 + * @Description 导出模板 * @Author songyunpeng * @Date 2020/8/27 * @Param [params, response] * @return void **/ @GetMapping("exportModule") - public void exportModule(@RequestParam Map params, HttpServletResponse response) throws Exception { - List basePopulationInformationExcels = new ArrayList<>(1); - List baseResidentInformationExcels = new ArrayList<>(1); - BasePopulationInformationExcel basePopulationInformationExcel = new BasePopulationInformationExcel(); - basePopulationInformationExcel.setHouseAddress("XX小区XX号楼XX单元"); - basePopulationInformationExcel.setBuyingTime("2020-02-02"); - basePopulationInformationExcel.setHouseArea(new BigDecimal("0")); - basePopulationInformationExcel.setPropertyOwner(""); - basePopulationInformationExcel.setPropertyOwnerIdentityNo(""); - basePopulationInformationExcel.setPropertyOwnerMobile(""); - basePopulationInformationExcel.setHouseUse(""); - basePopulationInformationExcel.setTenantName(""); - basePopulationInformationExcel.setTenantPhone(""); - basePopulationInformationExcel.setTenantIdentityNo(""); - basePopulationInformationExcel.setEnterpriseName(""); - basePopulationInformationExcel.setSocialUniformCode(""); - basePopulationInformationExcel.setLegalRepresentative(""); - basePopulationInformationExcel.setEnterprisePhone(""); - basePopulationInformationExcel.setResidentsName(""); - basePopulationInformationExcel.setResidentsNation(""); - basePopulationInformationExcel.setEducationLevel(""); - basePopulationInformationExcel.setPoliticsStatus(""); - basePopulationInformationExcel.setJoinTime("2020-02-02"); - basePopulationInformationExcel.setOrganizationalRelationshipLocation(""); - basePopulationInformationExcel.setResidentsIdentityNo(""); - basePopulationInformationExcel.setResidentsPhone(""); - basePopulationInformationExcel.setBodyStatus(""); - basePopulationInformationExcel.setMaritalStatus(""); - basePopulationInformationExcel.setAccountType(""); - basePopulationInformationExcel.setMilitaryService(""); - basePopulationInformationExcel.setHouseholdRegistrationPlace(""); - basePopulationInformationExcel.setEmploymentStatus(""); - basePopulationInformationExcel.setCurrentEmployer(""); - basePopulationInformationExcel.setCurrentEmployerAddress(""); - basePopulationInformationExcel.setUnemploymentReason(""); - basePopulationInformationExcel.setReemploymentPermit(""); - basePopulationInformationExcel.setUnemploymentRegister(""); - basePopulationInformationExcel.setUnemploymentRegisterTime("2020-02-02"); - basePopulationInformationExcel.setFamilyCategory(""); - basePopulationInformationExcel.setHelpStatus(""); - basePopulationInformationExcel.setMotorVehicleNum(0); - basePopulationInformationExcel.setMotorVehicleCategory(""); - basePopulationInformationExcel.setDogStatus(""); - BaseResidentInformationExcel baseResidentInformationExcel = new BaseResidentInformationExcel(); - baseResidentInformationExcel.setResidentsIdentityNo("XX"); - baseResidentInformationExcel.setHouseHeadRelation("XX"); - baseResidentInformationExcel.setResidentsName("XX"); - baseResidentInformationExcel.setResidentsSex("男"); - baseResidentInformationExcel.setResidentsNation("汉"); - baseResidentInformationExcel.setCurrentEmployer("XX"); - baseResidentInformationExcel.setCurrentAddress("XX"); - basePopulationInformationExcels.add(basePopulationInformationExcel); - baseResidentInformationExcels.add(baseResidentInformationExcel); - List> classes = new ArrayList<>(2); - classes.add(basePopulationInformationExcel.getClass()); - classes.add(baseResidentInformationExcel.getClass()); - List sheetNames = new ArrayList<>(2); - sheetNames.add("房屋信息和户主信息"); - sheetNames.add("居民信息"); - //设置待选项 - List excelSelectionDtos = new ArrayList<>(); - //获取字典信息 - SysPopulationSimpleDictFormDTO sysPopulationSimpleDictFormDTO = new SysPopulationSimpleDictFormDTO(); - List dicTypes = new ArrayList<>(); - Collections.addAll(dicTypes, PopulationDictConstant.ACCOUNT_TYPE, PopulationDictConstant.BODY_STATUS, PopulationDictConstant.EDUCATION_LEVEL - , PopulationDictConstant.EMPLOYMENT_STATUS, PopulationDictConstant.FAMILY_CATEGORY, PopulationDictConstant.GENDER, PopulationDictConstant.HELP_STATUS, PopulationDictConstant.MARITAL_STATUS - , PopulationDictConstant.MOTOR_VEHICLE_CATEGORY, PopulationDictConstant.POLITICS_STATUS, PopulationDictConstant.UNEMPLOYMENT_REASON); - sysPopulationSimpleDictFormDTO.setDicTypes(dicTypes); - Result> listResult = adminFeignClient.listPopulationSimple(sysPopulationSimpleDictFormDTO); - if (listResult == null || !listResult.success()) { - throw new RenException("获取字典信息失败"); - } - List sysPopulationSimpleDictDTOS = listResult.getData(); - ExcelSelectionDto houseUse = new ExcelSelectionDto(); - houseUse.setSheetIndex(0); - houseUse.setFirstCol(7); - houseUse.setLastCol(7); - houseUse.setExcelSelections(new String[]{"自住","租赁","经营"}); - ExcelSelectionDto educationLevel = new ExcelSelectionDto(); - educationLevel.setSheetIndex(0); - educationLevel.setFirstCol(17); - educationLevel.setLastCol(17); - ExcelSelectionDto politicsStatus = new ExcelSelectionDto(); - politicsStatus.setSheetIndex(0); - politicsStatus.setFirstCol(18); - politicsStatus.setLastCol(18); - ExcelSelectionDto bodyStatus = new ExcelSelectionDto(); - bodyStatus.setSheetIndex(0); - bodyStatus.setFirstCol(23); - bodyStatus.setLastCol(23); - ExcelSelectionDto maritalStatus = new ExcelSelectionDto(); - maritalStatus.setSheetIndex(0); - maritalStatus.setFirstCol(24); - maritalStatus.setLastCol(24); - ExcelSelectionDto accountType = new ExcelSelectionDto(); - accountType.setSheetIndex(0); - accountType.setFirstCol(25); - accountType.setLastCol(25); - ExcelSelectionDto militaryService = new ExcelSelectionDto(); - militaryService.setSheetIndex(0); - militaryService.setFirstCol(26); - militaryService.setLastCol(26); - militaryService.setExcelSelections(new String[]{"是","否"}); - ExcelSelectionDto employedStatus = new ExcelSelectionDto(); - employedStatus.setSheetIndex(0); - employedStatus.setFirstCol(28); - employedStatus.setLastCol(28); - ExcelSelectionDto unEmployedReason = new ExcelSelectionDto(); - unEmployedReason.setSheetIndex(0); - unEmployedReason.setFirstCol(31); - unEmployedReason.setLastCol(31); - ExcelSelectionDto reEmployedPermit = new ExcelSelectionDto(); - reEmployedPermit.setSheetIndex(0); - reEmployedPermit.setFirstCol(32); - reEmployedPermit.setLastCol(32); - reEmployedPermit.setExcelSelections(new String[]{"有","无"}); - ExcelSelectionDto unEmployedRegister = new ExcelSelectionDto(); - unEmployedRegister.setSheetIndex(0); - unEmployedRegister.setFirstCol(33); - unEmployedRegister.setLastCol(33); - unEmployedRegister.setExcelSelections(new String[]{"是","否"}); - ExcelSelectionDto familyCategory = new ExcelSelectionDto(); - familyCategory.setSheetIndex(0); - familyCategory.setFirstCol(35); - familyCategory.setLastCol(35); - ExcelSelectionDto helpStatus = new ExcelSelectionDto(); - helpStatus.setSheetIndex(0); - helpStatus.setFirstCol(36); - helpStatus.setLastCol(36); - ExcelSelectionDto motorVehicleCategory = new ExcelSelectionDto(); - motorVehicleCategory.setSheetIndex(0); - motorVehicleCategory.setFirstCol(38); - motorVehicleCategory.setLastCol(38); - ExcelSelectionDto dogStatus = new ExcelSelectionDto(); - dogStatus.setSheetIndex(0); - dogStatus.setFirstCol(39); - dogStatus.setLastCol(39); - dogStatus.setExcelSelections(new String[]{"有","无"}); - ExcelSelectionDto houseHeadRelation = new ExcelSelectionDto(); - houseHeadRelation.setSheetIndex(1); - houseHeadRelation.setFirstCol(1); - houseHeadRelation.setLastCol(1); - houseHeadRelation.setExcelSelections(new String[]{"子女","夫妻","父母","其他"}); - ExcelSelectionDto residentSex = new ExcelSelectionDto(); - residentSex.setSheetIndex(1); - residentSex.setFirstCol(3); - residentSex.setLastCol(3); - residentSex.setExcelSelections(new String[]{"男","女"}); - //遍历赋值选项 - for (SysPopulationSimpleDictDTO sysPopulationSimpleDictDTO : sysPopulationSimpleDictDTOS) { - if(sysPopulationSimpleDictDTO.getDicType().equals(PopulationDictConstant.EDUCATION_LEVEL)){ - List sysSimpleDicts = sysPopulationSimpleDictDTO.getSysSimpleDicts(); - String[] data = new String[sysSimpleDicts.size()]; - for (int i = 0;i sysSimpleDicts = sysPopulationSimpleDictDTO.getSysSimpleDicts(); - String[] data = new String[sysSimpleDicts.size()]; - for (int i = 0;i sysSimpleDicts = sysPopulationSimpleDictDTO.getSysSimpleDicts(); - String[] data = new String[sysSimpleDicts.size()]; - for (int i = 0;i sysSimpleDicts = sysPopulationSimpleDictDTO.getSysSimpleDicts(); - String[] data = new String[sysSimpleDicts.size()]; - for (int i = 0;i sysSimpleDicts = sysPopulationSimpleDictDTO.getSysSimpleDicts(); - String[] data = new String[sysSimpleDicts.size()]; - for (int i = 0;i sysSimpleDicts = sysPopulationSimpleDictDTO.getSysSimpleDicts(); - String[] data = new String[sysSimpleDicts.size()]; - for (int i = 0;i sysSimpleDicts = sysPopulationSimpleDictDTO.getSysSimpleDicts(); - String[] data = new String[sysSimpleDicts.size()]; - for (int i = 0;i sysSimpleDicts = sysPopulationSimpleDictDTO.getSysSimpleDicts(); - String[] data = new String[sysSimpleDicts.size()]; - for (int i = 0;i sysSimpleDicts = sysPopulationSimpleDictDTO.getSysSimpleDicts(); - String[] data = new String[sysSimpleDicts.size()]; - for (int i = 0;i sysSimpleDicts = sysPopulationSimpleDictDTO.getSysSimpleDicts(); - String[] data = new String[sysSimpleDicts.size()]; - for (int i = 0;i!nY+(;^tGzp?L#MCOP(TTR+ zqN;SDsG&uPp{8ohr6a0ZIuO3L=#>9iXP~v4A*0JRkwk7eMrr;P(Uc2Mhot15yBk0I7g9z+eF7 zCHQ~Q4Q567SBAbwV1@8Y*c8;L@vap#My)s50?9zXj8)0Ma@X+?ev8+1`1tVLPlT=r zS5c?I4FmTQHlAh6a*XH5d-!e6M1gcrm7y_3Nx~M?sc>W1Q1pKc{514sD*8GBx{!f* z92+9{F3(rruNM;p0g3cH&~stSMW=bn^;YYz&BM8CG4~cWz#^-4r{~s|yU@42%-`*O z?rZZn8t@d`+pz~zKXNz>Yi^H+{v!Mh`aQC3{~DP`vSNC!2j=IL6qOd`mPx6(x%oLJ zX-KK5MEbwvVr3b!1nR3QG;nW0kD7|?6yn>3reupU^72cE6_t$7E-D(o3`xykY$!Wa z0>3Tf-?wD~JLTWrNU51|RH&IzmP)392D1mmXgS}L@~@Zt+XTM?+a{O!OvVJmgdIZu zni-YU*Kl@14AeHCWw8R7Aa_;`oPqJw$Doo6Mx>|SJHBBqU6~%-Ei$+Y$!sFaffQpQ zhXk`#0>2P3lPuF_$fV|Oj7(qDQwPHLu~9d|yVrwvw29ZF+o+8Mrj_Rl3_P5UHQsic zeu47gY$tWH6&)I?>h?h%9#Gr)MGRAQ^ZVD6UtbTNwc5+u-`m?brc1AperjZ7m-hOO81~!NN*^)UGHFTvpVStP!j$4c}u(l&+F0nGzl8CnH97>7^jN0=yvi z7{BN-;1Y=WCuX2y{Iun|O4>qQrCKGTFoVEcK+BBRpf*2QG!4tBC=1hYOhho{Ff&!l zoB67RW!Bn~o@jj-(UCrCB}e)xVQR7tm@HwMWJy(;OOr){dBZG9!EnZA8Zz7V`c5Ds zS>>rsNy+HJHqew!?Z{pTj0}(^Yp-v|HqzA1oF)^{W@yhg(Y#L00Fs*Wh_%;yvv+8g zr_EtSMa~w%Hp{&)A*0%hQm-*Qs>n0OjG(@xNc0$qdVh=D`;xXCdVyC$&c}P-Tq25X zm3v>q3_@7QD@AMJz!H6ECK1lI$-S>KRr8wpS`bzxBiOr&p8J?Eq-B)c4m2o})3=e^zb-zg9=u~cc+Yz99qPe%tq1R4557KmTGf-kTRr&t==1!v zw5;7eJbzt0m!~eC%TpI$AN^oi&bs+~$ap)9(DL(gTkb9V@P2Hr%4zkyxU2ZnOp2DO zU_N<%S`N$gvcltu)8M1AV&?hHcq{s}{I11;-ToSy3gZBeN5b2+*EwAG>FdA+#4 z(bCSAoOSi5KE3K*kG}EtsY@rcp8S34!E?Q(WvDFYvS!U%Ik!T;aQgr>W|3${QZU(7 zNmC8(Y$^=^W*5U=>-pH{(+mM@S}i=L>{ti6V!WVjB8tgV1q?Y&Fsl^n7NEKLJry9j z_f&xPsv0a1V^s&LxUT*>&=N$)Ou0mt&oCuvn!%a~scR#M&?Z{_M979Tf(WhV>nB1F zR3nHuG)RQ3RwIazF4QjxnYcy}p^>hBBJ@1omB`WLhI@yMQX_~o+&g5!8bPGt-XZhV z2qF#l4%zBP5NWt~Xdq|=k%oJRtf++uBDJ4?{_KQ=HrzY3^VPnu8zLSS*$`*DhwRloz>c6RA6P(5^Sv zI=Mg=t6f0ldf>X2>kz9^jE+I{^^al>Ho8vRos#0F85Ua+rZW`>nJ`KB+q8P5yLt1b zxlM=}Wu7r(MvY3Cm|5c-H8^CKos$h*U7_f($08JMbKC5w)vH(65h^Mws*X@voGKLI z6q&Gj$c5M9>dtM9$j;SGt!OQw>K4F$k){B+)viTdO`)R^i>B1+3$=}FDg<-2>k{c+ zi^wvQ6<1Z=YJOOzA!4l+bdqN20BV<7bybPj(h6;3s}gH*jqdSJ%p{pqKlZ1ZVhn@^YxK3#3{3A6BVFy+?VJZhVd zyKO$*ZSV=S$%k8Hx!nw=+)ppww9TibZ9d^P_=MQxLq=O^H%C+M*VjL@&8HRd3A3R^ zb@iZ-2PXHXje$d~E5PuT4H$eLI@` z`RAY8=F{3XA6xp?%_bkMz8y`j`Su0dd^~OQv88W8Hu-4v?P&7m1K-)^)5bO*TlyAi zlaE&4jwT6_6e zAFaNHgf4nrd48<>r=x8?w)8E`CLgW7g@nF-e37mC=$TiAUCq;mwlJHJKyiYdU5$=S zpJYGyw0za*8PO3p&v4ztA#dr@rw!d|XVx{X5gDb>)J`5tF(Zr5cu3VXSKL^`trW_^ z$LZcy<=txZa(PN6-K|5z0aFYIOz}p%bOx-R5nVC(n<S+V%m)bp;+X!uH z1a@td`lQ>@atZ5jl8VB#SXZ8OG+PBj4|`e>V30C$^!_J^=rfqTb*V5QS3vDtq5*m^ z_sPGWU7e$fNaV?sDC8Y*GXWw_8(vpLPlz~exK>13w5uZG4vtF05vLVUuD%7mGV2Vg zy4H}BQfQ7ZH@bGBMsrV9F$Ao3EHQhzQvMbCx>dK+gQV}1!f2`pRXw1>0lB2wRkw41 zsFZ62Y%v;I&g+Ovm5_Ahf+deWZ78Z;Kx_rFltRlcn!Zp=(UMQCF|APLR+DGUNTeMB zE;VK4F$2w}%`wMXv1i1lxY%jOgsQyD`-Sv} z5VT{!^(VAK2hC_-o0Odn0>z~dOtl~U?DJeN^en8x9yxuia@yB8m~+X6 zM;_Da0NuypEyUAkScu^KO*Z(u%lu8X_|tBKT92rxNwxXk`}3e@krj?;cPr~CI-=cg zj@rH8+H-Rz)iqxg*mf{0Uk_3~%Nnv*?at7*Ltm?@YKN#6hblrVb@RhSBU4WcJsO#; z>2);I)6Sn5`)OLR+%R?M^|H{TamkuqCo?_mJc%*&VXs5)ehWPsm8|J?G1Jq|hfv2V zW?R1A7JAeR*7O3*^tAIH%nwTT+ospYLXYM;*7SnS^tAIET$*0j*A_iTTsg!8a;4zN z;-?LxK~HO*oS>kTLOVaI!KUpC)h5!`gXMYPG4*-iG4*-iu|k}G)cZ-Zpo1h+&Gqp62W-NGv#}>b8$AEMtexi zQHaVOF!Ew*QRc#oi0ob|6q<|85$8lo)e8wDn-vi5MS}->Q6m!{J^4!tt8l4#l_rf! zE=2PW#lQ8qNQ{Ql--jojHgLJaNYC~N1^{DEhKVc}ZJMj0Akqcz>LfX{eYGEa0Y~<< zIY*mxM2GlmLB&P0_BZJ4nZF`a!zwB&*e#sH|G=ipG$$bqdrj4}tt`0ny*i>xz%+nI-dyx& z%AN(c(#?pBir=SppZMhh>_1SBJqr{PeiPj*L1ISs`6--)IYPNnoTsStP)bPkOmWSq zo?_30K2tnX&rfG5mr{gsq?{?(j$qzA^dc1ohV+Ew0;XBPF%vM4n_8tiKl0jW1fxtl z3bL0hT!^4)(1U}hUf{QX`oZa?gMObHo$WWwI1JLLtc7xLB!X&HQ0~n|>8V>wwhTh> z!3TdIt^^~pFQq>^b-^&y)pgv&K~u&c5RpA_s*##7c%)~_2bo(2f%1mZ%cDl74#Bu8 zM<}4QbMSD_l;!CchJxdhgQ$c@>V-_X%_!y3NgEa*MGYz)vUS9|(T`5;HW)kxnO+~P z@aQ>i?cm&}icQBBg9ne0Xo##Bkzevw35kqaQ@tz|MQW22LQz8?k}xtgmG=%B(l@i) zV7y#l5x!M+?ud?gV7sA|G8%`~;Q2N%2dEF-UKtO+82(4_Pr?s?YK1^i=fa;4{|ETh z@N*2U0LY-YR%(DfZr%=49UQjoTe@sb|F>_(cJuk6P2W+g&qt(wx^CzbGd(@- z&syDd>CfAD?evRyyrSO|FAiS)=(ok=k~j5UR9VuY^3{{SMT#GGpVYbH&x$4=O&s)v z#}7{|j=Xd@?(AjV)(!0*=zZ<-ouxisS8m=O6`t}||2V_!cdDK~{o~p@iHBRo1|E6O z_m{v|yFIb;qv3lq?zG-;WwfdLiSBE^l5RRLY`$-U%M)Xcjgwjje7n2X%TN6H`6t5* zc7C~N)1s;2qmQQSsd3NzCF)9xQ%7fvn1L3l!IGwSd#(Ot&39F3r*O18-5?uNVk#&N z3Z&mTPaS(`pV8&<>vP|qePY_6llwe6O$u6F85gu_8oTH>BhRbN=WTxYJoTWx(+n{>~~VD7vHeo_jO#*n%+3w{`i)6?|kwn zs#3S2QEflM)voVtFZm@a_Whirc3Jrc-yZeGZ|zfb zt)341{`Ta)v!4q5{pCtO*Jh?J*KU{k|MBLI4%3V6emdmgdrtRz#*Zr&br|r%PZ?dk zDzbb6H@d8;F4$W>%V+B4L7l$2qW`1w=1oJ^g?DrGdj0xpKVjRp&Mlf}&X|00YwDiK zUFUil{5o`9Q{Jvk%6O-a-@Y>7y~zvn4nE#Gc2daRrmL?H^6|O<%IzV4em88=+Zo4G zvf?k>kJwkZqQ+^*UTIn3)gDvA0)5w=ZS%{wqpyz9tsQyrml1#F?jHWzDdw)y_~vGfu5&w{YQi zchaO!9y`78WkclQu?Kg*-0@tq0dK!O=8xOIeGq#6mj!FqJoWPOKEGZ5`NpMFeWSkH z<-bq&Y~pJd-@Ly2_V1skzQ6nBX}7*VJgji1@y70&pFb_yJ^iZv-aZe8JaXrkQ&BHR zO}q2acQgK~-Y=ZLlvl8~ug{*nJDy10*~@?CmaA3gj^0?h`-Knu68CS44!%9<-D@A7 z6Te#K{r%pba(b2DicFg4Tt4B~s;_%4yp!Dg;L(V$_lxa=6K}PiY=7ag7eAa=o%ej= zwZnIg?*B68%DL{7?^`|eq2J$e+5F7ABPZn)oY*;VP}f0o(*1k?vT$JVq_?j1={R)c zQ%O}XWVX2arSDgLygsg6c<5Z$S6819`bj~h_r)Y_Y5CHsN5AT`YW^}_Y-4>obp8U%G%O!J~KV<)h+u?HwC6V9FeBuXZ#}^hEO{1gs$G%%o`0xX7FaEiW z)ZyCZ4kxB$d%x$CzT{Zk{-sa+xG_H>vER3QoAmR1>D*Hvxc7ITvh9VkJx?utKkoG8 zL%RMEul?SB&(Q71TFu(AVp-?arkQJfL$4jW-2LcVzqR}Lsy=I7i1g$0qkVmPr|EQWG``??=Wa$1!T3n0rJJCCAKvB-QmOli1|9GR=dyc z|K`5T>0f{H-Sx4TZaf<6*X~G<4<3(QUS$`yqL|G-k}{^}!&BOQn0$vyi(ZR1 zKY8$lKjs`N_gLkUa=rVQ9#6zy?Ad(u0sR-Azic?QZSSe!CHwdO@yYNvUvHBe*j_w* zxqQo@Mf;wN`Swcg_$kkH{c`-)#k+0<8vH(w=$Mt9`^>pXm3aa7Ln?p%({t9h(#m1K z4t-#AJO99Lw-#iq+sGa=4ZSeun?3KnaVg^aOfj)|Lah7aT~nvLao?wB4o`jQg|FO` z-xS}d9=vL8h3U1==l^iv^6O_Vub#9hd4$ixl6U%DIdr9c=WO?{U+H<~%9OmF`RhOb z@Yx4{&hVT6fJfMaOKP6{AfeQC(wm<}r>A$x`~Dwge|$Sh*S~Z0@Po^%erngJbL-QK z(tJn6dzas7ne=ke?FD`V4$S?rW3%ssv#&h!W=yQlx9vOiJ2>papi|N5>pH$TVuG{& z;y*f_wI4p^?4g*GKlxlbtamt>yd(G(uYb(2n|o}_-a8pDjcNOq|EDe|doSGAq9}RX zA5CU8AHVsbt`!}dRnK4ZeBV%?>Ys+d+Wy$hhvVPzXxZ)q_y20U ze)Y~*SM7c-*to0Z_{S+e zGs922Uz*r@=!>Hke)fLO#;VY@|5(${xKrn3~cpX z|91I*?wfnZS=T0t-MF%6#}}=ii(S)vdej9&llZu4ox7OgUb^-dRugqcH`f!D%eP`w zYlE@R*J^a*L%KXFydH7Yp&iGQZcUuF;>JtD z)DL{#&vtwC3~T*-+KV;s{2A%_#JHditw#MdD5mt&xpsc995{Nx`=vLM^+!f*-@gAm zD#oiWhyl2WQ{S8q*)-0^3@~j#Z35PlAWLZ@+EX(nvMy*nsjw7mjoDV6QCidd)|9MA zcnhUZY*CWOdutljN?@UJ3zK85G!3Xk+5kJc#(`}CJ2ncnze%?s*h^S0zoeOXBY`ah zZlMN8`Ig``Wr+qi`J=WK<&UP{cfLooUDJrzvvhf$zfbH|>wRKp5$jsT5$$=n=kZN6 zeMW_L@#2Sqa7h{1G5faVznL zqkt6JIH32E{RK)TcOgpk1-8u48NlNW{|*5SCpJx9O2G&?QF|~sPNxIR-4d4{3{AQt zmC>ZTqFuG+n_#0uo8FX`PMY%W^t}d6`TOWK0Zn=vdh1Y=-j?0~)ugwlZ#ihvCHjVg zCcQJh=TME{M?rna5laqnCDgtO;UNV;*aY7_|eBxgkb%=dospH8aPWBi7s; zYk?Rohj~tS#ON8|v6hInG{;&YMhkA9b{}Hc3{qkqh|%SDp4J*MtVfiXCt`FRou{=y zjP8~5SX;zs&BbHw5QBawvG$131{F{1fEaW|iAjh_=2%C>I+|l%hqt#>=zl(|8d9_9J_PEKT(*2*b)$Q-4wd_RN6SRnz*hDbw=} zKIT}>bq`35!*eQ^qs}4Cq5Om4KkdTtM2nOm4x4k-o-<&X^a9_a!>%iIXtxgMAV_hm zraq*NSg!G^G}v6N1`3CBiRioL=uOxdY8 zgZ$le zt|@fbdTh`Gh)){y3DUWMH8mZePP>F2Hp#XivIgP%nW?Faou3l(BuGr}GzXhi8C1I( z9Hcm)@I;%1Q>k!g;lcDD9$;)pIsN*NJ23^*ui-7gKOm(=%EF9*l!|P|DzYz+qKz@e z&b>%STkQtZZ_|;vBN%(!baPUZl>X`DLuhBtn0C&0386L_yAoqN;nf-ULFxzPD*KP) z#hODC?o#Z7i3@P8!IZWQC%|g4`|ybG5+ZDJqoLzIoe-3ZZ|q7NwAr$6%R?@a9W;%lo74wis>WkStR6TUp^E{M0f>*#B*5)ov<~WYA z3ntP;-efeWQQajbq38gc(sUwenh7bXU!re)hkr1UvBRU!L#c+FHdWx$4=KNbAXo5p zqq!tLuyl7(@EK3#KE+u6*ax7Cyzp=nFH8gPc0vAxS9+ewR2DoATmR!U&pSk?6FyzM zY_A$Mb&KoE*bTscrf$^t+-aw7u)3P54J>XwQyZk1r#22Yr#61b!G}$n+H^6;Xlm2d z9HXfXoe=SyG_|48hsS7Y<8O}9)FuEi8Vt!8(O~#0+4AaT2uqs5kUjxKgCT4s{6-Fj zD5DOB$tb4|hD3`-lu!(YG$?2XLmCEYa8ZXr8hB`;L{ldkFzOD2I1TA2Cn!JG!yut8 z!=P*&O9_?L1kWCVbIgfy0AtF15b333zD{JjQ$X)CJg#3^D|D^>oa1fu* zO8@qE*gP>ABx6QvAsS2?+ir98JZC!ioA8e=1N z-+4=eAHq@h^y`NDli{Q4G?qWD)vl0XgwygTx$f10zs#3-lWR=*2xQu-WF%`yW{C_j z)q(0lrb-^5;8VY%;H84Y29fFOVoKw3lnMr{`c=ne=6 zkUWv_dnn;v@M+zHtta^#kWuiX0WpABKpY?*kN`*o^aaqM(GSocFaSU_2g1kf6JHAC z-+vqge=r~&fGIS-8OU(SguZLY7*-7oc9>z3%di^2cl2mY#~3D}=y%340a<`-Kn`Fm zzy!zzj05BW@&OM4Fc9E+4a21xhEKdPT&dy5?GM8*0h9vD022X|0FwdbfGL1S0FMHu z0;U0`17-j!075I=TKE}(uSBe1;OpU|o;8=@_s}u+A%L6!xa8DtFQs}TJP)uHVSy6l z5~|-gC8XT79jOyBBNZg|BPqxUxW&R_R3QpC=s5d<=ty3iGIN|N?0F^bVP?T|{`dd- zK{k=4ClhCC;&eB2=vf{@`u#klN-seFjOb6J{EuD(i^NmV15XCW7;A;%6s#px%|(6~ zo|S3x^UhmK5Ryou3jQ@yNp3m*omCM_1w>^>@{ogul_g9v71A@^2|&1L#gBx~ova^n zkkVC02sNzr8^ZH6wOoBUi5j&fNnlzZpQUH#DeK>Le;uI;5YgItXd6S=f2Tvm-`>Dt z%F0UevnQ4@lQcATOiI=S1bRze_+TbeznD31yqA;Hyx6Q#aUL^1YBU-{jFD@Ddjv2y zqs|b=+-Hl;1s|g^EPR^FBhh^ein6l`grn((;;bB@GBK;5R5Uqf$Ca3}%Chv?1@7(B zN=#!-NjU{s%)Z}Pwk|_oGSMYEp}e>V8C$f;Fij{f$f_ta#hXgK`WknP6 zAJOS!XOS8I+pc8DZHt1*RH7AHs;@+4eV{OnSgNyxb@C@XRXk0cX_V`zu{JR@6e=!@ zhD629q+wBU8(XL$#!k3f!of5oDsB)Bjf%VBp@tY+NyDV#vS_GOT(E}z2~GZ)n*1a$ z>HJI@x)rxk6TYYktLiyO#>t9-?Ewk<1JH;Iu~}lNSj;sd(-;|I#G9ykw>Z4;Dz;S= zVy4R@ib7PmrK<{|FEu¨eX0r7A?FNmYn7h7469kWo!hL%;`9jU+k2j`2MPtkySFzR3=F= zrPAP;PFW3?C(Ius(oHD=JDgKW8V!KGmO`Rk--?2qfVVt{D!XDu%RKK{GnZ! z31pU&%SxjkkDDw>`;&V&wd-FIT=C?BCPNCx7G00_*gtZS)9lWHu}z{|#ko6FIadYE zv5zY%m^h(%VU>Mo4_z+gNLb?x?jZ2$g~JN6vkvfuIG%p(VdiY@zBy~Seo z96xe!%V)uC&+%1novhmYF{`@p(ScQO9r`Xhbk|2m4#vgUMJ$dH`|dej(MFP3+dBvR zyu4yP_u74!Skb?NMa3rxx(e6Cn6<87yY?$wc_Gy=*k95$_5Y?zbQkIVK9Vt~oh16k z4L^P3$f=LsDn7jHoj>O^AKP@Op_?Qnn+pBnT6B>f49FbT+e?gd?Xt?*mz}+~{l8A` zc=y*0CsrQ2Cb-UXmge`|Qx%kK$}RKj)N-ctFA0tT16{iuG9-11X|>*I>|m4hc#g^5 zc}|zkO!D&g@|V24D!NF%n|2&I=-N_{ZzSi`}Pm6x)zR&?s3ds+|$(C zaLMo3wah+Jm+I5M?mRWKy}jL!X*q3Dq`ht{*sA7EzHuHYEHxvcr!=K#VziW#RVYo& z+?G`#733G1r0j~f^yB?M(B~JHmYG=ASg9yi%91j3iY83R>ZE(db&TByI!S60msjE! zywKQXT+_Iwl9b@sHfWxZh;xMf%*pUvPp8MrANhLYOnW>QWQoLh@e7uM2^*igN9+Hp zS&P_lk)14{|#Y*En$b{mZtjRd)bO*Eu&d0+&G-HFt${rf#Y5AHmW>Mq;<=3@e71s zmN7SlJecdJWlW_VS?*`qL6KG&<3uv{2gGPlpi-g!V1jCUzTGx1<6iiCLNX8D^}xomyU9&bU6_NRVL%Rw(v>CMswb?>ksi1b<03h5!u?h6!fY?*+LsE}%BF*!g+go}m63>*{OL^!{ zwP$)F-*V9aDr#GEnN+=5VQ0slm(w%#+r$gtxKl^DxsLHNwz*Uo?Efa0D;h3=kZ+01 z_hB7xHQREowR1qN>*~Fv(R*Leih|yU$?ZfFnL2478Yjj!n48x$88(+wJg!KXj4fQqCsW7- z1yk8H9du1+Mi}GY?@dNrG z2pu8YL2bb~FR^oFX~H-igGO+fw&@+Q%6nMW5waCp%c14=zFbDtCE|8K^wP9y3h_~T zN6UlyB2D-^^v8+3PIZ5~g4dI%pKU$XJ}t<|e$}i?v4Nl?JNy9fnu$AQ)9me`K@~^R z)1lpM_&WHceH5=&;`B6fC#w$+qHQS;J@GnrT7K%Ggp8hi^66<5)zf*b1~S=V&1i9g zvdB)9cexP62Idqd8pO^VuSQdN&KVqA|8L{hKk9O!nVA@k)U^L&Pk&cnD_ZOdk`_YT zkyz?H1PDQkexu|kRlDSL^&MIZdm}s#U~B)U80m~{ne|QQzE_h97SI3HyC(mt)X<*= z0U?+}w8Yz6c7MMw`s~W$hksmGkX8!jjoA;fE@sV|&v6>FACv~sE$-j3JG25-7TJgf z_Ji^L8>KWQ1glRKOlD$_}!mr4&|9cyc;RC+>GO8 zp)=H5=(4)|P_!Fm*=f>-8nX|@Cz-@W5SHSRb7|%;&wii=nP3PxxTCPvm6JSp?r2Yx zTpECKR^w3*#XpffD=^)Vfn8=A3XDe}SXTc7Sm zlTR};wUi}9c`3D~rX6Td`B^Kv%JT5is4vRVGf(k`%55-Hm&x7r#{=59R4G%g`slxM z;4|S9fl7qQPf~me->b_+*+_sihxa4dZF2N9RDiGAKZGNhR7dL`ax?=cN48!8+J4z!*HjRgB+ZZjL(xYLE46+^LB*<=%UB(ya_0@WnLT%p-sWN+I zUmw>DyW&u7FpfXE;s7xirXH6eeH3Ia&e7;!SBy!?IOhn)X-60`<&-5NsRcv$a(+Q@(U2(l5c6&!C*yf!Fd%JVLTl{|+udCu{$!5^p07kJp|ew+}y zQNzzPxO8TjERBbqh$fA3gzt}*sxafRBf!H3FXW*y0D17GBCMle?}#t0jU^@A9$~WA ztinw`gD$2p@?&?2z01Rp-=0>P!){epgn$zd0iJWf!~ zD+uf5_BSxHzqRvQ^h%2-J;S^Yq>j7Q)X>xVJduUF1dy1r<*x3ys~hg>e)~!~`Tj*u z<;Y*E_#5Q1fnrCD>u)i-$NUmb-d|)r#fR8Y(5D`(2K8uB!p90a;U2SqehCqY&Qatl zmdl5To3P@tlmt@72clGn=)+>sN|a-njK9Qm;6q#Iw8>sLZY=DTA5yl1Pds*N5~;V~ zBt~*2iM}jc#!zZ(bbo|(vPN3c!$i7bB_SW-{7{C+seCf(4VT4^4ZBsz9mmP@<_DGPo>)6HV#qYvb9la zKLF*`EqdCaCt7q|#(9OI6ff(dl=Wd>K%>6@aM-v$uA!YsAmH5kpN?_ z;h_`Q3}B(ynznG=s=24 zgeU5Rm%8`p5fR!WkRC6>lQedqV=o${u;Ac8oq{Lr?FhVR-+;r8I~gRRLlT0%Bl&+i zuwqP=WPBxjy=VY=tbu0mvl7a`7I>21I7|5TE8uAzO86=@zdZtQ1^^6@Okd{?`z#cE za~n9an1ru}Z|?vniXzb={^x+p1dwk~$`by++hNvr_8l7+11xetK>5ay0r#FRLQ?MJ zzRA?H8~RAOK9>Ak8-mR_d7uMscim76lXA%JBy}afbR-8XKlgb5XvK1BR&SJ_2e7sO zL;_mK-%H31nMqDk7g7PWse zrCDD-EuQvOrz*3D`u_f|Hh)85+&{f%{>dP?nJzNI(Wk0Pc<^uiViqgEM4`4pV~ET~ zrjzoVqW1kyvVZsL=>93Gqziy#XiWL1km-K29{(%upZ#_vEEW*vjIbusSu=3{dq3-@^Qalf|^cY1^Hx9SO3 zf_Nz)7isjD+RK5%r6SPCl1m2R{xX%ojX(L9N|I&ILP`1@Upnpu69@WR>t#sGz`bDH z76L8$7+*H9lrtX~DmfGw6S$FHl!Si^it5FKY1--MVy5g$tIyCh^|y`EvPM3 zH`+#P(*4!Yf2uWu(Gt{>)S~~>TJvr_sJ3sz`REhUTxTTQJzhJa=0@^B4*5P1;g3)&Yi1QqDZW97-lp_x1;t`6)zcAbt_C^ZV z-2aJfos0YNG!_M-Ww_SbYE`bU6QIA?ACPO)*ftf|U~`+&A4H(GjDzk5qvZndn}Bu< zL8v=IVX{s~0uzQj0q_&?cC-<|+dcx=Sj6hK=@3X}!V^W$VyXP323hs8<$2G-GgxTO zor5QF0%|lteloRIBM@9ws}Y1AB`cE!`n9zu2s;#HF>+;!WJ}1-a66Q)Jm=JIfxwo- zu6WzDPybB&GIlXA!S$&No^Epk#mt2Roi}5@-`wUQkUSAuNgBypwL97{QPy6r$FXSX zSfnS&JwkWfWAKmPbtg?Ge2BTtBmalm3~J+|yJ&GLdMQ`#XR_n>ZXI+O+vuMIYmT|7 zJD`;)Fb{wype>-i=*A@Z1kp0DzzU@q@v^7kd@;m8q$r*HvUkvu(P3L5CccB~LIm1#KM;)YNnnYv-$}p_>on zkxszoXUdUNkLDKqD;{o~vZRS5@Gd_Z;Xi3N`* z?OeQzy>(*po2^tl`Lv*{0N~X*p)<1=_6K2i!zG~{%chEMnM~(0G&bhe*O|;tKPiVwTnasg3Fg>xTWI}0N(@bV>NX^a7&oQ-}n8{pR@Meno zV#@fbmok}S1sYQ)urUdfu*He@1Ux=P5f}a$gDaky%uPS62rmQBXAS6e0K5&bJRLdo zd}H*jL`csD6Z$h3sz^y8uK72;K{@zd>4X<4%r{4i3n+IS-SRh1%4E)Z`D#DE+5c>y zoMyuPea|N$DWgmLxWgYunAN*7@t$M39HB4J;x<3_TJy(d;q8S&`=zJ`qs#m9-TmNy zfHK1!eZ0{ir?2ix9#F z0LuXX0K5z!6SxAf67ULO72s9CYQSrNHGs8%*8y(;-UPe_SO-`ScpE@6Y=plFK-L*k z1sS(h@!y629$-6Q2Vf`QeZVdNm92um2e4O(?}z^Z-~iwt;1GcF9Z`G)|JS)O^m@dg zio@wB_Wlut0-1FvSN4pBpsWDugZ1t)iWo&+MwE@c{#Wq8pd#( z=>Cws=+s+uau7=dcY~dMb4RhcJhgFWE@J=tMWz1mW>8V*(a5p~2k)f)lWk3Fw{>7K)n0 zgvABKBt{rxBiQ1IxY!8$$FW3#T?;CmQanFs_Jk?3W@P0T3eGEVWED7JZc^Z^Bq=B! z?*<-lN-L=_<(f)Ng*nmj7w0?_Xeu8oB~*2-u*~zBI?-<~ROwr>nF}#6xM5`IGiwf} zxI(lt#dQs1>#Gc}RrC13EgK_42g-s8;fC8;(?GE z(+5nSP+H_NeP7oLQgC>napCleE)~qH>8!&#)?%-4$w_P-+noH6+%lOFADdN_I{zH1=4WreKLg~YAbU3aC4<4>+v-+1R|*N~rF zL$16FYH_vJ5XFrrIo(h* zA+C-r#GB4uJ1XTUYm6qGMu=KYm81pk){v``e=U-z%_f^+Giwb=l{NjvAaYvP9aXV` zFP2laKPqeM?G1&vsOpn4WRcH7L zK;{3i+W07}HZy&}kes%bD>eC!%clYMMy!G1!D!y4fuT2$a zo~YpQhoiVNFHe-pVk^ZeL0Pw`1QV?UR?4}$V`G6I%qs+B&x=Qz=)^3%JaTBGsy#qk zCGpq1d3Jxbl-(?p!aa*x1yxC!TS=ngKefX1uEC8BcEXtxreDmH%uembuQ;ZOu49Pq zuJG$;ecfLPF7K84>kW0h$-Bi{e z`?7J^$D53)^}RWFdA_4|fn}evAu3ytn66}~&A*{iw$teRo$S6VfTXaUt2TBUqVhdc z_;&Ky+yvB{PT;0skFyZFx_psgISH&?UK{fRf8tB#rLp{XBkyU2$lYgsimIAtdy{xc zvlca1C|PE07W+*SsgAO#VM|_hEm?yS6HS7?vW zkdP4YM~1k8eS3RFghm8Mg!D-49vc&?1*$+=Y;Uh{V|Yk-FhKbSeBZdk)a{+;bF#rxWpdD zfZ*V`#DGXz`5KKe#<(8A!A4{Em}$L+#wPSKmomzf5%{$#G?W96lVfx^qvDCdsYdcftB{{=qd8><=<}eKv>zcz?KD{#Ysc3 zApm@P04-rH>DW2WFDxr6%~LivI6roAO~kCZp9s;&%eubv(P4!7BT0zHyZY)+@``6Z zIhs%!FqI*?+jf8advx4M@Te|P0HWVliL1N@q^DwAe(c1Yve=1sI1??x zDKGuGMt*mM?us;iJc