label-to-review 커밋
This commit is contained in:
12
label/label-to-review/.editorconfig
Normal file
12
label/label-to-review/.editorconfig
Normal file
@@ -0,0 +1,12 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.java]
|
||||
max_line_length = 180
|
||||
3
label/label-to-review/.gitattributes
vendored
Normal file
3
label/label-to-review/.gitattributes
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
/gradlew text eol=lf
|
||||
*.bat text eol=crlf
|
||||
*.jar binary
|
||||
74
label/label-to-review/.gitignore
vendored
Normal file
74
label/label-to-review/.gitignore
vendored
Normal file
@@ -0,0 +1,74 @@
|
||||
HELP.md
|
||||
.gradle
|
||||
build/
|
||||
!gradle/wrapper/gradle-wrapper.jar
|
||||
!**/src/main/**/build/
|
||||
!**/src/test/**/build/
|
||||
|
||||
### STS ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
bin/
|
||||
!**/src/main/**/bin/
|
||||
!**/src/test/**/bin/
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
out/
|
||||
!**/src/main/**/out/
|
||||
!**/src/test/**/out/
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
### QueryDSL ###
|
||||
/src/main/generated/
|
||||
**/generated/
|
||||
|
||||
### Logs ###
|
||||
*.log
|
||||
logs/
|
||||
*.log.*
|
||||
|
||||
### OS ###
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
|
||||
### Environment ###
|
||||
.env
|
||||
.env.local
|
||||
.env.*.local
|
||||
application-local.yml
|
||||
application-secret.yml
|
||||
|
||||
### Docker (local testing) ###
|
||||
.dockerignore
|
||||
docker-compose.override.yml
|
||||
|
||||
### Temporary ###
|
||||
*.tmp
|
||||
*.temp
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
!/CLAUDE.md
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,2 +1,2 @@
|
||||
#Mon Feb 02 19:50:45 KST 2026
|
||||
gradle.version=8.14
|
||||
#Tue Feb 24 20:33:13 KST 2026
|
||||
gradle.version=8.14.3
|
||||
|
||||
Binary file not shown.
Binary file not shown.
23
label/label-to-review/Dockerfile-prod
Normal file
23
label/label-to-review/Dockerfile-prod
Normal file
@@ -0,0 +1,23 @@
|
||||
# 1단계에서 만든 로컬 베이스 이미지를 사용
|
||||
FROM 127.0.0.1:18082/kamco-cd/base-java21-gdal:1.0
|
||||
|
||||
# 사용자 설정 (앱 별로 다를 수 있으므로 여기에 유지)
|
||||
ARG UID=1000
|
||||
ARG GID=1000
|
||||
|
||||
RUN groupadd -g ${GID} kcomu \
|
||||
&& useradd -u ${UID} -g ${GID} -m kcomu
|
||||
|
||||
USER kcomu
|
||||
|
||||
# 작업 디렉토리 설정
|
||||
WORKDIR /app
|
||||
|
||||
# JAR 파일 복사 (Jenkins에서 빌드된 ROOT.jar)
|
||||
COPY build/libs/ROOT.jar app.jar
|
||||
|
||||
# 포트 노출
|
||||
EXPOSE 8080
|
||||
# 애플리케이션 실행
|
||||
# dev 프로파일로 실행
|
||||
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=prod", "app.jar"]
|
||||
@@ -1,26 +1,389 @@
|
||||
# LABEL TO REVIEW
|
||||
# KAMCO Change Detection API
|
||||
|
||||
> 어제 라벨링 완료된 것 검수할당 schedule
|
||||
> KAMCO 변화 탐지 시스템을 위한 백엔드 API 서버
|
||||
|
||||
## 📋 프로젝트 소개
|
||||
|
||||
**label-to-review**는 어제 라벨링 완료된 것을 검수 할당하는 schedule 입니다.
|
||||
**kamco-change-detection-api**는 공간 데이터의 변화를 탐지하고 관리하기 위한 RESTful API 서버입니다.
|
||||
JTS(Java Topology Suite)를 활용한 지오메트리 데이터 처리와 PostgreSQL을 통한 공간 데이터 저장을 지원합니다.
|
||||
|
||||
## 🛠️ 기술 스택
|
||||
|
||||
| Category | Technology |
|
||||
|----------|------------|
|
||||
| **Language** | Java 21 |
|
||||
| **Framework** | Spring Boot 3.5.7 |
|
||||
| **Database** | PostgreSQL (with PostGIS) |
|
||||
| **ORM** | Spring Data JPA + Hibernate |
|
||||
| **Query** | QueryDSL 5.0.0 (Jakarta) |
|
||||
| **Geospatial** | JTS (Java Topology Suite) + GeoJSON |
|
||||
| **Connection Pool** | HikariCP |
|
||||
| **Build Tool** | Gradle 8.x |
|
||||
| **Monitoring** | Spring Boot Actuator |
|
||||
| **Container** | Docker + Docker Compose |
|
||||
| **CI/CD** | Jenkins |
|
||||
|
||||
## 🚀 시작하기
|
||||
TrainingDataLabelJobService 의 assignReviewerYesterdayLabelComplete 메소드가 매일 00:00분에 schedule 실행됨
|
||||
|
||||
```bash
|
||||
./gradlew spotlessApply
|
||||
```
|
||||
```bash
|
||||
./gradlew clean build
|
||||
```
|
||||
```bash
|
||||
Java -jar label-to-review.jar \
|
||||
```
|
||||
### 필수 요구사항
|
||||
|
||||
- Java 21 (JDK 21)
|
||||
- PostgreSQL 12+ (PostGIS 확장 필요)
|
||||
- Gradle 8.x (또는 Gradle Wrapper 사용)
|
||||
- Docker & Docker Compose (선택사항)
|
||||
|
||||
### 로컬 환경 설정
|
||||
|
||||
1. **저장소 클론**
|
||||
```bash
|
||||
git clone https://10.100.0.10:3210/dabeeo/kamco-dabeeo-backoffice.git
|
||||
cd kamco-back
|
||||
```
|
||||
|
||||
2. **데이터베이스 설정**
|
||||
|
||||
PostgreSQL 데이터베이스를 준비하고 `src/main/resources/application-local.yml`을 생성:
|
||||
|
||||
```yaml
|
||||
spring:
|
||||
config:
|
||||
activate:
|
||||
on-profile: local
|
||||
datasource:
|
||||
url: jdbc:postgresql://localhost:5432/your_database
|
||||
username: your_username
|
||||
password: your_password
|
||||
```
|
||||
|
||||
> **참고**: `application-local.yml`은 `.gitignore`에 포함되어 있어 Git에 커밋되지 않습니다.
|
||||
|
||||
3. **빌드 및 실행**
|
||||
|
||||
```bash
|
||||
# 빌드
|
||||
./gradlew build
|
||||
|
||||
# 실행 (local 프로파일)
|
||||
./gradlew bootRun
|
||||
|
||||
# 또는 JAR 파일로 실행
|
||||
java -jar build/libs/ROOT.jar
|
||||
```
|
||||
|
||||
서버가 시작되면 http://localhost:8080 에서 접근 가능합니다.
|
||||
|
||||
## ⚙️ 프로파일 설정
|
||||
|
||||
애플리케이션은 환경별로 다른 설정을 사용합니다:
|
||||
|
||||
| 프로파일 | 환경 | 포트 | 설정 파일 |
|
||||
|---------|------|------|-----------|
|
||||
| `local` | 로컬 개발 | 8080 | `application.yml` (기본) |
|
||||
| `dev` | 개발 서버 | 7100 | `application-dev.yml` |
|
||||
| `prod` | 운영 서버 | 8080 | `application-prod.yml` |
|
||||
|
||||
### 프로파일 활성화
|
||||
|
||||
```bash
|
||||
# 개발 환경으로 실행
|
||||
./gradlew bootRun --args='--spring.profiles.active=dev'
|
||||
|
||||
# JAR 실행 시
|
||||
java -jar build/libs/ROOT.jar --spring.profiles.active=dev
|
||||
```
|
||||
|
||||
## 🧪 테스트
|
||||
|
||||
```bash
|
||||
# 전체 테스트 실행
|
||||
./gradlew test
|
||||
|
||||
# 특정 테스트 클래스 실행
|
||||
./gradlew test --tests com.kamco.cd.kamcoback.KamcoBackApplicationTests
|
||||
|
||||
# 테스트 리포트 확인
|
||||
open build/reports/tests/test/index.html
|
||||
```
|
||||
|
||||
## 📦 빌드
|
||||
|
||||
```bash
|
||||
# 전체 빌드 (테스트 포함)
|
||||
./gradlew clean build
|
||||
|
||||
# 테스트 제외 빌드 (CI/CD에서 사용)
|
||||
./gradlew clean build -x test
|
||||
|
||||
# JAR 파일만 생성
|
||||
./gradlew bootJar
|
||||
```
|
||||
|
||||
빌드된 JAR 파일: `build/libs/ROOT.jar`
|
||||
|
||||
## 🐳 Docker로 실행하기
|
||||
|
||||
### Docker Compose 사용 (권장)
|
||||
|
||||
```bash
|
||||
# 빌드 및 실행
|
||||
docker-compose -f docker-compose-dev.yml up -d
|
||||
|
||||
# 로그 확인
|
||||
docker-compose -f docker-compose-dev.yml logs -f
|
||||
|
||||
# 중지
|
||||
docker-compose -f docker-compose-dev.yml down
|
||||
```
|
||||
|
||||
### Docker만 사용
|
||||
|
||||
```bash
|
||||
# 이미지 빌드
|
||||
docker build -f Dockerfile-dev -t kamco-changedetection-api:latest .
|
||||
|
||||
# 컨테이너 실행
|
||||
docker run -d \
|
||||
--name kamco-changedetection-api \
|
||||
-p 7100:8080 \
|
||||
kamco-changedetection-api:latest
|
||||
|
||||
# 로그 확인
|
||||
docker logs -f kamco-changedetection-api
|
||||
```
|
||||
|
||||
## 📡 API 및 모니터링
|
||||
|
||||
### Actuator 헬스체크
|
||||
|
||||
애플리케이션 상태를 확인할 수 있는 엔드포인트가 제공됩니다:
|
||||
|
||||
```bash
|
||||
# 헬스체크
|
||||
curl http://localhost:8080/monitor/health
|
||||
|
||||
# 응답 예시
|
||||
{
|
||||
"status": "UP",
|
||||
"components": {
|
||||
"db": {
|
||||
"status": "UP"
|
||||
},
|
||||
"diskSpace": {
|
||||
"status": "UP"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Actuator 엔드포인트**:
|
||||
- `/monitor/health` - 애플리케이션 헬스 체크
|
||||
- `/monitor/health/readiness` - Kubernetes Readiness Probe
|
||||
- `/monitor/health/liveness` - Kubernetes Liveness Probe
|
||||
|
||||
## 🏗️ 프로젝트 구조
|
||||
|
||||
```
|
||||
kamco-back/
|
||||
├── src/
|
||||
│ ├── main/
|
||||
│ │ ├── java/com/kamco/cd/kamcoback/
|
||||
│ │ │ ├── KamcoBackApplication.java # 메인 애플리케이션
|
||||
│ │ │ ├── config/ # 설정 클래스
|
||||
│ │ │ │ ├── WebConfig.java # Jackson, CORS 설정
|
||||
│ │ │ │ └── StartupLogger.java # 시작 로그
|
||||
│ │ │ ├── common/ # 공통 유틸리티
|
||||
│ │ │ │ └── utils/geometry/ # GeoJSON 직렬화
|
||||
│ │ └── resources/
|
||||
│ │ ├── application.yml # 기본 설정 + local/prod
|
||||
│ │ └── application-dev.yml # 개발 환경 설정
|
||||
│ └── test/ # 테스트 코드
|
||||
├── build.gradle # Gradle 빌드 설정
|
||||
├── Dockerfile-dev # Docker 이미지 정의
|
||||
├── docker-compose-dev.yml # Docker Compose 설정
|
||||
├── Jenkinsfile-dev # Jenkins CI/CD 파이프라인
|
||||
├── .editorconfig # 코드 스타일 설정
|
||||
├── intellij-java-google-style.xml # IntelliJ 코드 스타일
|
||||
└── README.md # 이 문서
|
||||
```
|
||||
|
||||
## 🎨 코드 스타일
|
||||
|
||||
프로젝트는 **Google Java Style Guide**를 따르며, 일부 커스터마이징이 적용되어 있습니다:
|
||||
|
||||
- **들여쓰기**: 탭 (표시 너비: 2칸)
|
||||
- **최대 줄 길이**: 100자
|
||||
- **줄 바꿈**: LF (Unix 스타일)
|
||||
- **인코딩**: UTF-8
|
||||
|
||||
### IntelliJ IDEA 설정
|
||||
|
||||
1. `Preferences` → `Editor` → `Code Style` → `Java`
|
||||
2. `Import Scheme` → `intellij-java-google-style.xml` 선택
|
||||
|
||||
## 📐 주요 기능
|
||||
|
||||
### GeoJSON 지원
|
||||
|
||||
JTS Geometry 타입이 자동으로 GeoJSON 형식으로 직렬화/역직렬화됩니다:
|
||||
|
||||
```java
|
||||
@Entity
|
||||
public class SpatialEntity {
|
||||
@Column(columnDefinition = "geometry(Point,4326)")
|
||||
private Point location;
|
||||
|
||||
@Column(columnDefinition = "geometry(Polygon,4326)")
|
||||
private Polygon boundary;
|
||||
}
|
||||
```
|
||||
|
||||
**특징**:
|
||||
- 16자리 정밀도 (기본 8자리에서 증가)
|
||||
- Point, Polygon, Geometry 타입 지원
|
||||
- 자동 JSON 변환 (Jackson ObjectMapper 설정)
|
||||
|
||||
### QueryDSL 설정
|
||||
|
||||
타입 안전한 쿼리를 위해 QueryDSL이 설정되어 있습니다:
|
||||
|
||||
```java
|
||||
// Q-class는 빌드 시 자동 생성됨
|
||||
QSpatialEntity entity = QSpatialEntity.spatialEntity;
|
||||
|
||||
List<SpatialEntity> results = queryFactory
|
||||
.selectFrom(entity)
|
||||
.where(entity.name.eq("example"))
|
||||
.fetch();
|
||||
```
|
||||
|
||||
**Q-class 생성 위치**: `build/generated/sources/annotationProcessor/java/main`
|
||||
|
||||
## 🚢 배포
|
||||
|
||||
### Jenkins CI/CD
|
||||
|
||||
Jenkins를 통한 자동 배포가 설정되어 있습니다 (`Jenkinsfile-dev`):
|
||||
|
||||
**파이프라인 단계**:
|
||||
1. **Checkout**: Git 저장소에서 코드 가져오기 (develop 브랜치)
|
||||
2. **Get Commit Hash**: 버전 태깅용 커밋 해시 추출
|
||||
3. **Build**: Gradle로 JAR 빌드 (테스트 제외)
|
||||
4. **Docker Build & Deploy**: Docker 이미지 빌드 및 배포
|
||||
5. **Cleanup**: 오래된 이미지 정리
|
||||
|
||||
**자동 기능**:
|
||||
- Git 커밋 해시로 이미지 태깅
|
||||
- 기존 컨테이너 자동 교체
|
||||
- 헬스체크로 배포 검증
|
||||
- 오래된 이미지 자동 정리 (최신 5개 유지)
|
||||
|
||||
### 수동 배포
|
||||
|
||||
```bash
|
||||
# 1. 빌드
|
||||
./gradlew clean build -x test
|
||||
|
||||
# 2. Docker 이미지 빌드
|
||||
docker-compose -f docker-compose-dev.yml build
|
||||
|
||||
# 3. 배포
|
||||
docker-compose -f docker-compose-dev.yml up -d
|
||||
|
||||
# 4. 헬스체크
|
||||
curl http://localhost:7100/monitor/health
|
||||
```
|
||||
|
||||
## 🔧 개발 가이드
|
||||
|
||||
### 새로운 엔티티 추가
|
||||
|
||||
1. `domain` 패키지에 엔티티 클래스 생성
|
||||
2. JPA 어노테이션 설정
|
||||
3. 빌드하여 Q-class 자동 생성
|
||||
4. Repository 인터페이스 작성 (QueryDSL custom 메서드 포함)
|
||||
|
||||
### GeoJSON 데이터 다루기
|
||||
|
||||
```java
|
||||
// Controller에서 GeoJSON 수신/반환
|
||||
@PostMapping("/spatial")
|
||||
public ResponseEntity<SpatialEntity> create(@RequestBody SpatialEntity entity) {
|
||||
// Point, Polygon이 자동으로 GeoJSON에서 변환됨
|
||||
return ResponseEntity.ok(spatialService.save(entity));
|
||||
}
|
||||
|
||||
// 응답 예시
|
||||
{
|
||||
"id": 1,
|
||||
"location": {
|
||||
"type": "Point",
|
||||
"coordinates": [126.9779692, 37.5662952]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 데이터베이스 마이그레이션
|
||||
|
||||
현재 설정은 `ddl-auto: validate`이므로 스키마 변경 시:
|
||||
|
||||
1. 수동으로 마이그레이션 스크립트 작성
|
||||
2. 또는 개발 중에는 `ddl-auto: update` 사용 (주의 필요)
|
||||
3. 운영 환경에서는 반드시 `validate` 유지
|
||||
|
||||
## 📝 환경 변수
|
||||
|
||||
Docker Compose 또는 시스템 환경 변수로 설정 가능:
|
||||
|
||||
| 변수명 | 설명 | 기본값 |
|
||||
|--------|------|--------|
|
||||
| `SPRING_PROFILES_ACTIVE` | 활성 프로파일 | `local` |
|
||||
| `IMAGE_TAG` | Docker 이미지 태그 | `latest` |
|
||||
| `TZ` | 타임존 | `Asia/Seoul` |
|
||||
|
||||
## 🐛 트러블슈팅
|
||||
|
||||
### DataSource 설정 오류
|
||||
|
||||
```
|
||||
Failed to configure a DataSource: 'url' attribute is not specified
|
||||
```
|
||||
|
||||
**해결 방법**:
|
||||
1. 프로파일 이름 확인: `dev`, `prod`, `local` (철자 정확히)
|
||||
2. 해당 프로파일의 `application-{profile}.yml`에 datasource 설정 존재 확인
|
||||
3. PostgreSQL 접속 정보 확인
|
||||
|
||||
### Q-class가 생성되지 않음
|
||||
|
||||
```bash
|
||||
# 강제로 Q-class 재생성
|
||||
./gradlew clean compileJava
|
||||
```
|
||||
|
||||
생성 위치: `build/generated/sources/annotationProcessor/java/main`
|
||||
|
||||
### Docker 컨테이너 헬스체크 실패
|
||||
|
||||
```bash
|
||||
# 컨테이너 로그 확인
|
||||
docker logs kamco-changedetection-api
|
||||
|
||||
# 직접 헬스체크
|
||||
docker exec kamco-changedetection-api curl http://localhost:8080/monitor/health
|
||||
```
|
||||
|
||||
## 📚 참고 문서
|
||||
|
||||
- [Spring Boot 3.5.7 Documentation](https://docs.spring.io/spring-boot/3.5.7/reference/)
|
||||
- [Spring Data JPA](https://docs.spring.io/spring-data/jpa/reference/)
|
||||
- [QueryDSL](https://querydsl.com/static/querydsl/latest/reference/html/)
|
||||
- [JTS Topology Suite](https://github.com/locationtech/jts)
|
||||
- [GeoJSON Specification](https://geojson.org/)
|
||||
|
||||
## 📄 라이선스
|
||||
|
||||
Copyright © 2024 KAMCO. All rights reserved.
|
||||
|
||||
## 👥 기여자
|
||||
|
||||
- Development Team at KAMCO
|
||||
|
||||
@@ -6,8 +6,7 @@ plugins {
|
||||
}
|
||||
|
||||
group = 'com.kamco.cd'
|
||||
version = '0.0.1-SNAPSHOT'
|
||||
description = 'label-to-review'
|
||||
description = 'kamco-label-to-review'
|
||||
|
||||
java {
|
||||
toolchain {
|
||||
@@ -15,14 +14,6 @@ java {
|
||||
}
|
||||
}
|
||||
|
||||
bootJar {
|
||||
archiveFileName = "label-to-review.jar"
|
||||
}
|
||||
|
||||
jar {
|
||||
enabled = false // plain.jar 안 만들기(혼동 방지)
|
||||
}
|
||||
|
||||
configurations {
|
||||
compileOnly {
|
||||
extendsFrom annotationProcessor
|
||||
@@ -69,15 +60,15 @@ dependencies {
|
||||
// actuator
|
||||
implementation 'org.springframework.boot:spring-boot-starter-actuator'
|
||||
|
||||
// Redis
|
||||
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
|
||||
|
||||
// SpringDoc OpenAPI (Swagger)
|
||||
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.7.0'
|
||||
|
||||
// Apache Commons Compress for archive handling
|
||||
implementation 'org.apache.commons:commons-compress:1.26.0'
|
||||
|
||||
// crypto
|
||||
implementation 'org.mindrot:jbcrypt:0.4'
|
||||
|
||||
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
|
||||
implementation 'org.reflections:reflections:0.10.2'
|
||||
|
||||
@@ -89,10 +80,15 @@ dependencies {
|
||||
configurations.configureEach {
|
||||
exclude group: 'javax.media', module: 'jai_core'
|
||||
}
|
||||
//
|
||||
//tasks.named('test') {
|
||||
// useJUnitPlatform()
|
||||
//}
|
||||
|
||||
tasks.named('test') {
|
||||
useJUnitPlatform()
|
||||
}
|
||||
|
||||
//bootJar {
|
||||
// archiveFileName = 'ROOT.jar'
|
||||
//}
|
||||
|
||||
// Spotless configuration for code formatting (2-space indent)
|
||||
spotless {
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user