From 47252942301d5e1db0d6402d8e4c45c324bbaab3 Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Sat, 29 Jul 2023 17:59:38 +0800 Subject: [PATCH] =?UTF-8?q?rev:=20rgv=E5=9B=9B=E7=82=B9=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E8=BF=81=E7=A7=BB=E5=88=B0=E5=8C=85=E8=A3=85=E7=BA=BF?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E4=B8=8B=E5=8F=91=E4=BF=A1=E5=8F=B7=E7=BB=99?= =?UTF-8?q?RGV=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/system/rest/UserController.java | 10 +- .../service/impl/MaterialServiceImpl.java | 6 ++ .../wms/ext/acs/rest/AcsToWmsController.java | 2 - .../acs/service/impl/AcsToWmsServiceImpl.java | 55 ++++++---- .../nl/wms/sch/manage/AbstractAcsTask.java | 2 + .../wms/sch/manage/buss/FmjToPackIngTask.java | 97 +---------------- .../nl/wms/sch/manage/buss/ToPackIngTask.java | 100 ++++++++++++++++++ .../org/nl/wms/sch/service/dto/TaskDto.java | 5 + .../java/org/nl/wms/sch/task/AcsTaskDto.java | 4 + .../service/impl/StructivtServiceImpl.java | 3 +- .../src/main/java/org/nl/wms/wms.xls | Bin 430592 -> 406528 bytes 11 files changed, 165 insertions(+), 119 deletions(-) diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/modules/system/rest/UserController.java b/wms/hd/nladmin-system/src/main/java/org/nl/modules/system/rest/UserController.java index 8ced14c..194fb54 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/modules/system/rest/UserController.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/modules/system/rest/UserController.java @@ -16,6 +16,7 @@ package org.nl.modules.system.rest; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ObjectUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; @@ -140,9 +141,12 @@ public class UserController { public ResponseEntity delete(@RequestBody Set ids){ for (Long id : ids) { Integer currentLevel = Collections.min(roleService.findByUsersId(UserInfoUtil.getCurrentUserId()).stream().map(RoleSmallDto::getLevel).collect(Collectors.toList())); - Integer optLevel = Collections.min(roleService.findByUsersId(id).stream().map(RoleSmallDto::getLevel).collect(Collectors.toList())); - if (currentLevel > optLevel) { - throw new BadRequestException("角色权限不足,不能删除:" + userService.findById(id).getUsername()); + List usersId = roleService.findByUsersId(id); + if (ObjectUtil.isNotEmpty(usersId)) { + Integer optLevel = Collections.min(usersId.stream().map(RoleSmallDto::getLevel).collect(Collectors.toList())); + if (currentLevel > optLevel) { + throw new BadRequestException("角色权限不足,不能删除:" + userService.findById(id).getUsername()); + } } } userService.delete(ids); diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/database/service/impl/MaterialServiceImpl.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/database/service/impl/MaterialServiceImpl.java index 1b351e8..807c96a 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/database/service/impl/MaterialServiceImpl.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/database/service/impl/MaterialServiceImpl.java @@ -16,6 +16,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.data.domain.Pageable; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -165,6 +166,11 @@ public class MaterialServiceImpl implements MaterialService { } JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); wo.update(json); + // 查找工单上物料id相同 + WQLObject pdmMgProducetask = WQLObject.getWQLObject("pdm_mg_producetask"); + Map ma = new HashMap<>(); + ma.put("vehicle_type", dto.getVehicle_type()); + pdmMgProducetask.update(ma, "material_id = '" + dto.getMaterial_id() + "'"); } @Override diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java index ab9678d..41f1a15 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java @@ -2,13 +2,11 @@ package org.nl.wms.ext.acs.rest; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.nl.annotation.Log; import org.nl.annotation.rest.AnonymousPostMapping; import org.nl.wms.ext.acs.service.AcsToWmsService; import org.springframework.http.HttpStatus; diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 7281a0e..91d331d 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -89,7 +89,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Override @Transactional public Map receiveTaskFromAcsTrans(Map jsonObject) { - log.debug("ACS的receiveTaskFromAcs请求参数为:" + jsonObject); + log.debug("ACS的receiveTaskFromAcs请求参数为:" + jsonObject); String device_code = (String) jsonObject.get("device_code"); String type = (String) jsonObject.get("type"); String group_id = (String) jsonObject.get("group_id"); @@ -104,6 +104,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); WQLObject structivtTable = WQLObject.getWQLObject("st_ivt_structivt"); + WQLObject groupTab = WQLObject.getWQLObject("st_buss_vehiclegroup"); switch (type) { // 送料入库 @@ -118,10 +119,15 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { if (StrUtil.equals(area_type, AreaEnum.BTHCQ.getCode())) { fmjToPackIngTask.createTask((JSONObject) JSON.toJSON(jsonObject)); // 生成到包装位的任务时,下发托盘类型给RGV - String point_id = pointTable.query("point_code ='" + device_code + "'").uniqueResult(0).getString("point_id"); - String material_id = structivtTable.query("struct_id ='" + point_id + "'").uniqueResult(0).getString("material_id"); + JSONObject jsonObject3 = pointTable.query("point_code ='" + device_code + "'").uniqueResult(0); + // 查找组盘 + JSONObject groupObj = groupTab.query("vehicle_code = '" + jsonObject3.getString("vehicle_code") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(groupObj)) { + throw new BadRequestException("找不到组盘信息,载具号:" + jsonObject3.getString("vehicle_code")); + } + String material_id = groupObj.getString("material_id"); JSONObject materiralObj1 = WQLObject.getWQLObject("md_me_material").query("material_id = '" + material_id + "'").uniqueResult(0); - // 寻找对应的托盘类型 + // 寻找对应的托盘类型 - 托盘类型对应转换 String vehicle_type = vehicleService.getVehicleType(materiralObj1.getString("vehicle_type")); JSONObject jsonObject1 = new JSONObject(); JSONArray array = new JSONArray(); @@ -132,6 +138,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { wmsToAcsServiceImpl.action(array); break; } + // ========================== if (StrUtil.isEmpty(is_full)) { throw new BadRequestException("托盘是否满托不能为空!"); } @@ -148,6 +155,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { && !StrUtil.equals(device_code.substring(0, 4), "BTHC")) { material_id = materialObj.getString("material_id"); } + // 如果是出窑输送线 要从组盘表里面去找物料 if (StrUtil.equals(device_code, "CYSSX101")) { String vehicle_code = jsonObject.get("vehicle_code").toString(); @@ -174,6 +182,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONObject materiralObj = WQLObject.getWQLObject("md_me_material").query("material_id = '" + material_id + "'").uniqueResult(0); Double stewing_time = materiralObj.getDouble("stewing_time"); jsonObject.put("stewing_time", stewing_time); + // 假如是压制下料的几个位置,则要考虑是入输送线 还是入立体库 if (StrUtil.equals(area_type, AreaEnum.YZQY.getCode()) && stewing_time <= 0) { // 1.首先更新所有输送线的点位状态 @@ -204,32 +213,36 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { break; } } + // ========================== // 假如是分拣机械手的下料位置,并且是满托,则去包装线 if (StrUtil.equals("1", is_full) && StrUtil.equals(area_type, AreaEnum.FJQY.getCode())) { + // 起点 String vehicle_code = pointTable.query("point_code ='" + device_code + "'").uniqueResult(0).getString("vehicle_code"); jsonObject.put("vehicle_code", vehicle_code); - + produceInfoByCode = this.getProduceInfoByCode(device_code); + jsonObject.put("vehicle_type", produceInfoByCode.getString("vehicle_type")); toPackIngTask.createTask((JSONObject) JSON.toJSON(jsonObject)); // 生成到包装位的任务时,下发托盘类型给RGV - JSONObject vehicleObj = WQLObject.getWQLObject("md_pb_vehicle").query("vehicle_code='" + vehicle_code + "'", "create_time desc").uniqueResult(0); - if (ObjectUtil.isNotEmpty(vehicleObj)) { - String vehicle_type = vehicleService.getVehicleType(vehicleObj.getString("vehicle_type")); - JSONObject jsonObject1 = new JSONObject(); - JSONArray array = new JSONArray(); - jsonObject1.put("device_code", "RGV2"); - jsonObject1.put("code", "to_container_type"); - jsonObject1.put("value", vehicle_type); - array.add(jsonObject1); - try { - wmsToAcsServiceImpl.action(array); - } catch (Exception e) { - e.printStackTrace(); - } - } +// JSONObject vehicleObj = WQLObject.getWQLObject("md_pb_vehicle").query("vehicle_code='" + vehicle_code + "'", "create_time desc").uniqueResult(0); +// if (ObjectUtil.isNotEmpty(vehicleObj)) { +// String vehicle_type = vehicleService.getVehicleType(vehicleObj.getString("vehicle_type")); +// JSONObject jsonObject1 = new JSONObject(); +// JSONArray array = new JSONArray(); +// jsonObject1.put("device_code", "RGV2"); +// jsonObject1.put("code", "to_container_type"); +// jsonObject1.put("value", vehicle_type); +// array.add(jsonObject1); +// try { +// wmsToAcsServiceImpl.action(array); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } + break; } - + // ========================== // 假如是分拣机械手的下料位置,则需要将点位上的托盘号写入 if (StrUtil.equals(area_type, AreaEnum.FJQY.getCode())) { String vehicle_code = pointTable.query("point_code ='" + device_code + "'").uniqueResult(0).getString("vehicle_code"); diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java index ae9f788..074475d 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java @@ -62,6 +62,8 @@ public abstract class AbstractAcsTask { taskDto.setRoute_plan_code("normal"); taskDto.setStart_device_code(json.getString("start_point_code")); taskDto.setNext_device_code(json.getString("next_point_code")); + taskDto.setStart_device_code2(json.getString("start_point_code2")); + taskDto.setNext_device_code2(json.getString("next_point_code2")); taskDto.setVehicle_code(json.getString("vehicle_code")); arr.add(taskDto); } diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/FmjToPackIngTask.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/FmjToPackIngTask.java index 8b92b97..b1232c3 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/FmjToPackIngTask.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/FmjToPackIngTask.java @@ -37,7 +37,6 @@ import java.util.HashMap; public class FmjToPackIngTask extends AbstractAcsTask { private final String THIS_CLASS = FmjToPackIngTask.class.getName(); - @Override public void updateTaskStatus(JSONObject taskObj, String status) { /** @@ -51,12 +50,6 @@ public class FmjToPackIngTask extends AbstractAcsTask { jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); jsonTask.put("update_time", DateUtil.now()); taskTab.update(jsonTask); - HashMap map = new HashMap(); - map.put("update_optid", UserInfoUtil.getCurrentUserId()); - map.put("update_optname", UserInfoUtil.getNickName()); - map.put("update_time", DateUtil.now()); - map.put("bill_status", "40"); - WQLObject.getWQLObject("ST_IVT_workProcedureIOS").update(map, "task_id='" + jsonTask.getString("task_id") + "'"); } if (TaskStatusEnum.FINISHED.getCode().equals(status)) { @@ -74,41 +67,6 @@ public class FmjToPackIngTask extends AbstractAcsTask { startPointObj.put("vehicle_code", ""); startPointObj.put("update_time", DateUtil.now()); pointTab.update(startPointObj); - ///审核单据 增加库存 改变出入库表的状态 - WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_workProcedureIOS"); - JSONObject mstObj = mstTab.query("task_id='" + task_id + "' and is_delete='0'").uniqueResult(0); - //审核 加库存可和用数量 - StoreIvtServiceImpl ivtService = new StoreIvtServiceImpl(); - mstObj.put("bill_status", "50"); - mstObj.put("confirm_optid", UserInfoUtil.getCurrentUserId()); - mstObj.put("confirm_optname", UserInfoUtil.getNickName()); - mstObj.put("confirm_time", DateUtil.now()); - mstTab.update(mstObj); - - String iostorinv_id = mstObj.getString("iostorinv_id"); - String next_point_code = mstObj.getString("end_point_code"); - String start_point_code = mstObj.getString("start_point_code"); - JSONObject param = new JSONObject(); - param.put("material_id", mstObj.getString("material_id")); - param.put("bill_id", iostorinv_id); - param.put("qty_unit_id", mstObj.getString("qty_unit_id")); - param.put("pcsn", mstObj.getString("pcsn")); - param.put("change_qty", mstObj.getString("qty")); - param.put("vehicle_code", mstObj.getString("vehicle_code")); - param.put("workprocedure_id", mstObj.getString("ivt_workprocedure_id")); - PointServiceImpl pointService = SpringContextHolder.getBean(PointServiceImpl.class); - PointDto nextPointDto = pointService.findByCode(next_point_code); - if (ObjectUtil.isNull(nextPointDto)) { - throw new BadRequestException("未找到可用点位:" + next_point_code); - } - PointDto startPointDto = pointService.findByCode(start_point_code); - if (ObjectUtil.isNull(startPointDto)) { - throw new BadRequestException("未找到可用点位:" + start_point_code); - } - param.put("struct_id", startPointDto.getPoint_id()); - ivtService.addIvtFlow(param, IvtChangeTypeEnum.SUB_IVT); - - //调用mes接口 HashMap map = new HashMap(); map.put("vehicle_code",jsonTask.getString("vehicle_code")); @@ -132,20 +90,11 @@ public class FmjToPackIngTask extends AbstractAcsTask { public String createTask(JSONObject form) { String start_point_code = form.getString("start_point_code"); WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - WQLObject ivt_table = WQLObject.getWQLObject("st_ivt_structivt"); JSONObject start_pointObj = point_table.query("point_code='" + start_point_code + "'").uniqueResult(0); - String struct_id = start_pointObj.getString("point_id"); - JSONObject ivtObj = ivt_table.query("struct_id ='" + struct_id + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(ivtObj)) { - throw new BadRequestException("仓位为'" + start_point_code + "'未找到库存信息!"); - } - String next_point_code = "BZSLW"; - String material_id = ivtObj.getString("material_id"); - String qty = ivtObj.getString("canuse_qty"); - String pcsn = ivtObj.getString("pcsn"); - String vehicle_code = ivtObj.getString("vehicle_code"); - WQLObject taskTable = WQLObject.getWQLObject("SCH_BASE_Task"); + String vehicle_code=start_pointObj.getString("vehicle_code"); + String next_point_code = "BZSLW"; + WQLObject taskTable = WQLObject.getWQLObject("SCH_BASE_Task"); if (StrUtil.isEmpty(start_point_code)) { throw new BadRequestException("起点不能为空!"); @@ -156,48 +105,12 @@ public class FmjToPackIngTask extends AbstractAcsTask { throw new BadRequestException("存在指令号为'" + beforTaskObj.getString("task_code") + "' 未完成!"); } String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; - //创建出库单据 - JSONObject iosObj = new JSONObject(); - String iostorinv_id = IdUtil.getSnowflake(1, 1).nextId() + ""; - iosObj.put("iostorinv_id", iostorinv_id); - iosObj.put("bill_code", CodeUtil.getNewCode("OUT_STORE_CODE")); - iosObj.put("io_type", "1"); - iosObj.put("bill_type", BillTypeEnum.FJCK.getCode()); - iosObj.put("workprocedure_id", WorkProcedureEnum.BZGX.getId()); - iosObj.put("ivt_workprocedure_id", WorkProcedureEnum.FJGX.getId()); - iosObj.put("material_id", material_id); - iosObj.put("vehicle_code", vehicle_code); - iosObj.put("producetask_id", ivtObj.getString("producetask_id")); - iosObj.put("qty", qty); - iosObj.put("qty_unit_id", ivtObj.getString("qty_unit_id")); - //默认是分配状态 - iosObj.put("bill_status", "20"); - iosObj.put("start_point_code", start_point_code); - iosObj.put("end_point_code", next_point_code); - iosObj.put("start_area", start_pointObj.getString("area_type")); - iosObj.put("end_area", "28"); - iosObj.put("create_mode", "01"); - iosObj.put("task_id", task_id); - iosObj.put("pcsn", pcsn); - iosObj.put("create_id", "1"); - iosObj.put("create_name", "管理员"); - iosObj.put("create_time", DateUtil.now()); - WQLObject.getWQLObject("ST_IVT_workProcedureIOS").insert(iosObj); + //加锁 HashMap lock_map = new HashMap(); lock_map.put("lock_type", "01"); WQLObject.getWQLObject("sch_base_point").update(lock_map, "point_code = '" + start_point_code + "'"); - //减少库存可用数量 - StoreIvtServiceImpl ivtService = new StoreIvtServiceImpl(); - JSONObject param = new JSONObject(); - param.put("material_id", material_id); - param.put("bill_id", iostorinv_id); - param.put("qty_unit_id", ivtObj.getString("qty_unit_id")); - param.put("change_qty", qty); - param.put("struct_id", start_pointObj.getString("point_id")); - param.put("vehicle_code", vehicle_code); - param.put("workprocedure_id", WorkProcedureEnum.FJGX.getId()); - ivtService.addIvtFlow(param, IvtChangeTypeEnum.SUB_CAN_USE); + PointService pointService = SpringContextHolder.getBean(PointService.class); PointDto startPoint = pointService.findByCode(start_point_code); diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/ToPackIngTask.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/ToPackIngTask.java index 4a98442..18bfcd1 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/ToPackIngTask.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/buss/ToPackIngTask.java @@ -4,17 +4,27 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.common.utils.UserInfoUtil; import org.nl.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; import org.nl.utils.SpringContextHolder; +import org.nl.wms.WorkProcedureEnum; +import org.nl.wms.common.PointUpdateUtil; +import org.nl.wms.common.StructFindUtil; +import org.nl.wms.database.service.VehicleService; +import org.nl.wms.ext.acs.service.impl.WmsToAcsServiceImpl; import org.nl.wms.ext.acs.service.impl.WmsToJnServiceImpl; import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.AreaEnum; import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.service.PointService; import org.nl.wms.sch.service.dto.PointDto; +import org.nl.wql.WQL; import org.nl.wql.core.bean.WQLObject; import org.springframework.stereotype.Service; @@ -30,6 +40,8 @@ import java.util.HashMap; @Slf4j public class ToPackIngTask extends AbstractAcsTask { private final String THIS_CLASS = ToPackIngTask.class.getName(); + private final VehicleService vehicleService; + private final WmsToAcsServiceImpl wmsToAcsServiceImpl; @Override public void updateTaskStatus(JSONObject taskObj, String status) { @@ -51,6 +63,8 @@ public class ToPackIngTask extends AbstractAcsTask { } if (TaskStatusEnum.FINISHED.getCode().equals(status)) { + String startPointCode2 = jsonTask.getString("start_point_code2"); + String nextPointCode2 = jsonTask.getString("next_point_code2"); // 更新任务状态为完成 jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); jsonTask.put("taskfinish_mode", taskObj.getString("taskfinish_mode")); @@ -65,6 +79,21 @@ public class ToPackIngTask extends AbstractAcsTask { // startPointObj.put("vehicle_code", ""); startPointObj.put("update_time", DateUtil.now()); pointTab.update(startPointObj); + JSONObject startPointCode2Obj = pointTab.query("point_code='" + startPointCode2 + "'").uniqueResult(0); + JSONObject nextPointCode2Obj = pointTab.query("point_code='" + nextPointCode2 + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(startPointCode2Obj)) { + startPointCode2Obj.put("lock_type", "00"); + startPointCode2Obj.put("point_status", "00"); + startPointCode2Obj.put("vehicle_code", ""); + startPointCode2Obj.put("update_time", DateUtil.now()); + pointTab.update(startPointCode2Obj); + } + if (ObjectUtil.isNotEmpty(nextPointCode2Obj)) { + nextPointCode2Obj.put("lock_type", "00"); + nextPointCode2Obj.put("point_status", "00"); + nextPointCode2Obj.put("update_time", DateUtil.now()); + pointTab.update(nextPointCode2Obj); + } /* // 假如起点是码垛位置则不需要更新 if (!(StrUtil.equals(jsonTask.getString("start_point_code"), "FJJXSXLW201") @@ -115,6 +144,7 @@ public class ToPackIngTask extends AbstractAcsTask { @Override public String createTask(JSONObject form) { + WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); // 请求参数 载具、起点 物料,数量,客户,批次,创建方式 是否满托不能为空! 终点可以不为空时,入库单据编号不能为空 String vehicle_code = form.getString("vehicle_code"); String start_point_code = form.getString("start_point_code"); @@ -154,6 +184,76 @@ public class ToPackIngTask extends AbstractAcsTask { taskObj.put("create_id", UserInfoUtil.getCurrentUserId()); taskObj.put("create_time", DateUtil.now()); taskObj.put("is_delete", "0"); + // 寻找空载具,并设置得到的覆膜机位置 + // 线找是否有半托缓存 + String material_id = form.getString("material_id"); + String vehicle_type = form.getString("vehicle_type"); + String start_area = ""; + String point = ""; + String workprocedure_id = WorkProcedureEnum.FJGX.getId(); + JSONObject joo = pointTable.query("point_code='" + start_point_code + "'").uniqueResult(0); + JSONObject jsonObject1 = WQL.getWO("ACSTOMES_001").addParam("flag", "1").addParam("workprocedure_id", workprocedure_id).addParam("material_id", material_id).addParam("device_id", joo.getString("device_id")).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonObject1)) { + // 如果有库存,则出半满托盘 + // 叫料出库 + point = jsonObject1.getString("point_code"); + vehicle_code = jsonObject1.getString("vehicle_code"); + vehicle_type = jsonObject1.getString("vehicle_type"); + taskObj.put("start_point_code2", jsonObject1.getString("point_code")); + taskObj.put("next_point_code2", start_point_code); + } else { + // 找空木托盘 + // 需要更新覆膜机的托盘类型 + JSONArray pointarr = WQL.getWO("ACSTOMES_001").addParam("area_type", "05").addParam("flag", "4") + .process().getResultJSONArray(0); + PointUpdateUtil.updatePoint(pointarr); + // 需要更新堆叠位的点位状态 + JSONArray pointarr2 = WQL.getWO("ACSTOMES_001").addParam("point_code", "KTPDDW5").addParam("flag", "4") + .process().getResultJSONArray(0); + PointUpdateUtil.updatePoint(pointarr2); + JSONObject workInfo = WQL.getWO("QSTRUCT_RULE").addParam("flag", "1").addParam("code", start_point_code) + .process().uniqueResult(0); + String device_id = workInfo.getString("device_id"); + JSONObject produceObj = WQLObject.getWQLObject("PDM_MG_produceTask").query("device_id='" + + device_id + "' and producetask_status in('02','03','04')").uniqueResult(0); + if (ObjectUtil.isEmpty(produceObj)) + throw new BadRequestException("设备未设置工单或者工单状态不正确,请检查LMS设备工单状态!"); + vehicle_type = produceObj.getString("vehicle_type"); + start_area = AreaEnum.MTPQ.getCode(); + JSONObject param = new JSONObject(); + param.put("vehicle_type", vehicle_type); + param.put("area_type", start_area); + param.put("point_code", start_point_code); + JSONObject outStructObj = StructFindUtil.getEmptyVehicleOutStruct(param); // 找覆膜点 + if (ObjectUtil.isEmpty(outStructObj)) { + throw new BadRequestException("未找到合适的空托盘点位"); + } + point = outStructObj.getString("struct_code"); + taskObj.put("start_point_code2", outStructObj.getString("struct_code")); + taskObj.put("next_point_code2", start_point_code); + vehicle_code = CodeUtil.getNewCode("VEHICCLE_CODE_MTP"); + } + // 把载具类型给RGV + JSONObject js = new JSONObject(); + JSONArray array = new JSONArray(); + js.put("device_code", "RGV2"); + js.put("code", "to_container_type"); + js.put("value", vehicle_type); + array.add(js); + try { + wmsToAcsServiceImpl.action(array); + } catch (Exception e) { + e.printStackTrace(); + } + // todo: start_point_code设置新的载具类型和载具编码 + joo.put("vehicle_code", vehicle_code); + joo.put("vehicle_type", vehicle_type); + WQLObject.getWQLObject("sch_base_point").update(joo); + // 锁住点位 + HashMap lock_map = new HashMap(); + lock_map.put("lock_type", "01"); + WQLObject.getWQLObject("sch_base_point") + .update(lock_map, "point_code = '" + point + "'"); taskTable.insert(taskObj); return task_id; } diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/TaskDto.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/TaskDto.java index d04767b..e87b640 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/TaskDto.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/TaskDto.java @@ -32,6 +32,11 @@ public class TaskDto implements Serializable { /** 终点 */ private String next_point_code; + /** 起点 */ + private String start_point_code2; + + /** 终点 */ + private String next_point_code2; /** 载具编码 */ private String vehicle_code; diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/AcsTaskDto.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/AcsTaskDto.java index 4154d34..719994b 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/AcsTaskDto.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/sch/task/AcsTaskDto.java @@ -14,6 +14,10 @@ public class AcsTaskDto { private String start_device_code; //下一点 private String next_device_code; + //起点 + private String start_device_code2; + //下一点 + private String next_device_code2; //载具号 private String vehicle_code; //载具类型 diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/st/ivt/service/impl/StructivtServiceImpl.java b/wms/hd/nladmin-system/src/main/java/org/nl/wms/st/ivt/service/impl/StructivtServiceImpl.java index 015bd28..9239e86 100644 --- a/wms/hd/nladmin-system/src/main/java/org/nl/wms/st/ivt/service/impl/StructivtServiceImpl.java +++ b/wms/hd/nladmin-system/src/main/java/org/nl/wms/st/ivt/service/impl/StructivtServiceImpl.java @@ -60,7 +60,8 @@ public class StructivtServiceImpl implements StructivtService { JSONArray newContent = new JSONArray(); for (int i = 0; i < jsonArray.size(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); - Integer stewing_time = Integer.parseInt(jsonObject.getString("stewing_time")); + Integer stewing_time = Integer.parseInt(ObjectUtil.isNotEmpty(jsonObject.getString("stewing_time")) + ? jsonObject.getString("stewing_time") : "0"); String instorage_time = jsonObject.getString("instorage_time"); String now = DateUtil.now(); try { diff --git a/wms/hd/nladmin-system/src/main/java/org/nl/wms/wms.xls b/wms/hd/nladmin-system/src/main/java/org/nl/wms/wms.xls index 422862d8ff2c3c25b863ba9c2a416f914fdacba9..f33bcd2ff1d3fe7e01494f6cdb7365963eae44e4 100644 GIT binary patch delta 76479 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 YD<+aI-zi#ppUR?!=g7!`7hq8T5AVzGF#rGn delta 97465 zcmeFa349dAwm)9IOct_`4UzzX0RlGPOZk{k^L@~=???X-oTMdO7yZ$p{RBXi6)bQ0hZ&`(P zX8TZ4UbZm9Q&we};j)vxR~gEN5@Ln<#jPD0pKh9&`vUbY5`a z?V{j0QSgK)xJ;oOs&O;{os6%uGnJ;swT%WUx%{}8{u|31Z!i-4X+dF;WnjTANY>-q zLAL@n%>K=I78uI}FEie6GSGOhNmjUV|EE-lqJiZ+Xxz~DZ?5~<1zS?b(Ei^n*tnu; zVfJ!ce5liiPH?@kuj#;kH`rI#rKXw*W&+b2a)($E!e`EWy4lmsnBI-!H`@3QIN;ks zqeHXS#++t-i&x^@-96j#GJmph$Pm1Qj9ZNNn-v=GWv3~9xWm@t|GV@54j10F-rvxt ztTMK@8koHrtQ0Mqv69r(fIr}8sxa9qW6t0lhLV?M+}Jt|W%d>2^aFL3 zMI95*6U?wn|bMtPg@tptm37N*Gn^vtTyS{;xv-UD&utP9OD_N@nSKl&}(o` zx}Rd7*er$D8Y?Rbly*jk4w>IgP^v& zp**G(R*N+8D%c~($j(bMCge3W7POhKtTw)CGZ6Oc+_o?nsxXBS+AJ%EDlEm(@KPLY zCdE^u;Qme#%@?wehmmC=FfuNHpR{Y2*K`fkRagpRTNG~P^sam813h$0Iaa6A-(`QF%Z7t3CvY?T1|FCvJ5+!Zrw1^HPT3N2L zqD87E=p(DL3J$7}+{LM>hFOtjj2e(>oNS+M3@XYp2IZx7;l|ZqzX}+Gwong;XIlk% zoCx8tnNis$)2LtAsGnSsR83x?R1J;ob!TI2;Wtf%`eH96TBCFEDmeYhylf3MFjg038^09a6kNj%fnteZNt?3+ zXi*}8CW!x_x*bNo~{B{jgpvEC95oT0}W-xj0?`H`0b7p1tLv3x4&r6);VoZOGB z;>F2|)MEtR&~6Ul2&fakU?{CKj0Xm0q*I+!Qki4CT4&rbEIZCJKrbU_IATSYzJtQ$ zQx&+ar(eyXzam58hda-4|_^+)Fc>j z!3snZp*n3=JQ2PKPskFmZNgAPdT>Dx!BQLzY2ooUqt(Xgl2yTwzEyT2)0rnSq564n zLGKK2f?nXLUj)5nZ^T&Tadz7`iw)YsJ_^44+5tlL>$l~GJUF~{J)|7R| z%Dw}Qzm=v1MQ%fVU15+L;&0>dG)5iI?Kxa7Mn^dwC43PdkH4&@8M=b*?q$T=M`SX^ zLYT~bsjSmjR`zJTA1G|fP05@l4(FB_)|ZUVGNz2mD)Kvr_E4Mge85v@QV9hg?U8A0 zDoyVyG=xWlno95&INU^vLv9-kAMcOO5o64&qsxt316f8vyENmzG8$j@l|4Ph;8sbC zunG?djE5Olb}ew|;!#=Pk(OI;yx(tNny@Pj5DGiS1#SJi&MA*kpvT1iSH}Z^Qv>|r+|R>ZP#gDj$tnd7X*m`i zVcN5&X5_9z3h{qV>zsb5M#!PX&0XPN_z$#{+DhWVQQAn@Rvw+uM#j?7nOTwu z&voU4MD+-A&@|(zviP9KYyMqB*B|vGIiI@_;pNAS!u3{;xI`Pr-mYBQ0umv2Zi~-&5W9 z$8QlcY+0}n&T-GMOv{g7Iq&VRQCol$N2X4Ko>I2#$hr%sO*IBjYc$?t7P`c96%QWj zFH#(1pcgk5Pguo=P#z~EuI5f0XmlEsWn4G0N|;-c1FSMKE}&+ac)_Z(G>JZ`(BdFz zd}HXOLSxbNh^}>3b4tAIhb^2@?o~JNH<=Yl4o^P7d3TMvs4MewjPBFRaI|vsd6h zWpIs+Z)V@mr#nc?5UlY3nf4h?Y!gJy-ik(Lr@LH`JKfq{xfjPOQ9}W`${Z^QIC@pc z0>)Q!NX;gf6dDu8#baf+fs(cBwo6`Al?}%9xrN0W&=&5DN#rmbcbU$@jpyb*?I>lr zXp9)G!rZJSG#fW|&vVL3OA|8>Z>dx_Ze+|KnC;*R2Sx9Tu{F73eyf;++Q8!p*YCP} z{**C>|1WVy+~L4uhgK@St5wD>G}gRunKIwF=Z$Qma$7^=pD(8DT5;BB5dM!A}(GG>S5Ds<|AK$dmt|b6vS%#K+?+gDO_AU=@ME z6JhY4MKMMcS!d^+yp$_a&b3|A2;!Heo(I~cc9FaAx$xl+YXiABBBt>Z-d<1jS*poU$ zsruWSueo^cmdB>gyexjs{5d&0>R2smKsFZJBU+$$qm##gc`5I})Y#r=Hk^xh;6Msf z3w5@ctZ=4EdHCER6=SDl^!a(x3oqn%y*|BFpF^*Y4K6KsXxQ#iiw2d9nz?pl`LfEg zgl@x9mTJ9EK0GATS9bfk=N%oMu>Aar*AHDe>eeGIX1}|8=d523Ec*PF(=P^UulV%# zx;wtV`{&>{!NZ?WP1>lUZ{sy=)DoF+H*ThOBS zhQn`c-v4~VyBGg*X@Yt<`?(%!aCftw3o-EjMv(uW2`+I+%_?L^0bwBm}uSHk4nUVGGzU`epo!I{N z;ulXm|LMN?_Zq%4xOU5(wN-(HCZAp~d;Q6O)Liz~^t4gn{`BUni9j|oH z{KtKdo}0Cx%c=J__Wxo2i0`XEDl9E{=2GSKfcwifbi1oV-{7g~*ZlpxoBuLn=Swkv zdOrC0>w{Y__%iq14QzR!IE8IqvaotfGqzcIscOyz**6cl{pXACnQ_N}%DhS?_nTYO z-buRaiLI;D{ReXcZ(KcK#-5k&So~ARjLTkp?ZVxyw{+i{prr?Ld?_7RF|MXI?HmkOr0!{FdU%#sQ=910hzI;6S zvkNcX@zpsq-pZJNW&G(jmzaaz#B#Ie*M_r-+Qs*<3p7*E*x@Vb>@uJm+$Rq%o%lIj}0wO9Lx9D zZs|Jg?$4Sm=zRIKlXG+5%3g6O>zluyiB0|BqkSC~SMM*Mc8Bkh&;O|=JvZ+7N9KTO zy}DhS{n6Q0aHW>cxSL1$M(Rf_b_rCpX-K$+s=AcKv7~5G{`TY6o zKkvDtSHsvXy)HiY!yjhkJP_y}sK-97V-04X=xqL+p_KVLq~m$2nm!GbKR;%^a*q;c zZhB0KHS52otle-}nPtpUv-C4{b#>;l!%7i9GWM#y#K9^1phOdhS@oh)WNg*4{8VH< zLc-;EUxD|P6dr(GZS9R(&A;I#WvO3bF+~VI89uzRpM_Yw9LIO#eM1c5l6mh-O529z ztgeo+u0Ngl`HOw~``vfVO+yBEzipr~QqS;%VQ8Z$Hv6jY6RtbZqI~rOy&60en4*}m zFDv8xUewFVy!K_Kjnc%N_l};urn74}cW+0khVJAgWjO;^}K)Z-~sE)OyL@dgTOj%;XK zLxnX&JiQKS)Hm4g&r(E9{00D9{25G+^vhONC9x3Q$oih24?G*u>TfJB);HSDwO}HD>Jm z0)-uF!dP)Th24qg|L*Cauy0Y%>(Cl+BAEYNtgwNoKyfF9EkOm|>#VT0sDQ7l!p=bj zg44PwY!@{Dv;@!PLF4ou3Y(V1*ss_RhQ?+ug?$c^mrUa0qTRK*5q>3Y!HB-!@!fFDWd@ zt{ri_TNnLr`@8`M3^6 z7fw{zHYm7cvcevPVvVOLYzQp)-c*GpK%q_36?Oy`d}t>4z;eB3DeMv`Rx=wFYl26u ziZ4bJ;O5Lf=kQx0?5fKYb~F6<<9Q1E2?{-Oxx$`{;Af}MgnOzL_A)FJcb&p=pukVdpa?8deZ9igLxIUF6m|tEaFfDb31SJV zWTnD}!89-ZNn!h8n(?bq16U+st-{VgffI(pYN5a_>(Pc#px9JcE)>|jQDL`20sS_G z{S1pdb-TiLK#}ElDy#}kHU4h!fkhs>M_~`ZB2(`}n?oVx0fqeli(I@J_MZfee%Jz2 zV7|2BL51Cjwi@`5!g|0WUvF2~$58Cx4ux%iQ{A*vVU;q`F>sbhf zX5T)quoqyeGcPFYC=?nC4`~An^?5~M8BpY(uPXd`%fm-t39Y8r-<9==DW9{MJEkt2 z)BVHsx0d~S=dq^d$KNXX3D5pbVISd{+S|WW%%YpM5y+vcZ`OvGk9?=ZB$p@(qnFO8 zu=(tF%A_FtpEjjFi&Il@h1OHt7@8mgL+v9l)I0)%qeft`Ko|>Jf?}T@i>6Tg{f&5(968zM`c?2N{d|@YYg+O)bKLXep33!@Qf|)vlSXYvHg3mMc8eBznYaC-v`zX`7|?F1dE*!5S|v8-1S0-- zk?{htqp45LF&my%dZcE@)CWJtu7TUs!)vBF<+RdFnQ1OLt#oVPju=Fj#7fLpPb+!7 z-IowP>5?nxkY{@_@?v69{F{>QVSzz0f*jE|0>co&SuBZUK_>D_M8J-~5WG2y*CSaV zp0ij_MKI_@VANYcXEr|*Q4ypM5#$&RA~1|uoW(q_aJV`J1=`kXr1}9`nnzz;tA$@N zJaCY$*J)H0qM`V|P7A+cxUW!)g)ur3IQ4QD-WeA}NUO&Tjn;k+Kn;y0;LJcqNsdQ@ zh^vsS*EGMrpThErg5U<@}9QCVGVE#i>udmnkCxv~ltL(}+bJT-sZ)~)4W(Lxfww7e`O4!oRP+Iuhx{Nc`-`UycnfvUX0Q- zFGg8f2%BgPt(2yPKwx%2Tu+ZT^I%5-af4>ROe=PgLv7TEr5zA&)$G@8HM`@~R}&mz zma5p?BZ;sU60D^Jqin>fC6%RY#EVfj62kU0P!DS{aqU$0N_$6#8dftWTm7tgaHcQZ zRVbi;mL2X&Du(ILQo`pNqH`yB5qUp#E$VvN4Z_!{>&;9HpHtV%c67y9X!Ti_@bx$r zXTIK39X266h}(w0U0Vwwl*p3dZ`Zu9_|SNChxVLBN$TIBd0sUOdZ~X`>SYzF?6wk> z-PGM-12LDebCdkOYLDi(I@G7??rIoTm#Q<5=FN3ReO4x_J1^ZSdQw79dIm$X^i%s`_q^D}m-Dk>w0po@L%Yr9U(4aETg+d?E~h^~D;2vL zwA*UlNW0DE!vcI=?0yux>;aslH|;i?Q)suvTrPGGVrL#LSJTW72dHVvo#wZM-(@x! z$amev?gFt}B6bgm-HQX&$pzsq|2t99995w<1LJuWobh_v-CgrUg<7sOR01lyZ;Z;6 znJT*#w*)_0p|U47T0Oi5s}-N?=8zF;%BY#i;ciS(ZI`E;e}*ZEGpcpM%_IAqClrqB zA`EOFp%yBg%=bsAS0_;{3?NSJqFYYp$dPI@D>76ok1JF?>NV+BhHqn(CwnnUNy69> zUY4Rt7!&*`CGldUZU_rnf+;5nffhzNNjhu9d-6f$&s+$F6)#3n#fwo&;>9Q>@nS*B zNxUHCBwmcdiWj4#*NahD@m7TTk{6>y7Z@#6Gb~jLb5WM-C8Pw`i&1jx#VD~2V{dV5 z(V*nTD0K;AK|x5lOBfUwZHb{aE=9t}R&A6S0NU)(2EI3R84wqmf zB-lt`^+Usuu;3^OHd=y>5t#YwRUxOgSNg{}$Zc%A1UpZHoiD*ANU(`ctgDp_U*H5S zY?1_hWuDZw^!4EKgR_@Gx(iY72{V5?WZi1gj^(5+qon1hb}4$8d>eGG};Ak~yKBI>hoM**%34n0pE( zuvAIeGzpe2FyZkB6;W7Bq1=MqQz&6A_Y_KCnVg}W7YZy(f@Qm~pdf7I0!4c^c45uA z72H!OQC3W$M9-*JaygxtLb;U@Q>ZY;r%+_-hc!H_Bc@R1>ZMvM^XG+HnprqQf1{@F zE;X*6zFk|WnCDGWi)t3_R~Lt;L&9jyU3vjSCYa>fdp$K!P-i&b}mdbOwc_Y5-rogMJTLLD8Y(=g|kyZS1iFgx-ensP6D&1 z{Q{&3lb0b)n8KK#qY0B2>n6cUT$oU>y9*178uxI40_*9*gy3Ehj3!ZGWrPr#L)B+? z2on5g4&|hyT)|&6|2g$)9aASfzr@|PKun#oUsPAyHzKMP!Jrfj!gFw;P?-elC&9$j z$?cr|C3FLvnC+YcouK8MgE%If(;ff^ORymlY^Veivm`ga;BX1y2njY)f{l`3qb1lF zj@gzGbGxyE&YeP>D=9oqf{mA8=Si^hCD;TPHb|rk6J4OdXd-0~khb}0BIU(sA_c7G z>$lVkbWGgmVYH=*)F3f&U-X{(wGZ$@3qDuCw|=bZe`Fdp4cu*)wzc>#O_{6=>Ov_Ukedh7^TMbnVkSO zZ&^x>>$8*iPnPay?8Za}?8e*~ zu<#mp1}rd<0bA*o?Q$Xowp~fg#@s2eC@eByw`;mHU_s~3fCW~BdV9SF-<=iNDk24T z8&ageZcJprZp@tl3&HLTSYTELY^T%$6e+Nqp*sZ@bnXmTVD1c9VD1c9U?Ky~v7(CE zx0{w|Jrrtpbu0I+sqCi3D#^RGj)-OCi7nxY=8_aWOWUpOu3258-JOW56RfMfU028V z*X|DAO%Rexh2L?>wyZJ<)=z?!OE8fVyPZ&^#Fle)wc?aWiQUdsAz^5x$>#Qfn*H#J zt*0~NwJ~SHYh%uY*TzOdl-KVl;q_va@P>jxP`QCe63Te%vs%k&0;7yKL}<~SBVkBM zu$PXKU@t~Vuonwb7VHgIlm&;i7Rpc-9L7Y1p(NN_mXcsEMoF+2qa+wu&GbRqk8#O6 zw3U{BjVAw^m#a5YcGfH%t!c4AcR!hea!he!QzaOs!Ct!Q5^M&?Z0{0voyjpPTo1M^ zPkFGHA*I1gv6DD4Cd`jdk_9DY7Ru{{h3S(N26#cue!xHC|a%M>>qCAnT~E}-<# zup;=0B-dS5B)Jx5dz{E}-Gm~`bz{yX*LHPhl51nmB-h47l6%~hVH7UlTH6*EF~gbp z+J&vm*SvRvmRDd;+XcBZudT)dEVK$^=e6HW&>r@|q3E;O6wc;29P02C?b+}QUhrB1 zb;6D<*Htca#b%zxoSE)hX0iI4d!l2xoSEaNj7HH zw$ZXU=r$T9tKO83a@DX9;rEoQhA~kQ%2mA><*Ht+B_*p)(9TOA)}BFA^SqQV+16mm z_Lf*o3!j0*5S${Wg^w@QCdM@#6x7&LYc-bnfW{1bhH}(ljotc=#-@C!v1fj8xp=B~ zLiU-tVzt)H*9p&_$Cyp4w8ofw9bPS+dxaGhzWXowv)OA6THNizH1`U#6;Ft`y;Wes zTkSwEoJ)ACo1fcTMOopkR^zs?9;OoBYPYzkkMP!WO?_?1GwlT&np)X<+L+T@ZOrMd zHs3Aq5glOvc>Gh`E>> zbI!$V8LrzAHrPQTL`=rqO;*I|+!)QpyiMCtf^`y@JzW=rPG<>W7YWvtW9}yD#xZw| zOC(r#7iK-W(8C3aHMgD;j3#5=u1b?JFV;tb_4Q!lcErZbT7pvWgtoQFR^^S0h-2{uN8jg?@*b0pxo5^S6V8!y4m zlVImdun7XgH!09&)s7}{-rCV5&f7yL3A&mCd$rzL^5fc1mUj(=cbTRAwJdFqR#TI^ zPmB1l&J>iiGi+PxR0%dsf=!oTGb9*I*+Mex2Bs-n2(+q8Q#LO)TY_CA!7i3yb0pX} zn$&rPTq?n6QshaatuD;U7H)HaB3rm!g54p(?v!A6NwB*;7-b99H61?GA|7LZ4&Gu3ASB=1s|4xJ0#d65^SdgdrX4ul3=?9=JvwJ zC4_qpt;57bv`NzXUrV!JZaaP2d~tn^=tZoqZzUKIRIz<9`;} zKo{%kldh`=e$^Ds6A_=0$a+?SJtx7Qmtcn^*b7d~_Qk^-+=NJt&GN+;Ip)qiUzT96 zNU&EW*lQAO++QT%5efFX1bah*y(us=qfYw;4O4EJ{#mE#AMdIUqbzNNb@65A#hUG! zevL17&_6Yn8mC)dOH@-GuYazmcEXne#6SSu5T_-`nPye8-p|v9lt4PiWr`mW6_!@NEQOMDkt^!3FO z-{egFOFjL{WSuo{uCw$`I{RgS&Yr1o`;Cd8dkrYJnn#=KEkjGu_e-8R78p58c!FVY zI&zjU_6*0!S;Cm0BWLkq)3!M$Y2J ztY?nx_7OsoC4^3AsaAw#oX%on!dcw>gtOR~u$FL^bMv{g9JFdDoW)-16Utc5V&2hG z58nY5OUI2QdN!6|O(a;31Zyh6nmMtC(9?F-hc)^>EyuF+nq2+bSp8uwQ88~^suk7r zYp3^#3$5Xb$~1R!vnt(!V<>b`q?;1PgYMfQ1sQNP-nhuudGa6%>}~EWx^nvi5?U(7LOHVK)g@BEiH$ zo9)DcUk?dgPZu^w5cYC`!qmN8n4s$;!TJiU=1^Dt2_@lSEz5GdTyeMKkrMq(4B%!K z+)2P6^wrnJc)YJv!o5s_^^;)zIp((e00}nGS+<4cX%$Y;!UhSN2mV6A2NsNE#eCHYwaxf zT#T^$wWzO}sblmXV|v?nksjeXPk{*hz6dzbja7k7m0;5ZRxXW^#PZvh zBBQfSCq4`!GP<4S@u?246XYT{v&jV}ax*t3ax)tfEBzujb7LYmvj;OFKFO(i(E5N1 z4Y%R?2tsGRW`B^yJp>Cn_Yf>FXTD~a6+^J?mVz#5C2YJsZ9*{wy9vb*Y-6GkGNE)h znGn{>l3>{q%o?}HTaF|Oy9aK8xd(26xd-mp(Bp{@YqS6s9*_AacWUs-o!9D{Bm1cJ z>Ia}n;e|Tuw@_yfu5|k#PYHv!7K`}=Q>jT93-JGBI+`@lW;c`FJDsj*W5N}MwQNkd zq8p2tTy%sGN*KLD#O%VIYg>~GbN-@;2;`hQ*xkc9cd$RG@0>f>n9Dz{54pSDQ{0mk z?rHgZ(0ax~_@`S>w||P8%ufHb4dnDs8x!tnhZ}JtTezni3kv^qgTg=EnD9?GCj8Tl z3IDXQQ#_am_jI?QaL*Ev!`fO4|8x_I#InTfbB*2#pGN-?F2WrZG5CNM?e%mGzNKS% z66hba=o^FnY@c55akGA>iYJzL@s1U+28QNvsdVeJM7EMGI5x}bfTCGiN-&X!y6Hq7 z>c&JKif@_55;L;}i$v6I36Y1oF_DKJ=E~R#y7N$>pvXhrWknw9#DXcTJ+Fy~yf(uQ z9JAY0IFraj-B^)?PUN9(x{eaMPJ{(R1Edfl5>cmyDNN*{ZcOB%ZcOB%ZcOB%ZcOB% z0-J2tSR|ruLXn5MF_DM5F_DM5F_DLs)O1{}7pOse{WZ%9&}1kVUKzmGdWfeHaBw#vb7zI+y7zMy-J-3*5)rtD#gE@#rec47vC4ROWDi)Jp-lVK($@j ztvt+MJCtPH#i&Q$fEQ$>KohP&E3UvaOMzBgflDm~T7?v7fp}<4RcD&pc$fJ~!6llQ}$b$lVl>L?hc~D@ta==m`4+?DOg7ToiZsjj1 zMNNJAYN@^wP67SJgPin2`GSo_qk~cAmA}&q$QvL0(SD66@=Q5 zYF5D8keZ@^oA1xyLtoZdfaEpgOyVQrv< z@Z>gJ34B97H)ETS5^X|CkmxpCiD$X!4A#axxJJ(mQUoJ$ZMe9$+^El4;@U!7l7`Rd zbGB_mMs3TDiZA%LaJ$voa--r4`gxaV3vo3#7B1Kp_1>)<;=w4Np?185b14jyfDT+h zdtTeCa8BlF4*|QCs}=Lj4SI(h8knhLw|CW|J+H+JW>Zsd&f`rHXVd|Vo=|>45n|K< zjGk03ve;Ju zUpb&WO)s<83O#iK4H#6TVy;LbR|LO=z=aiZMdsj)m=^;eq7X`q zR7r^gtSKurJDjIB??s~z3FycL6mbDR03$|4T)-ukfTECqA}-)k#ay&e@1T5dZri9A zaC3FyOz4N~b}ION2F|1yOqQ$nS$YPGzp8NJp+n6RT}Haz&_?9ihZyA#-&MDbX>c z1evR&`P%s~7Y(>1pbHn!i3`9lQ1F^|;sWlsT(}biJjWZq6Bp2#nT;<~8~KP?Ct{Y9 zPSRI&GVr8 zF$xLX$NF#qC20S?Aps?3;7$mjT!^X>#|3nUfKBQtoRhfj5OAZm#1hawB%nJ4T!Qb) z6au=V2AjCx?hx?2)gK$O?q=;*YIcwkE2=>X7tn(XSY%nI2N$r|63`4D6w3twv^}v zC0cNk_JR^;l+GwgZP_d2EWMz_3hi&eX|(7CCB9Lw)w0zbwF!UaVE#>BN|`BD9BEz< zElMBfTCOd$g!bk_7g$1jhlKWa3GE#c+8aWXHHu;+w0BgYl=@OdMQYcF%UtF|zDG{g zhYP*V651zZ?mk?o-7Wfrg!bVzrPPWn(1!~ZeB#*68vWW6wRs@v+bA!1o0YMqn4gbVSF)9?npK-`-K`fZSC~WZ(I={`h%e=}rznXUAzI=n znZ9f2mAJoS2+;5g95hcBt0%Mv1%B#5EjNF=La&!zfolbZ&WazqsS`xAEkH9Pu7&?{%3xAcWy_{l~h0z^!LWWpk5%ZnuWb3(idyQqq z*3cS@y-p(5Slly0vBu)Y#2Skm6KgDPOsuiEF|o#CVfME=(i)4mLKNb?7>z+;Of1^a zdWsjL{t#X_6^oe^>%*8>D~!z)pt<`&$89*lmzq3GFL*SOV6-ygrK6P*FGeG+6Qd48 z+k;v@*32+4`*Cvim5^Ju>FeXL2;M^!VCiBJe9SKWmhepxp=on43om2}tR=@Rcd(Yh z#8QYGYb7ZwmO^Yg;a*}T#Is!HTne#$^Y@lLY&z$%hmDC<4_mPCf3fOeV?vqW|H!h3 zXVrs(zV{PO6gF^=TilYfwWj1MeB)baNO^-7qoLl5IhQ?bel%Ey>4X(%>uI@EOUtG9>yN2eqw8(KG>1If8eNBj`jQyXms#|b z6`hU#*daYW{4G;rNvTw*M1c|aVFXqt!TL$Ca*nw@qQ3+i=)`I&U)DDvRyS5FHyqK2 zDlvG1A~U(@{b1%q;~nMX&L!BJ^N;AGVifAC31;e#db*kNqpq7Lv(*fq1Kv;J6x(FH z#<0&0~!a~h&s1}ge31pL$qg(8$_r}FZ43A6T1T@NxuE`n)Wp(+?4H53v> z)M|R*x2`S)6kEYaRqE=hv8Rn+z&|>ss7Y}q2M;;XzD@PFTvTTmW+%>R*u(z-{dbnb zabX=LiO6F`FON)7Mn5F#p*gCb3aIEaKdVAxWxM%+KD`o0eDOoHQUTVD0&J2TtcjRFG?f zJ+=yNWyV&jRqC2~4U^)K(i{i=+n}2-P|VAY>WyYAxmazP2$z~^z1m=|9Kb}aD`qw` z@Set|<0U04^^naV*&pHiKx zajc?IvgkrJ-9HqC1%0Ba{Z%h+pRbk$+MsM_DB7J}2JV$0+n@*VpD{n{po;4ypy*UH z<*)i+B{=__YPyK6+IrJ5jh{k@z1J9d1#R?594UB`pV`-S)QxJVvh&2S%9dFB2dzET zwb(kYho5938@%4x0;X_g3j4)6r&D4_8&*N_z&Z6A`a~u~SidRSxm_GgYVbXbhZhjR$f_aI6=xaD~@e`1n z@K}8{L6iv5MtwDluPD>m&;|6LvNL;g9v9L2G6AO#iOT_tikJ{i4Q+4Eg2S`Pn`E5I-P_O~6_}MNr9k5odj=HE9s1?NX2O9K=W2#b^AF zLY<=oVNbl?!@kh`@GX7nhS&9S^SMSbMLx-Z#Z2v7u4#5W9UccS%zm+h?xZNdfn{twtlUWX!+PIv&S+0dUNL+x}Hf| zC<@uk8D#U#kB{k%^Xzy^L_|V+G&tYqV=p$v{N@e4fjP1;2E*PvdROz4SYMhs@*O>K zO|_n+@IJvq5c`OtLND{L@91AN{XLt!tH0}1`2GK=!XNwrg+Kh?r10M?g<~k-l*4;I zMO)Eo{d^o(<9*cp@Ke38VK1~L2L7ZG#k+s*Iq24&Z|{tsm;0>r7n65gR_|1o(|43E zPult6Rb9UM#2omxp6B2~ystbA1Ux}9?r zp2dC79)-nlzjRaA&?vl-Sfg@c6wb6W0%A!qT5KNA&22Ilc)+?yy8w@clvnW)wKNXq zq~gMz71>}~7BNbG#A6KaG@bddX#VwceCZRiz3e|cQpMsRK$>y9&JpCLx#gD5z9#7qCUSDf@65?NF)gl;7#G5Hj0PDqb$jp zlXfM@N@i*9p6m%*+4BJ6x3Kx`dXbNYl{hcY zMJi*%#iz_&2{LaKOBwRb6i>l8`YFCLqpxN=iATtniz)< zb>?SlU+C42Qo+~3jrMP1PhtPBc)w*~$FP6LIyPp#;LrLSPNn! z9h?OCE#BW*7mZh5=wb%y$7BWD;8W?H;de@kmECp5z9s8KncSBg8psy0Qq~W*49Z!5 zxNt|@gJ=(eu0T8Ds2Hz)Yygf*kY{zlmG;;d;c6-0cjf=PgQ654A!vy*9e}jt?|$Zc zi7}0vjbkI&I56yt{Bi&r29hEWm9wFEO~mviwSLS%OViE_>t`YlE#jKaWFKKA4cljE zfW!O<#=!9_*73VIK4Klek7GWF;`}`vlO<{UD~{h6huj@&t>ZU=lVPz1*-@Mv7bom3 z9DijUzl~!uFm1_ub^IZYPg}e7DY)#UWv|HtU%8W$U{S@f>+Qxy$$9kEtbTkG{W5(K2yMP9Fi=$B}}-A*#XT}aGXfVZ>2bn zqaU4}MaR|ghyr4;2aTSFti6ixpe1;(k_5DS2#(Z*J_re3EpC27&_Nz%5+WpI_1N*2NZT|di+ugVPJao;{ zM{a-nytogZfo@BS9|;ixm>M;Crn0;&N#f>3nn%JEK!Ivo*PI^oqF5o8h0yP-@mO3)RGJe?6N%JH9$ zh^iZo%D99g!9U31{$Sb-tf*iam|sH^2lyt8ri^S!lYcQMxA&piu(gUkDp8f;8+@B# z?HluX5zX*1>sHTKE7j@hO!XqQMD3x*A(p8u_Tecb?lofc;7>lbl}t^VSFg3pX#AcOdYNU(6MPACzheAkOwVB)j-I%W4Pl) zzq}9#Eklju_dl@!AxZ?tW8HrHnef8Z`-;jvxj&Ua3=dek&H+C%NLZ)QQR*<3iSw7coLbu2oN=NQ_;iT~;GZHyn$9Unw!%>Sn0KQnduVFxD;+ zS(TFtF5-1ZsL1td6^g_~FY<#D$Mw29ROBXgFN(xRFLFwW$2eDy-4`mdT0Mm#_>Jvo zHa@M?gA#G<;ZTtcYKad^xOS0tTU)q&j;RT-O$>WHRHB_qH-Z!G5|Opn)kLTr&z=eu zxk4>MfJ<@}36P?D!3myH7pEq%6?i?z*73!-+1Ckwq-(TN%CH>+ZMf5xtLFA!^sFFV z2`syxI~`Fwy*jXLa}<1Q6ntA0e0vmpM=;8Tol)?|qTsuu;3Bj{R&0+&KiFI2y-^rF zDa8|0vD}Whkj$Je6QHJp`l#+s zL($2OX9&8k7T_)CxK8JG3)vBl#$j)SgUleKJjs1Qgt&?bT!gri2>c~=78J^lz(xPc ziokcOBS9a>@nATU2rLu*>lCskw?ZPs9go08h&vX6?@>!2;BW*k8f&i;&$Id$nRKi3 z0`SDtWok+?!_u;|zxXM{ZA2SF|GF$ZHg^MFdmXK1o<5^z@yR14kpC~onpdRZAh7KJ z|6|Qc^%z#l(jpsTB-)1>qKTS@`+B4Cr6XN%<42>=zZD)!+y#zBDe!I-JUj%rD_{@j?jggTS=7}9y%*k>3J5IQ7sB10 z@53l~trSm8y+z%Gdok%ut0WWGnGbxg*XNm@pE^z!rmEClemwj-3a>T)*Is0%|6qHq zRcGM_WCqhJp+`h})uJt_y>itIJd81hee!?pMP~XBw%0n|?;0?z5_&|m*H*M8wO78{ zfL(-F7ybX@Ao|cCF()Ym4K>*2>7N2Xy+^!Y*F1qJr2T&fU7tW4VaOHEvkE|DR@qy z8gzR(9W9^9==!K7pt~P*r#Kz0UqsSPtqzdq_N#jigkph*7GNR?Nn5Iktu^gw5r8rP z8d^5hGoNV?(=@ozq6uK-i&lGR`G(eGXt^XyfhDjnAq>~|(lJ&6X#IimZ<@JMYDb1R zg=;Cq6$qy?TfV8MHdwkTpZ7;pKt9KREX zhw-lEr;RGGI#&%=2eX94Q&@W=o=l;dHB8 zJ8_1xc1rHVXMx^M$!)xvWZ(@q;v31s7OX>#-i)#VoA4xvh=G%EE6#OLI~RK`26a>` zFMbU4C#_7|=1cTNP`K8GV}*v)Ac1t7lr|#F0^t!Cp}>juU=)036nr~y%FFzmJNRJV zOYMWE!Y0}i4q!dNb}a1(7Wj_iO`_-l_M*o03{s!qUJE0j0i!)_ z`M6dMJb?X1>pJ0waa?PiZv}l;6L@hG7>X_yH6d%11#!PU%t+mcy9vLtd({JKnfe^= zB?zS|KqIq874VIc#;OFq4!GBPBM~=OyK!NS)hK}28)4S1z~@TvW56pV_(|X+CAc4g z0}?zg2X0#=xln=vehFR;JVk<^0?s7(Ea0bcf6r@)jlfS49)$6o?Y|Qjj^l#Y!R9u_ zEkOyR!=OJZp|1u0oCHq+pWO}|^%rfNj|=xZF4*`c;OiuK0QfQqJ|6fL5% z)~!H+N?h=oXfN=I68s48p^=Qpr|T*t^v6M8BB5tcDF3%$q^XN=Axl!A0(hJRC&8yq zNAjrz{c#Ci1^k$e2g%OZ>>zU3z93-W`_xnD!+R~h6SLM!9r zaR#K>_uQz00liFJjqCR9D?7Fy0Y>HR?G%oQ&fds~ao}AEg%DVSb@nwsz*?NxjEHb9 zut^v)oe{Va7%{NvsA6!}SE%0!j1&-$ zk_fsZILBDwQs^KsDsR&rx6U!D@{RbP0_Gh`Qd(fx4dMcZnGj(SK#VOe0e)b_z^1FP z&an%X8;_GRPX*=zBYwFKI*`-_9Q?b`wQ3L%1DlYD=)A3`U=eU`O6L>*>!#Ntmu!fa zkEvDxbWTOM73GwaofAviC{OeRpAs8!X0?05c=O&dB{8l#}TpC?cg#JO2+n31z;R z7}NfbJonVWeq^SI>}@@(Q(+y`BQuram_ITz*E*(0W>#Cr^vKLci=O5no5V4HWM->4 z*6I12y%tW-1s$>I>G7Q4aqEPHG0MlR2ZQhfto)dS6gwe*;o1)JjGb+p@ItF2QMan!*L_rsE-rJS`#+jJoJ@bSe(EP669bG zQY8bOYBd)@*%3FHC96Mq-LYq;z?f&urezmuW6Ofln7VW*fyN+`(BwrzRPm0}_*ug`xXsU(Q$iioT{W!Kgq+_zLC5X=zyM@WT=(c3v)c{-6_f5w4 zCG5o*?=*;2lpRbEsytPni+!oS?_wpfrfZ6Cat!tx8v1(D{*5NS#=az#o$4kONMTLQ zUz__@1ru0GcLCKyRkN()WvsK3Zyo2d32dizoP}?>IVO&E>K-Sp<3>0><-oIgaGspT zZygV3OIbc0qg83nUPZ?-OX7U_Y=D{E(zi=5Wh?ray&L;-Vqy0*cBGH_ZI&+spAk6I z(w8~i$4>U)T$Mybhg0HM?aJn{xV{3X&K?lQI^h)|TxHdCTpdr5-O;#dY=uQnwb|I$ zZ2pzr&|H=4tEaDId;6N-ruj1RAxsd}n}iQa#|6LvT2s`RWgRC&p}7HbNi&~6WhSe( z&@9wpXTW^4nJ;6|Omuk z=yp;Z$5Bo2>=|hh(*|8E&N`+xC=tgzMpn?VyMJgM@KE%~e&(76zKm=itF}ru!82|v ztmB!iz2^&cC+zy{(a37yDkO{asyrf1~}njdYD#93**^49EQ*KOq%8$3>S{@sUuLsfC^r;=0pOvdVJS|j*qYCv5zrG!x zV_OTlQ+N|fWpY`Gs-omzv>a`I9QoM*UY5@HAW85Obr9r=MV^WRcxaAqgp%L|sL&=L z^rYBE>}|n^ITbOAVVBLHGHuQbq1p@!x9Lb3TS2-MRhyIS@^@^C%c}nb56auRmr&OF^QJreGx$BL&AtC>SIYLc;}7H9U)gef}i{ zi8?~Tpw-3)Efem=-fla)jY;!O!2O`5_9O?SZ4ch$F?78e$Fs4o!hVBJ0RulugY#L~ z*W#VXcK!I$zNa4f%byQE{PcGKu;Fu!D(Wx1y&6Tx>nZc2{Z4Ct*xJ`(za7q&#{z0C za-dWude!bXAAh&&8@ry~_R>CXsXR7XwJYEUt)Jlwf!IX6C#lp+Xd@>iycL_+P*qrS z7Nhu)mX-yk;*7Rh^H7;@M6ee1NMU}zfA*!*XH@xn`)B*x`-`bU3NkXkzyGDv{fOKV z2IDO{H3#(fHG?f_4l0~r-p%ULG#Xi4bHzZ`w{$Pp9)I~~{0<<}D!wRYztM|f+~RUs}9-%H{L4FxSf zcv)?W#%zUOMN(OFHb2O}VJQY5br6JVG(r>}&%L}Y51~{SV*E$wDMUr14~8^x2%wM= zt$>W4dazCJ`<)6X$meMcu;_y@V-(X^3Q+-P4YWT%@2o(~S?Rk_+qA`FPC_Fxv4V_> zTF$PKI6oKX-y?7w$0VTE+%V8Lkh_i@#8Dr_jZ?%0@+#4-=R^Mho;@XorGYCTfX5vw z4jOxOBKi$FpXo)EQ&FzUDo1k|Dkp|pDurjJHt009ixjA#;9{%bDW524$8w_IpzoEI z(^0P4DtFK-r?ctvr(aH`cm*Bhg5erc!DUv#6)1=r@!5!<(I>}OaH|jlZUKvN3VZR_ zT`wN_^U&&Qz}PWVHl=F zG#^KsEyKcGl)+LQ9}S!HF&ZWdM?*?FDE0{|(e2Mh8-sSp3DKXOG6&uMyd3M}aJGnO zMe^7-uCq{f8)~Amdk!q;<6k{wNFqDh&c~fRcE7sEd~K*NbBJA0VSv57u6b+^>blLU zx04k)i%Y=MB!H{~Dzj*qFWa{dTGX1uhxzifS}Z{LZ}6RioZ+=$zRB2i815U#;i473 z_WYo7g|9b1*km8nuJAn$(yvGOy73D~ZuDKk4+1y&`uqG`^-o6ndP7nw+hgXA^0f@w zZcG(p&<54RDxAOH=>DZ+`}@b1mLW~?b2sOOcq6+z0F|^&OyfWW=d+KS%Z@73F%BF~ zB>sE2ZS2GoPC^3V2DEW851W4=66;W>brv`nDqy>X zVDx9W0x_fUTGZIj&~wZu$M~k@{F&Si69|7he_p>4L(dsDJdZcoLGF${#`@YeAa|sy zY!BIwN-rGi8`VvePGFA0++nD6*drqgtLON-_;zp+z0QHh|7(26p2x8)_}^?ut0mBm z!GED4=W@Z+y#_#kyNi+^VhJ@0A8N?q@Ka%ZQk;57Jo679G1fo)oT0&?+`x99#q1|4 zBhiR{_N2Sd+6>G44=6on=-6<#jn2zf9)2;E_uY*cKZIuWnBQiUXZPQ;F%pjIV94j= zv{+0rA%K0Y*=L-uIP-pJ9UiEK@#y09<9y8rk_{=3mUpT=Mw3<%4E#9GWzWGcX}BGoMsfVCeK?X#6AL$sSkyxGzG{h$0i+At6shuL2)Z zK0Ka`t^`~8@G4Z|!566vDL{27@H-7dmJ}kzbsg7x`ok!%<#;{@4L{F!8OE0b=lKR= zcV?}x8+Lup$MR&YdFlDSK?6l5L^%?*Ew$!mSLdWyK*M0TS)9kAT*^FiKGGMvmSRMq znZ!sszq?&PaBggcV27RYi=Sr;h#awcCX z=$ExD-mDygA>undpPwc~q*(!u)5q^9M+>J}<2g?07o}z4G>f`Bk~aLe(li`VefC=W zBi5ecQ7sm+ie?mn`k~SMyUwrI*V_Kbj)g} zv$2gq-lpL#zMa4p5v|1UrDN`j?x7`BsyRhD+HbZjuos&D*AlTHC1N5t;nxY;kKl`< zZb!AFiA|@1&JJEQz{|smjECrSF(|)(>ofOq9%3ao8WS2q@!8Dh$c4QOsUHi5v8=p* zzoDh0`@4FZvsVi`q-8i5t00#YGT1J1yFX|k_Xx?8%qpjP@? zq1}XW{H5jP{yZ5Mc!*`7Mx+XDix>Oz{QX7@A2W7zDGcBrIb<@mg5Z_R{3AyX8df^` zJpYjX=gE1Bsv)Zh+6?pZrNV_vMQ<6(YlVX3%d(bno5f9^$;?+L`I>eMTgQDpTH8<} z0D0!ZDZX*-&ejTUc3I3kGTE1vnB*b>|W~arXy20oiCj6&1%l02cl8^v@{(p_Vf=8IRZ<;4(AVqP{ z0PG0>c^N&WF5EU+Z=~!0&1{*z+MT8&qW>L2z@fn+0rlkD;>CG1hj6AUzn@WW!UJ5y zM<{o;ZncL6Wpxu{Wn_w7!5Q1hC#f85B)0uT%sf(fIkI#*6ZI1R5lC9)734*ZY81SL z>09vv<~6f?`L6XCah3c5TmRwZ{y_tJMh}<>380b5u^YJ16>cLr!JciPKL$Oqp<$r7 z-%ChFM+2G*XCb(Uha2Z4g14=uF_Qjh<2kw+*EyO97(cqsoNF+&4r{xQpXb2gdz<#; zz@C*jmDvu*v{!PY;nV@c(+knowfF`sfexazW#@D!8k=Z%h`ssMY%EULeixqfjE5|` z3osIU+>hnYoRQ}_wW3J^p0&ZGAac^PF@(D(Jv&3VXVP=ny5ODk)N(vD={dzuBPTs6 zc-W~HcJ)qr@;M$k=?MV;P9M+z&*lGD;J?^Jz@W8d&s^p|y|x_ucTHxfC1rCLQS+#a z$xVKDHF-{W5`*7CYfra$oGvI57ZDi#yOS6E($4A|e4U$k`G;pC?U{M<24DMr5h_q9 zp^%x#rp~x<_ND$QS6p_<>}g&`;Yit-nR8e88k+|%@x?X_hn_G&GiL5w;cI60S?`N& zp@znQtDr(NX)R$8d&QoEX0{;{|6EJqc+!?*|#>yroR^E({Yi$_m z%Qio})EArO6)42DU}o)&z7~B*Tv&#JuNe#}0RPUDhIU)!d}fZk$(KJ~W*Sj3cjTao zk#9K{;P>Klb9P4QPJMGZ_m&&x`g|qC=WN5NJ@uuew}Nw|25cobn3Z#Vu{?^Kb+=EvJ&2E2nZ#-_LEms#oyx@PIv!JE5EdqFJBfA zGb8sB{$AXhAn*BC65X?}{07e%YA1fbpRk@S0meLO+@P@)p&T_YG*3Ef3LK2cf#LHg zYEPi(6KbNrApdX)pk6{vc2@Qg+?hy#`J9?u%}l-A*YHyE)wA_AlJnnR7ZwSw)vJR3 ze>JyVjREkF=C-oRxKrEV;pO8J&Y0@xSU!f2{od*^dKFh_4}K7kB6+^~@D;v#jsP4E z^#yz|$n8~t)g*CeARO{y+2r!lv89q+*qJ*bgcsiLYyJPV_bq@?ROkL@c4sD=7YTtt zfDo1hNCG5m-U*^)^D=0F2q;ifNg#`f1QL><;A<9qfwl_5WzhBtQm$3o+k!>FMK8pQo!K#Ro?B3sZ=FIM9v*BT}*Z%+ilbro#&f`1ZoY(g_XU<&hpG=Kd zlZ11XEqjxPAHmulS*!CxS*ru**T8G)gFL-H_IhPV2rNPX0^~MGP;`_JWe67A+&nxUqV~2=jco#k zQJLNj4X|O;%cNL!CYy4%tpfbTQM7-sICq$*?qhEaYLO=qJbW?O@IrD7|`Un)I@Vw4-rE%_XrBR zoT04kLgzCW%eUJmu$1TTX^0~k=ea;!!z;|#jbQXTqZ@3+Ya~WD zI8TIu`1C$*WgrFt7MN4?Np2-d6FuP5XWyVTzHPe>Y&KhwL=DtM>D0-S%dxH?(13gK zmV`pvi#QnROKAv4etdxpNr>T=|D^@(Qxm8*&&B*^+GQwxPixy&jweVWsX7OdWT_zF ztP9%u=oQM;_&;LZ*^vBb&z?aO_FA1~LHpZ^2)Bn85ylG<0dT!Mi?hX0BEdn#gc1o( z_`U7+dl2SNwJ#8`z$>T{I;iPz;&w- zqQM59zNcug72$uE_wwJv{Pz@o4fnkj4KDC5!k4*L&MiLQjffCthzS1@tiCvhCWQ;g z>Q7{wbNshs^;>!V(5&7NuS_O9G_)!&7T@%J^OPaN0#ON^J`04or~GW({Cl*Sa4BAs z`M*Lk*rBnW>u?kj$Y#l^wbEhsBCv0BZ<}4iJqA zlVNRo8P*Y^EMXi7q8CeI+3)x5c$GB3eaBvZoHzqj1$BBDWqKuytVKpDY+5*DDw!{< z(j*8gQhRsmHPg=1dr>|iR}^>Vr;Nc)wtzC){F*~ZGP9YvqEFRAj;aP$S`_wu+DllN zK@|PtqSuMBX4?iBgU&_t+Ql=T!(KxDuWOX@fiLr2ITE|bCwNiao?ZCTzLkB(_Z|i{ z-pbKNBf0^N4r*+tq%G>Sp|AnrWVERTTrbnPax|_eEy~u!OC7Yh)`FVR zzNde07*SUG!hd_@kEi_Mn-I=-?g_Y0z+(bJTI2Bv0y+e&6tEU>HX&Fl0#*Ya#>#TA zDEBB29{?$gb|@a$zw`9=Us1jegzsS3Yvh{ORM+b2rjPH?lO9n9hMV@a9r`7Y;I%&A zE#?@$7}G5e&5`s88gmi<6^Q86K1bo{ts}!=O!0x?sq7WL?c`vZ8U8^p=|9kTL@Lhz zpc(Q}p5Y^e9fSWX{52MeqXKxtBA(t2-GMi!?I^^Kxcey*jzVeql%T=1L-XoX_O9=N z>}>M8+%nwry^sAs^sYb@n8rV7M5ynD4&3t>I`}@q9q2Qm_7JAB*Lmr7KvGPM{ex$w zI8gti1|bYo8x5((Q`2&G!2GLW&vM}FHWE&i@$(O(dPp4&T|H)-_9U?PJlzS@QrX*} zklJ(aD58*_Gy+d*zQWc$xslp>x*AJZkR-rd0M0PiJUXWUh+RYo{skuu=Ipf4yVrE^U(0#27bb z4E4`Na{@QM(`&S3|DxVkID#JXAlga-r240=-v)`sq}xMe@*C>>y)5`8144L#_FDP2 zS{>w*%gPkIt8P$yA@^DtO+q!2mSXf`JD^cc&?-$VXN6`P;z{)tKk2rY#*8u+as6)= z1hT}pQOkBr%JjRR{~qMOMjCn@Q7l?3kvS-Ww5&|))x1xrIz@b)2U)ZVw? zP|^P4jEA-*8xY@b!xa4@KT(W$?1|yTW9ckdbbR>0oW!vTW6>(1cx-j78Qz`8HXxib zx&_=I;8p?m3V2w+Qv$~JHS%F=9nW7Z;H(+A2*qPtcz919yAt7N+PbgkvoO!ivH(}TTgz3|rrB)G8rHIQ}EIkd)W zl?5~v{)7BA)bGHi^0B^f74q^AeXVJ25SBg1|7VI{rS4e8&81)DwNJeaV>&xOq$ zDJG{icbymu7w5x;SM&Yn-w7A~mK#1G0?<6~-}4M6$oG2~T=?+dE2-{?;tRRq*iZxKzN^aZKY09u)x{0v;6bgn%}j#7T(kfT6f+ zArJ4#U8@n^s|E|nuyK)|@`w`m&s1YO_!e&xczR{C-PPFDJVWnlYzyKqESvpTR%5FN zn3L&Q*esn^Vwyn>zTCS?I)Z%yHJApKAw~C;2YSzI3_YJ^#IMdi8c&q^)LC&NO81c( zsLn3s>AxkrEj0DnUNq9s#bWS$hwAM3$IqtDLg!o9T;Dio!c`fd9{_v&Wz{l1@)rB=OsWfW&Y20j`&gPmR#*60FYd z?bnMsdzkY(G9`CsxTg?Kd@>gAc@Rt!uvkEP4}`*71Y9ZLCINQ|xKF@iGjI`#;lhlK z@SY4e0pZ^db(XB)Mt%0mXS=DhWJR~LGpMttV0OQ-eD+^iojr(M7sgckedn_dPU*Sx zS%`&rvVS_C{U@rm#CZGnup`6Prq?wq@p{s4l$c)CTd?HG=gX2woj6anEW^wkWAfz- zr{Fe35GDUY3hpj^&_z&uK^0tX(I=KP3vb{NtOh(szWjYqd1r)Bc_mhScBQx5(rzL4 z+0(;20Ku2_>K#g=bX;G!11B+8RFvdp6%^#NjDoD}l8oF^mRFKdSW%Ia!SbE?rFl8! z*{m=pr|6cO$_rR-R!MnwMMf?wE6dHu%_%CdXOt9VIoLHhMXcOeP*_r4Qfj#+y8hCp z=DBrE!=-zsx75v(nk(vTO>M5IyGvVLb+PSrbDQFaRkynA^;mD!kG~~{X>ZPGT@qbV zzO*Hwxy>c@>Fb!`TF6?O>e^jpu2#A6`t@<8OWN9-Z3`Q3yr-j&u~tgvAkSklNPnRu64EAS*kd>nwdveGdjEav8R6@y&|HNrSAIrxj!$r zvE4`MfSRZO%eu$nwCsHHnS%%Rzp&#KsZVr7HJijPXZDIEi{@dcN%124wXXIu)-c13 zm*djv=eE10tgzy-_IkJaCpkU3DZ-AE&MUOWm8q91_4ED|xiYe?dBK#Z+rk>Nma7-r z9i`S%Y0~@-doqr}PVTtSDkkDoZZsM!W{M)&Gw?qqA*novkt#F?1sj% zop#6VnR~+a;A0(kgx^^db5BBf#NJAlm~2nBKRxQQ0a;Z8_C(*FoAsxWdz@mDVQj@o7Bfy-f+{-!Q$ zz9@3tasE;YIki7A7*WDt4(W6&sq@5f!u^Ss=Cxsq<-bdB4NI*}`ZB8V6b@ZJa2fJ`qBVK`6&t0TzR8vMOS5b_6KC2=XTGHFm0IpyjVH3F z{_&|do?o82XJ72LPopD#AC{FleMI}R%@59Bct0!CT3K^TS@R8xsv70C_P!2#>Vc1+ zX0Pu4`~D~Y_@aHfQ@U-`{wIs%lEaDh9i`1pOBOC#J+=6jjeDcL3jKYpWM_JmAAT5_ zb3Bs%>>n#ReUB@tTVIi?OR6FWXZ~Mtmh@ zXMQ8yC26B`ek`S0e&brb*`79NZQ2-n))lr=oR=JT@U4H3ju>tOrmo25;3 zMsn=FebEuGAvE`%52R~Z>Sq&hI`ZceZu_kGi3!mWGaDMW+9U7Fv0s$-gRu0>Qdf0T zQ(IcBI<_MslU-HUw8Ukfa7m{xf4pCMt8DUv|?tWt`H!>513Jy&W@7ne))(%?l}HoYH*5@RweFAm&tz^G|b? ztn`?8dCF;R@RGrKG4bK?6O|8t5EI{}#^+8{Z1I$Q@q&o>=W@o0yG$j2wBohKm$vkG z^uK}~&QFm(&%T1qOO{SJu)bJVn8WP1rq2Dey5ZGDrX!a#1T^+tD~er+}0=z8p+u*qJ}gC{)Ei1IoQ zd-|~2lwW!l)O-K(B?*Ey8&eC}&n>KL4M_f_C!LDc0?Pg_3$6(+Sd^>LLw}bAyL%~E zl&gJbRlViR1&eaEG&JaiX=ACkHtwZ~Whz&@0G-P$xVJVAZenY|18e_CuQm%lOB?%| zSPdvxl&gKK;bazk#x{<`$ooQitfk(|A{Wf(m-D?$NxB~@0IWsiWTx$72UQ2dhB&yY zW%P?Pec&)vz$IV?u)#OMW8Wqm1ZKEjdL#^9E31K*;Til14_+sN-wN+Qnke|rKTv9X zlZ2}sRG<-VV8IQP9G(z>yWos8-I42&5n)t->4NhuJ;!{S8yLz6i-lbxH+bcx-r>=! zC6(EhdZVAUgt0H=F=bvvVD?(|0xO&4J-x2dd*zr4Z)|@{EE~L(Ce8+LrPr)e8J}Y- z!?LCEghq`95*k>$OTAVNnJxHOUx+F@$0rDWays0c+_}{l>fdamrRSB=pKsSW<|_nI zyjH0Hg?(WVN$n2-QdAcY>(;J;RoCN5F?PtE+mreUHV$St`j18h_@XFEJPW6}`3jJ?#W^kpOBSoBuWBO5IJsL!#;v<(=6ohJ`^ zSmgK(p8l+h%|aiN4|=-RMir;EAabO<+JmPn+u#`~uk#S90LG2Z%^CMP&0}!x)gI4- z)q-<7z`4g4dt%rRPmi;EfHN%?_)f25o{?!UbP?tcx(M^Ju95PoF1fQS5OZgjf%#OI zf%t=l zu4A2vT4E%-`uwY{ms;yQS?GmWV-%cM?O~(7q^Vji^rDgC85e^*o@!5;+XHj_>Gr&8 z&6AjC>H);_Rq6ho`-ZRdhoU zgyE;aa1!0dPm;_$1}=t}G@39uE+=Ny@!AH@Aa?qAwMX97dHT4+Gv1BP{3Q&r3l>2=jWebAF+#b@e(33W)FAt$lYNcUUaSj58nIs3i0tvok&FVL#IReV^n&|CG^sC8Mqj=N6u>vGL2C z%mh@h8e};7xav4uzGkpE_8AuB$-N}tAZ%A4=M=D!AkF`a#hklJL~IlAkbvO=VY+~` z1zaZJ0|GuJU|;G!a3>5P2$k7vY;qyDT)+naseHCg1oXxEmgEM}W5T72`&Ht8o47wD z;MXEN9J{B;WeGS*z&Zh!3Ajzb&jbulG|Fdc^Nr_u^bUtJ^&We8(36eS=9qeEZYYx;aGAb7tZ@2 zUOf=^Zv%_zC3J46?F_VVQOTrb#26bUt~V)n5SA;%{X4)SygvL*x!)SMgXcLIB2S~p z^WVrLyqSkT^E=2B{LEjAntTg+Om951m8j*enZRlJ09b-)Y2;g`8G8e?nBJg81{Qox5-yOIXm%_FmNf#)o4{gv1B(JI zlR{wmBm|bH1eX24VtNBh6tMK=a%6W}Xb1;C(Gh{=0I-j0Jd;G8KO>LuW*%PuoyZeRZJo&TF7lY(pf;SL=DJhM zvCtR}#pNo?FGFyl|UyD4i zBai8gktY%T9JASGX}sj95LgEBorR1Y1s37Wl67~4B5MP1-ta&J8Jj7fF5m$H2O8as z%@j}<@PL41pF`8LnF8tp9uRPt(ZSdp0XGWx9@Jo-aTr%9WHv{@jRL+W;4sxFV2*$d zD0nOtE_*W>G@6#VUKTxMEOSS((~iV@7>oIW$=7+mnCF>yjdvwugBM&EYzw;^R=RpG z)1sT|z3y1bb~B8JLxwS)lpfq?Hbc_U6;-~cLA<>S@@eVHu_GmKn6YseGBvRK>FN$SV=sRPD?x`7u0_?eg z-_~yz(sX8BM+pl-o4R+tmoAN9JZ^PlL_-EMv1$4|`xX?)(%u&cS9p^MprJ zfXlSJFmLoeSYFa?!ZgiH<1~u|Ri0aI-q|poqm1$B)NINLkBt9Xf179{&X6`JX=Gs1y=SB#s@J5NpV}c`@)?Dmhufj>JS&aoVM%ExJZS8| zs96$!)I3B4#F`Zm5F3EjBr*W4X5uyD0&)i6H3?z{LA{h3I@ZJ-5F7S|wFN3~*cY<6^RZkoGwgV+y(}E^E79+}b%L ziIr~el(%=rzA0f8lcu++Gh1fcJGXZFlzu3DWMP1+94l|~>!EKb>;OzE!vZWc-PA4Z z3?`ZYT{F-^bNaa5Gd>pDGAW&=7WYCI*_hAYJfmSY@H)vpbNYCD7i=_kT#)L&sWUyQ zn;}J*Q0y?FFwgB>um+HJ4a4as=(VL>9RRD+jnaslQ(T7u#x5A7^w(hy`(C+R$C^V@m|cb;Jxvw3Bd zJ&NX!Y7gv8sivLI;WPblD;WCm5v(XnTdbt+AC>{%o{%qMQ_Gw=HC zRA)Bt_Chz!9i1m<`DrKq$1S6A@~%LW8cdIPc^l>W%xoiJuJRj~&)Ts=^=tHLvd#qz zEmac@m^d^dNg{(?hEWCS!WP)QB~9{8qSKAUqnVtBhf&u!~`B_tH-=Tw)$~k4KklU z`MgOM)Gb{ObKWH5oKdx!&x8q?J|DuFu|OAvH}LI|wdh9-CK^LVti&}m3;w&S)4~p7 zaP5UB`#-HE(Q+NFCv8I9E`+Dyx)A*1L`E-HL$wQuF{VeP-zqhh?IF#8394au*P`nCL8^JL23W7G+IthleP7WiWFra4o zMZ%ay;Zf`p4#^fr_heZjNWF+)>^N~jYB~krT@4PY8`3=~CIsUFkyg`(53&3%dJdbz zrn70R8Zb{kGRTr6#p=!@a!%M%q>GW6e$x@TQh)wyB`azbLXL1n9B)3HQrgv#xXDV; zZ#<>ks6Bwl8m^5q)_SEIcjVl{(=};9#wr^01mP$=0g91~%9n(V01MZ(QPP`|nFdEN z!5PLfi9O6yNgM-(CpjGBMlh!)GLuCE%8``Vtq7!JNh8>Dk%)|MFdv3av_~W&J0D|* zLno5Bf+vG+O7wx0sD&!eDN>Pvjj>~)Q7spV$d=03C!rJV5sAob3#)j~L>fIG_VK_$ z3}Mz<#=hv8iV`_RBC=g!RX=p1PaGXJWrk0Gxab~!3Pd#;dJ2Mbc<-V!PJtMBn^<5bOPaYk`$TuAtvyF^WT8u z^mmWRZ%a{PJ)%J$|Big8zV&rk9!T9mk}4^^n|8r@y|KuarXM*d4@sp3m67liOi2h5 z3m}*VXgEnf{<<8mSC3O=-Em0H*N=uNaeDP3Ickktj+VGhrfbqYKa|*eMC%0otuK|2 zBc)l}-4aF=9!~$$N#)nd%&9Z;b9L=2B}duf?yEki@BB(B)a+?XSz&&94fgRal$#e> z!)qot&cpuGw&wZmcI=2-`?O+R88_RLa)_KfP zmYWxsU0$AL&nR~kRxHnQW>^Zb9I$JUTDkrkWuGMLuYIEoiIr)OG2ddGcCeO(%R4*2 zQ9hF-dFS6cl{jg=MSU*hCWu~`tig!v}n1qp2^<8J*i|Zhy`OACeFIdqttnjusF{uS*F1nox z;twXV(gxb7{j(QqS%e6oE!liWw(E^4cwP}Yr_43KZb?)7b-zPOHm79H^>wXtCO6i9 z+EUA6c^a=*gwksSt|@g3UH>tF(k>Lir46k$7u8}0757!8b#1QH|Ey&(-Lu!%wb!*{ zPyVlv+n4xCN?i9!EyJLdq(>Q8Hr|I$U^)0qIb(U)S1Yjs3zoL|xEp9gq}LlE#wCrR z;})rF&XuQv%fyO^AYrpVFoP|SE#I0+G%l-8C z`bcrT{*09Hjp%0lEnxj27ZkC4{1xCBv3fQSSGg!6%aWjb_sN6w5BsSx8Q6Y-uqccU zY*oi!JMvJ@@gZ{N=)?P~Nm8C(++Q6Se^H1Od3qC4gg~0lk(P)oE|4@2B)L#@fxZ)2 za^B{2#IY+eI$f+4W3?H-3vuciQR57eF-4(~*%=lEv~ea_J?RB36=@myuImp2u>t zi%PR9DvG3)`7~tPYMd;(eqrOH#T;MmTyt5*XS$Zwubdx0(b_S>&5mT2 zN8fjt4UWAd(^C7R$x)Hpm%mk-H_bJ_JgvU5-MU~}@lWQnyUUCBGW5)|#@|l7d?4@kDn_F&ntK+?m5z$MaG}-InB- z&6~nlzoTsFo0dVzI-d!19={Yenq6ZJTQFcYmw?mDSRfI%4Q;6uI`OeOQl@BG&(5V^U>-sNk1B;_76HgXt+2Fb=*yt_Q%I z0u|K|IfIS+XCb;$g;Wt0MMA5@_+o`uUsGi1uUGa{2b2_xp=S>3dJO9nOW>T6gOK;v zQUOr1Q9Pj~`Gx%$!Vwg6J|PYH|1*}?n6c80S($1{lD3NaqC2zh=$c%u9y?IIT&g56 zQUA>Vb;26=N-06_h*t;dF#}aBPg2wkTK#X?pHId-f7zxDxgYjf^w_xzE|l zp3Q&%MALm&{lE+-SdAxkgE+?SlYY#sl5IR)uV8dq9qqPW1TL>cl`oy=YI2XMW!5OY zK0&RR6m?aJv%0nUI@i4R=XOKZu(h?QeLb_6;^v@I2@ermn2dU06QDOq(vf9n>Q#_x~icUbX6W7@v^K1RVL26R0 z(i}(4_te6;U%j^=?%|#K{WdjY&g1zXN9TVUoqrivsRF>({#BPqr2 zjIc1@&Nqs|gN8o_(+IiYv~?E_lP?^s35a_bKjbEfxCDO3)dCxtVY&;(K5V2Ct`S+% zL>7u%70qva8$@U|*euG7Gq*ie2E_G^;WxfbMzaFq0?jz2`;gO*4YG{Yi$|%lLQfs9 z_x%zz6Z@r%FZm3z^dCeGJc_JCaDn-=s2xl*P~tnze@{1M00`D=RdxF}6@t9R`E?u-HWCFtCwUWzCPCnzj9_izYpA(Sfbu zi$^?9VZUjPIF;A=Q|BGgTi?At@Ay%mh>n6hTTC=?N2&S^ef^%2PhRQ!P&9j-)mlDB z36bz%gyKqLu@2OJ6(VuSto;UO~Y~OcD&eH4(Q9q`Z{2!ilj!dgHugI ztdq^aFJ8~ZRSDMo>3S0QmmON#RD{|QG7BNoaXlS(ATKh4?1BDbp%O=ut61+1S%l2OlJ>=a0vRro{SjqJ~3%0Nm5$V9ltDNFSsNDV+x z3c4rbuN+T6^rMO+K{e{;a$owfzR+}}NJWZuNI}<>>ry=L6kJ^lxCnpEcw?djaee}{ zDvr98Rf3*rsF-rxU(A+3I-d{0Auy?#aw>lsqq_Ym=Rg~1L=jYX!GvFouv8zRsgQy3 zC>9#LS7{~X1*BwSw1s^wHeJ$aUy2XGv`9z+7aUiMxYfPHsfgR!OI$4C_K7&EOR|<| z^`JYOArw0!jMgV@pbkny6SM=PlThooiPmoy)0jDaIfZ_0uQAPD-<=i*P1J(h z;5yQa!_`^RQvHE&b+~fRhtm_n_1(kNG>90-hN}sZE(*%7I!HRr+nYe#U zz(aP`L-B`(BmR1;9-geGTNy6$l8p>5z|2h(o|??qO;jnCD10Io$IZh;&BYa;m4xc; zh5Kg9P0jl9ua#0|AW{tqnx&-Tx->XAe4qa1U{#Y|*Ov@Yrz)gd4+u&Uc>sZ1 z;o&`4Z7DXzjz00I*DhYjQ6cfUW;*#oBFG|Do#XXZEdoGk3vciD{&M zks9`>7y^bU5yo!2yH237Fegpxa5S}8*i(Yvhx6tMN6d7BtaJfq_Xpb`w_F5l^U;mh4bD()YebyN zmRlg346r!5+m3R5>_g(-+4`gEZcU(aIK*A^jpaf-N-l7|K6-1I99Afx>jR z6h+7l<95ksE2>Jv$1;jkqzt z1{#(I6)QWly=ku5CWh8UbwqOjIT}==Mp%{zTP9$&kwpAbLssoOmGRBhLt=mXA*9nX zVn-plk;$>OGq)sG4$OrEzHVSrX>fF+^5bq)8dF&C+nuWzEI;Y8lyRX za^)o-mi%-WZB@5if@J9N!t`hw9?9-l<7{augOR(Ys(D^rQwa~MUE9W-M zz`7HfI`3c9SX6$v(P}=1nkDY{2)NoHhO=3t@)o_Jw`Oj-yyW4B1}+@^`F0)pp{2+m z^Bn6A^Fj^LqQPuH^+p6`84R)qJ+no)NzbMLdW>p27$m0BK*&G&=~o{=``gl=-E#Nk zmlZvDDTUd4q|=zS@%qmrZ+kAeZ1sOki2p@#okR)u^s(I3^y^ppZp5M&n|aw(gjsqj z+?297TRG79%769!`3>yPQvV4vDXec<_f|9~;GXi=o!YB?e{nO)=(z7y^co9sn(j*d z9KMPLd^l_)L_Ch|p;aynwCMh@^;aUlQFbo$5%NUO%WL+2wC>n##drRx_Mu-DIB3XP zi@N@6^&ftImsWhw(d)N=dgKq86nOo>C%t19UtM+I=hrn&KYCjcg^hd8`Ik2*>!mwm ztBU@*^top#Z1nFw8?*i1ud3Fp`1MZ?%(nd*VLhvd=N^763T1>=|Mx4*l6vS5-Q7v5Ma8WGf z-h1D_U%gnnY)GvB2(%l=N+>tD{{(~!I0KC zj~?hH>KbtL3nn+yt!x1V&8Cx&>W&S`Jo@_Ti<-8@9qrL z_r&6T^wj7$%vho9cE_=3J$g0v#f3m#K*+O0)HjVy^jN;YOXtvVNy7}Fb7;B+&?z<0 zSQ(>pyfB^4(4bhMiEtW%9}OKvMGKr1PBNO=9{k`bW0f=HSjaWTLddwhUgEB$(|!tj ziKMuqGsNYbAuhjroW8nK=}-Eqg=}eN2Ne(Mt8pCY*6!lRe&LigGcg_W*6y0xS_gxz z2qsz32riqOEyAc)jj+kf5JVM?zG)_#RyJKB#aPrcEvFO4CYQ6mo(iHNDJC8q1BXDf z@YfM0TjP3g5oSHqGfcs^(1qbqyv1y6)glyc_e^d*5EO>Gk*Gcv z!E&?Eu-jO3f<_>4!Qe->92aakWcNWXZUmYMgV^Q7vNZ~!I-ka-meLb*bKq3mI$_iz zo1&S8>}c6^C-II0luh_+^MzamLYiPka}kT7?zVIHP;~)qNYlp-Q`hb6NLGuj>(kU< z_AkjQ$#LeD<~WP|e*Gx5QW_d$DNx=9n&JAgQR+?7U-U0W!LD#jUy=&5gFPsv^Egs| z08h?YlpGyVR$X#&a&}&JK~7d~MOjv9c3HOJ5qD|n#mPlQMJ0u0&ho-?@_AYM=`{7@ z*zB?P9QdsKESz(gUzDYPnXcZWyJMvAohwGej3RB