diff --git a/config.properties b/config.properties
index 244c4fb..2b2c397 100644
--- a/config.properties
+++ b/config.properties
@@ -3,4 +3,4 @@
debug=true
# 地址列表 (格式: addX=ip:port)
-addr1=baishe.fullstack.club:18889
+addr1=192.168.110.240:8889
diff --git a/pom.xml b/pom.xml
index d39e475..162b92c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.sunyard.sge.database
sydapi-database
- 1.20
+ 1.24
sydapi-database
@@ -63,7 +63,7 @@
net.java.dev.jna
jna
- 5.13.0
+ 4.5.0
diff --git a/qodana.yaml b/qodana.yaml
new file mode 100644
index 0000000..9e9be8d
--- /dev/null
+++ b/qodana.yaml
@@ -0,0 +1,31 @@
+#-------------------------------------------------------------------------------#
+# Qodana analysis is configured by qodana.yaml file #
+# https://www.jetbrains.com/help/qodana/qodana-yaml.html #
+#-------------------------------------------------------------------------------#
+version: "1.0"
+
+#Specify inspection profile for code analysis
+profile:
+ name: qodana.starter
+
+#Enable inspections
+#include:
+# - name:
+
+#Disable inspections
+#exclude:
+# - name:
+# paths:
+# -
+
+projectJDK: "8" #(Applied in CI/CD pipeline)
+
+#Execute shell command before Qodana execution (Applied in CI/CD pipeline)
+#bootstrap: sh ./prepare-qodana.sh
+
+#Install IDE plugins before Qodana execution (Applied in CI/CD pipeline)
+#plugins:
+# - id: #(plugin id can be found at https://plugins.jetbrains.com)
+
+#Specify Qodana linter for analysis (Applied in CI/CD pipeline)
+linter: jetbrains/qodana-jvm-community:2025.1
diff --git a/src/main/java/com/sunyard/sge/database/Env.java b/src/main/java/com/sunyard/sge/database/Env.java
new file mode 100644
index 0000000..fd0f635
--- /dev/null
+++ b/src/main/java/com/sunyard/sge/database/Env.java
@@ -0,0 +1,19 @@
+package com.sunyard.sge.database;
+
+public class Env {
+
+ private static boolean isLinux = false;
+
+ static {
+ String os = System.getProperty("os.name").toLowerCase();
+ if (os.contains("nix") || os.contains("nux") || os.contains("aix")) {
+ isLinux = true;
+ } else {
+ isLinux = false;
+ }
+ }
+
+ public static boolean isLinux(){
+ return isLinux;
+ }
+}
diff --git a/src/main/java/com/sunyard/sge/database/SydApi.java b/src/main/java/com/sunyard/sge/database/SydApi.java
index a9e5146..5e9cb24 100644
--- a/src/main/java/com/sunyard/sge/database/SydApi.java
+++ b/src/main/java/com/sunyard/sge/database/SydApi.java
@@ -28,8 +28,10 @@ public interface SydApi {
}
// logback 版本的日志直接由外部配置文件控制
- // 初始化 C 部分日志
- SydLibrary.INSTANCE.SYD_SetLogConfig(pcLogPath, pcLogPath.getBytes().length, iLogLevel);
+ if ( Env.isLinux() ){
+ // 初始化 C 部分日志
+ SydLibrary.INSTANCE.SYD_SetLogConfig(pcLogPath, pcLogPath.getBytes().length, iLogLevel);
+ }
}
/**
@@ -274,10 +276,10 @@ public interface SydApi {
*
* @param iEncKeyIndex:输入。加密所需要的密钥索引值
* @param iMacKeyIndex:输入。计算mac所需要的密钥索引值
- * @param pcData: 输入。计算mac所需要的数据。
+ * @param pcData: 输入。计算mac所需要的数据。
* @return DataAndMac
- * - data 密文
- * - mac值 (固定长度16字节)转HEX 字符串格式
+ * - data 密文
+ * - mac值 (固定长度16字节)转HEX 字符串格式
*/
DataAndMac SYD_SM4_EncryptAndMac_ShortData(
int iEncKeyIndex,
@@ -287,11 +289,10 @@ public interface SydApi {
/**
* 短数据校验 MAC 并解密
- *
* @param iEncKeyIndex:输入。加密所需要的密钥索引值
* @param iMacKeyIndex:输入。计算mac所需要的密钥索引值
- * @param pcData 输入。密文。
- * @param mac 输入。密文的 MAC。
+ * @param pcData 输入。密文。
+ * @param mac 输入。密文的 MAC。
* @return 明文
*/
DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(
@@ -307,7 +308,6 @@ public interface SydApi {
int[] iMacKeyIndex,
List pcData
);
-
List SYD_SM4_CheckMacAndDecrypt_BatchData(
int[] iEncKeyIndex,
int[] iMacKeyIndex,
diff --git a/src/main/java/com/sunyard/sge/database/SydApiBaseFunction.java b/src/main/java/com/sunyard/sge/database/SydApiBaseFunction.java
index 563bddf..f273e63 100644
--- a/src/main/java/com/sunyard/sge/database/SydApiBaseFunction.java
+++ b/src/main/java/com/sunyard/sge/database/SydApiBaseFunction.java
@@ -99,12 +99,12 @@ public class SydApiBaseFunction implements SydApi {
try {
api.disconnect();
} catch (Exception e) {
-
+ // free
}
}
}
} catch (Exception e) {
-
+ // free
}
hsms = null;
}
@@ -683,7 +683,7 @@ public class SydApiBaseFunction implements SydApi {
// 仅一包 和 第一包 忽略 pcProcData 参数
if (Consts.PkgNumAll != iPkgNum && Consts.PkgNumHead != iPkgNum) {
- iv = pcProcData;
+ iv = Util.bytes2HexString(pcProcData).getBytes();
}
SydApiException le = new SydApiException(-1);
updateLastUseTime();
@@ -768,7 +768,7 @@ public class SydApiBaseFunction implements SydApi {
// 仅一包 和 尾包 返回最终结果
if (Consts.PkgNumAll == iPkgNum || Consts.PkgNumTail == iPkgNum) {
- return new LongDataReturn<>(null, pcMac.equals(ret.getData()));
+ return new LongDataReturn<>(null, Arrays.equals(pcMac, ret.getData()));
} else {
// 返回中间值
return new LongDataReturn<>(ret.getProcData(), false);
@@ -866,7 +866,7 @@ public class SydApiBaseFunction implements SydApi {
updateLastUseTime();
byte[] mac = this.SYD_SM4Mac_ShortData(iKeyIndex, pcData, limitDataLen);
log.debug(this + ".SYD_SM4Mac_ShortData方法返回值:{}", mac);
- return pcMac.equals(mac);
+ return Arrays.equals(pcMac, mac);
}
@@ -886,7 +886,7 @@ public class SydApiBaseFunction implements SydApi {
}
// 参数检查在函数内部
byte[] enData = SYD_SM4_ShortData(iEncKeyIndex, pcData, Consts.ECB_ENC);
- // mac 长度放宽到 1024,因为密文填充
+ // mac 长度放宽到 1040,因为密文填充
byte[] mac = SYD_SM4Mac_ShortData(iMacKeyIndex, enData, 1040);
return new DataAndMac(enData, mac);
}
@@ -909,6 +909,7 @@ public class SydApiBaseFunction implements SydApi {
return new DataAndMacCheck(data, ret);
}
+
@Override
public List SYD_SM4_EncryptAndMac_BatchData(int[] iEncKeyIndex, int[] iMacKeyIndex, List pcData) {
@@ -947,11 +948,6 @@ public class SydApiBaseFunction implements SydApi {
log.debug("SYD_SM4_CheckMacAndDecrypt_BatchData");
}
- if (pcData.isEmpty()) {
- log.info("SYD_SM4_CheckMacAndDecrypt_BatchData pcData isEmpty");
- return new ArrayList<>();
- }
-
if (null == this.hsms || null == iMacKeyIndex) {
throw new SydApiException("输入内容为空", 0x01000001);
}
@@ -959,11 +955,17 @@ public class SydApiBaseFunction implements SydApi {
throw new SydApiException("密钥长度和数据长度不对应", 0x01000001);
}
+ if (pcData.isEmpty()) {
+ log.info("SYD_SM4_CheckMacAndDecrypt_BatchData pcData isEmpty");
+ return new ArrayList<>();
+ }
+
+
List macs = new ArrayList<>(pcData.size());
List datas = new ArrayList<>(pcData.size());
- for (int i = 0; i < macs.size(); i++) {
- macs.add(pcData.get(i).getMac());
- datas.add(pcData.get(i).getData());
+ for (DataAndMac pcDatum : pcData) {
+ macs.add(pcDatum.getMac());
+ datas.add(pcDatum.getData());
}
boolean[] macCheck = SYD_SM4Mac_BatchData(iMacKeyIndex, datas, macs);
diff --git a/src/main/java/com/sunyard/sge/database/SydApiBuilder.java b/src/main/java/com/sunyard/sge/database/SydApiBuilder.java
index e11a966..1cbe475 100644
--- a/src/main/java/com/sunyard/sge/database/SydApiBuilder.java
+++ b/src/main/java/com/sunyard/sge/database/SydApiBuilder.java
@@ -21,10 +21,9 @@ public class SydApiBuilder {
int[] iPortList,
int iConnectTimeOut,
int iDealTimeOut
- ) {
- this(pcIpList, iPortList, iConnectTimeOut, iDealTimeOut, new PoolConfig());
+ ) {
+ this( pcIpList, iPortList, iConnectTimeOut, iDealTimeOut, new PoolConfig() );
}
-
public SydApiBuilder(
String[] pcIpList,
int[] iPortList,
@@ -36,22 +35,23 @@ public class SydApiBuilder {
if (log.isDebugEnabled()) {
log.debug("创建链接");
- log.debug("SydApiBuilder构造方法接收参数:pcIpList:{},iPortList:{},iConnectTimeOut:{},iDealTimeOut:{}", Arrays.toString(pcIpList), Arrays.toString(iPortList), iConnectTimeOut, iDealTimeOut);
+ log.debug("SydApiBuilder构造方法接收参数:pcIpList:{},iPortList:{},iConnectTimeOut:{},iDealTimeOut:{}", Arrays.toString(pcIpList),Arrays.toString(iPortList),iConnectTimeOut,iDealTimeOut);
log.debug("pool config {}", config);
}
- // 同时初始化 jna 下 c 的链接
- int ret = ConnectHandlerManager.init(pcIpList, iPortList, iConnectTimeOut, iDealTimeOut);
+ if ( Env.isLinux() ) {
+ // 同时初始化 jna 下 c 的链接
+ int ret = ConnectHandlerManager.init(pcIpList, iPortList, iConnectTimeOut, iDealTimeOut);
- if (0 != ret) {
- throw new SydApiException(-1);
+ if ( 0 != ret ) {
+ throw new SydApiException(-1);
+ }
}
-
HsmLinkInfo[] linkInfo = HsmLinkInfo.mutiHsmLinkInfo(pcIpList, iPortList, iConnectTimeOut, iDealTimeOut);
this.pool = new SydApiPool(config, linkInfo);
longLinkWorks = new CommWorker();
- warmUp(pcIpList, iPortList, iConnectTimeOut, iDealTimeOut);
+ warmUp( pcIpList, iPortList, iConnectTimeOut, iDealTimeOut );
}
public CommWorker getLongLinkWorks() {
@@ -60,54 +60,52 @@ public class SydApiBuilder {
/**
* 获取池内对象
- *
* @return 池内对象
*/
- public SydApi get() {
+ public SydApi get(){
return pool.get();
}
/**
* 升级
* 修改了原实现
- *
* @return 包装对象
*/
public SydApi build() {
- return new SydApiLongLinkWrap(this);
+ return new SydApiLongLinkWrap( this );
}
private void warmUp(String[] pcIpList,
int[] iPortList,
int iConnectTimeOut,
- int iDealTimeOut) {
+ int iDealTimeOut){
SydApi api = null;
try {
api = new SydApi4Database();
- api.SYD_Short_Connect_Ex(pcIpList, iPortList, iConnectTimeOut, iDealTimeOut);
+ api.SYD_Short_Connect_Ex( pcIpList, iPortList, iConnectTimeOut, iDealTimeOut );
try {
- api.SYD_SM3_Hash_ShortData(new byte[8]);
+ api.SYD_SM3_Hash_ShortData( new byte[8] );
- } catch (Exception e) {
+ }catch ( Exception e) {
// 忽略
}
try {
- api.SYD_SM4_ShortData(0, new byte[16], Consts.ECB_ENC);
+ api.SYD_SM4_ShortData( 0 , new byte[16], Consts.ECB_ENC );
- } catch (Exception e) {
+ }catch ( Exception e) {
// 忽略
}
- } catch (Exception e) {
+ } catch ( Exception e ){
// 忽略预热失败
} finally {
- if (null != api) {
+ if ( null != api ) {
api.SYD_Disconnect_Ex();
}
}
diff --git a/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java b/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java
index d359c4b..214bedc 100644
--- a/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java
+++ b/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java
@@ -28,7 +28,7 @@ public class SydApiLongLinkWrap implements SydApi {
org.slf4j.Logger log = LoggerFactory.getLogger(ThreadBasedConnectPool.class);
- private SydApiBuilder builder;
+ private final SydApiBuilder builder;
public SydApiLongLinkWrap(SydApiBuilder builder) {
this.builder = builder;
@@ -46,12 +46,7 @@ public class SydApiLongLinkWrap implements SydApi {
@Override
public byte[] SYD_SM3_Hash_ShortData(byte[] pcData) {
- FutureTask task = builder.getLongLinkWorks().fTask(new Callable() {
- @Override
- public byte[] call() throws Exception {
- return builder.get().SYD_SM3_Hash_ShortData(pcData);
- }
- });
+ FutureTask task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM3_Hash_ShortData(pcData));
try {
return task.get();
} catch (Exception e) {
@@ -64,12 +59,7 @@ public class SydApiLongLinkWrap implements SydApi {
@Override
public LongDataReturn SYD_SM3_Hash_LongData(byte[] pcData, int iPkgNum, byte[] pcProcData) {
- FutureTask> task = builder.getLongLinkWorks().fTask(new Callable>() {
- @Override
- public LongDataReturn call() throws Exception {
- return builder.get().SYD_SM3_Hash_LongData(pcData, iPkgNum, pcProcData);
- }
- });
+ FutureTask> task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM3_Hash_LongData(pcData, iPkgNum, pcProcData));
try {
return task.get();
} catch (Exception e) {
@@ -82,12 +72,7 @@ public class SydApiLongLinkWrap implements SydApi {
@Override
public byte[] SYD_SM4_ShortData(int iKeyIndex, byte[] pcData, int iFlag) {
- FutureTask task = builder.getLongLinkWorks().fTask(new Callable() {
- @Override
- public byte[] call() throws Exception {
- return builder.get().SYD_SM4_ShortData(iKeyIndex, pcData, iFlag);
- }
- });
+ FutureTask task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM4_ShortData(iKeyIndex, pcData, iFlag));
try {
return task.get();
} catch (Exception e) {
@@ -100,12 +85,7 @@ public class SydApiLongLinkWrap implements SydApi {
@Override
public byte[] SYD_SM4_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, int iFlag) {
- FutureTask task = builder.getLongLinkWorks().fTask(new Callable() {
- @Override
- public byte[] call() throws Exception {
- return builder.get().SYD_SM4_LongData(iKeyIndex, pcData, iPkgNum, iFlag);
- }
- });
+ FutureTask task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM4_LongData(iKeyIndex, pcData, iPkgNum, iFlag));
try {
return task.get();
} catch (Exception e) {
@@ -119,12 +99,7 @@ public class SydApiLongLinkWrap implements SydApi {
@Override
public LongDataReturn SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, byte[] pcProcData) {
- FutureTask> task = builder.getLongLinkWorks().fTask(new Callable>() {
- @Override
- public LongDataReturn call() throws Exception {
- return builder.get().SYD_SM4Mac_LongData(iKeyIndex, pcData, iPkgNum, pcProcData);
- }
- });
+ FutureTask> task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM4Mac_LongData(iKeyIndex, pcData, iPkgNum, pcProcData));
try {
return task.get();
} catch (Exception e) {
@@ -137,12 +112,7 @@ public class SydApiLongLinkWrap implements SydApi {
@Override
public LongDataReturn SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, byte[] pcProcData, byte[] pcMac) {
- FutureTask> task = builder.getLongLinkWorks().fTask(new Callable>() {
- @Override
- public LongDataReturn call() throws Exception {
- return builder.get().SYD_SM4Mac_LongData(iKeyIndex, pcData, iPkgNum, pcProcData, pcMac);
- }
- });
+ FutureTask> task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM4Mac_LongData(iKeyIndex, pcData, iPkgNum, pcProcData, pcMac));
try {
return task.get();
} catch (Exception e) {
@@ -155,12 +125,7 @@ public class SydApiLongLinkWrap implements SydApi {
@Override
public byte[] SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData) {
- FutureTask task = builder.getLongLinkWorks().fTask(new Callable() {
- @Override
- public byte[] call() throws Exception {
- return builder.get().SYD_SM4Mac_ShortData(iKeyIndex, pcData);
- }
- });
+ FutureTask task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM4Mac_ShortData(iKeyIndex, pcData));
try {
return task.get();
} catch (Exception e) {
@@ -173,12 +138,7 @@ public class SydApiLongLinkWrap implements SydApi {
@Override
public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, byte[] pcMac) {
- FutureTask task = builder.getLongLinkWorks().fTask(new Callable() {
- @Override
- public Boolean call() throws Exception {
- return builder.get().SYD_SM4Mac_ShortData(iKeyIndex, pcData, pcMac);
- }
- });
+ FutureTask task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM4Mac_ShortData(iKeyIndex, pcData, pcMac));
try {
return task.get();
} catch (Exception e) {
@@ -189,26 +149,11 @@ public class SydApiLongLinkWrap implements SydApi {
}
}
- private DataAndMac SYD_SM4_AllInOne(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData) {
+ DataAndMac SYD_SM4_EncryptAndMac_ShortData_java(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData) {
try {
- FutureTask taskEnc = builder.getLongLinkWorks().fTask(new Callable() {
- @Override
- public byte[] call() throws Exception {
- return builder.get().SYD_SM4_ShortData(iEncKeyIndex, pcData, Consts.ECB_ENC);
- }
- });
+ FutureTask taskEnc = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM4_EncryptAndMac_ShortData(iEncKeyIndex, iMacKeyIndex, pcData));
- byte[] enData = taskEnc.get();
-
- FutureTask taskMac = builder.getLongLinkWorks().fTask(new Callable() {
- @Override
- public byte[] call() throws Exception {
- return builder.get().SYD_SM4Mac_ShortData(iMacKeyIndex, enData);
- }
- });
-
- byte[] mac = taskMac.get();
- return new DataAndMac(enData, mac);
+ return taskEnc.get();
} catch (SydApiException e) {
throw e;
} catch (Exception e) {
@@ -221,7 +166,15 @@ public class SydApiLongLinkWrap implements SydApi {
@Override
public DataAndMac SYD_SM4_EncryptAndMac_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData) {
- log.info("SYD_SM4_EncryptAndMac_ShortData {} {}", iEncKeyIndex, iMacKeyIndex);
+ if (Env.isLinux()) {
+ return SYD_SM4_EncryptAndMac_ShortData_c(iEncKeyIndex, iMacKeyIndex, pcData);
+ } else {
+ return SYD_SM4_EncryptAndMac_ShortData_java(iEncKeyIndex, iMacKeyIndex, pcData);
+ }
+ }
+
+ DataAndMac SYD_SM4_EncryptAndMac_ShortData_c(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData) {
+ log.info("SYD_SM4_EncryptAndMac_ShortData_c {} {}", iEncKeyIndex, iMacKeyIndex);
try {
if (!ConnectHandlerManager.isInited()) {
throw new SydApiException(-1);
@@ -255,67 +208,6 @@ public class SydApiLongLinkWrap implements SydApi {
} else {
throw new SydApiException(i);
}
-
-// return SYD_SM4_AllInOne(iEncKeyIndex, iMacKeyIndex, pcData);
-
-// // 线程池忙, 使用单线程计算
-// if( builder.getLongLinkWorks().threadPoolIsBusy() ) {
-// return SYD_SM4_AllInOne(iEncKeyIndex, iMacKeyIndex, pcData);
-// }
-//
-// // 线程池不忙,使用并发计算
-//
-// // 将pcData拆分为两半,第一半16字节对齐
-// int halfLength = pcData.length / 2;
-// int alignedLength = (halfLength + 15) & ~15; // 向上取整到16的倍数
-// alignedLength = Math.min(alignedLength, pcData.length); // 不超过原始数据长度
-// if (alignedLength < 16) {
-// throw new IllegalArgumentException("数据长度不足16字节,无法对齐");
-// }
-//
-//
-// byte[] firstHalf = Arrays.copyOfRange(pcData, 0, alignedLength);
-// byte[] secondHalf = Arrays.copyOfRange(pcData, alignedLength, pcData.length);
-//
-//
-// FutureTask taskEnc1 = builder.getLongLinkWorks().fTask(new Callable() {
-// @Override
-// public byte[] call() throws Exception {
-// return builder.get().SYD_SM4_LongData( iEncKeyIndex, firstHalf, 1, Consts.ECB_ENC);
-// }
-// });
-// FutureTask taskEnc2 = builder.getLongLinkWorks().fTask(new Callable() {
-// @Override
-// public byte[] call() throws Exception {
-// return builder.get().SYD_SM4_LongData( iEncKeyIndex, secondHalf, 3, Consts.ECB_ENC);
-// }
-// });
-//
-// byte[] enData1 = taskEnc1.get();
-// FutureTask> taskMac = builder.getLongLinkWorks().fTask(new Callable< LongDataReturn>() {
-// @Override
-// public LongDataReturn call() throws Exception {
-// return builder.get().SYD_SM4Mac_LongData(iMacKeyIndex, enData1, 1, null);
-// }
-// });
-//
-// byte[] enData2 = taskEnc2.get();
-// LongDataReturn macProc = taskMac.get();
-// FutureTask> taskMac2 = builder.getLongLinkWorks().fTask(new Callable>() {
-// @Override
-// public LongDataReturn call() throws Exception {
-// return builder.get().SYD_SM4Mac_LongData(iMacKeyIndex, enData2, 3, macProc.getProcData());
-// }
-// });
-// LongDataReturn mac = taskMac.get();
-//
-// // 合并密文
-// byte[] enData = new byte[enData1.length + enData2.length];
-// System.arraycopy(enData1, 0, enData, 0, enData1.length);
-// System.arraycopy(enData2, 0, enData, enData1.length, enData2.length);
-//
-//
-// return new DataAndMac(enData, mac.getData());
} catch (SydApiException e) {
throw e;
} catch (Exception e) {
@@ -326,9 +218,19 @@ public class SydApiLongLinkWrap implements SydApi {
}
}
+
@Override
public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, byte[] macs) {
- log.info("SYD_SM4_CheckMacAndDecrypt_ShortData {} {}", iEncKeyIndex, iMacKeyIndex);
+ if (Env.isLinux()) {
+ return SYD_SM4_CheckMacAndDecrypt_ShortData_c(iEncKeyIndex, iMacKeyIndex, pcData, macs);
+ } else {
+ return SYD_SM4_CheckMacAndDecrypt_ShortData_java(iEncKeyIndex, iMacKeyIndex, pcData, macs);
+ }
+ }
+
+
+ public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData_c(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, byte[] macs) {
+ log.info("SYD_SM4_CheckMacAndDecrypt_ShortData_c {} {}", iEncKeyIndex, iMacKeyIndex);
try {
if (!ConnectHandlerManager.isInited()) {
throw new SydApiException(-1);
@@ -351,7 +253,6 @@ public class SydApiLongLinkWrap implements SydApi {
byte[] data = new byte[decryptedDataLen.getValue()];
System.arraycopy(decryptedData, 0, data, 0, data.length);
- System.out.println("outlen=" + data.length);
if (0 == i) {
return new DataAndMacCheck(data, true);
@@ -369,24 +270,36 @@ public class SydApiLongLinkWrap implements SydApi {
}
throw new SydApiException("并行任务执行失败", 0xC101, e);
}
+ }
- // FutureTask task = builder.getLongLinkWorks().fTask(new Callable() {
-// @Override
-// public DataAndMacCheck call() throws Exception {
-// return builder.get().SYD_SM4_CheckMacAndDecrypt_ShortData(iEncKeyIndex, iMacKeyIndex, pcData, mac);
-// }
-// });
-// try {
-// return task.get();
-// } catch (Exception e) {
-// throw new SydApiException("并行任务执行失败", 0xC101, e);
-// }
+ public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData_java(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, byte[] macs) {
+ log.info("SYD_SM4_CheckMacAndDecrypt_ShortData_java {} {}", iEncKeyIndex, iMacKeyIndex);
+ FutureTask task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM4_CheckMacAndDecrypt_ShortData(iEncKeyIndex, iMacKeyIndex, pcData, macs));
+ try {
+ return task.get();
+ } catch (SydApiException e) {
+ throw e;
+ } catch (Exception e) {
+ if (e.getCause() instanceof SydApiException) {
+ throw (SydApiException) e.getCause();
+ }
+ throw new SydApiException("并行任务执行失败", 0xC101, e);
+ }
}
@Override
public List SYD_SM4_EncryptAndMac_BatchData(int[] iEncKeyIndex, int[] iMacKeyIndex, List pcData) {
- log.info("SYD_SM4_EncryptAndMac_BatchData {} {}", iEncKeyIndex, iMacKeyIndex);
+ if (Env.isLinux()) {
+ return SYD_SM4_EncryptAndMac_BatchData_c(iEncKeyIndex, iMacKeyIndex, pcData);
+ } else {
+ return SYD_SM4_EncryptAndMac_BatchData_java(iEncKeyIndex, iMacKeyIndex, pcData);
+ }
+ }
+
+
+ public List SYD_SM4_EncryptAndMac_BatchData_c(int[] iEncKeyIndex, int[] iMacKeyIndex, List pcData) {
+ log.info("SYD_SM4_EncryptAndMac_BatchData_c {} {}", iEncKeyIndex, iMacKeyIndex);
if (!ConnectHandlerManager.isInited()) {
throw new SydApiException(-1);
@@ -406,42 +319,64 @@ public class SydApiLongLinkWrap implements SydApi {
// 3. 准备 MAC 输出缓冲
Pointer[] pcMacArray = new Pointer[pcData.size()];
+ try {
- for (int i = 0; i < pcData.size(); i++) {
- byte[] bytes = pcData.get(i);
- // 为每个 byte[] 分配本地内存并复制数据
- Memory memory = new Memory(bytes.length);
- memory.write(0, bytes, 0, bytes.length);
- pcDataArray[i] = memory;
- iDataLen[i] = bytes.length;
- iEncDataLen[i] = BytesUtil.calculatePaddedLength(bytes.length);
- pcEncArray[i] = new Memory(iEncDataLen[i]);
- pcMacArray[i] = new Memory(16);
- }
-
- // 调用加密函数
- int result = SydLibrary.INSTANCE.SYD_SM4_Encrypt_Mac_BatchData(
- ConnectHandlerManager.getHandler(),
- iEncKeyIndex,
- iMacKeyIndex,
- pcDataArray,
- iDataLen,
- size,
- pcEncArray,
- iEncDataLen,
- pcMacArray);
-
- if (0 == result) {
- // 转换结果为Java风格的对象列表
- List results = new ArrayList<>();
- for (int i = 0; i < size; i++) {
- results.add(new DataAndMac(pcEncArray[i].getByteArray(0, iEncDataLen[i]), pcMacArray[i].getByteArray(0, 16)));
+ for (int i = 0; i < pcData.size(); i++) {
+ byte[] bytes = pcData.get(i);
+ // 为每个 byte[] 分配本地内存并复制数据
+ Memory memory = new Memory(bytes.length);
+ memory.write(0, bytes, 0, bytes.length);
+ pcDataArray[i] = memory;
+ iDataLen[i] = bytes.length;
+ iEncDataLen[i] = BytesUtil.calculatePaddedLength(bytes.length);
+ pcEncArray[i] = new Memory(iEncDataLen[i]);
+ pcMacArray[i] = new Memory(16);
}
- return results;
- } else {
- throw new SydApiException(result);
+ // 调用加密函数
+ int result = SydLibrary.INSTANCE.SYD_SM4_Encrypt_Mac_BatchData(
+ ConnectHandlerManager.getHandler(),
+ iEncKeyIndex,
+ iMacKeyIndex,
+ pcDataArray,
+ iDataLen,
+ size,
+ pcEncArray,
+ iEncDataLen,
+ pcMacArray);
+
+
+ if (0 == result) {
+ // 转换结果为Java风格的对象列表
+ List results = new ArrayList<>();
+ for (int i = 0; i < size; i++) {
+ results.add(new DataAndMac(pcEncArray[i].getByteArray(0, iEncDataLen[i]), pcMacArray[i].getByteArray(0, 16)));
+ }
+
+ return results;
+ } else {
+ throw new SydApiException(result);
+ }
+ } finally {
+// for ( Pointer d : pcDataArray ) {
+// if ( d instanceof Memory ) {
+// ((Memory)d).close();
+// }
+// }
+//
+// for ( Pointer d : pcEncArray ) {
+// if ( d instanceof Memory ) {
+// ((Memory)d).close();
+// }
+// }
+//
+// for ( Pointer d : pcMacArray ) {
+// if ( d instanceof Memory ) {
+// ((Memory)d).close();
+// }
+// }
}
+
} catch (SydApiException e) {
throw e;
} catch (Exception e) {
@@ -451,32 +386,42 @@ public class SydApiLongLinkWrap implements SydApi {
throw new SydApiException("并行任务执行失败", 0xC101, e);
}
-// FutureTask> task = builder.getLongLinkWorks().fTask(new Callable>() {
-// @Override
-// public List call() throws Exception {
-// return builder.get().SYD_SM4_EncryptAndMac_BatchData(iEncKeyIndex, iMacKeyIndex, pcData);
-// }
-// });
-// try {
-// return task.get();
-// } catch (Exception e) {
-// throw new SydApiException("并行任务执行失败", 0xC101, e);
-// }
+ }
+
+ public List SYD_SM4_EncryptAndMac_BatchData_java(int[] iEncKeyIndex, int[] iMacKeyIndex, List pcData) {
+ log.info("SYD_SM4_EncryptAndMac_BatchData {} {}", iEncKeyIndex, iMacKeyIndex);
+
+ FutureTask> task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM4_EncryptAndMac_BatchData(iEncKeyIndex, iMacKeyIndex, pcData));
+ try {
+ return task.get();
+ } catch (Exception e) {
+ throw new SydApiException("并行任务执行失败", 0xC101, e);
+ }
}
@Override
public List SYD_SM4_CheckMacAndDecrypt_BatchData(int[] iEncKeyIndex, int[] iMacKeyIndex, List pcData) {
+ if (Env.isLinux()) {
+ return SYD_SM4_CheckMacAndDecrypt_BatchData_c(iEncKeyIndex, iMacKeyIndex, pcData);
+ } else {
+ return SYD_SM4_CheckMacAndDecrypt_BatchData_java(iEncKeyIndex, iMacKeyIndex, pcData);
+ }
+ }
- log.info("SYD_SM4_CheckMacAndDecrypt_BatchData {} {}", iEncKeyIndex, iMacKeyIndex);
+
+ List SYD_SM4_CheckMacAndDecrypt_BatchData_c(int[] iEncKeyIndex, int[] iMacKeyIndex, List pcData) {
+
+ log.info("SYD_SM4_CheckMacAndDecrypt_BatchData_c {} {}", iEncKeyIndex, iMacKeyIndex);
int size = pcData.size();
- log.debug("size {}", size);
+ log.debug("SYD_SM4_CheckMacAndDecrypt_BatchData_c size {}", size);
// 1. 准备明文参数
Pointer[] pcDataArray = new Pointer[pcData.size()];
int[] iDataLen = new int[size];
+
// 2. 准备密文缓冲区
Pointer[] pcEncArray = new Pointer[pcData.size()];
int[] iEncDataLen = new int[size];
@@ -486,72 +431,97 @@ public class SydApiLongLinkWrap implements SydApi {
int[] iCheckRet = new int[size];
+ try {
- for (int i = 0; i < pcData.size(); i++) {
- DataAndMac dm = pcData.get(i);
+ for (int i = 0; i < pcData.size(); i++) {
+ DataAndMac dm = pcData.get(i);
- // 为每个 byte[] 分配本地内存并复制数据
- Memory memory = new Memory(dm.getData().length);
- memory.write(0, dm.getData(), 0, dm.getData().length);
- pcEncArray[i] = memory;
- iEncDataLen[i] = dm.getData().length;
- log.debug("pcEncArray={}", dm.getData().length);
+ // 为每个 byte[] 分配本地内存并复制数据
+ Memory memory = new Memory(dm.getData().length);
+ memory.write(0, dm.getData(), 0, dm.getData().length);
+ pcEncArray[i] = memory;
+ iEncDataLen[i] = dm.getData().length;
+ log.debug("pcEncArray={}", dm.getData().length);
- pcDataArray[i] = new Memory(dm.getData().length);
- iDataLen[i] = dm.getData().length;
- log.debug("iDataLen= {}", dm.getData().length);
+ pcDataArray[i] = new Memory(dm.getData().length);
+ iDataLen[i] = dm.getData().length;
+ log.debug("iDataLen= {}", dm.getData().length);
- Memory mem_mac = new Memory(16);
- mem_mac.write(0, dm.getMac(), 0, 16);
- pcMacArray[i] = mem_mac;
+ Memory mem_mac = new Memory(16);
+ mem_mac.write(0, dm.getMac(), 0, 16);
+ pcMacArray[i] = mem_mac;
- if (log.isDebugEnabled()) {
- log.debug("mem_mac=" + Util.bytes2HexString(dm.getMac()));
- }
- }
-
-
- // 调用解密函数
- int result = SydLibrary.INSTANCE.SYD_SM4_Decrypt_Mac_BatchData(
- ConnectHandlerManager.getHandler(),
- iEncKeyIndex,
- iMacKeyIndex,
- pcEncArray,
- iEncDataLen,
- pcMacArray,
- size,
- pcDataArray,
- iDataLen,
- iCheckRet);
-
- if (0 == result) {
- // 转换结果为Java风格的对象列表
- List results = new ArrayList<>();
- for (int i = 0; i < size; i++) {
- results.add(new DataAndMacCheck(pcDataArray[i].getByteArray(0, iDataLen[i]), iCheckRet[i] == 0));
+ if (log.isDebugEnabled()) {
+ log.debug("mem_mac={}" , Util.bytes2HexString(dm.getMac()));
+ }
}
- return results;
- } else {
- throw new SydApiException(result);
- }
-// FutureTask> task = builder.getLongLinkWorks().fTask(new Callable>() {
-// @Override
-// public List call() throws Exception {
-// return builder.get().SYD_SM4_CheckMacAndDecrypt_BatchData(iEncKeyIndex, iMacKeyIndex, pcData);
+ // 调用解密函数
+ int result = SydLibrary.INSTANCE.SYD_SM4_Decrypt_Mac_BatchData(
+ ConnectHandlerManager.getHandler(),
+ iEncKeyIndex,
+ iMacKeyIndex,
+ pcEncArray,
+ iEncDataLen,
+ pcMacArray,
+ size,
+ pcDataArray,
+ iDataLen,
+ iCheckRet);
+
+ if (0 == result) {
+ // 转换结果为 Java 风格的对象列表
+ List results = new ArrayList<>();
+ for (int i = 0; i < size; i++) {
+ results.add(new DataAndMacCheck(pcDataArray[i].getByteArray(0, iDataLen[i]), iCheckRet[i] == 0));
+ }
+
+ return results;
+ } else {
+ throw new SydApiException(result);
+ }
+ } finally {
+// for ( Pointer d : pcDataArray ) {
+// if ( d instanceof Memory ) {
+// ((Memory)d).close();
+// }
// }
-// });
-// try {
-// return task.get();
-// } catch (Exception e) {
-// throw new SydApiException("并行任务执行失败", 0xC101, e);
-// }
+//
+// for ( Pointer d : pcEncArray ) {
+// if ( d instanceof Memory ) {
+// ((Memory)d).close();
+// }
+// }
+//
+// for ( Pointer d : pcMacArray ) {
+// if ( d instanceof Memory ) {
+// ((Memory)d).close();
+// }
+// }
+ }
}
+ List SYD_SM4_CheckMacAndDecrypt_BatchData_java(int[] iEncKeyIndex, int[] iMacKeyIndex, List pcData) {
+
+ log.info("SYD_SM4_CheckMacAndDecrypt_BatchData_java {} {}", iEncKeyIndex, iMacKeyIndex);
+
+ int size = pcData.size();
+ log.debug("size {}", size);
+
+
+ FutureTask> task = builder.getLongLinkWorks().fTask(() -> builder.get().SYD_SM4_CheckMacAndDecrypt_BatchData(iEncKeyIndex, iMacKeyIndex, pcData));
+ try {
+ return task.get();
+ } catch (Exception e) {
+ throw new SydApiException("并行任务执行失败", 0xC101, e);
+ }
+ }
+
+
@Override
public ISM4 initSM4(int iKeyIndex, int ende) {
return new SydSM4(this, iKeyIndex, ende);
@@ -622,12 +592,9 @@ public class SydApiLongLinkWrap implements SydApi {
for (int i = 0; i < dataGroups.size(); i++) {
int finalI = i;
- FutureTask> task = builder.getLongLinkWorks().fTask(new Callable>() {
- @Override
- public List call() throws Exception {
- SydApi api = builder.get();
- return api.SYD_SM4_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI), iFlag);
- }
+ FutureTask> task = builder.getLongLinkWorks().fTask(() -> {
+ SydApi api = builder.get();
+ return api.SYD_SM4_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI), iFlag);
});
tasks.add(task);
}
@@ -702,12 +669,9 @@ public class SydApiLongLinkWrap implements SydApi {
for (int i = 0; i < dataGroups.size(); i++) {
int finalI = i;
- FutureTask> task = builder.getLongLinkWorks().fTask(new Callable>() {
- @Override
- public List call() throws Exception {
- SydApi api = builder.get();
- return api.SYD_SM4Mac_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI));
- }
+ FutureTask> task = builder.getLongLinkWorks().fTask(() -> {
+ SydApi api = builder.get();
+ return api.SYD_SM4Mac_BatchData(toIntArray(keyGroups.get(finalI)), dataGroups.get(finalI));
});
tasks.add(task);
}
@@ -788,16 +752,13 @@ public class SydApiLongLinkWrap implements SydApi {
for (int i = 0; i < dataGroups.size(); i++) {
int finalI = i;
- FutureTask task = builder.getLongLinkWorks().fTask(new Callable() {
- @Override
- public boolean[] call() throws Exception {
- SydApi api = builder.get();
- return api.SYD_SM4Mac_BatchData(
- toIntArray(keyGroups.get(finalI)),
- dataGroups.get(finalI),
- macGroups.get(finalI)
- );
- }
+ FutureTask task = builder.getLongLinkWorks().fTask(() -> {
+ SydApi api = builder.get();
+ return api.SYD_SM4Mac_BatchData(
+ toIntArray(keyGroups.get(finalI)),
+ dataGroups.get(finalI),
+ macGroups.get(finalI)
+ );
});
tasks.add(task);
}
diff --git a/src/main/java/com/sunyard/sge/database/SydSM4Mac.java b/src/main/java/com/sunyard/sge/database/SydSM4Mac.java
index d78b23b..9cd9ec7 100644
--- a/src/main/java/com/sunyard/sge/database/SydSM4Mac.java
+++ b/src/main/java/com/sunyard/sge/database/SydSM4Mac.java
@@ -40,10 +40,9 @@ public class SydSM4Mac implements ISM4Mac {
}
if (length % 16 != 0) {
queue.push(pcData);
- byte[] pop = queue.pop(16, 0);
- pcdataResult =pop;
+ pcdataResult = queue.pop(16, 0);
}
- if (null == this.pcMac || "".equals(this.pcMac)) {
+ if (null == this.pcMac || this.pcMac.length == 0) {
LongDataReturn stringStringLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pcdataResult, iPkgNum, pcProcData);
pcProcData = stringStringLongDataReturn.getProcData();
iPkgNum = 2;
@@ -59,7 +58,7 @@ public class SydSM4Mac implements ISM4Mac {
queue.push(pcData);
byte[] pop = queue.pop(16, 0);
- if (null == this.pcMac || "".equals(this.pcMac)) {
+ if (null == this.pcMac || this.pcMac.length == 0 ) {
LongDataReturn stringStringLongDataReturn = api.SYD_SM4Mac_LongData(iKeyIndex, pop, iPkgNum, pcProcData);
pcProcData = stringStringLongDataReturn.getProcData();
iPkgNum = 2;
diff --git a/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java b/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java
index c85850a..65b8bbf 100644
--- a/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java
+++ b/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java
@@ -12,7 +12,7 @@ import org.slf4j.LoggerFactory;
import racal.sunyard.main.SydApi4j;
public class SydApiPool extends ThreadBasedConnectPool {
- private HsmLinkInfo[] linkInfos;
+ private final HsmLinkInfo[] linkInfos;
public SydApiPool(HsmLinkInfo[] linkInfos) {
super();
this.linkInfos = linkInfos;
@@ -83,7 +83,7 @@ public class SydApiPool extends ThreadBasedConnectPool {
hsms[i] = (SydApi4j) new SydApi4j().connect(info.getPcIp(), info.getiPort(), null, info.getiConnectTimeOut(), info.getiDealTimeOut());
canUse = true;
} catch (Exception e) {
-
+ // free
}
}
}
diff --git a/src/main/java/com/sunyard/sge/plus/SydLibrary.java b/src/main/java/com/sunyard/sge/plus/SydLibrary.java
index 19d05d3..1e2bfee 100644
--- a/src/main/java/com/sunyard/sge/plus/SydLibrary.java
+++ b/src/main/java/com/sunyard/sge/plus/SydLibrary.java
@@ -8,7 +8,7 @@ import com.sun.jna.ptr.PointerByReference;
public interface SydLibrary extends Library {
// 加载动态库
- SydLibrary INSTANCE = Native.load("sunyard", SydLibrary.class);
+ SydLibrary INSTANCE = Native.loadLibrary("sunyard", SydLibrary.class);
// 1.1 设置日志配置
int SYD_SetLogConfig(String pcLogPath, int iLogPathLen, int iLogLevel);
diff --git a/src/main/java/com/sunyard/sge/pool/ThreadBasedConnectPool.java b/src/main/java/com/sunyard/sge/pool/ThreadBasedConnectPool.java
index 3044e38..e6b18e5 100644
--- a/src/main/java/com/sunyard/sge/pool/ThreadBasedConnectPool.java
+++ b/src/main/java/com/sunyard/sge/pool/ThreadBasedConnectPool.java
@@ -49,6 +49,7 @@ public class ThreadBasedConnectPool {
try {
free(oip.getObject());
} catch (Exception e) {
+ // free
}
continue;
}
@@ -67,6 +68,7 @@ public class ThreadBasedConnectPool {
try {
free(oip.getObject());
} catch (Exception e) {
+ // free
}
continue;
}
@@ -76,7 +78,6 @@ public class ThreadBasedConnectPool {
checkPass = check(entry.getValue().getObjectForCheck());
} catch (Exception e) {
checkPass = false;
- } finally {
}
if (!checkPass) {
@@ -87,6 +88,7 @@ public class ThreadBasedConnectPool {
try {
free(oip.getObject());
} catch (Exception e) {
+ // free
}
continue;
}
diff --git a/src/test/java/com/sunyard/sge/database/EncryptAndMac.java b/src/test/java/com/sunyard/sge/database/EncryptAndMac.java
new file mode 100644
index 0000000..044c1b0
--- /dev/null
+++ b/src/test/java/com/sunyard/sge/database/EncryptAndMac.java
@@ -0,0 +1,169 @@
+package com.sunyard.sge.database;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class EncryptAndMac {
+
+
+ public static void conformance_testcase1_SYD_SM4_EncryptAndMac_ShortData(SydApiLongLinkWrap api){
+ int keyEnc = 0;
+ int keyMac = 0;
+ byte[] data1 = new byte[1024];
+ System.out.println("step1");
+ DataAndMac en_data1 = api.SYD_SM4_EncryptAndMac_ShortData_c(keyEnc, keyMac, data1);
+ System.out.println("step2");
+ DataAndMacCheck de_data1 = api.SYD_SM4_CheckMacAndDecrypt_ShortData_java(keyEnc, keyMac, en_data1.getData(), en_data1.getMac());
+ System.out.println("step3 ");
+ if ( de_data1.getMacCheck() ) {
+ System.out.println("conformance_testcase1 测试通过");
+ }
+ }
+
+ public static void conformance_testcase2_SYD_SM4_EncryptAndMac_ShortData(SydApiLongLinkWrap api){
+ int keyEnc = 0;
+ int keyMac = 0;
+ byte[] data1 = new byte[1024];
+ System.out.println("step1");
+ DataAndMac en_data1 = api.SYD_SM4_EncryptAndMac_ShortData_java(keyEnc, keyMac, data1);
+ System.out.println("step2");
+ DataAndMacCheck de_data1 = api.SYD_SM4_CheckMacAndDecrypt_ShortData_c(keyEnc, keyMac, en_data1.getData(), en_data1.getMac());
+ System.out.println("step3 " + de_data1.getMacCheck());
+ if ( de_data1.getMacCheck() ) {
+ System.out.println("conformance_testcase2 测试通过");
+ }
+ }
+
+ public static void conformance_testcase1_sm4BatchMacFunc(SydApiLongLinkWrap api){
+ List data = new ArrayList<>();
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ int[] keyEnc = new int[]{0, 0, 0, 0, 0, 0, 0};
+ int[] keyMac = new int[]{0, 0, 0, 0, 0, 0, 0};
+
+ List en_data = api.SYD_SM4_EncryptAndMac_BatchData_c(keyEnc, keyMac, data);
+ List de_data = api.SYD_SM4_CheckMacAndDecrypt_BatchData_java(keyEnc, keyMac, en_data);
+
+ boolean flag = true;
+ for (int i = 0; i < de_data.size(); i++) {
+ flag = flag & de_data.get(i).getMacCheck();
+ }
+
+ if (flag) {
+ System.out.println("批量数据加密计算MAC,校验MAC解密测试成功");
+ } else {
+ System.out.println("批量数据加密计算MAC,校验MAC解密测试失败");
+ }
+
+ }
+
+
+ public static void conformance_testcase2_sm4BatchMacFunc(SydApiLongLinkWrap api){
+ List data = new ArrayList<>();
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ data.add(new byte[1024]);
+ int[] keyEnc = new int[]{0, 0, 0, 0, 0, 0, 0};
+ int[] keyMac = new int[]{0, 0, 0, 0, 0, 0, 0};
+
+ List en_data = api.SYD_SM4_EncryptAndMac_BatchData_java(keyEnc, keyMac, data);
+ List de_data = api.SYD_SM4_CheckMacAndDecrypt_BatchData_c(keyEnc, keyMac, en_data);
+
+ boolean flag = true;
+ for (int i = 0; i < de_data.size(); i++) {
+ flag = flag & de_data.get(i).getMacCheck();
+ }
+
+ if (flag) {
+ System.out.println("批量数据加密计算MAC,校验MAC解密测试成功");
+ } else {
+ System.out.println("批量数据加密计算MAC,校验MAC解密测试失败");
+ }
+
+ }
+
+
+ public static void main(String[] args) {
+
+ // 路径要以 / 或 \\ 结尾表示目录
+
+ String[] pcipList = {"172.1.41.216", "172.1.41.129"};
+ int[] iportList = {8880, 8889};
+ SydApi api = new SydApi4Database();
+ try {
+
+ api.SYD_Short_Connect_Ex(pcipList, iportList, 1000, 1000);
+
+ // 密钥索引
+ int keyEncIdx = 0;
+
+ int keyMacIdx = 0;
+
+ // 测试数据
+ byte[] data = new byte[16];
+
+
+ // 短数据
+ DataAndMac ret = api.SYD_SM4_EncryptAndMac_ShortData(keyEncIdx, keyMacIdx, data);
+ DataAndMacCheck deData = api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEncIdx, keyMacIdx, ret.getData(), ret.getMac());
+
+ if (Arrays.equals( data, deData.getData() ) ) {
+ System.out.println("短数据加密并计算 MAC - 测试通过");
+ } else {
+ System.out.println("短数据加密并计算 MAC - 测试失败");
+ }
+
+
+ // 批量短数据
+ Listdata2 = Arrays.asList(
+ new byte[8],
+ new byte[500],
+ new byte[512]
+ );
+
+
+ List ret2 = api.SYD_SM4_EncryptAndMac_BatchData(
+ new int[] {keyEncIdx, keyEncIdx, keyEncIdx},
+ new int[] {keyMacIdx, keyMacIdx, keyMacIdx},
+ data2
+ );
+
+ ListdeDatas = api.SYD_SM4_CheckMacAndDecrypt_BatchData(
+ new int[] {keyEncIdx, keyEncIdx, keyEncIdx},
+ new int[] {keyMacIdx, keyMacIdx, keyMacIdx},
+ ret2
+ );
+
+ for (int i=0; i< deDatas.size(); i++){
+ byte[] d1 = data2.get(i);
+ DataAndMacCheck d2 = deDatas.get(i);
+
+ if (! d2.getMacCheck() ) {
+ System.out.println("批量短数据加密并计算 MAC 验证失败 - 测试失败");
+ return;
+ }
+ if (! Arrays.equals( d1, d2.getData() ) ) {
+ System.out.println("批量短数据加密并计算 MAC - 测试失败");
+ return;
+ }
+ }
+
+ System.out.println("批量短数据加密并计算 MAC - 测试通过");
+
+ } finally {
+ if (null != api) {
+ api.SYD_Disconnect_Ex();
+ }
+ }
+ }
+}
diff --git a/src/test/java/test/CalcRes.java b/src/test/java/test/CalcRes.java
index 50139b1..b0b5ebc 100644
--- a/src/test/java/test/CalcRes.java
+++ b/src/test/java/test/CalcRes.java
@@ -1,8 +1,5 @@
package test;
-import com.sunyard.proto.Util;
-import com.sunyard.sge.database.DataAndMac;
-
import java.util.ArrayList;
import java.util.List;
@@ -13,14 +10,14 @@ public class CalcRes {
public static final String SM3_LONG_RESULT2 = "1AB21D8355CFA17F8E61194831E81A8F22BEC8C728FEFB747ED035EB5082AA2B";
public static final String SM4_SHORT_RESULT1 = "9602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF74C72CDD5012CA05BC095A4A4F5B66F64";
public static final String SM4_SHORT_RESULT2 = "4C72CDD5012CA05BC095A4A4F5B66F64";
-// public static final String SM4_LONG_RESULT1 = "9602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF74C72CDD5012CA05BC095A4A4F5B66F64";
- public static final String SM4_LONG_RESULT2 = "9602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF74C72CDD5012CA05BC095A4A4F5B66F64";
+ // public static final String SM4_LONG_RESULT1 = "9602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF74C72CDD5012CA05BC095A4A4F5B66F64";
+ public static final String SM4_LONG_RESULT2 = "9602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF74C72CDD5012CA05BC095A4A4F5B66F64";
public static final String SM4MAC_SHORT_RESULT1 = "CD9A5C8CD83FE0D750CF853D17281D52";
- public static final String SM4MAC_SHORT_RESULT2 = "2A268D5A440F8E9E50AA6FDC453E8593";
+ public static final String SM4MAC_SHORT_RESULT2 = "E04F0975D47219AE9B949CB185C303E9";
public static final String SM4MAC_LONG_RESULT1 = "96CE0C05DB2DB6496E78EEE49B4C82AE";
public static final String SM4MAC_LONG_RESULT2 = "C699B51638B56C3E5D490B9026ED2DD7";
- public static final List SM4_BATCH_RESULT = new ArrayList(){
+ public static final List SM4_BATCH_RESULT = new ArrayList() {
{
this.add("9602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF74C72CDD5012CA05BC095A4A4F5B66F64");
add("9602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF74C72CDD5012CA05BC095A4A4F5B66F64");
diff --git a/src/test/java/test/EncryptAndMac.java b/src/test/java/test/EncryptAndMac.java
deleted file mode 100644
index 02d7121..0000000
--- a/src/test/java/test/EncryptAndMac.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package test;
-
-import com.sunyard.sge.database.*;
-
-import java.util.Arrays;
-import java.util.List;
-
-public class EncryptAndMac {
-
- public static void main(String[] args) {
-
- // 路径要以 / 或 \\ 结尾表示目录
-
- String[] pcipList = {"172.1.41.216", "172.1.41.129"};
- int[] iportList = {8880, 8889};
- SydApi api = new SydApi4Database();
- try {
-
- api.SYD_Short_Connect_Ex(pcipList, iportList, 1000, 1000);
-
- // 密钥索引
- int keyEncIdx = 0;
-
- int keyMacIdx = 0;
-
- // 测试数据
- byte[] data = new byte[16];
-
-
- // 短数据
- DataAndMac ret = api.SYD_SM4_EncryptAndMac_ShortData(keyEncIdx, keyMacIdx, data);
- DataAndMacCheck deData = api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEncIdx, keyMacIdx, ret.getData(), ret.getMac());
-
- if (Arrays.equals( data, deData.getData() ) ) {
- System.out.println("短数据加密并计算 MAC - 测试通过");
- } else {
- System.out.println("短数据加密并计算 MAC - 测试失败");
- }
-
-
- // 批量短数据
- Listdata2 = Arrays.asList(
- new byte[8],
- new byte[500],
- new byte[512]
- );
-
-
- List ret2 = api.SYD_SM4_EncryptAndMac_BatchData(
- new int[] {keyEncIdx, keyEncIdx, keyEncIdx},
- new int[] {keyMacIdx, keyMacIdx, keyMacIdx},
- data2
- );
-
- ListdeDatas = api.SYD_SM4_CheckMacAndDecrypt_BatchData(
- new int[] {keyEncIdx, keyEncIdx, keyEncIdx},
- new int[] {keyMacIdx, keyMacIdx, keyMacIdx},
- ret2
- );
-
- for (int i=0; i< deDatas.size(); i++){
- byte[] d1 = data2.get(i);
- DataAndMacCheck d2 = deDatas.get(i);
-
- if (! d2.getMacCheck() ) {
- System.out.println("批量短数据加密并计算 MAC 验证失败 - 测试失败");
- return;
- }
- if (! Arrays.equals( d1, d2.getData() ) ) {
- System.out.println("批量短数据加密并计算 MAC - 测试失败");
- return;
- }
- }
-
- System.out.println("批量短数据加密并计算 MAC - 测试通过");
-
- } finally {
- if (null != api) {
- api.SYD_Disconnect_Ex();
- }
- }
- }
-}
diff --git a/src/test/java/test/FuncTest.java b/src/test/java/test/FuncTest.java
index e6db9d5..f27608c 100644
--- a/src/test/java/test/FuncTest.java
+++ b/src/test/java/test/FuncTest.java
@@ -21,22 +21,18 @@ public class FuncTest {
private int connectTimeout = 1000;
private int dealTimeout = 2000;
- public FuncTest(Config config){
+ public FuncTest(Config config) {
this.config = config;
}
-
-
- public SydApi connect(){
- if ( isShortLink ) {
+ public SydApi connect() {
+ if (isShortLink) {
SydApi api = new SydApi4Database();
api.SYD_Short_Connect_Ex(config.getIps(), config.getPorts(), connectTimeout, dealTimeout);
return api;
- }
-
- else {
+ } else {
SydApiBuilder builder = new SydApiBuilder(
config.getIps(),
config.getPorts(),
@@ -111,7 +107,6 @@ public class FuncTest {
}
-
data = new byte[0];
sm3 = api.initSM3();
for (int i = 0; i < 10; i++) {
@@ -176,7 +171,7 @@ public class FuncTest {
System.out.println("-------- SM4长数据加解密功能测试开始 --------");
SydApi api = connect();
boolean ret = LongDataTest.case1(api);
- if ( ! ret ){
+ if (!ret) {
System.out.println("-------- SM4长数据加解密功能测试失败 --------\n");
} else {
System.out.println("-------- SM4长数据加解密功能测试结束 --------\n");
@@ -224,7 +219,7 @@ public class FuncTest {
System.out.println("-------- SM4MAC长数据功能测试开始 --------");
SydApi api = connect();
- byte[] data1 = new byte[4064];
+ byte[] data1 = new byte[2048];
int key = 0;
ISM4Mac sm4mac = api.initSM4Mac(key);
for (int i = 0; i < 10; i++) {
@@ -232,27 +227,23 @@ public class FuncTest {
}
byte[] res1 = sm4mac.digest();
+ // 64 x 16 = 1024
byte[] data2 = new byte[16];
sm4mac = api.initSM4Mac(key);
- for (int i = 0; i < 10; i++) {
+ for (int i = 0; i < 64; i++) {
sm4mac.update(data2);
}
byte[] res2 = sm4mac.digest();
-// c = opt.check(hexStringTobytes(SM4MAC_LONG_RESULT1))
-// s = opt.hexcheck(SM4MAC_LONG_RESULT1)
-//
-// c2 = opt2.check(hexStringTobytes(SM4MAC_LONG_RESULT2))
-// s2 = opt2.hexcheck(SM4MAC_LONG_RESULT2)
+ byte[] r = api.SYD_SM4Mac_ShortData(0, new byte[1024]);
- if (res1.equals(CalcRes.SM4MAC_LONG_RESULT1) && res2.equals(CalcRes.SM4MAC_LONG_RESULT2)) {
+ System.out.println( Util.bytes2HexString(r) );
+ if ( Arrays.equals(res2, r )
+ && Arrays.equals(r, Util.hexString2Bytes("E04F0975D47219AE9B949CB185C303E9"))
+ ) {
System.out.println("SM4MAC长数据测试成功");
} else {
System.out.println("SM4MAC长数据测试失败");
- System.out.println("计算结果:" + res1);
- System.out.println("预期结果:" + CalcRes.SM4MAC_LONG_RESULT1);
- System.out.println("计算结果:" + res2);
- System.out.println("预期结果:" + CalcRes.SM4MAC_LONG_RESULT2);
}
@@ -327,7 +318,7 @@ public class FuncTest {
boolean[] check = api.SYD_SM4Mac_BatchData(keyIdx, data, s);
boolean flag = true;
- if ( null != s) {
+ if (null != s) {
for (int i = 0; i < check.length; i++) {
if (!check[i]) {
flag = false;
@@ -362,14 +353,14 @@ public class FuncTest {
DataAndMac en_data1 = api.SYD_SM4_EncryptAndMac_ShortData(keyEnc, keyMac, data1);
System.out.println("step2");
DataAndMacCheck de_data1 = api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEnc, keyMac, en_data1.getData(), en_data1.getMac());
- System.out.println("step3");
+ System.out.println("step3 " + de_data1.getMacCheck());
try {
DataAndMac en_data2 = api.SYD_SM4_EncryptAndMac_ShortData(keyEnc, keyMac, data2);
System.out.println("step4");
- }catch ( SydApiException e) {
- if ( e.getRetCode() == 0x1000001 ) {
+ } catch (SydApiException e) {
+ if (e.getRetCode() == 0x1000001) {
System.out.println("SYD_SM4_EncryptAndMac_ShortData 不支持数据长度为 0, 测试通过");
} else {
System.out.println("SYD_SM4_EncryptAndMac_ShortData 不支持数据长度为 0, 测试失败");
@@ -380,8 +371,8 @@ public class FuncTest {
try {
DataAndMacCheck de_data2 = api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEnc, keyMac, new byte[15], new byte[0]);
System.out.println("step5");
- }catch ( SydApiException e) {
- if ( e.getRetCode() == 0x1000001 ) {
+ } catch (SydApiException e) {
+ if (e.getRetCode() == 0x1000001) {
System.out.println("SYD_SM4_CheckMacAndDecrypt_ShortData 不支持数据长度为非 16 字节, 测试通过");
} else {
System.out.println("SYD_SM4_CheckMacAndDecrypt_ShortData 不支持数据长度为非 16 字节, 测试失败");
@@ -397,6 +388,14 @@ public class FuncTest {
System.out.println("短数据加密计算MAC,校验MAC解密长度超出测试成功");
}
+ if ( ! isShortLink ){
+ System.out.println("long link");
+ EncryptAndMac.conformance_testcase1_SYD_SM4_EncryptAndMac_ShortData((SydApiLongLinkWrap) api);
+ EncryptAndMac.conformance_testcase2_SYD_SM4_EncryptAndMac_ShortData((SydApiLongLinkWrap) api);
+ } else {
+ System.out.println("short link");
+ }
+
System.out.println("-------- 短数据加密计算MAC,校验MAC解密功能测试结束 --------\n");
}
@@ -419,8 +418,8 @@ public class FuncTest {
List de_data = api.SYD_SM4_CheckMacAndDecrypt_BatchData(keyEnc, keyMac, en_data);
boolean flag = true;
- for (int i = 0; i < de_data.size(); i++) {
- flag = flag & de_data.get(i).getMacCheck();
+ for (DataAndMacCheck deDatum : de_data) {
+ flag = flag & deDatum.getMacCheck();
}
if (flag) {
@@ -429,6 +428,14 @@ public class FuncTest {
System.out.println("批量数据加密计算MAC,校验MAC解密测试失败");
}
+ if ( ! isShortLink ){
+ System.out.println("long link");
+ EncryptAndMac.conformance_testcase1_sm4BatchMacFunc((SydApiLongLinkWrap) api);
+ EncryptAndMac.conformance_testcase2_sm4BatchMacFunc((SydApiLongLinkWrap) api);
+ } else {
+ System.out.println("short link");
+ }
+
System.out.println("-------- 批量数据加密计算MAC,校验MAC解密功能测试结束 --------\n");
}
@@ -467,7 +474,7 @@ public class FuncTest {
}
- public void funcMenu(Config config, Choise choise, FuncTest test) throws Exception{
+ public void funcMenu(Config config, Choise choise, FuncTest test) throws Exception {
boolean flag = true;
SydApi.SYD_SetLogConfig("./logs", 3);
@@ -488,9 +495,9 @@ public class FuncTest {
System.out.println("9. SM4短数据加密后生成MAC,解密验证MAC");
System.out.println("10. SM4批量数据加密后生成MAC,验证MAC解密");
+ System.out.println("11. SM4长数据MAC");
+ System.out.println("12. SM4长数据加解密");
- System.out.println("11. SM4长数据加解密");
- System.out.println("12. SM4长数据MAC");
System.out.println("13. SM3长数据");
@@ -549,8 +556,6 @@ public class FuncTest {
}
-
-
public static void main(String[] args) throws Exception {
Config config = config = Config.loadConfig();
if (config == null || config.isDebug()) {
diff --git a/src/test/java/test/LongDataTest.java b/src/test/java/test/LongDataTest.java
index 0999b34..a8f9060 100644
--- a/src/test/java/test/LongDataTest.java
+++ b/src/test/java/test/LongDataTest.java
@@ -127,7 +127,7 @@ public class LongDataTest {
public static boolean case1(SydApi api) {
int max = 1000;
- int size = 4065;
+ int size = 4064;
ISM4 en = api.initSM4(0, 1);
ISM4 de = api.initSM4(0, 0);
diff --git a/src/test/java/test/TestAll.java b/src/test/java/test/TestAll.java
index 0c6c3db..0af5a21 100644
--- a/src/test/java/test/TestAll.java
+++ b/src/test/java/test/TestAll.java
@@ -27,13 +27,11 @@ public class TestAll {
public static final int ECB_ENC = 1;
-
- public static void setLog(){
+ public static void setLog() {
System.setProperty("com.sunyard.sydapi4j.debug", "false");
}
-
private static void startPerformanceFile() {
try (FileWriter fw = new FileWriter(PERF_RESULT_FILE, true);
BufferedWriter bw = new BufferedWriter(fw)) {
@@ -102,7 +100,7 @@ public class TestAll {
FuncTest funcTest = new FuncTest(config);
- while ( true ) {
+ while (true) {
System.out.println("请选择测试项:");
System.out.println("1. 功能单项测试");
System.out.println("2. 功能全量测试");
@@ -146,7 +144,6 @@ public class TestAll {
private static final String PERF_RESULT_FILE = "performance_results.txt";
-
public void sm4ShortEnde(int numberOfThreads, int totalRequest, int plainLen) throws InterruptedException {
byte[] data = new byte[plainLen];
SydApiBuilder builder = new SydApiBuilder(
@@ -183,7 +180,7 @@ public class TestAll {
System.out.println("加密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
System.out.println("TPS: " + String.format("%.2f", tps));
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
- double avgLatencyEnc = duration * 1.0 / totalRequest;
+ double avgLatencyEnc = numberOfThreads * duration * 1.0 / totalRequest;
System.out.println("平均延时(加密): " + String.format("%.2f", avgLatencyEnc) + " ms");
writeToPerformanceFile("SM4短数据加密", 1024, 1, numberOfThreads, totalRequest, tps, avgLatencyEnc);
@@ -211,7 +208,7 @@ public class TestAll {
System.out.println("解密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
System.out.println("TPS: " + String.format("%.2f", tps));
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
- double avgLatencyDec = duration * 1.0 / totalRequest;
+ double avgLatencyDec = numberOfThreads * duration * 1.0 / totalRequest;
System.out.println("平均延时(解密): " + String.format("%.2f", avgLatencyDec) + " ms");
writeToPerformanceFile("SM4短数据解密", 1024, 1, numberOfThreads, totalRequest, tps, avgLatencyDec);
@@ -266,7 +263,7 @@ public class TestAll {
System.out.println("加密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
System.out.println("TPS: " + String.format("%.2f", tps));
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
- double avgLatency = duration * 1.0 / totalRequest;
+ double avgLatency = numberOfThreads * duration * 1.0 / totalRequest;
writeToPerformanceFile("SM4批量数据加密", 1024, 1, numberOfThreads, totalRequest, String.format("%.2f", tps) + " x 4", avgLatency);
SydApi apiTest = Api.get();
@@ -292,7 +289,7 @@ public class TestAll {
System.out.println("解密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
System.out.println("TPS: " + String.format("%.2f", tps));
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
- avgLatency = duration * 1.0 / totalRequest;
+ avgLatency = numberOfThreads * duration * 1.0 / totalRequest;
writeToPerformanceFile("SM4批量数据解密", 1024, 1, numberOfThreads, totalRequest, tps, avgLatency);
}
@@ -341,7 +338,7 @@ public class TestAll {
System.out.println("共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
System.out.println("TPS: " + String.format("%.2f", tps));
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
- double avgLatency = duration * 1.0 / totalRequest;
+ double avgLatency = numberOfThreads * duration * 1.0 / totalRequest;
writeToPerformanceFile("SM4MAC 短数据", 1024, 1, numberOfThreads, totalRequest, tps, avgLatency);
}
@@ -393,7 +390,7 @@ public class TestAll {
System.out.println("共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
System.out.println("TPS: " + String.format("%.2f", tps));
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
- double avgLatency = duration * 1.0 / totalRequest;
+ double avgLatency = numberOfThreads * duration * 1.0 / totalRequest;
writeToPerformanceFile("SM4MAC 批量数据", 1024, 1, numberOfThreads, totalRequest, String.format("%.2f", tps) + " x 4", avgLatency);
}
@@ -440,7 +437,7 @@ public class TestAll {
System.out.println("共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
System.out.println("TPS: " + String.format("%.2f", tps));
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
- double avgLatency = duration * 1.0 / totalRequest;
+ double avgLatency = numberOfThreads * duration * 1.0 / totalRequest;
writeToPerformanceFile("SM3 短数据", 1024, 1, numberOfThreads, totalRequest, tps, avgLatency);
}
@@ -497,11 +494,10 @@ public class TestAll {
System.out.println("加密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
System.out.println("TPS: " + String.format("%.2f", tps));
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
- double avgLatency = duration * 1.0 / totalRequest;
+ double avgLatency = numberOfThreads * duration * 1.0 / totalRequest;
writeToPerformanceFile("SM4短数据加密并生成MAC", 1024, 1, numberOfThreads, totalRequest, tps, avgLatency);
-
ExecutorService poolDec = Executors.newFixedThreadPool(numberOfThreads);
start = System.currentTimeMillis();
for (int i = 0; i < totalRequest; i++) {
@@ -522,7 +518,7 @@ public class TestAll {
System.out.println("解密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
System.out.println("TPS: " + String.format("%.2f", tps));
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
- avgLatency = duration * 1.0 / totalRequest;
+ avgLatency = numberOfThreads * duration * 1.0 / totalRequest;
writeToPerformanceFile("SM4短数据解密并校验MAC", 1024, 1, numberOfThreads, totalRequest, tps, avgLatency);
}
@@ -582,7 +578,7 @@ public class TestAll {
System.out.println("加密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
System.out.println("TPS: " + String.format("%.2f", tps));
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
- double avgLatency = duration * 1.0 / totalRequest;
+ double avgLatency = numberOfThreads * duration * 1.0 / totalRequest;
writeToPerformanceFile("SM4批量数据加密并生成MAC", 1024, 1, numberOfThreads, totalRequest, String.format("%.2f", tps) + " x 4", avgLatency);
ExecutorService poolDec = Executors.newFixedThreadPool(numberOfThreads);
@@ -605,12 +601,11 @@ public class TestAll {
System.out.println("解密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
System.out.println("TPS: " + String.format("%.2f", tps));
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
- avgLatency = duration * 1.0 / totalRequest;
+ avgLatency = numberOfThreads * duration * 1.0 / totalRequest;
writeToPerformanceFile("SM4批量数据解密并校验MAC", 1024, 1, numberOfThreads, totalRequest, String.format("%.2f", tps) + " x 4", avgLatency);
}
-
public void sm4LongEnde() {
System.out.println("-------- SM4长数据加解密性能测试开始 --------");
@@ -721,14 +716,12 @@ public class TestAll {
System.out.println("共花费 " + String.format("%.2f", duration / 1000.0) + " 秒");
System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB/S");
- writeToPerformanceFile2("SM3长数据", "100MB", 1, 1, throughput);
+ writeToPerformanceFile2("SM3长数据", "100MB", 1, 1, throughput);
System.out.println("-------- SM3长数据性能测试结束 --------");
}
-
-
public void perfAll() throws InterruptedException {
this.sm4ShortEndes();
this.sm4BatchEndes();
@@ -744,7 +737,6 @@ public class TestAll {
}
-
public static void showmenu() {
System.out.println("请选择测试项:");
System.out.println("1.SM4 短数据加解密");
@@ -761,8 +753,9 @@ public class TestAll {
System.out.println("12. 批量数据 SM4+MAC性能测试");
System.out.println("-1.退出");
}
- public static void perfMenu(Config config, Choise choise, TestAll test) throws Exception{
-
+
+ public static void perfMenu(Config config, Choise choise, TestAll test) throws Exception {
+
boolean flag = true;
while (flag) {