Browse Source

Merge remote-tracking branch 'origin/dev-1.2' into dev-1.2

rengb 5 years ago
parent
commit
3f0cc68abd

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0005.java

@@ -37,7 +37,7 @@ public class BEH0005 extends QCCatalogue {
         if (chiefText.contains("检查") || chiefText.contains("术后") || chiefText.contains("药物")) {
         if (chiefText.contains("检查") || chiefText.contains("术后") || chiefText.contains("药物")) {
             status.set("0");
             status.set("0");
         } else {
         } else {
-            List<String> words = Lists.newArrayList("年", "月", "周", "天", "日", "时");
+            List<String> words = Lists.newArrayList("年", "月", "周", "天", "日", "时","分");
             String name;
             String name;
             for (PD pd : pds) {
             for (PD pd : pds) {
                 name = pd.getName();
                 name = pd.getName();

+ 2 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0006.java

@@ -45,7 +45,8 @@ public class BEH0006 extends QCCatalogue {
                     if (!CatalogueUtil.isEmpty(pdName)) {
                     if (!CatalogueUtil.isEmpty(pdName)) {
                         if (pdName.contains("天") || pdName.contains("周") || pdName.contains("月")
                         if (pdName.contains("天") || pdName.contains("周") || pdName.contains("月")
                                 || pdName.contains("时") || pdName.contains("半年") || pdName.contains("秒")
                                 || pdName.contains("时") || pdName.contains("半年") || pdName.contains("秒")
-                                || pdName.contains("分") || pdName.contains("日") || pdName.contains("今")) {
+                                || pdName.contains("分") || pdName.contains("日") || pdName.contains("今")
+                                || pdName.contains("1年") || pdName.contains("一年")) {
                             status.set("0");
                             status.set("0");
                             break;
                             break;
                         }
                         }

+ 5 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0018.java

@@ -6,6 +6,7 @@ import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.entity.PD;
 import com.lantone.qc.pub.model.entity.PD;
 import com.lantone.qc.pub.model.label.PresentLabel;
 import com.lantone.qc.pub.model.label.PresentLabel;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
 import java.util.List;
 import java.util.List;
@@ -29,10 +30,11 @@ public class BEH0018 extends QCCatalogue {
         if (pds != null && pds.size() > 0) {
         if (pds != null && pds.size() > 0) {
             for (PD pd : pds) {
             for (PD pd : pds) {
                 String pdName = pd.getName();
                 String pdName = pd.getName();
-                if (!CatalogueUtil.isEmpty(pdName)) {
+                if (StringUtil.isNotBlank(pdName)) {
                     if (pdName.contains("天") || pdName.contains("周") || pdName.contains("月")
                     if (pdName.contains("天") || pdName.contains("周") || pdName.contains("月")
-                            || pdName.contains("时") || pdName.contains("半年") || pdName.contains("秒")
-                            || pdName.contains("日") || pdName.contains("今") || pdName.contains("余年") || isDate(pdName) || pdName.contains("年")) {
+                            || pdName.contains("时") || pdName.contains("秒") || pdName.contains("半年")
+                            || pdName.contains("日") || pdName.contains("今") || pdName.contains("余年")
+                            || pdName.contains("年") || pdName.contains("分") || isDate(pdName)) {
                         status.set("0");
                         status.set("0");
                         break;
                         break;
                     }
                     }

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0065.java

@@ -35,7 +35,7 @@ public class BEH0065 extends QCCatalogue {
         } else {
         } else {
             MenstrualLabel menstrualLabel = inputInfo.getBeHospitalizedDoc().getMenstrualLabel();
             MenstrualLabel menstrualLabel = inputInfo.getBeHospitalizedDoc().getMenstrualLabel();
             String text = menstrualLabel.getText();
             String text = menstrualLabel.getText();
-            if (StringUtil.isNotBlank(text) && (text.contains("未行经") || text.contains("颜色")|| text.contains("已绝经"))) {
+            if (StringUtil.isNotBlank(text) && (text.contains("未行经") || text.contains("颜色")|| text.contains("已绝经")|| text.contains("未来潮"))) {
                 status.set("0");
                 status.set("0");
                 return;
                 return;
             }
             }

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0068.java

@@ -38,7 +38,7 @@ public class BEH0068 extends QCCatalogue {
             if (inputInfo.getBeHospitalizedDoc().getMenstrualLabel() != null) {
             if (inputInfo.getBeHospitalizedDoc().getMenstrualLabel() != null) {
                 MenstrualLabel menstrualLabel = inputInfo.getBeHospitalizedDoc().getMenstrualLabel();
                 MenstrualLabel menstrualLabel = inputInfo.getBeHospitalizedDoc().getMenstrualLabel();
                 String text = menstrualLabel.getText();
                 String text = menstrualLabel.getText();
-                if (StringUtil.isNotBlank(text) && text.contains("未行经")) {
+                if (StringUtil.isNotBlank(text) && (text.contains("未行经") || text.contains("未来潮"))) {
                     status.set("0");
                     status.set("0");
                     return;
                     return;
                 }
                 }

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0088.java

@@ -28,7 +28,7 @@ public class FIRC0088 extends QCCatalogue {
         }
         }
         Map<String, String> firstCourseStructureMap = firstCourseRecordDoc.getStructureMap();
         Map<String, String> firstCourseStructureMap = firstCourseRecordDoc.getStructureMap();
         String diffDiag = firstCourseStructureMap.get("鉴别诊断");
         String diffDiag = firstCourseStructureMap.get("鉴别诊断");
-        if (StringUtil.isNotBlank(diffDiag)) {
+        if (StringUtil.isBlank(diffDiag)) {
             return;
             return;
         }
         }
         DiagLabel differentialDiagLabel = firstCourseRecordDoc.getDifferentialDiagLabel();
         DiagLabel differentialDiagLabel = firstCourseRecordDoc.getDifferentialDiagLabel();

+ 31 - 12
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/BeHospitalizedAI.java

@@ -1,24 +1,39 @@
 package com.lantone.qc.kernel.structure.ai;
 package com.lantone.qc.kernel.structure.ai;
 
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.lantone.qc.kernel.client.CRFServiceClient;
 import com.lantone.qc.kernel.client.CRFServiceClient;
-import com.lantone.qc.kernel.structure.ai.model.EntityEnum;
-import com.lantone.qc.kernel.structure.ai.model.Lemma;
-import com.lantone.qc.kernel.structure.ai.process.*;
+import com.lantone.qc.kernel.structure.ai.process.EntityProcessClinic;
+import com.lantone.qc.kernel.structure.ai.process.EntityProcessDiag;
+import com.lantone.qc.kernel.structure.ai.process.EntityProcessFamily;
+import com.lantone.qc.kernel.structure.ai.process.EntityProcessLis;
+import com.lantone.qc.kernel.structure.ai.process.EntityProcessMarital;
+import com.lantone.qc.kernel.structure.ai.process.EntityProcessMenses;
+import com.lantone.qc.kernel.structure.ai.process.EntityProcessPacs;
+import com.lantone.qc.kernel.structure.ai.process.EntityProcessPast;
+import com.lantone.qc.kernel.structure.ai.process.EntityProcessPersonal;
+import com.lantone.qc.kernel.structure.ai.process.EntityProcessVital;
 import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.Content;
 import com.lantone.qc.pub.Content;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.doc.BeHospitalizedDoc;
 import com.lantone.qc.pub.model.doc.BeHospitalizedDoc;
-import com.lantone.qc.pub.model.entity.*;
-import com.lantone.qc.pub.model.label.*;
-import com.lantone.qc.pub.model.vo.CRFVo;
+import com.lantone.qc.pub.model.entity.Diag;
+import com.lantone.qc.pub.model.entity.Lis;
+import com.lantone.qc.pub.model.entity.Pacs;
+import com.lantone.qc.pub.model.entity.Vital;
+import com.lantone.qc.pub.model.label.ChiefLabel;
+import com.lantone.qc.pub.model.label.DiagLabel;
+import com.lantone.qc.pub.model.label.FamilyLabel;
+import com.lantone.qc.pub.model.label.MaritalLabel;
+import com.lantone.qc.pub.model.label.MenstrualLabel;
+import com.lantone.qc.pub.model.label.PacsLabel;
+import com.lantone.qc.pub.model.label.PastLabel;
+import com.lantone.qc.pub.model.label.PersonalLabel;
+import com.lantone.qc.pub.model.label.PresentLabel;
 import com.lantone.qc.pub.util.StringUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Arrays;
 import java.util.List;
 import java.util.List;
 
 
@@ -110,19 +125,23 @@ public class BeHospitalizedAI extends ModelAI {
                 putContent(crfContent, medicalTextType.get(3), pacs_text, Content.pacs);//辅助检查(暂用主诉现病史模型,之后会新训练单独模型再做修改)
                 putContent(crfContent, medicalTextType.get(3), pacs_text, Content.pacs);//辅助检查(暂用主诉现病史模型,之后会新训练单独模型再做修改)
             }
             }
             if (beHospitalizedDoc.getInitialDiagLabel().isCrfLabel()) {
             if (beHospitalizedDoc.getInitialDiagLabel().isCrfLabel()) {
-                if (StringUtil.isNotBlank(initial_diag_text)) {
+                if (StringUtil.isNotBlank(initial_diag_text) && CatalogueUtil.numberExist(initial_diag_text)) {
                     initial_diag_text = CatalogueUtil.removeBetweenWordSpace(initial_diag_text);
                     initial_diag_text = CatalogueUtil.removeBetweenWordSpace(initial_diag_text);
-                    putContent(crfContent, medicalTextType.get(6), initial_diag_text, Content.initial_diag);//初步诊断
                 }
                 }
+                putContent(crfContent, medicalTextType.get(6), initial_diag_text, Content.initial_diag);//初步诊断
             }
             }
             if (StringUtils.isNotEmpty(revised_diag_text) && beHospitalizedDoc.getRevisedDiagLabel().isCrfLabel()) {
             if (StringUtils.isNotEmpty(revised_diag_text) && beHospitalizedDoc.getRevisedDiagLabel().isCrfLabel()) {
                 //修正诊断
                 //修正诊断
-                revised_diag_text = CatalogueUtil.removeBetweenWordSpace(revised_diag_text);
+                if (CatalogueUtil.numberExist(initial_diag_text)) {
+                    revised_diag_text = CatalogueUtil.removeBetweenWordSpace(revised_diag_text);
+                }
                 putContent(crfContent, medicalTextType.get(6), revised_diag_text, Content.revised_diag);
                 putContent(crfContent, medicalTextType.get(6), revised_diag_text, Content.revised_diag);
             }
             }
             if (StringUtils.isNotEmpty(supple_diag_text) && beHospitalizedDoc.getSuppleDiagLabel().isCrfLabel()) {
             if (StringUtils.isNotEmpty(supple_diag_text) && beHospitalizedDoc.getSuppleDiagLabel().isCrfLabel()) {
                 //补充诊断
                 //补充诊断
-                supple_diag_text = CatalogueUtil.removeBetweenWordSpace(supple_diag_text);
+                if (CatalogueUtil.numberExist(initial_diag_text)) {
+                    supple_diag_text = CatalogueUtil.removeBetweenWordSpace(supple_diag_text);
+                }
                 putContent(crfContent, medicalTextType.get(6), supple_diag_text, Content.supple_diag);
                 putContent(crfContent, medicalTextType.get(6), supple_diag_text, Content.supple_diag);
             }
             }
             JSONObject midData = loadAI(crfContent, crfServiceClient);
             JSONObject midData = loadAI(crfContent, crfServiceClient);

+ 16 - 8
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/FirstCourseRecordAI.java

@@ -47,12 +47,16 @@ public class FirstCourseRecordAI extends ModelAI {
             //putContent(crfContent, medicalTextType.get(0), firstCourseRecordDoc.getCaseCharacteristicLabel().getText(), Content.case_feature);
             //putContent(crfContent, medicalTextType.get(0), firstCourseRecordDoc.getCaseCharacteristicLabel().getText(), Content.case_feature);
             //初步诊断
             //初步诊断
             if (StringUtils.isNotEmpty(structureMap.get(Content.initial_diag))) {
             if (StringUtils.isNotEmpty(structureMap.get(Content.initial_diag))) {
-                String initial_diag = CatalogueUtil.removeBetweenWordSpace(structureMap.get(Content.initial_diag));
-                //String initial_diag = structureMap.get(Content.initial_diag);
+                String initial_diag = structureMap.get(Content.initial_diag);
+                if (CatalogueUtil.numberExist(initial_diag)) {
+                    initial_diag = CatalogueUtil.removeBetweenWordSpace(structureMap.get(Content.initial_diag));
+                }
                 putContent(crfContent, medicalTextType.get(1), initial_diag, Content.initial_diag);
                 putContent(crfContent, medicalTextType.get(1), initial_diag, Content.initial_diag);
             } else if (firstCourseRecordDoc.getInitialDiagLabel() != null && StringUtil.isNotBlank(firstCourseRecordDoc.getInitialDiagLabel().getText())) {
             } else if (firstCourseRecordDoc.getInitialDiagLabel() != null && StringUtil.isNotBlank(firstCourseRecordDoc.getInitialDiagLabel().getText())) {
-                String initial_diag = CatalogueUtil.removeBetweenWordSpace(firstCourseRecordDoc.getInitialDiagLabel().getText());
-                //String initial_diag = firstCourseRecordDoc.getInitialDiagLabel().getText();
+                String initial_diag = firstCourseRecordDoc.getInitialDiagLabel().getText();
+                if (CatalogueUtil.numberExist(initial_diag)) {
+                    initial_diag = CatalogueUtil.removeBetweenWordSpace(firstCourseRecordDoc.getInitialDiagLabel().getText());
+                }
                 putContent(crfContent, medicalTextType.get(1), initial_diag, Content.initial_diag);
                 putContent(crfContent, medicalTextType.get(1), initial_diag, Content.initial_diag);
             }
             }
 
 
@@ -60,12 +64,16 @@ public class FirstCourseRecordAI extends ModelAI {
             //putContent(crfContent, medicalTextType.get(0), firstCourseRecordDoc.getDiagnosisLabel().getText(), Content.diag_basis);
             //putContent(crfContent, medicalTextType.get(0), firstCourseRecordDoc.getDiagnosisLabel().getText(), Content.diag_basis);
             //鉴别诊断
             //鉴别诊断
             if (StringUtils.isNotEmpty(structureMap.get("鉴别诊断"))) {
             if (StringUtils.isNotEmpty(structureMap.get("鉴别诊断"))) {
-                String diffDiag = CatalogueUtil.removeBetweenWordSpace(structureMap.get("鉴别诊断"));
-                //String diffDiag = structureMap.get("鉴别诊断");
+                String diffDiag = structureMap.get("鉴别诊断");
+                if (CatalogueUtil.numberExist(diffDiag)) {
+                    diffDiag = CatalogueUtil.removeBetweenWordSpace(diffDiag);
+                }
                 putContent(crfContent, medicalTextType.get(1), diffDiag, "鉴别诊断");
                 putContent(crfContent, medicalTextType.get(1), diffDiag, "鉴别诊断");
             } else if (firstCourseRecordDoc.getDifferentialDiagLabel() != null && StringUtil.isNotBlank(firstCourseRecordDoc.getDifferentialDiagLabel().getText())) {
             } else if (firstCourseRecordDoc.getDifferentialDiagLabel() != null && StringUtil.isNotBlank(firstCourseRecordDoc.getDifferentialDiagLabel().getText())) {
-                String diffDiag = CatalogueUtil.removeBetweenWordSpace(firstCourseRecordDoc.getDifferentialDiagLabel().getText());
-                //String diffDiag = firstCourseRecordDoc.getDifferentialDiagLabel().getText();
+                String diffDiag = firstCourseRecordDoc.getDifferentialDiagLabel().getText();
+                if (CatalogueUtil.numberExist(diffDiag)) {
+                    diffDiag = CatalogueUtil.removeBetweenWordSpace(diffDiag);
+                }
                 putContent(crfContent, medicalTextType.get(1), diffDiag, "鉴别诊断");
                 putContent(crfContent, medicalTextType.get(1), diffDiag, "鉴别诊断");
             }
             }
             //诊疗计划
             //诊疗计划

+ 4 - 2
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/LeaveHospitalAI.java

@@ -49,8 +49,10 @@ public class LeaveHospitalAI extends ModelAI {
                 //                }
                 //                }
                 //出院诊断
                 //出院诊断
                 if (StringUtil.isNotBlank(leaveHospitalStructureMap.get(Content.dischargeDiag))) {
                 if (StringUtil.isNotBlank(leaveHospitalStructureMap.get(Content.dischargeDiag))) {
-                    String dischargeDiag = CatalogueUtil.removeBetweenWordSpace(leaveHospitalStructureMap.get(Content.dischargeDiag));
-                    //String dischargeDiag = leaveHospitalStructureMap.get(Content.dischargeDiag);
+                    String dischargeDiag = leaveHospitalStructureMap.get(Content.dischargeDiag);
+                    if (CatalogueUtil.numberExist(dischargeDiag)) {
+                        dischargeDiag = CatalogueUtil.removeBetweenWordSpace(dischargeDiag);
+                    }
                     putContent(crfContent, medicalTextType.get(1), dischargeDiag, Content.dischargeDiag);
                     putContent(crfContent, medicalTextType.get(1), dischargeDiag, Content.dischargeDiag);
                 }
                 }
             }
             }

+ 11 - 1
kernel/src/main/java/com/lantone/qc/kernel/util/CatalogueUtil.java

@@ -295,12 +295,22 @@ public class CatalogueUtil {
     }
     }
 
 
     /**
     /**
-     * 判断字符串是否仅包含数字
+     * 判断字符串是否  包含数字
      *
      *
      * @param str
      * @param str
      * @return
      * @return
      */
      */
     public static boolean numbersOnly(String str) {
     public static boolean numbersOnly(String str) {
+        String regex = "^[0-9]+$";
+        return str.matches(regex);
+    }
+
+    /**
+     * 判断文本是否包含数字
+     * @param str
+     * @return
+     */
+    public static boolean numberExist(String str) {
         Pattern p = Pattern.compile("[0-9]");
         Pattern p = Pattern.compile("[0-9]");
         Matcher m = p.matcher(str);
         Matcher m = p.matcher(str);
         return m.find();
         return m.find();

+ 16 - 16
kernel/src/main/resources/cache/1/hospital_doctor_info.dict

@@ -29,7 +29,7 @@ YSUTG06elB11BmT3b3UNVfcLCvtq0hz5
 7PZVj1FVfh2Io+OHkgSNkvcLCvtq0hz5
 7PZVj1FVfh2Io+OHkgSNkvcLCvtq0hz5
 6UscrKYMw4v8P2ShOC5pFKOI4m5riQ02C2ByB3hh+BI=
 6UscrKYMw4v8P2ShOC5pFKOI4m5riQ02C2ByB3hh+BI=
 fXNrVBlXBizT8b8P5Hmeldkkrh6n8/H/gwRqRnQitXw=
 fXNrVBlXBizT8b8P5Hmeldkkrh6n8/H/gwRqRnQitXw=
-JGYoZe648MIN8FrQNeLXMjklfZgPBRKNprWqmJzZL6c=
+JGYoZe648MIN8FrQNeLXMjklfZgPBRKNgwRqRnQitXw=
 nXdR91Es2DiuUDbO3rqcsUMC+eFxGQ9GJv8rF9h3FLo=
 nXdR91Es2DiuUDbO3rqcsUMC+eFxGQ9GJv8rF9h3FLo=
 33D6gaL/GxJnuFMTh78VAPcLCvtq0hz5
 33D6gaL/GxJnuFMTh78VAPcLCvtq0hz5
 CVnBTdgebJ0hr/uh/jonbPcLCvtq0hz5
 CVnBTdgebJ0hr/uh/jonbPcLCvtq0hz5
@@ -65,7 +65,7 @@ njTnL1btxEDtq99E5KThDfcLCvtq0hz5
 0xAFPK7jwC4KBxgRBrnq2z/I/rdJJEUBC2ByB3hh+BI=
 0xAFPK7jwC4KBxgRBrnq2z/I/rdJJEUBC2ByB3hh+BI=
 tyEdXdJwvU+Lv+ojadkaGKEZ7F8pO+gZ
 tyEdXdJwvU+Lv+ojadkaGKEZ7F8pO+gZ
 dvaBkizYTOp97iiMvreXJPcLCvtq0hz5
 dvaBkizYTOp97iiMvreXJPcLCvtq0hz5
-Rw+G/waIBe/Ak8+fSHSujh+eiLQ33aIJqnV/XXHHmrs=
+Rw+G/waIBe/Ak8+fSHSujh+eiLQ33aIJGHx0E7OBc/Q=
 YmUwlxB2+/FMDZRBmdetZE+5TjAW0UK0gwRqRnQitXw=
 YmUwlxB2+/FMDZRBmdetZE+5TjAW0UK0gwRqRnQitXw=
 4wmLPJicm/+/LmIkiBoLKjB0rw54qHkP
 4wmLPJicm/+/LmIkiBoLKjB0rw54qHkP
 9LK2whhxCZeo1X7h1qZD6I3r4WutNR9d
 9LK2whhxCZeo1X7h1qZD6I3r4WutNR9d
@@ -95,7 +95,7 @@ m3OBIzYpkv/qF7AJzWlKMqa1qpic2S+n
 odXIQK9Ziqj2XZdQW4JAglujO4ehjyqU
 odXIQK9Ziqj2XZdQW4JAglujO4ehjyqU
 1toY8tGtRr+x18NX8WYOT9iFQMUxIT/c
 1toY8tGtRr+x18NX8WYOT9iFQMUxIT/c
 ExlnmrXZxf8FX15a7jIvd9kkrh6n8/H/gwRqRnQitXw=
 ExlnmrXZxf8FX15a7jIvd9kkrh6n8/H/gwRqRnQitXw=
-P3xRlc+orYikytmx9qSeHrlesBHsEGQLMhZAP+U9GoJB+HlhHh870w==
+P3xRlc+orYikytmx9qSeHrlesBHsEGQLMhZAP+U9GoJSkNh/sZwvBQ==
 hIobbitZdRU2rvlWc/su4/cLCvtq0hz5
 hIobbitZdRU2rvlWc/su4/cLCvtq0hz5
 35Yj+AR/xwUr9owrtxaGm/cLCvtq0hz5
 35Yj+AR/xwUr9owrtxaGm/cLCvtq0hz5
 W98rK7N9+l8RLYSdhB9u2ttPtotBvWIkprWqmJzZL6c=
 W98rK7N9+l8RLYSdhB9u2ttPtotBvWIkprWqmJzZL6c=
@@ -225,7 +225,7 @@ U38gTIC1nHhA3HDQd6IahDB0rw54qHkP
 0TMvqA04T5L5Q/r5BkJ3gSj1Tp01M6FsC2ByB3hh+BI=
 0TMvqA04T5L5Q/r5BkJ3gSj1Tp01M6FsC2ByB3hh+BI=
 CKoeOoxVnVlBgNadoBnwvvcLCvtq0hz5
 CKoeOoxVnVlBgNadoBnwvvcLCvtq0hz5
 SWg4cFOR5+7C79gAy6ztj4MEakZ0IrV8
 SWg4cFOR5+7C79gAy6ztj4MEakZ0IrV8
-zZE9wdKK1kx7zjjccmMuUrlesBHsEGQLMhZAP+U9GoJB+HlhHh870w==
+zZE9wdKK1kx7zjjccmMuUrlesBHsEGQLMhZAP+U9GoJSkNh/sZwvBQ==
 WhV+G7nALQCpbgrLrYi5qLlesBHsEGQLxjkOTCwOJyxKYBGd+lGX+w==
 WhV+G7nALQCpbgrLrYi5qLlesBHsEGQLxjkOTCwOJyxKYBGd+lGX+w==
 bbSys5YYRDwcCBg12OOwnk+5TjAW0UK0gwRqRnQitXw=
 bbSys5YYRDwcCBg12OOwnk+5TjAW0UK0gwRqRnQitXw=
 i0dO76cfraN2IB4O+5X9iNkkrh6n8/H/gwRqRnQitXw=
 i0dO76cfraN2IB4O+5X9iNkkrh6n8/H/gwRqRnQitXw=
@@ -768,8 +768,8 @@ tLDv55CI8nYURFft0Riw34MEakZ0IrV8
 bzD9KhCfY/jjmkf9eYvVZk+5TjAW0UK0gwRqRnQitXw=
 bzD9KhCfY/jjmkf9eYvVZk+5TjAW0UK0gwRqRnQitXw=
 jj66klifX/lMA4a12UqUkNkkrh6n8/H/gwRqRnQitXw=
 jj66klifX/lMA4a12UqUkNkkrh6n8/H/gwRqRnQitXw=
 REYkwRm7WJSZbBgxNr/7aPcLCvtq0hz5
 REYkwRm7WJSZbBgxNr/7aPcLCvtq0hz5
-KiWHks7D50Opmpe++5TpI7lesBHsEGQLMhZAP+U9GoJB+HlhHh870w==
-opk2vsDHJ/T9ZmJ7sP0SprlesBHsEGQLMhZAP+U9GoJB+HlhHh870w==
+KiWHks7D50Opmpe++5TpI7lesBHsEGQLMhZAP+U9GoJSkNh/sZwvBQ==
+opk2vsDHJ/T9ZmJ7sP0SprlesBHsEGQLMhZAP+U9GoJSkNh/sZwvBQ==
 /FJntDlcfq9zD9KyklzzEE+5TjAW0UK0gwRqRnQitXw=
 /FJntDlcfq9zD9KyklzzEE+5TjAW0UK0gwRqRnQitXw=
 pumSfVxvlD4sYrJnMICNbFUfPZRrWwtIprWqmJzZL6c=
 pumSfVxvlD4sYrJnMICNbFUfPZRrWwtIprWqmJzZL6c=
 nBQ+RGfeIVoBxifgDfoMvlUfPZRrWwtIprWqmJzZL6c=
 nBQ+RGfeIVoBxifgDfoMvlUfPZRrWwtIprWqmJzZL6c=
@@ -1004,7 +1004,7 @@ qSs9QTQwval/Lr7SyQP/c43r4WutNR9d
 dtJ8y63v2LgqdOVdm7EQ2CnAO3oquWBEC2ByB3hh+BI=
 dtJ8y63v2LgqdOVdm7EQ2CnAO3oquWBEC2ByB3hh+BI=
 m5hzhXSmnd3BmXfaEr+8jhWmDFGLekfA
 m5hzhXSmnd3BmXfaEr+8jhWmDFGLekfA
 HH3IzgGuMLgCZaCMNllmmxJSs19H9BBU
 HH3IzgGuMLgCZaCMNllmmxJSs19H9BBU
-j8d/kjRF9dGkK78EQJy6lDklfZgPBRKNprWqmJzZL6c=
+j8d/kjRF9dGkK78EQJy6lDklfZgPBRKNgwRqRnQitXw=
 wJ6efkfyl1DGXNiJPb3MdyyrN35xm8Fe
 wJ6efkfyl1DGXNiJPb3MdyyrN35xm8Fe
 fiBOqlW2IK6SxjRsWFUaQxVcjKe29warC2ByB3hh+BI=
 fiBOqlW2IK6SxjRsWFUaQxVcjKe29warC2ByB3hh+BI=
 9bQMi9XH0vnDd24dSFBZ529dhEqwF5uz
 9bQMi9XH0vnDd24dSFBZ529dhEqwF5uz
@@ -1069,7 +1069,7 @@ xBsHe2ymtdVkFLeYulU1wtiFQMUxIT/c
 ENEmmEgcd0vl5NfC7g10yblesBHsEGQLxjkOTCwOJyxKYBGd+lGX+w==
 ENEmmEgcd0vl5NfC7g10yblesBHsEGQLxjkOTCwOJyxKYBGd+lGX+w==
 AJRkPouFiljS9w4qKMds3lujO4ehjyqU
 AJRkPouFiljS9w4qKMds3lujO4ehjyqU
 25qvkpM5cHd1ZmhbDRvTftkkrh6n8/H/gwRqRnQitXw=
 25qvkpM5cHd1ZmhbDRvTftkkrh6n8/H/gwRqRnQitXw=
-gjXEHp/8JADI5JgMEFNUgn68DSYVs1WTBvhbfdIpknBKYBGd+lGX+w==
+gjXEHp/8JADI5JgMEFNUgn68DSYVs1WTxjkOTCwOJyxKYBGd+lGX+w==
 ru89HrJd4QSgVmmLZPMB49kkrh6n8/H/gwRqRnQitXw=
 ru89HrJd4QSgVmmLZPMB49kkrh6n8/H/gwRqRnQitXw=
 jXnhNl3fLc5A8fTeoUpE1dkkrh6n8/H/gwRqRnQitXw=
 jXnhNl3fLc5A8fTeoUpE1dkkrh6n8/H/gwRqRnQitXw=
 KtKttzVLOdDrM1KbGMwGUrlesBHsEGQLxjkOTCwOJyxKYBGd+lGX+w==
 KtKttzVLOdDrM1KbGMwGUrlesBHsEGQLxjkOTCwOJyxKYBGd+lGX+w==
@@ -1155,9 +1155,9 @@ kNozzj2fvw5T6S0CnVP6rE+5TjAW0UK0gwRqRnQitXw=
 inbuE8vodUx8S595W0Ge6U+5TjAW0UK0gwRqRnQitXw=
 inbuE8vodUx8S595W0Ge6U+5TjAW0UK0gwRqRnQitXw=
 uB9L5VGmSIa/kQxL00SaqE+5TjAW0UK0gwRqRnQitXw=
 uB9L5VGmSIa/kQxL00SaqE+5TjAW0UK0gwRqRnQitXw=
 pMrat1Mzi35/Z5l1EzCRSU+5TjAW0UK0gwRqRnQitXw=
 pMrat1Mzi35/Z5l1EzCRSU+5TjAW0UK0gwRqRnQitXw=
-BRqYNlwQJM6t6zW8+fNqW7lesBHsEGQLMhZAP+U9GoJB+HlhHh870w==
+BRqYNlwQJM6t6zW8+fNqW7lesBHsEGQLMhZAP+U9GoJSkNh/sZwvBQ==
 4NupGwAQ6g2+uG7/uREnaE+5TjAW0UK0gwRqRnQitXw=
 4NupGwAQ6g2+uG7/uREnaE+5TjAW0UK0gwRqRnQitXw=
-zGzx5MPy0vfGkMHurTRXaFrYYHZB/sozBvhbfdIpknBKYBGd+lGX+w==
+zGzx5MPy0vfGkMHurTRXaFrYYHZB/sozxjkOTCwOJyxKYBGd+lGX+w==
 01xCifRckHcpkQy37Ixih0+5TjAW0UK0gwRqRnQitXw=
 01xCifRckHcpkQy37Ixih0+5TjAW0UK0gwRqRnQitXw=
 1ZLlaazcLAK7i/X73oDFAk+5TjAW0UK0gwRqRnQitXw=
 1ZLlaazcLAK7i/X73oDFAk+5TjAW0UK0gwRqRnQitXw=
 H+n+N7ebl7TOvyxWujI92E+5TjAW0UK0gwRqRnQitXw=
 H+n+N7ebl7TOvyxWujI92E+5TjAW0UK0gwRqRnQitXw=
@@ -1296,22 +1296,22 @@ Im4aUeyQl6jBzeoKLAXNsFUfPZRrWwtIprWqmJzZL6c=
 PnQuxnlLMyiOZMsRc493ndtPtotBvWIkprWqmJzZL6c=
 PnQuxnlLMyiOZMsRc493ndtPtotBvWIkprWqmJzZL6c=
 i8kZZBEZ3boazgfFuFsMKtkkrh6n8/H/gwRqRnQitXw=
 i8kZZBEZ3boazgfFuFsMKtkkrh6n8/H/gwRqRnQitXw=
 nuPW1GQko8yaU4UoY3leZk+5TjAW0UK0gwRqRnQitXw=
 nuPW1GQko8yaU4UoY3leZk+5TjAW0UK0gwRqRnQitXw=
-OxrILz8jrAfNfpVIhRef/blesBHsEGQLMhZAP+U9GoJB+HlhHh870w==
+OxrILz8jrAfNfpVIhRef/blesBHsEGQLMhZAP+U9GoJSkNh/sZwvBQ==
 rf9KgFyYL668Ne64H5+Oz6qHdeHVfA/zJv8rF9h3FLo=
 rf9KgFyYL668Ne64H5+Oz6qHdeHVfA/zJv8rF9h3FLo=
 K46cJhCy0c4c4oWcWm5uNrlesBHsEGQLxjkOTCwOJyxKYBGd+lGX+w==
 K46cJhCy0c4c4oWcWm5uNrlesBHsEGQLxjkOTCwOJyxKYBGd+lGX+w==
 34VZaeoGfS3c/bVfRXzHDU+5TjAW0UK0gwRqRnQitXw=
 34VZaeoGfS3c/bVfRXzHDU+5TjAW0UK0gwRqRnQitXw=
 mhYdlUqjSsA/f0Irc+x9hE+5TjAW0UK0gwRqRnQitXw=
 mhYdlUqjSsA/f0Irc+x9hE+5TjAW0UK0gwRqRnQitXw=
 UYUC9v9Pd8zc/bVfRXzHDU+5TjAW0UK0gwRqRnQitXw=
 UYUC9v9Pd8zc/bVfRXzHDU+5TjAW0UK0gwRqRnQitXw=
-vymTZsrBjuPGkMHurTRXaFrYYHZB/sozBvhbfdIpknBKYBGd+lGX+w==
+vymTZsrBjuPGkMHurTRXaFrYYHZB/sozxjkOTCwOJyxKYBGd+lGX+w==
 0/KzhJ+BUIw7Dt6bH1ZVz0+5TjAW0UK0gwRqRnQitXw=
 0/KzhJ+BUIw7Dt6bH1ZVz0+5TjAW0UK0gwRqRnQitXw=
 fS2ltMeYoDXGkMHurTRXaE+5TjAW0UK0gwRqRnQitXw=
 fS2ltMeYoDXGkMHurTRXaE+5TjAW0UK0gwRqRnQitXw=
 baw7yU9Z9SnsCKwgJzZ58k+5TjAW0UK0gwRqRnQitXw=
 baw7yU9Z9SnsCKwgJzZ58k+5TjAW0UK0gwRqRnQitXw=
 gMu3LuQ5m24AbpjLF2VqY0+5TjAW0UK0gwRqRnQitXw=
 gMu3LuQ5m24AbpjLF2VqY0+5TjAW0UK0gwRqRnQitXw=
 ck9AzwUKDvay7RlZTp2ox0+5TjAW0UK0gwRqRnQitXw=
 ck9AzwUKDvay7RlZTp2ox0+5TjAW0UK0gwRqRnQitXw=
 Wyg53APVvRX5lmZqUfMtS7lesBHsEGQLxjkOTCwOJyxKYBGd+lGX+w==
 Wyg53APVvRX5lmZqUfMtS7lesBHsEGQLxjkOTCwOJyxKYBGd+lGX+w==
-LzfJvUrrMPnXYvfGxUVJR7lesBHsEGQLMhZAP+U9GoJB+HlhHh870w==
-s7GKPKFqMZi9oArrapunUblesBHsEGQLMhZAP+U9GoJB+HlhHh870w==
-2vMhxi6KWoXGkMHurTRXaFrYYHZB/sozBvhbfdIpknBKYBGd+lGX+w==
+LzfJvUrrMPnXYvfGxUVJR7lesBHsEGQLMhZAP+U9GoJSkNh/sZwvBQ==
+s7GKPKFqMZi9oArrapunUblesBHsEGQLMhZAP+U9GoJSkNh/sZwvBQ==
+2vMhxi6KWoXGkMHurTRXaFrYYHZB/sozxjkOTCwOJyxKYBGd+lGX+w==
 M1+zJTbkReuw5U4mWFSjy0+5TjAW0UK0gwRqRnQitXw=
 M1+zJTbkReuw5U4mWFSjy0+5TjAW0UK0gwRqRnQitXw=
 VUY5wx5LkGLFEB3uwMYK6E+5TjAW0UK0gwRqRnQitXw=
 VUY5wx5LkGLFEB3uwMYK6E+5TjAW0UK0gwRqRnQitXw=
 DpOZQcF/SkIazBqXvo/w3k+5TjAW0UK0gwRqRnQitXw=
 DpOZQcF/SkIazBqXvo/w3k+5TjAW0UK0gwRqRnQitXw=
@@ -1403,7 +1403,7 @@ KiFFpIBTwsaKap7Gu7gh99tPtotBvWIkprWqmJzZL6c=
 UwdJT0Da4zX/MxS0egOqcNkkrh6n8/H/gwRqRnQitXw=
 UwdJT0Da4zX/MxS0egOqcNkkrh6n8/H/gwRqRnQitXw=
 WbcB+dj0i8pE6TOClsJmP9kkrh6n8/H/gwRqRnQitXw=
 WbcB+dj0i8pE6TOClsJmP9kkrh6n8/H/gwRqRnQitXw=
 lH9IRZZVal++rpjgC7EqyEMC+eFxGQ9GJv8rF9h3FLo=
 lH9IRZZVal++rpjgC7EqyEMC+eFxGQ9GJv8rF9h3FLo=
-MVsoAcDdHtKkK78EQJy6lDklfZgPBRKNprWqmJzZL6c=
+MVsoAcDdHtKkK78EQJy6lDklfZgPBRKNgwRqRnQitXw=
 AsAm72YEgCR0HOI9gINBxrlesBHsEGQLxjkOTCwOJyxKYBGd+lGX+w==
 AsAm72YEgCR0HOI9gINBxrlesBHsEGQLxjkOTCwOJyxKYBGd+lGX+w==
 p1FtRE5f6PIFOM7mQ4mdFdkkrh6n8/H/gwRqRnQitXw=
 p1FtRE5f6PIFOM7mQ4mdFdkkrh6n8/H/gwRqRnQitXw=
 h1imTWZiWSNtC/T3i9B8SblesBHsEGQLxjkOTCwOJyxKYBGd+lGX+w==
 h1imTWZiWSNtC/T3i9B8SblesBHsEGQLxjkOTCwOJyxKYBGd+lGX+w==