LH 매입임대 자료

한국토지주택공사(LH)에서 매입하여 임대하는 주택의 현황자료는 공공데이터포털에서 구할 수 있다.

자료 명 링크 최신 자료

한국토지주택공사_임대주택공급현황_매입임대

(이하 임대주택공급현황자료)

https://www.data.go.kr/data/15117757/fileData.do 한국토지주택공사_임대주택공급현황_매입임대_20241231.csv

한국토지주택공사_(매입임대)마이홈포털 기존임대주택 목록

(이하 마이홈포털 자료)

https://www.data.go.kr/data/15084927/fileData.do 한국토지주택공사_(매입임대)마이홈포털 기존임대주택 목록_20250318.csv

위 링크에서 다운로드한 자료를 ./_raw 폴더에 저장하여 분석을 진행한다.

library(dplyr, quietly = T, warn.conflicts = F)
csvLst = list.files("./_raw", full.names = T, pattern = "csv$")
csvLst
[1] "./_raw/한국토지주택공사_(매입임대)마이홈포털 기존임대주택 목록_20250318.csv"
[2] "./_raw/한국토지주택공사_임대주택공급현황_매입임대_20241231.csv"             

마이홈포털 자료를 읽으면 다음과 같다.

# 한국토지주택공사_(매입임대)마이홈포털 기존임대주택 목록
dat1 = read.csv2(csvLst[1], header = F, fileEncoding = "cp949", sep = ",", colClasses = rep("character", 19))
dat1

위 자료는 임대주택의 위치, 공급 세대수, 형명 및 공급면적, 임대료로 구성되어 있다. 공급 세대수는 형명에 따라 기재되지 않고 해당 주택의 전체 세대수가 각 형명에 반복 기재되어 있는 듯하다.

또한 임대사업자가 기재되어 있으며 다음과 같다.

dat1$V8 %>% .[2:length(.)] %>% unique()
 [1] "LH서울"                 "SH공사"                 "부산도시공사"           "LH부산울산"             "LH대구경북"            
 [6] "대구도시개발공사"       "인천도시공사"           "LH인천"                 "LH광주전남"             "광주광역시도시공사"    
[11] "LH대전충남"             "대전도시공사"           "LH세종"                 "LH경기남부"             "경기주택도시공사"      
[16] "LH경기북부"             "LH충북"                 "충남개발공사"           "LH경남"                 "제주특별자치도개발공사"
[21] "LH제주"                 "LH강원"                 "LH전북"                

위 자료에는 LH뿐만 아니라 지방공사가 공급하는 주택도 포함되어 있다.

임대주택공급현황자료를 읽으면 다음과 같다.

# 한국토지주택공사_임대주택공급현황_매입임대
dat2 = read.csv2(csvLst[2], header = F, fileEncoding = "cp949", sep = ",", colClasses = rep("character", 23))
dat2

위 자료는 임대주택의 위치, 동/호, 공급면적, 사용승인일, 매입년도, 테마형주택여부, 임대취득유형 등을 각 호실별로 기재한 듯하다. 짐작이 맞다면 공급 세대수는 행의 수와 같다.

한편, 기재된 임대사업자는 다음과 같다.

dat2$V2 %>% .[2:length(.)] %>% unique()
 [1] "서울지역본부"     "부산울산지역본부" "인천지역본부"     "경기남부지역본부" "강원지역본부"     "충북지역본부"     "대전충남지역본부"
 [8] "전북지역본부"     "광주전남지역본부" "대구경북지역본부" "경남지역본부"     "제주지역본부"     "세종특별본부"     "경기북부지역본부"

위 자료에 기재된 임대사업자는 모두 LH의 지역본부이다. 즉, LH가 공급한 임대주택만 있는 자료이다.

한편, 임대취득유형을 살펴보면 다음과 같다.

dat2$V13 %>% .[2:length(.)] %>% unique()
 [1] "청년매입임대"             "주민공동시설등"           "기존주택매입임대"         "신혼·신생아매입임대"    
 [5] "신혼·신생아매입임대2"    "상가"                     "기숙사형매입임대"         "든든전세주택"            
 [9] "고령자임대"               "다자녀임대"               "청년신혼부부매입임대리츠" ""                        
[13] "일반리모델링"             "해당없음"                

임대취득유형 중 주택 외 부대시설인 주민공동시설등, 상가는 주택공급량 집계 때 제외한다.

LH 매입임대 공급량

위 두 자료로 LH에서 공급한 매입임대의 세대수를 계산하면 다음과 같다.

library(stringr, quietly = T, warn.conflicts = F)
sd_dat1 = dat1 %>% select(V4, V5, V6, V7, V8) %>% filter(str_detect(V8, "LH")) %>% 
  unique() %>% .$V6 %>% as.numeric() %>% sum(na.rm = T) 
sd_dat2 = dat2 %>% .[2:nrow(.), ] %>% filter(!V13 %in% c("주민공동시설등", "상가")) %>% nrow()
bigFrm = function(x) formatC(x, format = "f", big.mark = ",", digits = 0)
cat(
  paste0("마이홈포털 자료:       ",  bigFrm(sd_dat1), "\n",
         "임대주택공급현황 자료: ",  bigFrm(sd_dat2), "\n",
         "자료 차이:              ", bigFrm(abs(sd_dat2 - sd_dat1)), "\n")
)
마이홈포털 자료:       172,260
임대주택공급현황 자료: 182,862
자료 차이:              10,602

마이홈포털 자료가 1만 세대가량 작다. 두 자료에 차이가 있는 이유를 아래처럼 살펴본다.

두 자료를 연결하여 비교하기 위한 고유값인 주소의 형식을 살펴보면 다음과 같다.

cat(
  paste0("주소형식 대조\n", 
         "dat1 : ", dat1$V4[2], "\n",
         "dat2 : ", dat2$V8[2], "\n")
)

주소형식을 살펴보면 dat1에는 기본주소(도로명 + 건물번호), dat2에는 상세주소(기본주소 + 건물명)가 기재되어 있는 듯하다.

dat1의 주소가 모두 기본주소 기반인지 살펴보면 다음과 같다.

dat1_juso = filter(dat1, str_detect(V8, "LH")) %>% 
  select(V4) %>% unique() %>% 
  mutate(base = str_extract(V4, "^[^(]*((길|로) [0-9\\-]+)")) # base에 기본주소 추출
