From 4f81a57b2454d78285ea8e4e4bdb88bd0379e49e Mon Sep 17 00:00:00 2001 From: jianjun Date: Mon, 11 Apr 2022 14:14:07 +0800 Subject: [PATCH] =?UTF-8?q?easypoi=E5=92=8CeasyExcel=E5=AF=BC=E5=87=BA=20?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=A0=B7=E5=BC=8F=E5=9F=BA=E6=9C=AC=E7=BB=9F?= =?UTF-8?q?=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet-commons-extapp-auth/pom.xml | 2 +- epmet-commons/epmet-commons-tools/pom.xml | 2 +- .../epmet/commons/tools/utils/ExcelUtils.java | 59 +++-------- .../excel/EasyPoiExcelExportStylerImpl.java | 93 ++++++++++++++++++ .../{ => poi}/excel/ExportMultiView.java | 2 +- .../utils/poi/excel/FreezeAndFilter.java | 46 +++++++++ .../datastats/impl/DataStatsServiceImpl.java | 2 +- .../IcFollowUpRecordController.java | 3 +- .../com/epmet/controller/IcNatController.java | 3 +- .../controller/IcResiUserController.java | 1 - .../IcTripReportRecordController.java | 3 +- .../epmet/controller/IcVaccineController.java | 3 +- .../impl/PatrolRoutineWorkServiceImpl.java | 3 +- .../ic_resi_info_cid_for_easy_excel.xlsx | Bin 25172 -> 25245 bytes 14 files changed, 165 insertions(+), 57 deletions(-) create mode 100644 epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/EasyPoiExcelExportStylerImpl.java rename epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/{ => poi}/excel/ExportMultiView.java (91%) create mode 100644 epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/FreezeAndFilter.java diff --git a/epmet-commons/epmet-commons-extapp-auth/pom.xml b/epmet-commons/epmet-commons-extapp-auth/pom.xml index 8ff0d46ada..bf2e9a71c7 100644 --- a/epmet-commons/epmet-commons-extapp-auth/pom.xml +++ b/epmet-commons/epmet-commons-extapp-auth/pom.xml @@ -18,7 +18,7 @@ 1.3.3 2.6 4.6.1 - 4.4.0 + 4.3.0 2.9.9 1.2.79 2.8.6 diff --git a/epmet-commons/epmet-commons-tools/pom.xml b/epmet-commons/epmet-commons-tools/pom.xml index e516c5fba7..867fcf47c7 100644 --- a/epmet-commons/epmet-commons-tools/pom.xml +++ b/epmet-commons/epmet-commons-tools/pom.xml @@ -18,7 +18,7 @@ 1.3.3 2.6 4.6.1 - 4.4.0 + 4.3.0 2.9.9 1.2.79 2.8.6 diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/ExcelUtils.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/ExcelUtils.java index 9bc34d0a39..d75b510bec 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/ExcelUtils.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/ExcelUtils.java @@ -11,12 +11,13 @@ package com.epmet.commons.tools.utils; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; -import com.epmet.commons.tools.utils.excel.ExportMultiView; +import com.epmet.commons.tools.utils.poi.excel.EasyPoiExcelExportStylerImpl; +import com.epmet.commons.tools.utils.poi.excel.ExportMultiView; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.BeanUtils; -import org.springframework.util.CollectionUtils; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; @@ -30,6 +31,7 @@ import java.util.*; * @author Mark sunlightcs@gmail.com * @since 1.0.0 */ +@Slf4j public class ExcelUtils { /** @@ -47,15 +49,16 @@ public class ExcelUtils { fileName = DateUtils.format(new Date()); } - Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), pojoClass, list); + ExportParams exportParams = new ExportParams(); + //设置导出的样式 + exportParams.setStyle(EasyPoiExcelExportStylerImpl.class); + //设置sheet名称 + exportParams.setSheetName("Sheet1"); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list); Sheet sheet1 = workbook.getSheetAt(0); sheet1.setDefaultColumnWidth(50*256); sheet1.setDefaultRowHeight((short)(2*256)); - response.setCharacterEncoding("UTF-8"); - response.setHeader("content-Type", "application/vnd.ms-excel"); - response.setHeader("Content-Disposition", - "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xls"); - ServletOutputStream out = response.getOutputStream(); + ServletOutputStream out = ExcelUtils.getOutputStreamForExcel(fileName,response); workbook.write(out); out.flush(); out.close(); @@ -81,45 +84,7 @@ public class ExcelUtils { exportExcel(response, fileName, targetList, targetClass); } - public static void exportExcelToTargetDisposeAll(HttpServletResponse response, String fileName, Collection sourceList, - Class targetClass) throws Exception { - if (!CollectionUtils.isEmpty(sourceList)){ - List targetList = new ArrayList<>(sourceList.size()); - for(Object source : sourceList){ - Object target = targetClass.newInstance(); - BeanUtils.copyProperties(source, target); - targetList.add(target); - } - exportExcelDispose(response, fileName, targetList, targetClass); - }else { - exportExcelDispose(response, fileName, new ArrayList<>(), targetClass); - } - - - } - - public static void exportExcelDispose(HttpServletResponse response, String fileName, Collection list, - Class pojoClass) throws IOException { - if(StringUtils.isBlank(fileName)){ - //当前日期 - fileName = DateUtils.format(new Date()); - } - ExportParams params = new ExportParams(fileName,fileName); - Workbook workbook = ExcelExportUtil.exportExcel(params, pojoClass, list); - Sheet sheet1 = workbook.getSheetAt(0); - sheet1.setDefaultColumnWidth(50*256); - sheet1.setDefaultRowHeight((short)(2*256)); - response.setCharacterEncoding("UTF-8"); - response.setHeader("content-Type", "application/vnd.ms-excel"); - fileName = fileName + ".xls"; - response.setHeader("Content-Disposition", - "attachment;filename=" +fileName); - ServletOutputStream out = response.getOutputStream(); - workbook.write(out); - out.flush(); - out.close(); - } - public static ServletOutputStream getOutputStreamForExcel(String fileName, HttpServletResponse response) throws Exception { + public static ServletOutputStream getOutputStreamForExcel(String fileName, HttpServletResponse response) throws IOException { fileName = URLEncoder.encode(fileName, "UTF-8"); if (!fileName.endsWith(".xls") ||!fileName.endsWith(".xlsx")){ fileName = fileName + ".xlsx"; diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/EasyPoiExcelExportStylerImpl.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/EasyPoiExcelExportStylerImpl.java new file mode 100644 index 0000000000..b1a5606c2e --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/EasyPoiExcelExportStylerImpl.java @@ -0,0 +1,93 @@ +package com.epmet.commons.tools.utils.poi.excel; + + +import cn.afterturn.easypoi.excel.export.styler.AbstractExcelExportStyler; +import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler; +import org.apache.poi.ss.usermodel.*; + + +/** + * desc:easypoi自定义表头颜色 + * + * @author: LiuJanJun + * @date: 2022/4/8 4:39 下午 + * @version: 1.0 + */ +public class EasyPoiExcelExportStylerImpl extends AbstractExcelExportStyler + implements IExcelExportStyler { + public EasyPoiExcelExportStylerImpl(Workbook workbook) { + super.createStyles(workbook); + } + + @Override + public CellStyle getTitleStyle(short color) { + CellStyle titleStyle = workbook.createCellStyle(); + Font font = this.workbook.createFont(); + // 字体加粗 + font.setBold(true); + font.setFontHeightInPoints((short) 12); + titleStyle.setFont(font); + //居中 + titleStyle.setAlignment(HorizontalAlignment.CENTER); + //垂直居中 + titleStyle.setVerticalAlignment(VerticalAlignment.CENTER); + //设置颜色 + titleStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex()); + titleStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + titleStyle.setBorderRight(BorderStyle.THIN); + titleStyle.setBorderLeft(BorderStyle.THIN); + titleStyle.setBorderBottom(BorderStyle.THIN); + titleStyle.setBorderTop(BorderStyle.THIN); + titleStyle.setWrapText(true); + return titleStyle; + } + + @Override + public CellStyle getHeaderStyle(short color) { + CellStyle titleStyle = workbook.createCellStyle(); + Font font = workbook.createFont(); + font.setFontHeightInPoints((short) 12); + titleStyle.setFont(font); + titleStyle.setAlignment(HorizontalAlignment.CENTER); + titleStyle.setVerticalAlignment(VerticalAlignment.CENTER); + return null; + } + + /** + * desc:隔行样式 + * @param workbook + * @param isWarp + * @return + */ + @Override + public CellStyle stringNoneStyle(Workbook workbook, boolean isWarp) { + CellStyle style = workbook.createCellStyle(); + //style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setDataFormat(STRING_FORMAT); + if (isWarp) { + style.setWrapText(true); + } + + return style; + } + + /** + * desc:隔行样式 + * @param workbook + * @param isWarp + * @return + */ + @Override + public CellStyle stringSeptailStyle(Workbook workbook, boolean isWarp) { + CellStyle style = workbook.createCellStyle(); + //style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setDataFormat(STRING_FORMAT); + if (isWarp) { + style.setWrapText(true); + } + return style; + } + +} diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/excel/ExportMultiView.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/ExportMultiView.java similarity index 91% rename from epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/excel/ExportMultiView.java rename to epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/ExportMultiView.java index ff69b2c4b0..6169e83075 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/excel/ExportMultiView.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/ExportMultiView.java @@ -1,4 +1,4 @@ -package com.epmet.commons.tools.utils.excel; +package com.epmet.commons.tools.utils.poi.excel; import cn.afterturn.easypoi.excel.entity.ExportParams; import lombok.AllArgsConstructor; diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/FreezeAndFilter.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/FreezeAndFilter.java new file mode 100644 index 0000000000..6b5d5e55c5 --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/poi/excel/FreezeAndFilter.java @@ -0,0 +1,46 @@ +package com.epmet.commons.tools.utils.poi.excel; + +/** + * desc:easyExcel 冻结标题 + * + * @author: LiuJanJun + * @date: 2022/4/11 10:27 上午 + * @version: 1.0 + */ + +import com.alibaba.excel.write.handler.SheetWriteHandler; +import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; +import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.util.CellRangeAddress; + + +public class FreezeAndFilter implements SheetWriteHandler { + + public int colSplit = 0, rowSplit = 1, leftmostColumn = 0, topRow = 1; + public String autoFilterRange = "1:1"; + private boolean isFilter; + + public FreezeAndFilter() { + + } + public FreezeAndFilter(boolean isFilter) { + this.isFilter = isFilter; + } + + @Override + public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { + + } + + @Override + public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { + Sheet sheet = writeSheetHolder.getSheet(); + sheet.createFreezePane(colSplit, rowSplit, leftmostColumn, topRow); + //不让他筛选 + if (isFilter){ + sheet.setAutoFilter(CellRangeAddress.valueOf(autoFilterRange)); + } + } +} + diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java index e55db49a65..cd77750bee 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java @@ -11,7 +11,7 @@ import com.epmet.commons.tools.feign.ResultDataResolver; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.DateUtils; import com.epmet.commons.tools.utils.ExcelUtils; -import com.epmet.commons.tools.utils.excel.ExportMultiView; +import com.epmet.commons.tools.utils.poi.excel.ExportMultiView; import com.epmet.dataaggre.constant.DataSourceConstant; import com.epmet.dataaggre.constant.OrgConstant; import com.epmet.dataaggre.dao.datastats.DataStatsDao; diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcFollowUpRecordController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcFollowUpRecordController.java index 7b0b375207..b3ed2ab6d8 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcFollowUpRecordController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcFollowUpRecordController.java @@ -12,6 +12,7 @@ import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.DateUtils; import com.epmet.commons.tools.utils.ExcelUtils; import com.epmet.commons.tools.utils.Result; +import com.epmet.commons.tools.utils.poi.excel.FreezeAndFilter; import com.epmet.commons.tools.validator.AssertUtils; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.commons.tools.validator.group.DefaultGroup; @@ -115,7 +116,7 @@ public class IcFollowUpRecordController { String today= DateUtils.format(new Date(),DateUtils.DATE_PATTERN_MMDD); String fileName = formDTO.getName().concat("随访记录").concat(today).concat(".xlsx"); excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel(fileName, response), IcFollowUpRecordDTO.class).build(); - WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build(); + WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").registerWriteHandler(new FreezeAndFilter()).build(); PageData data = null; do { data = icFollowUpRecordService.page(formDTO); diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcNatController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcNatController.java index c03c2b50db..17502c65e0 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcNatController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcNatController.java @@ -15,6 +15,7 @@ import com.epmet.commons.tools.feign.ResultDataResolver; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.*; +import com.epmet.commons.tools.utils.poi.excel.FreezeAndFilter; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.constants.ImportTaskConstants; import com.epmet.dto.IcNatDTO; @@ -288,7 +289,7 @@ public class IcNatController implements ResultDataResolver { excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel(fileName, response), NatListCommonExcelResultDTO.class).build(); } - WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build(); + WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").registerWriteHandler(new FreezeAndFilter()).build(); PageData data = null; do { data = icNucleinService.natList(formDTO); diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java index fbc82de26d..1f0a127b5f 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java @@ -82,7 +82,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.*; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.stream.Collectors; diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcTripReportRecordController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcTripReportRecordController.java index f6b0df98cc..9bae2a9826 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcTripReportRecordController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcTripReportRecordController.java @@ -16,6 +16,7 @@ import com.epmet.commons.tools.feign.ResultDataResolver; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.*; +import com.epmet.commons.tools.utils.poi.excel.FreezeAndFilter; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.constant.IcResiUserConstant; import com.epmet.constants.ImportTaskConstants; @@ -203,7 +204,7 @@ public class IcTripReportRecordController implements ResultDataResolver { String today= DateUtils.format(new Date(),DateUtils.DATE_PATTERN_MMDD); String fileName = "行程上报信息".concat(today); excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel(fileName, response), IcTripReportRecordDTO.class).build(); - WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build(); + WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").registerWriteHandler(new FreezeAndFilter()).build(); PageData data = null; do { data = icTripReportRecordService.page(formDTO); diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcVaccineController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcVaccineController.java index 2f02950d92..297c30ae15 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcVaccineController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcVaccineController.java @@ -15,6 +15,7 @@ import com.epmet.commons.tools.feign.ResultDataResolver; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.*; +import com.epmet.commons.tools.utils.poi.excel.FreezeAndFilter; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.constants.ImportTaskConstants; import com.epmet.dto.form.ImportTaskCommonFormDTO; @@ -199,7 +200,7 @@ public class IcVaccineController implements ResultDataResolver { excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel(fileName, response), IcVaccineListCommonExcelResultDTO.class).build(); } - WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build(); + WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").registerWriteHandler(new FreezeAndFilter()).build(); PageData data = null; do { data = icVaccineService.icVaccineList(formDTO); diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/PatrolRoutineWorkServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/PatrolRoutineWorkServiceImpl.java index 78d860fe7e..c3ba03acb8 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/PatrolRoutineWorkServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/PatrolRoutineWorkServiceImpl.java @@ -42,6 +42,7 @@ import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.ExcelUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.YuShanSysApiService; +import com.epmet.commons.tools.utils.poi.excel.FreezeAndFilter; import com.epmet.constant.SystemMessageType; import com.epmet.dao.PatrolRoutineWorkDao; import com.epmet.dao.StatsStaffPatrolRecordDailyDao; @@ -224,7 +225,7 @@ public class PatrolRoutineWorkServiceImpl extends BaseServiceImpl64HWngOs$CboZe_y6Zjq{_eW> zzU%$|@p+!vdrz!cduGk7J=FuB)eB#Rfq*RdX7}|(Sc;{{m2Cd1Q=7vI- zb)6;?Wp-RzqjNu8jSbc^c4bobaWD6C9oa0ahZ>(rsC_&>Z>O^}DTwj}z3orO#4X2# zeuAb)T64nAFrjpOh+$d<9fj|FBk&*>O|e)Z&%Digpfw4-PUWJ!y`f3yZC5rNr*;e$gK}nriMJqtQq3LPmw#|Q{&;cZa&~p+dw=8p z-Z#KQjA9w-rg2t)X(# zn_$8>7l_KU6=tL4h|Cm z4(=rY3%_%$~^E3s!ZDyLsS0A9=D%-#YpZu3g}* z)`%AeDu|Pz%tG#nGxJ9(XC>1;_2f;bWKuu|KH2vyU9|M8PFbsfS4ycDZ)5seG>;SZ z@4s#pI@op<$|7wN)z?8eEsl`(o6HqwSgPb1rZGSx{hInY*6^ zx2`Rc76Ps0NfhN|B*U)g+uze`IUMWLTNNb$W4+j|D^1 zd`3?1wHsH_Cwl4pvpGx~MH&VDfpVW<9SKvh&$jb4%li*+^|Cq|pC2nn#++^gFH?$q zKLHekW#ywr*&U2+D-LHVqy1$rSJ@mmzJn>}?s1Z-m2K1aJmiwEz}vN^bH~{J=ciud z%>D`~z=ZtO8BbP$=seUao8znoVl6_tL-f4weAiy;cYpgJ|0vGcpCdHuAhv?z^Gjhl zCwl&7dvcJ+$ePpFCvn7o>-UX;%Y}g94j`OU6&Lz$q<`p`@)-EK>GNf&anC8^nMJj+ zw#}g6#BzRdB_NvytHHaACvbk>E;&|p6NG@g<&yES;>YnDi6`%@(Fw(DiTt@Ns<9Qd ziPV6kQ5&NyEx3l#)tbXrXJ0f`N_l@u&WW|zOHsM1=_mzSa-ZN+x|}Bk&ex0k0l?6i zSmvVYi)H91)0BB&LYBK^V~(ht-276!>ameDg*+vHq7@^<_)#l6=MfR?f4O(NTBfzk z%I8y!nLU|$+RsL5U3 z8}S2<<77EH=Ov`Ny;Zc&XS$?%ZbGB#@g2MV8Q%G80k zjdrdbeB?L$QkU%mX{GcwBYS)Thkl6q@;n{;xp?Ug+C||VLm8!Y)*VgV;URxISub4s zOui}ko*6y|mirfWWB4D(o}XTA^W0-{K{hYk!BHm~*-m?>2#rNp?rA*gi$qvlwYdpz z1@MciqmJZKA43&T49nqw=ea+wS0Bwu(uJaNnMzfN(UYoF=5d)cGHY1XHw3KJaxoW@ z0)u#*v_MF|3^P5L)MplxXoG6Ti^yK!%TD;yxGQ`-N=6HF)KN@8%26asT=$HU)(p__ zJbZBB_b{LZ%i#~+>5P0cG~tDYQ#WEZTMdXyQxKgE#50EP%I!}BIQ2}a=4d4p4n*@Pk81f)N(~e(6^^W&SC<;&760Q#g9zE(IF3 zO?Z5%!P|zvjWJs^LW;#KrALtSnx*(sBVG75E>+2#njB&aGUA&S+@{my_;qS9XCv21 zxWRH6LE-PBxs3UN@UlL)X`%{}ZXK&82TVQidMP*9;YSywd5BNsOyS)b54c7QFTG7U zpZ~KA1M6hT7%lEt|?&Xv8_;pTQEJo=e0u$cz5X7khNuW>>_A{``I0nAN4z zq{lTw!`66e+VDfJcd69=nDe#+@X{b+kDhp|@Go4@Bx+ksVa^1!>ryaJ#a0y>%?Z^bXT0(( z-q)EjLmOh_4CAp%0#WvT^f^6zn~54Ie4Ah`5^IoMAL;oAx{T94HHs*kAJzKOd8w$& zO%>Ewb_Oi8mc3uIRZ;5L0I;Aq9=np&YWOAPsz z9qZ|~yNoW>aTo7dj4jLwlWc6^oZEQMWNbhf8>X??!oZFCR`}(egbmb-Ftx1oYCI6C zy(O(GEdj;flvbsbfKIJRS6oRzS&pPDD(I(Lio3xBsn=d+6_(}Yvt|0$k{|tucq|7% z(%!^1{qcd}WL(gAYI#gyn*nrbRbr36_;b82g7TKJ7V`n?DD$kQt2>hPf(j%6BR#MJ z86(}_1qmbF*9GQ${=nS(KQQM>0dwvYFz1^6HagX`T=<<3^kQ4kD;U;9LX;kfFcGHo z$b*RprAG}+L@7Of!UWc56X(DqS$7ZNs?HK#BU-yt(AqD40R!K9Bff~_y*WZZ znp&$h1}+05^%hSYNKKu2E%OC`EQJ4OtGmp()S+^E$L>QtR%OHbw7`F*^qhf>_tRI@ zdd`$B9Oqlo6$=v3QrJ!TU!qeVqhxo`5_&MIH(Q9)s`u>g)7#3C{J8e)w_;M<$bt~2 zJVF~JRkRI||E0-ai2p_4Um*U4^k4j|u~MC@P~ z=kS7oT3x}96B$GCIQcd8UK=43U7H|6SiyCQmUa>6H5HX;lgKW>so)6)Wo3RAqfI>eti?6&mW-)Mc+>UZYT< zy?#xzP~m6&nwG2}YWCMh9({64EG&9?W%@4O}@=w3xeg|@nCC$W#92& zdmRO&3gpGocpGD`3Jm)`WMq@Eu>E0=hv-`3AeMm>|wIf-M)kUF%Z0vkh6PyFO9 zS66UoL?g`sy~ri%U=v;HvjV((0l3d=VV`q0@7&E=2Zz&YwtX^<)6XOEFFlGXL=3 zIYiu%k@a1FsFIi)=HCD^-?6XYU$X0>Wdc!zj-lioGBG+o1d zt71~^stxB_l0@D4eCFF{*mAx$^Mb{A6Z_~yhG^Og?EC>7_j@0=YKrd)qQR9^z40f!q|xx_JeA{%~og41G4Nb>PI6@%!&tD zh0{wc$!EoCmDyv^9qFT6`CWuyqiGFWsx*%7yh~;7+L-C%V*b%HLhS<%Cp+>ak>FfB zgiC@E(01As8fDmXZs41*_nHV&bx4SZ)0yv?2PgH!Y$hFjg?q`7sIz66C$QQ4xEpAzgI$1{4n8Z3nLS=Ui`tZ4aGHL`gm;Ef$HB z8$xuydC0OeZx`5JMnE2Q_xuIHU^&Hfk!3}oL$rp$rp&AVOGK!`(b1 z4#7mZsC*)5lgyMowYUw@b1BQT8Z?3)z*BYTJ{u(M-ytSmH{t@kB>~G@tLO+0ZT@l7 zTv*8%?(3UNXAyT4a5tpS%F&!-biGHNm~c-tY|jdS-`u6-xyCh8@4h zkO?YHVsvX-(E4;H4zdpRaw2y-4*h)m9nDn&7#&GIq<@)T$!O1C`V;pFAmR7(ajMz8 zJ*_lr`yexV32M2*Z|ZB;ogQrFabyDy@@&CuM(&@YUMKxJ%bMWOFTQ#*Eqh1QcX=0A znq6#5LR4Y7x!zOL{r>d^M_#vPqQ`H0p}kCbhEOkBllvohW})O@f$v4E&V)20^a|2C z({jK1$mC+alR_m;*sZU;_(LB|6h)DcUd=?ZNHG;3O1&YWi7hjqrh496;8lJHe02ZA zGJ6R3MvzxK4#g*BB_`LVw$?x?GXr-6O=X{Xkw@x_#is*JRd$OXUh|2)Zj6xy30d?; zNcLU&5xC?}6Ic;xxWPi);t6#m8B((RWZ)0fCgq7FFGihQ$-T+@>ljhUnEu>n`hdQQ zWxTdfyWprj?hWu?{j>7Tj*pko5#Xwq>y~&^z1k&9T)uX- zMCLHR!kN$xhy3Pm{GjkJ?lUY9B9=+g(GW$#5-c(rz=QeZDQA=UXbLV;`S)yvp}eMUqwYrk{~HJ6Az*NtAc`CFl_xa+r9w zNB6R*-alnI!kVSmggP$<^$=LPni(Jy;>xU!xJQLfSAzzZ`aH-SFw*t zxIRAR1%IHf+UuQ0e9rOdQ!D;TPgu^Z_>YZF@U$Q^@sB4f(F-gz6@B2i+Bq>e@(68< z$R=`*kSVa|qad^Lm@e`soHEF9#ayM0MXCN*C0~3pxAvx}un;G=KcioRh_C}48w7dQ z^EgP^ZihiLVtdK&iEIbgNGn6}8x~EBXrBx2;>d$S*e&O9ojx5xaI`ha-@r$sn7&cy zOtGq!`~q%fUq--a2>Af$p?i5O>sKB)m{i(l4pR{iF$k!!(EKudLU7Q0l}9*e97#gw zMeUHFEk7Qn32t7EJfc$|l#;vg(Ywc;aJ*gKhrRkkl*<2S^3Kh7BXiH6atk!+FR?5Kc65YHsB(thIN)4_p`trZhxL~buv*c$ zLQ4Bd@mPbI^+f3M6qud(UV8c#(e|-0yclmXVV)5R(N_p311d35XJ4%(hV?4+NsJ{T z&|8cdX$Lu?C95}VxgcxdnG;Md(&dRO{Y+5{O{6ct)s*@AHfmY?hdo6X z9?jxDL47@(j9X^9Uolk)jFCc?095hIU@B>HcNGe2FJD!W+UI~%PTPYj z%vW{q!}o%hO7Qr7<*C-oCEufs*r(&$zY`pj@~V9GJWvr6i=d`z32Mcau+knzuxubo92=!EDP zE7@$|+^a)_p_P%*inC%)%8_Hq)1-)^5@aXQRE4Q-w{vYdyf2)MZz=gx^!-;}5WT$q znQhq~`LwFGGX`vbWxW3w(0tL=9%D(ry@4<&fzaWbEWzzl{dgeR{^j}X6(jK62>}!Z z+;70Uy!(WUp%Yf60gBm(qi!FK5qt|uFRJC;^@qBo3Q&!vGUnv=Id?9%~M$smAJMwZRXn@H+o=54F zkmj>FY88@W$*(2(HGKHyx=diw7D#`-3QVA#M*gU%NStACi-Syym{K{Ee`y9FXLyYC zULZ+>WzN;TgT+!N%Pjp$61MCyV&dc~sl3{Uk3-b%Tb?Qi$HWPDvXhO46xj`H zzQ-od92R1#UfStXQzN zy;oT94l%*+4Hv3ydI56_@_{?`=Cy_@UW$dgMZ~XlJ}oCpym!ATOcxQk@3wPANreS( zBgzw>pF}TiP1k6zja;!^jX+0vI%lgLve_p4MZg&^F_oj!*e<6{JTda)7Umr$ozC+7 zyff)AVe;oOu-2Ff`}k&IBeL+=YtcckE@5HrK_vs-&qA1GUht@ zcif}!fSq#8W`Ad8GVO(j(8FPeIycJTPU;v%KF>kisG4U-#UV;nj@%s zzO~)2yXSP%ERP9Ja`#xNU13~3_8&VMdF({3{Z>yX!=tupN6oP4~gQVR%d)!=8h^U`H#YzApIiXzEx2;_uQ z(M(y7bGR4UN|)JZv_uRoX({_x5&6|9FntaEl^Qs%VlOU4G zP`qk$>g#bLZSqmOn=|IT(vQggxuLEv`U%Sw_p!He=`HYf3^L_b5ErLZ%G$g??AY!{ z2((jVF+`j?iLm$U3oBnz;%>&wACG5YipL};7$&%j6O{}_`T6H@(|bDz%e4)pJqs&= zJ|9mdRCKCHlgfriOVYb;^qT9_lGluCqa0OU&H@^cpCG< zuR)59A^(}tN}7m}{;!E4tb6`0csME;zd({qUZbAFx(e1&kXSP^$h8Rw0nGq{YRZqm zX#kNhl|vv>f`pqg{O4!6+LQp^1k!IRg1{mKK{Vrs*MJC{F_8Yh{rTT#NQ3y9iNWJT z8qKK5{(H;@2S@a`1h)R~b-YG~;1Uu*(9Jm!#Bl#vHJIfmgjo_uhB*tuFW8_CRZeeb2IJbl&mjRJS@e21z#0Z2GQiPh-4_O!^vUB>4}eU#P2P zk6Qe`emX;o0*!?W6%f6xepu5HwUghe3>hqDn_D? zIUHCBH|BV?tCPeeytZdFY@hVWzt6$6s2JEO2 zuI)xxg_x7?8Rwm}6&&A*S!jw0~Ne2U= zbg(cm7~nd107yci?>+v|N#L*Ctu;D@GzVh)p(Phea{P?8Z``YBO6qAYg8e5BgBhDW zQREcQLnn`G-unkye|ywo8@UAG>rev3ZB5gZPq&AYvZRBFsoKr*J7;O@G;Dr#0lQL$YpEcZcoHxsq6Aus zE(&8HIt+{qH<*Kq7{tNmVgDsr-_SW<5YP8l*&}w+uWEZ(H#4ST*5TVM9}vAGc^FMq zjnW()xaHYTpHkcrcnT%3UHeJ#r={xorq!GjJ=Th@--w{N|t|5O$` z?wi#fTb}GEzGGjsSzrDKeTQlR-cN-y3gl1nRbhQ60+IQf6 z)GZioKQvDsrx(b4zO%pTtn#}5`|#mWq?#_>v$_=<*miSkjKnvp@DkFW;F1rj zH2fiN+$f|+`+KHYDj*QZryw@Jc1@Y>)1|z-&#jVOx{%pTc;=n*_@kdX@UHP9(4;Lx z@nUhpC1ZSdIrH~>I;w|a{>Vq=us!I|X_wB>GCLZm1`U)o^KE!Yn8NDfe$n}%M?m8|NdcUqrt@;iBAgq--81G`8b{b0?wi^cHxgGz%_7xNN|Gi_-4daofq5C`R;)wJ*-UVaNg=VeJ8=cX_;LK*)OKV%h+5IidUE7 zL_+G;@n)gG+z%>2%Ly$}!~}ig(Xtu!a|**m2CW9@?ET7cFJ#*uw!64)I8Mf5KI{-0 zrWevLKjg~UNMg%Ix(gQ_iDDHoTA!F*PrUMZe((Ok$ zKsnJ%Nsj(`x?UeBMIs|1f3&;BNNS)@7;!_DU;vKdOn(VgprD6>1N)oIvd4LtU zvVJ_XkjhXJSEwp=5s7WRhE$BEtsIjSh;O>&lRB!Nyo3U)H6zk$Nsk73U2Y28lsc83 zyfh!lnU@t7uR0G>DV=%MODs}TN@k(vF)NT&%um>nmg1ErDkY)T`dnZetr?S0#-Yw5 zTQ(>MO_k+Y8?LJvl96%*DRx&p&XF`Xzjp^f>uO?DN5h&vzx>Epcvgi*HC zC{=hi4TVUF>Sbx%&Xy?gNJZ+wszT6q`rHWgLA@m#*{G22H zR_#vm`9EPNJU)}h^>eM=3{#&)^AXy~JzV9G&hr$&vMX3fr#Y2`fnVsiQe6M&^g;tw zgtH_T`Hv;yt##P)Oo{&@)hpKib6+q3Ylr3qn18&aYnQ$ojr4HqtIs5Djv5bv%}dgFcd`%AT}OaU~yq}mmx0E%8v?J`jS$3^MnF6^_gS!s=0wVoS+1JFr9UPbxH3GCVXof!j53l&y1BYqE;DCR8j zh5?7D=EjuBa02*{1o2qJb0tc8H~|94ckywB;A3m3^IV8Hn?mqTgk81c4~YXb)rCE0 zOolIqEwK2!=PPh%r0&NsAu)p2{=I`4$l|8dNK4(mIN{Bl%CRcIkgo zzsruW+pCs9qFZH0Qu7v_J`k$uSHJCbUO;^r3!vrC9j%+I-$wlQ zp1oF9x8j)mdqa0Pa(?7`zExeAY)5AJV!eip&&y2#gGQQ$4I6?v_TgW}XK_=h3%-xU zHHTR+XrpYEQ_FfY&#p1DENvhwT3TBtU9SlVK9-KR{=L)Qs0=I}I{yIk1^E5}Gh^Ar zxpx>pOV4$9ALoNVKTBU+c%S-1Fh9$X9yQ)*EpK@Lc|`!1RlPMxv04w5TTde^jD*4hA@BLAbCg$|b9u%-7y_26|;za8Y(^0{VZx?WDFdSGqP z_5GM=%B<~YX$>JB1BVh}9n?w??FwHpM+{zUHZ7!zl)5T)`Y5JDznolGE| zrD^644?(d%k`X=Wr|w0N+$_T1J5>LSzu~ff zX~}fIsDav%CGTTQdl}2*)XMFpmVA>dzh|$t`GF}{M>~R|Ja|o?_DKmudwI@u_9l6f zw4z@{OR~BKPwb^}RQ^F&aW6!B^R20*V*?%t?Twdl5`QIe;*&|gD#Bc-HuA^sKgQT( zOnj}$-cS9ItiSnYtxK(Urodf+$9h3aG8Zv-g@?&p7{>@_CsXbb5em&KY?JQu+SiEe zj@;*p>`t>`N(>?-e5yMwhgDsiFw^H75o5H?x z$Itad$7v}>Q8M<2z{^+@!b_7gN`i?gCGnuD`Snb)pWoU_DVRoNP9%0r-RYPWH;4yw z+gdgKQ~H*Fy4(6si`!rQ&R4(t)d%&wCi-3z1Fwmp*97F%9}(XQ47Dv$TY63+deO^Q z-G9}!SDkrP$g6hz(+hFj7m<6B&nJ0>vfh7vGyEh^6}{6>=q`wTmyF{Ojs?1pH5|eM zhkdeq(?BoppZO~Yk14+7tiQz0XIwh6+NUSX4#!pCuC>d*K;cG>75DgwhkA?vheJIQ z8GykaH2`49McYYrg%tjNG=?GPo+{J&eNk7eB0ga1@v;Q}W3{iW%hid?`pocwtE`o% zit!$7k?{l2MC&Oq?}2(^Eed>}wS5U6zWImrkp_vruu|voI7jRtj1(%i)bcmcLI5k_ z$B5fKV#w1WR19Y6mc33Gmz@L-W4%qTw6nC zbsZMdk>#0vy|&xo`I}fsXkJBDYCG0c32CSK6N51;0siL|9`B$t)4J0R{X6ZB9L2-& zX3#uw+UNXF{5*6af7*;6N5=a_$w>I(F#5D}qRt9F@z);xwj0{o7FBcDhbgQdNq4Q!*c91BBf~sO+FVpC%a#=oiFS7sf z8~oi{A@|tetiF4#xAzwIT@Rb6_v93-y5;_q53=0Tiq@Xeqz1WTz|of-EKG6;AX2 z3`b(%4k6GnAH&$`Qu(51Se>I+l^T=Vl;IM6v6$RaVo!%MK#jn zucoZm0!xRkK8_lertGJ&WhG+ohXnGRP*W`yV`SQEvXP>JeBzm*_;AE^$w@$zgls^+Vg z7w~>$rtH$LoGafBElVct-`@X&J@aAy$!&AW>YayATqvo(9Z>zS5A*gPlIWqU}URjf!-TK$YRzYXkB=*|mlXLlB zjyy|?r;&t7`*HR4@ruTZvJu58wT}GQE*+V;*s5$}ZYy8Su#(OGRN>C$iPeG{@0_a| zmSdt1)VNbB2j)s-^`_=r5>aQC;AakcIFmOkaHa;}-5lJltS{|T$3VJ4ebndkym7-T zgZ1{#2ozpH^GihSxtS>Q)<%?@59+-YDlp&OYH@jk!64hGu~Sb`0yb( zo{ZfFVj}>eNU898BIkWs4{i>_Zowpt1hS&Rb_L3Hwh(N!ja@fvkkh*C0qHjkhvx(` zFQj0)ifah3lZ3QeFbIgjC2fwLB>Jv827RVM3yV_vV5^1se41O4fYF6EE)YH?DqW5r zf~4S%h1u^xMBLHig23mxXtIx=dboD9-MsT=imMn|Dky552fw0tx&fJJWca4DBGU&L zsJYR^$^%^1F1IO6)7EO*?+9P0HLQjtpUw4{)5@BYf?%Y1K@v3Kn5 zhc3mmkgK6U+qH!yVW5#uc%~RbB8Q*k`KAG7X6k!jcXW{*Mi}4l?C*PD(aI^3_%r1@ zYaNm=5Ngs42ndP)99R1!Bkl`YAC{ZDU|-LMhk3MVSd!^t5Zj^>G(;-Mo=0#W*`&vp z2Z(1{fk5cx%s&!bEpNXmkZ%-deL|A=WH42F|8wKJ0H_(mon2THh9i!p!k^d~K|TLo zDE}Oxt^n({A6=cSd7Z3*GsYJ1{#ITD2W`rRZ(;`l5h$&~9ch}~$Eo@x0k^&q6zsj+ zGNen0lrCKOm-BRz3~w}$abA#SQ*O8%G^~4+raV>|r1m#;c_}bB%x)Oi8HpbF^Lr4b z!cJo^E2s~lr=dXnqvT|~p88v+T$fS9L`#Ecn#V0J?{8{o@3KXb5S+sqHF(Jx-7*<} zN_Ha6S7Q@0l91`botV^F5tS)=hFOB(1}!A>llN(03jsV$i$ajU0$k;?(ZrrY5eYnE zGt&Jq>hYeR7*<+|CzC|Ltu`|bn#T@uSpLXT+n`dO3|KSEF@J2BAx!q*)U9Vg0%3r( z79{jNtQO6!JR+p5VB7^A)&3kZCwoPV(rx`?z zCfryof&LU_H!*|Qh|jXW!_vH|PmwLyQ_0!Zy9}U-wuY2j`n5&bAV?`b5-|z!ImlZ% z2EcuOgBuntT*Gy1n-9d%1{J0v%x&!_us%V*kR@$AG%9oSB@EH`(w(5t_*@oY1qiSv zzl*7OV3oeMJc~O_UqnF+d>~6tD!mcQ%yVxz#gymS$JdQ8jS1hR>9yslkifwB$^XR` zJOvXmiE7tc^ZRq=8;+i9zy6lD{OgB2|$v;V_g@G zT)GcgTEs&91JjV(1H%OU9@ zix<1QD!(M$#8RCw7s zkk(`}HTS8fqdH0?I!@IBR(el!x>M9p2~pA3vRGnru3Wx<#T~dE{ZMzWVz8adXbZbs zOoP`zxgwmLfUrAUIjLjMI)XWybqzPz-|^$Rt}V`1s7mO0VrKCoyKQe+7Dk257kw~K zH=?Ckyq2ub&M4QhQ~%5JoeGHEs_Sn1f#RfvlPWz&_Oj3?${udN*Gls;f`ulnQ}VqV zpNT^X=iUsH5ntM@IUc$Pzw}^_LOJadwkERN$vRF1GIkyN3}!L=YGuT1g5c%DA$#=% zx%2S5zw6uPc*8FZlQMIq>c>Vaj|1hq6U~YVZl{_r|LQ4MMRp@DXFvsjR1wdffykdh zWVfT?+h{XZ1H#lg1yo|s^Fg<(&n=1jNaEF~-pIG_^sTb9&i=?~mri%5fqdMbcIoTF zy0TZh_?}Ol*R%@~nJj3AO|eCPD-kB9avzO}`FuT_q9B;Sc;{r25AILfRT1m-I6Zzi z){wiqzjLayN=Kvw$`6E*-AQt0YK?S2MUB6xs<(`PbuNTk3{xce_2WjZ zBnZ;HA9G&pCcq$STvzzQ>+Nv@jS7qBVqXJI5U5ZrUW<<|``!)TF1~#mH(}KEJbnv0 zF&6d`cs_cw764(eiRV-}BYYQU;tocz%Nbeuu#R5=lvx_Ptpjz9`(0N-aGUY?f)!a4 zC{jP&;%MQP77geB{RM(g1CGh)^{7%O03gcoLqIPXMHMX@zQms+7oOE~OZR|NqdpC!T3u53dF~Ou60OtY^z*6D+iGu0v3gOxYoPEbp zfa=mRnFk}WuMKwfQ2>!h{;%&?NBR%hV}aMVLYIa%>(sktO-SyF>26aj9@)QWPS{+h z#ctCu;(2O|E=jo{(Sd%>NWS-KrS(lszox&dobJ!98G-CU*|t$Ce0uh-*)_=7RgEN- zB82ES+_zWkSKB-?G@WwW@K_61*E^jHvEiOY^rt}Q=2-xMmFqwmI;V4>w7E{ z-`iR;MC z5B{O`7Nlag{GMp=B*+&z_uh8sc0QCpq$cJsr`Lkl{1;ln23l%HXLkitV#CG4u$sh% zBuO-(X!{Vdl;}BQI^eV;$6{{jS@-HkKUy)dtX<#2s~w~DAih-e-V#h^J353^!JoAC zR((3`*&=#j;&Rf4TU?R$H-zZTi=H<*WE`FMX`mXz99YeTNigRZ;?S?c0Lq#{NyWb( zzn#H+G(69ul8jAY7LK-9Crz>8jfTNR`xZ?2Oo8;rEg~rUeKCaz(>I)0Uz!HrjRe(h z{e;B`A{vxT9jY*vsCMkr%u^7cP{z1dXsw z1vVgel-T}NKfSv8(4o>+0G(Le>>{_o zEpOBW_>tn^08C=UGTwDCSlqER?Z@QB(k^rP_7{+uQA9<(FF{a{O-%=Qz@lR$5~boO zOFt|joUS~|p^c^SIMjawyz+Kom%8>PD6rEuU%@~+u+3WoO{FICHvsaD%zr*-&>|0A z-^mU6E>FrP5d@)Eo@u8iHz+nFCeYyVAP6oy?7KA(C11lQyz~X`f zjp<1L_mPBw!TwL}e~S&kea6DDM2RL;fd8F