Browse Source

新增每日一题

weirdoheheelf 5 years ago
parent
commit
36ad566d1e
19 changed files with 6803 additions and 626 deletions
  1. 155 127
      pom.xml
  2. 33 0
      seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/DailyAnswerMapVO.java
  3. 63 0
      seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/ResponseVO.java
  4. 31 0
      seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/UserDoneQuesInfoVO.java
  5. 40 0
      seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/dto/DailyDTO.java
  6. 24 0
      seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/dto/RookieInfoDTO.java
  7. 95 0
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/config/SwaggerConfig.java
  8. 48 0
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/FilledInfo.java
  9. 195 187
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/User.java
  10. 10 0
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/FilledInfoRepository.java
  11. 18 17
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/PhoneVerificationRepository.java
  12. 5657 0
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/Impl/RookieServiceImpl.java
  13. 52 0
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/RookieService.java
  14. 73 61
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/TeacherService.java
  15. 136 135
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/UserService.java
  16. 71 0
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/RookieController.java
  17. 66 66
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/TeacherController.java
  18. 10 9
      seecoder-portal-server/src/main/resources/application-dev.yml
  19. 26 24
      seecoder-portal-server/src/main/resources/application.yml

+ 155 - 127
pom.xml

@@ -1,127 +1,155 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>cn.seecoder</groupId>
-    <artifactId>seecoder-portal</artifactId>
-    <version>0.1.0</version>
-    <modules>
-        <module>seecoder-portal-server</module>
-        <module>seecoder-portal-common</module>
-    </modules>
-
-    <packaging>pom</packaging>
-
-    <properties>
-        <maven.compiler.source>8</maven.compiler.source>
-        <maven.compiler.target>8</maven.compiler.target>
-
-        <jackson.version>2.12.0</jackson.version>
-        <org.mapstruct.version>1.4.2.Final</org.mapstruct.version>
-        <seecoder-portal-version>0.1.0</seecoder-portal-version>
-        <jjwt.version>0.11.2</jjwt.version>
-    </properties>
-
-    <dependencies>
-        <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
-        <dependency>
-            <groupId>javax.validation</groupId>
-            <artifactId>validation-api</artifactId>
-            <version>2.0.1.Final</version>
-        </dependency>
-        <!-- https://mvnrepository.com/artifact/org.jetbrains/annotations -->
-        <dependency>
-            <groupId>org.jetbrains</groupId>
-            <artifactId>annotations</artifactId>
-            <version>20.1.0</version>
-        </dependency>
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-            <version>30.1-jre</version>
-        </dependency>
-        <dependency>
-            <groupId>org.junit.jupiter</groupId>
-            <artifactId>junit-jupiter-api</artifactId>
-            <version>5.7.0</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.junit.jupiter</groupId>
-            <artifactId>junit-jupiter-engine</artifactId>
-            <version>5.7.0</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.nju.edu</groupId>
-            <artifactId>seecoder-gitlab-client</artifactId>
-            <version>0.1.0</version>
-        </dependency>
-        <dependency>
-            <groupId>com.nju.edu</groupId>
-            <artifactId>seecoder-gitlab-common</artifactId>
-            <version>0.1.0</version>
-        </dependency>
-    </dependencies>
-
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>com.aliyun</groupId>
-                <artifactId>aliyun-java-sdk-core</artifactId>
-                <version>4.5.20</version>
-            </dependency>
-            <dependency>
-                <groupId>cn.seecoder</groupId>
-                <artifactId>seecoder-portal-common</artifactId>
-                <version>${seecoder-portal-version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.mapstruct</groupId>
-                <artifactId>mapstruct</artifactId>
-                <version>${org.mapstruct.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>com.squareup.okhttp3</groupId>
-                <artifactId>okhttp</artifactId>
-                <version>4.9.0</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-dependencies</artifactId>
-                <type>pom</type>
-                <version>2.4.4</version>
-                <scope>import</scope>
-            </dependency>
-
-            <dependency>
-                <groupId>io.jsonwebtoken</groupId>
-                <artifactId>jjwt-api</artifactId>
-                <version>${jjwt.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.jsonwebtoken</groupId>
-                <artifactId>jjwt-impl</artifactId>
-                <version>${jjwt.version}</version>
-                <scope>runtime</scope>
-            </dependency>
-            <dependency>
-                <groupId>io.jsonwebtoken</groupId>
-                <artifactId>jjwt-jackson</artifactId> <!-- or jjwt-gson if Gson is preferred -->
-                <version>${jjwt.version}</version>
-                <scope>runtime</scope>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-
-
-    <distributionManagement>
-        <repository>
-            <id>nexus</id>
-            <url>http://nexus.seecoder.cn/repository/maven-releases/</url>
-        </repository>
-    </distributionManagement>
-
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>cn.seecoder</groupId>
+    <artifactId>seecoder-portal</artifactId>
+    <version>0.1.0</version>
+    <modules>
+        <module>seecoder-portal-server</module>
+        <module>seecoder-portal-common</module>
+    </modules>
+
+    <packaging>pom</packaging>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+
+        <jackson.version>2.12.0</jackson.version>
+        <org.mapstruct.version>1.4.2.Final</org.mapstruct.version>
+        <seecoder-portal-version>0.1.0</seecoder-portal-version>
+        <jjwt.version>0.11.2</jjwt.version>
+    </properties>
+
+    <dependencies>
+        <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
+        <dependency>
+            <groupId>javax.validation</groupId>
+            <artifactId>validation-api</artifactId>
+            <version>2.0.1.Final</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.jetbrains/annotations -->
+        <dependency>
+            <groupId>org.jetbrains</groupId>
+            <artifactId>annotations</artifactId>
+            <version>20.1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>30.1-jre</version>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+            <version>5.7.0</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <version>5.7.0</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.nju.edu</groupId>
+            <artifactId>seecoder-gitlab-client</artifactId>
+            <version>0.1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.nju.edu</groupId>
+            <artifactId>seecoder-gitlab-common</artifactId>
+            <version>0.1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.seecoder</groupId>
+            <artifactId>seecoder-bok-client</artifactId>
+            <version>0.2.2</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.seecoder</groupId>
+            <artifactId>judgement-common</artifactId>
+            <version>0.2.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.seecoder</groupId>
+            <artifactId>judgement-client</artifactId>
+            <version>0.2.0</version>
+        </dependency>
+        <!--swagger-ui-->
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger-ui</artifactId>
+            <version>2.4.0</version>
+        </dependency>
+        <!--swagger-ui-->
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+            <version>2.4.0</version>
+        </dependency>
+    </dependencies>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>com.aliyun</groupId>
+                <artifactId>aliyun-java-sdk-core</artifactId>
+                <version>4.5.20</version>
+            </dependency>
+            <dependency>
+                <groupId>cn.seecoder</groupId>
+                <artifactId>seecoder-portal-common</artifactId>
+                <version>${seecoder-portal-version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.mapstruct</groupId>
+                <artifactId>mapstruct</artifactId>
+                <version>${org.mapstruct.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.squareup.okhttp3</groupId>
+                <artifactId>okhttp</artifactId>
+                <version>4.9.0</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <type>pom</type>
+                <version>2.4.4</version>
+                <scope>import</scope>
+            </dependency>
+
+            <dependency>
+                <groupId>io.jsonwebtoken</groupId>
+                <artifactId>jjwt-api</artifactId>
+                <version>${jjwt.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>io.jsonwebtoken</groupId>
+                <artifactId>jjwt-impl</artifactId>
+                <version>${jjwt.version}</version>
+                <scope>runtime</scope>
+            </dependency>
+            <dependency>
+                <groupId>io.jsonwebtoken</groupId>
+                <artifactId>jjwt-jackson</artifactId> <!-- or jjwt-gson if Gson is preferred -->
+                <version>${jjwt.version}</version>
+                <scope>runtime</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+
+    <distributionManagement>
+        <repository>
+            <id>nexus</id>
+            <url>http://nexus.seecoder.cn/repository/maven-releases/</url>
+        </repository>
+    </distributionManagement>
+
+</project>

+ 33 - 0
seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/DailyAnswerMapVO.java

@@ -0,0 +1,33 @@
+package cn.seecoder.seecoderportalcommon.vo;
+
+import java.util.List;
+
+public class DailyAnswerMapVO {
+    private String answer;
+    private String endAt;
+    private String startAt;
+
+    public String getStartAt() {
+        return startAt;
+    }
+
+    public void setStartAt(String startAt) {
+        this.startAt = startAt;
+    }
+
+    public String getEndAt() {
+        return endAt;
+    }
+
+    public void setEndAt(String endAt) {
+        this.endAt = endAt;
+    }
+
+    public String getAnswer() {
+        return answer;
+    }
+
+    public void setAnswer(String answer) {
+        this.answer = answer;
+    }
+}

+ 63 - 0
seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/ResponseVO.java

@@ -0,0 +1,63 @@
+package cn.seecoder.seecoderportalcommon.vo;
+
+public class ResponseVO {
+    /**
+     * 调用是否成功
+     */
+    private Boolean success;
+
+    /**
+     * 返回的提示信息
+     */
+    private String message;
+
+    /**
+     * 内容
+     */
+    private Object content;
+
+    public static ResponseVO buildSuccess(){
+        ResponseVO response=new ResponseVO();
+        response.setSuccess(true);
+        return response;
+    }
+
+    public static ResponseVO buildSuccess(Object content){
+        ResponseVO response=new ResponseVO();
+        response.setContent(content);
+        response.setSuccess(true);
+        return response;
+    }
+
+    public static ResponseVO buildFailure(String message){
+        ResponseVO response=new ResponseVO();
+        response.setSuccess(false);
+        response.setMessage(message);
+        System.out.println(message);
+        return response;
+    }
+
+    public boolean getSuccess() {
+        return success;
+    }
+
+    public void setSuccess(boolean success) {
+        this.success = success;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public Object getContent() {
+        return content;
+    }
+
+    public void setContent(Object content) {
+        this.content = content;
+    }
+}

+ 31 - 0
seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/UserDoneQuesInfoVO.java

@@ -0,0 +1,31 @@
+package cn.seecoder.seecoderportalcommon.vo;
+
+public class UserDoneQuesInfoVO {
+    private long pasted;
+    private long notpasted;
+    private long left;
+
+    public long getLeft() {
+        return left;
+    }
+
+    public void setLeft(long left) {
+        this.left = left;
+    }
+
+    public long getNotpasted() {
+        return notpasted;
+    }
+
+    public void setNotpasted(long notpasted) {
+        this.notpasted = notpasted;
+    }
+
+    public long getPasted() {
+        return pasted;
+    }
+
+    public void setPasted(long pasted) {
+        this.pasted = pasted;
+    }
+}

+ 40 - 0
seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/dto/DailyDTO.java

@@ -0,0 +1,40 @@
+package cn.seecoder.seecoderportalcommon.vo.dto;
+
+public class DailyDTO {
+    private String qid;
+    private String answer;
+    private String startAt;
+    private String endAt;
+
+    public String getEndAt() {
+        return endAt;
+    }
+
+    public void setEndAt(String endAt) {
+        this.endAt = endAt;
+    }
+
+    public String getStartAt() {
+        return startAt;
+    }
+
+    public void setStartAt(String startAt) {
+        this.startAt = startAt;
+    }
+
+    public String getAnswer() {
+        return answer;
+    }
+
+    public void setAnswer(String answer) {
+        this.answer = answer;
+    }
+
+    public String getQid() {
+        return qid;
+    }
+
+    public void setQid(String qid) {
+        this.qid = qid;
+    }
+}

+ 24 - 0
seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/dto/RookieInfoDTO.java

@@ -0,0 +1,24 @@
+package cn.seecoder.seecoderportalcommon.vo.dto;
+
+import java.util.List;
+
+public class RookieInfoDTO {
+    private List<String> learned;
+    private List<String> interested;
+
+    public List<String> getInterested() {
+        return interested;
+    }
+
+    public void setInterested(List<String> interested) {
+        this.interested = interested;
+    }
+
+    public List<String> getLearned() {
+        return learned;
+    }
+
+    public void setLearned(List<String> learned) {
+        this.learned = learned;
+    }
+}

+ 95 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/config/SwaggerConfig.java

@@ -0,0 +1,95 @@
+package cn.seecoder.seecoderportalserver.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.context.request.async.DeferredResult;
+import springfox.documentation.builders.ParameterBuilder;
+import springfox.documentation.schema.ModelRef;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import static com.google.common.collect.Lists.newArrayList;
+
+@Configuration
+@EnableSwagger2
+public class SwaggerConfig {
+    @Bean
+    public Docket swaggerApi() {
+        return new Docket(DocumentationType.SWAGGER_2)
+            .globalOperationParameters(newArrayList(
+
+                new ParameterBuilder()
+                    .name("pageNumber")
+                    .description("pageNumber")
+                    .modelRef(new ModelRef("int"))
+                    .parameterType("header")
+                    .required(false)
+                    .build(),
+
+                new ParameterBuilder()
+                    .name("pageSize")
+                    .description("pageSize")
+                    .modelRef(new ModelRef("int"))
+                    .parameterType("header")
+                    .required(false)
+                    .build(),
+
+                new ParameterBuilder()
+                    .name("orders")
+                    .description("orders")
+                    .modelRef(new ModelRef("string"))
+                    .parameterType("header")
+                    .required(false)
+                    .build(),
+
+                new ParameterBuilder()
+                    .name("isAsc")
+                    .description("true: ASC, false: DESC")
+                    .modelRef(new ModelRef("string"))
+                    .parameterType("header")
+                    .required(false)
+                    .build(),
+
+                new ParameterBuilder()
+                    .name("language")
+                    .description("language")
+                    .modelRef(new ModelRef("string"))
+                    .parameterType("header")
+                    .required(false)
+                    .build(),
+
+                new ParameterBuilder()
+                    .name("token")
+                    .description("passport token")
+                    .modelRef(new ModelRef("string"))
+                    .parameterType("header")
+                    .required(false)
+                    .build()
+
+            ))
+            .groupName("plm")
+            .genericModelSubstitutes(DeferredResult.class)
+            .useDefaultResponseMessages(false)
+            .forCodeGeneration(false)
+            .pathMapping("/")
+            .select()
+            .build()
+            .apiInfo(myApiInfo());
+    }
+
+
+
+    private ApiInfo myApiInfo() {
+        ApiInfo apiInfo = new ApiInfo("Harmontronics-plm 接口",//大标题
+            "",//小标题
+            "1.0",//版本
+            "",
+            "",//作者
+            "",//链接显示文字
+            ""//网站链接
+        );
+        return apiInfo;
+    }
+}

+ 48 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/FilledInfo.java

@@ -0,0 +1,48 @@
+package cn.seecoder.seecoderportalserver.domain;
+
+import lombok.Data;
+
+import javax.persistence.*;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+@Data
+@Entity
+@Table(name = "filled_info")
+public class FilledInfo {
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    private Long id;
+
+    @Column(unique = true)
+    @Size(max = 64)
+    @NotNull
+    private String phone;
+
+    @Column
+    private int filled;
+
+    public int getFilled() {
+        return filled;
+    }
+
+    public void setFilled(int filled) {
+        this.filled = filled;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+}

+ 195 - 187
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/User.java

@@ -1,187 +1,195 @@
-package cn.seecoder.seecoderportalserver.domain;
-
-import cn.seecoder.seecoderportalcommon.vo.UserRole;
-import org.hibernate.annotations.CreationTimestamp;
-
-import javax.persistence.*;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
-import java.time.OffsetDateTime;
-
-/**
- * @author Kunduin
- */
-@Entity(name = "user")
-@Table(
-        name = "portal_user",
-        indexes = @Index(name = "user_phone_index", columnList = "phone")
-)
-public class User {
-    @Id
-    @GeneratedValue(strategy = GenerationType.AUTO)
-    private Long id;
-
-    @Column
-    @Size(max = 512)
-    @NotNull
-    private String password;
-
-    @Column(unique = true)
-    @Size(max = 64)
-    @NotNull
-    private String phone;
-
-    @Column(unique = true)
-    @Size(max = 64)
-    @NotNull
-    private String username;
-
-    @Column(unique = true)
-    @Size(max = 64)
-    private String name;
-
-    @Column
-    @Size(max = 512)
-    private String email;
-
-    @Column
-    @Size(max = 512)
-    private String photo;
-
-    @Column
-    @Enumerated(EnumType.STRING)
-    @NotNull
-    private UserRole role = UserRole.STUDENT;
-
-    @Column
-    @Size(max = 512)
-    private String signature = "无";
-
-    @OneToOne(
-            mappedBy = "userDetail",
-            fetch = FetchType.LAZY,
-            orphanRemoval = true
-    )
-    private Teacher teacherInfo;
-
-    @Column
-    @CreationTimestamp
-    private OffsetDateTime createdTime;
-
-    @Column
-    private Boolean isValid = true;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    public String getPhone() {
-        return phone;
-    }
-
-    public void setPhone(String phone) {
-        this.phone = phone;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getEmail() {
-        return email;
-    }
-
-    public void setEmail(String email) {
-        this.email = email;
-    }
-
-    public String getPhoto() {
-        return photo;
-    }
-
-    public void setPhoto(String photo) {
-        this.photo = photo;
-    }
-
-    public UserRole getRole() {
-        return role;
-    }
-
-    public void setRole(UserRole role) {
-        this.role = role;
-    }
-
-    public String getSignature() {
-        return signature;
-    }
-
-    public void setSignature(String signature) {
-        this.signature = signature;
-    }
-
-    public OffsetDateTime getCreatedTime() {
-        return createdTime;
-    }
-
-    public void setCreatedTime(OffsetDateTime createdTime) {
-        this.createdTime = createdTime;
-    }
-
-    public Boolean getValid() {
-        return isValid;
-    }
-
-    public void setValid(Boolean valid) {
-        isValid = valid;
-    }
-
-    public Teacher getTeacherInfo() {
-        return teacherInfo;
-    }
-
-    public void setTeacherInfo(Teacher teacherInfo) {
-        this.teacherInfo = teacherInfo;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    @Override
-    public String toString() {
-        return "User{" +
-                "id=" + id +
-                ", password='" + password + '\'' +
-                ", phone='" + phone + '\'' +
-                ", username='" + username + '\'' +
-                ", name='" + name + '\'' +
-                ", email='" + email + '\'' +
-                ", photo='" + photo + '\'' +
-                ", role=" + role +
-                ", signature='" + signature + '\'' +
-                ", teacherInfo=" + teacherInfo +
-                ", createdTime=" + createdTime +
-                ", isValid=" + isValid +
-                '}';
-    }
-}
+package cn.seecoder.seecoderportalserver.domain;
+
+import cn.seecoder.seecoderportalcommon.vo.UserRole;
+import org.hibernate.annotations.CreationTimestamp;
+
+import javax.persistence.*;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.time.OffsetDateTime;
+
+/**
+ * @author Kunduin
+ */
+@Entity(name = "user")
+@Table(
+        name = "portal_user",
+        indexes = @Index(name = "user_phone_index", columnList = "phone")
+)
+public class User {
+    @Id
+    @TableGenerator(name="PK_user", //生成策略名称
+        pkColumnName="pk_user_id_name",     //主键的列名
+        pkColumnValue="USER_PK",            //主键的值
+        valueColumnName="pk_user_id_value", //生成的值  列名
+        table="USER_GENERATION",            //生成的表名
+        initialValue=1000,   //[主键初识值,默认为0。]
+        //catalog schema   指定表所在的目录名或是数据库名。
+        allocationSize=1)
+    @GeneratedValue(strategy = GenerationType.TABLE,generator = "PK_user")
+    private Long id;
+
+    @Column
+    @Size(max = 512)
+    @NotNull
+    private String password;
+
+    @Column(unique = true)
+    @Size(max = 64)
+    @NotNull
+    private String phone;
+
+    @Column(unique = true)
+    @Size(max = 64)
+    @NotNull
+    private String username;
+
+    @Column(unique = true)
+    @Size(max = 64)
+    private String name;
+
+    @Column
+    @Size(max = 512)
+    private String email;
+
+    @Column
+    @Size(max = 512)
+    private String photo;
+
+    @Column
+    @Enumerated(EnumType.STRING)
+    @NotNull
+    private UserRole role = UserRole.STUDENT;
+
+    @Column
+    @Size(max = 512)
+    private String signature = "无";
+
+    @OneToOne(
+            mappedBy = "userDetail",
+            fetch = FetchType.LAZY,
+            orphanRemoval = true
+    )
+    private Teacher teacherInfo;
+
+    @Column
+    @CreationTimestamp
+    private OffsetDateTime createdTime;
+
+    @Column
+    private Boolean isValid = true;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getPhoto() {
+        return photo;
+    }
+
+    public void setPhoto(String photo) {
+        this.photo = photo;
+    }
+
+    public UserRole getRole() {
+        return role;
+    }
+
+    public void setRole(UserRole role) {
+        this.role = role;
+    }
+
+    public String getSignature() {
+        return signature;
+    }
+
+    public void setSignature(String signature) {
+        this.signature = signature;
+    }
+
+    public OffsetDateTime getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(OffsetDateTime createdTime) {
+        this.createdTime = createdTime;
+    }
+
+    public Boolean getValid() {
+        return isValid;
+    }
+
+    public void setValid(Boolean valid) {
+        isValid = valid;
+    }
+
+    public Teacher getTeacherInfo() {
+        return teacherInfo;
+    }
+
+    public void setTeacherInfo(Teacher teacherInfo) {
+        this.teacherInfo = teacherInfo;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    @Override
+    public String toString() {
+        return "User{" +
+                "id=" + id +
+                ", password='" + password + '\'' +
+                ", phone='" + phone + '\'' +
+                ", username='" + username + '\'' +
+                ", name='" + name + '\'' +
+                ", email='" + email + '\'' +
+                ", photo='" + photo + '\'' +
+                ", role=" + role +
+                ", signature='" + signature + '\'' +
+                ", teacherInfo=" + teacherInfo +
+                ", createdTime=" + createdTime +
+                ", isValid=" + isValid +
+                '}';
+    }
+}

+ 10 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/FilledInfoRepository.java

@@ -0,0 +1,10 @@
+package cn.seecoder.seecoderportalserver.repository;
+
+import cn.seecoder.seecoderportalserver.domain.FilledInfo;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.Optional;
+
+public interface FilledInfoRepository extends JpaRepository<FilledInfo,Long> {
+    Optional<FilledInfo> findByPhone(String phone);
+}

+ 18 - 17
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/PhoneVerificationRepository.java

@@ -1,17 +1,18 @@
-package cn.seecoder.seecoderportalserver.repository;
-
-import cn.seecoder.seecoderportalserver.domain.PhoneVerification;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-import java.time.OffsetDateTime;
-import java.util.Optional;
-
-/**
- * @author kunduin
- */
-public interface PhoneVerificationRepository extends JpaRepository<PhoneVerification, Long> {
-
-    Optional<PhoneVerification> findByPhone(String phone);
-
-    void deleteByCodeTimeBefore(OffsetDateTime offsetDateTime);
-}
+package cn.seecoder.seecoderportalserver.repository;
+
+import cn.seecoder.seecoderportalserver.domain.PhoneVerification;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.time.OffsetDateTime;
+import java.util.Optional;
+
+/**
+ * @author kunduin
+ */
+public interface PhoneVerificationRepository extends JpaRepository<PhoneVerification, Long> {
+
+    Optional<PhoneVerification> findByPhone(String phone);
+
+    void deleteByCodeTimeBefore(OffsetDateTime offsetDateTime);
+
+}

+ 5657 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/Impl/RookieServiceImpl.java

@@ -0,0 +1,5657 @@
+package cn.seecoder.seecoderportalserver.service.Impl;
+
+import cn.seecoder.bok.client.SeecoderBokClient;
+import cn.seecoder.bok.client.SeecoderNeoClient;
+import cn.seecoder.bok.common.QuestionType;
+import cn.seecoder.bok.common.vo.InteractionVO;
+import cn.seecoder.bok.common.vo.KnowledgeNodeVO;
+import cn.seecoder.bok.common.vo.QuestionVO;
+import cn.seecoder.bok.common.vo.RecordVO;
+import cn.seecoder.bok.common.vo.question.*;
+import cn.seecoder.seecoderportalcommon.vo.DailyAnswerMapVO;
+import cn.seecoder.seecoderportalcommon.vo.ResponseVO;
+import cn.seecoder.seecoderportalcommon.vo.TokenVO;
+import cn.seecoder.seecoderportalcommon.vo.UserDoneQuesInfoVO;
+import cn.seecoder.seecoderportalcommon.vo.dto.DailyDTO;
+import cn.seecoder.seecoderportalcommon.vo.dto.RookieInfoDTO;
+import cn.seecoder.seecoderportalserver.domain.FilledInfo;
+import cn.seecoder.seecoderportalserver.domain.User;
+import cn.seecoder.seecoderportalserver.mapper.UserMapper;
+import cn.seecoder.seecoderportalserver.repository.FilledInfoRepository;
+import cn.seecoder.seecoderportalserver.repository.UserRepository;
+import cn.seecoder.seecoderportalserver.security.DomainUserDetails;
+import cn.seecoder.seecoderportalserver.security.SecurityUtils;
+import cn.seecoder.seecoderportalserver.security.jwt.TokenProvider;
+import cn.seecoder.seecoderportalserver.service.RookieService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.stereotype.Service;
+import org.springframework.data.domain.Pageable;
+
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+
+/*
+try{
+
+            return ResponseVO.buildSuccess();
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResponseVO.buildFailure("Impl-失败");
+        }
+ */
+
+@Service
+public class RookieServiceImpl implements RookieService {
+
+    @Autowired
+    FilledInfoRepository filledInfoRepository;
+    @Autowired
+    UserRepository userRepository;
+    @Autowired
+    AuthenticationManagerBuilder authenticationManagerBuilder;
+    @Autowired
+    TokenProvider tokenProvider;
+    @Autowired
+    UserMapper userMapper;
+
+    /**
+     * 获取基本试题(思考一下这个基本题目如何获取)
+     * @return
+     */
+    @Override
+    public ResponseVO putTest(RookieInfoDTO rookieInfoDTO){
+        try{
+            DomainUserDetails currentUser= SecurityUtils.getCurrentUser();
+            String userId=currentUser.getId().toString();
+            Map<String,Integer> questionScoreMap=new ConcurrentHashMap<>();
+            List<String> tags=new ArrayList<>();
+            List<Integer> weights=new ArrayList<>();
+//            weights.add(1);
+//            weights.add(2);
+//            weights.add(3);
+//            weights.add(4);
+//            weights.add(5);
+            List<String> learnedKnowledge=rookieInfoDTO.getLearned();
+            //获取所有学过的知识点
+            List<String> learnedKnowledgeIds=getKnowledges(learnedKnowledge);
+            SeecoderNeoClient seecoderNeoClient=new SeecoderNeoClient("http://bok-neo-backend.seecoder.cn");
+            List<KnowledgeNodeVO> knowledgeNodeVOList=seecoderNeoClient.getKnowledgeNode("软件需求");
+            SeecoderBokClient seecoderBokClient=new SeecoderBokClient("http://bok.seec.seecoder.cn");
+            List<QuestionType> questionTypeList=new ArrayList<>();
+            Pageable pageable1=PageRequest.of(10,5);
+            Pageable pageable2=PageRequest.of(10,3);
+            Pageable pageable3=PageRequest.of(0,2);
+            ChoiceQuestionVO choiceQuestionVO=new ChoiceQuestionVO();
+            TrueFalseQuestionVO trueFalseQuestionVO=new TrueFalseQuestionVO();
+            BlankQuestionVO blankQuestionVO=new BlankQuestionVO();
+            ShortAnswerQuestionVO shortAnswerQuestionVO=new ShortAnswerQuestionVO();
+            CodeQuestionVO codeQuestionVO=new CodeQuestionVO();
+            QuestionType CHOICE=choiceQuestionVO.getType();
+            QuestionType TRUE_FALSE=trueFalseQuestionVO.getType();
+            QuestionType BLANK=blankQuestionVO.getType();
+            QuestionType SHORT_ANSWER=shortAnswerQuestionVO.getType();
+            QuestionType CODE=codeQuestionVO.getType();
+            questionTypeList.add(CHOICE);
+            questionTypeList.add(TRUE_FALSE);
+            questionTypeList.add(BLANK);
+            questionTypeList.add(SHORT_ANSWER);
+            questionTypeList.add(CODE);
+            //根据(题目类型+题目难度+知识点列表)获取题目 (比如:选择+简单+软件工程)
+            //五道选择(四道简单,一道难)()
+            List<QuestionType> choiceType=new ArrayList<>();
+            choiceType.add(CHOICE);
+            List<String> knowledgeIds=new ArrayList<>();
+            Page<QuestionVO> choiceQuestionVOList=seecoderBokClient.getQuestionList("",tags,choiceType,weights,knowledgeIds,pageable1);
+            //五道判断(四道简单,一道难)
+            List<QuestionType> trueFalseType=new ArrayList<>();
+            trueFalseType.add(TRUE_FALSE);
+            Page<QuestionVO> trueFalseQuestionVOList=seecoderBokClient.getQuestionList("",tags,trueFalseType,weights,knowledgeIds,pageable1);
+            //五道填空(四道简单,一道难)
+            List<QuestionType> blankType=new ArrayList<>();
+            blankType.add(BLANK);
+            Page<QuestionVO> blankQuestionVOList=seecoderBokClient.getQuestionList("",tags,blankType,weights,knowledgeIds,pageable1);
+            //三道简答(两道简单,一道难)
+            List<QuestionType> shortType=new ArrayList<>();
+            shortType.add(SHORT_ANSWER);
+            Page<QuestionVO> shortAnswerQuestionVOList=seecoderBokClient.getQuestionList("",tags,shortType,weights,knowledgeIds,pageable2);
+            //两道代码题(一道简单一道难的)
+            List<QuestionType> codeType=new ArrayList<>();
+            codeType.add(CODE);
+            Page<QuestionVO> codeQuestionVOList=seecoderBokClient.getQuestionList("",tags,codeType,weights,knowledgeIds,pageable3);
+
+
+            for (QuestionVO c:choiceQuestionVOList){
+                String id=c.getId();
+                int score=3;
+                questionScoreMap.put(id,score);
+            }
+            for (QuestionVO t:trueFalseQuestionVOList){
+                String id=t.getId();
+                int score=3;
+                questionScoreMap.put(id,score);
+            }
+            for (QuestionVO b:blankQuestionVOList){
+                String id=b.getId();
+                int score=3;
+                questionScoreMap.put(id,score);
+            }
+            for (QuestionVO s:shortAnswerQuestionVOList){
+                String id=s.getId();
+                int score=5;
+                questionScoreMap.put(id,score);
+            }
+            for (QuestionVO c:codeQuestionVOList){
+                String id=c.getId();
+                int score=20;
+                questionScoreMap.put(id,score);
+            }
+
+            return ResponseVO.buildSuccess(questionScoreMap);
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResponseVO.buildFailure("Impl-失败");
+        }
+    }
+
+    @Override
+    public ResponseVO getDaily(RookieInfoDTO rookieInfoDTO){
+        try{
+            DomainUserDetails currentUser= SecurityUtils.getCurrentUser();
+            Map<String,Integer> questionScoreMap=new ConcurrentHashMap<>();
+            SeecoderBokClient seecoderBokClient=new SeecoderBokClient("http://bok.seec.seecoder.cn");
+            String userId=currentUser.getId().toString();
+            List<String> userIdList=new ArrayList<>();
+            userIdList.add(userId);
+            //分页(设置10000来获取所有记录)
+            Pageable pageable=PageRequest.of(0,10000);
+            //当前用户的做题记录
+            Page<RecordVO> curentUserRecordVOPage=seecoderBokClient.getUserRecord(userIdList,null,null,pageable);
+
+            Map<String,Integer> questionWeightMap=new ConcurrentHashMap<>();
+
+            //题目热度(没做过的题目,被人做过的最多的前20)(8)
+            List<String> hotQuestionIds=getHotQuestionIds(seecoderBokClient).subList(0,20);
+            //用户打分高的前几道题目(8)
+            List<String> highRateQuestionIds=getHighRateQuestionIds(seecoderBokClient).subList(0,20);
+            //用户收集次数最多的几道题目(8)
+            List<String> MostcollectionQuestionIds=getMostCollectionQuestionIds(seecoderBokClient).subList(0,20);
+            //用户感兴趣的知识点(10)
+            List<String> interestedknowledgeIds=rookieInfoDTO.getInterested();
+            List<String> interestedQids1=getInterestedQids(interestedknowledgeIds, seecoderBokClient);
+            List<String> interestedQids=new ArrayList<>();
+            if (interestedQids1.size()>20) {
+                interestedQids = interestedQids1.subList(0,20);
+            }else{
+                interestedQids = interestedQids;
+            }
+            //用户做的不好的知识点的题目(10)
+            List<String> badKnowledgeIds=getWrongAnswerQids(seecoderBokClient);
+            //获取没什么人做过的题目(15)
+            String leastDoneQid=getLeadtDoneQuestionIds(seecoderBokClient);
+            for (String s:hotQuestionIds){
+                questionWeightMap.put(s,8);
+            }
+
+            //计算每道题的权重
+            for(String s:highRateQuestionIds){
+                if (questionWeightMap.get(s)==null){
+                    questionWeightMap.put(s,8);
+                }else {
+                    int oldValue=questionWeightMap.get(s);
+                    int newValue=oldValue+8;
+                    questionWeightMap.replace(s,newValue);
+                }
+            }
+            for(String s:MostcollectionQuestionIds){
+                if (questionWeightMap.get(s)==null){
+                    questionWeightMap.put(s,8);
+                }else {
+                    int oldValue=questionWeightMap.get(s);
+                    int newValue=oldValue+8;
+                    questionWeightMap.replace(s,newValue);
+                }
+            }
+            if (interestedQids.size()!=0) {
+                for (String s : interestedQids) {
+                    if (questionWeightMap.get(s) == null) {
+                        questionWeightMap.put(s, 10);
+                    } else {
+                        int oldValue = questionWeightMap.get(s);
+                        int newValue = oldValue + 10;
+                        questionWeightMap.replace(s, newValue);
+                    }
+                }
+            }
+            if(badKnowledgeIds.size()!=0) {
+                for (String s : badKnowledgeIds) {
+                    if (questionWeightMap.get(s) == null) {
+                        questionWeightMap.put(s, 10);
+                    } else {
+                        int oldValue = questionWeightMap.get(s);
+                        int newValue = oldValue + 10;
+                        questionWeightMap.replace(s, newValue);
+                    }
+                }
+            }
+            if (questionWeightMap.get(leastDoneQid)==null){
+                questionWeightMap.put(leastDoneQid,5);
+            }else {
+                int oldValue=questionWeightMap.get(leastDoneQid);
+                int newValue=oldValue+5;
+                questionWeightMap.replace(leastDoneQid,newValue);
+            }
+            //按照权重排序降序
+            List<String> result=sortMapValueDesc(questionWeightMap).subList(0,sortMapValueDesc(questionWeightMap).size()/2);
+            //随机获取前20中的一道题
+            Random random=new Random();
+            int n=random.nextInt(result.size());
+            //返回每日一题
+            String ss=result.get(n);
+            Optional<QuestionVO> dailyQuestionVOOptional=seecoderBokClient.getQuestionById(ss);
+            QuestionVO dailyQuestionVO=dailyQuestionVOOptional.get();
+            return ResponseVO.buildSuccess(dailyQuestionVO);
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResponseVO.buildFailure("Impl-失败");
+        }
+    }
+
+    @Override
+    public ResponseVO finishDaily(int pid){
+        try{
+
+            return ResponseVO.buildSuccess();
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResponseVO.buildFailure("Impl-失败");
+        }
+    }
+
+    @Override
+    public ResponseVO fillInfo(){
+        try{
+            DomainUserDetails currentUser= SecurityUtils.getCurrentUser();
+            String phone=currentUser.getPhone();
+            FilledInfo filledInfo =new FilledInfo();
+            filledInfo.setPhone(phone);
+            filledInfo.setFilled(1);
+            filledInfoRepository.save(filledInfo);
+            return ResponseVO.buildSuccess("信息已填取");
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResponseVO.buildFailure("Impl-失败");
+        }
+    }
+
+    @Override
+    public ResponseVO confirm(){
+        try{
+            DomainUserDetails currentUser=SecurityUtils.getCurrentUser();
+            String phone=currentUser.getPhone();
+            Optional<FilledInfo> filledInfo=filledInfoRepository.findByPhone(phone);
+            if (!filledInfo.isPresent()){
+                return ResponseVO.buildSuccess(0);
+            }
+            return ResponseVO.buildSuccess(1);
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResponseVO.buildFailure("Impl-失败");
+        }
+    }
+
+    @Override
+    public ResponseVO getVirtualTeacher(){
+        try{
+            Optional<User> virtualTeacher=userRepository.findByPhoneOrUsername("18168058387","guanying");
+            UsernamePasswordAuthenticationToken authenticationToken =
+                new UsernamePasswordAuthenticationToken(
+                    "18168058387", "123456");
+
+            Authentication authentication =
+                authenticationManagerBuilder.getObject().authenticate(authenticationToken);
+            SecurityContextHolder.getContext().setAuthentication(authentication);
+            String jwt = tokenProvider.createToken(authentication);
+            //Cookie redirectUriCookie = new Cookie("redirect_uri", null);
+            //response.addCookie(redirectUriCookie);
+
+            TokenVO tokenVO = new TokenVO();
+            tokenVO.setToken(jwt);
+            tokenVO.setRedirectUri("");
+            //DomainUserDetails currentUser = SecurityUtils.getCurrentUser();
+
+            tokenVO.setName("");
+            tokenVO.setUser(userMapper.userToUserVO(virtualTeacher.get()));
+            return ResponseVO.buildSuccess(tokenVO);
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResponseVO.buildFailure("Impl-失败");
+        }
+    }
+
+    @Override
+    public ResponseVO getDailyInfo(DailyDTO dailyDTO){
+        try{
+            Map<String, DailyAnswerMapVO> result=new ConcurrentHashMap<>();
+            String qid=dailyDTO.getQid();
+            DailyAnswerMapVO dailyAnswerMapVO=new DailyAnswerMapVO();
+            dailyAnswerMapVO.setAnswer(dailyDTO.getAnswer());
+            dailyAnswerMapVO.setStartAt(dailyDTO.getStartAt());
+            dailyAnswerMapVO.setEndAt(dailyDTO.getEndAt());
+            result.putIfAbsent(qid,dailyAnswerMapVO);
+            return ResponseVO.buildSuccess(result);
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResponseVO.buildFailure("Impl-失败");
+        }
+    }
+
+    @Override
+    public ResponseVO getUserQuestionInfo(){
+        try{
+            long pastedCount=0;
+            long notPastedCount=0;
+            Page<RecordVO> recordVOPage=getCurrentRecord();
+            long doneCount=recordVOPage.getTotalElements();
+            for (RecordVO r:recordVOPage){
+                if (r.getPass()){
+                    pastedCount++;
+                }
+            }
+            notPastedCount=doneCount-pastedCount;
+            SeecoderBokClient seecoderBokClient=new SeecoderBokClient("http://bok.seec.seecoder.cn");
+            Pageable pageable=PageRequest.of(0,10000);
+            Page<QuestionVO> questionVOPage=seecoderBokClient.getQuestionList(null,null,null,null,null,pageable);
+            long allCount=questionVOPage.getTotalElements();
+            long left=allCount-doneCount;
+            UserDoneQuesInfoVO userDoneQuesInfoVO=new UserDoneQuesInfoVO();
+            userDoneQuesInfoVO.setLeft(left);
+            userDoneQuesInfoVO.setNotpasted(notPastedCount);
+            userDoneQuesInfoVO.setPasted(pastedCount);
+            return ResponseVO.buildSuccess(userDoneQuesInfoVO);
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResponseVO.buildFailure("Impl-失败");
+        }
+
+    }
+
+    @Override
+    public ResponseVO test(){
+        try{
+            SeecoderBokClient seecoderBokClient=new SeecoderBokClient("http://bok.seec.seecoder.cn");
+            //List<InteractionVO> interactionVOList=seecoderBokClient.getAllInteractionQuestions();
+            List<String> result=getHighRateQuestionIds(seecoderBokClient);
+            return ResponseVO.buildSuccess(result);
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResponseVO.buildFailure("Impl-失败");
+        }
+    }
+
+    private List<String> getKnowledges(List<String> knowledgeIdsList){
+        SeecoderNeoClient seecoderNeoClient=new SeecoderNeoClient("http://bok-neo-backend.seecoder.cn");
+        List<String> result=new ArrayList<>();
+        for(String s:knowledgeIdsList){
+            List<KnowledgeNodeVO> temp=seecoderNeoClient.getKnowledgeNode(s);
+            for(KnowledgeNodeVO k:temp){
+                result.add(k.getAbbreviation());
+            }
+        }
+        return result;
+    }
+
+    /**
+     * 获取用户做过的题目Id
+     * @return
+     */
+    private List<String> getHotQuestionIds(SeecoderBokClient seecoderBokClient){
+        Pageable pageable=PageRequest.of(0,100000);
+        Page<RecordVO> recordVOPage=seecoderBokClient.getUserRecord(null,null,null,pageable);
+        Map<String,Integer> doneQuestionMap=new ConcurrentHashMap<>();
+        Page<RecordVO> currentDoneRecord=getCurrentRecord();
+        List<String> doneQuestionIds=new ArrayList<>();
+        for(RecordVO r:currentDoneRecord){
+            doneQuestionIds.add(r.getQuestionId());
+        }
+        for(RecordVO r:recordVOPage){
+            String questionId=r.getQuestionId();
+            if(!doneQuestionIds.contains(questionId)) {
+                if (doneQuestionMap.get(questionId) == null) {
+                    doneQuestionMap.put(questionId, 1);
+                } else {
+                    int oldValue = doneQuestionMap.get(questionId);
+                    int newValue = oldValue + 1;
+                    doneQuestionMap.replace(questionId, newValue);
+                }
+            }
+        }
+        return sortMapValueDesc(doneQuestionMap);
+    }
+    /**
+     * 获取打分高的题目
+     */
+    private List<String> getHighRateQuestionIds(SeecoderBokClient seecoderBokClient){
+        Page<RecordVO> currentDoneRecord=getCurrentRecord();
+        List<String> doneQuestionIds=new ArrayList<>();
+        for(RecordVO r:currentDoneRecord){
+            doneQuestionIds.add(r.getQuestionId());
+        }
+        List<InteractionVO> interactionVOList=seecoderBokClient.getAllInteractionQuestions();
+        Map<String,Integer> rateQuestionMap=new ConcurrentHashMap<>();
+        for(InteractionVO interactionVO:interactionVOList){
+            String qid=interactionVO.getQuestionId();
+            if(interactionVO.getRate()!=null) {
+                if (interactionVO.getRate() >= 4 && (doneQuestionIds.size() == 0 || !doneQuestionIds.contains(qid))) {
+                    if (rateQuestionMap.get(qid) == null) {
+                        rateQuestionMap.put(qid, 1);
+                    } else {
+                        int oldValue = rateQuestionMap.get(qid);
+                        int newValue = oldValue + 1;
+                        rateQuestionMap.put(qid, newValue);
+                    }
+                }
+            }
+        }
+        return sortMapValueDesc(rateQuestionMap);
+    }
+
+
+    /**
+     * 获得收集次数多的题目
+     */
+    private List<String> getMostCollectionQuestionIds(SeecoderBokClient seecoderBokClient){
+        Page<RecordVO> currentDoneRecord=getCurrentRecord();
+        List<String> doneQuestionIds=new ArrayList<>();
+        for(RecordVO r:currentDoneRecord){
+            doneQuestionIds.add(r.getQuestionId());
+        }
+        List<InteractionVO> interactionVOList=seecoderBokClient.getAllInteractionQuestions();
+        Map<String,Integer> collectionQuestionMap=new ConcurrentHashMap<>();
+        for(InteractionVO interactionVO:interactionVOList){
+            String qid=interactionVO.getQuestionId();
+            if(interactionVO.getCollection()&&!doneQuestionIds.contains(qid)){
+                    if(collectionQuestionMap.get(qid)==null){
+                        collectionQuestionMap.put(qid,1);
+                    }
+                    else{
+                        int oldValue=collectionQuestionMap.get(qid);
+                        int newValue=oldValue+1;
+                        collectionQuestionMap.put(qid,newValue);
+                    }
+            }
+        }
+
+        return sortMapValueDesc(collectionQuestionMap);
+    }
+    /**
+     * 获取用户做的不好的知识点的题目
+     */
+    private List<String> getWrongAnswerQids(SeecoderBokClient seecoderBokClient){
+        List<String> result=new ArrayList<>();
+        //做的不好的知识点
+        List<String> knowledgeIds=new ArrayList<>();
+        //当前用户的做题记录
+        Page<RecordVO> currentUserRecordVOPage=getCurrentRecord();
+        for(RecordVO r:currentUserRecordVOPage){
+            if(!r.getPass()){
+                String qid=r.getQuestionId();
+                Optional<QuestionVO> questionVOOptional=seecoderBokClient.getQuestionById(qid);
+                QuestionVO questionVO=questionVOOptional.get();
+                knowledgeIds.addAll(questionVO.getKnowledgeId());
+            }
+        }
+        Pageable pageable1=PageRequest.of(0,20);
+        Page<QuestionVO> badKnowledgeQuestionVOPage=seecoderBokClient.getQuestionList("",null,null,null,knowledgeIds,pageable1);
+        for(QuestionVO q:badKnowledgeQuestionVOPage){
+            result.add(q.getId());
+        }
+        return result;
+    }
+    /**
+     * 用户感兴趣的知识点的题目
+     */
+    private List<String> getInterestedQids(List<String> interestedKnowledgeIds,SeecoderBokClient seecoderBokClient){
+        Pageable pageable=PageRequest.of(0,10000);
+        Page<QuestionVO> interestedQuestionVOPage=seecoderBokClient.getQuestionList("",null,null,null,interestedKnowledgeIds,pageable);
+        int count =0;
+        List<String> result=new ArrayList<>();
+        Page<RecordVO> currentUserRecordVOPage=getCurrentRecord();
+        List<String> doneQuestionIds=new ArrayList<>();
+        for(RecordVO r:currentUserRecordVOPage){
+            doneQuestionIds.add(r.getQuestionId());
+        }
+        for(QuestionVO q:interestedQuestionVOPage){
+            String qid=q.getId();
+            if (!doneQuestionIds.contains(qid)){
+                count++;
+                result.add(qid);
+            }
+            if(count==20){
+                return result;
+            }
+        }
+        return result;
+    }
+
+    /**
+     * 获取没什么人做过的题目
+     */
+    private String getLeadtDoneQuestionIds(SeecoderBokClient seecoderBokClient){
+        List<String> result=new ArrayList<>();
+        List<String> doneQuestionIds=getHotQuestionIds(seecoderBokClient);
+        String[] allQids=getAllQuestionIds();
+        for(int i=0;i<allQids.length;i++){
+            if(!doneQuestionIds.contains(allQids[i])){
+                return allQids[i];
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 对map的value进行降序排序
+     */
+    private List<String> sortMapValueDesc(Map<String,Integer> map){
+        List<Map.Entry<String,Integer>> doneQuestionList=new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
+        //collections.sort()
+        Collections.sort(doneQuestionList, new Comparator<Map.Entry<String, Integer>>() {
+            @Override
+            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
+                return o2.getValue().compareTo(o1.getValue());
+            }
+        });
+        List<String> result=new ArrayList<>();
+        for (int i=0;i<doneQuestionList.size();i++){
+            String key=doneQuestionList.get(i).getKey();
+            result.add(key);
+        }
+        return result;
+    }
+
+    /**
+     * 对map的value进行升序排序
+     */
+    private List<String> sortMapValueAsc(Map<String,Integer> map){
+        List<Map.Entry<String,Integer>> doneQuestionList=new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
+        //collections.sort()
+        Collections.sort(doneQuestionList, new Comparator<Map.Entry<String, Integer>>() {
+            @Override
+            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
+                return o1.getValue().compareTo(o2.getValue());
+            }
+        });
+        List<String> result=new ArrayList<>();
+        for (int i=0;i<doneQuestionList.size();i++){
+            String key=doneQuestionList.get(i).getKey();
+            result.add(key);
+        }
+        return result;
+    }
+
+    /**
+     * 获取所有用户id
+     */
+    private List<String> getAllUserIds(){
+        List<String> result=new ArrayList<>();
+        List<User> userList=userRepository.findAll();
+        for(User user:userList){
+            result.add(user.getId().toString());
+        }
+        return result;
+    }
+
+    /**
+     * 获取当前用户的做题记录
+     */
+    private Page<RecordVO> getCurrentRecord(){
+        SeecoderBokClient seecoderBokClient=new SeecoderBokClient("http://bok.seec.seecoder.cn");
+        DomainUserDetails currentUser= SecurityUtils.getCurrentUser();
+        String userId=currentUser.getId().toString();
+        List<String> userIdList=new ArrayList<>();
+        userIdList.add(userId);
+        //分页(设置10000来获取所有记录)
+        Pageable pageable=PageRequest.of(0,10000);
+        //当前用户的做题记录
+        Page<RecordVO> curentUserRecordVOPage=seecoderBokClient.getUserRecord(userIdList,null,null,pageable);
+        return curentUserRecordVOPage;
+    }
+    /**
+     *
+     */
+    private String[] getAllQuestionIds() {
+        String[] result = new String[]{
+            "learncoder_95_2467",
+            "learncoder_95_2466",
+            "learncoder_95_2465",
+            "learncoder_95_2464",
+            "learncoder_95_2463",
+            "learncoder_95_2462",
+            "learncoder_95_2461",
+            "learncoder_95_2460",
+            "learncoder_95_2459",
+            "learncoder_95_2458",
+            "learncoder_95_2457",
+            "learncoder_95_2456",
+            "learncoder_95_2455",
+            "learncoder_95_2454",
+            "learncoder_95_2453",
+            "learncoder_95_2452",
+            "learncoder_95_2451",
+            "learncoder_95_2450",
+            "learncoder_95_2449",
+            "learncoder_95_2448",
+            "learncoder_95_2447",
+            "learncoder_95_2446",
+            "learncoder_95_2445",
+            "learncoder_95_2444",
+            "learncoder_95_2443",
+            "learncoder_95_2442",
+            "learncoder_95_2441",
+            "learncoder_95_2440",
+            "learncoder_95_2439",
+            "learncoder_95_2438",
+            "learncoder_95_2437",
+            "learncoder_95_2436",
+            "learncoder_95_2435",
+            "learncoder_95_2434",
+            "learncoder_95_2433",
+            "learncoder_95_2432",
+            "learncoder_95_2431",
+            "learncoder_95_2430",
+            "learncoder_95_2429",
+            "learncoder_95_2428",
+            "learncoder_95_2427",
+            "learncoder_95_2426",
+            "learncoder_95_2425",
+            "learncoder_95_2424",
+            "learncoder_95_2423",
+            "learncoder_95_2422",
+            "learncoder_95_2421",
+            "learncoder_95_2420",
+            "learncoder_95_2419",
+            "learncoder_95_2418",
+            "learncoder_95_2417",
+            "learncoder_95_2416",
+            "learncoder_95_2415",
+            "learncoder_95_2414",
+            "learncoder_95_2413",
+            "learncoder_95_2412",
+            "learncoder_95_2411",
+            "learncoder_94_2410",
+            "learncoder_94_2409",
+            "learncoder_94_2408",
+            "learncoder_94_2407",
+            "learncoder_94_2406",
+            "learncoder_94_2405",
+            "learncoder_94_2404",
+            "learncoder_94_2403",
+            "learncoder_94_2402",
+            "learncoder_94_2401",
+            "learncoder_94_2400",
+            "learncoder_94_2399",
+            "learncoder_94_2398",
+            "learncoder_94_2397",
+            "learncoder_94_2396",
+            "learncoder_94_2395",
+            "learncoder_94_2394",
+            "learncoder_94_2393",
+            "learncoder_94_2392",
+            "learncoder_94_2391",
+            "learncoder_94_2390",
+            "learncoder_94_2389",
+            "learncoder_94_2388",
+            "learncoder_94_2387",
+            "learncoder_94_2386",
+            "learncoder_94_2385",
+            "learncoder_94_2384",
+            "learncoder_94_2383",
+            "learncoder_94_2382",
+            "learncoder_94_2381",
+            "learncoder_94_2380",
+            "learncoder_94_2379",
+            "learncoder_94_2378",
+            "learncoder_94_2377",
+            "learncoder_94_2376",
+            "learncoder_94_2375",
+            "learncoder_94_2374",
+            "learncoder_94_2373",
+            "learncoder_94_2372",
+            "learncoder_94_2371",
+            "learncoder_94_2370",
+            "learncoder_94_2369",
+            "learncoder_94_2368",
+            "learncoder_94_2367",
+            "learncoder_94_2366",
+            "learncoder_94_2365",
+            "learncoder_94_2364",
+            "learncoder_94_2363",
+            "learncoder_94_2362",
+            "learncoder_94_2361",
+            "learncoder_94_2360",
+            "learncoder_94_2359",
+            "learncoder_94_2358",
+            "learncoder_94_2357",
+            "learncoder_94_2356",
+            "learncoder_94_2355",
+            "learncoder_94_2354",
+            "learncoder_94_2353",
+            "learncoder_94_2352",
+            "learncoder_94_2351",
+            "learncoder_94_2350",
+            "learncoder_94_2349",
+            "learncoder_94_2348",
+            "learncoder_94_2347",
+            "learncoder_94_2346",
+            "learncoder_94_2345",
+            "learncoder_94_2344",
+            "learncoder_94_2343",
+            "learncoder_94_2342",
+            "learncoder_94_2341",
+            "learncoder_94_2340",
+            "learncoder_94_2339",
+            "learncoder_94_2338",
+            "learncoder_94_2337",
+            "learncoder_94_2336",
+            "learncoder_94_2335",
+            "learncoder_94_2334",
+            "learncoder_94_2333",
+            "learncoder_94_2332",
+            "learncoder_94_2331",
+            "learncoder_94_2330",
+            "learncoder_94_2329",
+            "learncoder_94_2328",
+            "learncoder_94_2327",
+            "learncoder_94_2326",
+            "learncoder_94_2325",
+            "learncoder_94_2324",
+            "learncoder_94_2323",
+            "learncoder_94_2322",
+            "learncoder_93_2321",
+            "learncoder_93_2320",
+            "learncoder_93_2319",
+            "learncoder_93_2318",
+            "learncoder_93_2317",
+            "learncoder_93_2316",
+            "learncoder_93_2315",
+            "learncoder_93_2314",
+            "learncoder_93_2313",
+            "learncoder_93_2312",
+            "learncoder_93_2311",
+            "learncoder_93_2310",
+            "learncoder_93_2309",
+            "learncoder_93_2308",
+            "learncoder_93_2307",
+            "learncoder_93_2306",
+            "learncoder_93_2305",
+            "learncoder_93_2304",
+            "learncoder_93_2303",
+            "learncoder_93_2302",
+            "learncoder_93_2301",
+            "learncoder_93_2300",
+            "learncoder_93_2299",
+            "learncoder_93_2298",
+            "learncoder_93_2297",
+            "learncoder_93_2296",
+            "learncoder_93_2295",
+            "learncoder_93_2294",
+            "learncoder_93_2293",
+            "learncoder_93_2292",
+            "learncoder_92_2291",
+            "learncoder_92_2290",
+            "learncoder_92_2289",
+            "learncoder_92_2288",
+            "learncoder_92_2287",
+            "learncoder_92_2286",
+            "learncoder_92_2285",
+            "learncoder_92_2284",
+            "learncoder_92_2283",
+            "learncoder_92_2282",
+            "learncoder_92_2281",
+            "learncoder_92_2280",
+            "learncoder_92_2279",
+            "learncoder_92_2278",
+            "learncoder_92_2277",
+            "learncoder_92_2276",
+            "learncoder_92_2275",
+            "learncoder_92_2274",
+            "learncoder_92_2273",
+            "learncoder_92_2272",
+            "learncoder_92_2271",
+            "learncoder_92_2270",
+            "learncoder_92_2269",
+            "learncoder_92_2268",
+            "learncoder_92_2267",
+            "learncoder_92_2266",
+            "learncoder_92_2265",
+            "learncoder_92_2264",
+            "learncoder_92_2263",
+            "learncoder_92_2262",
+            "learncoder_92_2261",
+            "learncoder_92_2260",
+            "learncoder_92_2259",
+            "learncoder_92_2258",
+            "learncoder_92_2257",
+            "learncoder_92_2256",
+            "learncoder_92_2255",
+            "learncoder_92_2254",
+            "learncoder_92_2253",
+            "learncoder_92_2252",
+            "learncoder_92_2251",
+            "learncoder_92_2250",
+            "learncoder_92_2249",
+            "learncoder_92_2248",
+            "learncoder_92_2247",
+            "learncoder_92_2246",
+            "learncoder_92_2245",
+            "learncoder_92_2244",
+            "learncoder_92_2243",
+            "learncoder_92_2242",
+            "learncoder_92_2241",
+            "learncoder_92_2240",
+            "learncoder_92_2239",
+            "learncoder_92_2238",
+            "learncoder_92_2237",
+            "learncoder_92_2236",
+            "learncoder_92_2235",
+            "learncoder_92_2234",
+            "learncoder_92_2233",
+            "learncoder_92_2232",
+            "learncoder_92_2231",
+            "learncoder_91_2230",
+            "learncoder_91_2229",
+            "learncoder_91_2228",
+            "learncoder_91_2227",
+            "learncoder_91_2226",
+            "learncoder_91_2225",
+            "learncoder_91_2224",
+            "learncoder_91_2223",
+            "learncoder_91_2222",
+            "learncoder_91_2221",
+            "learncoder_91_2220",
+            "learncoder_91_2219",
+            "learncoder_91_2218",
+            "learncoder_91_2217",
+            "learncoder_91_2216",
+            "learncoder_91_2215",
+            "learncoder_91_2214",
+            "learncoder_91_2213",
+            "learncoder_91_2212",
+            "learncoder_91_2211",
+            "learncoder_91_2210",
+            "learncoder_91_2209",
+            "learncoder_91_2208",
+            "learncoder_91_2207",
+            "learncoder_91_2206",
+            "learncoder_91_2205",
+            "learncoder_91_2204",
+            "learncoder_91_2203",
+            "learncoder_91_2202",
+            "learncoder_91_2201",
+            "learncoder_91_2200",
+            "learncoder_91_2199",
+            "learncoder_91_2198",
+            "learncoder_91_2197",
+            "learncoder_91_2196",
+            "learncoder_91_2195",
+            "learncoder_91_2194",
+            "learncoder_91_2193",
+            "learncoder_91_2192",
+            "learncoder_91_2191",
+            "learncoder_91_2190",
+            "learncoder_91_2189",
+            "learncoder_91_2188",
+            "learncoder_91_2187",
+            "learncoder_91_2186",
+            "learncoder_91_2185",
+            "learncoder_91_2184",
+            "learncoder_91_2183",
+            "learncoder_91_2182",
+            "learncoder_91_2181",
+            "learncoder_91_2180",
+            "learncoder_91_2179",
+            "learncoder_91_2178",
+            "learncoder_91_2177",
+            "learncoder_91_2176",
+            "learncoder_91_2175",
+            "learncoder_91_2174",
+            "learncoder_91_2173",
+            "learncoder_91_2172",
+            "learncoder_91_2171",
+            "learncoder_91_2170",
+            "learncoder_91_2169",
+            "learncoder_91_2168",
+            "learncoder_91_2167",
+            "learncoder_91_2166",
+            "learncoder_91_2165",
+            "learncoder_91_2164",
+            "learncoder_91_2163",
+            "learncoder_91_2162",
+            "learncoder_91_2161",
+            "learncoder_91_2160",
+            "learncoder_91_2159",
+            "learncoder_91_2158",
+            "learncoder_91_2157",
+            "learncoder_91_2156",
+            "learncoder_91_2155",
+            "learncoder_91_2154",
+            "learncoder_91_2153",
+            "learncoder_91_2152",
+            "learncoder_91_2151",
+            "learncoder_91_2150",
+            "learncoder_91_2149",
+            "learncoder_91_2148",
+            "learncoder_91_2147",
+            "learncoder_91_2146",
+            "learncoder_91_2145",
+            "learncoder_91_2144",
+            "learncoder_91_2143",
+            "learncoder_39_467",
+            "learncoder_39_466",
+            "learncoder_39_465",
+            "learncoder_39_464",
+            "learncoder_39_463",
+            "learncoder_39_462",
+            "learncoder_39_461",
+            "learncoder_39_460",
+            "learncoder_39_459",
+            "learncoder_39_458",
+            "learncoder_39_457",
+            "learncoder_39_456",
+            "learncoder_39_455",
+            "learncoder_39_454",
+            "learncoder_39_453",
+            "learncoder_39_452",
+            "learncoder_39_451",
+            "learncoder_39_450",
+            "learncoder_39_449",
+            "learncoder_39_448",
+            "learncoder_39_447",
+            "learncoder_39_446",
+            "learncoder_39_445",
+            "learncoder_39_444",
+            "learncoder_39_443",
+            "learncoder_39_442",
+            "learncoder_39_441",
+            "learncoder_39_440",
+            "learncoder_39_439",
+            "learncoder_39_438",
+            "learncoder_39_437",
+            "learncoder_39_436",
+            "learncoder_39_435",
+            "learncoder_39_22703",
+            "learncoder_39_22702",
+            "learncoder_39_22699",
+            "learncoder_39_22698",
+            "learncoder_39_22697",
+            "learncoder_39_22696",
+            "learncoder_39_22695",
+            "learncoder_39_22694",
+            "learncoder_39_22693",
+            "learncoder_39_22692",
+            "learncoder_39_22691",
+            "learncoder_39_22690",
+            "learncoder_39_22689",
+            "learncoder_39_22688",
+            "learncoder_39_22687",
+            "learncoder_39_22686",
+            "learncoder_39_22685",
+            "learncoder_39_22684",
+            "learncoder_39_22683",
+            "learncoder_39_22682",
+            "learncoder_39_22681",
+            "learncoder_39_22680",
+            "learncoder_39_22679",
+            "learncoder_39_22678",
+            "learncoder_39_22677",
+            "learncoder_39_22676",
+            "learncoder_39_22675",
+            "learncoder_39_22674",
+            "learncoder_39_22673",
+            "learncoder_39_22672",
+            "learncoder_39_22671",
+            "learncoder_39_22670",
+            "learncoder_39_22669",
+            "learncoder_39_22668",
+            "learncoder_39_22667",
+            "learncoder_39_22666",
+            "learncoder_39_22665",
+            "learncoder_39_22664",
+            "learncoder_39_22663",
+            "learncoder_39_22662",
+            "learncoder_39_22661",
+            "learncoder_39_22660",
+            "learncoder_39_22659",
+            "learncoder_39_22658",
+            "learncoder_39_22657",
+            "learncoder_39_22656",
+            "learncoder_39_22655",
+            "learncoder_39_22654",
+            "learncoder_39_19184",
+            "learncoder_39_19183",
+            "learncoder_39_19182",
+            "learncoder_39_19181",
+            "learncoder_39_19180",
+            "learncoder_39_19179",
+            "learncoder_39_19178",
+            "learncoder_39_19177",
+            "learncoder_39_19176",
+            "learncoder_39_19175",
+            "learncoder_39_19174",
+            "learncoder_39_19173",
+            "learncoder_39_19172",
+            "learncoder_39_19171",
+            "learncoder_39_19170",
+            "learncoder_39_19167",
+            "learncoder_39_19166",
+            "learncoder_39_19165",
+            "learncoder_39_19164",
+            "learncoder_39_19163",
+            "learncoder_39_19162",
+            "learncoder_39_19161",
+            "learncoder_39_19160",
+            "learncoder_39_19159",
+            "learncoder_39_19158",
+            "learncoder_38_434",
+            "learncoder_38_433",
+            "learncoder_38_432",
+            "learncoder_38_431",
+            "learncoder_38_430",
+            "learncoder_38_429",
+            "learncoder_38_428",
+            "learncoder_38_427",
+            "learncoder_38_426",
+            "learncoder_38_425",
+            "learncoder_38_424",
+            "learncoder_38_423",
+            "learncoder_38_422",
+            "learncoder_38_421",
+            "learncoder_38_420",
+            "learncoder_38_419",
+            "learncoder_38_418",
+            "learncoder_38_417",
+            "learncoder_38_413",
+            "learncoder_38_412",
+            "learncoder_38_411",
+            "learncoder_38_410",
+            "learncoder_38_409",
+            "learncoder_38_408",
+            "learncoder_38_407",
+            "learncoder_38_406",
+            "learncoder_38_405",
+            "learncoder_38_404",
+            "learncoder_38_403",
+            "learncoder_38_402",
+            "learncoder_38_401",
+            "learncoder_38_400",
+            "learncoder_38_399",
+            "learncoder_38_398",
+            "learncoder_38_397",
+            "learncoder_38_396",
+            "learncoder_38_395",
+            "learncoder_38_394",
+            "learncoder_38_393",
+            "learncoder_38_392",
+            "learncoder_38_391",
+            "learncoder_38_390",
+            "learncoder_38_389",
+            "learncoder_38_388",
+            "learncoder_38_387",
+            "learncoder_38_386",
+            "learncoder_38_385",
+            "learncoder_38_384",
+            "learncoder_38_383",
+            "learncoder_38_382",
+            "learncoder_38_381",
+            "learncoder_38_380",
+            "learncoder_38_379",
+            "learncoder_38_378",
+            "learncoder_38_377",
+            "learncoder_38_376",
+            "learncoder_38_375",
+            "learncoder_38_374",
+            "learncoder_38_373",
+            "learncoder_38_372",
+            "learncoder_38_371",
+            "learncoder_38_370",
+            "learncoder_38_369",
+            "learncoder_38_368",
+            "learncoder_38_367",
+            "learncoder_38_366",
+            "learncoder_38_365",
+            "learncoder_38_364",
+            "learncoder_38_363",
+            "learncoder_38_362",
+            "learncoder_38_361",
+            "learncoder_38_360",
+            "learncoder_38_359",
+            "learncoder_38_22457",
+            "learncoder_38_22454",
+            "learncoder_38_22453",
+            "learncoder_38_22452",
+            "learncoder_38_22451",
+            "learncoder_38_22450",
+            "learncoder_38_22449",
+            "learncoder_38_22448",
+            "learncoder_38_22447",
+            "learncoder_38_22446",
+            "learncoder_38_22445",
+            "learncoder_38_22444",
+            "learncoder_38_22443",
+            "learncoder_38_22442",
+            "learncoder_38_22441",
+            "learncoder_38_22440",
+            "learncoder_38_22439",
+            "learncoder_38_22438",
+            "learncoder_38_22437",
+            "learncoder_38_22436",
+            "learncoder_38_22435",
+            "learncoder_38_22434",
+            "learncoder_38_22433",
+            "learncoder_38_22432",
+            "learncoder_38_22431",
+            "learncoder_38_22430",
+            "learncoder_38_22429",
+            "learncoder_38_22428",
+            "learncoder_38_22427",
+            "learncoder_38_22426",
+            "learncoder_38_22425",
+            "learncoder_38_22424",
+            "learncoder_38_22423",
+            "learncoder_38_22422",
+            "learncoder_38_22421",
+            "learncoder_38_22420",
+            "learncoder_38_22419",
+            "learncoder_38_22418",
+            "learncoder_38_22417",
+            "learncoder_38_22416",
+            "learncoder_38_22415",
+            "learncoder_38_22414",
+            "learncoder_38_22413",
+            "learncoder_38_22412",
+            "learncoder_38_22411",
+            "learncoder_38_22410",
+            "learncoder_38_22409",
+            "learncoder_38_22408",
+            "learncoder_38_22407",
+            "learncoder_38_22406",
+            "learncoder_38_22405",
+            "learncoder_38_22404",
+            "learncoder_38_22403",
+            "learncoder_38_22402",
+            "learncoder_38_19157",
+            "learncoder_38_19156",
+            "learncoder_38_19155",
+            "learncoder_38_19154",
+            "learncoder_38_19153",
+            "learncoder_38_19152",
+            "learncoder_38_19151",
+            "learncoder_38_19150",
+            "learncoder_38_19149",
+            "learncoder_38_19148",
+            "learncoder_38_19147",
+            "learncoder_38_19146",
+            "learncoder_38_19145",
+            "learncoder_38_19144",
+            "learncoder_38_19143",
+            "learncoder_38_19140",
+            "learncoder_38_19139",
+            "learncoder_38_19138",
+            "learncoder_38_19137",
+            "learncoder_38_19136",
+            "learncoder_38_19135",
+            "learncoder_38_19134",
+            "learncoder_38_19133",
+            "learncoder_38_19132",
+            "learncoder_38_19131",
+            "learncoder_38_19130",
+            "learncoder_38_19129",
+            "learncoder_38_19128",
+            "learncoder_38_19127",
+            "learncoder_38_19126",
+            "learncoder_38_19125",
+            "learncoder_38_19124",
+            "learncoder_38_19123",
+            "learncoder_38_19122",
+            "learncoder_38_19121",
+            "learncoder_38_19120",
+            "learncoder_38_19119",
+            "learncoder_38_19118",
+            "learncoder_38_19117",
+            "learncoder_38_19116",
+            "learncoder_38_16375",
+            "learncoder_38_16374",
+            "learncoder_38_16373",
+            "learncoder_38_16372",
+            "learncoder_38_16371",
+            "learncoder_38_16370",
+            "learncoder_38_16369",
+            "learncoder_38_16368",
+            "learncoder_38_16367",
+            "learncoder_38_16366",
+            "learncoder_38_16365",
+            "learncoder_38_16364",
+            "learncoder_38_16363",
+            "learncoder_38_16362",
+            "learncoder_38_16361",
+            "learncoder_38_16360",
+            "learncoder_38_16359",
+            "learncoder_38_16358",
+            "learncoder_38_16357",
+            "learncoder_38_16356",
+            "learncoder_38_16355",
+            "learncoder_38_16354",
+            "learncoder_38_16353",
+            "learncoder_38_16351",
+            "learncoder_38_16350",
+            "learncoder_38_16349",
+            "learncoder_38_16348",
+            "learncoder_38_16347",
+            "learncoder_38_16346",
+            "learncoder_38_16345",
+            "learncoder_38_16344",
+            "learncoder_38_16343",
+            "learncoder_38_16342",
+            "learncoder_38_16341",
+            "learncoder_38_16340",
+            "learncoder_38_16339",
+            "learncoder_38_16338",
+            "learncoder_38_16337",
+            "learncoder_38_16336",
+            "learncoder_38_16335",
+            "learncoder_38_16334",
+            "learncoder_38_16333",
+            "learncoder_38_16332",
+            "learncoder_38_16331",
+            "learncoder_38_16330",
+            "learncoder_38_16329",
+            "learncoder_38_16328",
+            "learncoder_38_16327",
+            "learncoder_38_16326",
+            "learncoder_38_16325",
+            "learncoder_38_16324",
+            "learncoder_38_16323",
+            "learncoder_38_16322",
+            "learncoder_38_16321",
+            "learncoder_38_16320",
+            "learncoder_38_16319",
+            "learncoder_38_16318",
+            "learncoder_38_16317",
+            "learncoder_38_16316",
+            "learncoder_38_16315",
+            "learncoder_38_16314",
+            "learncoder_38_16313",
+            "learncoder_38_16312",
+            "learncoder_38_16311",
+            "learncoder_38_16310",
+            "learncoder_38_16309",
+            "learncoder_38_16308",
+            "learncoder_38_16307",
+            "learncoder_38_16306",
+            "learncoder_38_16305",
+            "learncoder_38_16304",
+            "learncoder_38_16303",
+            "learncoder_38_16302",
+            "learncoder_38_16301",
+            "learncoder_38_16300",
+            "learncoder_38_16299",
+            "learncoder_38_16298",
+            "learncoder_38_16297",
+            "learncoder_38_16296",
+            "learncoder_38_16295",
+            "learncoder_38_16294",
+            "learncoder_38_16293",
+            "learncoder_38_16292",
+            "learncoder_38_16291",
+            "learncoder_38_16290",
+            "learncoder_38_16289",
+            "learncoder_38_16288",
+            "learncoder_38_16287",
+            "learncoder_38_16286",
+            "learncoder_38_16285",
+            "learncoder_38_16284",
+            "learncoder_38_16283",
+            "learncoder_38_16282",
+            "learncoder_38_16281",
+            "learncoder_38_16279",
+            "learncoder_38_16278",
+            "learncoder_38_16277",
+            "learncoder_38_16276",
+            "learncoder_38_16275",
+            "learncoder_38_16274",
+            "learncoder_38_16273",
+            "learncoder_38_16272",
+            "learncoder_38_16271",
+            "learncoder_38_16270",
+            "learncoder_38_16269",
+            "learncoder_38_16268",
+            "learncoder_38_16267",
+            "learncoder_38_16266",
+            "learncoder_38_16265",
+            "learncoder_38_16264",
+            "learncoder_38_16263",
+            "learncoder_38_16262",
+            "learncoder_38_16261",
+            "learncoder_38_16260",
+            "learncoder_38_16259",
+            "learncoder_38_16258",
+            "learncoder_38_16257",
+            "learncoder_38_16256",
+            "learncoder_38_16254",
+            "learncoder_38_16253",
+            "learncoder_38_16252",
+            "learncoder_38_16251",
+            "learncoder_38_16250",
+            "learncoder_38_16249",
+            "learncoder_38_16248",
+            "learncoder_38_16247",
+            "learncoder_38_16246",
+            "learncoder_38_16245",
+            "learncoder_38_16244",
+            "learncoder_38_16243",
+            "learncoder_38_16242",
+            "learncoder_38_16241",
+            "learncoder_38_16240",
+            "learncoder_38_16239",
+            "learncoder_38_16238",
+            "learncoder_38_16237",
+            "learncoder_38_16236",
+            "learncoder_38_16235",
+            "learncoder_38_16234",
+            "learncoder_38_16233",
+            "learncoder_38_16232",
+            "learncoder_38_16231",
+            "learncoder_38_16230",
+            "learncoder_38_16229",
+            "learncoder_38_16228",
+            "learncoder_38_16227",
+            "learncoder_38_16226",
+            "learncoder_38_16225",
+            "learncoder_38_16224",
+            "learncoder_38_16223",
+            "learncoder_38_16222",
+            "learncoder_38_16221",
+            "learncoder_38_16220",
+            "learncoder_38_16219",
+            "learncoder_38_16218",
+            "learncoder_38_16217",
+            "learncoder_38_16216",
+            "learncoder_38_16215",
+            "learncoder_38_16214",
+            "learncoder_38_16213",
+            "learncoder_38_16212",
+            "learncoder_38_16211",
+            "learncoder_38_16210",
+            "learncoder_38_16209",
+            "learncoder_38_16208",
+            "learncoder_38_16207",
+            "learncoder_38_16206",
+            "learncoder_38_16205",
+            "learncoder_38_16204",
+            "learncoder_38_16203",
+            "learncoder_38_16202",
+            "learncoder_38_16201",
+            "learncoder_38_16200",
+            "learncoder_38_16199",
+            "learncoder_38_16198",
+            "learncoder_38_16197",
+            "learncoder_38_16196",
+            "learncoder_38_16195",
+            "learncoder_38_16194",
+            "learncoder_38_16193",
+            "learncoder_38_16192",
+            "learncoder_38_16191",
+            "learncoder_38_16190",
+            "learncoder_38_16189",
+            "learncoder_38_16188",
+            "learncoder_38_16187",
+            "learncoder_38_16186",
+            "learncoder_38_16185",
+            "learncoder_38_16184",
+            "learncoder_38_16183",
+            "learncoder_38_16182",
+            "learncoder_38_16181",
+            "learncoder_38_16180",
+            "learncoder_38_16179",
+            "learncoder_38_16178",
+            "learncoder_38_16177",
+            "learncoder_38_16176",
+            "learncoder_38_16175",
+            "learncoder_38_16174",
+            "learncoder_38_16173",
+            "learncoder_38_16172",
+            "learncoder_38_16171",
+            "learncoder_38_16170",
+            "learncoder_38_16169",
+            "learncoder_38_16168",
+            "learncoder_38_16167",
+            "learncoder_38_16166",
+            "learncoder_38_16165",
+            "learncoder_38_16164",
+            "learncoder_38_16163",
+            "learncoder_38_16162",
+            "learncoder_38_16161",
+            "learncoder_38_16160",
+            "learncoder_38_16159",
+            "learncoder_38_16158",
+            "learncoder_38_16157",
+            "learncoder_38_16156",
+            "learncoder_38_16155",
+            "learncoder_38_16154",
+            "learncoder_38_16153",
+            "learncoder_38_16152",
+            "learncoder_38_16151",
+            "learncoder_38_16150",
+            "learncoder_38_16149",
+            "learncoder_38_16148",
+            "learncoder_38_16147",
+            "learncoder_38_16146",
+            "learncoder_38_16145",
+            "learncoder_38_16144",
+            "learncoder_38_16143",
+            "learncoder_38_16142",
+            "learncoder_38_16141",
+            "learncoder_38_16140",
+            "learncoder_38_16139",
+            "learncoder_38_16138",
+            "learncoder_38_16137",
+            "learncoder_38_16136",
+            "learncoder_38_16135",
+            "learncoder_38_16134",
+            "learncoder_38_16133",
+            "learncoder_37_358",
+            "learncoder_37_357",
+            "learncoder_37_356",
+            "learncoder_37_355",
+            "learncoder_37_354",
+            "learncoder_37_353",
+            "learncoder_37_352",
+            "learncoder_37_351",
+            "learncoder_37_350",
+            "learncoder_37_349",
+            "learncoder_37_343",
+            "learncoder_37_342",
+            "learncoder_37_341",
+            "learncoder_37_340",
+            "learncoder_37_338",
+            "learncoder_37_337",
+            "learncoder_37_336",
+            "learncoder_37_335",
+            "learncoder_37_334",
+            "learncoder_37_333",
+            "learncoder_37_332",
+            "learncoder_37_331",
+            "learncoder_37_330",
+            "learncoder_37_329",
+            "learncoder_37_328",
+            "learncoder_37_327",
+            "learncoder_37_326",
+            "learncoder_37_325",
+            "learncoder_37_324",
+            "learncoder_37_323",
+            "learncoder_37_322",
+            "learncoder_37_321",
+            "learncoder_37_320",
+            "learncoder_37_319",
+            "learncoder_37_318",
+            "learncoder_37_317",
+            "learncoder_37_316",
+            "learncoder_37_315",
+            "learncoder_37_314",
+            "learncoder_37_313",
+            "learncoder_37_312",
+            "learncoder_37_311",
+            "learncoder_37_308",
+            "learncoder_37_307",
+            "learncoder_37_306",
+            "learncoder_37_19115",
+            "learncoder_37_19114",
+            "learncoder_37_19113",
+            "learncoder_37_19112",
+            "learncoder_37_19111",
+            "learncoder_37_19110",
+            "learncoder_37_19109",
+            "learncoder_37_19108",
+            "learncoder_37_19107",
+            "learncoder_37_19106",
+            "learncoder_37_19105",
+            "learncoder_37_19104",
+            "learncoder_37_19103",
+            "learncoder_37_19102",
+            "learncoder_37_19101",
+            "learncoder_37_19100",
+            "learncoder_37_19099",
+            "learncoder_37_19098",
+            "learncoder_37_19097",
+            "learncoder_37_19096",
+            "learncoder_37_19093",
+            "learncoder_37_19092",
+            "learncoder_37_19091",
+            "learncoder_37_19090",
+            "learncoder_37_19089",
+            "learncoder_37_19088",
+            "learncoder_37_19087",
+            "learncoder_37_19086",
+            "learncoder_37_19085",
+            "learncoder_37_19084",
+            "learncoder_37_19083",
+            "learncoder_37_19082",
+            "learncoder_37_19081",
+            "learncoder_37_19080",
+            "learncoder_37_19079",
+            "learncoder_37_17548",
+            "learncoder_37_17545",
+            "learncoder_37_17544",
+            "learncoder_37_17543",
+            "learncoder_37_17542",
+            "learncoder_37_17541",
+            "learncoder_37_17540",
+            "learncoder_37_17539",
+            "learncoder_37_17538",
+            "learncoder_37_17537",
+            "learncoder_37_17536",
+            "learncoder_37_17535",
+            "learncoder_37_17534",
+            "learncoder_37_17533",
+            "learncoder_37_17532",
+            "learncoder_37_17531",
+            "learncoder_37_17530",
+            "learncoder_37_17529",
+            "learncoder_37_17528",
+            "learncoder_37_17527",
+            "learncoder_37_17526",
+            "learncoder_37_17525",
+            "learncoder_37_17524",
+            "learncoder_37_17523",
+            "learncoder_37_17522",
+            "learncoder_37_17521",
+            "learncoder_37_17520",
+            "learncoder_37_17519",
+            "learncoder_37_17518",
+            "learncoder_37_17517",
+            "learncoder_37_17516",
+            "learncoder_37_17515",
+            "learncoder_37_17514",
+            "learncoder_37_17513",
+            "learncoder_37_17512",
+            "learncoder_37_17511",
+            "learncoder_37_17510",
+            "learncoder_37_17509",
+            "learncoder_37_17508",
+            "learncoder_37_17507",
+            "learncoder_36_793",
+            "learncoder_36_792",
+            "learncoder_36_791",
+            "learncoder_36_790",
+            "learncoder_36_789",
+            "learncoder_36_788",
+            "learncoder_36_787",
+            "learncoder_36_786",
+            "learncoder_36_785",
+            "learncoder_36_784",
+            "learncoder_36_783",
+            "learncoder_36_782",
+            "learncoder_36_781",
+            "learncoder_36_780",
+            "learncoder_36_779",
+            "learncoder_36_778",
+            "learncoder_36_777",
+            "learncoder_36_776",
+            "learncoder_36_775",
+            "learncoder_36_774",
+            "learncoder_36_773",
+            "learncoder_36_772",
+            "learncoder_36_771",
+            "learncoder_36_770",
+            "learncoder_36_769",
+            "learncoder_36_767",
+            "learncoder_36_19077",
+            "learncoder_36_19076",
+            "learncoder_36_19075",
+            "learncoder_36_19074",
+            "learncoder_36_19073",
+            "learncoder_36_19072",
+            "learncoder_36_19071",
+            "learncoder_36_19070",
+            "learncoder_36_19069",
+            "learncoder_36_19067",
+            "learncoder_36_19066",
+            "learncoder_36_19065",
+            "learncoder_36_19064",
+            "learncoder_36_19063",
+            "learncoder_36_19062",
+            "learncoder_36_19061",
+            "learncoder_36_19060",
+            "learncoder_36_19059",
+            "learncoder_36_19058",
+            "learncoder_36_19057",
+            "learncoder_36_19056",
+            "learncoder_36_19055",
+            "learncoder_36_19054",
+            "learncoder_36_19053",
+            "learncoder_36_19052",
+            "learncoder_36_19051",
+            "learncoder_36_19050",
+            "learncoder_36_19049",
+            "learncoder_36_19048",
+            "learncoder_36_17506",
+            "learncoder_36_17505",
+            "learncoder_36_17504",
+            "learncoder_36_17503",
+            "learncoder_36_17502",
+            "learncoder_36_17499",
+            "learncoder_36_17498",
+            "learncoder_36_17497",
+            "learncoder_36_17496",
+            "learncoder_36_17495",
+            "learncoder_36_17494",
+            "learncoder_36_17493",
+            "learncoder_36_17492",
+            "learncoder_36_17491",
+            "learncoder_36_17490",
+            "learncoder_36_17489",
+            "learncoder_36_17488",
+            "learncoder_36_17487",
+            "learncoder_36_17486",
+            "learncoder_36_17485",
+            "learncoder_36_17484",
+            "learncoder_36_17483",
+            "learncoder_36_17482",
+            "learncoder_36_17481",
+            "learncoder_36_17480",
+            "learncoder_36_17479",
+            "learncoder_36_17478",
+            "learncoder_36_17477",
+            "learncoder_36_17476",
+            "learncoder_36_17475",
+            "learncoder_36_17474",
+            "learncoder_36_17473",
+            "learncoder_36_17472",
+            "learncoder_36_17471",
+            "learncoder_36_17470",
+            "learncoder_36_17469",
+            "learncoder_36_17468",
+            "learncoder_36_17467",
+            "learncoder_36_17466",
+            "learncoder_164_21977",
+            "learncoder_164_21976",
+            "learncoder_164_21975",
+            "learncoder_164_21974",
+            "learncoder_164_21973",
+            "learncoder_164_21972",
+            "learncoder_164_21969",
+            "learncoder_164_21968",
+            "learncoder_164_21967",
+            "learncoder_164_21966",
+            "learncoder_164_21965",
+            "learncoder_164_21964",
+            "learncoder_164_21963",
+            "learncoder_164_21962",
+            "learncoder_164_21961",
+            "learncoder_164_21960",
+            "learncoder_163_21995",
+            "learncoder_163_21994",
+            "learncoder_163_21993",
+            "learncoder_163_21990",
+            "learncoder_163_21989",
+            "learncoder_163_21988",
+            "learncoder_163_21987",
+            "learncoder_163_21986",
+            "learncoder_162_22508",
+            "learncoder_162_22507",
+            "learncoder_162_22506",
+            "learncoder_162_22505",
+            "learncoder_162_22504",
+            "learncoder_162_22503",
+            "learncoder_162_22501",
+            "learncoder_162_22500",
+            "learncoder_162_22499",
+            "learncoder_162_22498",
+            "learncoder_162_22497",
+            "learncoder_162_22496",
+            "learncoder_162_22495",
+            "learncoder_162_22494",
+            "learncoder_162_22493",
+            "learncoder_162_22492",
+            "learncoder_162_22491",
+            "learncoder_161_23534",
+            "learncoder_161_23533",
+            "learncoder_161_23532",
+            "learncoder_161_23531",
+            "learncoder_161_23530",
+            "learncoder_161_23529",
+            "learncoder_161_23528",
+            "learncoder_161_23527",
+            "learncoder_161_23526",
+            "learncoder_161_23525",
+            "learncoder_161_23524",
+            "learncoder_161_23523",
+            "learncoder_161_23522",
+            "learncoder_161_23521",
+            "learncoder_161_23520",
+            "learncoder_161_23518",
+            "learncoder_161_23517",
+            "learncoder_161_23516",
+            "learncoder_161_23515",
+            "learncoder_161_23514",
+            "learncoder_161_23513",
+            "learncoder_161_23512",
+            "learncoder_161_23511",
+            "learncoder_161_23510",
+            "learncoder_161_23509",
+            "learncoder_161_23508",
+            "learncoder_161_23507",
+            "learncoder_161_23506",
+            "learncoder_161_23505",
+            "learncoder_161_23504",
+            "learncoder_161_23503",
+            "learncoder_161_23502",
+            "learncoder_161_23501",
+            "learncoder_161_23500",
+            "learncoder_161_23499",
+            "learncoder_161_23498",
+            "learncoder_161_23497",
+            "learncoder_161_23496",
+            "learncoder_161_23495",
+            "learncoder_161_23494",
+            "learncoder_161_23493",
+            "learncoder_161_23492",
+            "learncoder_161_23491",
+            "learncoder_161_23490",
+            "learncoder_161_23489",
+            "learncoder_161_23488",
+            "learncoder_161_23487",
+            "learncoder_161_23486",
+            "learncoder_161_23485",
+            "learncoder_161_23484",
+            "learncoder_161_23483",
+            "learncoder_161_23482",
+            "learncoder_161_23481",
+            "learncoder_161_23480",
+            "learncoder_161_23479",
+            "learncoder_161_23478",
+            "learncoder_161_23477",
+            "learncoder_161_23476",
+            "learncoder_161_23475",
+            "learncoder_161_23474",
+            "learncoder_161_23473",
+            "learncoder_161_23472",
+            "learncoder_161_23471",
+            "learncoder_161_23470",
+            "learncoder_161_23469",
+            "learncoder_161_23468",
+            "learncoder_161_23467",
+            "learncoder_161_23466",
+            "learncoder_161_23465",
+            "learncoder_161_20102",
+            "learncoder_161_20101",
+            "learncoder_161_20100",
+            "learncoder_161_20097",
+            "learncoder_161_20096",
+            "learncoder_161_20095",
+            "learncoder_161_20094",
+            "learncoder_161_20093",
+            "learncoder_161_20092",
+            "learncoder_161_20091",
+            "learncoder_161_20090",
+            "learncoder_161_20089",
+            "learncoder_161_20088",
+            "learncoder_161_20087",
+            "learncoder_161_20086",
+            "learncoder_161_20085",
+            "learncoder_161_20084",
+            "learncoder_161_20083",
+            "learncoder_161_20082",
+            "learncoder_161_20081",
+            "learncoder_161_20080",
+            "learncoder_161_20079",
+            "learncoder_161_20078",
+            "learncoder_161_20077",
+            "learncoder_161_20076",
+            "learncoder_161_20075",
+            "learncoder_161_20074",
+            "learncoder_161_20073",
+            "learncoder_161_20072",
+            "learncoder_161_20071",
+            "learncoder_161_20070",
+            "learncoder_161_20069",
+            "learncoder_161_20068",
+            "learncoder_161_20067",
+            "learncoder_161_20066",
+            "learncoder_161_20065",
+            "learncoder_161_20064",
+            "learncoder_161_20063",
+            "learncoder_161_20062",
+            "learncoder_161_20061",
+            "learncoder_161_20060",
+            "learncoder_161_20059",
+            "learncoder_161_20058",
+            "learncoder_161_20057",
+            "learncoder_161_20056",
+            "learncoder_161_20055",
+            "learncoder_161_20054",
+            "learncoder_161_20053",
+            "learncoder_160_23649",
+            "learncoder_160_23648",
+            "learncoder_160_23647",
+            "learncoder_160_23646",
+            "learncoder_160_23645",
+            "learncoder_160_23644",
+            "learncoder_160_23643",
+            "learncoder_160_23642",
+            "learncoder_160_23641",
+            "learncoder_160_23640",
+            "learncoder_160_23639",
+            "learncoder_160_23638",
+            "learncoder_160_23637",
+            "learncoder_160_23636",
+            "learncoder_160_23635",
+            "learncoder_160_23634",
+            "learncoder_160_23633",
+            "learncoder_160_23632",
+            "learncoder_160_23631",
+            "learncoder_160_23630",
+            "learncoder_160_23629",
+            "learncoder_160_23627",
+            "learncoder_160_23626",
+            "learncoder_160_23625",
+            "learncoder_160_23624",
+            "learncoder_160_23623",
+            "learncoder_160_23622",
+            "learncoder_160_23621",
+            "learncoder_160_23620",
+            "learncoder_160_23619",
+            "learncoder_160_23618",
+            "learncoder_160_23617",
+            "learncoder_160_23616",
+            "learncoder_160_23615",
+            "learncoder_160_23614",
+            "learncoder_160_23613",
+            "learncoder_160_23612",
+            "learncoder_160_23611",
+            "learncoder_160_23610",
+            "learncoder_160_23609",
+            "learncoder_160_23608",
+            "learncoder_160_23607",
+            "learncoder_160_23606",
+            "learncoder_160_23605",
+            "learncoder_160_23604",
+            "learncoder_160_23603",
+            "learncoder_160_23602",
+            "learncoder_160_23601",
+            "learncoder_160_23600",
+            "learncoder_160_23599",
+            "learncoder_160_23598",
+            "learncoder_160_23597",
+            "learncoder_160_23596",
+            "learncoder_160_23595",
+            "learncoder_160_23594",
+            "learncoder_160_23593",
+            "learncoder_160_23592",
+            "learncoder_160_23591",
+            "learncoder_160_23590",
+            "learncoder_160_23589",
+            "learncoder_160_23588",
+            "learncoder_160_23587",
+            "learncoder_160_23586",
+            "learncoder_160_23585",
+            "learncoder_160_23584",
+            "learncoder_160_23583",
+            "learncoder_160_20186",
+            "learncoder_160_20185",
+            "learncoder_160_20184",
+            "learncoder_160_20183",
+            "learncoder_160_20182",
+            "learncoder_160_20181",
+            "learncoder_160_20180",
+            "learncoder_160_20179",
+            "learncoder_160_20178",
+            "learncoder_160_20177",
+            "learncoder_160_20176",
+            "learncoder_160_20175",
+            "learncoder_160_20172",
+            "learncoder_160_20171",
+            "learncoder_160_20170",
+            "learncoder_160_20169",
+            "learncoder_160_20168",
+            "learncoder_160_20167",
+            "learncoder_160_20166",
+            "learncoder_160_20165",
+            "learncoder_160_20164",
+            "learncoder_160_20163",
+            "learncoder_160_20162",
+            "learncoder_160_20161",
+            "learncoder_160_20160",
+            "learncoder_160_20159",
+            "learncoder_160_20158",
+            "learncoder_160_20157",
+            "learncoder_160_20156",
+            "learncoder_160_20155",
+            "learncoder_160_20154",
+            "learncoder_160_20153",
+            "learncoder_160_20152",
+            "learncoder_160_20151",
+            "learncoder_160_20150",
+            "learncoder_160_20149",
+            "learncoder_160_20148",
+            "learncoder_160_20147",
+            "learncoder_160_20146",
+            "learncoder_160_20145",
+            "learncoder_160_20144",
+            "learncoder_160_20143",
+            "learncoder_160_20142",
+            "learncoder_160_20141",
+            "learncoder_160_20140",
+            "learncoder_160_20139",
+            "learncoder_160_20138",
+            "learncoder_160_20137",
+            "learncoder_160_20136",
+            "learncoder_160_20135",
+            "learncoder_160_20134",
+            "learncoder_160_20133",
+            "learncoder_160_20132",
+            "learncoder_160_20131",
+            "learncoder_160_20130",
+            "learncoder_160_20129",
+            "learncoder_160_20128",
+            "learncoder_160_20127",
+            "learncoder_160_20126",
+            "learncoder_160_20125",
+            "learncoder_160_20124",
+            "learncoder_160_20123",
+            "learncoder_160_20122",
+            "learncoder_160_20121",
+            "learncoder_160_20120",
+            "learncoder_160_20119",
+            "learncoder_160_20118",
+            "learncoder_160_20117",
+            "learncoder_160_20116",
+            "learncoder_160_20115",
+            "learncoder_160_20114",
+            "learncoder_159_23877",
+            "learncoder_159_23876",
+            "learncoder_159_23875",
+            "learncoder_159_23874",
+            "learncoder_159_23873",
+            "learncoder_159_23872",
+            "learncoder_159_23871",
+            "learncoder_159_23870",
+            "learncoder_159_23869",
+            "learncoder_159_23868",
+            "learncoder_159_23867",
+            "learncoder_159_23866",
+            "learncoder_159_23865",
+            "learncoder_159_23864",
+            "learncoder_159_23863",
+            "learncoder_159_23862",
+            "learncoder_159_23861",
+            "learncoder_159_23860",
+            "learncoder_159_23859",
+            "learncoder_159_23858",
+            "learncoder_159_23857",
+            "learncoder_159_23856",
+            "learncoder_159_23855",
+            "learncoder_159_23854",
+            "learncoder_159_23853",
+            "learncoder_159_23852",
+            "learncoder_159_23851",
+            "learncoder_159_23850",
+            "learncoder_159_23849",
+            "learncoder_159_23848",
+            "learncoder_159_23847",
+            "learncoder_159_23846",
+            "learncoder_159_23845",
+            "learncoder_159_23844",
+            "learncoder_159_23843",
+            "learncoder_159_23842",
+            "learncoder_159_23841",
+            "learncoder_159_23840",
+            "learncoder_159_23839",
+            "learncoder_159_23838",
+            "learncoder_159_23837",
+            "learncoder_159_23836",
+            "learncoder_159_23835",
+            "learncoder_159_23834",
+            "learncoder_159_23833",
+            "learncoder_159_23832",
+            "learncoder_159_20319",
+            "learncoder_159_20318",
+            "learncoder_159_20317",
+            "learncoder_159_20316",
+            "learncoder_159_20313",
+            "learncoder_159_20312",
+            "learncoder_159_20311",
+            "learncoder_159_20310",
+            "learncoder_159_20309",
+            "learncoder_159_20308",
+            "learncoder_159_20307",
+            "learncoder_159_20306",
+            "learncoder_159_20305",
+            "learncoder_159_20304",
+            "learncoder_159_20303",
+            "learncoder_159_20302",
+            "learncoder_159_20301",
+            "learncoder_159_20300",
+            "learncoder_159_20299",
+            "learncoder_159_20298",
+            "learncoder_159_20297",
+            "learncoder_159_20296",
+            "learncoder_159_20295",
+            "learncoder_159_20294",
+            "learncoder_159_20293",
+            "learncoder_159_20292",
+            "learncoder_159_20291",
+            "learncoder_159_20290",
+            "learncoder_159_20289",
+            "learncoder_159_20288",
+            "learncoder_158_23975",
+            "learncoder_158_23974",
+            "learncoder_158_23973",
+            "learncoder_158_23972",
+            "learncoder_158_23971",
+            "learncoder_158_23970",
+            "learncoder_158_23969",
+            "learncoder_158_23968",
+            "learncoder_158_23967",
+            "learncoder_158_23966",
+            "learncoder_158_23965",
+            "learncoder_158_23964",
+            "learncoder_158_23963",
+            "learncoder_158_23962",
+            "learncoder_158_23961",
+            "learncoder_158_23960",
+            "learncoder_158_23959",
+            "learncoder_158_23958",
+            "learncoder_158_23957",
+            "learncoder_158_23956",
+            "learncoder_158_23955",
+            "learncoder_158_23954",
+            "learncoder_158_23953",
+            "learncoder_158_23952",
+            "learncoder_158_23951",
+            "learncoder_158_23950",
+            "learncoder_158_23949",
+            "learncoder_158_23948",
+            "learncoder_158_23947",
+            "learncoder_158_23946",
+            "learncoder_158_23945",
+            "learncoder_158_23944",
+            "learncoder_158_23943",
+            "learncoder_158_23942",
+            "learncoder_158_23941",
+            "learncoder_158_23940",
+            "learncoder_158_23939",
+            "learncoder_158_23938",
+            "learncoder_158_23937",
+            "learncoder_158_23936",
+            "learncoder_158_23935",
+            "learncoder_158_23934",
+            "learncoder_158_23933",
+            "learncoder_158_23932",
+            "learncoder_158_23931",
+            "learncoder_158_23930",
+            "learncoder_158_23929",
+            "learncoder_158_23928",
+            "learncoder_158_23927",
+            "learncoder_158_23926",
+            "learncoder_158_23925",
+            "learncoder_158_23924",
+            "learncoder_158_23923",
+            "learncoder_158_23922",
+            "learncoder_158_20444",
+            "learncoder_158_20443",
+            "learncoder_158_20442",
+            "learncoder_158_20439",
+            "learncoder_158_20438",
+            "learncoder_158_20437",
+            "learncoder_158_20436",
+            "learncoder_158_20435",
+            "learncoder_158_20434",
+            "learncoder_158_20433",
+            "learncoder_158_20432",
+            "learncoder_158_20431",
+            "learncoder_158_20430",
+            "learncoder_158_20429",
+            "learncoder_158_20428",
+            "learncoder_158_20427",
+            "learncoder_158_20426",
+            "learncoder_158_20425",
+            "learncoder_158_20424",
+            "learncoder_158_20423",
+            "learncoder_158_20422",
+            "learncoder_158_20421",
+            "learncoder_158_20420",
+            "learncoder_158_20419",
+            "learncoder_158_20418",
+            "learncoder_158_20417",
+            "learncoder_158_20416",
+            "learncoder_157_24010",
+            "learncoder_157_24009",
+            "learncoder_157_24008",
+            "learncoder_157_24007",
+            "learncoder_157_24006",
+            "learncoder_157_24005",
+            "learncoder_157_24004",
+            "learncoder_157_24003",
+            "learncoder_157_24002",
+            "learncoder_157_24001",
+            "learncoder_157_24000",
+            "learncoder_157_23999",
+            "learncoder_157_23998",
+            "learncoder_157_23997",
+            "learncoder_157_23996",
+            "learncoder_157_23995",
+            "learncoder_157_23994",
+            "learncoder_157_23993",
+            "learncoder_157_23992",
+            "learncoder_157_23991",
+            "learncoder_157_23990",
+            "learncoder_157_23989",
+            "learncoder_157_23988",
+            "learncoder_157_23987",
+            "learncoder_157_23986",
+            "learncoder_157_23985",
+            "learncoder_157_23984",
+            "learncoder_157_23983",
+            "learncoder_157_23982",
+            "learncoder_157_23981",
+            "learncoder_157_23980",
+            "learncoder_157_23979",
+            "learncoder_157_23978",
+            "learncoder_157_23977",
+            "learncoder_157_23976",
+            "learncoder_157_20541",
+            "learncoder_157_20538",
+            "learncoder_157_20537",
+            "learncoder_157_20536",
+            "learncoder_157_20535",
+            "learncoder_157_20534",
+            "learncoder_157_20533",
+            "learncoder_157_20532",
+            "learncoder_157_20531",
+            "learncoder_157_20530",
+            "learncoder_157_20529",
+            "learncoder_157_20528",
+            "learncoder_157_20527",
+            "learncoder_157_20526",
+            "learncoder_157_20525",
+            "learncoder_157_20524",
+            "learncoder_157_20523",
+            "learncoder_157_20522",
+            "learncoder_157_20521",
+            "learncoder_157_20520",
+            "learncoder_157_20519",
+            "learncoder_157_20518",
+            "learncoder_156_24060",
+            "learncoder_156_24059",
+            "learncoder_156_24058",
+            "learncoder_156_24057",
+            "learncoder_156_24056",
+            "learncoder_156_24055",
+            "learncoder_156_24054",
+            "learncoder_156_24053",
+            "learncoder_156_24052",
+            "learncoder_156_24051",
+            "learncoder_156_24050",
+            "learncoder_156_24049",
+            "learncoder_156_24048",
+            "learncoder_156_24047",
+            "learncoder_156_24046",
+            "learncoder_156_24045",
+            "learncoder_156_24044",
+            "learncoder_156_24043",
+            "learncoder_156_24042",
+            "learncoder_156_24041",
+            "learncoder_156_24040",
+            "learncoder_156_24039",
+            "learncoder_156_24038",
+            "learncoder_156_24037",
+            "learncoder_156_24036",
+            "learncoder_156_24035",
+            "learncoder_156_24034",
+            "learncoder_156_24033",
+            "learncoder_156_24032",
+            "learncoder_156_24031",
+            "learncoder_156_24030",
+            "learncoder_156_24029",
+            "learncoder_156_24028",
+            "learncoder_156_24027",
+            "learncoder_156_24026",
+            "learncoder_156_24025",
+            "learncoder_156_24024",
+            "learncoder_156_24023",
+            "learncoder_156_24022",
+            "learncoder_156_24021",
+            "learncoder_156_24020",
+            "learncoder_156_24019",
+            "learncoder_156_24018",
+            "learncoder_156_24017",
+            "learncoder_156_24016",
+            "learncoder_156_24015",
+            "learncoder_156_24014",
+            "learncoder_156_24013",
+            "learncoder_156_24012",
+            "learncoder_156_24011",
+            "learncoder_156_20583",
+            "learncoder_156_20582",
+            "learncoder_156_20579",
+            "learncoder_156_20578",
+            "learncoder_156_20577",
+            "learncoder_156_20576",
+            "learncoder_156_20575",
+            "learncoder_156_20574",
+            "learncoder_156_20573",
+            "learncoder_156_20572",
+            "learncoder_156_20571",
+            "learncoder_156_20570",
+            "learncoder_156_20569",
+            "learncoder_156_20568",
+            "learncoder_156_20567",
+            "learncoder_156_20566",
+            "learncoder_156_20565",
+            "learncoder_156_20564",
+            "learncoder_156_20563",
+            "learncoder_156_20562",
+            "learncoder_156_20561",
+            "learncoder_156_20560",
+            "learncoder_156_20559",
+            "learncoder_156_20558",
+            "learncoder_156_20557",
+            "learncoder_156_20556",
+            "learncoder_156_20555",
+            "learncoder_156_20554",
+            "learncoder_156_20553",
+            "learncoder_156_20552",
+            "learncoder_156_20551",
+            "learncoder_156_20550",
+            "learncoder_156_20549",
+            "learncoder_156_20548",
+            "learncoder_155_22012",
+            "learncoder_155_22011",
+            "learncoder_155_22010",
+            "learncoder_155_22009",
+            "learncoder_155_22008",
+            "learncoder_155_22007",
+            "learncoder_155_22006",
+            "learncoder_155_22004",
+            "learncoder_155_22003",
+            "learncoder_155_22002",
+            "learncoder_155_22001",
+            "learncoder_155_22000",
+            "learncoder_155_21999",
+            "learncoder_155_21998",
+            "learncoder_155_21997",
+            "learncoder_155_21996",
+            "learncoder_155_21420",
+            "learncoder_155_21419",
+            "learncoder_155_21418",
+            "learncoder_155_21417",
+            "learncoder_155_21416",
+            "learncoder_155_21415",
+            "learncoder_155_21414",
+            "learncoder_155_21413",
+            "learncoder_155_21412",
+            "learncoder_155_21411",
+            "learncoder_155_21410",
+            "learncoder_155_21409",
+            "learncoder_155_21408",
+            "learncoder_155_21405",
+            "learncoder_155_21404",
+            "learncoder_155_21403",
+            "learncoder_155_21402",
+            "learncoder_155_21401",
+            "learncoder_155_21400",
+            "learncoder_155_21399",
+            "learncoder_155_21398",
+            "learncoder_155_21397",
+            "learncoder_155_21396",
+            "learncoder_155_21395",
+            "learncoder_155_21394",
+            "learncoder_155_21393",
+            "learncoder_155_21392",
+            "learncoder_155_21391",
+            "learncoder_155_21390",
+            "learncoder_155_21389",
+            "learncoder_155_21388",
+            "learncoder_155_21387",
+            "learncoder_155_21386",
+            "learncoder_155_21385",
+            "learncoder_155_21384",
+            "learncoder_155_21383",
+            "learncoder_155_21382",
+            "learncoder_155_21381",
+            "learncoder_155_21380",
+            "learncoder_155_21379",
+            "learncoder_155_21378",
+            "learncoder_155_21377",
+            "learncoder_155_21376",
+            "learncoder_155_21375",
+            "learncoder_155_21374",
+            "learncoder_154_21837",
+            "learncoder_154_21836",
+            "learncoder_154_21835",
+            "learncoder_154_21834",
+            "learncoder_154_21833",
+            "learncoder_154_21832",
+            "learncoder_154_21831",
+            "learncoder_154_21830",
+            "learncoder_154_21829",
+            "learncoder_154_21828",
+            "learncoder_154_21827",
+            "learncoder_154_21826",
+            "learncoder_154_21825",
+            "learncoder_154_21824",
+            "learncoder_154_21823",
+            "learncoder_154_21822",
+            "learncoder_154_21821",
+            "learncoder_154_21820",
+            "learncoder_154_21819",
+            "learncoder_154_21818",
+            "learncoder_154_21817",
+            "learncoder_154_21816",
+            "learncoder_154_21815",
+            "learncoder_154_21814",
+            "learncoder_154_21813",
+            "learncoder_154_21812",
+            "learncoder_154_21811",
+            "learncoder_154_21810",
+            "learncoder_154_21809",
+            "learncoder_154_21808",
+            "learncoder_154_20360",
+            "learncoder_154_20359",
+            "learncoder_154_20358",
+            "learncoder_154_20357",
+            "learncoder_154_20356",
+            "learncoder_154_20355",
+            "learncoder_154_20354",
+            "learncoder_154_20353",
+            "learncoder_154_20352",
+            "learncoder_154_20350",
+            "learncoder_154_20349",
+            "learncoder_154_20348",
+            "learncoder_154_20347",
+            "learncoder_154_20346",
+            "learncoder_154_20345",
+            "learncoder_154_20344",
+            "learncoder_154_20343",
+            "learncoder_154_20342",
+            "learncoder_154_20341",
+            "learncoder_154_20340",
+            "learncoder_154_20339",
+            "learncoder_154_20338",
+            "learncoder_154_20337",
+            "learncoder_154_20336",
+            "learncoder_154_20335",
+            "learncoder_154_20334",
+            "learncoder_154_20333",
+            "learncoder_154_20332",
+            "learncoder_154_20331",
+            "learncoder_154_20330",
+            "learncoder_154_20329",
+            "learncoder_154_20328",
+            "learncoder_154_20327",
+            "learncoder_154_20326",
+            "learncoder_154_20325",
+            "learncoder_154_20324",
+            "learncoder_154_20323",
+            "learncoder_154_20322",
+            "learncoder_154_20321",
+            "learncoder_154_20320",
+            "learncoder_153_17431",
+            "learncoder_153_17430",
+            "learncoder_153_17427",
+            "learncoder_153_17426",
+            "learncoder_153_17425",
+            "learncoder_153_17424",
+            "learncoder_153_17423",
+            "learncoder_153_17422",
+            "learncoder_153_17421",
+            "learncoder_153_17420",
+            "learncoder_153_17419",
+            "learncoder_153_17418",
+            "learncoder_153_17417",
+            "learncoder_153_17416",
+            "learncoder_153_17415",
+            "learncoder_152_16959",
+            "learncoder_152_16958",
+            "learncoder_152_16957",
+            "learncoder_152_16956",
+            "learncoder_152_16955",
+            "learncoder_152_16954",
+            "learncoder_152_16953",
+            "learncoder_152_16952",
+            "learncoder_152_16951",
+            "learncoder_152_16950",
+            "learncoder_152_16949",
+            "learncoder_152_16948",
+            "learncoder_152_16947",
+            "learncoder_152_16946",
+            "learncoder_152_16945",
+            "learncoder_152_16944",
+            "learncoder_152_16943",
+            "learncoder_152_16942",
+            "learncoder_152_16941",
+            "learncoder_152_16940",
+            "learncoder_152_16939",
+            "learncoder_152_16938",
+            "learncoder_152_16937",
+            "learncoder_152_16936",
+            "learncoder_152_16935",
+            "learncoder_152_16934",
+            "learncoder_152_16933",
+            "learncoder_152_16932",
+            "learncoder_152_16931",
+            "learncoder_152_16930",
+            "learncoder_152_16929",
+            "learncoder_152_16928",
+            "learncoder_152_16927",
+            "learncoder_152_16926",
+            "learncoder_152_16925",
+            "learncoder_152_16924",
+            "learncoder_151_16923",
+            "learncoder_151_16922",
+            "learncoder_151_16921",
+            "learncoder_151_16920",
+            "learncoder_151_16919",
+            "learncoder_151_16918",
+            "learncoder_151_16917",
+            "learncoder_151_16916",
+            "learncoder_151_16915",
+            "learncoder_151_16914",
+            "learncoder_151_16913",
+            "learncoder_151_16912",
+            "learncoder_151_16911",
+            "learncoder_151_16910",
+            "learncoder_151_16909",
+            "learncoder_151_16908",
+            "learncoder_151_16907",
+            "learncoder_151_16906",
+            "learncoder_151_16905",
+            "learncoder_151_16904",
+            "learncoder_151_16903",
+            "learncoder_151_16902",
+            "learncoder_151_16901",
+            "learncoder_151_16900",
+            "learncoder_151_16899",
+            "learncoder_151_16898",
+            "learncoder_151_16897",
+            "learncoder_151_16896",
+            "learncoder_151_16895",
+            "learncoder_151_16894",
+            "learncoder_151_16893",
+            "learncoder_151_16892",
+            "learncoder_151_16891",
+            "learncoder_151_16890",
+            "learncoder_151_16889",
+            "learncoder_151_16888",
+            "learncoder_151_16887",
+            "learncoder_151_16886",
+            "learncoder_151_16885",
+            "learncoder_151_16884",
+            "learncoder_151_16883",
+            "learncoder_151_16882",
+            "learncoder_151_16881",
+            "learncoder_151_16880",
+            "learncoder_151_16879",
+            "learncoder_151_16878",
+            "learncoder_151_16877",
+            "learncoder_151_16876",
+            "learncoder_151_16875",
+            "learncoder_151_16874",
+            "learncoder_151_16873",
+            "learncoder_151_16872",
+            "learncoder_151_16871",
+            "learncoder_151_16870",
+            "learncoder_151_16869",
+            "learncoder_151_16868",
+            "learncoder_151_16867",
+            "learncoder_151_16866",
+            "learncoder_151_16865",
+            "learncoder_151_16864",
+            "learncoder_151_16863",
+            "learncoder_151_16862",
+            "learncoder_151_16861",
+            "learncoder_151_16860",
+            "learncoder_151_16859",
+            "learncoder_151_16858",
+            "learncoder_151_16857",
+            "learncoder_151_16856",
+            "learncoder_151_16855",
+            "learncoder_151_16854",
+            "learncoder_151_16853",
+            "learncoder_151_16852",
+            "learncoder_151_16851",
+            "learncoder_151_16850",
+            "learncoder_151_16849",
+            "learncoder_151_16848",
+            "learncoder_151_16847",
+            "learncoder_151_16846",
+            "learncoder_151_16845",
+            "learncoder_151_16844",
+            "learncoder_151_16843",
+            "learncoder_151_16842",
+            "learncoder_151_16841",
+            "learncoder_151_16840",
+            "learncoder_151_16839",
+            "learncoder_151_16838",
+            "learncoder_151_16837",
+            "learncoder_151_16836",
+            "learncoder_151_16835",
+            "learncoder_151_16834",
+            "learncoder_151_16833",
+            "learncoder_151_16832",
+            "learncoder_151_16831",
+            "learncoder_151_16830",
+            "learncoder_151_16829",
+            "learncoder_151_16828",
+            "learncoder_151_16827",
+            "learncoder_151_16826",
+            "learncoder_151_16825",
+            "learncoder_150_16387",
+            "learncoder_150_16386",
+            "learncoder_150_16385",
+            "learncoder_150_16384",
+            "learncoder_150_16383",
+            "learncoder_150_16382",
+            "learncoder_150_16381",
+            "learncoder_150_16380",
+            "learncoder_150_16379",
+            "learncoder_150_16378",
+            "learncoder_150_16377",
+            "learncoder_150_16376",
+            "learncoder_149_16132",
+            "learncoder_149_16131",
+            "learncoder_149_16130",
+            "learncoder_149_16129",
+            "learncoder_149_16128",
+            "learncoder_149_16127",
+            "learncoder_149_16126",
+            "learncoder_149_16125",
+            "learncoder_149_16124",
+            "learncoder_149_16123",
+            "learncoder_149_16122",
+            "learncoder_149_16121",
+            "learncoder_149_16120",
+            "learncoder_149_16119",
+            "learncoder_149_16118",
+            "learncoder_149_16117",
+            "learncoder_149_16116",
+            "learncoder_149_16115",
+            "learncoder_149_16114",
+            "learncoder_149_16113",
+            "learncoder_149_16112",
+            "learncoder_149_16111",
+            "learncoder_149_16110",
+            "learncoder_149_16109",
+            "learncoder_149_16108",
+            "learncoder_149_16107",
+            "learncoder_149_16106",
+            "learncoder_149_16105",
+            "learncoder_149_16104",
+            "learncoder_149_16103",
+            "learncoder_149_16102",
+            "learncoder_149_16101",
+            "learncoder_149_16100",
+            "learncoder_149_16099",
+            "learncoder_149_16098",
+            "learncoder_149_16097",
+            "learncoder_149_16096",
+            "learncoder_149_16095",
+            "learncoder_149_16094",
+            "learncoder_149_16093",
+            "learncoder_149_16092",
+            "learncoder_149_16091",
+            "learncoder_149_16090",
+            "learncoder_149_16089",
+            "learncoder_149_16088",
+            "learncoder_149_16087",
+            "learncoder_149_16086",
+            "learncoder_149_16085",
+            "learncoder_149_16084",
+            "learncoder_149_16082",
+            "learncoder_149_16081",
+            "learncoder_149_16080",
+            "learncoder_149_16079",
+            "learncoder_149_16078",
+            "learncoder_149_16077",
+            "learncoder_149_16076",
+            "learncoder_149_16075",
+            "learncoder_149_16074",
+            "learncoder_149_16073",
+            "learncoder_149_16072",
+            "learncoder_149_16071",
+            "learncoder_149_16070",
+            "learncoder_149_16069",
+            "learncoder_149_16068",
+            "learncoder_149_16067",
+            "learncoder_149_16066",
+            "learncoder_149_16065",
+            "learncoder_149_16064",
+            "learncoder_149_16063",
+            "learncoder_149_16062",
+            "learncoder_149_16061",
+            "learncoder_149_16060",
+            "learncoder_149_16059",
+            "learncoder_149_16058",
+            "learncoder_149_16057",
+            "learncoder_149_16056",
+            "learncoder_149_16055",
+            "learncoder_149_16054",
+            "learncoder_149_16053",
+            "learncoder_149_16052",
+            "learncoder_149_16051",
+            "learncoder_149_16050",
+            "learncoder_149_16049",
+            "learncoder_149_16048",
+            "learncoder_149_16047",
+            "learncoder_149_16046",
+            "learncoder_149_16045",
+            "learncoder_149_16044",
+            "learncoder_149_16043",
+            "learncoder_149_16042",
+            "learncoder_149_16041",
+            "learncoder_149_16040",
+            "learncoder_149_16039",
+            "learncoder_149_16038",
+            "learncoder_149_16037",
+            "learncoder_149_16036",
+            "learncoder_149_16035",
+            "learncoder_149_16034",
+            "learncoder_149_16033",
+            "learncoder_149_16032",
+            "learncoder_149_16031",
+            "learncoder_149_16030",
+            "learncoder_149_16028",
+            "learncoder_149_16027",
+            "learncoder_149_16026",
+            "learncoder_149_16025",
+            "learncoder_149_16024",
+            "learncoder_149_16023",
+            "learncoder_149_16022",
+            "learncoder_149_16021",
+            "learncoder_149_16020",
+            "learncoder_149_16019",
+            "learncoder_149_16018",
+            "learncoder_149_16017",
+            "learncoder_149_16016",
+            "learncoder_149_16015",
+            "learncoder_149_16014",
+            "learncoder_149_16013",
+            "learncoder_149_16012",
+            "learncoder_149_16011",
+            "learncoder_149_16010",
+            "learncoder_149_16009",
+            "learncoder_149_16008",
+            "learncoder_149_16007",
+            "learncoder_149_16006",
+            "learncoder_149_16005",
+            "learncoder_149_16004",
+            "learncoder_149_16003",
+            "learncoder_149_16002",
+            "learncoder_149_16001",
+            "learncoder_149_16000",
+            "learncoder_149_15999",
+            "learncoder_149_15998",
+            "learncoder_149_15997",
+            "learncoder_149_15996",
+            "learncoder_149_15995",
+            "learncoder_149_15994",
+            "learncoder_149_15993",
+            "learncoder_149_15992",
+            "learncoder_148_17567",
+            "learncoder_148_17566",
+            "learncoder_148_17565",
+            "learncoder_148_17564",
+            "learncoder_148_17563",
+            "learncoder_148_17560",
+            "learncoder_148_17559",
+            "learncoder_148_17558",
+            "learncoder_148_17557",
+            "learncoder_148_17556",
+            "learncoder_148_17555",
+            "learncoder_148_17554",
+            "learncoder_148_17553",
+            "learncoder_148_17552",
+            "learncoder_148_17551",
+            "learncoder_148_17550",
+            "learncoder_148_17549",
+            "learncoder_148_15991",
+            "learncoder_148_15990",
+            "learncoder_148_15989",
+            "learncoder_148_15988",
+            "learncoder_148_15987",
+            "learncoder_148_15986",
+            "learncoder_148_15985",
+            "learncoder_148_15984",
+            "learncoder_148_15983",
+            "learncoder_148_15982",
+            "learncoder_148_15981",
+            "learncoder_148_15980",
+            "learncoder_148_15979",
+            "learncoder_148_15978",
+            "learncoder_148_15977",
+            "learncoder_148_15976",
+            "learncoder_148_15975",
+            "learncoder_148_15974",
+            "learncoder_148_15973",
+            "learncoder_148_15972",
+            "learncoder_148_15971",
+            "learncoder_148_15970",
+            "learncoder_148_15969",
+            "learncoder_148_15968",
+            "learncoder_148_15967",
+            "learncoder_148_15966",
+            "learncoder_148_15965",
+            "learncoder_148_15964",
+            "learncoder_148_15963",
+            "learncoder_148_15962",
+            "learncoder_148_15961",
+            "learncoder_148_15960",
+            "learncoder_148_15959",
+            "learncoder_148_15958",
+            "learncoder_148_15957",
+            "learncoder_148_15956",
+            "learncoder_148_15955",
+            "learncoder_148_15954",
+            "learncoder_148_15953",
+            "learncoder_148_15952",
+            "learncoder_148_15951",
+            "learncoder_148_15950",
+            "learncoder_148_15949",
+            "learncoder_148_15948",
+            "learncoder_148_15947",
+            "learncoder_148_15946",
+            "learncoder_148_15945",
+            "learncoder_148_15944",
+            "learncoder_148_15943",
+            "learncoder_148_15942",
+            "learncoder_148_15941",
+            "learncoder_148_15940",
+            "learncoder_148_15939",
+            "learncoder_148_15938",
+            "learncoder_148_15937",
+            "learncoder_148_15936",
+            "learncoder_148_15935",
+            "learncoder_148_15934",
+            "learncoder_148_15933",
+            "learncoder_148_15932",
+            "learncoder_148_15931",
+            "learncoder_148_15930",
+            "learncoder_148_15929",
+            "learncoder_148_15928",
+            "learncoder_148_15927",
+            "learncoder_148_15926",
+            "learncoder_129_12867",
+            "learncoder_129_12866",
+            "learncoder_129_12865",
+            "learncoder_129_12864",
+            "learncoder_129_12863",
+            "learncoder_129_12862",
+            "learncoder_129_12861",
+            "learncoder_129_12860",
+            "learncoder_129_12859",
+            "learncoder_129_12858",
+            "learncoder_129_12857",
+            "learncoder_129_12856",
+            "learncoder_129_12855",
+            "learncoder_129_12854",
+            "learncoder_129_12853",
+            "learncoder_129_12852",
+            "learncoder_129_12851",
+            "learncoder_129_12850",
+            "learncoder_129_12849",
+            "learncoder_129_12848",
+            "learncoder_129_12847",
+            "learncoder_129_12846",
+            "learncoder_129_12845",
+            "learncoder_129_12844",
+            "learncoder_129_12843",
+            "learncoder_129_12842",
+            "learncoder_129_12841",
+            "learncoder_129_12840",
+            "learncoder_129_12839",
+            "learncoder_129_12838",
+            "learncoder_129_12837",
+            "learncoder_129_12836",
+            "learncoder_129_12835",
+            "learncoder_129_12834",
+            "learncoder_129_12833",
+            "learncoder_129_12832",
+            "learncoder_129_12831",
+            "learncoder_129_12830",
+            "learncoder_129_12829",
+            "learncoder_129_12828",
+            "learncoder_129_12827",
+            "learncoder_129_12826",
+            "learncoder_129_12825",
+            "learncoder_129_12824",
+            "learncoder_129_12823",
+            "learncoder_129_12822",
+            "learncoder_129_12821",
+            "learncoder_129_12820",
+            "learncoder_129_12819",
+            "learncoder_129_12818",
+            "learncoder_129_12817",
+            "learncoder_129_12816",
+            "learncoder_129_12815",
+            "learncoder_129_12814",
+            "learncoder_129_12813",
+            "learncoder_129_12812",
+            "learncoder_129_12811",
+            "learncoder_129_12810",
+            "learncoder_129_12809",
+            "learncoder_129_12808",
+            "learncoder_129_12807",
+            "learncoder_129_12806",
+            "learncoder_129_12805",
+            "learncoder_129_12804",
+            "learncoder_129_12803",
+            "learncoder_129_12802",
+            "learncoder_129_12801",
+            "learncoder_129_12800",
+            "learncoder_129_12799",
+            "learncoder_129_12798",
+            "learncoder_129_12797",
+            "learncoder_129_12796",
+            "learncoder_129_12795",
+            "learncoder_129_12794",
+            "learncoder_129_12793",
+            "learncoder_129_12792",
+            "learncoder_129_12791",
+            "learncoder_129_12790",
+            "learncoder_129_12789",
+            "learncoder_129_12788",
+            "learncoder_129_12787",
+            "learncoder_129_12786",
+            "learncoder_129_12785",
+            "learncoder_129_12784",
+            "learncoder_129_12783",
+            "learncoder_129_12782",
+            "learncoder_129_12781",
+            "learncoder_129_12780",
+            "learncoder_129_12779",
+            "learncoder_129_12778",
+            "learncoder_129_12777",
+            "learncoder_129_12776",
+            "learncoder_129_12775",
+            "learncoder_129_12774",
+            "learncoder_129_12773",
+            "learncoder_129_12772",
+            "learncoder_129_12771",
+            "learncoder_129_12770",
+            "learncoder_129_12769",
+            "learncoder_129_12768",
+            "learncoder_129_12767",
+            "learncoder_129_12766",
+            "learncoder_129_12765",
+            "learncoder_129_12764",
+            "learncoder_129_12763",
+            "learncoder_129_12762",
+            "learncoder_129_12761",
+            "learncoder_129_12760",
+            "learncoder_129_12759",
+            "learncoder_129_12758",
+            "learncoder_129_12757",
+            "learncoder_129_12756",
+            "learncoder_129_12755",
+            "learncoder_129_12754",
+            "learncoder_129_12753",
+            "learncoder_129_12752",
+            "learncoder_129_12751",
+            "learncoder_129_12750",
+            "learncoder_129_12749",
+            "learncoder_129_12748",
+            "learncoder_129_12747",
+            "learncoder_129_12746",
+            "learncoder_129_12745",
+            "learncoder_129_12744",
+            "learncoder_129_12743",
+            "learncoder_129_12742",
+            "learncoder_129_12741",
+            "learncoder_129_12740",
+            "learncoder_129_12739",
+            "learncoder_129_12738",
+            "learncoder_129_12737",
+            "learncoder_129_12736",
+            "learncoder_129_12735",
+            "learncoder_129_12734",
+            "learncoder_129_12733",
+            "learncoder_129_12732",
+            "learncoder_129_12731",
+            "learncoder_129_12730",
+            "learncoder_129_12729",
+            "learncoder_129_12728",
+            "learncoder_129_12727",
+            "learncoder_129_12726",
+            "learncoder_129_12725",
+            "learncoder_129_12724",
+            "learncoder_129_12723",
+            "learncoder_129_12722",
+            "learncoder_129_12721",
+            "learncoder_129_12720",
+            "learncoder_129_12719",
+            "learncoder_129_12718",
+            "learncoder_129_12717",
+            "learncoder_129_12716",
+            "learncoder_128_7764",
+            "learncoder_128_7763",
+            "learncoder_128_7762",
+            "learncoder_128_7761",
+            "learncoder_128_7760",
+            "learncoder_128_7759",
+            "learncoder_128_7758",
+            "learncoder_128_7757",
+            "learncoder_128_7756",
+            "learncoder_128_7755",
+            "learncoder_128_7754",
+            "learncoder_128_7753",
+            "learncoder_128_7752",
+            "learncoder_128_7751",
+            "learncoder_128_7750",
+            "learncoder_128_7749",
+            "learncoder_128_7748",
+            "learncoder_128_7747",
+            "learncoder_128_7746",
+            "learncoder_128_7745",
+            "learncoder_128_7744",
+            "learncoder_128_7743",
+            "learncoder_128_7742",
+            "learncoder_128_7741",
+            "learncoder_128_7740",
+            "learncoder_128_7739",
+            "learncoder_128_7738",
+            "learncoder_128_7737",
+            "learncoder_128_7736",
+            "learncoder_128_7735",
+            "learncoder_128_7734",
+            "learncoder_128_7733",
+            "learncoder_128_7732",
+            "learncoder_128_7731",
+            "learncoder_128_7730",
+            "learncoder_128_7729",
+            "learncoder_128_7728",
+            "learncoder_128_7727",
+            "learncoder_128_7726",
+            "learncoder_128_7725",
+            "learncoder_128_7724",
+            "learncoder_128_7723",
+            "learncoder_128_7722",
+            "learncoder_128_7721",
+            "learncoder_128_7720",
+            "learncoder_128_7719",
+            "learncoder_128_7718",
+            "learncoder_128_7717",
+            "learncoder_128_7716",
+            "learncoder_128_7715",
+            "learncoder_128_7714",
+            "learncoder_128_7713",
+            "learncoder_128_7712",
+            "learncoder_128_7711",
+            "learncoder_127_2536",
+            "learncoder_127_2535",
+            "learncoder_127_2534",
+            "learncoder_127_2533",
+            "learncoder_127_2532",
+            "learncoder_127_2531",
+            "learncoder_127_2530",
+            "learncoder_127_2529",
+            "learncoder_127_2528",
+            "learncoder_127_2527",
+            "learncoder_127_2526",
+            "learncoder_127_2525",
+            "learncoder_127_2524",
+            "learncoder_127_2523",
+            "learncoder_127_2522",
+            "learncoder_127_2521",
+            "learncoder_127_2520",
+            "learncoder_127_2519",
+            "learncoder_127_2518",
+            "learncoder_127_2517",
+            "learncoder_127_2516",
+            "learncoder_127_2515",
+            "learncoder_127_2514",
+            "learncoder_127_2513",
+            "learncoder_127_2512",
+            "learncoder_127_2511",
+            "learncoder_127_2510",
+            "learncoder_127_2509",
+            "learncoder_127_2508",
+            "learncoder_127_2507",
+            "learncoder_127_2506",
+            "learncoder_127_2505",
+            "learncoder_127_2504",
+            "learncoder_127_2503",
+            "learncoder_127_2502",
+            "learncoder_127_2501",
+            "learncoder_126_7710",
+            "learncoder_126_7709",
+            "learncoder_126_7708",
+            "learncoder_126_7707",
+            "learncoder_126_7706",
+            "learncoder_126_7705",
+            "learncoder_126_7704",
+            "learncoder_126_7703",
+            "learncoder_126_7702",
+            "learncoder_126_7701",
+            "learncoder_126_7700",
+            "learncoder_126_7699",
+            "learncoder_126_7698",
+            "learncoder_126_7697",
+            "learncoder_126_7696",
+            "learncoder_126_7695",
+            "learncoder_126_7694",
+            "learncoder_126_7693",
+            "learncoder_126_7692",
+            "learncoder_126_7691",
+            "learncoder_126_7690",
+            "learncoder_126_7689",
+            "learncoder_126_7688",
+            "learncoder_126_7687",
+            "learncoder_126_7686",
+            "learncoder_126_7685",
+            "learncoder_126_7684",
+            "learncoder_126_7683",
+            "learncoder_126_7682",
+            "learncoder_126_7681",
+            "learncoder_126_7680",
+            "learncoder_126_7679",
+            "learncoder_126_7678",
+            "learncoder_126_7677",
+            "learncoder_126_7676",
+            "learncoder_126_7675",
+            "learncoder_125_7518",
+            "learncoder_125_7517",
+            "learncoder_125_7516",
+            "learncoder_125_7515",
+            "learncoder_125_7514",
+            "learncoder_125_7513",
+            "learncoder_125_7512",
+            "learncoder_125_7511",
+            "learncoder_125_7510",
+            "learncoder_125_7509",
+            "learncoder_125_7508",
+            "learncoder_125_7507",
+            "learncoder_125_7506",
+            "learncoder_125_7505",
+            "learncoder_125_7504",
+            "learncoder_125_7503",
+            "learncoder_125_7502",
+            "learncoder_125_7501",
+            "learncoder_125_7500",
+            "learncoder_125_7499",
+            "learncoder_125_7498",
+            "learncoder_125_7497",
+            "learncoder_125_7496",
+            "learncoder_125_7495",
+            "learncoder_125_7494",
+            "learncoder_125_7493",
+            "learncoder_125_7492",
+            "learncoder_125_7491",
+            "learncoder_125_7490",
+            "learncoder_125_7489",
+            "learncoder_125_7488",
+            "learncoder_125_7487",
+            "learncoder_125_7486",
+            "learncoder_125_7485",
+            "learncoder_125_7484",
+            "learncoder_125_7483",
+            "learncoder_125_7482",
+            "learncoder_125_7481",
+            "learncoder_125_7480",
+            "learncoder_125_7479",
+            "learncoder_125_7478",
+            "learncoder_125_7477",
+            "learncoder_125_7476",
+            "learncoder_125_7475",
+            "learncoder_125_7474",
+            "learncoder_125_7473",
+            "learncoder_125_7472",
+            "learncoder_125_7471",
+            "learncoder_125_7470",
+            "learncoder_125_7469",
+            "learncoder_125_7468",
+            "learncoder_125_7467",
+            "learncoder_125_7466",
+            "learncoder_125_7465",
+            "learncoder_125_7464",
+            "learncoder_125_7463",
+            "learncoder_125_7462",
+            "learncoder_125_7461",
+            "learncoder_125_7460",
+            "learncoder_125_7459",
+            "learncoder_125_7458",
+            "learncoder_125_7457",
+            "learncoder_125_7456",
+            "learncoder_125_7455",
+            "learncoder_125_7454",
+            "learncoder_125_7453",
+            "learncoder_125_7452",
+            "learncoder_125_7451",
+            "learncoder_125_7450",
+            "learncoder_125_7449",
+            "learncoder_125_7448",
+            "learncoder_125_7447",
+            "learncoder_125_7446",
+            "learncoder_125_7445",
+            "learncoder_125_7444",
+            "learncoder_125_7443",
+            "learncoder_125_21728",
+            "learncoder_125_21727",
+            "learncoder_125_21726",
+            "learncoder_125_21725",
+            "learncoder_125_21723",
+            "learncoder_125_21722",
+            "learncoder_125_21721",
+            "learncoder_125_21720",
+            "learncoder_125_21719",
+            "learncoder_125_21718",
+            "learncoder_125_21717",
+            "learncoder_125_21716",
+            "learncoder_125_21715",
+            "learncoder_125_21714",
+            "learncoder_125_21713",
+            "learncoder_125_21712",
+            "learncoder_125_21711",
+            "learncoder_125_21710",
+            "learncoder_125_21709",
+            "learncoder_125_21708",
+            "learncoder_125_21707",
+            "learncoder_125_21706",
+            "learncoder_125_21705",
+            "learncoder_125_21704",
+            "learncoder_125_21703",
+            "learncoder_125_21702",
+            "learncoder_125_21701",
+            "learncoder_125_21700",
+            "learncoder_125_21699",
+            "learncoder_125_19841",
+            "learncoder_125_19840",
+            "learncoder_125_19839",
+            "learncoder_125_19837",
+            "learncoder_125_19836",
+            "learncoder_125_19835",
+            "learncoder_125_19834",
+            "learncoder_125_19833",
+            "learncoder_125_19832",
+            "learncoder_125_19831",
+            "learncoder_125_19830",
+            "learncoder_125_19829",
+            "learncoder_125_19828",
+            "learncoder_125_19827",
+            "learncoder_125_19826",
+            "learncoder_125_19825",
+            "learncoder_125_19824",
+            "learncoder_125_19823",
+            "learncoder_125_19822",
+            "learncoder_125_19821",
+            "learncoder_125_19820",
+            "learncoder_125_19819",
+            "learncoder_125_19818",
+            "learncoder_125_19817",
+            "learncoder_125_19816",
+            "learncoder_125_19815",
+            "learncoder_125_19814",
+            "learncoder_125_19813",
+            "learncoder_125_19812",
+            "learncoder_125_19811",
+            "learncoder_125_19810",
+            "learncoder_125_19809",
+            "learncoder_125_19808",
+            "learncoder_125_19807",
+            "learncoder_122_5638",
+            "learncoder_122_5637",
+            "learncoder_122_5636",
+            "learncoder_122_5635",
+            "learncoder_122_5634",
+            "learncoder_122_5633",
+            "learncoder_122_5632",
+            "learncoder_122_5631",
+            "learncoder_122_5630",
+            "learncoder_122_5629",
+            "learncoder_122_5628",
+            "learncoder_122_5627",
+            "learncoder_122_5626",
+            "learncoder_122_5625",
+            "learncoder_122_5624",
+            "learncoder_122_5623",
+            "learncoder_122_5622",
+            "learncoder_122_5621",
+            "learncoder_122_5620",
+            "learncoder_122_5619",
+            "learncoder_122_5618",
+            "learncoder_122_5617",
+            "learncoder_122_5616",
+            "learncoder_122_5615",
+            "learncoder_122_5614",
+            "learncoder_122_5613",
+            "learncoder_122_5612",
+            "learncoder_122_5611",
+            "learncoder_122_5610",
+            "learncoder_122_5604",
+            "learncoder_122_5603",
+            "learncoder_122_5602",
+            "learncoder_122_5601",
+            "learncoder_122_5600",
+            "learncoder_122_5599",
+            "learncoder_122_5598",
+            "learncoder_122_5597",
+            "learncoder_122_5596",
+            "learncoder_99_487",
+            "learncoder_99_486",
+            "learncoder_99_485",
+            "learncoder_99_484",
+            "learncoder_99_483",
+            "learncoder_99_482",
+            "learncoder_99_480",
+            "learncoder_99_478",
+            "learncoder_99_477",
+            "learncoder_99_476",
+            "learncoder_99_475",
+            "learncoder_99_474",
+            "learncoder_99_473",
+            "learncoder_99_472",
+            "learncoder_99_469",
+            "learncoder_99_468",
+            "learncoder_99_23198",
+            "learncoder_99_23197",
+            "learncoder_99_23196",
+            "learncoder_99_23195",
+            "learncoder_99_23192",
+            "learncoder_99_23191",
+            "learncoder_99_23190",
+            "learncoder_99_23189",
+            "learncoder_99_23188",
+            "learncoder_99_23187",
+            "learncoder_99_23186",
+            "learncoder_99_23185",
+            "learncoder_99_23184",
+            "learncoder_99_23183",
+            "learncoder_99_23182",
+            "learncoder_99_23181",
+            "learncoder_99_23180",
+            "learncoder_99_23179",
+            "learncoder_99_23178",
+            "learncoder_99_23177",
+            "learncoder_99_23176",
+            "learncoder_99_23175",
+            "learncoder_99_23174",
+            "learncoder_99_23173",
+            "learncoder_99_23172",
+            "learncoder_99_23171",
+            "learncoder_99_23170",
+            "learncoder_99_23169",
+            "learncoder_99_23168",
+            "learncoder_99_23167",
+            "learncoder_99_23166",
+            "learncoder_99_23165",
+            "learncoder_99_23164",
+            "learncoder_99_23163",
+            "learncoder_99_23162",
+            "learncoder_99_23161",
+            "learncoder_99_23160",
+            "learncoder_99_23159",
+            "learncoder_99_23158",
+            "learncoder_99_23157",
+            "learncoder_99_23156",
+            "learncoder_99_23155",
+            "learncoder_99_23154",
+            "learncoder_99_23153",
+            "learncoder_99_23152",
+            "learncoder_99_23151",
+            "learncoder_99_23150",
+            "learncoder_99_19211",
+            "learncoder_99_19210",
+            "learncoder_99_19209",
+            "learncoder_99_19208",
+            "learncoder_99_19207",
+            "learncoder_99_19206",
+            "learncoder_99_19205",
+            "learncoder_99_19204",
+            "learncoder_99_19203",
+            "learncoder_99_19202",
+            "learncoder_99_19201",
+            "learncoder_99_19200",
+            "learncoder_99_19199",
+            "learncoder_99_19196",
+            "learncoder_99_19195",
+            "learncoder_99_19194",
+            "learncoder_99_19193",
+            "learncoder_99_19192",
+            "learncoder_99_19191",
+            "learncoder_99_19190",
+            "learncoder_99_19189",
+            "learncoder_99_19188",
+            "learncoder_99_19187",
+            "learncoder_99_19186",
+            "learncoder_99_19185",
+            "learncoder_98_2562",
+            "learncoder_98_2561",
+            "learncoder_98_2560",
+            "learncoder_98_2559",
+            "learncoder_98_2558",
+            "learncoder_98_2557",
+            "learncoder_98_2556",
+            "learncoder_98_2555",
+            "learncoder_98_2554",
+            "learncoder_98_2553",
+            "learncoder_98_2552",
+            "learncoder_98_2551",
+            "learncoder_98_2550",
+            "learncoder_98_2549",
+            "learncoder_98_2548",
+            "learncoder_98_2547",
+            "learncoder_98_2546",
+            "learncoder_98_2545",
+            "learncoder_98_2544",
+            "learncoder_98_2543",
+            "learncoder_98_2542",
+            "learncoder_98_2541",
+            "learncoder_98_2540",
+            "learncoder_98_2539",
+            "learncoder_98_2538",
+            "learncoder_98_2537",
+            "learncoder_97_8383",
+            "learncoder_97_8382",
+            "learncoder_97_8381",
+            "learncoder_97_8380",
+            "learncoder_97_8379",
+            "learncoder_97_8378",
+            "learncoder_97_8377",
+            "learncoder_97_8376",
+            "learncoder_97_8375",
+            "learncoder_97_8372",
+            "learncoder_97_8371",
+            "learncoder_97_8370",
+            "learncoder_97_8369",
+            "learncoder_97_8368",
+            "learncoder_97_8367",
+            "learncoder_97_8366",
+            "learncoder_97_8365",
+            "learncoder_97_8364",
+            "learncoder_97_8363",
+            "learncoder_97_8362",
+            "learncoder_97_8361",
+            "learncoder_97_8360",
+            "learncoder_97_8359",
+            "learncoder_97_8358",
+            "learncoder_97_8357",
+            "learncoder_97_8356",
+            "learncoder_97_8355",
+            "learncoder_97_8354",
+            "learncoder_97_8353",
+            "learncoder_97_8352",
+            "learncoder_97_8351",
+            "learncoder_97_8350",
+            "learncoder_97_8349",
+            "learncoder_97_8348",
+            "learncoder_97_8347",
+            "learncoder_97_8346",
+            "learncoder_97_8345",
+            "learncoder_97_8344",
+            "learncoder_97_8343",
+            "learncoder_97_8342",
+            "learncoder_97_8341",
+            "learncoder_97_8340",
+            "learncoder_97_8339",
+            "learncoder_97_8338",
+            "learncoder_97_8337",
+            "learncoder_97_8336",
+            "learncoder_97_8335",
+            "learncoder_97_8334",
+            "learncoder_97_8333",
+            "learncoder_97_8332",
+            "learncoder_97_8331",
+            "learncoder_97_8330",
+            "learncoder_97_8329",
+            "learncoder_97_8328",
+            "learncoder_97_8327",
+            "learncoder_97_8326",
+            "learncoder_97_8325",
+            "learncoder_97_8324",
+            "learncoder_97_8323",
+            "learncoder_97_8322",
+            "learncoder_97_8321",
+            "learncoder_97_8320",
+            "learncoder_97_8319",
+            "learncoder_97_8318",
+            "learncoder_97_8317",
+            "learncoder_95_2480",
+            "learncoder_95_2479",
+            "learncoder_95_2478",
+            "learncoder_95_2477",
+            "learncoder_95_2476",
+            "learncoder_95_2475",
+            "learncoder_95_2474",
+            "learncoder_95_2473",
+            "learncoder_95_2472",
+            "learncoder_95_2471",
+            "learncoder_95_2470",
+            "learncoder_95_2469",
+            "learncoder_95_2468",
+            "learncoder_122_5595",
+            "learncoder_122_5594",
+            "learncoder_122_22024",
+            "learncoder_122_22023",
+            "learncoder_122_22022",
+            "learncoder_122_22021",
+            "learncoder_122_22020",
+            "learncoder_122_22018",
+            "learncoder_122_22017",
+            "learncoder_122_22016",
+            "learncoder_122_22015",
+            "learncoder_122_22014",
+            "learncoder_122_22013",
+            "learncoder_122_21364",
+            "learncoder_122_21363",
+            "learncoder_122_21362",
+            "learncoder_122_21361",
+            "learncoder_122_21360",
+            "learncoder_122_21359",
+            "learncoder_122_21358",
+            "learncoder_122_21357",
+            "learncoder_122_21356",
+            "learncoder_122_21355",
+            "learncoder_122_21354",
+            "learncoder_122_21353",
+            "learncoder_122_21352",
+            "learncoder_122_21351",
+            "learncoder_122_21350",
+            "learncoder_122_21349",
+            "learncoder_122_21348",
+            "learncoder_122_21347",
+            "learncoder_122_21346",
+            "learncoder_122_21344",
+            "learncoder_122_21343",
+            "learncoder_122_21342",
+            "learncoder_122_21341",
+            "learncoder_122_21340",
+            "learncoder_122_21339",
+            "learncoder_122_21338",
+            "learncoder_122_21337",
+            "learncoder_122_21336",
+            "learncoder_122_21335",
+            "learncoder_122_21334",
+            "learncoder_122_21333",
+            "learncoder_122_21332",
+            "learncoder_122_21331",
+            "learncoder_122_21330",
+            "learncoder_122_21329",
+            "learncoder_122_21328",
+            "learncoder_122_21327",
+            "learncoder_122_21326",
+            "learncoder_122_21325",
+            "learncoder_122_21324",
+            "learncoder_122_21323",
+            "learncoder_122_21322",
+            "learncoder_122_21321",
+            "learncoder_122_21320",
+            "learncoder_122_21319",
+            "learncoder_122_21318",
+            "learncoder_122_21317",
+            "learncoder_122_21316",
+            "learncoder_122_21315",
+            "learncoder_122_21314",
+            "learncoder_122_21313",
+            "learncoder_122_21312",
+            "learncoder_122_21311",
+            "learncoder_122_21310",
+            "learncoder_122_21309",
+            "learncoder_122_21308",
+            "learncoder_122_21307",
+            "learncoder_122_21306",
+            "learncoder_122_21305",
+            "learncoder_122_21304",
+            "learncoder_122_21303",
+            "learncoder_122_21302",
+            "learncoder_122_21301",
+            "learncoder_122_21300",
+            "learncoder_122_21299",
+            "learncoder_122_21298",
+            "learncoder_121_21297",
+            "learncoder_121_21296",
+            "learncoder_121_21295",
+            "learncoder_121_21294",
+            "learncoder_121_21293",
+            "learncoder_121_21292",
+            "learncoder_121_21291",
+            "learncoder_121_21290",
+            "learncoder_121_21289",
+            "learncoder_121_21288",
+            "learncoder_121_21287",
+            "learncoder_121_21286",
+            "learncoder_121_21285",
+            "learncoder_121_21284",
+            "learncoder_121_21283",
+            "learncoder_121_21282",
+            "learncoder_121_21281",
+            "learncoder_121_21280",
+            "learncoder_121_21279",
+            "learncoder_121_21278",
+            "learncoder_121_21277",
+            "learncoder_121_21276",
+            "learncoder_121_21275",
+            "learncoder_121_21274",
+            "learncoder_121_21273",
+            "learncoder_121_21271",
+            "learncoder_121_21270",
+            "learncoder_121_21269",
+            "learncoder_121_21268",
+            "learncoder_121_21267",
+            "learncoder_121_21266",
+            "learncoder_121_21265",
+            "learncoder_121_21264",
+            "learncoder_121_21263",
+            "learncoder_121_21262",
+            "learncoder_121_21261",
+            "learncoder_121_21260",
+            "learncoder_121_21259",
+            "learncoder_121_21258",
+            "learncoder_121_21257",
+            "learncoder_121_21256",
+            "learncoder_121_21255",
+            "learncoder_121_21254",
+            "learncoder_121_21253",
+            "learncoder_121_21252",
+            "learncoder_121_21251",
+            "learncoder_121_21250",
+            "learncoder_121_21249",
+            "learncoder_121_21248",
+            "learncoder_121_21247",
+            "learncoder_121_21246",
+            "learncoder_121_21245",
+            "learncoder_121_21244",
+            "learncoder_121_21243",
+            "learncoder_121_21242",
+            "learncoder_121_21241",
+            "learncoder_121_21240",
+            "learncoder_121_21239",
+            "learncoder_121_21238",
+            "learncoder_121_21237",
+            "learncoder_121_21236",
+            "learncoder_121_21235",
+            "learncoder_121_21234",
+            "learncoder_121_21233",
+            "learncoder_121_21232",
+            "learncoder_121_21231",
+            "learncoder_121_21230",
+            "learncoder_121_21229",
+            "learncoder_121_21228",
+            "learncoder_121_21227",
+            "learncoder_121_21226",
+            "learncoder_121_21225",
+            "learncoder_121_21224",
+            "learncoder_121_21223",
+            "learncoder_121_21222",
+            "learncoder_121_21221",
+            "learncoder_121_21220",
+            "learncoder_121_21219",
+            "learncoder_121_21218",
+            "learncoder_121_21217",
+            "learncoder_120_21873",
+            "learncoder_120_21872",
+            "learncoder_120_21871",
+            "learncoder_120_21870",
+            "learncoder_120_21869",
+            "learncoder_120_21868",
+            "learncoder_120_21867",
+            "learncoder_120_21866",
+            "learncoder_120_21865",
+            "learncoder_120_21863",
+            "learncoder_120_21862",
+            "learncoder_120_21861",
+            "learncoder_120_21860",
+            "learncoder_120_21859",
+            "learncoder_120_21858",
+            "learncoder_120_21857",
+            "learncoder_120_21856",
+            "learncoder_120_21216",
+            "learncoder_120_21215",
+            "learncoder_120_21214",
+            "learncoder_120_21213",
+            "learncoder_120_21212",
+            "learncoder_120_21211",
+            "learncoder_120_21210",
+            "learncoder_120_21209",
+            "learncoder_120_21208",
+            "learncoder_120_21207",
+            "learncoder_120_21206",
+            "learncoder_120_21205",
+            "learncoder_120_21204",
+            "learncoder_120_21203",
+            "learncoder_120_21202",
+            "learncoder_120_21201",
+            "learncoder_120_21200",
+            "learncoder_120_21199",
+            "learncoder_120_21198",
+            "learncoder_120_21197",
+            "learncoder_120_21196",
+            "learncoder_120_21195",
+            "learncoder_120_21194",
+            "learncoder_120_21193",
+            "learncoder_120_21192",
+            "learncoder_120_21191",
+            "learncoder_120_21190",
+            "learncoder_120_21189",
+            "learncoder_120_21188",
+            "learncoder_120_21187",
+            "learncoder_120_21186",
+            "learncoder_120_21185",
+            "learncoder_120_21184",
+            "learncoder_120_21183",
+            "learncoder_120_21182",
+            "learncoder_120_21181",
+            "learncoder_120_21180",
+            "learncoder_120_21179",
+            "learncoder_120_21178",
+            "learncoder_120_21177",
+            "learncoder_120_21175",
+            "learncoder_120_21174",
+            "learncoder_120_21173",
+            "learncoder_120_21172",
+            "learncoder_120_21171",
+            "learncoder_120_21170",
+            "learncoder_120_21169",
+            "learncoder_120_21168",
+            "learncoder_120_21167",
+            "learncoder_120_21166",
+            "learncoder_120_21165",
+            "learncoder_120_21164",
+            "learncoder_120_21163",
+            "learncoder_120_21162",
+            "learncoder_120_21161",
+            "learncoder_120_21160",
+            "learncoder_120_21159",
+            "learncoder_120_21158",
+            "learncoder_120_21157",
+            "learncoder_120_21156",
+            "learncoder_120_21155",
+            "learncoder_120_21154",
+            "learncoder_120_21153",
+            "learncoder_120_21152",
+            "learncoder_120_21151",
+            "learncoder_120_21150",
+            "learncoder_120_21149",
+            "learncoder_120_21148",
+            "learncoder_120_21147",
+            "learncoder_120_21146",
+            "learncoder_120_21145",
+            "learncoder_120_21144",
+            "learncoder_120_21143",
+            "learncoder_120_21142",
+            "learncoder_120_21141",
+            "learncoder_120_21140",
+            "learncoder_120_21139",
+            "learncoder_120_21138",
+            "learncoder_120_21137",
+            "learncoder_120_21136",
+            "learncoder_120_21135",
+            "learncoder_120_21134",
+            "learncoder_120_21133",
+            "learncoder_120_21132",
+            "learncoder_120_21131",
+            "learncoder_120_21130",
+            "learncoder_120_21129",
+            "learncoder_120_21128",
+            "learncoder_120_21127",
+            "learncoder_120_21126",
+            "learncoder_120_21125",
+            "learncoder_120_21124",
+            "learncoder_120_21123",
+            "learncoder_120_21122",
+            "learncoder_120_21121",
+            "learncoder_120_21120",
+            "learncoder_120_21119",
+            "learncoder_120_21118",
+            "learncoder_120_21117",
+            "learncoder_120_21116",
+            "learncoder_120_21115",
+            "learncoder_120_21114",
+            "learncoder_120_21113",
+            "learncoder_120_21112",
+            "learncoder_120_21111",
+            "learncoder_120_21110",
+            "learncoder_120_21109",
+            "learncoder_120_21108",
+            "learncoder_120_21107",
+            "learncoder_120_21106",
+            "learncoder_120_21105",
+            "learncoder_120_21104",
+            "learncoder_120_21103",
+            "learncoder_120_21102",
+            "learncoder_120_21101",
+            "learncoder_120_21100",
+            "learncoder_120_21099",
+            "learncoder_120_21098",
+            "learncoder_118_25018",
+            "learncoder_118_25017",
+            "learncoder_118_25016",
+            "learncoder_118_25015",
+            "learncoder_118_25014",
+            "learncoder_118_25013",
+            "learncoder_118_25012",
+            "learncoder_118_25011",
+            "learncoder_118_25010",
+            "learncoder_118_25009",
+            "learncoder_118_25008",
+            "learncoder_118_25006",
+            "learncoder_118_25005",
+            "learncoder_118_25004",
+            "learncoder_118_25003",
+            "learncoder_118_25002",
+            "learncoder_118_25001",
+            "learncoder_118_25000",
+            "learncoder_118_24999",
+            "learncoder_118_24998",
+            "learncoder_118_24997",
+            "learncoder_118_24996",
+            "learncoder_118_24995",
+            "learncoder_118_24994",
+            "learncoder_118_24993",
+            "learncoder_118_24992",
+            "learncoder_118_24991",
+            "learncoder_118_24990",
+            "learncoder_118_24989",
+            "learncoder_118_24988",
+            "learncoder_118_24987",
+            "learncoder_118_24986",
+            "learncoder_118_24985",
+            "learncoder_118_24984",
+            "learncoder_118_24983",
+            "learncoder_118_24982",
+            "learncoder_118_24981",
+            "learncoder_118_24980",
+            "learncoder_118_24979",
+            "learncoder_118_24978",
+            "learncoder_118_24977",
+            "learncoder_118_24976",
+            "learncoder_118_24975",
+            "learncoder_118_24974",
+            "learncoder_118_24973",
+            "learncoder_118_24972",
+            "learncoder_118_24971",
+            "learncoder_118_22653",
+            "learncoder_118_22650",
+            "learncoder_118_22649",
+            "learncoder_118_22648",
+            "learncoder_118_22647",
+            "learncoder_118_22646",
+            "learncoder_118_22645",
+            "learncoder_118_22644",
+            "learncoder_118_22643",
+            "learncoder_118_22642",
+            "learncoder_118_22641",
+            "learncoder_118_22640",
+            "learncoder_118_22639",
+            "learncoder_118_22638",
+            "learncoder_118_22637",
+            "learncoder_118_22636",
+            "learncoder_118_22635",
+            "learncoder_118_22634",
+            "learncoder_118_22633",
+            "learncoder_118_22632",
+            "learncoder_117_25072",
+            "learncoder_117_25071",
+            "learncoder_117_25070",
+            "learncoder_117_25069",
+            "learncoder_117_25068",
+            "learncoder_117_25067",
+            "learncoder_117_25066",
+            "learncoder_117_25065",
+            "learncoder_117_25064",
+            "learncoder_117_25063",
+            "learncoder_117_25062",
+            "learncoder_117_25061",
+            "learncoder_117_25060",
+            "learncoder_117_25059",
+            "learncoder_117_25057",
+            "learncoder_117_25056",
+            "learncoder_117_25055",
+            "learncoder_117_25054",
+            "learncoder_117_25053",
+            "learncoder_117_25052",
+            "learncoder_117_25051",
+            "learncoder_117_25050",
+            "learncoder_117_25049",
+            "learncoder_117_25048",
+            "learncoder_117_25047",
+            "learncoder_117_25046",
+            "learncoder_117_25045",
+            "learncoder_117_25044",
+            "learncoder_117_25043",
+            "learncoder_117_25042",
+            "learncoder_117_25041",
+            "learncoder_117_25040",
+            "learncoder_117_25039",
+            "learncoder_117_25038",
+            "learncoder_117_25037",
+            "learncoder_117_25036",
+            "learncoder_117_25035",
+            "learncoder_117_25034",
+            "learncoder_117_25033",
+            "learncoder_117_25032",
+            "learncoder_117_25031",
+            "learncoder_117_25030",
+            "learncoder_117_25029",
+            "learncoder_117_25028",
+            "learncoder_117_25027",
+            "learncoder_117_25026",
+            "learncoder_117_25025",
+            "learncoder_117_25024",
+            "learncoder_117_25023",
+            "learncoder_117_25022",
+            "learncoder_117_25021",
+            "learncoder_117_25020",
+            "learncoder_117_22631",
+            "learncoder_117_22630",
+            "learncoder_117_22627",
+            "learncoder_117_22626",
+            "learncoder_117_22625",
+            "learncoder_117_22624",
+            "learncoder_117_22623",
+            "learncoder_117_22622",
+            "learncoder_117_22621",
+            "learncoder_117_22620",
+            "learncoder_117_22619",
+            "learncoder_117_22618",
+            "learncoder_117_22617",
+            "learncoder_117_22616",
+            "learncoder_117_22615",
+            "learncoder_117_22614",
+            "learncoder_117_22613",
+            "learncoder_117_22612",
+            "learncoder_117_22611",
+            "learncoder_116_25173",
+            "learncoder_116_25172",
+            "learncoder_116_25171",
+            "learncoder_116_25170",
+            "learncoder_116_25169",
+            "learncoder_116_25168",
+            "learncoder_116_25167",
+            "learncoder_116_25166",
+            "learncoder_116_25165",
+            "learncoder_116_25164",
+            "learncoder_116_25163",
+            "learncoder_116_25162",
+            "learncoder_116_25161",
+            "learncoder_116_25160",
+            "learncoder_116_25159",
+            "learncoder_116_25158",
+            "learncoder_116_25157",
+            "learncoder_116_25156",
+            "learncoder_116_25155",
+            "learncoder_116_25154",
+            "learncoder_116_25153",
+            "learncoder_116_25152",
+            "learncoder_116_25151",
+            "learncoder_116_25150",
+            "learncoder_116_25149",
+            "learncoder_116_25148",
+            "learncoder_116_25146",
+            "learncoder_116_25145",
+            "learncoder_116_25144",
+            "learncoder_116_25143",
+            "learncoder_116_25142",
+            "learncoder_116_25141",
+            "learncoder_116_25140",
+            "learncoder_116_25139",
+            "learncoder_116_25138",
+            "learncoder_116_25137",
+            "learncoder_116_25136",
+            "learncoder_116_25135",
+            "learncoder_116_25134",
+            "learncoder_116_25133",
+            "learncoder_116_25132",
+            "learncoder_116_25131",
+            "learncoder_116_25130",
+            "learncoder_116_25129",
+            "learncoder_116_25128",
+            "learncoder_116_25127",
+            "learncoder_116_25126",
+            "learncoder_116_25125",
+            "learncoder_116_25124",
+            "learncoder_116_25123",
+            "learncoder_116_25122",
+            "learncoder_116_25121",
+            "learncoder_116_25120",
+            "learncoder_116_25119",
+            "learncoder_116_25118",
+            "learncoder_116_25117",
+            "learncoder_116_25116",
+            "learncoder_116_25115",
+            "learncoder_116_25114",
+            "learncoder_116_25113",
+            "learncoder_116_25112",
+            "learncoder_116_25111",
+            "learncoder_116_25110",
+            "learncoder_116_25109",
+            "learncoder_116_25108",
+            "learncoder_116_25107",
+            "learncoder_116_25106",
+            "learncoder_116_25105",
+            "learncoder_116_25104",
+            "learncoder_116_25103",
+            "learncoder_116_25102",
+            "learncoder_116_25101",
+            "learncoder_116_25100",
+            "learncoder_116_25099",
+            "learncoder_116_25098",
+            "learncoder_116_25097",
+            "learncoder_116_25096",
+            "learncoder_116_25095",
+            "learncoder_116_25094",
+            "learncoder_116_25093",
+            "learncoder_116_25092",
+            "learncoder_116_25091",
+            "learncoder_116_25090",
+            "learncoder_116_25089",
+            "learncoder_116_25088",
+            "learncoder_116_25087",
+            "learncoder_116_25086",
+            "learncoder_116_25085",
+            "learncoder_116_25084",
+            "learncoder_116_25083",
+            "learncoder_116_25082",
+            "learncoder_116_25081",
+            "learncoder_116_25080",
+            "learncoder_116_25079",
+            "learncoder_116_25078",
+            "learncoder_116_25077",
+            "learncoder_116_25076",
+            "learncoder_116_25075",
+            "learncoder_116_25074",
+            "learncoder_116_22610",
+            "learncoder_116_22609",
+            "learncoder_116_22606",
+            "learncoder_116_22605",
+            "learncoder_116_22604",
+            "learncoder_116_22603",
+            "learncoder_116_22602",
+            "learncoder_116_22601",
+            "learncoder_116_22600",
+            "learncoder_116_22599",
+            "learncoder_116_22598",
+            "learncoder_116_22597",
+            "learncoder_116_22596",
+            "learncoder_116_22595",
+            "learncoder_116_22594",
+            "learncoder_116_22593",
+            "learncoder_116_22592",
+            "learncoder_116_22591",
+            "learncoder_116_22590",
+            "learncoder_116_22589",
+            "learncoder_116_22588",
+            "learncoder_116_22587",
+            "learncoder_115_24735",
+            "learncoder_115_24734",
+            "learncoder_115_24733",
+            "learncoder_115_24732",
+            "learncoder_115_24731",
+            "learncoder_115_24730",
+            "learncoder_115_24729",
+            "learncoder_115_24728",
+            "learncoder_115_24727",
+            "learncoder_115_24726",
+            "learncoder_115_24725",
+            "learncoder_115_24724",
+            "learncoder_115_24723",
+            "learncoder_115_24722",
+            "learncoder_115_24721",
+            "learncoder_115_24720",
+            "learncoder_115_24719",
+            "learncoder_115_24718",
+            "learncoder_115_24717",
+            "learncoder_115_24716",
+            "learncoder_115_24715",
+            "learncoder_115_24714",
+            "learncoder_115_24713",
+            "learncoder_115_24712",
+            "learncoder_115_24711",
+            "learncoder_115_24710",
+            "learncoder_115_24709",
+            "learncoder_115_24708",
+            "learncoder_115_24707",
+            "learncoder_115_24706",
+            "learncoder_115_24705",
+            "learncoder_115_24704",
+            "learncoder_115_24703",
+            "learncoder_115_24702",
+            "learncoder_115_24701",
+            "learncoder_115_24700",
+            "learncoder_115_24699",
+            "learncoder_115_24698",
+            "learncoder_115_24697",
+            "learncoder_115_24696",
+            "learncoder_115_24695",
+            "learncoder_115_24694",
+            "learncoder_115_24693",
+            "learncoder_115_24692",
+            "learncoder_115_24691",
+            "learncoder_115_24690",
+            "learncoder_115_24689",
+            "learncoder_115_24688",
+            "learncoder_115_24687",
+            "learncoder_115_24686",
+            "learncoder_115_24685",
+            "learncoder_115_24684",
+            "learncoder_115_24683",
+            "learncoder_115_24682",
+            "learncoder_115_24681",
+            "learncoder_115_24680",
+            "learncoder_115_24679",
+            "learncoder_115_24678",
+            "learncoder_115_24677",
+            "learncoder_115_24676",
+            "learncoder_115_24675",
+            "learncoder_115_24674",
+            "learncoder_115_24673",
+            "learncoder_115_24672",
+            "learncoder_115_24671",
+            "learncoder_115_24670",
+            "learncoder_115_24669",
+            "learncoder_115_24668",
+            "learncoder_115_24667",
+            "learncoder_115_24666",
+            "learncoder_115_24665",
+            "learncoder_115_24664",
+            "learncoder_115_22586",
+            "learncoder_115_22585",
+            "learncoder_115_22582",
+            "learncoder_115_22581",
+            "learncoder_115_22580",
+            "learncoder_115_22579",
+            "learncoder_115_22578",
+            "learncoder_115_22577",
+            "learncoder_115_22576",
+            "learncoder_115_22575",
+            "learncoder_115_22574",
+            "learncoder_115_22573",
+            "learncoder_115_22572",
+            "learncoder_115_22571",
+            "learncoder_115_22570",
+            "learncoder_115_22569",
+            "learncoder_115_22568",
+            "learncoder_115_22567",
+            "learncoder_115_22566",
+            "learncoder_115_22565",
+            "learncoder_115_22564",
+            "learncoder_115_22563",
+            "learncoder_115_22562",
+            "learncoder_115_22561",
+            "learncoder_115_22560",
+            "learncoder_115_22559",
+            "learncoder_115_22558",
+            "learncoder_115_22557",
+            "learncoder_114_24663",
+            "learncoder_114_24662",
+            "learncoder_114_24661",
+            "learncoder_114_24660",
+            "learncoder_114_24659",
+            "learncoder_114_24658",
+            "learncoder_114_24657",
+            "learncoder_114_24656",
+            "learncoder_114_24655",
+            "learncoder_114_24654",
+            "learncoder_114_24653",
+            "learncoder_114_24652",
+            "learncoder_114_24651",
+            "learncoder_114_24650",
+            "learncoder_114_24649",
+            "learncoder_114_24648",
+            "learncoder_114_24647",
+            "learncoder_114_24646",
+            "learncoder_114_24645",
+            "learncoder_114_24644",
+            "learncoder_114_24643",
+            "learncoder_114_24642",
+            "learncoder_114_24641",
+            "learncoder_114_24640",
+            "learncoder_114_24639",
+            "learncoder_114_24638",
+            "learncoder_114_24637",
+            "learncoder_114_24636",
+            "learncoder_114_24635",
+            "learncoder_114_24634",
+            "learncoder_114_24633",
+            "learncoder_114_24632",
+            "learncoder_114_24631",
+            "learncoder_114_24630",
+            "learncoder_114_24629",
+            "learncoder_114_24628",
+            "learncoder_114_24627",
+            "learncoder_114_24626",
+            "learncoder_114_24625",
+            "learncoder_114_24624",
+            "learncoder_114_24623",
+            "learncoder_114_24622",
+            "learncoder_114_24621",
+            "learncoder_114_24620",
+            "learncoder_114_24619",
+            "learncoder_114_24618",
+            "learncoder_114_24617",
+            "learncoder_114_24616",
+            "learncoder_114_24615",
+            "learncoder_114_24614",
+            "learncoder_114_24613",
+            "learncoder_114_24612",
+            "learncoder_114_24611",
+            "learncoder_114_24610",
+            "learncoder_114_22556",
+            "learncoder_114_22555",
+            "learncoder_114_22552",
+            "learncoder_114_22551",
+            "learncoder_114_22550",
+            "learncoder_114_22549",
+            "learncoder_114_22548",
+            "learncoder_114_22547",
+            "learncoder_114_22546",
+            "learncoder_114_22545",
+            "learncoder_114_22544",
+            "learncoder_114_22543",
+            "learncoder_114_22542",
+            "learncoder_114_22541",
+            "learncoder_114_22540",
+            "learncoder_114_22539",
+            "learncoder_114_22538",
+            "learncoder_114_22537",
+            "learncoder_114_22536",
+            "learncoder_114_22535",
+            "learncoder_114_22534",
+            "learncoder_114_22533",
+            "learncoder_113_24609",
+            "learncoder_113_24608",
+            "learncoder_113_24607",
+            "learncoder_113_24606",
+            "learncoder_113_24605",
+            "learncoder_113_24604",
+            "learncoder_113_24603",
+            "learncoder_113_24602",
+            "learncoder_113_24601",
+            "learncoder_113_24600",
+            "learncoder_113_24599",
+            "learncoder_113_24598",
+            "learncoder_113_24597",
+            "learncoder_113_24596",
+            "learncoder_113_24595",
+            "learncoder_113_24594",
+            "learncoder_113_24593",
+            "learncoder_113_24592",
+            "learncoder_113_24591",
+            "learncoder_113_24590",
+            "learncoder_113_24589",
+            "learncoder_113_24588",
+            "learncoder_113_24587",
+            "learncoder_113_24586",
+            "learncoder_113_24585",
+            "learncoder_113_24584",
+            "learncoder_113_24583",
+            "learncoder_113_24582",
+            "learncoder_113_24581",
+            "learncoder_113_24580",
+            "learncoder_113_24579",
+            "learncoder_113_24578",
+            "learncoder_113_24577",
+            "learncoder_113_24576",
+            "learncoder_113_24575",
+            "learncoder_113_24574",
+            "learncoder_113_24573",
+            "learncoder_113_24572",
+            "learncoder_113_22531",
+            "learncoder_113_22529",
+            "learncoder_113_22528",
+            "learncoder_113_22527",
+            "learncoder_113_22526",
+            "learncoder_113_22525",
+            "learncoder_113_22524",
+            "learncoder_113_22523",
+            "learncoder_113_22522",
+            "learncoder_113_22521",
+            "learncoder_113_22520",
+            "learncoder_113_22519",
+            "learncoder_113_22518",
+            "learncoder_113_22517",
+            "learncoder_113_22516",
+            "learncoder_113_22515",
+            "learncoder_113_22514",
+            "learncoder_113_22513",
+            "learncoder_113_22512",
+            "learncoder_113_22511",
+            "learncoder_113_22510",
+            "learncoder_106_575",
+            "learncoder_106_574",
+            "learncoder_106_573",
+            "learncoder_106_572",
+            "learncoder_106_571",
+            "learncoder_106_570",
+            "learncoder_106_569",
+            "learncoder_106_568",
+            "learncoder_106_567",
+            "learncoder_106_566",
+            "learncoder_106_565",
+            "learncoder_106_564",
+            "learncoder_106_563",
+            "learncoder_106_562",
+            "learncoder_106_561",
+            "learncoder_106_560",
+            "learncoder_106_559",
+            "learncoder_106_558",
+            "learncoder_106_557",
+            "learncoder_106_556",
+            "learncoder_106_555",
+            "learncoder_106_554",
+            "learncoder_106_553",
+            "learncoder_106_552",
+            "learncoder_106_551",
+            "learncoder_106_550",
+            "learncoder_106_549",
+            "learncoder_106_548",
+            "learncoder_106_547",
+            "learncoder_106_546",
+            "learncoder_106_545",
+            "learncoder_106_22879",
+            "learncoder_106_22878",
+            "learncoder_106_22877",
+            "learncoder_106_22874",
+            "learncoder_106_22873",
+            "learncoder_106_22872",
+            "learncoder_106_22871",
+            "learncoder_106_22870",
+            "learncoder_106_22869",
+            "learncoder_106_22868",
+            "learncoder_106_22867",
+            "learncoder_106_22866",
+            "learncoder_106_22865",
+            "learncoder_106_22864",
+            "learncoder_106_22863",
+            "learncoder_106_22862",
+            "learncoder_106_22861",
+            "learncoder_106_22860",
+            "learncoder_106_22859",
+            "learncoder_106_22858",
+            "learncoder_106_22857",
+            "learncoder_106_22856",
+            "learncoder_106_22855",
+            "learncoder_106_22854",
+            "learncoder_106_22853",
+            "learncoder_106_22852",
+            "learncoder_106_22851",
+            "learncoder_106_22850",
+            "learncoder_106_22849",
+            "learncoder_106_22848",
+            "learncoder_106_22847",
+            "learncoder_106_22846",
+            "learncoder_106_22845",
+            "learncoder_106_22844",
+            "learncoder_106_22843",
+            "learncoder_106_22842",
+            "learncoder_106_22841",
+            "learncoder_106_22840",
+            "learncoder_106_22839",
+            "learncoder_106_22838",
+            "learncoder_106_22837",
+            "learncoder_106_22836",
+            "learncoder_106_22835",
+            "learncoder_106_22834",
+            "learncoder_106_22833",
+            "learncoder_106_22832",
+            "learncoder_106_22831",
+            "learncoder_106_19806",
+            "learncoder_106_19805",
+            "learncoder_106_19804",
+            "learncoder_106_19803",
+            "learncoder_106_19802",
+            "learncoder_106_19801",
+            "learncoder_106_19800",
+            "learncoder_106_19799",
+            "learncoder_106_19798",
+            "learncoder_106_19797",
+            "learncoder_106_19796",
+            "learncoder_106_19795",
+            "learncoder_106_19794",
+            "learncoder_106_19793",
+            "learncoder_106_19792",
+            "learncoder_106_19791",
+            "learncoder_106_19789",
+            "learncoder_106_19788",
+            "learncoder_106_19787",
+            "learncoder_106_19786",
+            "learncoder_106_19785",
+            "learncoder_106_19784",
+            "learncoder_106_19783",
+            "learncoder_106_19782",
+            "learncoder_106_19781",
+            "learncoder_106_19780",
+            "learncoder_106_19779",
+            "learncoder_106_19778",
+            "learncoder_106_19777",
+            "learncoder_106_19776",
+            "learncoder_106_19775",
+            "learncoder_106_19774",
+            "learncoder_106_19773",
+            "learncoder_106_19772",
+            "learncoder_106_16824",
+            "learncoder_106_16823",
+            "learncoder_106_16822",
+            "learncoder_106_16821",
+            "learncoder_106_16820",
+            "learncoder_106_16819",
+            "learncoder_106_16818",
+            "learncoder_106_16817",
+            "learncoder_106_16816",
+            "learncoder_106_16815",
+            "learncoder_106_16814",
+            "learncoder_106_16813",
+            "learncoder_106_16812",
+            "learncoder_106_16811",
+            "learncoder_106_16810",
+            "learncoder_106_16809",
+            "learncoder_106_16808",
+            "learncoder_106_16807",
+            "learncoder_106_16806",
+            "learncoder_106_16805",
+            "learncoder_106_16804",
+            "learncoder_106_16803",
+            "learncoder_106_16802",
+            "learncoder_106_16801",
+            "learncoder_106_16800",
+            "learncoder_106_16799",
+            "learncoder_106_16798",
+            "learncoder_106_16797",
+            "learncoder_106_16796",
+            "learncoder_106_16795",
+            "learncoder_106_16794",
+            "learncoder_106_16793",
+            "learncoder_106_16792",
+            "learncoder_106_16791",
+            "learncoder_106_16790",
+            "learncoder_106_16789",
+            "learncoder_106_16788",
+            "learncoder_106_16787",
+            "learncoder_106_16786",
+            "learncoder_106_16785",
+            "learncoder_106_16784",
+            "learncoder_106_16783",
+            "learncoder_106_16782",
+            "learncoder_106_16781",
+            "learncoder_106_16780",
+            "learncoder_106_16779",
+            "learncoder_106_16778",
+            "learncoder_106_16777",
+            "learncoder_106_16776",
+            "learncoder_106_16775",
+            "learncoder_106_16774",
+            "learncoder_106_16773",
+            "learncoder_106_16772",
+            "learncoder_106_16771",
+            "learncoder_106_16770",
+            "learncoder_106_16769",
+            "learncoder_106_16768",
+            "learncoder_106_16767",
+            "learncoder_106_16766",
+            "learncoder_106_16765",
+            "learncoder_106_16764",
+            "learncoder_106_16763",
+            "learncoder_106_16762",
+            "learncoder_106_16761",
+            "learncoder_106_16760",
+            "learncoder_106_16759",
+            "learncoder_106_16758",
+            "learncoder_106_16757",
+            "learncoder_106_16756",
+            "learncoder_106_16755",
+            "learncoder_106_16754",
+            "learncoder_106_16753",
+            "learncoder_106_16752",
+            "learncoder_106_16751",
+            "learncoder_106_16750",
+            "learncoder_106_16749",
+            "learncoder_106_16748",
+            "learncoder_106_16747",
+            "learncoder_106_16746",
+            "learncoder_106_16745",
+            "learncoder_106_16744",
+            "learncoder_106_16743",
+            "learncoder_106_16742",
+            "learncoder_106_16741",
+            "learncoder_106_16740",
+            "learncoder_106_16739",
+            "learncoder_106_16738",
+            "learncoder_106_16737",
+            "learncoder_106_16736",
+            "learncoder_106_16735",
+            "learncoder_106_16734",
+            "learncoder_106_16733",
+            "learncoder_106_16732",
+            "learncoder_106_16730",
+            "learncoder_106_16729",
+            "learncoder_106_16728",
+            "learncoder_106_16727",
+            "learncoder_106_16726",
+            "learncoder_106_16725",
+            "learncoder_106_16724",
+            "learncoder_106_16723",
+            "learncoder_106_16722",
+            "learncoder_106_16721",
+            "learncoder_106_16720",
+            "learncoder_106_16719",
+            "learncoder_106_16718",
+            "learncoder_106_16717",
+            "learncoder_106_16716",
+            "learncoder_106_16715",
+            "learncoder_106_16714",
+            "learncoder_106_16713",
+            "learncoder_106_16712",
+            "learncoder_106_16711",
+            "learncoder_106_16710",
+            "learncoder_106_16709",
+            "learncoder_106_16708",
+            "learncoder_106_16707",
+            "learncoder_106_16706",
+            "learncoder_106_16705",
+            "learncoder_106_16704",
+            "learncoder_106_16703",
+            "learncoder_106_16702",
+            "learncoder_106_16701",
+            "learncoder_106_16700",
+            "learncoder_106_16699",
+            "learncoder_106_16698",
+            "learncoder_106_16697",
+            "learncoder_106_16696",
+            "learncoder_106_16695",
+            "learncoder_106_16694",
+            "learncoder_106_16693",
+            "learncoder_106_16692",
+            "learncoder_106_16691",
+            "learncoder_106_16690",
+            "learncoder_106_16689",
+            "learncoder_106_16688",
+            "learncoder_106_16687",
+            "learncoder_106_16686",
+            "learncoder_106_16685",
+            "learncoder_106_16684",
+            "learncoder_106_16683",
+            "learncoder_106_16682",
+            "learncoder_106_16681",
+            "learncoder_106_16680",
+            "learncoder_106_16679",
+            "learncoder_106_16678",
+            "learncoder_106_16677",
+            "learncoder_106_16676",
+            "learncoder_106_16675",
+            "learncoder_106_16674",
+            "learncoder_106_16673",
+            "learncoder_106_16672",
+            "learncoder_106_16671",
+            "learncoder_106_16670",
+            "learncoder_106_16669",
+            "learncoder_106_16668",
+            "learncoder_106_16667",
+            "learncoder_106_16666",
+            "learncoder_106_16665",
+            "learncoder_106_16664",
+            "learncoder_106_16663",
+            "learncoder_106_16662",
+            "learncoder_106_16661",
+            "learncoder_106_16660",
+            "learncoder_106_16659",
+            "learncoder_106_16658",
+            "learncoder_106_16657",
+            "learncoder_106_16656",
+            "fe0bde8c-9ebe-4fd1-ae14-6d236bfcd0cb",
+            "fdbc663a2fa74a6f8f577dd0bbe39af5",
+            "fab69130-4c9e-4ea1-b565-675f56c8b16f",
+            "f91eaa8d-6903-4444-8402-ac57e971961a",
+            "f7c1ea90-1084-4677-a2e8-f3b7dc54e78c",
+            "f77b8f07-0786-4645-93df-13a9a0361e65",
+            "f6d6f971-f535-4f3b-a7b0-b5372cbdf068",
+            "f378a25b-bbf2-4a59-95c7-aac019321d13",
+            "f340edf7-cc0e-4f2c-ae43-ae4b5eeb924d",
+            "efd78456-f7c1-482a-be7d-11e4934c1d85",
+            "ef7d16a3-84aa-46c9-aa8b-0d4b9e8ef593",
+            "e742dbce-a49e-42cf-a98c-6cd70f304d04",
+            "e728f7dc-2105-4709-bcfe-944446cfc7c9",
+            "e65ec1d7-577a-407e-8138-37d113253681",
+            "e150a1ba-29cf-4850-a98f-3c9e34d0cf96",
+            "e0c1a16a-5b4a-4ce9-9432-ae0ab1b4d6f9",
+            "de678e0a9d04498b9ef4b1ea32a9ad24",
+            "dcbfc6503fc54642a949f7bdea8baacd",
+            "dcb49f83-6bb3-44e2-a556-eab5d7d9dc79",
+            "d9847013-81b4-4fd8-83fd-4e13a07108f2",
+            "d8953091-fc12-4988-8470-ecbf648ddb01",
+            "d86a5c1b9bce4fc9a4eeff2f7310a251",
+            "d8009eb4-5833-424d-91c3-7dbc160a2a0a",
+            "d68a68d5-8674-497e-a298-03296c286ee6",
+            "d5fe6786-6133-476e-b374-df9b0b6153a4",
+            "d268506e-ceda-4da8-a6d4-c1a5328bc6c3",
+            "d0496d9a-d371-42a3-bb29-123931076545",
+            "cf2f0111-c021-49cc-89a0-e9c9b62932df",
+            "ceb2fff6-15ff-44fd-916a-9a71e4bf081d",
+            "ce4bca6c-50ca-4b5f-ad8e-1ba74d94a0a7",
+            "cabc876f-ce50-47bc-a5d0-b7c9bb350e9b",
+            "ca67f3b067ba405d943b687322cfeacf",
+            "c8e35bb71a0449e2888ffa6e150026b8",
+            "c76d9f7d-a148-4d15-bc68-f98ad734f789",
+            "c3ebd01ce1434afd9ef99ea6440ff1c3",
+            "c3afdf57-ba17-4b38-a800-02842aa188f1",
+            "c06681ca2ae6404891b5c4a563a13d47",
+            "c03d244c0c42468a91066a78aaceead8",
+            "c0172127934045898ba2faf2be5fa0ef'",
+            "bf56dd43-047b-42d0-a8f4-f20534b45f64",
+            "b9851a18c14240d1bb8445dddfffb284",
+            "b7bfe4ed-8916-4376-8d49-5300a7b8dfc3",
+            "b7763e59-8f3f-47ba-981a-328c5e780fb7",
+            "b661f476bd664911b1bef093d2b75579",
+            "b5ad5511-95ae-4e37-bb78-56df247bcbf0",
+            "b58e18a6-18f5-42b6-ab45-3ecbcb4c97ca",
+            "b4389281-c145-4075-8d0a-80223bee23d0",
+            "b4335b6e76864a06af524465f9a0e7de",
+            "b37660f4-1290-4ac1-9d8e-a90fd44254ad",
+            "b1bcd70b-96c5-4db9-9273-35f3cd4cbc71",
+            "b0b5288890264b0b87b7670b2314352b",
+            "afbf58cdc70e4162b51e6e8681f33146",
+            "9d24ea6747d841d29566bf3f97304a82",
+            "99e6df3e-6e6f-49c3-8c69-64e8daf32f61",
+            "956b5c4e-bf72-44dc-a64c-a47316e4c216",
+            "94588153-3028-4e04-a424-3c8e9f2efd5d",
+            "916cca5f-07ba-4960-b7e3-292fe6382ead",
+            "9058",
+            "9057",
+            "9056",
+            "9055",
+            "9054",
+            "9053",
+            "9052",
+            "9051",
+            "9050",
+            "9049",
+            "9048",
+            "9047",
+            "9046",
+            "9045",
+            "9044",
+            "9043",
+            "9042",
+            "9041",
+            "9040",
+            "9039",
+            "9038",
+            "9037",
+            "9036",
+            "9035",
+            "9034",
+            "9033",
+            "9032",
+            "9031",
+            "9030",
+            "9029",
+            "9028",
+            "9027",
+            "9026",
+            "9025",
+            "9024",
+            "9023",
+            "9022",
+            "9021",
+            "9020",
+            "9019",
+            "9018",
+            "9017",
+            "9016",
+            "9015",
+            "9014",
+            "9013",
+            "9012",
+            "9011",
+            "9010",
+            "9009",
+            "9008",
+            "9007",
+            "9006",
+            "9005",
+            "9004",
+            "9003",
+            "9002",
+            "9001",
+            "8f4b1549-d03f-4736-bbec-f1a49ae74c61",
+            "8ecb7c55-e3e2-4dbe-980c-8cae28c4dc56",
+            "89accffa-ea24-4831-a230-b7d4f2c06eff",
+            "86766c458e9346d1a4691468c2175ac9",
+            "85c221c727b54c1eae10a59d33d96e94",
+            "859fff8bbfba449bafb3bf781629004d",
+            "857badf5ced94950ad1fb697bab767c9",
+            "836fc966-4fdd-4881-9d52-c17577352524",
+            "805be3686ca043f69388609ed7c40ab3",
+            "7fdd63f6-0959-4c7f-86bd-584fdee547c3",
+            "76531c594442455aade728ce169745bb",
+            "742fa61f-8c6f-4f62-a997-e5900263f77b",
+            "728e1d16ab7845948963dcc6ef372552",
+            "724eddaa-9414-4803-8920-579416eccccc",
+            "7054",
+            "7053",
+            "7052",
+            "7051",
+            "7050",
+            "7049",
+            "7048",
+            "7047",
+            "7046",
+            "7045",
+            "7044",
+            "7043",
+            "7042",
+            "7041",
+            "7040",
+            "7039",
+            "7038",
+            "7037",
+            "7036",
+            "7035",
+            "7034",
+            "7033",
+            "7032",
+            "7031",
+            "7030",
+            "7029",
+            "7028",
+            "7027",
+            "7026",
+            "7025",
+            "7024",
+            "7023",
+            "7022",
+            "7021",
+            "7020",
+            "7019",
+            "7018",
+            "7017",
+            "7016",
+            "7015",
+            "7014",
+            "7013",
+            "7012",
+            "7011",
+            "7010",
+            "7009",
+            "7008",
+            "7007",
+            "7006",
+            "7005",
+            "7004",
+            "7003",
+            "7002",
+            "7001",
+            "6a4dee9c-ce29-4785-9792-d64b41edc0cc",
+            "69a37b55-eabb-4d4a-a3c6-d820293028e6",
+            "6791d9b0d78e4ab192c714dedbe7842e",
+            "652377e1-6d76-42d2-9052-7a585e2d5247",
+            "612a7cea-02e5-4233-be81-e983a673d066",
+            "5ef295699bad444c99499c4653b8eca2",
+            "56c1907595944ff2b8f6606c10703d9f",
+            "55b6a9497bf34716953b3c765df82b68",
+            "52f26d3a-a31a-49ff-b8c1-9fae0a31c13d",
+            "5075",
+            "5074",
+            "5073",
+            "5072",
+            "5071",
+            "5070",
+            "5069",
+            "5068",
+            "5067",
+            "5066",
+            "5065",
+            "5064",
+            "5063",
+            "5062",
+            "5061",
+            "5060",
+            "5059",
+            "5058",
+            "5057",
+            "5056",
+            "5055",
+            "5054",
+            "5053",
+            "5052",
+            "5051",
+            "5050",
+            "5049",
+            "5048",
+            "5047",
+            "5046",
+            "5045",
+            "5044",
+            "5043",
+            "5042",
+            "5041",
+            "5040",
+            "5039",
+            "5038",
+            "5037",
+            "5036",
+            "5035",
+            "5034",
+            "5033",
+            "5032",
+            "5031",
+            "5030",
+            "5029",
+            "5028",
+            "5027",
+            "5026",
+            "5025",
+            "5024",
+            "5023",
+            "5022",
+            "5021",
+            "5020",
+            "5019",
+            "5018",
+            "5017",
+            "5016",
+            "5015",
+            "5014",
+            "5013",
+            "5012",
+            "5011",
+            "5010",
+            "5009",
+            "5008",
+            "5007",
+            "5006",
+            "5005",
+            "5004",
+            "5003",
+            "5002",
+            "5001",
+            "4c80c232-5606-4918-8c2e-5110896c9982",
+            "49c5bf27d21947269756863cbba21937",
+            "470c1b0e-5631-4b67-baff-12aacb6460dc",
+            "45925594-2f79-40b2-a656-b5f3d02d3e55",
+            "454b1288-99bf-4a22-8ad9-3baf0a837cde",
+            "44edafc6-33d9-4ed7-9227-09f40e63e3dc",
+            "4476c039b0ea49fdadac56e4f690d105",
+            "41b95744-01a0-4333-9661-9f8889e51855",
+            "40b639b1-9914-456f-86a0-6d9338ffffeb",
+            "3f54ea23-ded4-4deb-9765-5bd9d98a976d",
+            "3e963b48-9c3d-4a8e-a97b-7a90b0c68b93",
+            "3bc5381b-1d74-4c22-893f-f5ebba1db0b1",
+            "395a5074-084e-4a1e-9721-bf829fbec4ec",
+            "37bad08da04a4a9996c6ce443dd77407",
+            "340a2ba1-4e0d-4b66-8fe2-c8b8bccc1e5d",
+            "328b67e78c82404297c439ba13791e83",
+            "31057",
+            "31056",
+            "31055",
+            "31054",
+            "31053",
+            "31052",
+            "31051",
+            "31050",
+            "31049",
+            "31048",
+            "31047",
+            "31046",
+            "31045",
+            "31044",
+            "31043",
+            "31042",
+            "31041",
+            "31040",
+            "31039",
+            "31038",
+            "31037",
+            "31036",
+            "31035",
+            "31034",
+            "31033",
+            "31032",
+            "31031",
+            "31030",
+            "31029",
+            "31028",
+            "31027",
+            "31026",
+            "31025",
+            "31024",
+            "31023",
+            "31022",
+            "31021",
+            "31020",
+            "31019",
+            "31018",
+            "31017",
+            "31016",
+            "31015",
+            "31014",
+            "31013",
+            "31012",
+            "31011",
+            "31010",
+            "31009",
+            "31008",
+            "31007",
+            "31006",
+            "31005",
+            "31004",
+            "31003",
+            "31002",
+            "31001",
+            "30dffb0d4207461eac201834e9f99e18",
+            "3054",
+            "3053",
+            "3052",
+            "3051",
+            "3050",
+            "3049",
+            "3048",
+            "3047",
+            "3046",
+            "3045",
+            "3044",
+            "3043",
+            "3042",
+            "3041",
+            "3040",
+            "3039",
+            "3038",
+            "3037",
+            "3036",
+            "3035",
+            "3034",
+            "3033",
+            "3032",
+            "3031",
+            "3030",
+            "3029",
+            "3028",
+            "3027",
+            "3026",
+            "3025",
+            "3024",
+            "3023",
+            "3022",
+            "3021",
+            "3020",
+            "3019",
+            "3018",
+            "3017",
+            "3016",
+            "3015",
+            "3014",
+            "3013",
+            "3012",
+            "3011",
+            "3010",
+            "3009",
+            "3008",
+            "3007",
+            "3006",
+            "3005",
+            "3004",
+            "3003",
+            "3002",
+            "3001",
+            "2cc6c848f02a43e9ba31a2b7b9eba836",
+            "2b4f3145426f4784a005f716fc6a6342",
+            "299e1a2e-4d68-48f4-8022-b7580cd9f30d",
+            "290dc9de58cd4a37b9a7a52847ccd1ce",
+            "29055",
+            "29054",
+            "29053",
+            "29052",
+            "29051",
+            "29050",
+            "29049",
+            "29048",
+            "29047",
+            "29046",
+            "29045",
+            "29044",
+            "29043",
+            "29042",
+            "29041",
+            "29040",
+            "29039",
+            "29038",
+            "29037",
+            "29036",
+            "29035",
+            "29034",
+            "29033",
+            "29032",
+            "29031",
+            "29030",
+            "29029",
+            "29028",
+            "29027",
+            "29026",
+            "29025",
+            "29024",
+            "29023",
+            "29022",
+            "29021",
+            "29020",
+            "29019",
+            "29018",
+            "29017",
+            "29016",
+            "29015",
+            "29014",
+            "29013",
+            "29012",
+            "29011",
+            "29010",
+            "29009",
+            "29008",
+            "29007",
+            "29006",
+            "29005",
+            "29004",
+            "29003",
+            "29002",
+            "29001",
+            "281b932b-b353-435d-8a31-4ea887eb4d0e",
+            "2713c610-1d3e-4200-84d1-1988695ec826",
+            "27075",
+            "27074",
+            "27073",
+            "27072",
+            "27071",
+            "27070",
+            "27069",
+            "27068",
+            "27067",
+            "27066",
+            "27065",
+            "27064",
+            "27063",
+            "27062",
+            "27061",
+            "27060",
+            "27059",
+            "27058",
+            "27057",
+            "27056",
+            "27055",
+            "27054",
+            "27053",
+            "27052",
+            "27051",
+            "27050",
+            "27049",
+            "27048",
+            "27047",
+            "27046",
+            "27045",
+            "27044",
+            "27043",
+            "27042",
+            "27041",
+            "27040",
+            "27039",
+            "27038",
+            "27037",
+            "27036",
+            "27035",
+            "27034",
+            "27033",
+            "27032",
+            "27031",
+            "27030",
+            "27029",
+            "27028",
+            "27027",
+            "27026",
+            "27025",
+            "27024",
+            "27023",
+            "27022",
+            "27021",
+            "27020",
+            "27019",
+            "27018",
+            "27017",
+            "27016",
+            "27015",
+            "27014",
+            "27013",
+            "27012",
+            "27011",
+            "27010",
+            "27009",
+            "27008",
+            "27007",
+            "27006",
+            "27005",
+            "27004",
+            "27003",
+            "27002",
+            "27001",
+            "25926583-a7a7-40fe-a9c8-41c74e648d95",
+            "25248cb9-154b-490d-b5ef-07468d2c9258",
+            "25056",
+            "25055",
+            "25054",
+            "25053",
+            "25052",
+            "25051",
+            "25050",
+            "25049",
+            "25048",
+            "25047",
+            "25046",
+            "25045",
+            "25044",
+            "25043",
+            "25042",
+            "25041",
+            "25040",
+            "25039",
+            "25038",
+            "25037",
+            "25036",
+            "25035",
+            "25034",
+            "25033",
+            "25032",
+            "25031",
+            "25030",
+            "25029",
+            "25028",
+            "25027",
+            "25026",
+            "25025",
+            "25024",
+            "25023",
+            "25022",
+            "25021",
+            "25020",
+            "25019",
+            "25018",
+            "25017",
+            "25016",
+            "25015",
+            "25014",
+            "25013",
+            "25012",
+            "25011",
+            "25010",
+            "25009",
+            "25008",
+            "25007",
+            "25006",
+            "25005",
+            "25004",
+            "25003",
+            "25002",
+            "25001",
+            "23075",
+            "23074",
+            "23073",
+            "23072",
+            "23071",
+            "23070",
+            "23069",
+            "23068",
+            "23067",
+            "23066",
+            "23065",
+            "23064",
+            "23063",
+            "23062",
+            "23061",
+            "23060",
+            "23059",
+            "23058",
+            "23057",
+            "23056",
+            "23055",
+            "23054",
+            "23053",
+            "23052",
+            "23051",
+            "23050",
+            "23049",
+            "23048",
+            "23047",
+            "23046",
+            "23045",
+            "23044",
+            "23043",
+            "23042",
+            "23041",
+            "23040",
+            "23039",
+            "23038",
+            "23037",
+            "23036",
+            "23035",
+            "23034",
+            "23033",
+            "23032",
+            "23031",
+            "23030",
+            "23029",
+            "23028",
+            "23027",
+            "23026",
+            "23025",
+            "23024",
+            "23023",
+            "23022",
+            "23021",
+            "23020",
+            "23019",
+            "23018",
+            "23017",
+            "23016",
+            "23015",
+            "23014",
+            "23013",
+            "23012",
+            "23011",
+            "23010",
+            "23009",
+            "23008",
+            "23007",
+            "23006",
+            "23005",
+            "23004",
+            "23003",
+            "23002",
+            "23001",
+            "21051",
+            "21050",
+            "21049",
+            "21048",
+            "21047",
+            "21046",
+            "21045",
+            "21044",
+            "21043",
+            "21042",
+            "21041",
+            "21040",
+            "21039",
+            "21038",
+            "21037",
+            "21036",
+            "21035",
+            "21034",
+            "21033",
+            "21032",
+            "21031",
+            "21030",
+            "21029",
+            "21028",
+            "21027",
+            "21026",
+            "21025",
+            "21024",
+            "21023",
+            "21022",
+            "21021",
+            "21020",
+            "21019",
+            "21018",
+            "21017",
+            "21016",
+            "21015",
+            "21014",
+            "21013",
+            "21012",
+            "21011",
+            "21010",
+            "21009",
+            "21008",
+            "21007",
+            "21006",
+            "21005",
+            "21004",
+            "21003",
+            "21002",
+            "21001",
+            "207d8820-6ceb-4462-b014-4c69156515c1",
+            "1b4698de-d764-414b-8f68-f9ea50a672d3",
+            "19cbd14d9563476eba291f1939bffad8",
+            "197f5950-d73d-461a-8617-c9c363d83d13",
+            "19056",
+            "19055",
+            "19054",
+            "19053",
+            "19052",
+            "19051",
+            "19050",
+            "19049",
+            "19048",
+            "19047",
+            "19046",
+            "19045",
+            "19044",
+            "19043",
+            "19042",
+            "19041",
+            "19040",
+            "19039",
+            "19038",
+            "19037",
+            "19036",
+            "19035",
+            "19034",
+            "19033",
+            "19032",
+            "19031",
+            "19030",
+            "19029",
+            "19028",
+            "19027",
+            "19026",
+            "19025",
+            "19024",
+            "19023",
+            "19022",
+            "19021",
+            "19020",
+            "19019",
+            "19018",
+            "19017",
+            "19016",
+            "19015",
+            "19014",
+            "19013",
+            "19012",
+            "19011",
+            "19010",
+            "19009",
+            "19008",
+            "19007",
+            "19006",
+            "19005",
+            "19004",
+            "19003",
+            "19002",
+            "19001",
+            "17167ec3-1828-4bc3-b073-2cc3e8fa37f7",
+            "17075",
+            "17074",
+            "17073",
+            "17072",
+            "17071",
+            "17070",
+            "17069",
+            "17068",
+            "17067",
+            "17066",
+            "17065",
+            "17064",
+            "17063",
+            "17062",
+            "17061",
+            "17060",
+            "17059",
+            "17058",
+            "17057",
+            "17056",
+            "17055",
+            "17054",
+            "17053",
+            "17052",
+            "17051",
+            "17050",
+            "17049",
+            "17048",
+            "17047",
+            "17046",
+            "17045",
+            "17044",
+            "17043",
+            "17042",
+            "17041",
+            "17040",
+            "17039",
+            "17038",
+            "17037",
+            "17036",
+            "17035",
+            "17034",
+            "17033",
+            "17032",
+            "17031",
+            "17030",
+            "17029",
+            "17028",
+            "17027",
+            "17026",
+            "17025",
+            "17024",
+            "17023",
+            "17022",
+            "17021",
+            "17020",
+            "17019",
+            "17018",
+            "17017",
+            "17016",
+            "17015",
+            "17014",
+            "17013",
+            "17012",
+            "17011",
+            "17010",
+            "17009",
+            "17008",
+            "17007",
+            "17006",
+            "17005",
+            "17004",
+            "17003",
+            "17002",
+            "17001",
+            "158c9bba-beb8-4cb9-8c61-47774aedaee9",
+            "15613744-7fe4-4f39-b215-587a759ed957",
+            "15054",
+            "15053",
+            "15052",
+            "15051",
+            "15050",
+            "15049",
+            "15048",
+            "15047",
+            "15046",
+            "15045",
+            "15044",
+            "15043",
+            "15042",
+            "15041",
+            "15040",
+            "15039",
+            "15038",
+            "15037",
+            "15036",
+            "15035",
+            "15034",
+            "15033",
+            "15032",
+            "15031",
+            "15030",
+            "15029",
+            "15028",
+            "15027",
+            "15026",
+            "15025",
+            "15024",
+            "15023",
+            "15022",
+            "15021",
+            "15020",
+            "15019",
+            "15018",
+            "15017",
+            "15016",
+            "15015",
+            "15014",
+            "15013",
+            "15012",
+            "15011",
+            "15010",
+            "15009",
+            "15008",
+            "15007",
+            "15006",
+            "15005",
+            "15004",
+            "15003",
+            "15002",
+            "15001",
+            "148cb646-9377-4993-99ef-19c241c4c3f1",
+            "13073",
+            "13072",
+            "13071",
+            "13070",
+            "13069",
+            "13068",
+            "13067",
+            "13066",
+            "13065",
+            "13064",
+            "13063",
+            "13062",
+            "13061",
+            "13060",
+            "13059",
+            "13058",
+            "13057",
+            "13056",
+            "13055",
+            "13054",
+            "13053",
+            "13052",
+            "13051",
+            "13050",
+            "13049",
+            "13048",
+            "13047",
+            "13046",
+            "13045",
+            "13044",
+            "13043",
+            "13042",
+            "13041",
+            "13040",
+            "13039",
+            "13038",
+            "13037",
+            "13036",
+            "13035",
+            "13034",
+            "13033",
+            "13032",
+            "13031",
+            "13030",
+            "13029",
+            "13028",
+            "13027",
+            "13026",
+            "13025",
+            "13024",
+            "13023",
+            "13022",
+            "13021",
+            "13020",
+            "13019",
+            "13018",
+            "13017",
+            "13016",
+            "13015",
+            "13014",
+            "13013",
+            "13012",
+            "13011",
+            "13010",
+            "13009",
+            "13008",
+            "13007",
+            "13006",
+            "13005",
+            "13004",
+            "13003",
+            "13002",
+            "13001",
+            "12cab5ca-9a8d-4e95-9b83-ea8131d256b5",
+            "12",
+            "11075",
+            "11074",
+            "11073",
+            "11072",
+            "11071",
+            "11070",
+            "11069",
+            "11068",
+            "11067",
+            "11066",
+            "11065",
+            "11064",
+            "11063",
+            "11062",
+            "11061",
+            "11060",
+            "11059",
+            "11058",
+            "11057",
+            "11056",
+            "11055",
+            "11054",
+            "11053",
+            "11052",
+            "11051",
+            "11050",
+            "11049",
+            "11048",
+            "11047",
+            "11046",
+            "11045",
+            "11044",
+            "11043",
+            "11042",
+            "11041",
+            "11040",
+            "11039",
+            "11038",
+            "11037",
+            "11036",
+            "11035",
+            "11034",
+            "11033",
+            "11032",
+            "11031",
+            "11030",
+            "11029",
+            "11028",
+            "11027",
+            "11026",
+            "11025",
+            "11024",
+            "11023",
+            "11022",
+            "11021",
+            "11020",
+            "11019",
+            "11018",
+            "11017",
+            "11016",
+            "11015",
+            "11014",
+            "11013",
+            "11012",
+            "11011",
+            "11010",
+            "11009",
+            "11008",
+            "11007",
+            "11006",
+            "11005",
+            "11004",
+            "11003",
+            "11002",
+            "11001",
+            "1058",
+            "1057",
+            "1056",
+            "1054",
+            "1053",
+            "1052",
+            "1051",
+            "1050",
+            "1049",
+            "1048",
+            "1047",
+            "1046",
+            "1045",
+            "1044",
+            "1043",
+            "1042",
+            "1041",
+            "1040",
+            "1039",
+            "1038",
+            "1037",
+            "1036",
+            "1035",
+            "1034",
+            "1033",
+            "1032",
+            "1031",
+            "1030",
+            "1029",
+            "1028",
+            "1027",
+            "1026",
+            "1025",
+            "1024",
+            "1023",
+            "1022",
+            "1021",
+            "1020",
+            "1019",
+            "1018",
+            "1017",
+            "1016",
+            "1015",
+            "1014",
+            "1013",
+            "1012",
+            "1011",
+            "1010",
+            "1009",
+            "1008",
+            "1007",
+            "1006",
+            "1005",
+            "1004",
+            "1003",
+            "1002204031",
+            "1002",
+            "1001",
+            "0e716090-7924-4553-8074-513429330f4b",
+            "0e3c3d546d384890ae426923ec1c09fb",
+            "0b5737f6-d571-4ed5-bebd-728e873b0919",
+            "07a96347-b54f-40fd-959e-ee6d0f4276ba",
+            "036a10dd-64d8-4cf2-b4aa-db7a18e23422",
+            "01714c9a-976a-4c57-8fe7-50d7ed575742",
+            "00dfb64b-24a5-4213-93ce-f0e6c85dc15e",
+            "00a11daf-ff8c-4f76-b4c4-0ffc152021d7",
+            "AieFRHgBt3JnB1InV-75",
+            "a28a6802-f428-4927-a8c0-6be232821762",
+            "AyeFRHgBt3JnB1InV-75",
+            "BCeFRHgBt3JnB1InV-75",
+            "learncoder_99_479",
+            "learncoder_99_481",
+            "a583d712cb204e0cb0063d6c40c1a097",
+            "test-3",
+            "test-1",
+            "test-2",
+            "ByeFRHgBt3JnB1InV-75",
+            "BSeFRHgBt3JnB1InV-75",
+            "11",
+            "0f4066df-0509-4244-b1dd-66822ae6c7a4",
+            "1055",
+            "BieFRHgBt3JnB1InV-75"};
+        return result;
+    }
+}
+
+
+/*
+try{
+
+            return ResponseVO.buildSuccess();
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResponseVO.buildFailure("Impl-失败");
+        }
+ */

+ 52 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/RookieService.java

@@ -0,0 +1,52 @@
+package cn.seecoder.seecoderportalserver.service;
+
+import cn.seecoder.seecoderportalcommon.vo.ResponseVO;
+import cn.seecoder.seecoderportalcommon.vo.dto.DailyDTO;
+import cn.seecoder.seecoderportalcommon.vo.dto.RookieInfoDTO;
+
+public interface RookieService {
+    ResponseVO putTest(RookieInfoDTO rookieInfoDTO);
+
+    /**
+     * 根据用户所选感兴趣的方向随机获取每日一题
+     */
+    ResponseVO getDaily(RookieInfoDTO rookieInfoDTO);
+
+    /**
+     * 如果用户完成题目,将对应题号存入数据库
+     * @param pid
+     * @return
+     */
+    ResponseVO finishDaily(int pid);
+
+    ResponseVO fillInfo();
+
+    /**
+     * 确认已经填取过基本信息
+     * @return
+     */
+    ResponseVO confirm();
+
+    /**
+     * 获取虚拟教师的token来创建考试
+     * @return
+     */
+    ResponseVO getVirtualTeacher();
+
+
+    /**
+     * 获取每日一题的具体信息
+     */
+    ResponseVO getDailyInfo(DailyDTO dailyDTO);
+
+    /**
+     * 获取当前用户做题情况
+     */
+    ResponseVO getUserQuestionInfo();
+
+    /**
+     * 测试专用
+     */
+    ResponseVO test();
+
+}

+ 73 - 61
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/TeacherService.java

@@ -1,61 +1,73 @@
-package cn.seecoder.seecoderportalserver.service;
-
-import cn.seecoder.seecoderportalcommon.vo.TeacherState;
-import cn.seecoder.seecoderportalserver.domain.Teacher;
-import cn.seecoder.seecoderportalserver.domain.User;
-import cn.seecoder.seecoderportalserver.repository.TeacherRepository;
-import cn.seecoder.seecoderportalserver.repository.UserRepository;
-import cn.seecoder.seecoderportalserver.web.rest.errors.CustomErrorException;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-import java.util.Optional;
-
-/**
- * @author kunduin
- */
-@Service
-public class TeacherService {
-
-    private final TeacherRepository teacherRepository;
-
-    private final UserRepository userRepository;
-
-    public TeacherService(TeacherRepository teacherRepository, UserRepository userRepository) {
-        this.teacherRepository = teacherRepository;
-        this.userRepository = userRepository;
-    }
-
-    public List<Teacher> findAllByState(TeacherState state) {
-        return teacherRepository.findAllByState(state);
-    }
-
-    @Transactional(rollbackFor = RuntimeException.class)
-    public Teacher updateState(Long id, TeacherState state) {
-        return teacherRepository.findById(id)
-                .map(teacher -> {
-                    teacher.setState(state);
-                    return teacherRepository.save(teacher);
-                }).orElseThrow(CustomErrorException::userIdNotFound);
-    }
-
-    public Optional<Teacher> findByUserId(Long userId) {
-        return userRepository.findById(userId)
-                .map(user -> Optional.ofNullable(user.getTeacherInfo()))
-                .orElseThrow(CustomErrorException::userIdNotFound);
-    }
-
-    public Teacher apply(Teacher teacher) {
-        teacher.setState(TeacherState.IDENTIFYING);
-        return createTeacher(teacher);
-    }
-
-    public Teacher createTeacher(Teacher teacher) {
-        return teacherRepository.save(teacher);
-    }
-
-    public Teacher save(Teacher teacher) {
-        return teacherRepository.save(teacher);
-    }
-}
+package cn.seecoder.seecoderportalserver.service;
+
+import cn.seecoder.seecoderportalcommon.vo.TeacherState;
+import cn.seecoder.seecoderportalserver.domain.Teacher;
+import cn.seecoder.seecoderportalserver.domain.User;
+import cn.seecoder.seecoderportalserver.repository.TeacherRepository;
+import cn.seecoder.seecoderportalserver.repository.UserRepository;
+import cn.seecoder.seecoderportalserver.web.rest.errors.CustomErrorException;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Optional;
+
+import static cn.seecoder.seecoderportalcommon.vo.TeacherState.IDENTIFIED;
+import static cn.seecoder.seecoderportalcommon.vo.UserRole.TEACHER;
+
+/**
+ * @author kunduin
+ */
+@Service
+public class TeacherService {
+
+    private final TeacherRepository teacherRepository;
+
+    private final UserRepository userRepository;
+
+    public TeacherService(TeacherRepository teacherRepository, UserRepository userRepository) {
+        this.teacherRepository = teacherRepository;
+        this.userRepository = userRepository;
+    }
+
+    public List<Teacher> findAllByState(TeacherState state) {
+        return teacherRepository.findAllByState(state);
+    }
+
+    @Transactional(rollbackFor = RuntimeException.class)
+    public Teacher updateState(Long id, TeacherState state) {
+        return teacherRepository.findById(id)
+                .map(teacher -> {
+                    teacher.setState(state);
+
+                    User user1=teacher.getUserDetail();
+                    Long uid=user1.getId();
+                    if (state==IDENTIFIED){
+                        userRepository.findById(uid).map(user -> {
+                            user.setRole(TEACHER);
+                            return userRepository.save(user);
+                        }).orElseThrow(CustomErrorException::userIdNotFound);
+                    }
+                    return teacherRepository.save(teacher);
+                }).orElseThrow(CustomErrorException::userIdNotFound);
+    }
+
+    public Optional<Teacher> findByUserId(Long userId) {
+        return userRepository.findById(userId)
+                .map(user -> Optional.ofNullable(user.getTeacherInfo()))
+                .orElseThrow(CustomErrorException::userIdNotFound);
+    }
+
+    public Teacher apply(Teacher teacher) {
+        teacher.setState(TeacherState.IDENTIFYING);
+        return createTeacher(teacher);
+    }
+
+    public Teacher createTeacher(Teacher teacher) {
+        return teacherRepository.save(teacher);
+    }
+
+    public Teacher save(Teacher teacher) {
+        return teacherRepository.save(teacher);
+    }
+}

+ 136 - 135
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/UserService.java

@@ -1,135 +1,136 @@
-package cn.seecoder.seecoderportalserver.service;
-
-import cn.seecoder.seecoderportalcommon.vo.UserRole;
-import cn.seecoder.seecoderportalcommon.vo.UserVO;
-import cn.seecoder.seecoderportalserver.domain.User;
-import cn.seecoder.seecoderportalserver.mapper.UserMapper;
-import cn.seecoder.seecoderportalserver.repository.UserRepository;
-import cn.seecoder.seecoderportalserver.web.rest.errors.CustomErrorException;
-import com.nju.edu.gitlab.SeecoderGitlabException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
-import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-
-/**
- * @author Kunduin
- */
-@Service
-@Transactional(rollbackFor = RuntimeException.class)
-public class UserService {
-    private static final Logger log = LoggerFactory.getLogger(UserService.class);
-
-    private final UserRepository userRepository;
-    private final PasswordEncoder passwordEncoder;
-    private final UserMapper userMapper;
-    private final AliService aliService;
-    private final GitlabService gitlabService;
-
-    public UserService(
-            UserRepository userRepository, PasswordEncoder passwordEncoder,
-            UserMapper userMapper, AliService aliService, GitlabService gitlabService) {
-        this.userRepository = userRepository;
-        this.passwordEncoder = passwordEncoder;
-        this.userMapper = userMapper;
-        this.aliService = aliService;
-        this.gitlabService = gitlabService;
-    }
-
-    public List<User> findUserByRole(UserRole role) {
-        return userRepository.findByRole(role);
-    }
-
-    @Transactional(rollbackFor = RuntimeException.class)
-    public User updateUserName (Long userId, String name) {
-        return userRepository.findById(userId)
-                .map(user -> {
-                    user.setName(name);
-                    return userRepository.save(user);
-                }).orElseThrow(CustomErrorException::userIdNotFound);
-    }
-
-    @Transactional(rollbackFor = RuntimeException.class)
-    public User updateUserEmail (Long userId, String email) {
-        return userRepository.findById(userId)
-                .map(user -> {
-                    user.setEmail(email);
-                    return userRepository.save(user);
-                }).orElseThrow(CustomErrorException::userIdNotFound);
-    }
-
-    @Transactional(rollbackFor = RuntimeException.class)
-    public User updateUserSignature (Long userId, String signature) {
-        return userRepository.findById(userId)
-                .map(user -> {
-                    user.setSignature(signature);
-                    return userRepository.save(user);
-                }).orElseThrow(CustomErrorException::userIdNotFound);
-    }
-
-    @Transactional(rollbackFor = RuntimeException.class)
-    public void updateUserValid(Long userId, Boolean isValid) {
-        userRepository.findById(userId)
-                .map(user -> {
-                    user.setValid(isValid);
-                    return userRepository.save(user);
-                }).orElseThrow(CustomErrorException::userIdNotFound);
-    }
-
-    @Transactional(rollbackFor = RuntimeException.class)
-    public User registerUser(UserVO userVO, String password, String phoneCode) {
-        checkPhoneMessageOrThrowError(userVO.getPhone(), phoneCode);
-
-        userRepository
-                .findByPhoneOrUsername(userVO.getPhone(), userVO.getUsername())
-                .ifPresent(user -> {
-                    throw CustomErrorException.phoneAlreadyExist();
-                });
-
-        User user = userMapper.userVOToUser(userVO);
-        String encodedPassword = passwordEncoder.encode(password);
-        user.setPassword(encodedPassword);
-        User savedUser = userRepository.save(user);
-
-        try {
-            gitlabService.createGitlabUser(Math.toIntExact(savedUser.getId()), savedUser.getUsername(), password, savedUser.getEmail());
-        } catch (SeecoderGitlabException e) {
-            userRepository.delete(savedUser);
-            throw new CustomErrorException("gitlab 创建异常");
-        }
-
-        log.debug("Created Information for User: {}", savedUser);
-        return savedUser;
-    }
-
-    @Transactional(rollbackFor = RuntimeException.class)
-    public void resetPassword(String phone, String phoneCode, String password) {
-        checkPhoneMessageOrThrowError(phone, phoneCode);
-
-        User user = userRepository
-                .findByPhone(phone)
-                .<UsernameNotFoundException>orElseThrow(() -> {
-                    // TODO: use customException
-                    throw new UsernameNotFoundException("找不到手机用户[" + phone + "]");
-                });
-        user.setPassword(passwordEncoder.encode(password));
-        User savedUser = userRepository.save(user);
-        log.debug("Reset Password for User: {}", savedUser);
-    }
-
-    private void checkPhoneMessageOrThrowError(String phone, String phoneCode) {
-        if (!aliService.checkPhoneMessage(phone, phoneCode)) {
-            throw CustomErrorException.phoneVerificationNotMatch();
-        }
-    }
-
-    public Long findIdByPhone(String phone) {
-        return userRepository.findByPhone(phone)
-                .map(User::getId)
-                .orElseThrow(CustomErrorException::userIdNotFound);
-    }
-}
+package cn.seecoder.seecoderportalserver.service;
+
+import cn.seecoder.seecoderportalcommon.vo.UserRole;
+import cn.seecoder.seecoderportalcommon.vo.UserVO;
+import cn.seecoder.seecoderportalserver.domain.User;
+import cn.seecoder.seecoderportalserver.mapper.UserMapper;
+import cn.seecoder.seecoderportalserver.repository.UserRepository;
+import cn.seecoder.seecoderportalserver.web.rest.errors.CustomErrorException;
+import com.nju.edu.gitlab.SeecoderGitlabException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * @author Kunduin
+ */
+@Service
+@Transactional(rollbackFor = RuntimeException.class)
+public class UserService {
+    private static final Logger log = LoggerFactory.getLogger(UserService.class);
+
+    private final UserRepository userRepository;
+    private final PasswordEncoder passwordEncoder;
+    private final UserMapper userMapper;
+    private final AliService aliService;
+    private final GitlabService gitlabService;
+
+    public UserService(
+            UserRepository userRepository, PasswordEncoder passwordEncoder,
+            UserMapper userMapper, AliService aliService, GitlabService gitlabService) {
+        this.userRepository = userRepository;
+        this.passwordEncoder = passwordEncoder;
+        this.userMapper = userMapper;
+        this.aliService = aliService;
+        this.gitlabService = gitlabService;
+    }
+
+    public List<User> findUserByRole(UserRole role) {
+        return userRepository.findByRole(role);
+    }
+
+    @Transactional(rollbackFor = RuntimeException.class)
+    public User updateUserName (Long userId, String name) {
+        return userRepository.findById(userId)
+                .map(user -> {
+                    user.setName(name);
+                    return userRepository.save(user);
+                }).orElseThrow(CustomErrorException::userIdNotFound);
+    }
+
+    @Transactional(rollbackFor = RuntimeException.class)
+    public User updateUserEmail (Long userId, String email) {
+        return userRepository.findById(userId)
+                .map(user -> {
+                    user.setEmail(email);
+                    return userRepository.save(user);
+                }).orElseThrow(CustomErrorException::userIdNotFound);
+    }
+
+    @Transactional(rollbackFor = RuntimeException.class)
+    public User updateUserSignature (Long userId, String signature) {
+        return userRepository.findById(userId)
+                .map(user -> {
+                    user.setSignature(signature);
+                    return userRepository.save(user);
+                }).orElseThrow(CustomErrorException::userIdNotFound);
+    }
+
+    @Transactional(rollbackFor = RuntimeException.class)
+    public void updateUserValid(Long userId, Boolean isValid) {
+        userRepository.findById(userId)
+                .map(user -> {
+                    user.setValid(isValid);
+                    return userRepository.save(user);
+                }).orElseThrow(CustomErrorException::userIdNotFound);
+    }
+
+    @Transactional(rollbackFor = RuntimeException.class)
+    public User registerUser(UserVO userVO, String password, String phoneCode) {
+        checkPhoneMessageOrThrowError(userVO.getPhone(), phoneCode);
+
+        userRepository
+                .findByPhoneOrUsername(userVO.getPhone(), userVO.getUsername())
+                .ifPresent(user -> {
+                    throw CustomErrorException.phoneAlreadyExist();
+                });
+
+        User user = userMapper.userVOToUser(userVO);
+        String encodedPassword = passwordEncoder.encode(password);
+        user.setPassword(encodedPassword);
+        User savedUser = userRepository.save(user);
+
+        /*try {
+            gitlabService.createGitlabUser(Math.toIntExact(savedUser.getId()), savedUser.getUsername(), password, savedUser.getEmail());
+        } catch (SeecoderGitlabException e) {
+            userRepository.delete(savedUser);
+            throw new CustomErrorException("gitlab 创建异常");
+        }*/
+
+
+        log.debug("Created Information for User: {}",savedUser);
+        return savedUser;
+    }
+
+    @Transactional(rollbackFor = RuntimeException.class)
+    public void resetPassword(String phone, String phoneCode, String password) {
+        checkPhoneMessageOrThrowError(phone, phoneCode);
+
+        User user = userRepository
+                .findByPhone(phone)
+                .<UsernameNotFoundException>orElseThrow(() -> {
+                    // TODO: use customException
+                    throw new UsernameNotFoundException("找不到手机用户[" + phone + "]");
+                });
+        user.setPassword(passwordEncoder.encode(password));
+        User savedUser = userRepository.save(user);
+        log.debug("Reset Password for User: {}", savedUser);
+    }
+
+    private void checkPhoneMessageOrThrowError(String phone, String phoneCode) {
+        if (!aliService.checkPhoneMessage(phone, phoneCode)) {
+            throw CustomErrorException.phoneVerificationNotMatch();
+        }
+    }
+
+    public Long findIdByPhone(String phone) {
+        return userRepository.findByPhone(phone)
+                .map(User::getId)
+                .orElseThrow(CustomErrorException::userIdNotFound);
+    }
+}

+ 71 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/RookieController.java

@@ -0,0 +1,71 @@
+package cn.seecoder.seecoderportalserver.web.rest;
+
+import cn.seecoder.seecoderportalcommon.vo.ResponseVO;
+import cn.seecoder.seecoderportalcommon.vo.dto.DailyDTO;
+import cn.seecoder.seecoderportalcommon.vo.dto.RookieInfoDTO;
+import cn.seecoder.seecoderportalserver.service.RookieService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Api(value = "通关模式测试",tags = "通关模式测试")
+@CrossOrigin
+@RestController
+@RequestMapping("/api/rookie")
+public class RookieController {
+    @Autowired
+    RookieService rookieService;
+    @ApiOperation(value = "获取题库", notes="getTest")
+    @PostMapping("/basicTest")
+    public ResponseVO putTest(@RequestBody RookieInfoDTO rookieInfoDTO){
+        return rookieService.putTest(rookieInfoDTO);
+    }
+
+    @ApiOperation(value = "每日一题",notes = "daily")
+    @PostMapping("/daily")
+    public ResponseVO getDaily(@RequestBody RookieInfoDTO rookieInfoDTO){
+        return rookieService.getDaily(rookieInfoDTO);
+    }
+
+    @ApiOperation(value = "完成每日一题",notes = "finishDaily")
+    @PostMapping("/daily/finish")
+    public ResponseVO finishDaily(@RequestParam int qid){
+        return rookieService.finishDaily(qid);
+    }
+
+    @ApiOperation(value = "填取基本信息",notes = "fillInfo")
+    @PostMapping("/info")
+    public ResponseVO fillInfo(){
+        return rookieService.fillInfo();
+    }
+
+    @ApiOperation(value = "确认已经填取基本信息",notes = "confirmFilled")
+    @GetMapping("/confirm")
+    public ResponseVO confirm(){
+        return rookieService.confirm();
+    }
+
+    @ApiOperation(value = "获取虚拟教师的token来创建考试",notes = "getVirtualTeacher")
+    @GetMapping("/virtualTeacher")
+    public ResponseVO getVirtualTeacher(){
+        return rookieService.getVirtualTeacher();
+    }
+
+    @ApiOperation(value = "获取做完每日一题的做题情况",notes = "getDailyInfo")
+    @PostMapping("/daily/getDailyInfo")
+    public ResponseVO getDailyInfo(@RequestBody DailyDTO dailyDTO){return rookieService.getDailyInfo(dailyDTO);}
+
+    @ApiOperation(value = "获取用户做题信息",notes = "getUserQuestionInfo")
+    @GetMapping("/daily/getUserQuestionInfo")
+    public ResponseVO getUserQuestionInfo(){
+        return rookieService.getUserQuestionInfo();
+    }
+
+    @ApiOperation(value = "测试",notes = "test")
+    @GetMapping("/test")
+    public ResponseVO test(){
+        return rookieService.test();
+    }
+
+}

+ 66 - 66
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/TeacherController.java

@@ -1,66 +1,66 @@
-package cn.seecoder.seecoderportalserver.web.rest;
-
-import cn.seecoder.seecoderportalcommon.vo.TeacherState;
-import cn.seecoder.seecoderportalcommon.vo.TeacherVO;
-import cn.seecoder.seecoderportalserver.domain.Teacher;
-import cn.seecoder.seecoderportalserver.mapper.UserMapper;
-import cn.seecoder.seecoderportalserver.security.DomainUserDetails;
-import cn.seecoder.seecoderportalserver.security.SecurityUtils;
-import cn.seecoder.seecoderportalserver.service.TeacherService;
-import cn.seecoder.seecoderportalserver.utility.OkResponse;
-import cn.seecoder.seecoderportalserver.web.rest.errors.CustomErrorException;
-import org.springframework.web.bind.annotation.*;
-
-import java.security.Principal;
-
-/**
- * @author kunduin
- */
-@RestController
-@RequestMapping("/api/teacher")
-public class TeacherController {
-    private final TeacherService teacherService;
-    private final UserMapper userMapper;
-
-    public TeacherController(TeacherService teacherService, UserMapper userMapper) {
-        this.teacherService = teacherService;
-        this.userMapper = userMapper;
-    }
-
-    @GetMapping("/getInfo")
-    public OkResponse<TeacherVO> getInfo() {
-        DomainUserDetails user = SecurityUtils.getCurrentUser();
-        return teacherService.findByUserId(user.getId())
-                .map(teacher -> OkResponse.of(userMapper.teacherToTeacherVO(teacher)))
-                .orElseThrow(CustomErrorException::teacherNotFound);
-    }
-
-    /**
-     * 申请教师权限
-     */
-    @PostMapping("/apply")
-    public OkResponse<Boolean> apply(@RequestBody TeacherVO teacherVO) {
-        DomainUserDetails user = SecurityUtils.getCurrentUser();
-        Teacher teacher = userMapper.teacherVOToTeacher(teacherVO);
-        teacher.setUserDetail(userMapper.domainToUser(user));
-        teacherService.apply(teacher);
-        return OkResponse.of(true);
-    }
-
-    /**
-     * 重新申请教师权限
-     */
-    @PostMapping("/reapply")
-    public OkResponse<Boolean> reapply(@RequestBody TeacherVO teacherVO) {
-        DomainUserDetails user = SecurityUtils.getCurrentUser();
-        return teacherService.findByUserId(user.getId())
-                .map(teacher -> {
-                    teacher.setState(TeacherState.IDENTIFYING);
-                    teacher.setRealName(teacherVO.getRealName());
-                    teacher.setJobNumber(teacherVO.getJobNumber());
-                    teacher.setOrganization(teacherVO.getOrganization());
-                    teacherService.save(teacher);
-                    return OkResponse.of(true);
-                }).orElseThrow(CustomErrorException::teacherNotFound);
-    }
-}
+package cn.seecoder.seecoderportalserver.web.rest;
+
+import cn.seecoder.seecoderportalcommon.vo.TeacherState;
+import cn.seecoder.seecoderportalcommon.vo.TeacherVO;
+import cn.seecoder.seecoderportalserver.domain.Teacher;
+import cn.seecoder.seecoderportalserver.mapper.UserMapper;
+import cn.seecoder.seecoderportalserver.security.DomainUserDetails;
+import cn.seecoder.seecoderportalserver.security.SecurityUtils;
+import cn.seecoder.seecoderportalserver.service.TeacherService;
+import cn.seecoder.seecoderportalserver.utility.OkResponse;
+import cn.seecoder.seecoderportalserver.web.rest.errors.CustomErrorException;
+import org.springframework.web.bind.annotation.*;
+
+import java.security.Principal;
+
+/**
+ * @author kunduin
+ */
+@RestController
+@RequestMapping("/api/teacher")
+public class TeacherController {
+    private final TeacherService teacherService;
+    private final UserMapper userMapper;
+
+    public TeacherController(TeacherService teacherService, UserMapper userMapper) {
+        this.teacherService = teacherService;
+        this.userMapper = userMapper;
+    }
+
+    @GetMapping("/getInfo")
+    public OkResponse<TeacherVO> getInfo() {
+        DomainUserDetails user = SecurityUtils.getCurrentUser();
+        return teacherService.findByUserId(user.getId())
+                .map(teacher -> OkResponse.of(userMapper.teacherToTeacherVO(teacher)))
+                .orElseThrow(CustomErrorException::teacherNotFound);
+    }
+
+    /**
+     * 申请教师权限
+     */
+    @PostMapping("/apply")
+    public OkResponse<Boolean> apply(@RequestBody TeacherVO teacherVO) {
+        DomainUserDetails user = SecurityUtils.getCurrentUser();
+        Teacher teacher = userMapper.teacherVOToTeacher(teacherVO);
+        teacher.setUserDetail(userMapper.domainToUser(user));
+        teacherService.apply(teacher);
+        return OkResponse.of(true);
+    }
+
+    /**
+     * 重新申请教师权限
+     */
+    @PostMapping("/reapply")
+    public OkResponse<Boolean> reapply(@RequestBody TeacherVO teacherVO) {
+        DomainUserDetails user = SecurityUtils.getCurrentUser();
+        return teacherService.findByUserId(user.getId())
+                .map(teacher -> {
+                    teacher.setState(TeacherState.IDENTIFYING);
+                    teacher.setRealName(teacherVO.getRealName());
+                    teacher.setJobNumber(teacherVO.getJobNumber());
+                    teacher.setOrganization(teacherVO.getOrganization());
+                    teacherService.save(teacher);
+                    return OkResponse.of(true);
+                }).orElseThrow(CustomErrorException::teacherNotFound);
+    }
+}

+ 10 - 9
seecoder-portal-server/src/main/resources/application-dev.yml

@@ -1,9 +1,10 @@
-debug: true
-
-spring:
-  jpa:
-    show-sql: true
-  datasource:
-    url: jdbc:postgresql://centos8.local:5432/portal
-    username: postgres
-    password: 12345678qwerQWER
+debug: true
+
+spring:
+  jpa:
+    show-sql: true
+  datasource:
+    url: jdbc:postgresql://localhost:5432/portal
+    username: root
+    password: 123456
+

+ 26 - 24
seecoder-portal-server/src/main/resources/application.yml

@@ -1,24 +1,26 @@
-
-seec:
-  secret: UenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRW
-  gitlab:
-    url: http://seecoder-gitlab-server.seec.seecoder.cn
-
-
-aliyun:
-  profile:
-    access-key-id: LTAI4FiAXXyNfYJLweBXpKPx
-    access-key-secret: IBoC7KGkZHOvxZQIfQgp98ZY48AVjW
-    region-id: cn-hangzhou
-    sys-domain: dysmsapi.aliyuncs.com
-    sys-version: 2017-05-25
-
-spring:
-  jpa:
-    database: postgresql
-    open-in-view: false
-    hibernate:
-      ddl-auto: update
-  datasource:
-    type: com.zaxxer.hikari.HikariDataSource
-
+
+seec:
+  secret: UenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRWUenM4KGb6DskRW
+  gitlab:
+    url: http://seecoder-gitlab-server.seec.seecoder.cn
+
+
+aliyun:
+  profile:
+    access-key-id: LTAI4FiAXXyNfYJLweBXpKPx
+    access-key-secret: IBoC7KGkZHOvxZQIfQgp98ZY48AVjW
+    region-id: cn-hangzhou
+    sys-domain: dysmsapi.aliyuncs.com
+    sys-version: 2017-05-25
+
+spring:
+  jpa:
+    database: postgresql
+#    open-in-view: false
+    hibernate:
+      ddl-auto: update
+  datasource:
+    type: com.zaxxer.hikari.HikariDataSource
+
+
+