dat1_juso %>% filter(is.na(base))

dat1의 주소에서 기본주소 형태를 찾기 어려운 행의 개수가 0이다. 즉, 모든 주소가 기본주소 기반이다.

dat2의 주소가 모두 기본주소 기반인지 살펴보면 다음과 같다.

dat2_juso = dat2[2:nrow(dat2), ] %>% filter(!V13 %in% c("주민공동시설등", "상가")) %>% 
  select(V8, V15) %>% unique() %>% 
  mutate(base = str_extract(V8, "^[^(]*((길|로) [0-9\\-]+)"))
names(dat2_juso) = c("기재주소", "사용승인일", "기본주소")
dat2_juso %>% filter(is.na(기본주소))

dat2의 주소 중 1개는 건물번호 누락, 3개는 지번주소로 기재되어 보완 및 수정이 필요하다.

주소정보누리집에서 영등포구 가마산로80가길을 검색하면 폐지주소로 나타난다. 사용승인일을 고려할 때 멸실주택으로 여겨진다.

2개 동(棟)으로 여겨지는 권선동 1022-1의 도로명주소는 경기도 수원시 권선구 권선로 719로 검색된다.

인계동 1024-2의 도로명주소는 경기도 수원시 팔달구 인계로94번길 39-16로 검색된다.

지금까지 검토한 결과를 다음과 같이 반영한다.

dat1_prime = dat1[2:nrow(dat1), ] %>% 
  mutate(base = str_extract(V4, "^[^(]*((길|로) [0-9\\-]+)"))
dat2_prime = dat2[2:nrow(dat2), ] %>% 
  mutate(base = str_extract(V8, "^[^(]*((길|로) [0-9\\-]+)"))
dat2_prime[dat2_prime$V8 %>% 
             str_detect("경기도 수원시 권선구 권선동 1022-1")
           , ]$base = "경기도 수원시 권선구 권선로 719"
dat2_prime[dat2_prime$V8 == "경기도 수원시 팔달구 인계동 1024-2"
           , ]$base = "경기도 수원시 팔달구 인계로94번길 39-16"
dat2_prime = dat2_prime %>% filter(!is.na(base)) # 영등포구 가마산로80가길 삭제
cat(
  paste0("기본주소 확인\n",
  "dat1_prime: ", dat1_prime$base[1], "\n", 
  "dat2_prime: ", dat2_prime$base[1])
)
기본주소 확인
dat1_prime: 서울특별시 종로구 난계로29길 13
dat2_prime: 서울특별시 종로구 난계로29길 13

마이홈포털자료(dat1)에 있으나 임대주택공급현황(dat2)에 없는 주택

기본주소를 매개로 \(D1 = dat1 - dat2\)를 구하면 다음과 같다.

D1 = merge(
  dat1_prime %>% select(base, V6) %>% unique() # V6(세대수)
  , dat2_prime %>% select(base) %>% unique() %>% mutate(dat2 = T)
  , by = "base", all.x = T
) %>% filter(is.na(dat2))
D1
cat(
  paste0("D1 주택수:  ", bigFrm(nrow(D1)), "개\n",
         "D1 공급량: ", bigFrm(sum(as.numeric(D1$V6))), "가구·세대")
)
D1 주택수:  3,998개
D1 공급량: 46,448가구·세대

마이홈포털자료에 있으나 임대주택공급현황에 없는 주택은 3,998개이며, 공급량으로는 4.6만 가구·세대에 달한다.

마이홈포털자료(dat1)에 없으나 임대주택공급현황(dat2)에 있는 주택

기본주소를 매개로 \(D2 = dat2 - dat1\)를 구하면 다음과 같다.

D2 = merge(
  dat2_prime %>% select(base) %>% 
    group_by(base) %>% summarise(sd = n())
  , dat1_prime %>% select(base) %>% unique() %>% mutate(dat1 = T)
  , by = "base", all.x = T
) %>% filter(is.na(dat1))
D2
cat(
  paste0("D2 주택수:   ", bigFrm(nrow(D2)), "개\n",
         "D2 공급량: ", bigFrm(sum(D2$sd)), "가구·세대")
)
D2 주택수:   746개
D2 공급량: 8,164가구·세대

마이홈포털자료에 없으나 임대주택공급현황에 없는 주택은 3,998개이며, 공급량으로는 4.6만 가구·세대에 달한다.

각 주택별 공급량 차이

기본주소를 매개로 \(D1.2 = dat1 \cap dat2\)를 구하고 \(D1.2\)에 속하는 각 주택별 마이홈포털자료의 공급량과 임대주택공급현황의 공급량 차이를 구하면 다음과 같다.

D1.2 = merge(
  dat1_prime %>% select(base, V6) %>% unique() %>% 
    mutate(sd1 = as.numeric(V6)) %>% select(-V6)
  , dat2_prime %>% select(base) %>% 
    group_by(base) %>% summarise(sd2 = n())
  , by = "base"
) %>% mutate(SDdiff = sd1 - sd2)
D1.2
D1.2_1BiggerThan2 = D1.2 %>% filter(SDdiff > 0)
D1.2_1BiggerThan2
D1.2_2BiggerThan1 = D1.2 %>% filter(SDdiff < 0)
D1.2_2BiggerThan1
cat(
  paste0(
    "D1.2(마이홈포털과 임대주택공급현황에 모두 기재)\n", 
    " - 주택수:                    ", bigFrm(nrow(D1.2)), "개\n",
    " - 공급량(마이홈포털):       ", bigFrm(sum(D1.2$sd1)), "가구·세대\n",
    " - 공급량(임대주택공급현황): ", bigFrm(sum(D1.2$sd2)), "가구·세대\n",
    "마이홈포털 > 임대주택공급현황\n",
    " - 주택수:                     ", bigFrm(nrow(D1.2_1BiggerThan2)), "개\n",
    " - 공급량(마이홈포털):       ", bigFrm(sum(D1.2_1BiggerThan2$sd1)), "가구·세대\n",
    " - 공급량(임대주택공급현황): ", bigFrm(sum(D1.2_1BiggerThan2$sd2)), "가구·세대\n",
    " - 공급량 차이:              ", bigFrm(sum(D1.2_1BiggerThan2$sd1) - 
                                         sum(D1.2_1BiggerThan2$sd2)), "가구·세대\n",
    "마이홈포털 < 임대주택공급현황\n",
    " - 주택수:                    ", bigFrm(nrow(D1.2_2BiggerThan1)), "개\n",
    " - 공급량(마이홈포털):       ", bigFrm(sum(D1.2_2BiggerThan1$sd1)), "가구·세대\n",
    " - 공급량(임대주택공급현황): ", bigFrm(sum(D1.2_2BiggerThan1$sd2)), "가구·세대\n",
    " - 공급량 차이:              ", bigFrm(sum(D1.2_2BiggerThan1$sd2) - 
                                         sum(D1.2_2BiggerThan1$sd1)), "가구·세대\n"
  )
)
D1.2(마이홈포털과 임대주택공급현황에 모두 기재)
 - 주택수:                    16,262개
 - 공급량(마이홈포털):       167,191가구·세대
 - 공급량(임대주택공급현황): 212,576가구·세대
