tbasics = tBasicMapper.getByDisDate(start, end);
+ log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> LIS视图任务同步开始。出院时间:{} 至 {} 共 {} 条数据!", start, end, tbasics.size());
+ for (TBasic tbasic : tbasics) {
+ lisService.syncViewTask(tbasic);
+ }
+ log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> LIS视图任务结束同步。");
+ } catch (Exception ex) {
+ log.error(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> LIS视图任务同步出错了," + ex.getMessage(), ex);
+ }
+ }
+}
diff --git a/src/main/java/com/docus/server/synclis/mapper/LisViewMapper.java b/src/main/java/com/docus/server/synclis/mapper/LisViewMapper.java
new file mode 100644
index 0000000..8407519
--- /dev/null
+++ b/src/main/java/com/docus/server/synclis/mapper/LisViewMapper.java
@@ -0,0 +1,68 @@
+package com.docus.server.synclis.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.docus.server.synclis.entity.LisView;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * v_LISReport_YDZYView 视图的定义是,其中 限制了查询的数据范围 a.crt_time >= CONVERT(DATETIME,DATEADD(MONTH,-3,GETDATE())) ,
+ * 如果要查询详细的数据,还是要从原始数据入手,getFullZyData()和 getFullMzData() 就是限制了这样的情况
+ *
+ * SELECT a.patient_id,a.lab_num,b.name,a.hst_num,ISNULL(a.req_num,'') AS req_num,
+ * a.req_date,CONVERT(VARCHAR(19),a.audit_time,120) AS audit_time,
+ * dbo.fnGetChkTypeNameByLabNum(a.lab_num) AS CheckName,ISNULL(c.name,'') AS PatSource,
+ * ISNULL(b.id_card,'') as IDCARD
+ * FROM hylisdb..patient_register a WITH(NOLOCK)
+ * JOIN hylisdb..patient_baseinfo b WITH(NOLOCK) ON a.patient_id=b.patient_id
+ * JOIN hylisdb..ill_type c ON a.send_type=c.type_id
+ * WHERE a.crt_time >= CONVERT(DATETIME,DATEADD(MONTH,-3,GETDATE()))
+ * AND a.proc_flag = '8';
+ *
+ * @author YongBin Wen
+ * @date 2025/1/16 11:21
+ */
+@DS("ydzyy-lis-sqlserver")
+public interface LisViewMapper {
+ /**
+ * 查询lis视图患者住院报告,根据住院号和出入院时间(报告申请时间在其范围内)
+ *
+ * @param inpatientNo 住院阿红
+ * @param admissDate 入院日期
+ * @param disDate 出院日期
+ * @return 报告数据
+ */
+ List getZyDataFromView(@Param("inpatientNo") String inpatientNo, @Param("admissDate") String admissDate, @Param("disDate") String disDate);
+
+ /**
+ * 查询lis视图患者门(急)诊报告,根据身份证号码和报告申请时间
+ *
+ * @param idCard 身份证件号码
+ * @param startDate 开始时间
+ * @param endDate 结束时间
+ * @return 报告数据
+ */
+ List getMzDataFromView(@Param("idCard") String idCard, @Param("startDate") String startDate, @Param("endDate") String endDate);
+
+
+ /**
+ * 查询lis患者住院报告,根据住院号和出入院时间(报告申请时间在其范围内)
+ *
+ * @param inpatientNo 住院阿红
+ * @param admissDate 入院日期
+ * @param disDate 出院日期
+ * @return 报告数据
+ */
+ List getFullZyData(@Param("inpatientNo") String inpatientNo, @Param("admissDate") String admissDate, @Param("disDate") String disDate);
+
+ /**
+ * 查询lis患者门(急)诊报告,根据身份证号码和报告申请时间
+ *
+ * @param idCard 身份证件号码
+ * @param startDate 开始时间
+ * @param endDate 结束时间
+ * @return 报告数据
+ */
+ List getFullMzData(@Param("idCard") String idCard, @Param("startDate") String startDate, @Param("endDate") String endDate);
+}
diff --git a/src/main/java/com/docus/server/synclis/service/LisService.java b/src/main/java/com/docus/server/synclis/service/LisService.java
new file mode 100644
index 0000000..8161f01
--- /dev/null
+++ b/src/main/java/com/docus/server/synclis/service/LisService.java
@@ -0,0 +1,29 @@
+package com.docus.server.synclis.service;
+
+import com.docus.server.archive.entity.TBasic;
+
+/**
+ * @author YongBin Wen
+ * @date 2025/1/16 15:06
+ */
+public interface LisService {
+ /**
+ * 同步视图任务
+ *
+ * @param tBasic 患者信息
+ */
+ void syncViewTask(TBasic tBasic);
+
+ /**
+ * 同步完整任务
+ *
+ * @param tBasic 患者信息
+ */
+ void syncFullTask(TBasic tBasic);
+
+ /**
+ * 修订门诊任务,将任务和文件作废
+ * @param tbasic 患者信息
+ */
+ void revisionMzTaskAndFile(TBasic tbasic);
+}
diff --git a/src/main/java/com/docus/server/synclis/service/impl/LisServiceImpl.java b/src/main/java/com/docus/server/synclis/service/impl/LisServiceImpl.java
new file mode 100644
index 0000000..c6e45b9
--- /dev/null
+++ b/src/main/java/com/docus/server/synclis/service/impl/LisServiceImpl.java
@@ -0,0 +1,234 @@
+package com.docus.server.synclis.service.impl;
+
+import com.docus.core.util.Func;
+import com.docus.infrastructure.redis.service.IdService;
+import com.docus.server.archive.entity.AfCollectTask;
+import com.docus.server.archive.entity.TBasic;
+import com.docus.server.archive.enums.SysFlagType;
+import com.docus.server.archive.mapper.AfCollectTaskMapper;
+import com.docus.server.synclis.converter.LisViewConverter;
+import com.docus.server.synclis.entity.LisView;
+import com.docus.server.synclis.mapper.LisViewMapper;
+import com.docus.server.synclis.service.LisService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.locks.ReentrantLock;
+import java.util.stream.Collectors;
+
+/**
+ * @author YongBin Wen
+ * @date 2025/1/16 15:06
+ */
+@Service
+@Slf4j
+public class LisServiceImpl implements LisService {
+ @Resource
+ private LisViewMapper lisViewMapper;
+ @Resource
+ private AfCollectTaskMapper afCollectTaskMapper;
+ @Resource
+ private IdService idService;
+
+ private final static ReentrantLock SAVE_TASK_LOCK = new ReentrantLock();
+
+ @Override
+ public void syncViewTask(TBasic tBasic) {
+ syncViewZyTask(tBasic);
+ syncViewMzTask(tBasic);
+ }
+
+ @Override
+ public void syncFullTask(TBasic tBasic) {
+ syncFullZyTask(tBasic);
+ syncFullMzTask(tBasic);
+ }
+
+ @Override
+ public void revisionMzTaskAndFile(TBasic tbasic) {
+ String patientId = tbasic.getPatientId();
+ List mzSource= Arrays.asList( "门诊","急诊");
+ Date admissDate = tbasic.getAdmissDate();
+ String admissDateStr = Func.formatDateTime(admissDate);
+ LocalDateTime admissLocalDateTime = Func.parseDateTime(admissDateStr);
+ LocalDateTime startLocalDateTime = admissLocalDateTime.plusDays(-3);
+ String start = startLocalDateTime.toLocalDate().toString() + " 00:00:00";
+ Date startDateTime = Func.parseDate(start,"yyyy-MM-dd HH:mm:ss");
+
+ List collectTasks = afCollectTaskMapper.findByPatientIds(Collections.singletonList(patientId));
+ List mzCollectTasks=collectTasks.stream().filter(tsk->
+ SysFlagType.LIS.getType().equals(tsk.getSysflag()) && mzSource.contains(tsk.getC7())
+ ).collect(Collectors.toList());
+ if(Func.isEmpty(mzCollectTasks)){
+ return;
+ }
+ List cancelTasks=new ArrayList<>();
+
+ for (AfCollectTask mzCollectTask : mzCollectTasks) {
+ Date reqDate = mzCollectTask.getT1();
+ // 如果申请时间不在入院前三天范围内,则作废
+ if(reqDate.after(admissDate) || reqDate.before(startDateTime)){
+ cancelTasks.add(mzCollectTask);
+ }
+
+ }
+ if(Func.isEmpty(cancelTasks)){
+ return;
+ }
+ List cancelTaskIds = cancelTasks.stream().map(AfCollectTask::getId).collect(Collectors.toList());
+ afCollectTaskMapper.cancelTask(cancelTaskIds);
+ afCollectTaskMapper.cancelFile(cancelTaskIds);
+
+ }
+
+ public static void main(String[] args) {
+ TBasic tBasic = new TBasic();
+ tBasic.setAdmissDate(new Date());
+ new LisServiceImpl().revisionMzTaskAndFile(tBasic);
+ }
+
+ /**
+ * 同步视图住院期间报告任务
+ */
+ private void syncViewZyTask(TBasic tBasic) {
+ String inpatientNo = tBasic.getInpatientNo();
+ Date admissDate = tBasic.getAdmissDate();
+ Date disDate = tBasic.getDisDate();
+ if (Func.isBlank(inpatientNo) || Objects.isNull(admissDate) || Objects.isNull(disDate)) {
+ log.warn("LIS同步视图住院任务失败,病案号、入院日期、出院日期 有空数据!患者主键:{}", tBasic.getPatientId());
+ return;
+ }
+ String admissDateStr = Func.formatDateTime(admissDate);
+ String disDateStr = Func.formatDateTime(disDate);
+ List zyDataFromView = lisViewMapper.getZyDataFromView(inpatientNo, admissDateStr, disDateStr);
+ saveTask(zyDataFromView, tBasic);
+ }
+
+
+ /**
+ * 同步视图门急诊报告任务,入院前三天的报告
+ */
+ private void syncViewMzTask(TBasic tBasic) {
+ String idCard = tBasic.getIdCard();
+ Date admissDate = tBasic.getAdmissDate();
+ if (Func.isBlank(idCard) || Objects.isNull(admissDate)) {
+ log.warn("LIS同步视图门(急)诊任务失败,数据身份证号码 或者 入院日期 为空!患者主键:{}", tBasic.getPatientId());
+ return;
+ }
+ String admissDateStr = Func.formatDateTime(admissDate);
+ LocalDateTime startLocalDateTime = Func.parseDateTime(admissDateStr).plusDays(-3);
+ String startLocalDateStr = startLocalDateTime.toLocalDate().toString();
+ List mzDataFromView = lisViewMapper.getMzDataFromView(idCard, startLocalDateStr, admissDateStr);
+ saveTask(mzDataFromView, tBasic);
+ }
+
+
+ private void syncFullZyTask(TBasic tBasic) {
+ String inpatientNo = tBasic.getInpatientNo();
+ Date admissDate = tBasic.getAdmissDate();
+ Date disDate = tBasic.getDisDate();
+ if (Func.isBlank(inpatientNo) || Objects.isNull(admissDate) || Objects.isNull(disDate)) {
+ log.warn("LIS同步完整住院任务失败,病案号、入院日期、出院日期 有空数据!患者主键:{}", tBasic.getPatientId());
+ return;
+ }
+ String admissDateStr = Func.formatDateTime(admissDate);
+ String disDateStr = Func.formatDateTime(disDate);
+ List zyDataFromView = lisViewMapper.getFullZyData(inpatientNo, admissDateStr, disDateStr);
+ saveTask(zyDataFromView, tBasic);
+ }
+
+ private void syncFullMzTask(TBasic tBasic) {
+ String idCard = tBasic.getIdCard();
+ Date admissDate = tBasic.getAdmissDate();
+ if (Func.isBlank(idCard) || Objects.isNull(admissDate)) {
+ log.warn("LIS同步完整门(急)诊任务失败,数据身份证号码 或者 入院日期 为空!患者主键:{}", tBasic.getPatientId());
+ return;
+ }
+ String admissDateStr = Func.formatDateTime(admissDate);
+ LocalDateTime startLocalDateTime = Func.parseDateTime(admissDateStr).plusDays(-3);
+ String startLocalDateStr = startLocalDateTime.toLocalDate().toString();
+ List mzDataFromView = lisViewMapper.getFullMzData(idCard, startLocalDateStr, admissDateStr);
+ saveTask(mzDataFromView, tBasic);
+ }
+
+ private void saveTask(List mzDataFromView, TBasic tBasic) {
+ if (Func.isEmpty(mzDataFromView)) {
+ return;
+ }
+ SAVE_TASK_LOCK.lock();
+ try {
+ List patientIds = Collections.singletonList(tBasic.getPatientId());
+ List existsTasks = afCollectTaskMapper.findByPatientIds(patientIds);
+ List existsLisTasks = existsTasks.stream()
+ .filter(tsk -> SysFlagType.LIS.getType().equals(tsk.getSysflag()))
+ .collect(Collectors.toList());
+
+ List newTaskList = new ArrayList<>();
+ List updateTaskList = new ArrayList<>();
+
+ for (LisView lisView : mzDataFromView) {
+ AfCollectTask convertTask = LisViewConverter.convertTask(lisView, tBasic);
+ AfCollectTask existsTask = findExistsTask(existsLisTasks, convertTask);
+ if (existsTask == null) {
+ convertTask.setId(idService.getDateSeq());
+ convertTask.setCreateTime(new Date());
+ newTaskList.add(convertTask);
+ continue;
+ }
+ // 如果任务还在进行 或者 视图审核时间没有增大,不进行更新
+ if ("0".equals(existsTask.getState()) || !convertTask.getT2().after(existsTask.getT2())) {
+ continue;
+ }
+ // 更新
+ existsTask.setT1(convertTask.getT1());
+ existsTask.setT2(convertTask.getT2());
+ existsTask.setPresult("");
+ existsTask.setSyncTime(new Date());
+ updateTaskList.add(existsTask);
+ }
+
+
+ if (Func.isNotEmpty(newTaskList)) {
+ afCollectTaskMapper.saveBatch(newTaskList);
+ }
+ if (Func.isNotEmpty(updateTaskList)) {
+ afCollectTaskMapper.update(updateTaskList);
+ }
+ } catch (Exception ex) {
+ log.error("保存/修改LIS任务出错了!" + ex.getMessage(), ex);
+ } finally {
+ SAVE_TASK_LOCK.unlock();
+ }
+
+ }
+
+ /**
+ * 从已经存在的任务中,根据条件筛选出匹配的任务
+ *
+ * @param existsLisTasks 存在的任务
+ * @param convertTask 任务条件
+ * @return 已经存在的采集任务
+ */
+ private AfCollectTask findExistsTask(List existsLisTasks, AfCollectTask convertTask) {
+ for (AfCollectTask existsLisTask : existsLisTasks) {
+ if (existsLisTask.getC1().equals(convertTask.getC1()) &&
+ existsLisTask.getC2().equals(convertTask.getC2()) &&
+ existsLisTask.getPatientId().equals(convertTask.getPatientId()) &&
+ existsLisTask.getC3().equals(convertTask.getC3()) &&
+ existsLisTask.getC4().equals(convertTask.getC4())) {
+ return existsLisTask;
+ }
+ }
+ return null;
+ }
+
+
+}
diff --git a/src/main/resources/bin/auto.bat b/src/main/resources/bin/auto.bat
new file mode 100644
index 0000000..4b9678c
--- /dev/null
+++ b/src/main/resources/bin/auto.bat
@@ -0,0 +1,6 @@
+@echo off
+
+
+WinSW.exe status|findstr NonExistent && winsw install
+
+WinSW.exe status|findstr Stopped && winsw start
diff --git a/src/main/resources/bin/install.bat b/src/main/resources/bin/install.bat
new file mode 100644
index 0000000..7a651bc
--- /dev/null
+++ b/src/main/resources/bin/install.bat
@@ -0,0 +1,33 @@
+@echo off
+
+for /f "delims=" %%t in ('winsw.exe status') do set str=%%t
+echo %str%
+
+
+
+if %str%==Started (
+echo "restart....."
+winsw stop
+PING 127.0.0.1 -n 10 -w 30000 >NUL
+winsw start
+)
+
+
+
+if %str%==Stopped (
+echo "start....."
+winsw start
+)
+
+
+if %str%==NonExistent (
+echo "deploy and start....."
+winsw install
+winsw start
+echo c
+)
+
+
+
+
+
diff --git a/src/main/resources/bin/jenkins-update.bat b/src/main/resources/bin/jenkins-update.bat
new file mode 100644
index 0000000..bc87e74
--- /dev/null
+++ b/src/main/resources/bin/jenkins-update.bat
@@ -0,0 +1,23 @@
+@echo off
+
+set parentDir=%1
+echo %parentDir%
+if ""==%parentDir% set parentDir=d:\webroot
+
+set deployDir=%parentDir%\@project.artifactId@
+
+set curr_file=%cd%
+cd /d %deployDir%
+call stop.bat
+sc query @project.artifactId@ |Find "RUNNING" && ping 127.0.0.1 -n 10 >nul
+cd %curr_file%
+rd/s/q %deployDir%\lib
+rd/s/q %deployDir%\dataConfig
+rd/s/q %deployDir%\config
+del /s/q %deployDir%\*.jar
+xcopy /Y/E/I * %deployDir%
+
+cd /d %deployDir%
+call auto.bat
+cd %curr_file%
+
diff --git a/src/main/resources/bin/start.bat b/src/main/resources/bin/start.bat
new file mode 100644
index 0000000..58c25cb
--- /dev/null
+++ b/src/main/resources/bin/start.bat
@@ -0,0 +1,21 @@
+set java_opts=-Xms512m -Xmx512m
+set key="java_opts"
+
+
+rem 文件不存在,就跳过
+if not exist java-ops.ini goto end
+
+for /f "tokens=1,2 delims==" %%i in (java-ops.ini) do (
+ if "%%i"==%key% set java_opts=%%j)
+echo java_opts is : %java_opts%
+
+:end
+
+rem 启动java
+
+java %java_opts% -Dfile.encoding=utf-8 -jar -Dspring.profiles.active=@profile.name@ -Dloader.path=config,lib @project.build.finalName@.jar
+
+
+
+
+
diff --git a/src/main/resources/bin/stop.bat b/src/main/resources/bin/stop.bat
new file mode 100644
index 0000000..98468a0
--- /dev/null
+++ b/src/main/resources/bin/stop.bat
@@ -0,0 +1,13 @@
+@echo off
+
+for /f "delims=" %%t in ('winsw.exe status') do set str=%%t
+echo %str%
+
+
+
+if %str%==Started (
+winsw stop
+@echo wait program stop .....
+PING 127.0.0.1 -n 30 -w 10000 >NUL
+)
+
diff --git a/src/main/resources/bin/update.bat b/src/main/resources/bin/update.bat
new file mode 100644
index 0000000..ef249da
--- /dev/null
+++ b/src/main/resources/bin/update.bat
@@ -0,0 +1,19 @@
+@echo off
+
+set deployDir=%1\docus-task-ydzyy
+if %deployDir%=="" set deployDir=d:\webroot\docus-task-ydzyy
+
+set curr_file=%cd%
+cd /d %deployDir%
+call stop.bat
+cd %curr_file%
+sc query docus-backup-sys |Find "RUNNING" && ping 127.0.0.1 -n 10 >nul
+rd/s/q %deployDir%\lib
+rd/s/q %deployDir%\dataConfig
+rd/s/q %deployDir%\config
+del /s/q %deployDir%\*.jar
+xcopy /Y/E/I * %deployDir%
+
+cd /d %deployDir%
+call install.bat
+
diff --git a/src/main/resources/bin/winsw.xml b/src/main/resources/bin/winsw.xml
new file mode 100644
index 0000000..01f7586
--- /dev/null
+++ b/src/main/resources/bin/winsw.xml
@@ -0,0 +1,8 @@
+
+ docus-task-ydzyy
+ 生产-嘉时病案无纸化-英德中医院视图任务同步
+ 生产-嘉时病案无纸化-英德中医院视图任务同步
+ Automatic
+ %BASE%\start.bat
+
+
\ No newline at end of file
diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..12169e8
--- /dev/null
+++ b/src/main/resources/bootstrap.yml
@@ -0,0 +1,128 @@
+server:
+ port: 9294
+spring:
+ application:
+ name: @artifactId@
+ datasource:
+ dynamic:
+ primary: archive-mysql
+ #是否用严格模式,如果启用在味匹配到指定数据源时抛出异常
+ strict: false
+ datasource:
+ # 多数据源
+ archive-mysql:
+ url: jdbc:log4jdbc:mysql://db.docus.cn:3306/docus_archivefile?autoReconnect=true&allowMultiQueries=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
+ username: docus
+ password: docus702
+ driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
+ type: com.alibaba.druid.pool.DruidDataSource
+ # 初始化配置
+ initial-size: 3
+ # 最小连接数
+ min-idle: 3
+ # 最大连接数
+ max-active: 15
+ # 获取连接超 时时间
+ max-wait: 5000
+ # 连接有效性检测时间
+ time-between-eviction-runs-millis: 90000
+ # 最大空闲时间
+ min-evictable-idle-time-millis: 1800000
+ test-while-idle: true
+ test-on-borrow: false
+ test-on-return: false
+ validation-query: select 1
+
+ ydzyy-lis-sqlserver:
+ url: jdbc:sqlserver://199.168.91.211:1433;DatabaseName=GCRIS2
+ username: wzh
+ password: Wzh@#2023
+ driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+ type: com.alibaba.druid.pool.DruidDataSource
+ # 初始化配置
+ initial-size: 3
+ # 最小连接数
+ min-idle: 3
+ # 最大连接数
+ max-active: 15
+ # 获取连接超 时时间
+ max-wait: 5000
+ # 连接有效性检测时间
+ time-between-eviction-runs-millis: 90000
+ # 最大空闲时间
+ min-evictable-idle-time-millis: 1800000
+ test-while-idle: true
+ test-on-borrow: false
+ test-on-return: false
+ validation-query: select 1
+
+ ydzyy-hisdb-oracle:
+ url: jdbc:oracle:thin:@//10.10.100.02:1521/HISDB
+ username: WZHPL
+ password: 123456
+ driver-class-name: oracle.jdbc.driver.OracleDriver
+ type: com.alibaba.druid.pool.DruidDataSource
+ # 初始化配置
+ initial-size: 3
+ # 最小连接数
+ min-idle: 3
+ # 最大连接数
+ max-active: 5
+ # 获取连接超 时时间
+ max-wait: 5000
+ # 连接有效性检测时间
+ time-between-eviction-runs-millis: 90000
+ # 最大空闲时间
+ min-evictable-idle-time-millis: 1800000
+ test-while-idle: true
+ test-on-borrow: false
+ test-on-return: false
+ validation-query: select 1 from dual
+
+ redis:
+ host: redis.docus.cn
+ password: JSdocus@702
+ cloud:
+ nacos:
+ discovery:
+ server-addr: nacos.docus.cn
+ namespace: 34acdf7a-9fc6-4bbd-8aea-9a47c8007ad5
+ config:
+ server-addr: ${spring.cloud.nacos.discovery.server-addr}
+ namespace: 34acdf7a-9fc6-4bbd-8aea-9a47c8007ad5
+ file-extension: yml
+ shared-configs:
+ - comm.${spring.cloud.nacos.config.file-extension}
+ profiles:
+ active: dev
+
+mybatis-plus:
+ configuration:
+ map-underscore-to-camel-case: true
+ call-setters-on-nulls: true
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+ global-config:
+ db-config:
+ field-strategy: NOT_EMPTY
+ db-type: MYSQL
+xxl:
+ job:
+ accessToken:
+ admin:
+ addresses: http://job.docus.cn:8180/xxl-job-admin
+ executor:
+ appname: docus-task-ydzyy
+ address:
+ ip:
+ port: 19999
+ logretentiondays: 30
+ logpath: D:/xxl-job/docus-task-ydzyy
+
+
+docus:
+ dispose:
+ # 采集任务的方式(大写) 视图:VIEW 无视图:NO_VIEW,默认为 视图 VIEW
+ pattern: NO_VIEW
+ url:
+ downloadplatform:
+ makeupdown: http://127.0.0.1:9291/api/down/makeUpDownForDown
diff --git a/src/main/resources/log4jdbc.log4j2.properties b/src/main/resources/log4jdbc.log4j2.properties
new file mode 100644
index 0000000..5cb6f99
--- /dev/null
+++ b/src/main/resources/log4jdbc.log4j2.properties
@@ -0,0 +1,2 @@
+# If you use SLF4J. First, you need to tell log4jdbc-log4j2 that you want to use the SLF4J logger
+log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
\ No newline at end of file
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
new file mode 100644
index 0000000..e421675
--- /dev/null
+++ b/src/main/resources/logback.xml
@@ -0,0 +1,76 @@
+
+
+ docus-task-ydzyy
+
+
+
+
+ [%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%contextName] [%thread] [%X{traceId}] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+ [%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%X{traceId}] [%L] [%-5p] %m%n
+ utf-8
+
+
+
+
+ ${log.path}%d.%i.log
+
+ 500MB
+
+ 30
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/mapper/AfCollectTaskMapper.xml b/src/main/resources/mapper/AfCollectTaskMapper.xml
new file mode 100644
index 0000000..bbcc135
--- /dev/null
+++ b/src/main/resources/mapper/AfCollectTaskMapper.xml
@@ -0,0 +1,54 @@
+
+
+
+
+ INSERT INTO docus_archivefile.af_collect_task
+ (id, patient_id, af_archive_detail_id, sysflag,state, sync_time, create_time, remark, pResult, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, T1, T2)
+ VALUES
+
+ (
+ #{task.id}, #{task.patientId},0, #{task.sysflag}, '0', #{task.syncTime}, #{task.createTime}, '', '',
+ #{task.c1}, #{task.c2}, #{task.c3}, #{task.c4}, #{task.c5}, #{task.c6}, #{task.c7}, #{task.c8}, #{task.c9}, #{task.c10}, #{task.t1}, #{task.t2}
+ )
+
+
+
+
+
+
+ UPDATE docus_archivefile.af_collect_task
+ SET state=#{task.state}, sync_time=#{task.syncTime}, pResult=#{task.presult},
+ C1=#{task.c1}, C2=#{task.c2}, C3=#{task.c3}, C4=#{task.c4}, C5=#{task.c5}, C6=#{task.c6}, C7=#{task.c7}, C8=#{task.c8}, C9=#{task.c9}, C10=#{task.c10},
+ T1=#{task.t1}, T2=#{task.t2}
+ WHERE id=#{task.id}
+
+
+
+
+ UPDATE `docus_archivefile`.`af_collect_task` set state='4'
+ WHERE id IN
+
+ #{taskId}
+
+
+
+ UPDATE `docus_archivefile`.`t_scan_assort` SET is_del = '1'
+ WHERE taskid IN
+
+ #{taskId}
+
+
+
+
+
diff --git a/src/main/resources/mapper/LisViewMapper.xml b/src/main/resources/mapper/LisViewMapper.xml
new file mode 100644
index 0000000..31dd22b
--- /dev/null
+++ b/src/main/resources/mapper/LisViewMapper.xml
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/mapper/TBasicMapper.xml b/src/main/resources/mapper/TBasicMapper.xml
new file mode 100644
index 0000000..5ce16b7
--- /dev/null
+++ b/src/main/resources/mapper/TBasicMapper.xml
@@ -0,0 +1,43 @@
+
+
+
+
+ patient_id AS patientId,
+ admiss_times AS admissTimes,
+ inpatient_no AS inpatientNo,
+ admiss_id AS admissId,
+ admiss_date AS admissDate,
+ dis_date AS disDate,
+ admiss_dept_name AS admissDeptName,
+ dis_dept_name AS disDeptName ,
+ jzh,
+ name,
+ id_card AS idCard
+
+
+
+
+
diff --git a/winsw.exe b/winsw.exe
new file mode 100644
index 0000000000000000000000000000000000000000..ba27e3fd07353d1c0a2f5c6b5bd81d1ef50d3716
GIT binary patch
literal 17462251
zcmd?S33yc1`S?HC!xCpuBT-aFjT((&G%kq&ogs8mmGSP0@-*m;n^ooS+Q1
zx23IHTdj0+=_Yj}?g=Ofi>y^Zt>RX1Ixa!`g@DTZKJPhqCKCwN_V@cezyI_6c^)$N
zp8MXjyyrdddDnA8-&^d;a=BdD{7)oYt`>gfpHKb$_kV02A2js2gIrJbd+nH(jNog>
zjGKJ@G;hM7nySKoBg&0+5~*LkN#Zt`A#lecE{SnrgZuf1+qK|%jwr|Pq>
zx%>2~S$nQY{+~7L`fD1vZ=C$qq*Zlzn5G;X|mLr96?>J%XRIYd9K%MPH9M%b-9jp4ahv`NY_tuU9LAXRq>MJ
zz=TI#`ZDB4u6YE6`j`B5ZRn?wMroF-q0Qwg(g6BhuAPh2y)J2eE8jH_g!|sjcNIwk
zOZ&N+^7!@jb3HIdSE2s4_H*4`;BqZKB;PeItvGo(uQ1<2fJ(*IxnGpvGsKg@M?78PW>
z*7DDYep2$R;5<=y_3v|CMl9#Hll!@h=qn{F}&EUHbTY);Nu$5*46%60P7vVS2W86hmz#V7mQIF7o
z(r*BVYQTKm^dJH3Z~)KLfYNUO57U4rYQTH}e8>ST)qv7(01Gr=t_Do}4}jAZpjB{2
zjP-AZi_2gg-ie*};F07KX3@o3H@C5r0cTfx>%rv$K0&pk}QTthx4ej-YM4n
zqu_XX)t;zcJt_I>nZP*w<*fS@($-0bJ}OtO9h?L!NN>S`KmL9NKSAK1*6^zT(xboU
zrE$F^{LdBq#R9)T!(WoD|Ihov_ZsiCYgMOTNkY#}hlc-J1<&%RbFxz`?IquzcRYhG
z*YE!>`TqI)z5jE0za;H_>ikGvZJD5&-j;kd8yG#Fg4Yk{`M68e^Umb+4|COhU=j6g
z}g$<`uj+bSafM;!-1A5J
z7R&h+ML{cPeTy*ig6@AZi(iFu;ow%mSIN=;BS%K;)RzNDvc6xdYh7RMpHzK6qKNvI
z>H6$W>ieTp-}A}(?p5{q#!{o#Ft-`za$5WJ54kS)WvxbRfMJczH!LIHJt)(D_Xx&o
zu8@Uu1=}+Heib+)mSIHO@;k>2=|zvX${2EPJQjj<*ZTAIHlAEQYmL~Isr@ZyuGC`g
zrXurAsmji!s+}t`!UfNXbZeOF?b|b@=_^5;*{&9@v>(0NBW-x4jhLTq=0u$Sm~HC$
zCx&4Ki@o-yL?Qvk=e9|oq~Nim>FYjY-u+l#V~!tA!&c6bs^YBF==XW|#XjGCT)*4G
zLnGGnu0z}NkI8e{*M=PW6?_vV~S>!8qr&eXnogI5O%s@9eJ=38{-L@D+1<5!(3;7P?Jqdjj`>@i|ZMMi9<7y15DzsBzKdm#w^%?+8mgXR}PdsUm=cWqYH
zU0+mN{-I&6HlnNYjH)#=!2jzq?;HPVlrA@_?CJfC_BN>?eyU+*pDg&O>M-0Rw;C;~
zQmQqqi!vyjG1tgiWz63#3eVL3_EW0*uDIJ+uqvEqPf29C;-3f1e;KifMFDfmMb?pL
z2V*m2tTNC&)!DAbnpknU5&b5AD%f^|?J0@|VC>-d99ar137=u!SZv7T)fwjP#r1-A
z|3v=;|CKB3-CrjXYi;uz{yIEk{vOqvqM+&THloW<43u^lmRxoZoiQ+AcJOvd=RtHW
zQP^?6aIPe;@tao}xvGXLbG9FoA(tL5BU@By5tq-cRhM2a
zhi*`pB}Vi_`oZ)=dd|cr>D1w4$3NWHnjUAfyf%!!MdSf+5o*o6+`QuV@o
zGU$Jeu*h-6tQTKVqVNwt7v^;llx#q@WAX!)WAY>Y%>kA9k?f@z@ys)%Z)L(S)BhRf
zNcBdrGLRq1uc^$8WG&5DaYn0vF~Yxpl<#WKU{Qex7@J~e@T*IOe3|8(*WQPdl|$k+
z#fHMDqTv{@sp6y}j7yG2GQ$2hAE70`FbSdy5To9JChQ|TV6}w-%g-K
zy}yYqMfSG`q>6p_x1K$cebLIPmulE-tuajCZU#Z;;WYX7s6!Mz&s-tTrJr|l<@QJi
zg*Q@Uw$tHJMS7K_^-b05I#9izAFS&2I`x|EsXEhY(^O5PKOd6kN>O=o9lq(0c4tJ6
zlD%Q1A_OBg(zB3m7ybrjP-FQD<0XDrO4r3Q2OE;)0z3>L5ba1T%nBr0M^1)mU9_;;%TGyTteRP_uHe_lud%SYj-UF4)eXjiMED59
z+#;wu=^|bid_WWx4kcIxSw|p+oKP!LND7Dc4S>Sa>Sd$KO%&!~tYbCTOPS%6eTgBD
zGDFHLoU(UyS%s99IAv>eS&5VtIc3XqS&@|GJ7vGsWgy&KBb~dV^Kgcnn%}NOZxOO9
z>d#NKfIFni8iYOQ@0h;|`Dbt~vcDNnHJ=2l(=0CY?p#;UY?V#xP{YiBPBB;E=N*Z{
zfBZ}aBeo_7_u=BA%iu@brG70RELi1k{=M8rD_!mdzvSxK2L9NO?2@V5YQ&n0yX3KO
zSFq-0D*y$XA_XkhvN(&fa3->mP*amV1pXAAB(#HGkqmYwhAV77(K4MFqGpcOzuX$_d0
z0_K{|pYW0bP&~zm-6({skcT!AFn6;zxtIOZFn5Hi+QP+#nd@HmdX0M->tY?V;!PCZ
z2x&F9M*11i6`4lWyOFm=m|@RRRLXuEF7|0s)!j(_{cqd*8Zv8c4gbgOxtFo$kMV%0
z&etwv%uf4Bc|Blu8|IsVstw^GhII>I0}S&G`?o+UIarUaQw!M1u_Z-SHKw%sKN6MT
zJJtU@kl(TXp!qh-q9PET#HzFWWedk4IIwpFtg)UztlAD)7Zv$iWKGxsKg6~SvRlyl
zoVaEh-NtJ7vNoonqK7C{|HdnM#1}Ak^o;*v!@9m~QC1MT#lmuJaT(2xE1s1F;)
zL7lX9S$bRMQ^oVt>guj_KeNM`{Yn|Vd)XnXSsA{U;Y&Bn*KAoU$xis)wQmT?FFedh
ztQ5LmqXsHCqf@6zr{K~}vKVGc_xuwkPUt~C<5&1s%1rcDX(MOsa>f1BUJ*u}3Lu(}
z7Sl4UI8j(DS60qmWoF3o?Q9p_x`FP?#^6=WIV;YgN`>Dh_etU61_nN1YYNGAYV(3y
z`Q09oyOBVBMmu7tNO{a}nQYoUTegsaoj3;ZvC%y@Ti>N7S=&
zZYYpGW!Oivw=UMgo}m!F-hQ0EIm(;1LLvhv?Jo}c8b?Nl`(2U$G0e>(zrKUz=5(*i
zrI!(#$?p!PcI2ibDRlfMC#l)qz>FpePvzPvR{jff!?XRRac1`lY*M*`JVirAtYM`V
zr_0|rzu`=GEnE%ZV+RdZ(O~(iMBxwalx?)DwmcDx&9;s9+Ah)fQB-Gdt+hs#0C~D}
z%?fR`=M8naC}RgKj3mo$q|At}Nr*z9Xl=Zpa`>poP9>mp*mXR6Sy)hw+0Hv{gY*z9
zDXy_b9B!Xu+B|-gy7$@)SP9MbON7S&FIcWuSCzXF0X~S-n@g)rijSk~g@D)o!RQZ#B0BV<=9B
zRl7l!L`4mEWsUqPk#ev9Su|=_z+9IoJa$2@z8J&>#6P}EnPlJ`+8l#YvGu#qKlVH5
z|8t?FP`6P0?$6}c(}JYzFA(IpO7)R
z7l_%4DjKL_vQ$wA@Dp!>2gSC!4h8giSvNH>7Hd3Dg`4?_AwYmMCXLD7S(E9>buZW{
z&6o?8$PeP>Mx(N}Vd@%iAuTdg=?+6xx2%l1VCC$|+=uFF%vSqYtT_u>BM$_11%YVm
zTR}6_5Gw7Uf-ZTJH|!r`>Jl;2sx33BR)ia&8zWG)W$IaJWFu@dQ1$xM1F_6*mhM{n
zj8C&<%)S)bl-6F0U@2;Qi1KNkU~Ezm_$W8bd-6e%G*sBrkR`pc|MIEuZY$Jbe|Ru>
zg5%B1XLe$>^qayHeM;LHKbe=^cf6P*<46&Bo$jgojwMpQKZAGQc^3~7g%?PVtG;qC
zn9VKIJCBB$-i7?gbTu(uS+XbVc{!x_bn#TC>!-&G=F+F@dEySJ%%vv(_cB1C6^-h`
zA+nWNdWh9WP~*PzafAY3N{-i0pWd!JW$R8oy@6l)<dZ1^B0Ui@(LD(@Q6wW3N@=Pw7s%W8zseM~4EHa^4j>d6YO-H|f>>Md-tlSg
zaP73>ESMeiqVsQ3p;K;J+vQF)n|I}+s?B}J8**XYBi*KX8I$x#Zl$SxdbFKl`x@0F
z_kw%4aTcy&Em$gdl`nSiLj~#P17~H8u%KvVHzGj5>Ak~xqGZXZLRM`5l
z8d^ioE|Z#|^tn!-oWefnXU5I;bZT16is`VMh%4eMCp#;R=RSF^;<@)Mq*Wo#3wvfh
z)Z|S2>3!5Z{m4Y&Tl0`c5`}-$KdF3_{)dpJl^E;94niX4PB~2y!E*2HEnQ
zs%pznG)h?VEFg4=+VWL&Xf>6}3w!1$aq1pf%rf|jp21tP&c9`Ie2ezh+J*m6i*t!;
zqPH0FUu?K{sXE&}+J~}XA02&kQZVu@ojhAr*rY0ax>a{ls*?RnzkZLPXW!v_DEpS0
z-v)bY?Zc?qFs(X)N1}Y>LoHD*g()CWilC?*OIP`?6sgkDS*)MmuX?`5ehXPii1KEa
z5G8yZ-LgVRQq&G?Ysx2wfk^w~965CIuaQCZ1m)~p<;bA5=V0+n7?mT=+?eljH?Nis
z#b)Q#;O}HVb~nam@8bSru0Q8`3p?Mg@>TY(AG%yGiL_Z`&CP6vS-+$@7RnQ*KSqF%
z+ub6!bCp;nn-O-cK-DU|cWpr{dt^L6ShYNSVyLve(I2h2GO{CBx;(J4TZ~r+qpncH
zU{>EQd+$ItmO^@PBL7cQ6
zVs5q*Un-vXUv%u%+ofZP_o0JyberSd`;8Iv{J$OJZK|rLq$)FXj*yqZwHPU7@-b4D
zV5BSyn6oM{R0^5(7<)v&PWp43pr4sV!B~?wVAkV8+ZHr$sR&|?%qlWWzb}Ma3t^A>
z?jNYUX!5k|KZlh}JjOoULx59_{ceZ7Ob3zF2ja+7i
zbL8zS3~TrV_2f`_;ts^lGfKBmQJt}IPt2nL&k(>4!7Hz2Nr>Xr)ow4ie)>?_8egZvKgsEm-A1L={9^
z{O$7Apf#{0hzosMh_()unn3Q(@U^_9(fqv&ts_TEd7+eJi99-3il@K24y=JLf&2GZ
zuF&ur%S^Juawyh64ab8PN(?xWd2F-;^CWJzxeV8&xdLk@t@Nwu3I^mJusOl=vA*Bnz%_kxr9g9}4?IV@P!Hti(8>5
zBbE`ce3|S-=i+;sOh4K?Yg8rThTI!8z4G!zY-54auZ@lPXA|D3b;f)NnK*yi;f8g}
z`DyVJRkr)C<9R!N(2G2uYgB#Xj(#C@mG!AH{~KZPQyKkh_SNqahB4S!@M)xf(A*jK
zyy#QJ_nPf_2i{_K8Ch`nzhT3{^kP4HY_{t{Yv4IXX(uLddR#p@koB3tiZwQV6O6$d
z#C^tctgerh?5u9e7S~xdyhff>1UBwvQFB#?9urqZLGvPbio8%1C|%2BJD?#e`(gy;
zfD|xg@QldU`p4_svMy9{z5G}?!=&-(q{*)6q$aS2BydH8@Y>-?
zhu;Y)x7-hA0t#gu3YB4VQ*OC{iSB<150oEQ#E98%vu$W8LR(yyyLx3b)de?A=-XxRTJ|$v
z8S_t_+W&-C4IEY1sWn39ll;cL>|j|OiY$_xHCfN)4Upj@JM|jqoAP!xW{4Gq#lc{UlHyW!}&K7m$
z$5NAXqiSHjXaeYHlVRQPfm@2i3pyX$-D0TS>G>jheqk(|%~O?FKamlSjEy_}Yw;Y{
zOX%B|*npKDp(=&Ukf`St<%?zLG{c9e7|;nC
zy%IsPO^A{GZ?xJv()Pbwz-(V!=n@_{Txh*Lo5p=RSBlqmvg*$o`v%n?LB_rT1^dj6
zatRyOUuB)y6<;ZbYNSZh
z_n^0Fp-{Du88BDdD^H}`dWz;bQ*_ziWQrgW>9wAs^#0OWT1|HL&ChjblSOp4OFH`r
z&HROD2EN;CdfI4m+W2zwx3$4~OSUn=X(L%g8@9CZA#Ggfw6XVu)Hsr)_Tz79L;08c
zJMX{L^L~TV$I*Si?_u#vPy@_eM{cm5ly}$6a3=6Cp9xN~S#+u-+1;;+oI`FRl4{cA
zY$L0aC`=!$;JSQQ^twY`?X^W2?DV*Ty^^O%d5QcX@FRL%1rQ$Bv&ic%d-f*5+}6Kl
z*rg=9B7L)7uJU15!1;e&9gnV{;7W-|6|zJK$WIi8ZW5y&ejKlTFWf~IitN-Q8=fF`
zsEmj1Wyog&AHZXfC_IXyq%`S7c%g_PO=j}|OHn}
zUNyya06SFp+^1@vB0x-)XhxjzwTL~M5B~%JgN@87k)2vLF}4EekA_|;a{^YJ^_Y^)
zWc3jDF49AEb)x)JI8&p)@{}<+!X*O!BqsuXhj7W$_m6;ouTXg7Ddq8e`>>6|7`sz!
z3E>cS5H9vP)bFg<6rX0oVd?=eC{lh~u&Q;&DMoZwQT~P2nHi)2@Zc+HwJL;=Y7HE1
zM`%k$+s}Z@#1Em@f+b8Z8-#OA!>286`=m`~krB%t6mTLy<_*tuMRs<|PI*B2+Ayz2
zFz!Oerfb2fS7#if(DIE6-K{iYx6q~a_GiS)uFO8i)wx6n>}434{6j6=<-Y4NDMAp9
zu5uey>!%Mio~1zk&5NI+c6$sJPUQZK57_fhmIhS7ez#$b&gcoxF9eyWjLGo)b?YTO
zU%cJSD5w#!p4R4n&@jo88J}T4uz?E1X{to@6)DW5$?3Lhol@13
z_;BLK%IFhV&{H!iIW;GX)Z@9(%4TXtfroaP8bVTzWPPr&-;|(VvwdZDxl2uqOtM$(
z?BMI%J}0IxI+P>~s(#ZjZ{SCf+z~Ik!JZ6lT0eZlg!*R0FE9ptldhh38}3oP(3fYw
zu^y3YAUYNjLyo<8o!Itj={e%tX4b8Jvh+806Xv@)MGnF4L#;i$TBgX#vHvLxEJJgT
z^QlmCk59?n(cEKVL(sY`KN!2LC}<%%#71Fy8%@B)Xl(zZ%Z%7)pJ82Q7_rOh3~N*n
zB-YoKzZHt1(H~wDD+xv)xs6;?7<&t5x$&b5cgJyFH&?sT5%6C2eP1d(nILd58wg
zVp8cXEZUIS87PG%LG#PqcS!2LEV+<1{4fX_HV6wM%Vo1nd~m7O%=I?3!4$@NScyYtdUad#`Nv_Oq;B++ClPII0t?D#MXO
z5JKik9V*Oxt)cuGECBI^8Tpr`(U`B+y$oYMI>YYrx6CgExiyQvTKGWmLPcEf0pF?w
zG$T7;2KyO88Q2xEoQT9Ugf_tXdizdfGKt3&KUg`-J`kJ09=0+Nog?}e+IOSqyjtcq
zgOvs&t#AxO)aI|NESi&xk+^?c#-L3yFJGJMqNqa|Td+>IMe<%!dhpeawNSEuc{p=h8!A;x-#RXx^iqt*HC%ZHmUc@JZ@8tin9dc
z(Ta>Y2lt?yj41cA{P+Y6e{%|@H~@H$Ni7qziJEVwWc@X1X1!Ap8i7>mD+E$4mcuzY
z?q&VrhomHS%yz%z9Z;(S##NedPi(8SGwDJ!h&9n$$xm~n@J#z5lK(HY#x<%lcIMXPFXZ(MUv!zr8;gOoVSWL?abtp^f(!&%@2*
z3d0WbSPxL}V(vyJ@)pi&$DB@tj
z4*e`L@RWl!Pl^W&rV@p{3$rV4Kim_68wC$nm>ohwYxpqx8HxPV7!UxT`|kF5mTy^x
zZ{ZvWLMbpzb-Esr8jmyr=|_3Z6*+5X&EZ9v;bBt0p_>QE_ct66$xo|*Z#}&KOpbvm
z;yI#gJK)wC?mKkMrARW3sAy|zQKP;!Usog<#Qy{4>$>myh0tBPB;$HjFx8z@3Z7k|
zC7EwRSwz7$GCLEBWcw8}7P1S7K3Zg#^W?+_M^1^K(rKVy>rYooNI)AgAn!#MZBeeOTm=ic`@j(b;Sx4XDa#_=|(Pw-Fm26E$y>n$1P6Z%Q_z5qHpA{#{5yWHF5WKYsZI5^|c@R76
zDcXx?u@Td)4*Il#KDD4N^S_`%ns|P`3SO0E?$fAI^q0k
zKUEr@EpiC+we>qRY|;C*cKgd&u0?DNIzIn$?nEqTLM*_7GOdJIm$H!g14M+Lco#L_
zB$CJK&}V&Us)m>3Xfn5=Bbqq6Eo;stAnqKl5{1uRDqQ}kOSmyC^8W2JRm3JnED4N5
z>6XL;Hta;x0(ueqIX38Xkq)CkkI+`Y;T>
zP%IuN`&`v}mq;hkRgfARzfQginm<(GMQrlrn-Ya*(>y_6@F1g&aIQ&ACFwQ6;tKmu
zOfGWWK?isrw}hw%Y>FVTi)G_~QEZym8D{qJ^@=RYE;O@;DUT;>A#$?0o_!EF$!Qk#
z;Q_9ttXY>?qnVa@T*r|Mczm7UMJ@(1uIPvbf5)>CzF1xut6ms!BPB*vcO>t^=Z{veMX$f*ia=O>X5DtA`FcvbUhxX|k
zq&vk)y3YRlbIQVISlLIDOsuS)qddaRIsZZYr>cBZzGJ)V<%pBR4TV;4vK@b09jq^D
zL;GesymX#(rc%1d!Vn3FYOKm06d8zHJhPES^BF-LLt2T65xPqp-^Nl%y%L(#O3@ps
zB7Og`x)-TL><=j&TJ4Q>?2QjU1lE-B(xo$0#c~qa&VO5}3ZV`5eO?jC#Re|cRqP=!
z1d6>PCdkEU&00(u!gQizxSQQ_A!%M!-R|a0Zi3bncBk2Pe$ZV#Wkb-sZhO$2TNJAL
zc*ZF~b5}sN4^Fr_Cm8#_ha+B!VI|6@wazZ$7!^!ZXO?$9FZ7qP+6AjVaNi~EVY*3~
z=dj_3Z4N#pcKhz0LugLNd{mico)hyC3cC6y3bgw!71x(8)Rq!gk!I=sutkJg;-{pG
zVoB=V&0D^4x~YbOJvzA)y6rzaOGUABe9y2`a(;%$Lg`yHtnXVzp-HUqwf2K_!M6xG
zI;0NN7{;xnvOOwz;h2z=sZMMx$3G*A+A{t^9cul^R6qZqGt~%%PTn!;w*==TRl>iJ
zy2p-Dxal2PhoapLS2HQf9a3tAmJ_`!(G5V@(@+OB*r^CXi`Xf~!T$G?_E@jqI>dRb
z^R@PK%d{|nElUKxi@24c!PztqUaEg&r*5glJ}?XZvV@ww{$1tfPLz
zPrzNff|F=GQ;+Mbg<7e41@qLq>b2yQ2Vz%9Rv|mI%)vPi^vpr|r-AnB4I-YSa0OyN
z=pfs?rBM>9IZ(mw{80GX?ZssnSOl-4ZBHF6=rtr^8&woBu&psVGxOYVmT%EF3h`+X
z)oD1F)L_XVEA5pYJW#lheZe!36+#{+4g4Z&?5Q*x|2{!zFvwNmT6k@dtSFgPkecOx
z_DcFo78vEQG;7)tH8b?;1a)G3>s)iQG_!yL$
z>V~H^HP3UXSuBOZvlQl1a{QiOBzaZ0a?5f=NNB0zR~@)k6($>F5#;8=uD67OLoN1i
zKVT&om649fH1>Vvzl%*{L~HD}ArvQnW(H^M!jL@TH*9V`{
zLs+7R&?G|;=Ya_F;%|~;fXpqT&P^ASn()_Hq>D~&wa?aF3E4(zsKclX*;7wvWHu}`
zC3e?tCDy|r^nI&)P!^HzHYZ
zc^@1+hT|!Y2^85clbzT3mg+8RCS)!bCY)(RUt_{{XHKmTSb@C;VQ5va1+5V$3r5KS
z2v~>uIO8Hz`fg+N+|we(N}hxB%2wsC%pMS7-L+B4=NXYtB&22Ip7_CX=tF-a`p?Wj
zG@cn}TYNnrt5mfZGBarh)JQwhK*$>Ci}wo=;YTW5XC_$&mBS)kAr&iXRJ|S^8mQVh
z{Rp+ubHWC{oYufG8^gc^M+n5<7Mz=#CH!I5+k*05XJy7_3kh
z-c%1}5*-ghK)2h7T@Sy%zR3P5DR%K0kk&D8f(RzGvPc*&F;~cJf;ha6mx8#}i9i)W
z=BpXXYKCIyp_J}7lt9(;pykU5x@%qy5y|Xkz*GA($~b6Q9elGd??ZW0i%LNFebw2pp~)^S)MY7556
z>*z}6b*zZwfamz1N$v!g={;*6C10fUqJ
zjG}2r_u`F?0F~9AZ3q*M52!WQ2`3u-iSUCN(AkWlea;8NsqTMCb_i0AIdia_A)lsr
zG1lm$JtZ{QuKlaj5IK=#pVQ!gs4zPF#C^vKS>8RMyL$Fw_Z`2HXMJTB$9RCA2yZK(}5A!DT1gckym8lGj(NOKjqHUEJF=Y>4Z~smbfRnxHCHSQE|&8D;`y9+)r@!RM7f!|suJ#A!lLX)GTZEHJ?NjPdfJg^f{^Vz2isE6@9{BTc=2
zvy!40j1$_EU19i5ToAcp)wUQ_?cpC7CK7eDTg#7f_B&6%lZodzL(q8DU%*=|(vfPM
z^V&$GYH@o;OHw=KoU0g{D@pAvQ|HKqbTZp&zw;M(EPJVY0Y*%uhMn%_hq<6un_9bM
zNL%5M(Z9hVWdtWE2K-+drlyRNUO)0@mGH%`Cq0#IFVxX!xaV}pgq@N)>*E#OWQ%@0}g8cZ#&)?A#yxsmJPs#cAIRtCa2}M`Oa-7Q@+^WRlFB
z>wlV@=mr&=vWL0W^IYf5bG;zNhY-O3f@A5A{pl2$=SaSP(L0^RR0H%grD2Md&}%oVQo_fosy*Q$
zq=GTEO-0o1l{k}?2h;m#b-p+5hGkN;LD*0?8Rq_$Dup`Wl>9&QeW^X|WPs)$u+L)k
z6WPj*Ul?^E=eO<5cMK|(!b>>CLsq<21kzO<+DVC32ReUYX01&66Ms~snuZp0e7$0O
z>Gk=(LwzNxzH6vY85tWyt@zg;w4f$OIblbZsZ<#P$ZKj{d)dOosCJngxETGUfq9<4
zI62SVA<1@lpM8wO1&RBqZN;sEwRi)AZ?(5gPR{K&ogWDz&8u3Cs;k&*?SSM4u
zv;w`=KA+5RQMbxBIqPK|Nr)1QfYgr;gX{XxVyfM0KcmXG1oX@YOqqG?MwA*R)`qH4
zYK|u}$CG7_*?&6h_c6X1(NWB?hdHK*IbLrc%FHu692zN%M6&3Uj0A|(?DUyheULpw
z5EotH?L0||oolO^E7Xu+<&@U&Xc=l8FBj^9=n9^mO=p1p@E=46{(&cX_${Q)8MZ6D
zf|>|65jaHYcsTa^+gXyW_6)#%i-h5;LtAPd)AQwMx(!U0*xt15U(0Z}7kkF**{Wl<
zHvcF&TU~Mt@a*j<2e$Tt%-lv5#?u7b52Sd9~JPzwuVVMtpj#J0X6QMk*W>#ADe
zzFQ78Nj*@ny)LiKB!wQzKYXLiT;Z|&G{40e&Qk61+}MBPIe7jr75=FsWflDCQHN@k
zzJDHfVpoD3Zzsn9wOA04)RFc(pJ=_rLn*UPw+da`ZEwV(>08vLPbKQnmpGNEC0IGv
z6AlY+krmwZh>VTp?6?}ZGGV&W+l{?fMvfpU7+I{NHvkhl9C56N-^_#-X9_LyZijs-
z#;+cJLlLyN#$HGaowJCRzyO!3{p3T%enLy^A6+NQXZ8}qj65nzlLRDSD>AC~x|`e8
zVw$ZsodCQ~R>K!M+n)xVZgWL>(rppinkf7kXl2*H<3O=>E3Fi={4QTZ|vAn7sJtK!UJ)Y_tWd*TRZk!_Lw}z3Ce$P~S=t
zACC}{IEG$o+oR&hPyAL>#S$6ZzP885eocFJ)o+yTG2I^F92hE^0!(^X%%PFyVy%ZM
zaeJHjg$Ue-8|JMD?7Q622WjF(nPer8)R?bw$m<8o{7vlfW=}PhQ(;2l`=t7!!Oe_6s{Byjp7uD8E$k8s0E=;Wh&=ni>ZJ#?OAEH53^s8j2@i{(zY1
z)ajxSg34sq2oxMLD;y
zN`^~1NBHFE`NxKfV!6(d+S(bHvK4@_=Q^N=O3pyzEZBm3F)I@mziGg^Z&W~kk-5}IKDmF=~y443h;2jUZ$M9_p#-F6hrTqEl;3{aez
zRrSS;TaC)GMd4}F1_er$8StP1A{b5c#2bWVP5YkqGmJIN@{6tPh}LoxU;*cjz`5B}
z9GN9~OuJTLFYY!uX!nX!loce
zEmlM*)@gj<5<5~REY+=r9`T;a?sIU@Mk(+8dWrNHsm?ilath&x;=mAFDomt7(4hM;hj3MXEEN
zp3b=K!{|zo@L(~xK)a`LPG>Hsvh#DXI+i^|41ORsy@;qIBw7dmX~UtR%?~j*2=lCi
zDIF@EIkeQii8Ri3PEFTX`x>=Kb`j}U1qcOcy+ujhc>Ci6PjM4Xu+J^!7>;m7-=aYX
z5cJxmTCZ&ty;l0fj@rSvrYt4<(u{N%(Y@Me;4G)m((l0dKRZVlf61?yq#n;-QuRC^
z51kSh3q~`fy<3vY8a5Lkh_9b8%c<(_yRe9=J`ab&kcR=SuXA3&F
zJs>nMhKJFjiQd3%+UYJ{qFt~*d;q?DsnlXww3&CLFIrn~7HZvMY^YIj1Cj;Q!;Mde
z`+WK;GxIy*^^*%3FSff`3^zt}y;_MJE{Z`@JTfr9DJk}oy;8HE4|x~cwmySYfoaFh
zTFN<2B3vh{S=AA)m19_`WQ4y3BLb6BxP{h*hdm^~iFPsN&IU-uH@qG%@VCf0R%viE
zfb+MoN~G`$=jCfup<~Q>dbzGKMBx+c^TJaiSWXxFTUd7T+8XDzQfX6m$#e!KkqtiS
zQ2|fkst4dwU;UDIWriFs)&2`b&JF62P!(d)V{>-`*a?>$n{R)QPH;hB!Xc9Egf448
zE_L-4nV@;H@;wwOb|;pl`JXtF(V_F4*-lDEuQ3gX2j8&sYE%xtjXBfy$!(6f#Po~j
zT@t(0JTK+K|3XS|sx@ChwDo!kBh-U(jS8a
zRjmN~BR$nrAU;JdmJr!7Vmgn1v_CM6L6W^uY=$68W$>;`OHX2HjdYRqgOhZCR6!^a
zRjhZUFytH5nO>4q;OD(0sWK!fpA!lu=WFeMrh^u!P%f0xixtA$EeOJzyElJYp_8hm
zQs$h+5}%xA+%`YM`NhUz8}3ndT7-ZVQlF~1Bu$Xdv-|x5M`NC2C&i
z!RgRg9UV@R=KrL1zLZnC+NPeGQmqaSvay#r>4;e5F)9lAA50TM;88iy+rC>jzgAKf
zi_*8==qJ4TPtb?4D_D9=(7ZK2SXvoqOXLIyXi)$1LRGun%{~!w6Kv}NNS~Oo-SnN%
zoPSDcdnw-n>X?3zbfn2>U%8#v;&^zn`-censA>Dzl%?&D
zE9@P()7IKI-`%IqlsspJqpW)8tuZ?i?k!1c`pnW)(poAcMlGqnGS=j~Oedv<#Po#2
z^zmJ$Jo`w71F^GHNb12G_Xy&U~I
zS*M(5RK=$g?)a)PU`0=)5=RkF&kb0iz42jA3>}7xwlwDA9=R>~Ev#G97)*cr(R+mO
zQ*rfI-|fWJOB6gY^@x`8IV{N+RYbeqj&GG|8CN`Ww3UrYJFv>$rb;Ad3x+I7eMp6;
z+^l2g9Zc(t8~e+jC_HO_vM2^1ygFFghQh+4!
zSUym|SIfkHA8YVx8K{%}w5Foi9oc0>+sTo5n~$n-jtd8PSwB>Yi8`5F;`|UdnlLrm
zqu+eow)67@w$MeN^%NI6~{
zFB>0)OCEWdH6y7aoapB`HnZFOf=NPEAUPN6nLW7H`aV9@>xP1{*+dBxKD-Q3(F*0+
zzkiuA1F?&z33-ZgQMgb){n)-so}yt9h#)>|$9e6oG1qV$tNDiP4G%z{i=UTxP_zPs
zIS`Q+Vuh~4E?2erfDY`(P8O;EgT=@Oy*gozAG%*%dEZjkRjRK0s7rPbGjyV85G7JI
z&hW*|f~J+8R622y$XtS3{7LFK*zw{dNqs}?kC7x^yS3`IRJluR=Lk`9BW7;}U-i!@
zY;LtLdr9yWn~keDLXyI44D5wf`eBQGu6ihDSqGUdD(;$im>P4nd=3sSa4|dWVi37O
z4L)6kYWWT-)RiX*GVlGdY#nKRNZRGotK0e=sw+^{jgsnwn`mFt)*oqn&eQmW${Y$54K(Z)b`9ILD
zu|^)n7eraFvr2IKi4GBz^Y&CtE#=e@o#oRoEZtd#hCw>xBt8Xmx4?++M*8ujc7yz|
zxP=keQ=U>3o|EwhrjXAsNudF2Qx6|~PkCx#MGvU(4ea|eDs6|6@93on<&J47{j*60
zk~v1BouYcG&pBpgRfpD4eI
zMKy9)CP(2Qobat3MSy7*9Z7R`$xGTm)g)_c?GGW1`LE2QV-j6Y>>Tb0MA%^IDvm8A
zL=Jtcocj=gL!xcUSn?Um^J28@EaQo$msDJoK3p;t&3MYx)bf*W4QBeQI1_=uENhxv
zx<|j$IfI%^IJ!A9o07-}BwBNwFV}2-BfTuw%3Hne<_knhC1azxf(vT~mF*rkStqf+p6JJu^+SwtiqSvbt@SWC-e6z(jERs(=R_8C(
z66*Dkwjxdkkq*=cUWP^T%$1!t14|O21pJA!?dlaQX0DR@Ai{MhuScDh$1i#Lv?-=|1)aV%d{_TOo{iH^_n(E@JzvNf6
z`rP-loA36p#8+d&5_L|N4>yLezT2Gt0aYF@XZ<|#pZh$Qm
ztjZoxDf`}Zj(>~qEOjp%MAGrA
zjnO@)hWo361?vHFLY}l!XpKOVnNqEo?%@|&!~M`q*wYw2e^|HynU?4__-&VxcHvPl
zYrY(qNQB1(&GqmtyPm*7-y%fO4*OF?9pQ}?1PLfCA1p>N_8~{1dT$}1%{#*(4wA{}
zoCU7L#PfTjbT{V##(ym=-R{>@-LI0>kryBwVV~N5Ms3Y+saX3=zSBWVDh|BOd
z5JgnNCQ(^tBGlKZJxOGlUjAlOgzc%VIOp#-CfO_%BsE7>1R57
zgb3Zu^&mb7k5@D4aBqhKy4=xod5TQ{Lb%1pBwh(75Wy!JN3+u4YC8%DF1)InL#`5HyGL{eB3m%0If{X>1Zu(eQ
z;!TWZ5l@|YDnl0&oo~w}c@gw=1s`F&l)aeG6hw
zP@Ms>@>R*+{ivzDc4j7QJh>4LX^ak^MaOoqqtrl^e3_x9_)J+A>>{mp-Ir3q1~CI&
zC5AL9Tl^WAhg{7@JN#g0Z6BJ&g{ZNxv@V
zVP8`}?MP?Z!-p{CrS9epilOLf|5Pl;82x39rqAm4q>l&-C?}#N-LJl%SvwEqULry%
zn(6VsAQ~GQvpC8))O%$nQJ2wwAbLrp4K$qYPg!EW&`jUih|#xNMBiFc1IIY^fK*~B
zaPlHWQLg6&iO;t}^X%3=xC7J<$(}sYzi3zIZ&`^l46$;HY?V&C#oQ}~woZ+1{1Ty}
z*?$6`){M-~qva_zH!1Ukqcr;hUXu`Ra%>vpGg3E6=V3w&_3R`s
z6n52siV;X|)>uDrKeJo4c8mL2KEC&tBV}u~?_l%Xr)?GDP3`(?QrHzFxX1aNRMi1d
zbqzfh5x>Fy-EJZHNDf$$$OY-AqjJqtDpwz5`}*fHC`Gmp3tb4=7Iq1N{&$1hI79|F
zppU^p7xxRY+;?<-EgepUO3nKge9ci+w#?_VI*;>aQrAki$vK~0~a&AzN
zkX=IXv1!bor{+7zbrqj1AK5`Pd!Te<{3Kq?#*t(C>zt$Y@s<0_w{_&f*x%#`+S^{yF;wwf`|-JonouTHh+WTmaD`(^{r7(F?as?|N(97Y6o9)Y3o=|P_9Mpyf
z1X7Ya^)aaGq~zGRN)Ad^_+DeLUMggmGfGvNMY@nWaowe+LeAz;CMf*VLF{Nw{0oOh
z)Hr8L;Ykornv)^vvww*5V{rxV>4;v{Ea$qKH5E)*6G&IbGv{L3(??A$JwoN+i+Z`6
zREQwq{CF?$7#^lTMsggI1&Bm}AeSH`f&L6@ET%|Oq^I%385m!QsN^hTVS2S_3jex`D&;N=ExIIFdw=`Xp>Kf*2(76AUUz7&qx%WKxHkQ}?5H)k*rSN7SL+1fL9gRPgh|Vq3xC2i^9ZPcGqwbp&AJ
z)wQ3KXxvE~WYj*PdloI@cQ3oUcsr2n44Of5z>LmIdBfh$*J+eZT%Ua)BH!O{SL*%}
z-q6YPtVt&tMVTZg{}owNp1MzJYN5kZC#{M}SrsIRq1GDX4#viR
zUbB$T%Un?OtgFoBIj~^N-z%!a-)n~*T
z%2&m6o>lJfN!v!aye?NH2j%Z9et+c{~T~4wai}VJfqWB~%`9t~ON*S8AqY>vAuvozcjJ7Xv?Wj2vi)@pZj@
zzSz{L>~olpXX=^i%eQ>C2d(g1K74ydp=?h#&Ptj}6EeTw+(srz$y3TyibyXrsYH7G
z$P%HVc<{fQ@7WFiPv-m5X?nhM`AwVe!H51|o9`|{IQE}!o#v+I`#6#a`kL=@GEo0_
z=6kfVUH%vIJ@OEl@7r(fHQxo?{@eL>_>bm!Ilr2a;y;QsL>7Lgrg#jlK7UIo#3HQs
zcsx>YB|laVb9MARujW5|sk+tu-1|8T0T&*0iLjqB0r$w(oy+sXxhq}A5hi1=^3ke}X2Zx!4gN_<%^Kds&E$Fm#`Pm%qs6gFBoha**tuj|9x|
z9LV`h?OY81Mvd&6j-)4#wqTIp8~{(QtJBO7JF?$r@aZ>B^m<&*FvRGm4n92=fW;_(
zkJz`XkCJv1KB!#N>bymOL>~Rdosvh1WD|MRZ(XVd()Z<245xm3?Rqf_pi4)ViG(U&
z;4|0PR7Bzh)F)mwqKzdQwY^)=*t9RD0fdiQG#@hMu>K@7<=Xd=KIWqNBjomI
z{!a~LHDjjgwx*6ErN$oK#wg^iyn&QI=TE-&a6_A`-z3kkk7vLS6{fW
ze)9*ilGS(Z~cQt>WX_QNXVI{8j-cyAx@)Bg>;Cm=cWP6G&L
zu7z1dhK{Vr&LnsOVedRAAibx5?q&WXM6OEypIxB(GB
z9Ae3bn7R#2xM)gO$rlWTL@&a2>r)4|9>qSLC#iLYtTr$$ae9n}kKbwC
zywCn(xeBT8Ua9UT!i~x9)=7663V9}c3~y+%%ZKgTWxAUgN3oUeZb)_aHYf;+ZzU*;
zMJDdPtd+SLWRdA}HGYMa;k)#kg(F|FNX0TaEXdi=|2#g)g7QMeK!XwIKaG&l{e!kc;6Q3c!7NX%9`B{
zavQ(=Ba+Zn?QxGfEkj&~?e-labiy=vZT7puFt{>955e{bZ7Y}TLep2DDEzp;1oMyT
za~NxQCT#T~`*_q!EY~syg6n$5@E8z`K}Nu-v}q$)tg6k0t9?wk2~CwG3UAld5vvlN
zoe+g<_Q#9z_I3=PJ!2e4Qfn}8qHsK55J^}3oaR+?&NbXGZ4~xUN<83(X{AQ#n^506
z$5})SmJIb~k^XSr%;U%>_vr3L?s>cCMhMKf3XVFrM6}TUM%7o-bNG}Q{5at^M`?zv
zm@6FgA-efE%vV;(LvU$#vk4y<;eu0=X@Qkf*mUH_(y%=k8(ulN35vr$v=4s89hO#~
z{R@EO6Z-(N=kX+2N$(cY-~Yo`(pdbczG^s+8dSGZyM^jLs;HiE(Rn$FdSH`L`i|NN
z(ksr;&6mFwh)pcf@5wM_gbK`@{j!R7e$76SE{LuwF+%daiv)NLeQf_}iqQ2{yP(g6
zVwzWd4A8q`A?&RQ%|*xm^u+^O
zfkO;=Y)p~|;1}rBJYX4tRga^Q!vr|iBWTWs3q%wb*eP5fPjP|E6&D~D%bzrD@cm!;
zcEk7Y<-kU=)(fxUf@m|C!aBtihH9oTG|3dm;^FAVvOJ(*HZ8;G5L_pkD9p)`wUWOm
zV_|I+f{QA+eBfAE0khWE7b6MqSg*jJ$rjc(BPo`)`er2kc%&G~dM0X%!$@8xXk0Op
z$a>j|97e)~uhWbq^0LE7BmwzlyRx5VB)m3zi(({zCK<_jk|LxS$*-728AcF(h^GYM
zEsqiM41RbA&-5_fmZfTThlG)&AYg_KK=jE-MyUrPiM^}YD~zOERhMK#u#96VU@df$
zi=4)v*dP1xfD_4C6uS4aC|)M%bYK&pL3d5$$FNYScJ?mCkKTpnw9cu7=X6LcTImYH
zyr-QUEZxDvSg(1GPRoAT{t96$o#*5YpBrIEjjRutvy&`mudtlGn&s5?W;wJw{vmdv
z$7S*T7~ZGYjs>x3wo{#C3Y?QBjoT0HO5-~}h9RU+he(pFTU9A_*~b$37{9s?AUmHY
z4&V9lK24-oaJp(ul5h8G$9|P(Ae)Z$;yg5-j$}Aby;1t5iV#Sz`7Yk(J>fi8DbAz2
zA!AfvBH@bIzs~;iPR)6CrE{Kl?K7@doab{0dY9%r5C$9NzMKal{Z`KNeui+KBPS<0
zkFuxz`TKJFK(VlYIFE3Ybk4JO?aIvKC0NY5FoRD)d$EILlp2XPu03*%O{A@{J!2RL
z_O)fo=U{Sc7G}tEb7PA#mTmwtJ3ItapO^h*NY#c&_ELZRjFwR}RAc$}#*fmEC~l1F
z$5+P>Y5BhMSepp>=5Omll$Yfz{TceJ!bxdV$7VV12rFkW>2A1>khvx1IKWan%OxeF
zSvIBmiWPN?Tv<794&^77r@yRLMuQ^lf72-VP=V#_EE3pCQ?jEV_N1RNMx0m|(q3m!
zeV2m|IxU}iD?XPZ0ym7Rt{K%TT!BN1$_&ZIlmm>AML3L$uWi>6)D1V@f@D(5x^mgO
z#+0pf)ueaJC_s042)!m|IWw0GqZNpnB(DJr}C{&Zhk+P9Wek{LN2
z2m#{RtlBW+boH$z!^$3H?DMT9zxyQ-UWt>oM@1Eps823=Fz41_6!Qvth!a)l@rk4@
zZWr|-EVbi`AsAHv4-99AkqJfa2~(jyrdiL}<@*JE^}Bxwp-q{$=L8b#;#s1&CPN;(
zA7TNh4;e)IKQA7R&QpXW;d>myZ`M>g9OY#ZrbV~BHnd>poQckJRw#iycr_{wCP8Z$
zL%C8Kh7#8U^cW|%`h2qz*U3G}(BitN7V97hDrx2O9vnyTLzIh9+vOl@QX_$mUE-LfH#Qm-#j72H{uE@`1bGLJPGi3
z`u@$wvU()Ct6BzDCp7DW-0e|PgM?otzkjnghfy4LyJTz9AH%*)dX7-8a4alA&Srgf
zvLI5nBAxBvP5U0u#-$n`r%M$MJ{B}{osN$`0R%p#P%ij5{#K2Tqxe<$7$+|%eC!cO
zb40Zid@DZwD#-gz_~47jed6OBh5jCVJo$~n$F=iye+>Hu)t`Ov@!0njVM)G5Zyh`J
zEq3E&!gl1}T(-a6qH1FtsoLVcYZI%DtSBN7KU7i3tH|A3KVy(m+MG|?1*^Jx&H+C4
zLM!_W;quP6?a;5)zq#rwcU2uT=JZOyIq@2{(4M0@wm0YmoPSC5fPCjpl3)ia0}sb!
zz9vFpO|1AP6@cl1E|M{r_9IuzR*aKgjog=(?S#FdURfDfC;lr}*i$CJjqQZ|-GA>$
z>G3KjiCnN0T3B+)Z)|}W(!u1^l(cV{>2$FF#oL>}M^&Bw|A8bBmM}pH1lK50qj8C%
zk{B!rBrpRr7|ZH{ViBZu3y=X?M1g=XT<2?AYq5T9rL9)mYNfT6C@KlcCJ0el!40Cd
za$>aN2B?+%-=A~uED1ro{Qh5GhMBqd+;h))&U2pg?9WcGfEkcEQUS9s+yZ6?lfsi!
z|4$i`-vicdpwmsW0y}roccaccDgVY#hHt~>
zzr!3P6G?|%*>2K$6770oo31u0bxC|Jpf^V-clNg{wG!b;{M-HvKWrV=#L-B#&XQ}%
zy)U38YRPq2>#SXfo-M$L@*rMIu1&48A79-D=%K4zpqKlez19{vb3^hddKM4IOB6fX
zN?MYTv%btNcJ_0uqcGQ5pDo*n)7A
zJ>gakO=w%L`Cnyl{^5pr_@|0DwBE1Su}|F%H&hpD86GI_aL`aG0{_luWfC$
zUJyw^GX#0q01q8hT5Cq_rK+jrSufb0;aqKpe3@HoamSVMA+NNpjyU88=EsISf+4%Z
zO!pHc1_v1**8|+@Xk58CTibEP;c4}yZobLr^j`qmCj0vI-DS+*x+4s!SiTQPlaJ&x
z=r3T6h8{Ebb5*=ie_W7@>$%yReE#QV*@wdJ=*KdamG&_nX%qV(_ag?w=MJmcwIb
zcKlfK6AvezIHm<(n-LQ!=rzqI#T|i#R9}zbNE{*+$~%{9KKEH)5n`x_^=Y30GNEhl
zFO}j6$_LY$-RDz*cN79bclR3tLW;g|(koMdhfA=vngdx%3TJyfvI<8#s81*zGSMLekZ+`^P__h&7i8?a>FR_Su6GG(nNWlwv2
zu5a;b`ldhM;@{hs*mmM~`-|W0{~z+ZyFn_C-)#z4+HrW(u&=u7>tFTl7;7D{Wz|aC
zvDSY0(&hl<6pgsJcW<1X+#;7Q-#m!{5IkO8Yv0|%VkB|nrOBh~U$ZSO4q~^znrr*R
z{`S#pLiRPpH8`9UeG`=SA8K_afmQl2VHI?qU%s}=vnwmc51QN
zy8oSrjs3A28yBi1
zTOt#l6i9!%*Cv=7{C{3!W8-+aZO2pLEf^CIKrv
zPt4J^P`K1Kwbn?u#dt;@8+DLDt}{;37HoQ$D?hy64Zsk_vYP6&ONOeJ3U%CW84E91|fdYk)vFPr^<=0D?B%b!&i
zd2)bC+1Ou*+MP5d>wiOlNE0PA5}Gk;U(nX{oZbs%;flp;oP))A3*W%Wfii~0FbiA||9
zFHtj(AaR?rAmPF7E~Q;rUCN!bb6RrS-RXQ~H9=={JD;gEm73^a?M
zDn9-IRFfPuV#?QkaT@b^}eNx22Eud|HhAJe|jfadBl4Gt3+k%%@In1fY
zWTTk}^v<_`VcahjdJkCD!9wk
zhV}!Z`EQqq`br3zoXIt#vd!_;Fxox7j!+_MbZnUIk1wBDdWnv&L5R1-z(+#s`W3>?
z?4jPzC)}T7yq^#8^S`Mlbu^oGs|hjQqRWQUMFqBIH1kPhWwRBp5~cp_
z?V<>&Xy9-r@}r|XzyA`4^YRa49FFa?ZL;4v|L;)bRE;K;;;?bXXrHc_?La?=fpv1OCAG
zMa;Qes0Kx9kh?tnkKiWB@v>4Z{yjri;!bjbS0hiFQF!qP0UywfNVpc4$9t%%vVfkA
z?U?|@QR{(>HYZHu^3v~{Z{N;#wXij=Zt8~Rk
zj*zyn@L~~jW3h;kb<*_4Yt7^wHu4nnDr**uUdw=NNw}bIn7+g9;48u!1WNW}DWuqH
zsh2r{Z+4Z48@td-Z+{Vm8$zO$f%|O&?vDk5_@4BaeBxXBT`85MHI_zyi>uLp$@01d
z>)L4aRoU-6A%xZF1E|9)`{k&seTg`62fDbTQde{&5Ik4j%3*+RhLJPiOHOJTvqjc!j1_DP{
zfunWc=t^+(hVKjeNumGHY~d)l1Iv%0K|U#bm%6;t-v6*4pkdlo`e&}y4%)C(MgO9m
zN00#(s&YutP8imOH>+17%6PQijHMbDh)I>j>axILId%h%&-~F(Bs%$ALdvmQ78wMl
zmD!{&qq6wCBi=?K%w6>P;0rFttXewu`CN3-{+9j{B3p0a~ZLCGcN8!o~e6(Sf<5
z13c%2Fek%)$Odt^w|Y5a(oWF
zVK90P&Xga7B4_3?xFiO#Jd#f);zV9uvJv~1rx%~?9{J~MJW*;?MKk-(f#SZ3bATxB
zarQc@VA;|$_`#9ygM&OxxO<}yXS5T8&K#5)hvuANw_~bJ?LRmVRlyKTTu5cH-Mk%P
z&(m#h-LOa%7!-h
zmcFJFBDLOsvCfj2nIiiiSBSjqYw3fCiQ=xiuKl_k8Uy+IC=`)l%vKML4|kgx7#l7r
z{z=}V@}XYx7N5CZ-9-jH-l_SY0!QRVlCD*B?aHiBg5UTdGLqEfAF?U8o5yilqQzQ!
zp=N$pD|T@Ue`HaG9
zoo9~rlMctf@XHvuwwUL@J%Q^eDb@kj7W4gK0PB4o3L;uZ!aIY}^G|>T>}7eav~S+Q
z4$Fl-EqH~@N6v|l6V1R8#@VpT&h>aZ*YjsH*VQ$8ujX(!_sW*P+0xIt=xsMMX2kBy
z;|`^c&|aJqEZ84-=@5p=3ptj|D{PyVV{K=H1i0_TJM+7pL0Y=n{hKU4eyAPt4Uvm;
z-w=8E<5118-BQ!%X@~WRr1y<|=Gi{4qE9PLo+HAruS^`;eR=h)){z@dN
zBJl|*u#~QrGPx^W__bY4vR$p9t0WC&K0jm0nLNYQ-*CB!=c)swas3}G^#ajXC;gA7
zcq_KpO>iT>w;)9TKF}_=6)$6{#3QFiCv}pqic~#WdK$iTthok*Et?8?Ya(*(+Yxiujf&hkG>KrMNn8?CdV^k7J!T
zi}6VEjo_b}LtVmy$cG6@uRgZs%TCpq<_;6@G6_a
zYWnVQfyZw8<+t43B=EXchwF0_MrGF)-qyFp#=BT2w%39Yo2J_4ZKgDi^edeq(vbJU
zfiJgaU-cKP1qK0cP;2%N_)EKN
z7*?rNu48`LoQRJhu4v)=r8)_n^oaxFm{n-6ylN$@C)0sUYxceF8*Xx?Ew*zy?+{Vn
zVlJUIn|Tat`RNSd%@$Kn)*kofdG1Xm*FxEedY9Wa^OXSf8E^nRnXTDZ(EY_SdWL(t
z&wasLTRJPN(;bviW`L~K{=w|Uh0kle@jS7IuT3Fq6Nr8v{&$cHPDt@phThvzT5ILS
z>tu5+loPJ*tQSYg{?LLw*^HK`HT#8^*$Gn`p*R!#CH-VB>L-;`Ofj8G)AK74KnnWV
z(|C&s5QGxHeXP@!jyZY>lcU^?WRhI3;~8|!u0g_QIZ6+ABr0S%Vsx5)uY4Bh2Wi+@
zY)nKMQZP6&86{y;VN9YtlvEtKq)2Z<`)}XG7wrG&*ITo{#VdnT_Gw=$pPS#go=ynE
zdC_0+Lg_McNd!win$=}w^vv^G1`(ewzyu=5-tTa9N
z@f>qmYDysWANW(zXR5ydqUcpIywDCQHZ~;74dOxuzHCQlxtZ4N2VN2|l&((Dm~N?}
z6z?**Qv3wFhfMdry5|WWQGz*p_eG$WX!tDGe+nrNkmRD21udHQLo%
zQs2G><_H+Mm1S$wcs~Y-*6dv7=IjEkPr+9rOc83Yvmvf#_pO`YI^LhB4c=U>-ax^k
zSgNLL^GYS(#|9?Y=o=1(1yQG#rN^f>m}5OE`RHL$9YHp!L*WpRpRWSKQZsGZMftiQLCY1?NyF(UVw
zSXgRXzH$^XsZicw2kG-f-%`;;DM=uz6NrFrBn
z?T5{}f=cMFb{pQS5QmME=$(}g{u7w!=f8aIj7R@z%?&Ddv>PxN}KytX{yAn#5i;`!P`!7gDN7=aq8MP!L>G7Dv
zo9Ba^82RP8WzSI0S7f|D`bb`udtmId^fG+9ZVh4*P?OU|e
zHb6cX95^63V?490Ya71U+J*-qcBjrHsVxl?w`Ch1+5Q^F;j^r9xcbx0XAaZdtFj0!q?)xih
zvwVx!@Dssv0UDEKp2kGV&gi(O)pwOyiU)Ho3}=rkyV$o?nYU=h)W~d<{p@wIi(B1`
z2#+J&TD!+3>M4(_ua~~t=T?(m;kS_
zE2TWy)8jCrkC^b>`OY^?juJp-*iQjrjCjQTeF0hW6DG`}4lMLY?;upVta%9EkrRn|qC8&WoR*cW}fyl63fsMnO?C2m0xh&4<(@?xdM{P3CU(FH*
zoh_DG8OuGOUiwchD>EpvVE?zN!>6FsR&%x;wnrNp7`#pkF_$(OZM$(_)AwH+_l&9D
zxO;lzmY=dUJu&WO=tTaTaSyiRo^6Nfjk{a>aZ8v$+KI=bCE~5hazaYET9y@%2YWr4
z%<#qYEv*rmk;E`6n#O~QNc%`!?YaD>4Ah3%$D<@2j!kAxA6b6V2*d8>cMbk;@z
z4Zlio0k4dV_8e_0s)gFe4M8&Cc$I`X&|XP9N3vAGMqKuXhf?eD+8=28bB6#6w1W(p
z^ZKuL`T1TGjdG}`(#WcgQLnSKtq+Q;nm#&uzNd7Tjmsfz%&oxos+?dnEhQ8k3@sso1r$8N
zES{k_3Iy04c$1jf{DS`4*c5$DS_UNg$f;)@i2FaNjX8<~r
zT3`Wq*gjQ3dN2Q}g<*2+kKM8K{E-EtbaIsI$_YjD`og?oor#D4*g$hH{0Gxr5{t?v
zMt1+2@E@DEC;`dtraSZG;El1U&tX+*`7q$T=_lXmCDAnNXUeY10Vb9w#rAtD!!g6F
z00n_lHtweiEdW~$2KnrOvlY9?e0G;C8)ptPGe9MZec`rn^bsDh?feluz%5wYQUeQC
zueed)(*@dx^{;q4_EZHti!EK)XQ)?7j|vC2DuPHL6)eIhdt0`?`dEZQ-|EiO%8Ju^
zlK``39ZCKh!XLE22fe_SwY*|Sxb9!$qGRiAxcu9wH3H9e_?A8)w#1o{!LA7wU|%B0
zwg5f8il!ktASKM{1AQbF$D8D9eY1_VASHR=AJfR-JBE%@p#w^a6ETdaH!Qq1O7A
z445N8yrLfE+>h%a!56Rc-u*-O-S>L$Ui5$Q?!WYL=ly3snfJ4NXx_i(^Z(y@$MRae
zx_}7SYH~keva7G|IdF4p_PNicr)(I;KtSQRTnE--!?Nm4m!`)39`Ehxv2hjq?4gU#
zn)Pv1{)EzH^BdtjAM!CBR>9`J8m!z`GDVf)fQ}^LnxK>-V_YLlsXYG8z0DGe!o5*$
zZMg#7*M%tGnm5xSNidqoFjDGUq`dZJYjgRxLUj=jpe5L^Zsj_u&O(hGH=&XPA>Rm$
zz1i$t?4AjrVrKb6a5eV@}mpXv?fZWHKL4i}{WjIPG|b*2aH90w9{Yt;+8DF0
z;HQjPazXTrS@VhrfD`e-{cza?fZSF#_u}9l$s-_C3f+~Kg-Cz7ySI)@Y6TROnw8>R
z2ookR{j!Q^b)JlqwVWT<;!y(sJ$K+{^X7}BoVThi$*`XyZn$#oT=TeHLgaR?Nq06~
zTxgYjnhI}IH_=xkzoypl<6(ZR(vN$9{ypXn()E||z6?;HFDQ^NxD5nuYwuo=vY>gl
z#;bP0u*gp69)EFol~(*7FUeKK!@^}BrOf1n2!CXUO!G>!c&6y#E{W?C00v;koUV6)+%a_$
zW2(#3T<~jh=fW4H?TO|iYfnl))PuE=HQ`Z&?2y&%E&q6fucaX&pH!;=lg9>QjT>Z%4M-e|t^&`K0*;Ief
zxe@33F!XnScmk_*@-W8Kn=!4eVU;5DgU!#vm$>LK(LAu%syUY6!RHMcwN4eQX2+j-
zfhJU`hwtTKb=|yGD*9+~)4bNLgY+yVC#Og>6+pGcKd6#;7qqi
zLEx6va5lQ!#%#{TJ#dD~+C*xPl3kDv5NcGXfaJeLJei?Q_V8ze5a)2dQ21YfQuR70VwGjNX={$%UczEgeG-q14uZ$FpQgLTEy7L*nY#|m|tqg1+aAU6nA99B0UFFcfdkulDJ~LRq~S{bR-?jg->ZK
zSMdhoYKfG2r_A{$cpju~#*%Za?3z9=!`p%IwTjT6I^b8A{c}O?z_MUOyVIP7tWOl!dd*9bR8{crOetwUiW+9uZ
z>=~>QDO3GU+9?w)xFGys*}%;si+kor%Q}(rUS~ddfCkZ)w_)3GGN4i|H1!wawM079
zcPI%)G98{99m&gY{z906FKY}ydo_nwJ&?vk93b?+MPnYpB_D0{jMAc9W*z|FoV
zUL953^UMSofWS7Jnjr>(vx@|Qf%O0&ZB!)fOdXccF6eNRS#%t|KFjF`n<8Eu!n;az
zKiPfdo^Lo}e!g0Gx$Ai0W%4Phup$V7y0U~I;H-~ZgF?=Y2LlD`;eo9oOJ!9is2k;g
z_#b+z{m)LjqwP>ab|`I6yOvWdrap@~j}$9O=(=wV5T17xM12WFo%z=ucE-;A1_1o*
z2?1c|aj7ZL6DMjp6V#*AxS+V6ePRVjOV39e7tN24f$K42`Pa&>?euqU^v}osDb41Z
z%TS`fUVQwG1hZBLg3-)J#*;HInqG0K6xrGP`NbCMDpa`;-O-W{Zq4yKeRgwgimsh3
zeNro#+}^y!aBYIF_0qLy=C4Zme*2ZJt?|ueQ_?Cqa5R0IB(g{v0@y38%H;hx*z7VN
zfs5!u&c^g46$a0aU^1)FNKaIip`eBm1_vTZAD;tU7^JTGe+2_j-Los?v8`_$4D$l5?0
z2{`dod$5PG|7?V}qz2;4{51ku+Lk@p{0=F5C;#O1N8Dboe2%R?Qi|vBE9P
z5_>Xpqsq9qf4HBD3DCs4A4TX;FX`>DE5xS
zA6(6Yy3J@fdP!hJ_l(4TZ~Ka<*Rl?d#&+8ANTzusIjs(#huh1%uceG4IFmB#6$pLM9Ki&+)@C>U}-Vdg9RQyOgI-Kn<)rr;>7TGU3a(9vE1
zq8x66!bcfYv_E9yMfYOY`cOo98mVpr&iI4S>Ye6~!(CAn$Jo$nbM15dqGsiafOBl1
z&e=*nn(?r4~+a#Uecy?Septa9rL+I199^x{RK)s^F(#$(FRNiR1(i>iev*VCUmIYUvNBVl`(ecZY
zXOR4|BhBD4$`EWdcV!d#f+xMa5<~rDV?2o~_7K(9Iy?(*8+*Q|Gq@q|b14k;fRp}<
zFJgNU(J^#?1;u=(5NGyLxpU*qZXWFUxA~o)Ev0qM)D?&yn=734%g0>@l0RhTegTr}
zvM?MSHi7k9%L-7ju%S6Na?u2Vu@9N|vG2){?<#6CKN!pQ$wzTSw)%&Z;xtfl$hY`!
zY){K+sn*>TTw9N0oBmDP^vzD%rn@-Nj~&NRBUd1@&hD9~9TpvyD-kdn+GC!@ok$l5
zzp{RaI2Uy!=JEYhp2=Bv(x`A5f>N;}*CXq9?w4HjQ~7vXolB`GvT
zq~^|;T>?z=i)LU}ME1qj^I%pyH;|2pKlG3dFK!GV;1a3GOyji!K
zr_0>V8FZOt5Ml$5W~8JZWEQy{9~pGMT?o$;
zbS@|R3ucCy8G$MF!2yk-)R#v&{(gWR#bb
zWuahWKo{u7(U{b#v6qx`qm&yYDXvF*<@c3ia;nVr7gXjj;3l*cP5#u%92vX;^OP(m
zif7oAoD_5U9PMzinK33f&i`8f)Whv4mA)tL%e#k3Qd+=uI(9zCiwB3BXy(HLZO@w4
z&Q_uPo)+Z;!q72iwT$3)vG&dzTqybEwqrp0Tr=>q*w#shhp4k)r>KJE`$y5bHGBT=
z(jjOsqfAb3eXa~2E61(ChJa|fUR4t3lJX8fb0kvxasK7X0 DEB%1w5!0zBibN|I`{PO7N?(Vi<1z;M@RYmmL
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 |