commit 582d7fceae9ea9a65a44101081aca830503e0153 Author: rj <523019756@qq.com> Date: Wed Oct 29 21:58:55 2025 +0800 Changes diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..f1535ba --- /dev/null +++ b/pom.xml @@ -0,0 +1,109 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.3.12.RELEASE + + + org.paperflow + helpProjects + 0.0.1-SNAPSHOT + helpProjects + helpProjects + + 8 + + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-data-elasticsearch + + + com.baomidou + mybatis-plus-boot-starter + 3.5.3.1 + + + com.github.xiaoymin + knife4j-openapi2-spring-boot-starter + 4.5.0 + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.springframework.boot + spring-boot-starter-cache + + + org.postgresql + postgresql + + + com.alibaba + easyexcel + 3.3.2 + + + cn.hutool + hutool-all + 5.8.25 + + + com.google.guava + guava + 33.0.0-jre + + + io.minio + minio + 8.1.0 + + + org.springframework.boot + spring-boot-configuration-processor + true + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + org.bouncycastle + bcpkix-jdk18on + 1.78 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + diff --git a/src/main/java/org/paperflow/helpprojects/HelpProjectsApplication.java b/src/main/java/org/paperflow/helpprojects/HelpProjectsApplication.java new file mode 100644 index 0000000..a808889 --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/HelpProjectsApplication.java @@ -0,0 +1,17 @@ +package org.paperflow.helpprojects; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cache.annotation.EnableCaching; + +@EnableCaching +@MapperScan("org.paperflow.helpprojects.**.mapper") +@SpringBootApplication +public class HelpProjectsApplication { + + public static void main(String[] args) { + SpringApplication.run(HelpProjectsApplication.class, args); + } + +} diff --git a/src/main/java/org/paperflow/helpprojects/config/RedisConfig.java b/src/main/java/org/paperflow/helpprojects/config/RedisConfig.java new file mode 100644 index 0000000..813d505 --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/config/RedisConfig.java @@ -0,0 +1,10 @@ +package org.paperflow.helpprojects.config; + +import org.springframework.context.annotation.Configuration; + +/** + * @author vicro + */ +//@Configuration +public class RedisConfig { +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/BaseMapper.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/BaseMapper.java new file mode 100644 index 0000000..370ddc7 --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/BaseMapper.java @@ -0,0 +1,5 @@ +package org.paperflow.helpprojects.inoutRecordService; + +public interface BaseMapper extends com.baomidou.mybatisplus.core.mapper.BaseMapper { + +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/BaseService.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/BaseService.java new file mode 100644 index 0000000..61bae94 --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/BaseService.java @@ -0,0 +1,11 @@ +package org.paperflow.helpprojects.inoutRecordService; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.paperflow.helpprojects.inoutRecordService.domain.SuperEntity; +import org.springframework.validation.annotation.Validated; + +@Validated +public class BaseService, T extends SuperEntity> extends ServiceImpl{ + + +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/AfInOutRecord.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/AfInOutRecord.java new file mode 100644 index 0000000..a392539 --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/AfInOutRecord.java @@ -0,0 +1,86 @@ +package org.paperflow.helpprojects.inoutRecordService.domain; + +import cn.hutool.core.date.DatePattern; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +@TableName("af_in_out_record") +@ApiModel( description = "道闸出入记录 实体") +@ExcelIgnoreUnannotated +public class AfInOutRecord extends BaseEntity { + + /** + * The Constant serialVersionUID. + */ + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "名称") + @TableField(exist = false) + @ExcelProperty(value = "名称",order=1) + private String name; + + @ApiModelProperty(value = "用户ID") + private String userId; + + @ApiModelProperty(value = "人员类型: 1_外部人员 2_内部人员 owner_Type") + @ExcelProperty(value = "人员类型",order = 2) + private String userType; + + @ApiModelProperty(value = "出入类型: 0_进门 1_出门 access_type") + @ExcelProperty(value = "出入类型",order = 3) + private String type; + + @ApiModelProperty(value = "通行方式: 1_刷卡 2_刷码 3_刷脸 ,4_身份证,0_未知 security_passage_mode") + @ExcelProperty(value = "通行方式",order = 4) + private String passageMode; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") // 入参格式化 前端传给后端的 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") // 出参格式化 后端传给前端的 + @ApiModelProperty(value = "通行时间") + @com.alibaba.excel.annotation.format.DateTimeFormat(DatePattern.NORM_DATETIME_PATTERN) + @ExcelProperty(value = "通行时间",order = 5) + private Date passageTime; + + @ApiModelProperty(value = "体温") + @ExcelProperty(value = "体温",order = 6) + private String temperature; + + @ApiModelProperty(value = "抓拍图片") + private String img; + + @ApiModelProperty(value = "园区ID") + private String parkId; + + @ApiModelProperty(value = "设备key") + private String deviceKey; + + @ApiModelProperty(value = "设备名称") + @TableField(exist = false) + @ExcelProperty(value = "设备名",order = 7) + private String deviceName; + + @ApiModelProperty(value = "访客电话") + @TableField(exist = false) + @ExcelProperty(value = "手机",order = 8) + private String userPhone; + + @ApiModelProperty(value = "所属部门") + @TableField(exist = false) + @ExcelProperty(value = "部门",order = 9) + private String officeName; + +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/AfPersonTrack.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/AfPersonTrack.java new file mode 100644 index 0000000..ba87470 --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/AfPersonTrack.java @@ -0,0 +1,84 @@ +package org.paperflow.helpprojects.inoutRecordService.domain; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author 86136 + * @create 2021-10-26 10:49 + * @desc + **/ +@Data +@TableName("af_person_track") +@ApiModel( description = "道闸出入记录 实体") +public class AfPersonTrack extends BaseEntity { + + @ApiModelProperty(value = "用户ID") + private String userId; + + @ApiModelProperty(value = "1内部人员 2外部人员 3陌生人") + private String userType; + + @ApiModelProperty(value = "设备key") + private String deviceKey; + + @ApiModelProperty(value = "检查方式") + private String productType; + + @ApiModelProperty(value = "抓拍图片id") + private String attachId; + + @ApiModelProperty(value = "检测轨迹时间") + private String trackTime; + + @ApiModelProperty(value = "园区ID") + private String parkId; + + @ApiModelProperty(value = "人员名称") + @TableField(exist = false) + private String userName; + + @ApiModelProperty(value = "人员联系方式") + @TableField(exist = false) + private String userPhone; + + @ApiModelProperty(value = "人员头像") + @TableField(exist = false) + private String userPhoto; + + @ApiModelProperty(value = "所属部门名称") + @TableField(exist = false) + private String officeName; + + @ApiModelProperty(value = "监控设备名称") + @TableField(exist = false) + private String deviceName; + + @ApiModelProperty(value = "设备位置") + @TableField(exist = false) + private String aliasName; + + @ApiModelProperty(value = "抓拍图片路径") + @TableField(exist = false) + private String fileUrl; + + @ApiModelProperty(value = "开始时间") + @TableField(exist = false) + private String startTime; + + @ApiModelProperty(value = "结束时间") + @TableField(exist = false) + private String endTime; + + @ApiModelProperty(value = "经度") + @TableField(exist = false) + private String longitude; + + @ApiModelProperty(value = "维度") + @TableField(exist = false) + private String latitude; +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/BaseEntity.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/BaseEntity.java new file mode 100644 index 0000000..12d7779 --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/BaseEntity.java @@ -0,0 +1,56 @@ +package org.paperflow.helpprojects.inoutRecordService.domain; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + + +@EqualsAndHashCode(callSuper = true) +@Data +@ApiModel(description = "基础实体类") +public class BaseEntity extends IdEntity { + + @ApiModelProperty(value = "创建人") + @TableField(value="create_by", fill = FieldFill.INSERT) + private String createBy; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", locale="zh", timezone="GMT+8") + @ApiModelProperty(value = "创建时间") + @TableField(value="create_date", fill = FieldFill.INSERT) + private Date createDate; + + @ApiModelProperty(value = "更新人") + @TableField(value="update_by", fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", locale="zh", timezone="GMT+8") + @ApiModelProperty(value = "更新时间") + @TableField(value="update_date", fill = FieldFill.INSERT_UPDATE) + private Date updateDate; + + @ApiModelProperty(value = "备注") + private String remarks; + + /** 是否删除 1删除 0未删除**/ + @TableLogic(value = "0", delval = "1") + @ApiModelProperty(value = "是否删除") + @TableField(value="del_flag", fill = FieldFill.INSERT) + private String delFlag; + + + /********************************* 非数据库字段 **********************************/ + + /** 多条件查询 **/ + @TableField(exist = false) + private String conditionQuery; +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/DeviceEntity.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/DeviceEntity.java new file mode 100644 index 0000000..8e91ad5 --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/DeviceEntity.java @@ -0,0 +1,36 @@ +package org.paperflow.helpprojects.inoutRecordService.domain; + +import lombok.Data; + +import java.util.Date; + +@Data +public class DeviceEntity extends BaseEntity{ + + private static final long serialVersionUID = -6716200226645140363L; + + /** 产品名称 **/ + private String productName; + /** 产品key **/ + private String productKey; + /** 产品类型 **/ + private String productType; + /** 产品型号 **/ + private String productModel; + /** 提供商名称 **/ + private String manufacturerName; + /** 描述 **/ + private String description; + /** 设备名称 **/ + private String deviceName; + /** 设备key **/ + private String deviceKey; + /** 设备状态 0离线 1在线 **/ + private String state; + /** 心跳类型 0手动 1自动 **/ + private String heartbeatType; + /** 上级设备key **/ + private String parentDeviceKey; + /** 心跳时间*/ + private Date heartbeatTime; +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/DeviceReport.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/DeviceReport.java new file mode 100644 index 0000000..1c61d6d --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/DeviceReport.java @@ -0,0 +1,28 @@ +package org.paperflow.helpprojects.inoutRecordService.domain; + +import lombok.Data; + +/** + * ClassName: DeviceReport + * @Description: TODO + * @author zx + * @date 2020年9月2日 + */ +@Data +public class DeviceReport { + + /** 园区ID **/ + private String parkId; + /** 设备key **/ + private String deviceKey; + /** 产品类型 **/ + private String productType; + /** 产品key **/ + private String productKey; + /** 时间戳 **/ + private long timestamp; + /** 上报数据 **/ + private String data; + /** 设备名称**/ + private String deviceName; +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/DeviceWalk.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/DeviceWalk.java new file mode 100644 index 0000000..adc7316 --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/DeviceWalk.java @@ -0,0 +1,31 @@ +package org.paperflow.helpprojects.inoutRecordService.domain; + + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * ClassName:FkCustomerManage
+ * Function: 人行道闸 + * @author zsh + * @version 2020-3-18 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@TableName(value = "fk_guest_walk_device") +public class DeviceWalk extends DeviceEntity { + + private static final long serialVersionUID = 504733878790448334L; + /** 园区id **/ + private String parkId; + /** 出入类型 0:进,1:出 **/ + private String accessType; +// /**经度*/ +// @ApiModelProperty("经度") +// private String longitude; +// /**维度*/ +// @ApiModelProperty("维度") +// private String latitude; +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/HeatRecord.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/HeatRecord.java new file mode 100644 index 0000000..f016367 --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/HeatRecord.java @@ -0,0 +1,185 @@ +package org.paperflow.helpprojects.inoutRecordService.domain; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * ClassName: HeatRecord + * + * @author zx + * @Description: 人脸体温记录 + * @date 2020年3月7日 + */ +@TableName(value = "jk_face_heat_record") +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +@ApiModel( description = "测温记录 实体类") +public class HeatRecord extends BaseEntity implements Serializable { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = -348274013933261305L; + /** + * 用户ID + */ + @ApiModelProperty(value = "用户ID") + private String userId; + + /** + * 用户 + */ + @ApiModelProperty(value = "用户") + private String name; + /**数据来源 1表示魔方,2表示华府**/ + @TableField(exist = false) + private String sourceType; + /**第三方流水号id*/ + @ApiModelProperty(value = "第三方流水号id") + private String taskId; + + /** + * 人脸识别唯一码 + */ + @ApiModelProperty(value = "人脸识别唯一码") + private String code; + + /** + * 公司名称 + */ + @ApiModelProperty(value = "公司名称") + private String companyName; + + /** + * 部门名称 + */ + @ApiModelProperty(value = "部门名称") + private String deptName; + + /** + * 手机 + */ + @ApiModelProperty(value = "手机") + private String mobile; + + /** + * 温度 + */ + @ApiModelProperty(value = "温度") + private String heat; + + /** + * 是否佩戴口罩 + */ + @ApiModelProperty(value = "是否佩戴口罩 0未知 1未识别 2没戴口罩 3戴口罩") + private String isMasks; + + /** + * 人脸图 + */ + @ApiModelProperty(value = "人脸图") + private String face; + + /** + * 抓拍 + */ + @ApiModelProperty(value = "抓拍") + private String snap; + + /** + * 识别率 + */ + @ApiModelProperty(value = "识别率") + private String similarity; + + /** + * 是否正常 + */ + @ApiModelProperty(value = "是否正常 1 正常 0不正常") + private String isNormal; + + /** + * 记录时间 + */ + @ApiModelProperty(value = "记录时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date reportTime; + + /** + * 用户类别 + */ + @ApiModelProperty(value = "用户类别,1内部人员,2外部人员") + private String userType; + + /** + * parkId + */ + private String parkId; + + /** + * 设备key + */ + @ApiModelProperty(value = "设备key") + private String deviceKey; + + /** + * 年龄 + */ + @ApiModelProperty(value = "年龄") + private Integer age; + + /** + * 性别 + */ + @ApiModelProperty(value = "性别 0未知 1男 2女") + private String sex; + + /** + * 是否有帽子 + */ + @ApiModelProperty(value = "是否有帽子") + private String isHat; + + /** + * 是否有眼镜 + */ + @ApiModelProperty(value = "是否有眼镜") + private String isGlasses; + + /** + * 预警温度 + */ + @ApiModelProperty(value = "预警温度") + private String warnHeat; + + /** + * 位置 + */ + @ApiModelProperty(value = "位置") + @TableField(exist = false) + private String buildName; + /** + * startTime + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @TableField(exist = false) + private Date startTime; + + /** + * endTime + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @TableField(exist = false) + private Date endTime; + +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/HfFace.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/HfFace.java new file mode 100644 index 0000000..a109ab2 --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/HfFace.java @@ -0,0 +1,48 @@ +package org.paperflow.helpprojects.inoutRecordService.domain; + +import lombok.Data; + +/** + * @author vicro + */ +@Data +public class HfFace { + + + /** + * 健康码状态 健康码颜色:0-绿色;1-黄色;2-红色;3-未知;4-数据异常;5-验证失败 by wxd 2022-7-26 成电健康通 + */ + private String healthCode; + /**访客身份证号 **/ + private String userICard; + /**抓拍图片*/ + private String entryPhoto; + /**手机号*/ + private String userPhone; + /**用户名*/ + private String userName; + /**卡号*/ + private String userCardNo; + /**比对时间*/ + private String entryTime; + /**道闸deviceKey*/ + private String barrierGateId; + /**识别方式 1-刷卡 2-人脸识别*/ + private String entryType; + /**园区id*/ + private String parkId; + /**相似度*/ + private String confidence; + /**是否佩戴口罩*/ + private String mask; + /**体温*/ + private String temperature; + /**设备名称*/ + private String deviceName; + /**任务id*/ + private String taskId; + /**数据来源,日志中用到,记录数据合并来源,目前1为魔方,2为华付*/ + private String sourceType; + /**识别是否成功*/ + private Integer isSuccess; +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/IdEntity.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/IdEntity.java new file mode 100644 index 0000000..268640e --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/IdEntity.java @@ -0,0 +1,20 @@ +package org.paperflow.helpprojects.inoutRecordService.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +@EqualsAndHashCode(callSuper = true) +@Data +@ApiModel(description = "ID实体类") +public class IdEntity extends SuperEntity { + + @ApiModelProperty(value = "主键") + @TableId(value = "id", type = IdType.ASSIGN_ID) + public String id; + +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/ParkUser.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/ParkUser.java new file mode 100644 index 0000000..acd2126 --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/ParkUser.java @@ -0,0 +1,37 @@ +package org.paperflow.helpprojects.inoutRecordService.domain; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + + +@Data +@NoArgsConstructor +@TableName("park_user") +public class ParkUser extends SuperEntity { + + /** + * 工号 + **/ + @ExcelProperty(value = "用户id",index = 0) + @ApiModelProperty(value = "工号") + private String userId; + /** + * 姓名 + **/ + @ExcelProperty(value = "姓名",index = 2) + @ApiModelProperty(value = "姓名") + @NotBlank(message = "姓名不能为空") + private String name; + + @ExcelProperty(value = "手机号",index = 1) + private String phone; + + @ExcelProperty(value = "园区id",index = 3) + private String parkId; +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/SuperEntity.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/SuperEntity.java new file mode 100644 index 0000000..423b4dc --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/domain/SuperEntity.java @@ -0,0 +1,14 @@ +package org.paperflow.helpprojects.inoutRecordService.domain; + +import java.io.Serializable; + +/** + * @author zhaoxuan + * @title: SuperEntity + * @projectName iot-park + * @description: TODO + * @date 2021/11/1213:53 + */ +public class SuperEntity implements Serializable { + +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/mapper/AfInOutRecordMapper.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/mapper/AfInOutRecordMapper.java new file mode 100644 index 0000000..2fbbb8d --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/mapper/AfInOutRecordMapper.java @@ -0,0 +1,14 @@ +package org.paperflow.helpprojects.inoutRecordService.mapper; + + +import org.paperflow.helpprojects.inoutRecordService.BaseMapper; +import org.paperflow.helpprojects.inoutRecordService.domain.AfInOutRecord; + +/** + * @Author:wangb + * @Description: 通道出入记录 + * @Date 2021-04-16 + **/ +public interface AfInOutRecordMapper extends BaseMapper { + +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/mapper/DeviceWalkDao.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/mapper/DeviceWalkDao.java new file mode 100644 index 0000000..fcba7ca --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/mapper/DeviceWalkDao.java @@ -0,0 +1,15 @@ +package org.paperflow.helpprojects.inoutRecordService.mapper; + +import org.paperflow.helpprojects.inoutRecordService.BaseMapper; +import org.paperflow.helpprojects.inoutRecordService.domain.DeviceWalk; + +/** + * ClassName: FootWalkDeviceDao
+ * Function: '%Y-%m-%d'DAO接口 + * @author zsh + * @version 2020-3-18 + */ + +public interface DeviceWalkDao extends BaseMapper { + +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/mapper/HeatRecordDao.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/mapper/HeatRecordDao.java new file mode 100644 index 0000000..bac212e --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/mapper/HeatRecordDao.java @@ -0,0 +1,9 @@ +package org.paperflow.helpprojects.inoutRecordService.mapper; + + +import org.paperflow.helpprojects.inoutRecordService.BaseMapper; +import org.paperflow.helpprojects.inoutRecordService.domain.HeatRecord; + +public interface HeatRecordDao extends BaseMapper { + +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/mapper/ParkUserMapper.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/mapper/ParkUserMapper.java new file mode 100644 index 0000000..3bdcee2 --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/mapper/ParkUserMapper.java @@ -0,0 +1,10 @@ +package org.paperflow.helpprojects.inoutRecordService.mapper; + + +import org.paperflow.helpprojects.inoutRecordService.BaseMapper; +import org.paperflow.helpprojects.inoutRecordService.domain.HeatRecord; +import org.paperflow.helpprojects.inoutRecordService.domain.ParkUser; + +public interface ParkUserMapper extends BaseMapper { + +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/mapper/PersonTrackMapper.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/mapper/PersonTrackMapper.java new file mode 100644 index 0000000..7f051ed --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/mapper/PersonTrackMapper.java @@ -0,0 +1,15 @@ +package org.paperflow.helpprojects.inoutRecordService.mapper; + +import org.paperflow.helpprojects.inoutRecordService.BaseMapper; +import org.paperflow.helpprojects.inoutRecordService.domain.AfPersonTrack; + +import java.util.List; + +/** + * @author 86136 + * @create 2021-10-26 11:04 + * @desc + **/ +public interface PersonTrackMapper extends BaseMapper { + + } diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/service/AfInOutRecordService.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/service/AfInOutRecordService.java new file mode 100644 index 0000000..dab61e0 --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/service/AfInOutRecordService.java @@ -0,0 +1,40 @@ +package org.paperflow.helpprojects.inoutRecordService.service; + + +import org.apache.ibatis.annotations.Param; +import org.paperflow.helpprojects.inoutRecordService.BaseService; +import org.paperflow.helpprojects.inoutRecordService.domain.AfInOutRecord; +import org.paperflow.helpprojects.inoutRecordService.mapper.AfInOutRecordMapper; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * @Author:ALP + * @Description: 通道出入记录 + * @Date 2021-04-16 + **/ +@Transactional(readOnly = true) +@Service +public class AfInOutRecordService extends BaseService { + + + /** + * @param entity 通道记录DO + * @return boolean + */ + @Override + @Transactional(rollbackFor = Exception.class) + public boolean save(AfInOutRecord entity) { + if(entity!=null){ + return super.save(entity); + }else{ + return Boolean.FALSE; + } + } + +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/service/DeviceWalkService.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/service/DeviceWalkService.java new file mode 100644 index 0000000..cfb2206 --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/service/DeviceWalkService.java @@ -0,0 +1,34 @@ +package org.paperflow.helpprojects.inoutRecordService.service; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.paperflow.helpprojects.inoutRecordService.BaseService; +import org.paperflow.helpprojects.inoutRecordService.domain.DeviceEntity; +import org.paperflow.helpprojects.inoutRecordService.domain.DeviceWalk; +import org.paperflow.helpprojects.inoutRecordService.mapper.DeviceWalkDao; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + * ClassName: FootWalkDeviceService + * Function: 人行道闸服务层service + * + * @author zsh + * @version 2020-3-18 + */ +@Slf4j +@Component +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class DeviceWalkService extends BaseService { + + + @Cacheable(value = "deviceWalk", key = "#deviceKey", unless = "#result == null") + public DeviceWalk getByDeviceKey(String deviceKey) { + return getOne(Wrappers.lambdaQuery(DeviceWalk.class) + .eq(DeviceWalk::getDeviceKey, deviceKey) + .last("limit 1")); + } +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/service/HeatRecordService.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/service/HeatRecordService.java new file mode 100644 index 0000000..626aea2 --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/service/HeatRecordService.java @@ -0,0 +1,17 @@ +package org.paperflow.helpprojects.inoutRecordService.service; + +import lombok.extern.slf4j.Slf4j; +import org.paperflow.helpprojects.inoutRecordService.BaseService; +import org.paperflow.helpprojects.inoutRecordService.domain.HeatRecord; +import org.paperflow.helpprojects.inoutRecordService.mapper.HeatRecordDao; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Slf4j +@Service +@Transactional(readOnly = true) +public class HeatRecordService extends BaseService { + + + +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/service/ParkUserService.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/service/ParkUserService.java new file mode 100644 index 0000000..15a0ec2 --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/service/ParkUserService.java @@ -0,0 +1,26 @@ +package org.paperflow.helpprojects.inoutRecordService.service; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.extern.slf4j.Slf4j; +import org.paperflow.helpprojects.inoutRecordService.BaseService; +import org.paperflow.helpprojects.inoutRecordService.domain.HeatRecord; +import org.paperflow.helpprojects.inoutRecordService.domain.ParkUser; +import org.paperflow.helpprojects.inoutRecordService.mapper.HeatRecordDao; +import org.paperflow.helpprojects.inoutRecordService.mapper.ParkUserMapper; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Slf4j +@Service +@Transactional(readOnly = true) +public class ParkUserService extends BaseService { + + + @Cacheable(value = "parkUser", key = "#userPhone+':'+#parkId", unless = "#result == null") + public ParkUser getUserByMobileAndParkId(String userPhone, String parkId) { + return getOne(Wrappers.lambdaQuery(ParkUser.class) + .eq(ParkUser::getPhone, userPhone) + .eq(ParkUser::getParkId, parkId).last("limit 1")); + } +} diff --git a/src/main/java/org/paperflow/helpprojects/inoutRecordService/service/PersonTrackService.java b/src/main/java/org/paperflow/helpprojects/inoutRecordService/service/PersonTrackService.java new file mode 100644 index 0000000..4d16e79 --- /dev/null +++ b/src/main/java/org/paperflow/helpprojects/inoutRecordService/service/PersonTrackService.java @@ -0,0 +1,18 @@ +package org.paperflow.helpprojects.inoutRecordService.service; + + +import org.paperflow.helpprojects.inoutRecordService.BaseService; +import org.paperflow.helpprojects.inoutRecordService.domain.AfPersonTrack; +import org.paperflow.helpprojects.inoutRecordService.mapper.PersonTrackMapper; +import org.springframework.stereotype.Service; + + +/** + * @author 86136 + * @create 2021-10-26 11:03 + * @desc + **/ +@Service +public class PersonTrackService extends BaseService { + +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..7c4b684 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,13 @@ +spring: + application: + name: helpProjects + datasource: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://10.206.20.45:5432/rev_park?stringtype=unspecified¤tSchema=recovery + username: postgres + password: zhyq@2023 + redis: + host: 10.206.20.45 + port: 6379 + password: zhyq@2023 + database: 3 diff --git a/src/main/resources/data.txt b/src/main/resources/data.txt new file mode 100644 index 0000000..5876aa2 --- /dev/null +++ b/src/main/resources/data.txt @@ -0,0 +1,2 @@ +2699b530e3bfc730f510760efb37d1fcf861d7fe08f7b33760c2a7d914e98f8ef27bdf493021e54d51079b0a9abbbf182c219fb2a4bcced438fcea4f681f03c +e26ae46ac22e98741d79f357bc8e9799c49514a17e10b28f3cbb011c00bc5e6f00998365e32436eb391fbb2ed0894381b542a8b5472a3578715f5e96a21de33b diff --git a/src/main/resources/helpProjects.json b/src/main/resources/helpProjects.json new file mode 100644 index 0000000..04ce685 --- /dev/null +++ b/src/main/resources/helpProjects.json @@ -0,0 +1,675 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "标题:world_cup后台管理系统_接口文档", + "description": "描述:用于管理集团旗下公司的此后台管理系统_接口文档", + "contact": { + "name": "admin" + }, + "version": "版本号: 3.2.0" + }, + "servers": [ + { + "url": "https://api.alphadogepool.club:443", + "description": "Inferred Url" + } + ], + "tags": [ + { + "name": "ASIC矿机管理", + "description": "Bsc Asic Controller" + }, + { + "name": "用户管理", + "description": "Bsc User Controller" + }, + { + "name": "通用管理", + "description": "Bsc Common Controller" + } + ], + "paths": { + "/prod-api/app/asic/list": { + "get": { + "tags": [ + "ASIC矿机管理" + ], + "summary": "查询ASIC矿机列表", + "operationId": "listUsingGET", + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/请求响应对象«List«ASIC矿机视图对象»»" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + } + }, + "security": [ + { + "Authorization": [ + "global" + ] + } + ] + } + }, + "/prod-api/app/common/getDate": { + "get": { + "tags": [ + "通用管理" + ], + "summary": "获取服务器时间", + "operationId": "getDateUsingGET", + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/请求响应对象«date-time»" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + } + }, + "security": [ + { + "Authorization": [ + "global" + ] + } + ] + } + }, + "/prod-api/app/common/getDictValues": { + "get": { + "tags": [ + "通用管理" + ], + "summary": "获取字典数据", + "description": "111-审计报告 112-检查公司 113-中文电报群组 114-英文电报群组 115-在线客服 116-小狐狸 117-币安 118-飞机", + "operationId": "getDictValuesUsingGET", + "parameters": [ + { + "name": "dict", + "in": "query", + "description": "字典数组", + "required": false, + "style": "form", + "explode": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/请求响应对象" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + } + }, + "security": [ + { + "Authorization": [ + "global" + ] + } + ] + } + }, + "/prod-api/app/user/getAlgebra": { + "get": { + "tags": [ + "用户管理" + ], + "summary": "查询代数列表", + "operationId": "getAlgebraUsingGET", + "parameters": [ + { + "name": "address", + "in": "query", + "description": "address", + "required": true, + "style": "form", + "schema": { + "type": "string" + } + }, + { + "name": "chainId", + "in": "query", + "description": "chainId", + "required": true, + "style": "form", + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/请求响应对象" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + } + }, + "security": [ + { + "Authorization": [ + "global" + ] + } + ] + } + }, + "/prod-api/app/user/getInfo": { + "get": { + "tags": [ + "用户管理" + ], + "summary": "账户仪表盘", + "operationId": "getInfoUsingGET", + "parameters": [ + { + "name": "address", + "in": "query", + "description": "address", + "required": true, + "style": "form", + "schema": { + "type": "string" + } + }, + { + "name": "chainId", + "in": "query", + "description": "chainId", + "required": true, + "style": "form", + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/请求响应对象" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + } + }, + "security": [ + { + "Authorization": [ + "global" + ] + } + ] + } + }, + "/prod-api/app/user/getUserByAddress": { + "get": { + "tags": [ + "用户管理" + ], + "summary": "获取用户信息", + "operationId": "getUserByAddressUsingGET", + "parameters": [ + { + "name": "address", + "in": "query", + "description": "address", + "required": true, + "style": "form", + "schema": { + "type": "string" + } + }, + { + "name": "chainId", + "in": "query", + "description": "chainId", + "required": true, + "style": "form", + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/请求响应对象«用户视图对象»" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + } + }, + "security": [ + { + "Authorization": [ + "global" + ] + } + ] + } + }, + "/prod-api/app/user/register": { + "post": { + "tags": [ + "用户管理" + ], + "summary": "用户注册", + "description": "非必传邀请人", + "operationId": "registerUsingPOST", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/用户管理业务对象" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/请求响应对象" + } + } + } + }, + "201": { + "description": "Created" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + } + }, + "security": [ + { + "Authorization": [ + "global" + ] + } + ] + } + }, + "/prod-api/app/user/withdrawal": { + "post": { + "tags": [ + "用户管理" + ], + "summary": "提现", + "operationId": "withdrawalUsingPOST", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/充值提现对象" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/请求响应对象" + } + } + } + }, + "201": { + "description": "Created" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + } + }, + "security": [ + { + "Authorization": [ + "global" + ] + } + ] + } + } + }, + "components": { + "schemas": { + "ASIC矿机视图对象": { + "title": "ASIC矿机视图对象", + "type": "object", + "properties": { + "cf": { + "type": "string", + "description": "算力" + }, + "createTime": { + "type": "string", + "description": "创建日期", + "format": "date-time" + }, + "dailyEarnings": { + "type": "number", + "description": "日收益", + "format": "bigdecimal" + }, + "holdingAmount": { + "type": "number", + "description": "持有额度", + "format": "bigdecimal" + }, + "id": { + "type": "integer", + "description": "id", + "format": "int64" + }, + "name": { + "type": "string", + "description": "硬件类型" + }, + "profitMargin": { + "type": "number", + "description": "区块利润率", + "format": "bigdecimal" + }, + "remarks": { + "type": "string", + "description": "备注" + } + } + }, + "充值提现对象": { + "title": "充值提现对象", + "required": [ + "address", + "txid" + ], + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "地址" + }, + "chainId": { + "type": "integer", + "description": "0波场 1eth 56bsc", + "format": "int64" + }, + "txid": { + "type": "string", + "description": "txid" + } + } + }, + "用户管理业务对象": { + "title": "用户管理业务对象", + "required": [ + "address" + ], + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "地址" + }, + "chainId": { + "type": "integer", + "description": "0波场 1eth 56bsc", + "format": "int64" + }, + "upAddress": { + "type": "string", + "description": "邀请人地址" + } + } + }, + "用户视图对象": { + "title": "用户视图对象", + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "地址" + }, + "approveBalance": { + "type": "number", + "description": "授权额度", + "format": "bigdecimal" + }, + "chainId": { + "type": "integer", + "description": "链id:0-波场 1-ETH主网 56-BSC主网 ", + "format": "int64" + }, + "createTime": { + "type": "string", + "description": "创建日期", + "format": "date-time" + }, + "id": { + "type": "integer", + "description": "id", + "format": "int64" + }, + "ipAddr": { + "type": "string", + "description": "ip" + }, + "isFreeze": { + "type": "integer", + "description": "0正常 1冻结", + "format": "int64" + }, + "recommendCount": { + "type": "integer", + "description": "直推人数", + "format": "int64" + }, + "txBalance": { + "type": "number", + "description": "待领取余额", + "format": "bigdecimal" + }, + "upAddress": { + "type": "string", + "description": "邀请人" + }, + "usdtBalance": { + "type": "number", + "description": "USDT余额", + "format": "bigdecimal" + } + } + }, + "请求响应对象": { + "title": "请求响应对象", + "type": "object", + "properties": { + "code": { + "type": "integer", + "description": "消息状态码", + "format": "int32" + }, + "data": { + "type": "object", + "description": "数据对象" + }, + "msg": { + "type": "string", + "description": "消息内容" + } + } + }, + "请求响应对象«List«ASIC矿机视图对象»»": { + "title": "请求响应对象«List«ASIC矿机视图对象»»", + "type": "object", + "properties": { + "code": { + "type": "integer", + "description": "消息状态码", + "format": "int32" + }, + "data": { + "type": "array", + "description": "数据对象", + "items": { + "$ref": "#/components/schemas/ASIC矿机视图对象" + } + }, + "msg": { + "type": "string", + "description": "消息内容" + } + } + }, + "请求响应对象«date-time»": { + "title": "请求响应对象«date-time»", + "type": "object", + "properties": { + "code": { + "type": "integer", + "description": "消息状态码", + "format": "int32" + }, + "data": { + "type": "string", + "description": "数据对象", + "format": "date-time" + }, + "msg": { + "type": "string", + "description": "消息内容" + } + } + }, + "请求响应对象«用户视图对象»": { + "title": "请求响应对象«用户视图对象»", + "type": "object", + "properties": { + "code": { + "type": "integer", + "description": "消息状态码", + "format": "int32" + }, + "data": { + "description": "数据对象", + "$ref": "#/components/schemas/用户视图对象" + }, + "msg": { + "type": "string", + "description": "消息内容" + } + } + } + }, + "securitySchemes": { + "Authorization": { + "type": "apiKey", + "name": "Authorization", + "in": "header" + } + } + } +} diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..eb24b84 --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,96 @@ + + + + + + + logback + + + + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + + UTF-8 + + + + DEBUG + + + + + + ${LOG_PATH}/${APP_NAME}.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{trackId}] %-5level %logger{50} - %msg%n + UTF-8 + + + + + 20MB + + ${LOG_PATH}/${APP_NAME}.%d{yyyy-MM-dd}.%i.log + + 30 + + 10GB + + + + + + ${LOG_PATH}/${APP_NAME}_error.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{trackId}] %-5level %logger{50} - %msg%n + UTF-8 + + + + + 20MB + + ${LOG_PATH}/${APP_NAME}_error.%d{yyyy-MM-dd}.%i.log + + 30 + + 10GB + + + + ERROR + ACCEPT + DENY + + + + + + + + + + + diff --git a/src/test/java/org/paperflow/helpprojects/CommonTest.java b/src/test/java/org/paperflow/helpprojects/CommonTest.java new file mode 100644 index 0000000..10cd5c1 --- /dev/null +++ b/src/test/java/org/paperflow/helpprojects/CommonTest.java @@ -0,0 +1,172 @@ +package org.paperflow.helpprojects; + +import cn.hutool.core.util.RandomUtil; +import cn.hutool.http.Header; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONUtil; +import io.swagger.models.auth.In; +import lombok.ToString; +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; +import org.springframework.boot.test.context.SpringBootTest; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.net.Proxy; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.stream.IntStream; + +/** + * @author Renjie + */ +@Slf4j +@SpringBootTest +public class CommonTest { + + + @Test + public void test() { + IntStream.range(0, 10000).parallel().forEach(i->{ + try{ + + String s = "0x"+ RandomUtil.randomString(40); + HttpRequest get = HttpUtil.createPost("https://api.alphadogepool.club/prod-api/app/user/register"); + Map map = new HashMap<>(); + map.put("address", s); + int randomInt = RandomUtil.randomInt(0, 30); + if (randomInt < 10) { + map.put("chainId", 0); + } else if (randomInt < 20) { + map.put("chainId", 1); + }else { + map.put("chainId", 56); + } + get.setHttpProxy("127.0.0.1", 10809) + .body(JSONUtil.toJsonStr(map)) + .header(Header.USER_AGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/141.0.0.0") + .header("SB-Digger", "0x19af956e490b257cc6df72a6e4abd6a1b75472c2"); +// .form("address", addr) +// .form("chainId", 56); + HttpResponse execute = get.execute(); + log.info("{}:{}",s,execute.body()); + } catch (Exception ignored) { + } + }); + + } + + + public static class Point{ + public BigInteger x; + public BigInteger y; + + public static Point create(BigInteger x, BigInteger y) { + Point point = new Point(); + point.x = x; + point.y = y; + return point; + } + + @Override + public String toString() { + return "[" + + "x=" + x.toString(16) + + ", y=" + y.toString(16) + + ']'; + } + + public String toPubString() { + return "0x" + String.format("%64s",x.toString(16)).replace(' ', '0') + String.format("%64s",y.toString(16)).replace(' ', '0'); + } + public boolean isInfinity() { + return this.x == null && this.y == null; + } + } + /** + * @param p + * @return + */ + public Point pointDouble(Point p) { + if (p.isInfinity() || p.y.equals(BigInteger.ZERO)) { + return INFINITY; // 若y=0,则2P为无穷远点 + } + BigInteger x1Squared = p.x.pow(2).mod(modp); + BigInteger num = x1Squared.multiply(BigInteger.valueOf(3)).add(a).mod(modp); + BigInteger denominator = p.y.multiply(BigInteger.valueOf(2)).mod(modp); + BigInteger k = num.multiply(denominator.modInverse(modp)).mod(modp); + Point p2 = new Point(); + p2.x = k.pow(2).subtract(p.x.multiply(BigInteger.valueOf(2))).mod(modp); + p2.y = k.multiply(p.x.subtract(p2.x)).subtract(p.y).mod(modp); + return p2; + } + public Point pointAdd(Point p,Point q) { + if (p.isInfinity()) { + return q; + } + if (q.isInfinity()) { + return p; + } + if (p.x.equals(q.x) && p.y.add(q.y).mod(modp).equals(BigInteger.ZERO)) { + return INFINITY; + } + BigInteger num = q.y.subtract(p.y).mod(modp); + BigInteger denominator = q.x.subtract(p.x).mod(modp); + BigInteger k = num.multiply(denominator.modInverse(modp)).mod(modp); + Point p2 = new Point(); + p2.x = k.pow(2).subtract(p.x).subtract(q.x).mod(modp); + p2.y = k.multiply(p.x.subtract(p2.x)).subtract(p.y).mod(modp); + return p2; + } + + public Point scalarMultiply(Point p, BigInteger n) { + // 处理特殊情况:k=0或P为无穷远点 + if (n.equals(BigInteger.ZERO) || p.isInfinity()) { + return INFINITY; + } +// 确保k为正数(若k为负,等价于(-k)*(-P)) + if (n.signum() < 0) { + n = n.negate(); + p = Point.create(p.x, p.y.negate().mod(modp)); // -P的坐标为(x, -y mod p) + } + + Point result = INFINITY; + Point current = p; + String binary = n.toString(2); // 将k转为二进制 + + // 从最高位到最低位遍历二进制 + for (int i = 0; i < binary.length(); i++) { + // 步骤1:加倍当前点(result = 2*result) + result = pointDouble(result); + + // 步骤2:若当前位为1,加上当前点(result = result + current) + if (binary.charAt(i) == '1') { + result = pointAdd(result, current); + } + } + + return result; + } + + private final static BigInteger a = BigInteger.ZERO; + private final static BigInteger modp = new BigInteger("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F",16); + private final static Point INFINITY = Point.create(null,null); + /** + * y2=x3+ax+b mod p 其中a-0,b=7 + * p=0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F = 2256-232-29-28-27-26-24-1 = 2256-232-977 + */ + @Test + public void test1() { +// BigInteger prik = new BigInteger("512b07f26e8c73076b9e54a4770980309c687ce10c6335a79d6f11fce74b3f1c", 16); + BigInteger prik = new BigInteger("512b07f26e8c73076b9e54a4770980309c687ce10c6335a79d6f11fce74b3f1c", 16); + BigInteger gx = new BigInteger("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", 16); + BigInteger gy = new BigInteger("483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", 16); + Point p = Point.create(gx, gy); + p = scalarMultiply(p, prik); + System.out.println(p.toPubString()); + + } +} diff --git a/src/test/java/org/paperflow/helpprojects/HelpProjectsApplicationTests.java b/src/test/java/org/paperflow/helpprojects/HelpProjectsApplicationTests.java new file mode 100644 index 0000000..8539bc0 --- /dev/null +++ b/src/test/java/org/paperflow/helpprojects/HelpProjectsApplicationTests.java @@ -0,0 +1,116 @@ +package org.paperflow.helpprojects; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.crypto.PemUtil; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONUtil; +import com.alibaba.excel.EasyExcel; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; +import org.paperflow.helpprojects.inoutRecordService.domain.DeviceReport; +import org.paperflow.helpprojects.inoutRecordService.domain.HfFace; + +import java.io.File; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +//@SpringBootTest +class HelpProjectsApplicationTests { + + @Test + void testLog() { + String a = "c3bc8714e481497f85fb046418f9bc3f-eyJsaWNlbnNlSWQiOiJjM2JjODcxNGU0ODE0OTdmODVmYjA0NjQxOGY5YmMzZiIsImxpY2Vuc2VlTmFtZSI6IuS7jiIsImFzc2lnbmVlTmFtZSI6IuS7jiIsInByb2R1Y3RzIjpbeyJjb2RlIjoiUFNNQVJUSlVNUCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQU0VRVUVOQ0VDUFAiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUENPTk5FQ1RVSSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQS1VPWUdISERTIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBTRVFVRU5DRVBZVEhPTiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQU1lNRk9OWVBMVUdJTiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQUFBQSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQR0VSUllDT0ZGRUUiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUERPQ0dFTklFIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBKUUVYUFJFU1MiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFNFTlRSWUlOVEVHIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBTUEVFQ0hUT1RFWFQiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEVYVFJBSUNPTlMiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiQUMiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEZJUkVCQVNFIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBTUEFSUUwiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUElNQUdFVklFV0VSIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBQQU5ERVZKSVJBQVVUTyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQUVRTUVNTRURJVE9SIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBBU1RPQ0siLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUExPQ0FMSVpBVElPTlJVIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBMRURHRVIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFNFUVVFTkNFUlVTVCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQSVJFUE9SVFNJWCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQRExYQVNBUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQ09ERUtJVFMiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFNPVEVSSVNFQ1VSSVRZIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBWRVJJTE9HTEFOR1VBRyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQR0lUTEFCQ0kiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUE1SSU5URUdFRSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQkVUVEVSSElHSExJR0giLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUENIQVRHUFRDT0RJTkciLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEZBU1RTSEVMTCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQVRPTU9ORURBUksiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFRMRFJBSSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTkVPTlBSTyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQWFNEVklTVUFMSVpFUiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJDTCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQS1NJWCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTElRVUlESEVSTyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQREpBTkdPQ09NTUFORFIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFRPT0xTRVQiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEpFTktJTlNGSUxFIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBLQUZLQSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTE9DQUxJWkFUSU9OUFQiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEpUUkFDS0VSIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IkRCIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBKU09OTkVURU1MU1VQIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBNQ1BTRVJWRVJTRk9SSiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQU05BUFNIT1RTRk9SQUkiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEpBVkFTSU5BUlQiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiRE0iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFNUUktFUiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJEUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQT1hZSlNPTkNPTlZFUlQiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFBMVUdERVZLSVRNIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBLQUZLQUlERSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQU0VRVUVOQ0VESUFHUkEiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEdJVFNDT1BFIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBPUkNISURFIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBTV1BMVUdJTiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQRkFTVFJFUVVFU1QiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUE5PU1FMTkFWTURCIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBNT05HT0VYUEVSVCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTlBNUEFDS0FHRUpTT04iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUE5FS09DQVQiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFFVRVJZRkxBRyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQSFBFQVBMVUdJTiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQREpBTkdPUE9XRVJUT08iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUERSWVBVU0giLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUExBTkdVQUdFUEFDS1RXIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBORVRMSUZZIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBPV0FTUElERVZVTFNDQSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTUFURVJJQUxVSSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQU1dJU1NLSVRDT05WRVIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFpLQSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTUFURVJJQUxGUkFNRSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQV0dDT0RFQ1JFQVRPUiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQUkVHRVhUT09MIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBQT0xBUklTVE9NQ0FUUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQU1FMRk9STUFUVEVSIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBEQiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQSlNPTlRPQU5ZTEFOR1UiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFZDUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTU9OR09EQiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQUkVESVNUT09MUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQRExYUkpBUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQkFTSFNVUFBPUlRQUk8iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUE1ZQkFUSVNIRUxQRVIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiR08iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUE1PTk9LQUlQUk8iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEJVSUxETU9OIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBTQ0lQSU9NR05MIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBXQVVGS1lWSFFDUlhFTyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTE9HIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBKTUVURVJQTFVHSU5TTSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQSVNDUkFUQ0giLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEdJVExBQkVWQVJFRElUIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBEWU5BTU9EQiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQSFVCTEhFUk8iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEdQVEFTU0lTVEFOVCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQU1FMRkxVRkZMSU5URVIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFJDSFNQUklOR0NPREVHIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBIRUFMVEhUSU1FUiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQVpEIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBPUEVOQVBJIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBUSU1FVFJBQ0tFUlgiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEVMU0EiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFdMQU5HIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBTTUFSVFRPTUNBVFBSTyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQREpBTkdPVFBMUEVQIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBBUk1BRElMTE8iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFBLWENPREVHRU5FUkFUIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBETFhBU0FTRiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQWUFPUUlBTkdCUE1OIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBMT0NBTEVTUEhFUkUiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUENEQVBJUlVOTkVSIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBDT0RFUkVGQUNUT1JBSSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJJSSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQUElORVNDUklQVFNVUFAiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFZIRExMQU5HVUFHRVNVIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBNSUNST05BVVRMQVVOQyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQSFRNWFBST0xJRkVUSU0iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiQUlQIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBKTUVURVJWSUVXRVIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEdJVEZMT1dQTFVTIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBNWVNRTFBST1hZIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBHRVJSWU5BVFVSRSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQUkVESVNNQU5BR0VSIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBHSVRIVUJBQ1RJT05TSCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTVlCQVRJU0xPR1VMVFIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiRFBOIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBTQVZFIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBMQU5HVUFHRVBBQ0tDUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTkZMVVRURVIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEVYVEVOU0lPTiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTUFHRSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQVdTUUxBRFZJU09SIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBPUEVOQVBJR1VJRURJVCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQVpVUkVDT0RJTkciLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUENTVkNPTE9SUFJPIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBBVVRPQVBJR0VORVJBVCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQS09UTElOUEFSQU1FVEUiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUE1BUlZJTiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQR0lUVE9PTEJPWCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQUkVESVNTIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBCVUdHUkVHQVRPUiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQT1hZSlNPTkRJQUdSQU0iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEJBU0VGSUxFIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBUSFJJRlRSRVFVRVNUIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBSQU5DSEVSIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBEQkRBVEFCQVNFVE9PTCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQR0VSUllDWUJFUlBVTksiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEtBUkFURUdFTiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTE9DQUxTVEFDSyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQUU1MRURJVE9SIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBBV1NMQU1CREFERVBMUiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQ1JFVklFVyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQ09OU09MRUxPR1BSTyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQRVhDRUxFRElUT1IiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEdJVExBQiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQR0lUTEFCTUFTVEVSIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBQT0pPVE9KU09OU0NIIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBTQ0lQSU9GVEwiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFlJSUZSQU1FV09SSyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQRklSRUhJR0hMSUdIVCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTUFURVJJQUxDVVNUT00iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEFSVEhBU0VOSEFOQ0VNIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBTV0lGVFNVUFBPUlQiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEJJU0oiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEpFVENMSUVOVCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQU0VOVFJZIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBPWFlKU09OU0NIR0VOIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBESVJFTlYiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiR1pMIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBKRVRGT1JDRVIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEVBU1lDT0RFTVlCQVRJIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBPWk1BVkVOUExVR0lOWCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQ0FQUkVESVMiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUE5HSU5YIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBUUkFWSVNDSSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQ1dNUCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQU0VRVUVOQ0VPVVRMSU4iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFpFUk9DT0RFIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBBV0VTT01FTE9HVklFVyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQR09MQU5HQ09ERVNVR0ciLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEMiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEhFUk9LVSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQVk9RQUwiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFNRTERFQlVHR0VSIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBTIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBIUEJVSUxERVIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEdJVExBQk1VTFRJUkVQIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBSRVRST0ZJVEFTU0lUIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBTS09MIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBMQVJBVkVMIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlFBIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBBU1lOQ0FQSSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQRVhUUEFDSyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQ09NUE9TRVBSRVZJRVciLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEpNRVRFUlJVTk5FUiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTEFOR1VBR0VQQUNLSVQiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFNQUklOR05BVkkiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUE1BVEVSSUFMSVNMQU5EIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBUQUlMV0lOREZPTEQiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEVYVFJBVE9PTFdJTkRPIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBKU09OQlJPV1NFUiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQR0VSUllUSEVNRVNMVCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQk9PVFNUUkFQRk9MRCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQ0xBSSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQkVBTkNPTlZFUlRFUiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQU0VRVUVOQ0VHTyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQR0lUSFVCQ0kiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFJFRElTIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBORVhUU0tFVENIVFdPIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlJEIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBHSEFDVE5TTUdSUFJPIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBGSUxFU01BTkFHRVIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUExBTkdVQUdFUEFDS0hVIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBQUlNOQVBWSUVXIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBTSU1QTElGT1JHRU1BTiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJSTSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQU01BUlRDUllQVE9SIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBEQlNTSCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJSUiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQS1VCRVJORVRFU0NPTlQiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUE1BVEVSSUFMSEMiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFBIUEhPVURJTkkiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFJBSU5CT1dCUkFDS0VUIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBPRE9PIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBTQ0lQSU8iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFNFUURJQU9SRyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQU1RPUk1TRUNUSU9OUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTUFURVJJQUxSQU5ET00iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEpFTktJTlNMSU5URVIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUENPREVQT1JUQUwiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFJFRElTQ0xJSEVMUEVSIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBDSUlOVEciLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUENETVFUVENMSUVOVCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQRkxZSU5TS1laSkJaIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBMQVRURVBSTyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQVVUT0xPRyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQR09EUlVOTkVSIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBXWFVRUllUT1hDUlNFTyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQT0ZGSUNFRkxPT1IiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEZMVVRURVIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEFFTSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQUlNNR05MIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBDTUFLRVBMVVMiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUE1BTkFHRVBST0pFQ1RTIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBPTkVHQUlDT1BJTE9UIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBRVUFSS1VTSEVMUEVSIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBNWUJBVElTREFPR0VOIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBHSVRXT1JLVFJFRSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQU01BUlRIVUdPIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBSUiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQRVhUUkFUQ0lMSUYiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUExBTkdVQUdFUEFDS0VTIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBTTUFSVENIQU5HRUxJUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQU5OT1RFIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBQWUNPREVTVUdHIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBEQVRBR1JBUEgiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFNSQ09ERUdFTiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQU0kiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUENPREVQSVBFTElORSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQV0lSRU1PQ0hBIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBMQU5HVUFHRVBBQ0tERSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQVBJQkxVRVBSSU5UIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBTTUFSVElOUFVUIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBPWFlYU0RKU09OU0NIIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBHRVJSWUNIRVJSWSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQklUUklTRUNJIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBKRk9STURFU0lHTkVSIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBSQUdJTlNQRUNUT1JCRSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQ0FJQ09NTUlUQVBQIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBTT1VSQ0VDT0RFRE9DRyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQU1BSSU5HQk9PVElERUEiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUERBUlREQVRBQ0xBU1MiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFBZVEhPTkJZVEVDT0RFIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBQSFBDT0RFU1VHRyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQVEFJTFdJTkRUT09MUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQU0ZDQyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQR0lUTEFCQ0lDRCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQWkVOVU1MIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBFR1RSQU5TSlZNIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IldTIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBKUEFTUUwiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFNPVVJDRVNZTkNQUk8iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEpFS0FERVYiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUE1BVEVSSUFMTEFORyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQU1RBQ0tUUkFDRSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTkVUTElOWFRPT0xTIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBBQ1RJT05BVEUiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUElNQUdFVE9WRUNUT1IiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEpTT05LRVlGSU5ERVIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEdFTlNFVEFORFNFVCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQ0FQRUxBU1RJQyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQkFDS0xPRyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTEFOR1VBR0VQQUNLRlIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEVMQVNUSUNTRUFSQ0giLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFNZU1RFTU5PVElGSUVSIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBBTExJQ09OU1BBQ0siLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEJSV0pWIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBKU0NPREVTVUdHIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBPUEVOQVBJQ1JVRFdJWiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQU0NSRUVOQ09ERVBSTyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQWUlNSUNPREVHRU4iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFNFUlZFUkxFU1NJTiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQUkVET1NDSEVDS0VSIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBNWUJBVElTVE9PTFMiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUElOVEVMTElQSFAiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFJVQllDT0RFU1VHRyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQUkRGQU5EU1BBUlFMIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBHRVJSWVNQQUNFIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBBTlNJSElHSExJR0hUIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBJRURJUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQUFVNTFNUVURJTyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQS1NFWFBMT1JFUiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTEFOR1VBR0VQQUNLUFQiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEdFTkVSQVRPUkNSVUQiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUENMSVBQUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQ0lSQ0xFQ0kiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEVYVFJBSURFVFdFQUtTIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBFTlZDTEkiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUExBTkdVQUdFUEFDS1RSIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBHRE9DIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBFWFRSQUlERVRXTElGRSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQVlNDT0RFSUNPTlMiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEhZQlJJU0NPTU1FUkNFIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBBRU1JREUiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUE1BVEVSSUFMRVhUUkFTIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBGTElOS1NRTEhFTFBFUiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQRFNMIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBTUUxDT1AiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFRFUk1JTkFMIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBWSVNVQUxHQyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQT0xZQlBNTkdETkVYVCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTEFOR1VBR0VQQUNLUlUiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEdPUEFSU0VSIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBEQVRBQkFTRSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQSkVOS0lOU0ZQUk8iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUExFUCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQV1hVUVFZVk9YQ1JTRU8iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFNFUVVFTkNFSlMiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFJVU1RYIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBBUEgiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUENVRUZZIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBORVhUU0tFVENIIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBMT0NBTElaQVRJT05FUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQRlVaWUZJUEMiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUE1PQ0tHRU5TRVJWRVIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUE1BUktEVEFTSyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTUFWRU5TRUFSQ0hFUiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQU1lTVEVNVkVSSUxPR0wiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEFQUExFVFJVTk5FUiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQRURJVE9SQVNTSVNURk8iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUE1CQ09ERUhFTFBQUk8iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUE1JTkJBVElTIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBFR1RSQU5TV0VCIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBNWUJBVElTQ09ERSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQ0FNVU5EQVNUQVJURVIiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEZFSUdOSEVMUEVSIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBMT0NBTElaQVRJT05GUiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQSlNPTkxPR1ZJRVdFUiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQSkRDTEVBTlJFQUQiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUENJVFJJQyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQU0NIRU1BUkVHVklFVyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTVlCQVRJU0xPRyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQSkFWQUNPREVTVUdHIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBVTklBUFBTVVBQT1JUIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBDT0RFTVJCQVNFIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBMQU5HVUFHRVBBQ0tQTCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQV0lGSUFEQiIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQVkxPRyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQUk5DT05TT0xFIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBQUkZMT1dUUkFDS0VSIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBDT0RFUUwiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUENZUFJFU1NTVVBQT1JUIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBHRVJSWUFVUk9SQSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQREFPR0VORVJBVE9SIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBBSUNPRElORyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQlJFV0JVTkRMRSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQV1hVRlFZUkhaQ1JTRU8iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEJFVFRFUlhUT09MUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQS1lBTUwiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFNQQVJLU1FMSEVMUEVSIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBMT0NBTElaQVRJT05ERSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQklTQUEiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEFJQ09ERUVZRSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQTkdST0siLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUEhUTVhQUk8iLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In0seyJjb2RlIjoiUFNWRVJJTE9HIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNSIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNSJ9LHsiY29kZSI6IlBHRVJSWVRIRU1FU1BSTyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjUiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjUifSx7ImNvZGUiOiJQQ09ERVRPT0xLSVQiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI1IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI1In1dLCJtZXRhZGF0YSI6IjAxMjAyMzA5MTRQU0FYMDAwMDA1In0=-OUxW9stMNFIrV+xUro3nxrWrZrEprvtEGcD7jhSWGtGnEMcVdvhmu4/57PUXbfCq7DJag3+z+Rw3w3LP7EqzUYCikv24gCevkddNY/gQldBzuFw/exp1GhRhJ+TNC74oKQDntfQqZmxRB+wJk3VnFA9Ti294UnaOVQdKvTtOTugf47FBLyb9r6bIzypGINBXLSNTt8WZKUeqPn9Sq3jvjDSfcHiHFUXckxgklZByseUsrLy8pPQ1rTtazcgEIdxCtLzRpZ01Tw7AIU07xDh7kBMXNUD3cfanMTSOO7/RfmifCbqFUt8GBsIPdpGFKJynPuKgDOnFTXY4p9ScMri1YbfnV39NYWtY6dGvEMLd62qDBbtzvho9a7U3D7PKqVxz4SFBe9RxdD+6WReVn+kqHSUrBwCQITVvG77RaB50MDmlNEjTyUv/9drTZeYYT1bbFKGgpjFDaYDcOlINt2Na83/p+Rmjtu2TQLuBeDGvm+yiw7yc0YLk5s0cR6r6tfxcltqAtr/KX4qJnlVMbcMJhTK10Q37dUYFgHc+/ux6+NjN5qLcdVGB0eHVfxUrRDGX/qVDEZYh1tJVEjCllmP0ycMED8/VJV/JrkyYEe8YPUkuCWSf0lmB8gt//C95Zpbf1NAkzp9q/5h7HIF3+5V5wuaHg794tLP0r2rquUtVR0Q=-MIIEtzCCAp+gAwIBAgIGAZk76rtEMA0GCSqGSIb3DQEBCwUAMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0EwIBcNMjUwOTExMDMxNDIzWhgPMjEyNTA5MTIwMzE0MjNaMB8xHTAbBgNVBAMMFFFpdU1vLUpldGJyYWlucy1IZWxwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAysCKTw9ZlMzTJiaJnsxTul8nT1ZNMyGLyoAo5lnkKBIybUMhyVJ5o8wE3udXLSHIuW/0nj1sVXZPU7gxoPUlIyxSAbSilRC0bthObaGwKQAc7HyHVL7ius0Fzr8xNs01iakGHGoLlTlcAMAXP6FzqZOFjDlJbVPTcJlIJngPpsMUXZ/5ywO7SO+BhgMySf1482pjmRVeikvoNs2WiGtquYTg+qHSCiXN4RTi0fpiBNq1QNwqL8N6UbgG68tUe/Ge+G7WOI9ZMccxsTNlRx0mCgTfTRvvO2XmvTR0+lLKss850jBIRW7lQPtMKFHThocDpbBoUpm2bFuQuVifV0FPcksKtwx8BIZzk0I/cEwayRbG/AuIn1l2WCtlaR5pElo6Bau6zeLMD4GQJ1QB75A79exB8KfLUbD9/B+ltEcVsmXg/UAv56nn2OE4bY+kBcqnW98RwN/XfQ4IHLvpjlTi+maelL4qgO3pY596wQ30mIh9GcYL59QTdsoE87t2nHZaUKwPP7iOQeHoGIyt5yChhx1Bc9q1wbEPFVpWOT79VASA4dl/Wkc00Uo9oF76MFa9OAJiK3O/zqEjb4kmjJWbf+HSo4ftzB+WUsOfpBo53y6wFw8f4oGdqNYrzmBUJaz/sTGGVak2xJnLZioT0sECuuAc+sD2MDj8YzOHG2J85/0CAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAnna77/jJJiM+n3OgzsWLYlmnGajQuy94Bdh1aq4ASDSi6RLWZ00Nnn28S86RRreQSgdZMuLbzGooxtgZfYg+d5hjR/IwkKS5MCJsYNhiNI9n7aatf+6VyUl1aVkZLiBUCCCGJx3/a1ABJ9dVBr/vvRHw7ytwva44RZx2Cxlccg+KC4iUjQqA+udVl6qvQDPpOdTee8h7gaoiCjJz2KdhtFmYsvPNzDPsQE9xGl/Cd/4+4Mwr3uH4HIeXoiOr6PIWKFscLKnAG3P6Fxv+RXGLMk7z4U5g1DYne0GAT6H3YBsf0YO9Sv6bGA3NVFpQ5fOHLwgYeu0Ia2RtVRaJ9d9EUD3jsuWMbGIKufHp6jodIEwkZH8A8BmgmAMQxvq68lbl+7KDxqnQ7Jna3zP53l2z0QJc6lIPTGfmnt0y4ZjZhebXa6Ss1hUJT9Qwv9l/vxILWRMF4t8GpmCNR+SRWALN2FbsyD/iq/t3LoDppc+Icsysdy4eSOB5YmRhyilf2D6ybKbknH3BeaJpk6XOLD97AlJpnRwtuO2r9mXmY8WNu3vf5d4MBUTdcS0uagx8Lp832AEGnm0QLcVenzIHx2IXGwvQbnh0gRQ82y1X6YkDJPtjYlO8XDQd+oinJZShqmg7gAnlFQQYzhm20Zj9vN0r8QGr2+aQFGeEuefNdzPthqs="; + String b = "e5be1fc4bbf44f35bba8fe566bad3c6d-eyJsaWNlbnNlSWQiOiJlNWJlMWZjNGJiZjQ0ZjM1YmJhOGZlNTY2YmFkM2M2ZCIsImxpY2Vuc2VlTmFtZSI6ImMiLCJhc3NpZ25lZU5hbWUiOiJjIiwicHJvZHVjdHMiOlt7ImNvZGUiOiJQQ1dNUCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjYiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjYifSx7ImNvZGUiOiJQQyIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjYiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjYifSx7ImNvZGUiOiJQU0kiLCJmYWxsYmFja0RhdGUiOiIyMDI2LTA5LTI2IiwicGFpZFVwVG8iOiIyMDI2LTA5LTI2In1dLCJtZXRhZGF0YSI6IjAxMjAyMzA5MTRQU0FYMDAwMDA1In0=-393H+Kf7KQR7dV9v1ZFvi3Kv1CAGawcdI+qyL/cCApZSIpbb/4wuHxUQAVmPCNTrOYSUOQOQVcUHegPTA2+s8i/74nV8uAPJYaKBY3nzGldsbtS3tO4aCAQrfwM0gWt3f6pJ0e5nxjxGHeGm+iRUfYbHZNa9vRPDnSYUEaisx4ErJr2X1I90GWCIQa35Io9wDxcC8l3KGanxTRh4TTq8B2FrmrDyYngUcPIIk+K16L+bpbV7sUGAJFEFdx7Ath4m7nKPcfEqIn6EO5fBP/6kGUuz6fug5U6vroJkMnpL7Ia7yx7OmyWEZ40lejbdlo8yyV2POA5sbXIPQDW8T8Awhd2Ofc8rBLNfbFaVFmnn7uRHaOyislzTvxBvO+Uz61JK+PpAbnlYA/ktu+bZoycvdGuX3OX8ltW6LtDa82OxrOMbqvSK5Dy0+ZGCbRUzrUymlwQuFm3jjlm6HpJAl3f7ZO1LM2O58iIt+qwNgL48lthuWnkvsORKY776zFUi0mfpv3Y/ucw7ji0lCVAbvz7WJxejJPOyZMzVRQ2AeiJxCJ7baDAwTyB8447dikyyYOjMqlg6ZeFmrMBg/FStvURHZKmfhdPecAbZJPctO3LMRK//Hn25VCyQx40dWPcbNAzJm0zrTK6nzhYGI2fw5ZcdGx4Pf6t6fjoWbY0ShbMHjSc=-MIIEtzCCAp+gAwIBAgIGAZk8fcw0MA0GCSqGSIb3DQEBCwUAMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0EwIBcNMjUwOTExMDU1NTAxWhgPMjEyNTA5MTIwNTU1MDFaMB8xHTAbBgNVBAMMFFFpdU1vLUpldGJyYWlucy1IZWxwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA42Z9xuqVLA5r2FUE/Ft3Ord5PdX28jfGSwl2XyLIwtlf26HRag9U1ESMKuOKVT9iaS5qlCqtNLl28ubpQqfrvJRwQzDFo/34BV+r5kIWJ/BIpdCZNcuWyHrq4wrGoFD8L0U2VKl295REuY3qXbfdXyvz5fGNTEGbzKo52gW2Wuk4dtu1j5GIWp4Qp/0H9RfOfZp17+9TfC+sfRPsRLSp504JQWh9D/oWMVatY0ghLmGVDlLbpfgd2mhs5Sd8uo7bTdDEHRP8OjbFA+iLQWb/R8Seun7QNdW2Ei9cppB3Vh/I+h685niZN74+vSMwdkXmR8d9fJQcIxTjPp98qokANoE/+WF5pkmFpmjaaTLLES1dhm7QcbdXFUGcwDLS0/UxDPjG3jFCRn54SOuCdGQtuafeiVvNr8qgQEcNS8070bQ0u9lboALUTMyR+rgtjd9hwTzMFX6cLRYjJSWxebbZZCyzbtYVh+aey3FkDFiX4n3tYaAlvCQSpZhvpQquc+rwaPMe8NC+YwkcFcaRgPrARvLGZtz7hMtvslZOgDx5cjSJW30tRZ0Pag1dfbvJL0OvI0RU/VB6UcI3gQoUTjjZdllp1KW4u7vrxoSm4oPNimpLwIAE5Lt4QLR9f6Aank8PdZsAv4B943NNrvjYKXkIywei6c6JAaNGcNg3NGJ7es8CAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAqZdbVeLn+7FKrNRk9XWxYV4bcjPCGtssMTPO1Mgr/sQDFZVDp/eR5zdbf8sEAYL6RiRLoVVUZrqIRzI59LPCjHiJZiPC2PGHU0tLoaPMRE+MDSbCJhX6SFY4JEvCgCqFrMhBxlAc2CHdHGfvZPGLXamCaVHIQNXu0He0uNf/vJTNuBmxT3oe5tWNnwrbRXjLGYV2A8SFY+GhL6H5IxOhlDa84xuTLxtzxRPif0w9L5VjIHsQKGDL+G3GsNRVHnsTY5MgwiO4bGo9LzI98BrwO8Sqf1NOsapPncvV4CrEVGR64EJpr5hohnba/u1cIVeT9gppkvh/BWcl2n9J73GmmJDFiMvDuNDOSEdM4O7UK5FcC1TIK8i76NA9QUIHOWKKpu8kjIF5DmKgcjLbKe2nBf27rwpnKB0xpN+8fzI/nkAe/ZTBq68ZT6gjNhjyBLx9elgMDowoduui7ZICblcswmB3fjlMAQW2A/pKSr47M/kuoCEDVzcNeqKcRfFe111jllYO2WN/mO/YD7nVV722CVqLC2WjQH3hZ6vdpRjopPKjTw/oEGizCGemub/n4J3zomCGA3ySgfc66CdyOWWNJa5ot+tG522A1WvIKQFhS1tApO8+jJOXmrgNtQ5waT9sgJhV16CTHAyLQNdUuxhTSr44YGzHGK3u0b0VGtjjUYE="; + String c = "4871fe1b3b-eyJsaWNlbnNlSWQiOiI0ODcxZmUxYjNiIiwibGljZW5zZWVOYW1lIjoiYyIsImFzc2lnbmVlTmFtZSI6ImMiLCJwcm9kdWN0cyI6W3siY29kZSI6IlBDIiwiZmFsbGJhY2tEYXRlIjoiMjAyNi0wOS0yNiIsInBhaWRVcFRvIjoiMjAyNi0wOS0yNiJ9LHsiY29kZSI6IlBTSSIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjYiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjYifSx7ImNvZGUiOiJQQ1dNUCIsImZhbGxiYWNrRGF0ZSI6IjIwMjYtMDktMjYiLCJwYWlkVXBUbyI6IjIwMjYtMDktMjYifV0sIm1ldGFkYXRhIjoiMDEwOTIwMjMwOTE0UFNBWDAwMDAwNSJ9-3Hn4thgB6MFiMQ3/Ro+UpD1BzlYZF5iedEDXFs+PQGKtvX9VCY7DPuDbcX5JF8SIuOE8Vo0wQ7c3DsLzdEjjSEXU7IKIOygi4D7JCkmbcPxWjpRyrD254gb9v8ZC4rq/H+SzoBcZ2J7tqg81RNpov8LrHKLW330YA7m2aNB+mvKK1DPMUnVsgc6quheklPkF2kWG5gLfOq89P2jM7hOfak/6lSYPiOrz5ozrudLH/I2X/XNLeQ/bLUvN00/1KjlA3jlodNTaCcBKUsKCerjibIN6Q3evoezQB9mS8gEPRWeoRaQ4ao4nPTu/lqRgzUl369tBnH49y2lVxQXSdz5GY3bvUvLO6cHbwkfRvSmjP0kk0sRHCriv6R+ixbMH0k4ZWU4OeKrlxJL4FBmoutfbZSP+61+Ex9neRePPwBxfpGswvZmC4qCIqsCGwE7N4XTS0K80rOTRu2Pt29BoEgsNHTyc68pc1fKbNi5CNYLKLbf7zKLeFX3DPWjeMuI0WMcp19OnaVAw6K5rwp1I//cu4FJqIa+KvW77gcSy/lbbyB8bgmxeypbL6nIzDcnnYXRrREiJyrNLdEWOX0MiGlhq++a8aFwm4m4+X+RS5KpNeek9p/QGVJPAh8yoLcz0s7hiWfEXtbaTFvue+9nsZ9hbGCys3MVyNT7WqQWhvKfPfZg=-MIIEtzCCAp+gAwIBAgIGAZk8fcw0MA0GCSqGSIb3DQEBCwUAMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0EwIBcNMjUwOTExMDU1NTAxWhgPMjEyNTA5MTIwNTU1MDFaMB8xHTAbBgNVBAMMFFFpdU1vLUpldGJyYWlucy1IZWxwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA42Z9xuqVLA5r2FUE/Ft3Ord5PdX28jfGSwl2XyLIwtlf26HRag9U1ESMKuOKVT9iaS5qlCqtNLl28ubpQqfrvJRwQzDFo/34BV+r5kIWJ/BIpdCZNcuWyHrq4wrGoFD8L0U2VKl295REuY3qXbfdXyvz5fGNTEGbzKo52gW2Wuk4dtu1j5GIWp4Qp/0H9RfOfZp17+9TfC+sfRPsRLSp504JQWh9D/oWMVatY0ghLmGVDlLbpfgd2mhs5Sd8uo7bTdDEHRP8OjbFA+iLQWb/R8Seun7QNdW2Ei9cppB3Vh/I+h685niZN74+vSMwdkXmR8d9fJQcIxTjPp98qokANoE/+WF5pkmFpmjaaTLLES1dhm7QcbdXFUGcwDLS0/UxDPjG3jFCRn54SOuCdGQtuafeiVvNr8qgQEcNS8070bQ0u9lboALUTMyR+rgtjd9hwTzMFX6cLRYjJSWxebbZZCyzbtYVh+aey3FkDFiX4n3tYaAlvCQSpZhvpQquc+rwaPMe8NC+YwkcFcaRgPrARvLGZtz7hMtvslZOgDx5cjSJW30tRZ0Pag1dfbvJL0OvI0RU/VB6UcI3gQoUTjjZdllp1KW4u7vrxoSm4oPNimpLwIAE5Lt4QLR9f6Aank8PdZsAv4B943NNrvjYKXkIywei6c6JAaNGcNg3NGJ7es8CAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAqZdbVeLn+7FKrNRk9XWxYV4bcjPCGtssMTPO1Mgr/sQDFZVDp/eR5zdbf8sEAYL6RiRLoVVUZrqIRzI59LPCjHiJZiPC2PGHU0tLoaPMRE+MDSbCJhX6SFY4JEvCgCqFrMhBxlAc2CHdHGfvZPGLXamCaVHIQNXu0He0uNf/vJTNuBmxT3oe5tWNnwrbRXjLGYV2A8SFY+GhL6H5IxOhlDa84xuTLxtzxRPif0w9L5VjIHsQKGDL+G3GsNRVHnsTY5MgwiO4bGo9LzI98BrwO8Sqf1NOsapPncvV4CrEVGR64EJpr5hohnba/u1cIVeT9gppkvh/BWcl2n9J73GmmJDFiMvDuNDOSEdM4O7UK5FcC1TIK8i76NA9QUIHOWKKpu8kjIF5DmKgcjLbKe2nBf27rwpnKB0xpN+8fzI/nkAe/ZTBq68ZT6gjNhjyBLx9elgMDowoduui7ZICblcswmB3fjlMAQW2A/pKSr47M/kuoCEDVzcNeqKcRfFe111jllYO2WN/mO/YD7nVV722CVqLC2WjQH3hZ6vdpRjopPKjTw/oEGizCGemub/n4J3zomCGA3ySgfc66CdyOWWNJa5ot+tG522A1WvIKQFhS1tApO8+jJOXmrgNtQ5waT9sgJhV16CTHAyLQNdUuxhTSr44YGzHGK3u0b0VGtjjUYE="; + String[] strings = c.split("-"); + String id= strings[0]; + String licensePartBase64 = strings[1]; + String signatureBase64= strings[2]; + String certBase64= strings[3]; + String decodeStr = Base64.decodeStr(licensePartBase64); + String decodeStr1 = signatureBase64; + String decodeStr2 = Base64.decodeStr(certBase64); + log.info("id:{}",id); + log.info("decodeStr:{}", decodeStr); + log.info("decodeStr1:{}", decodeStr1); + log.info("decodeStr2:{}", PemUtil.toPem("CERTIFICATE", Base64.decode(certBase64))); + } + @Test + void pullInoutRecord() { + String pathName = "E:\\inOutRecords"; + List files = FileUtil.loopFiles(pathName); + for (File file : files) { + List> objects = EasyExcel.read(file).doReadAllSync(); + List list = objects.stream().map(map -> { + String o = map.get(0).toString(); + o = o.replace("人行道闸收到参数:", ""); + HfFace bean = JSONUtil.toBean(o, HfFace.class); + JSONArray devices = JSONUtil.parseArray(bean.getBarrierGateId()); + bean.setBarrierGateId(devices.toString()); + bean.setEntryPhoto(null); + bean.setParkId("e95ee5ac957004e70048f7b59cbaa5db"); + return bean; + }).collect(Collectors.toList()); + list.forEach(HelpProjectsApplicationTests::pullRemote); + } + } + @Test + void pullTemp() { + String pathName = "E:\\inOutRecords"; + List files = FileUtil.loopFiles(pathName); + for (File file : files) { + List> objects = EasyExcel.read(file).doReadAllSync(); + List list = objects.stream().map(map -> { + HfFace bean = new HfFace(); + Object mobile = map.get(0); + Object username = map.get(1); + Object deviceKey = map.get(2); + Object entryTime = map.get(3); + DateTime entryDate = DateUtil.parse(entryTime.toString(), "yyyy/MM/dd H:mm:ss"); + JSONArray array = new JSONArray(); + array.add(deviceKey.toString()); + bean.setConfidence("70"); + bean.setMask("-1"); + bean.setTemperature("-1"); + bean.setDeviceName(deviceKey.toString()); + bean.setTaskId(null); + bean.setEntryType("2"); + bean.setEntryTime(entryDate.toString()); + bean.setHealthCode(null); + bean.setIsSuccess(1); + bean.setSourceType("2"); + bean.setUserName(username.toString()); + bean.setUserPhone(mobile.toString()); + bean.setBarrierGateId(array.toJSONString(0)); + bean.setParkId("9dd2c938a407a9c0425531e8df9857ab"); + return bean; + }).collect(Collectors.toList()); + list.forEach(HelpProjectsApplicationTests::pullRemote); + } + + } + private static void pullRemote(HfFace hfFace) { + String domain = "https://iotpark-saas.sctel.com.cn/iot-park-cloud-saas/park-guest"; + String url = domain + "/park-client/guest/device/walkDevice/saveDeviceReportInfo"; + DeviceReport deviceReport = new DeviceReport(); + JSONArray objects = JSONUtil.parseArray(hfFace.getBarrierGateId()); + deviceReport.setDeviceKey(objects.getStr(0)); + deviceReport.setData(JSONUtil.toJsonStr(hfFace)); + deviceReport.setProductType("3"); + deviceReport.setTimestamp(System.currentTimeMillis()); + deviceReport.setParkId(hfFace.getParkId()); + String post = HttpUtil.post(url, JSONUtil.toJsonStr(deviceReport)); + log.info("识别数据:{},推送结果:{}", JSONUtil.toJsonStr(hfFace), post); + } +} diff --git a/src/test/java/org/paperflow/helpprojects/InOutRecordApplicationTests.java b/src/test/java/org/paperflow/helpprojects/InOutRecordApplicationTests.java new file mode 100644 index 0000000..faf5565 --- /dev/null +++ b/src/test/java/org/paperflow/helpprojects/InOutRecordApplicationTests.java @@ -0,0 +1,173 @@ +package org.paperflow.helpprojects; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONUtil; +import com.alibaba.excel.EasyExcel; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.checkerframework.checker.units.qual.A; +import org.junit.jupiter.api.Test; +import org.paperflow.helpprojects.inoutRecordService.domain.*; +import org.paperflow.helpprojects.inoutRecordService.service.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.io.File; +import java.util.*; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.stream.Collectors; + +/** + * @author vicro + */ +@Slf4j +@SpringBootTest +public class InOutRecordApplicationTests { + + @Autowired + private HeatRecordService heatRecordService; + + @Autowired + private AfInOutRecordService inOutRecordClient; + + @Autowired + private PersonTrackService personTrackService; + + @Autowired + private ParkUserService parkUserService; + + @Autowired + private DeviceWalkService deviceWalkService; + + @Test + public void test() { + String a = "INSERT INTO %sMETADATA_STORE(METADATA_KEY, METADATA_VALUE, REGION) " + + "SELECT ?, ?, ? FROM %sMETADATA_STORE WHERE METADATA_KEY=? AND REGION=? HAVING COUNT(*)=0"; + System.out.println(a); + } + @Test + public void contextLoads() { + String a = "C:\\Users\\52301\\Downloads\\test.xlsx"; + List objects = EasyExcel.read(a).head(ParkUser.class).doReadAllSync(); + parkUserService.saveBatch(objects); + } + + @Test + void pullInoutRecord() { + String pathName = "E:\\inOutRecords"; + List files = FileUtil.loopFiles(pathName); + for (File file : files) { + log.info("文件路径:{}",file.getName()); + List> objects = EasyExcel.read(file).doReadAllSync(); + List list = objects.stream().map(map -> { + String o = map.get(0).toString(); + o = o.replace("人行道闸收到参数:", ""); + HfFace bean = JSONUtil.toBean(o, HfFace.class); + JSONArray devices = JSONUtil.parseArray(bean.getBarrierGateId()); + bean.setBarrierGateId(devices.get(0).toString()); + bean.setEntryPhoto(null); + bean.setParkId("e95ee5ac957004e70048f7b59cbaa5db"); + return bean; + }).collect(Collectors.toList()); + convertDatabaseData(list,file); + } + + } + private void convertDatabaseData(List list,File file) { + + List heats = Collections.synchronizedList(new ArrayList<>(list.size())); + List inOutRecords = Collections.synchronizedList(new ArrayList<>(list.size())); + List personTracks = Collections.synchronizedList(new ArrayList<>(list.size())); + list.stream().parallel().forEach(hfFace -> { + String parkId = hfFace.getParkId(); + DeviceWalk deviceWalk = deviceWalkService.getByDeviceKey(hfFace.getBarrierGateId()); + if (deviceWalk == null) { + return; + } + HeatRecord heatRecord = new HeatRecord(); + heatRecord.setDeviceKey(hfFace.getBarrierGateId()) + .setName(hfFace.getUserName()) + .setMobile(hfFace.getUserPhone()) + .setSnap(null) + .setUserId("-1") + .setUserType("2") + .setTaskId(hfFace.getTaskId()) + .setDelFlag("0"); + ParkUser user= parkUserService.getUserByMobileAndParkId(hfFace.getUserPhone(), parkId); + if (user != null && StrUtil.isNotBlank(user.getUserId())) { + heatRecord.setUserId(user.getUserId()); + heatRecord.setMobile(user.getPhone()); + //内部人员 + heatRecord.setUserType("1"); + }else { + return; + } + heatRecord.setHeat(hfFace.getTemperature()); + heatRecord.setIsMasks(hfFace.getMask()); + heatRecord.setFace(heatRecord.getSnap()); + heatRecord.setSimilarity(hfFace.getConfidence()); + heatRecord.setIsNormal("1"); + DateTime reportTime = DateUtil.parse(hfFace.getEntryTime(), "yyyy-MM-dd HH:mm:ss"); + heatRecord.setReportTime(reportTime); + heatRecord.setParkId(parkId); +// heatRecordService.save(heatRecord); + heats.add(heatRecord); + String accessType = deviceWalk.getAccessType(); + accessType = StrUtil.isNotBlank(accessType) ? accessType : "0"; + //是否是进入 + // 创建出入记录 + AfInOutRecord inOutRecord = createInOutRecord(heatRecord, hfFace, accessType); +// inOutRecordClient.save(inOutRecord); + inOutRecords.add(inOutRecord); + //人员轨迹信息储存 + AfPersonTrack personTrack = new AfPersonTrack(); + personTrack.setUserId(user.getUserId()); + personTrack.setUserType("1");//内部人员 + personTrack.setDeviceKey(deviceWalk.getDeviceKey()); + personTrack.setProductType("人行道闸"); + personTrack.setTrackTime(hfFace.getEntryTime()); + personTrack.setParkId(hfFace.getParkId()); + personTracks.add(personTrack); + }); + log.info("转换记录:{}",heats.size()); + heatRecordService.saveBatch(heats); + inOutRecordClient.saveBatch(inOutRecords); + personTrackService.saveBatch(personTracks); + file.deleteOnExit(); + } + + private AfInOutRecord createInOutRecord(HeatRecord report, HfFace hfFace, String accessType) { + String passageMode = "";//通行方式 + if (StrUtil.isNotBlank(hfFace.getEntryType())) { + switch (hfFace.getEntryType()) { + case "1": + passageMode = "1"; + break; + case "2": + passageMode = "3"; + break; + case "3": + passageMode = "4"; + break; + default: + passageMode = "0"; + } + } + AfInOutRecord record = new AfInOutRecord(); + record.setUserId(report.getUserId()) + .setParkId(report.getParkId()) + .setImg(report.getSnap()) + .setTemperature(report.getHeat()) + .setDeviceKey(report.getDeviceKey()) + .setPassageTime(report.getReportTime()) + .setPassageMode(passageMode) //通行方式: 1_刷卡 2_刷码 3_刷脸 ,4_身份证,0_未知 字典类型:security_passage_mode + .setType(accessType) //出入类型: 0_进门 1_出门 字典类型:access_type + .setUserType("1".equals(report.getUserType()) ? "2" : "1"); //人员类型: 1_外部人员 2_内部人员 字典类型:owner_Type + return record; + } +} diff --git a/src/test/java/org/paperflow/helpprojects/MinioProjectTests.java b/src/test/java/org/paperflow/helpprojects/MinioProjectTests.java new file mode 100644 index 0000000..ad6437e --- /dev/null +++ b/src/test/java/org/paperflow/helpprojects/MinioProjectTests.java @@ -0,0 +1,105 @@ +package org.paperflow.helpprojects; + +import io.minio.MinioClient; +import io.minio.SetBucketPolicyArgs; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; +import org.paperflow.helpprojects.enums.PolicyType; + +/** + * @author vicro + */ +@Slf4j +public class MinioProjectTests { + public static String getPolicyType(String bucketName, PolicyType policyType) { + StringBuilder builder = new StringBuilder(); + builder.append("{\n"); + builder.append(" \"Statement\": [\n"); + builder.append(" {\n"); + builder.append(" \"Action\": [\n"); + + switch (policyType) { + case WRITE: + builder.append(" \"s3:GetBucketLocation\",\n"); + builder.append(" \"s3:ListBucketMultipartUploads\"\n"); + break; + case READ_WRITE: + builder.append(" \"s3:GetBucketLocation\",\n"); + builder.append(" \"s3:ListBucket\",\n"); + builder.append(" \"s3:ListBucketMultipartUploads\"\n"); + break; + default: + builder.append(" \"s3:GetBucketLocation\"\n"); + break; + } + + builder.append(" ],\n"); + builder.append(" \"Effect\": \"Allow\",\n"); + builder.append(" \"Principal\": \"*\",\n"); + builder.append(" \"Resource\": \"arn:aws:s3:::"); + builder.append(bucketName); + builder.append("\"\n"); + builder.append(" },\n"); + if (PolicyType.READ.equals(policyType)) { + builder.append(" {\n"); + builder.append(" \"Action\": [\n"); + builder.append(" \"s3:ListBucket\"\n"); + builder.append(" ],\n"); + builder.append(" \"Effect\": \"Deny\",\n"); + builder.append(" \"Principal\": \"*\",\n"); + builder.append(" \"Resource\": \"arn:aws:s3:::"); + builder.append(bucketName); + builder.append("\"\n"); + builder.append(" },\n"); + + } + builder.append(" {\n"); + builder.append(" \"Action\": "); + + switch (policyType) { + case WRITE: + builder.append("[\n"); + builder.append(" \"s3:AbortMultipartUpload\",\n"); + builder.append(" \"s3:DeleteObject\",\n"); + builder.append(" \"s3:ListMultipartUploadParts\",\n"); + builder.append(" \"s3:PutObject\"\n"); + builder.append(" ],\n"); + break; + case READ_WRITE: + builder.append("[\n"); + builder.append(" \"s3:AbortMultipartUpload\",\n"); + builder.append(" \"s3:DeleteObject\",\n"); + builder.append(" \"s3:GetObject\",\n"); + builder.append(" \"s3:ListMultipartUploadParts\",\n"); + builder.append(" \"s3:PutObject\"\n"); + builder.append(" ],\n"); + break; + default: + builder.append("\"s3:GetObject\",\n"); + break; + } + + builder.append(" \"Effect\": \"Allow\",\n"); + builder.append(" \"Principal\": \"*\",\n"); + builder.append(" \"Resource\": \"arn:aws:s3:::"); + builder.append(bucketName); + builder.append("/*\"\n"); + builder.append(" }\n"); + builder.append(" ],\n"); + builder.append(" \"Version\": \"2012-10-17\"\n"); + builder.append("}\n"); + return builder.toString(); + } + @SneakyThrows + @Test + void testLog() { + //正式环境 + String endpoint = "http://oss1.paas.sc.ctc.com"; + String accessKey = "VDY2A948YTL8S4DT3KJI"; + String secretKey = "GAcU2mL7MTHNOjM4hDUASEL1w8iLdRYMs37BzMC5"; + String bucketName = "sc-userfiles-75"; + MinioClient minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build(); + minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucketName).config(getPolicyType(bucketName, PolicyType.READ_WRITE)).build()); + } +}