마이홈포털 > 임대주택공급현황
 - 주택수:                     295개
 - 공급량(마이홈포털):       7,723가구·세대
 - 공급량(임대주택공급현황): 2,602가구·세대
 - 공급량 차이:              5,121가구·세대
마이홈포털 < 임대주택공급현황
 - 주택수:                    3,135개
 - 공급량(마이홈포털):       30,226가구·세대
 - 공급량(임대주택공급현황): 80,732가구·세대
 - 공급량 차이:              50,506가구·세대

각 자료에 기재된 공급량에 차이가 있는 것이 3.4천(295+3,135) 개가 넘는다. 이 중 마이홈포털 기재가 더 큰 것이 295개(공급량 차이 5,121), 임대주택공급현황 기재가 더 큰 것이 3,135개이다.

한쪽 자료에만 기재된 주택이 있고, 동일 주택의 공급량 기재가 자료에 따라 다른 이유는 아래처럼 여겨진다.

  • 위치를 기본주소만으로 표기하면 여러 동이 있는 주택 집계 때 오류발생 우려 있음

  • 이미 멸실된 주택이 계속 자료에 남아 있을 수 있음(주택 멸실 미반영)

  • 단순 누락, 기재 오류 등

다음 분석 …

LS0tDQp0aXRsZTogIuyXsOq1rOuFuO2KuCjrp6TsnoXsnoTrjIDrtoTshJ0gMSk6TEgg66ek7J6F7J6E64yAIOqzteq4ie2YhO2ZqSINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiMjIyBMSCDrp6TsnoXsnoTrjIAg7J6Q66OMDQoNCu2VnOq1re2GoOyngOyjvO2DneqzteyCrChMSCnsl5DshJwg66ek7J6F7ZWY7JesIOyehOuMgO2VmOuKlCDso7ztg53snZgg7ZiE7Zmp7J6Q66OM64qUIOqzteqzteuNsOydtO2EsO2PrO2EuOyXkOyEnCDqtaztlaAg7IiYIOyeiOuLpC4NCg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwg7J6Q66OMIOuqhSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDrp4HtgawgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg7LWc7IugIOyekOujjCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kw0KfCDtlZzqta3thqDsp4Dso7ztg53qs7Xsgqxf7J6E64yA7KO87YOd6rO16riJ7ZiE7ZmpX+unpOyeheyehOuMgCAgICAgICAgICAgICAgIHwgPGh0dHBzOi8vd3d3LmRhdGEuZ28ua3IvZGF0YS8xNTExNzc1Ny9maWxlRGF0YS5kbz4gfCDtlZzqta3thqDsp4Dso7ztg53qs7Xsgqxf7J6E64yA7KO87YOd6rO16riJ7ZiE7ZmpX+unpOyeheyehOuMgF8yMDI0MTIzMS5jc3YgICAgICAgICAgICAgICB8DQp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAo7J207ZWYICoq7J6E64yA7KO87YOd6rO16riJ7ZiE7Zmp7J6Q66OMKiopICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IO2VnOq1re2GoOyngOyjvO2DneqzteyCrFxfKOunpOyeheyehOuMgCnrp4jsnbTtmYjtj6zthLgg6riw7KG07J6E64yA7KO87YOdIOuqqeuhnSB8IDxodHRwczovL3d3dy5kYXRhLmdvLmtyL2RhdGEvMTUwODQ5MjcvZmlsZURhdGEuZG8+IHwg7ZWc6rWt7Yag7KeA7KO87YOd6rO17IKsXF8o66ek7J6F7J6E64yAKeuniOydtO2ZiO2PrO2EuCDquLDsobTsnoTrjIDso7ztg50g66qp66GdXzIwMjUwMzE4LmNzdiB8DQp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAo7J207ZWYICoq66eI7J207ZmI7Y+s7YS4IOyekOujjCoqKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQoNCuychCDrp4Htgazsl5DshJwg64uk7Jq066Gc65Oc7ZWcIOyekOujjOulvCAqKi4vXF9yYXcqKiDtj7TrjZTsl5Ag7KCA7J6l7ZWY7JesIOu2hOyEneydhCDsp4TtlontlZzri6QuDQoNCmBgYHtyIOyekOujjCDsnITsuZgg7ZmV7J24fQ0KbGlicmFyeShkcGx5ciwgcXVpZXRseSA9IFQsIHdhcm4uY29uZmxpY3RzID0gRikNCmNzdkxzdCA9IGxpc3QuZmlsZXMoIi4vX3JhdyIsIGZ1bGwubmFtZXMgPSBULCBwYXR0ZXJuID0gImNzdiQiKQ0KY3N2THN0DQpgYGANCg0KKirrp4jsnbTtmYjtj6zthLgg7J6Q66OMKirrpbwg7J297Jy866m0IOuLpOydjOqzvCDqsJnri6QuDQoNCmBgYHtyIO2VnOq1re2GoOyngOyjvO2DneqzteyCrF8o66ek7J6F7J6E64yAKeuniOydtO2ZiO2PrO2EuCDquLDsobTsnoTrjIDso7ztg50g66qp66GdfQ0KIyDtlZzqta3thqDsp4Dso7ztg53qs7XsgqxfKOunpOyeheyehOuMgCnrp4jsnbTtmYjtj6zthLgg6riw7KG07J6E64yA7KO87YOdIOuqqeuhnQ0KZGF0MSA9IHJlYWQuY3N2Mihjc3ZMc3RbMV0sIGhlYWRlciA9IEYsIGZpbGVFbmNvZGluZyA9ICJjcDk0OSIsIHNlcCA9ICIsIiwgY29sQ2xhc3NlcyA9IHJlcCgiY2hhcmFjdGVyIiwgMTkpKQ0KZGF0MQ0KYGBgDQoNCuychCDsnpDro4zripQg7J6E64yA7KO87YOd7J2YIOychOy5mCwg6rO16riJIOyEuOuMgOyImCwg7ZiV66qFIOuwjyDqs7XquInrqbTsoIEsIOyehOuMgOujjOuhnCDqtazshLHrkJjslrQg7J6I64ukLiDqs7XquIkg7IS464yA7IiY64qUIO2YleuqheyXkCDrlLDrnbwg6riw7J6s65CY7KeAIOyViuqzoCDtlbTri7kg7KO87YOd7J2YIOyghOyytCDshLjrjIDsiJjqsIAg6rCBICoq7ZiV66qFKirsl5Ag67CY67O1IOq4sOyerOuQmOyWtCDsnojripQg65Ov7ZWY64ukLg0KDQrrmJDtlZwgKirsnoTrjIDsgqzsl4XsnpAqKuqwgCDquLDsnqzrkJjslrQg7J6I7Jy866mwIOuLpOydjOqzvCDqsJnri6QuDQoNCmBgYHtyIOuniOydtO2ZiO2PrO2EuCDsnpDro4zsnZgg7J6E64yA7IKs7JeF7J6QIOq1rOu2hCwgbWVzc2FnZT1UUlVFfQ0KZGF0MSRWOCAlPiUgLlsyOmxlbmd0aCguKV0gJT4lIHVuaXF1ZSgpDQpgYGANCg0K7JyEIOyekOujjOyXkOuKlCBMSOu/kOunjCDslYTri4jrnbwgKirsp4DrsKnqs7XsgqwqKuqwgCDqs7XquIntlZjripQg7KO87YOd64+EIO2PrO2VqOuQmOyWtCDsnojri6QuDQoNCioq7J6E64yA7KO87YOd6rO16riJ7ZiE7Zmp7J6Q66OMKirrpbwg7J297Jy866m0IOuLpOydjOqzvCDqsJnri6QuDQoNCmBgYHtyIO2VnOq1re2GoOyngOyjvO2DneqzteyCrF/snoTrjIDso7ztg53qs7XquIntmITtmalf66ek7J6F7J6E64yAfQ0KIyDtlZzqta3thqDsp4Dso7ztg53qs7Xsgqxf7J6E64yA7KO87YOd6rO16riJ7ZiE7ZmpX+unpOyeheyehOuMgA0KZGF0MiA9IHJlYWQuY3N2Mihjc3ZMc3RbMl0sIGhlYWRlciA9IEYsIGZpbGVFbmNvZGluZyA9ICJjcDk0OSIsIHNlcCA9ICIsIiwgY29sQ2xhc3NlcyA9IHJlcCgiY2hhcmFjdGVyIiwgMjMpKQ0KZGF0Mg0KYGBgDQoNCuychCDsnpDro4zripQg7J6E64yA7KO87YOd7J2YIOychOy5mCwg64+ZL+2YuCwg6rO16riJ66m07KCBLCDsgqzsmqnsirnsnbjsnbwsIOunpOyeheuFhOuPhCwg7YWM66eI7ZiV7KO87YOd7Jes67aALCDsnoTrjIDst6jrk53snKDtmJUg65Ox7J2EIOqwgSDtmLjsi6Trs4TroZwg6riw7J6s7ZWcIOuTr+2VmOuLpC4g7KeQ7J6R7J20IOunnuuLpOuptCAqKuqzteq4iSDshLjrjIDsiJjripQg7ZaJ7J2YIOyImCoq7JmAIOqwmeuLpC4NCg0K7ZWc7Y64LCDquLDsnqzrkJwgKirsnoTrjIDsgqzsl4XsnpAqKuuKlCDri6TsnYzqs7wg6rCZ64ukLg0KDQpgYGB7ciDtlZzqta3thqDsp4Dso7ztg53qs7Xsgqxf7J6E64yA7KO87YOd6rO16riJ7ZiE7Zmp7J2YIOyehOuMgOyCrOyXheyekCDqtazrtoR9DQpkYXQyJFYyICU+JSAuWzI6bGVuZ3RoKC4pXSAlPiUgdW5pcXVlKCkNCmBgYA0KDQrsnIQg7J6Q66OM7JeQIOq4sOyerOuQnCDsnoTrjIDsgqzsl4XsnpDripQg66qo65GQIExI7J2YIOyngOyXreuzuOu2gOydtOuLpC4g7KaJLCAqKkxI6rCAIOqzteq4ie2VnCDsnoTrjIDso7ztg50qKuunjCDsnojripQg7J6Q66OM7J2064ukLg0KDQrtlZztjrgsICoq7J6E64yA7Leo65Od7Jyg7ZiVKirsnYQg7IK07Y6067O066m0IOuLpOydjOqzvCDqsJnri6QuDQoNCmBgYHtyIO2VnOq1re2GoOyngOyjvO2DneqzteyCrF/snoTrjIDso7ztg53qs7XquIntmITtmansnZgg7J6E64yA7Leo65Od7Jyg7ZiVIOq1rOu2hH0NCmRhdDIkVjEzICU+JSAuWzI6bGVuZ3RoKC4pXSAlPiUgdW5pcXVlKCkNCmBgYA0KDQrsnoTrjIDst6jrk53snKDtmJUg7KSRIOyjvO2DnSDsmbgg67aA64yA7Iuc7ISk7J24ICoq7KO866+86rO164+Z7Iuc7ISk65OxKiosICoq7IOB6rCAKirripQg7KO87YOd6rO16riJ65+JIOynkeqzhCDrlYwg7KCc7Jm47ZWc64ukLg0KDQojIyMgTEgg66ek7J6F7J6E64yAIOqzteq4ieufiQ0KDQrsnIQg65GQIOyekOujjOuhnCBMSOyXkOyEnCDqs7XquIntlZwg66ek7J6F7J6E64yA7J2YIOyEuOuMgOyImOulvCDqs4TsgrDtlZjrqbQg64uk7J2M6rO8IOqwmeuLpC4NCg0KYGBge3Ig6rO16riJ7IS464yA7IiYfQ0KbGlicmFyeShzdHJpbmdyLCBxdWlldGx5ID0gVCwgd2Fybi5jb25mbGljdHMgPSBGKQ0Kc2RfZGF0MSA9IGRhdDEgJT4lIHNlbGVjdChWNCwgVjUsIFY2LCBWNywgVjgpICU+JSBmaWx0ZXIoc3RyX2RldGVjdChWOCwgIkxIIikpICU+JSANCiAgdW5pcXVlKCkgJT4lIC4kVjYgJT4lIGFzLm51bWVyaWMoKSAlPiUgc3VtKG5hLnJtID0gVCkgDQpzZF9kYXQyID0gZGF0MiAlPiUgLlsyOm5yb3coLiksIF0gJT4lIGZpbHRlcighVjEzICVpbiUgYygi7KO866+86rO164+Z7Iuc7ISk65OxIiwgIuyDgeqwgCIpKSAlPiUgbnJvdygpDQpiaWdGcm0gPSBmdW5jdGlvbih4KSBmb3JtYXRDKHgsIGZvcm1hdCA9ICJmIiwgYmlnLm1hcmsgPSAiLCIsIGRpZ2l0cyA9IDApDQpjYXQoDQogIHBhc3RlMCgi66eI7J207ZmI7Y+s7YS4IOyekOujjDogICAgICAgIiwgIGJpZ0ZybShzZF9kYXQxKSwgIlxuIiwNCiAgICAgICAgICLsnoTrjIDso7ztg53qs7XquIntmITtmakg7J6Q66OMOiAiLCAgYmlnRnJtKHNkX2RhdDIpLCAiXG4iLA0KICAgICAgICAgIuyekOujjCDssKjsnbQ6ICAgICAgICAgICAgICAiLCBiaWdGcm0oYWJzKHNkX2RhdDIgLSBzZF9kYXQxKSksICJcbiIpDQopDQpgYGANCg0K66eI7J207ZmI7Y+s7YS4IOyekOujjOqwgCAx66eMIOyEuOuMgOqwgOufiSDsnpHri6QuIOuRkCDsnpDro4zsl5Ag7LCo7J206rCAIOyeiOuKlCDsnbTsnKDrpbwg7JWE656Y7LKY65+8IOyCtO2OtOuzuOuLpC4NCg0KLSAgIOuniOydtO2ZiO2PrO2EuOyekOujjChkYXQxKeyXkCDsnojsnLzrgpgg7J6E64yA7KO87YOd6rO16riJ7ZiE7ZmpKGRhdDIp7JeQIOyXhuuKlCDso7ztg50NCg0KLSAgIOuniOydtO2ZiO2PrO2EuOyekOujjChkYXQxKeyXkCDsl4bsnLzrgpgg7J6E64yA7KO87YOd6rO16riJ7ZiE7ZmpKGRhdDIp7JeQIOyeiOuKlCDso7ztg50NCg0KLSAgIOqwgSDso7ztg53rs4Qg6rO16riJ65+JIOywqOydtA0KDQotICAg6rG07LaV66y864yA7J6l6rO8IOu2iOydvOy5mCA6IOyjvO2DnSDrqbjsi6Qg66+467CY7JiBLCDquLDsnqzsmKTrpZgg65OxDQoNCuuRkCDsnpDro4zrpbwg7Jew6rKw7ZWY7JesIOu5hOq1kO2VmOq4sCDsnITtlZwg6rOg7Jyg6rCS7J24ICoq7KO87IaMKirsnZgg7ZiV7Iud7J2EIOyCtO2OtOuztOuptCDri6TsnYzqs7wg6rCZ64ukLg0KDQpgYGB7ciBkYXQxLCBkYXQy7J2YIOyjvOyGjCDtmJXtg5x9DQpjYXQoDQogIHBhc3RlMCgi7KO87IaM7ZiV7IudIOuMgOyhsFxuIiwgDQogICAgICAgICAiZGF0MSA6ICIsIGRhdDEkVjRbMl0sICJcbiIsDQogICAgICAgICAiZGF0MiA6ICIsIGRhdDIkVjhbMl0sICJcbiIpDQopDQpgYGANCg0K7KO87IaM7ZiV7Iud7J2EIOyCtO2OtOuztOuptCBkYXQx7JeQ64qUICoq6riw67O47KO87IaMKioo64+E66Gc66qFICsg6rG066y867KI7Zi4KSwgZGF0MuyXkOuKlCAqKuyDgeyEuOyjvOyGjCoqKOq4sOuzuOyjvOyGjCArIOqxtOusvOuqhSnqsIAg6riw7J6s65CY7Ja0IOyeiOuKlCDrk6/tlZjri6QuDQoNCmRhdDHsnZgg7KO87IaM6rCAIOuqqOuRkCAqKuq4sOuzuOyjvOyGjCDquLDrsJgqKuyduOyngCDsgrTtjrTrs7TrqbQg64uk7J2M6rO8IOqwmeuLpC4NCg0KYGBge3IgZGF0MSDso7zshozsl5DshJwg6riw67O47KO87IaMIOy2lOy2nH0NCmRhdDFfanVzbyA9IGZpbHRlcihkYXQxLCBzdHJfZGV0ZWN0KFY4LCAiTEgiKSkgJT4lIA0KICBzZWxlY3QoVjQpICU+JSB1bmlxdWUoKSAlPiUgDQogIG11dGF0ZShiYXNlID0gc3RyX2V4dHJhY3QoVjQsICJeW14oXSooKOq4uHzroZwpIFswLTlcXC1dKykiKSkgIyBiYXNl7JeQIOq4sOuzuOyjvOyGjCDstpTstpwNCmRhdDFfanVzbyAlPiUgZmlsdGVyKGlzLm5hKGJhc2UpKQ0KYGBgDQoNCmRhdDHsnZgg7KO87IaM7JeQ7IScIOq4sOuzuOyjvOyGjCDtmJXtg5zrpbwg7LC+6riwIOyWtOugpOyatCDtlonsnZgg6rCc7IiY6rCAIDDsnbTri6QuIOymiSwg66qo65OgIOyjvOyGjOqwgCDquLDrs7jso7zshowg6riw67CY7J2064ukLg0KDQpkYXQy7J2YIOyjvOyGjOqwgCDrqqjrkZAgKirquLDrs7jso7zshowg6riw67CYKirsnbjsp4Ag7IK07Y6067O066m0IOuLpOydjOqzvCDqsJnri6QuDQoNCmBgYHtyIGRhdDIg7KO87IaM7JeQ7IScIOq4sOuzuOyjvOyGjCDstpTstpx9DQpkYXQyX2p1c28gPSBkYXQyWzI6bnJvdyhkYXQyKSwgXSAlPiUgZmlsdGVyKCFWMTMgJWluJSBjKCLso7zrr7zqs7Xrj5nsi5zshKTrk7EiLCAi7IOB6rCAIikpICU+JSANCiAgc2VsZWN0KFY4LCBWMTUpICU+JSB1bmlxdWUoKSAlPiUgDQogIG11dGF0ZShiYXNlID0gc3RyX2V4dHJhY3QoVjgsICJeW14oXSooKOq4uHzroZwpIFswLTlcXC1dKykiKSkNCm5hbWVzKGRhdDJfanVzbykgPSBjKCLquLDsnqzso7zshowiLCAi7IKs7Jqp7Iq57J247J28IiwgIuq4sOuzuOyjvOyGjCIpDQpkYXQyX2p1c28gJT4lIGZpbHRlcihpcy5uYSjquLDrs7jso7zshowpKQ0KYGBgDQoNCmRhdDLsnZgg7KO87IaMIOykkSAx6rCc64qUIOqxtOusvOuyiO2YuCDriITrnb0sIDPqsJzripQgKirsp4Drsojso7zshowqKuuhnCDquLDsnqzrkJjslrQg67O07JmEIOuwjyDsiJjsoJXsnbQg7ZWE7JqU7ZWY64ukLg0KDQpb7KO87IaM7KCV67O064iE66as7KeRXShodHRwczovL3d3dy5qdXNvLmdvLmtyKeyXkOyEnCAqKuyYgeuTse2PrOq1rCoqICoq6rCA66eI7IKw66GcODDqsIDquLgqKuydhCDqsoDsg4ntlZjrqbQg7Y+Q7KeA7KO87IaM66GcIOuCmO2DgOuCnOuLpC4g7IKs7Jqp7Iq57J247J287J2EIOqzoOugpO2VoCDrlYwg66m47Iuk7KO87YOd7Jy866GcIOyXrOqyqOynhOuLpC4NCg0KMuqwnCDrj5ko5qOfKeycvOuhnCDsl6zqsqjsp4DripQgKirqtozshKDrj5kgMTAyMi0xKirsnZgg64+E66Gc66qF7KO87IaM64qUICoq6rK96riw64+EIOyImOybkOyLnCDqtozshKDqtawg6raM7ISg66GcIDcxOSoq66GcIOqygOyDieuQnOuLpC4NCg0KKirsnbjqs4Trj5kgMTAyNC0yKirsnZgg64+E66Gc66qF7KO87IaM64qUICoq6rK96riw64+EIOyImOybkOyLnCDtjJTri6zqtawg7J246rOE66GcOTTrsojquLggMzktMTYqKuuhnCDqsoDsg4nrkJzri6QuDQoNCuyngOq4iOq5jOyngCDqsoDthqDtlZwg6rKw6rO866W8IOuLpOydjOqzvCDqsJnsnbQg67CY7JiB7ZWc64ukLg0KDQpgYGB7ciDso7zshowg6rKA7YagIOqysOqzvCDrsJjsmIF9DQpkYXQxX3ByaW1lID0gZGF0MVsyOm5yb3coZGF0MSksIF0gJT4lIA0KICBtdXRhdGUoYmFzZSA9IHN0cl9leHRyYWN0KFY0LCAiXlteKF0qKCjquLh866GcKSBbMC05XFwtXSspIikpDQpkYXQyX3ByaW1lID0gZGF0MlsyOm5yb3coZGF0MiksIF0gJT4lIA0KICBtdXRhdGUoYmFzZSA9IHN0cl9leHRyYWN0KFY4LCAiXlteKF0qKCjquLh866GcKSBbMC05XFwtXSspIikpDQpkYXQyX3ByaW1lW2RhdDJfcHJpbWUkVjggJT4lIA0KICAgICAgICAgICAgIHN0cl9kZXRlY3QoIuqyveq4sOuPhCDsiJjsm5Dsi5wg6raM7ISg6rWsIOq2jOyEoOuPmSAxMDIyLTEiKQ0KICAgICAgICAgICAsIF0kYmFzZSA9ICLqsr3quLDrj4Qg7IiY7JuQ7IucIOq2jOyEoOq1rCDqtozshKDroZwgNzE5Ig0KZGF0Ml9wcmltZVtkYXQyX3ByaW1lJFY4ID09ICLqsr3quLDrj4Qg7IiY7JuQ7IucIO2MlOuLrOq1rCDsnbjqs4Trj5kgMTAyNC0yIg0KICAgICAgICAgICAsIF0kYmFzZSA9ICLqsr3quLDrj4Qg7IiY7JuQ7IucIO2MlOuLrOq1rCDsnbjqs4TroZw5NOuyiOq4uCAzOS0xNiINCmRhdDJfcHJpbWUgPSBkYXQyX3ByaW1lICU+JSBmaWx0ZXIoIWlzLm5hKGJhc2UpKSAjIOyYgeuTse2PrOq1rCDqsIDrp4jsgrDroZw4MOqwgOq4uCDsgq3soJwNCmNhdCgNCiAgcGFzdGUwKCLquLDrs7jso7zshowg7ZmV7J24XG4iLA0KICAiZGF0MV9wcmltZTogIiwgZGF0MV9wcmltZSRiYXNlWzFdLCAiXG4iLCANCiAgImRhdDJfcHJpbWU6ICIsIGRhdDJfcHJpbWUkYmFzZVsxXSkNCikNCmBgYA0KDQojIyMjIOuniOydtO2ZiO2PrO2EuOyekOujjChkYXQxKeyXkCDsnojsnLzrgpgg7J6E64yA7KO87YOd6rO16riJ7ZiE7ZmpKGRhdDIp7JeQIOyXhuuKlCDso7ztg50NCg0K6riw67O47KO87IaM66W8IOunpOqwnOuhnCAkRDEgPSBkYXQxIC0gZGF0MiTrpbwg6rWs7ZWY66m0IOuLpOydjOqzvCDqsJnri6QuDQoNCmBgYHtyIGRhdDHsl5Ag7J6I7Jy864KYIGRhdDLsl5Ag7JeG64qUIOyjvO2DnX0NCkQxID0gbWVyZ2UoDQogIGRhdDFfcHJpbWUgJT4lIHNlbGVjdChiYXNlLCBWNikgJT4lIHVuaXF1ZSgpICMgVjYo7IS464yA7IiYKQ0KICAsIGRhdDJfcHJpbWUgJT4lIHNlbGVjdChiYXNlKSAlPiUgdW5pcXVlKCkgJT4lIG11dGF0ZShkYXQyID0gVCkNCiAgLCBieSA9ICJiYXNlIiwgYWxsLnggPSBUDQopICU+JSBmaWx0ZXIoaXMubmEoZGF0MikpDQpEMQ0KY2F0KA0KICBwYXN0ZTAoIkQxIOyjvO2DneyImDogICIsIGJpZ0ZybShucm93KEQxKSksICLqsJxcbiIsDQogICAgICAgICAiRDEg6rO16riJ65+JOiAiLCBiaWdGcm0oc3VtKGFzLm51bWVyaWMoRDEkVjYpKSksICLqsIDqtazCt+yEuOuMgCIpDQopDQpgYGANCg0K66eI7J207ZmI7Y+s7YS47J6Q66OM7JeQIOyeiOycvOuCmCDsnoTrjIDso7ztg53qs7XquIntmITtmansl5Ag7JeG64qUIOyjvO2DneydgCAzLDk5OOqwnOydtOupsCwg6rO16riJ65+J7Jy866Gc64qUIDQuNuunjCDqsIDqtazCt+yEuOuMgOyXkCDri6ztlZzri6QuDQoNCiMjIyMg66eI7J207ZmI7Y+s7YS47J6Q66OMKGRhdDEp7JeQIOyXhuycvOuCmCDsnoTrjIDso7ztg53qs7XquIntmITtmakoZGF0Minsl5Ag7J6I64qUIOyjvO2DnQ0KDQrquLDrs7jso7zshozrpbwg66ek6rCc66GcICREMiA9IGRhdDIgLSBkYXQxJOulvCDqtaztlZjrqbQg64uk7J2M6rO8IOqwmeuLpC4NCg0KYGBge3IgZGF0MeyXkCDsl4bsnLzrgpggZGF0MuyXkCDsnojripQg7KO87YOdfQ0KRDIgPSBtZXJnZSgNCiAgZGF0Ml9wcmltZSAlPiUgc2VsZWN0KGJhc2UpICU+JSANCiAgICBncm91cF9ieShiYXNlKSAlPiUgc3VtbWFyaXNlKHNkID0gbigpKQ0KICAsIGRhdDFfcHJpbWUgJT4lIHNlbGVjdChiYXNlKSAlPiUgdW5pcXVlKCkgJT4lIG11dGF0ZShkYXQxID0gVCkNCiAgLCBieSA9ICJiYXNlIiwgYWxsLnggPSBUDQopICU+JSBmaWx0ZXIoaXMubmEoZGF0MSkpDQpEMg0KY2F0KA0KICBwYXN0ZTAoIkQyIOyjvO2DneyImDogICAiLCBiaWdGcm0obnJvdyhEMikpLCAi6rCcXG4iLA0KICAgICAgICAgIkQyIOqzteq4ieufiTogIiwgYmlnRnJtKHN1bShEMiRzZCkpLCAi6rCA6rWswrfshLjrjIAiKQ0KKQ0KYGBgDQoNCuuniOydtO2ZiO2PrO2EuOyekOujjOyXkCDsl4bsnLzrgpgg7J6E64yA7KO87YOd6rO16riJ7ZiE7Zmp7JeQIOyXhuuKlCDso7ztg53snYAgMyw5OTjqsJzsnbTrqbAsIOqzteq4ieufieycvOuhnOuKlCA0Ljbrp4wg6rCA6rWswrfshLjrjIDsl5Ag64us7ZWc64ukLg0KDQojIyMjIOqwgSDso7ztg53rs4Qg6rO16riJ65+JIOywqOydtA0KDQrquLDrs7jso7zshozrpbwg66ek6rCc66GcICREMS4yID0gZGF0MSBcY2FwIGRhdDIk66W8IOq1rO2VmOqzoCAkRDEuMiTsl5Ag7IaN7ZWY64qUIOqwgSDso7ztg53rs4Qg66eI7J207ZmI7Y+s7YS47J6Q66OM7J2YIOqzteq4ieufieqzvCDsnoTrjIDso7ztg53qs7XquIntmITtmansnZgg6rO16riJ65+JIOywqOydtOulvCDqtaztlZjrqbQg64uk7J2M6rO8IOqwmeuLpC4NCg0KYGBge3Ig6rCBIOyjvO2DneuzhCDqs7XquInrn4kg7LCo7J20fQ0KRDEuMiA9IG1lcmdlKA0KICBkYXQxX3ByaW1lICU+JSBzZWxlY3QoYmFzZSwgVjYpICU+JSB1bmlxdWUoKSAlPiUgDQogICAgbXV0YXRlKHNkMSA9IGFzLm51bWVyaWMoVjYpKSAlPiUgc2VsZWN0KC1WNikNCiAgLCBkYXQyX3ByaW1lICU+JSBzZWxlY3QoYmFzZSkgJT4lIA0KICAgIGdyb3VwX2J5KGJhc2UpICU+JSBzdW1tYXJpc2Uoc2QyID0gbigpKQ0KICAsIGJ5ID0gImJhc2UiDQopICU+JSBtdXRhdGUoU0RkaWZmID0gc2QxIC0gc2QyKQ0KRDEuMg0KRDEuMl8xQmlnZ2VyVGhhbjIgPSBEMS4yICU+JSBmaWx0ZXIoU0RkaWZmID4gMCkNCkQxLjJfMUJpZ2dlclRoYW4yDQpEMS4yXzJCaWdnZXJUaGFuMSA9IEQxLjIgJT4lIGZpbHRlcihTRGRpZmYgPCAwKQ0KRDEuMl8yQmlnZ2VyVGhhbjENCmNhdCgNCiAgcGFzdGUwKA0KICAgICJEMS4yKOuniOydtO2ZiO2PrO2EuOqzvCDsnoTrjIDso7ztg53qs7XquIntmITtmansl5Ag66qo65GQIOq4sOyerClcbiIsIA0KICAgICIgLSDso7ztg53siJg6ICAgICAgICAgICAgICAgICAgICAiLCBiaWdGcm0obnJvdyhEMS4yKSksICLqsJxcbiIsDQogICAgIiAtIOqzteq4ieufiSjrp4jsnbTtmYjtj6zthLgpOiAgICAgICAiLCBiaWdGcm0oc3VtKEQxLjIkc2QxKSksICLqsIDqtazCt+yEuOuMgFxuIiwNCiAgICAiIC0g6rO16riJ65+JKOyehOuMgOyjvO2Dneqzteq4ie2YhO2ZqSk6ICIsIGJpZ0ZybShzdW0oRDEuMiRzZDIpKSwgIuqwgOq1rMK37IS464yAXG4iLA0KICAgICLrp4jsnbTtmYjtj6zthLggPiDsnoTrjIDso7ztg53qs7XquIntmITtmalcbiIsDQogICAgIiAtIOyjvO2DneyImDogICAgICAgICAgICAgICAgICAgICAiLCBiaWdGcm0obnJvdyhEMS4yXzFCaWdnZXJUaGFuMikpLCAi6rCcXG4iLA0KICAgICIgLSDqs7XquInrn4ko66eI7J207ZmI7Y+s7YS4KTogICAgICAgIiwgYmlnRnJtKHN1bShEMS4yXzFCaWdnZXJUaGFuMiRzZDEpKSwgIuqwgOq1rMK37IS464yAXG4iLA0KICAgICIgLSDqs7XquInrn4ko7J6E64yA7KO87YOd6rO16riJ7ZiE7ZmpKTogIiwgYmlnRnJtKHN1bShEMS4yXzFCaWdnZXJUaGFuMiRzZDIpKSwgIuqwgOq1rMK37IS464yAXG4iLA0KICAgICIgLSDqs7XquInrn4kg7LCo7J20OiAgICAgICAgICAgICAgIiwgYmlnRnJtKHN1bShEMS4yXzFCaWdnZXJUaGFuMiRzZDEpIC0gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bShEMS4yXzFCaWdnZXJUaGFuMiRzZDIpKSwgIuqwgOq1rMK37IS464yAXG4iLA0KICAgICLrp4jsnbTtmYjtj6zthLggPCDsnoTrjIDso7ztg53qs7XquIntmITtmalcbiIsDQogICAgIiAtIOyjvO2DneyImDogICAgICAgICAgICAgICAgICAgICIsIGJpZ0ZybShucm93KEQxLjJfMkJpZ2dlclRoYW4xKSksICLqsJxcbiIsDQogICAgIiAtIOqzteq4ieufiSjrp4jsnbTtmYjtj6zthLgpOiAgICAgICAiLCBiaWdGcm0oc3VtKEQxLjJfMkJpZ2dlclRoYW4xJHNkMSkpLCAi6rCA6rWswrfshLjrjIBcbiIsDQogICAgIiAtIOqzteq4ieufiSjsnoTrjIDso7ztg53qs7XquIntmITtmakpOiAiLCBiaWdGcm0oc3VtKEQxLjJfMkJpZ2dlclRoYW4xJHNkMikpLCAi6rCA6rWswrfshLjrjIBcbiIsDQogICAgIiAtIOqzteq4ieufiSDssKjsnbQ6ICAgICAgICAgICAgICAiLCBiaWdGcm0oc3VtKEQxLjJfMkJpZ2dlclRoYW4xJHNkMikgLSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtKEQxLjJfMkJpZ2dlclRoYW4xJHNkMSkpLCAi6rCA6rWswrfshLjrjIBcbiINCiAgKQ0KKQ0KYGBgDQoNCuqwgSDsnpDro4zsl5Ag6riw7J6s65CcIOqzteq4ieufieyXkCDssKjsnbTqsIAg7J6I64qUIOqyg+ydtCAzLjTsspwoMjk1KzMsMTM1KSDqsJzqsIAg64SY64qU64ukLiDsnbQg7KSRIOuniOydtO2ZiO2PrO2EuCDquLDsnqzqsIAg642UIO2BsCDqsoPsnbQgMjk16rCcKOqzteq4ieufiSDssKjsnbQgNSwxMjEpLCDsnoTrjIDso7ztg53qs7XquIntmITtmakg6riw7J6s6rCAIOuNlCDtgbAg6rKD7J20IDMsMTM16rCc7J2064ukLg0KDQrtlZzsqr0g7J6Q66OM7JeQ66eMIOq4sOyerOuQnCDso7ztg53snbQg7J6I6rOgLCDrj5nsnbwg7KO87YOd7J2YIOqzteq4ieufiSDquLDsnqzqsIAg7J6Q66OM7JeQIOuUsOudvCDri6Trpbgg7J207Jyg64qUIOyVhOuemOyymOufvCDsl6zqsqjsp4Tri6QuDQoNCi0gICDsnITsuZjrpbwg6riw67O47KO87IaM66eM7Jy866GcIO2RnOq4sO2VmOuptCDsl6zrn6wg64+Z7J20IOyeiOuKlCDso7ztg50g7KeR6rOEIOuVjCDsmKTrpZjrsJzsg50g7Jqw66CkIOyeiOydjA0KDQotICAg7J2066+4IOupuOyLpOuQnCDso7ztg53snbQg6rOE7IaNIOyekOujjOyXkCDrgqjslYQg7J6I7J2EIOyImCDsnojsnYwo7KO87YOdIOupuOyLpCDrr7jrsJjsmIEpDQoNCi0gICDri6jsiJwg64iE6529LCDquLDsnqwg7Jik66WYIOuTsQ0KDQojIyMg64uk7J2MIOu2hOyEnSAuLi4NCg0KLSAgIOqxtOy2leusvOuMgOyepeqzvCDrtojsnbzsuZgg7KO87YOdIO2ZleyduCA6IOyjvO2DnSDrqbjsi6Qg66+467CY7JiBLCDquLDsnqzsmKTrpZgg65OxDQoNCi0gICDrp6TsnoXqs7Xqs7XsnoTrjIAg67aE7Y+sDQo=