토지이음 지자체 고시 기준 · 2026-06-02 ~ 2026-09-30 · 181건
군자주공9단지2026-09-30 · 재건축 · 안산시[신규] 군자주공9단지 재건축사업 사업시행계획인가 고시
사업시행 인가
›
명륜지구2026-09-30 · 재개발 · 대구광역시[변경] 명륜지구 재개발사업 정비기본계획 변경, 정비구역 변경 지정 및 지형도면 고시
정비구역 지정 변경
›
사직52026-09-30 · 재개발 · 부산광역시 주택건축국 도시정비과[변경] 사직5 재개발사업 정비계획 및 정비구역 변경 지정 고시
정비구역 지정 변경
›
거성국민주택2026-09-28 · 소규모재건축 · 전북특별자치도 전주시[신규] 거성국민주택 소규모재건축사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
풍년연립2026-09-28 · 소규모재건축 · 전북특별자치도 전주시[신규] 풍년연립 소규모재건축정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
중화산동 485-30일원2026-09-28 · 소규모재건축 · 전북특별자치도 전주시[신규] 중화산동 485-30일원 소규모재건축사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
남양송정구역2026-09-28 · 소규모재건축 · 전북특별자치도 전주시[신규] 남양송정구역 소규모재건축정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
현대아파트2026-09-28 · 소규모재건축 · 전북특별자치도 전주시[신규] 현대아파트 소규모재건축정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
소사본동 119-1번지2026-09-28 · 가로주택정비 · 경기도 부천시[신규] 소사본동 119-1번지 일원 가로주택정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
중앙공영아파트2026-09-25 · 소규모재건축 · 인천광역시 계양구[변경] 효성동 중앙공영아파트 소규모재건축사업 조합설립(변경)인가 고시
조합설립 인가 변경
›
삼방지구2026-09-23 · 재건축 · 경상남도 김해시[신규] 김해 삼방지구 재건축정비사업 정비계획 결정·정비구역 해제 및 지형도면 고시
구역 해제
›
광안A2026-09-23 · 재개발 · 부산광역시[변경] 광안A 재개발사업 정비계획 및 정비구역 변경 지정고시
정비구역 지정 변경
›
유창아파트2026-09-23 · 가로주택정비 · 전북특별자치도 전주시[신규] 유창아파트 가로주택정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
우아동3가 728-1번지2026-09-23 · 가로주택정비 · 전북특별자치도 전주시[신규] 우아동3가 728-1번지 일원 가로주택정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
우아동3가 730-1번지2026-09-23 · 가로주택정비 · 전북특별자치도 전주시[신규] 우아동3가 730-1번지 일원 가로주택정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
우아동3가 전원연립주택2026-09-23 · 가로주택정비 · 전북특별자치도 전주시[신규] 우아동3가 전원연립주택 일원 가로주택정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
태평지구2026-09-22 · 소규모재건축 · 대전광역시 중구 도시국 도시과[신규] 태평지구 소규모주택정비 관리지역 내 도시계획시설(중로3-태평D)사업 실시계획인가(사업시행자지정) 및 도시관리계획(경미한 변경) 지형도…
기타 고시
›
서봉덕2026-09-21 · 재개발 · 대구광역시 남구[변경] 서봉덕 재개발사업 정비구역 변경지정 및 지형도면 고시
정비구역 지정 변경
›
우영 (단지)2026-09-18 · 재건축 · 인천광역시 계양구[변경] 작전우영아파트 재건축사업 사업시행계획(변경)인가 고시
사업시행 인가 변경
›
덕진동2가 27번지2026-09-18 · 가로주택정비 · 전북특별자치도 전주시[신규] 덕진동2가 27번지 일원 가로주택정비사업 조합설립인가 및 지형도면 정정 고시
조합설립 인가
›
군포102026-09-18 · 재개발 · 군포시[변경] 군포10 재개발사업 사업시행계획인가(변경) 고시
사업시행 인가 변경
›
국동주공2단지아파트2026-09-17 · 재건축 · 전라남도 여수시[변경] 국동주공2단지아파트 재건축정비사업 정비구역 지정? 정비계획 결정 및 지형도면 고시
정비구역 지정 변경
›
동삼12026-09-16 · 재건축 · 부산광역시[변경] 동삼1 재건축사업 정비계획 및 정비구역 변경 지정 고시
정비구역 지정 변경
›
수영12026-09-16 · 재개발 · 부산광역시[변경] 수영1 재개발사업 정비계획 및 정비구역 변경 지정 고시
정비구역 지정 변경
›
수영12026-09-16 · 재개발 · 부산광역시 수영구[변경] 수영1 재개발사업 정비계획 및 정비구역 변경 지정 고시
정비구역 지정 변경
›
덕진동2가 27번지2026-09-15 · 가로주택정비 · 전북특별자치도 전주시[신규] 덕진동2가 27번지 일원 가로주택정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
목감22026-09-10 · 재개발 · 경기도 시흥시[변경] 목감2 재개발사업 정비계획 변경(경미한) 및 지형도면 고시
정비계획 변경
›
사모2구역2026-09-04 · 재개발 · 충청북도 청주시[변경] 사모2구역 재개발사업 정비구역 지정 및 정비계획 결정(변경) 지형도면 고시
정비구역 지정 변경
›
작전현대아파트2026-09-02 · 재개발 · 인천광역시 계양구[변경] 작전현대아파트 주택재개발 정비계획수립 및 정비구역 지정 결정(경미한 변경) 고시
정비구역 지정 변경
›
양정32026-09-02 · 재개발 · 부산광역시[변경] 양정3 재개발사업 정비계획 및 정비구역 변경지정 고시
정비구역 지정 변경
›
광안22026-09-02 · 재개발 · 부산광역시[변경] 광안2 재개발 정비계획 및 정비구역 변경 지정 고시
정비구역 지정 변경
›
제115-10구역2026-09-01 · 재개발 · 경기도 수원시[변경] 제115-10구역 주택재개발정비사업 정비계획 변경(경미한 사항) 및 지형도면 고시
정비계획 변경
›
명당골2구역2026-09-01 · 가로주택정비 · 전북특별자치도 전주시[신규] 명당골2구역 가로주택정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
풍년주택2026-09-01 · 가로주택정비 · 전북특별자치도 전주시[신규] 평화동 풍년주택 가로주택정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
명당골1구역2026-09-01 · 가로주택정비 · 전북특별자치도 전주시[신규] 명당골1구역 가로주택정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
금암동 708-3번지2026-09-01 · 가로주택정비 · 전북특별자치도 전주시[신규] 금암동 708-3번지 일원 가로주택정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
서부거성 (단지)2026-09-01 · 가로주택정비 · 전북특별자치도 전주시[신규] 효자동 서부거성아파트일원 가로주택정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
선우아파트2026-08-31 · 재건축 · 인천광역시 주거정비과[신규] 선우아파트 재건축사업 정비계획 결정 및 정비구역 지정과 지형도면 고시
정비구역 지정
›
수진2구역2026-08-31 · 재개발 · 경기도 성남시[신규] 수진2구역 생활권 재개발 정비계획 결정, 정비구역 지정 및 지형도면 고시
정비구역 지정
›
금정동711-15번지2026-08-31 · 가로주택정비 · 경기도 군포시[변경] 군포시 금정동?711-15번지 일원 가로주택정비사업 조합설립(변경)인가 고시문
조합설립 인가 변경
›
덕진공원2026-08-28 · 가로주택정비 · 전북특별자치도 전주시[신규] 덕진공원 일원 가로주택정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
지금·도농6-2구역2026-08-27 · 재개발 · 남양주시[변경] 지금·도농6-2구역 재개발정비사업 사업시행계획(변경)인가 고시
사업시행 인가 변경
›
신정1구역2026-08-27 · 재개발 · 울산광역시[신규] 남구 신정1구역 재개발사업 정비구역 지정 및 정비계획 결정 지형도면고시
정비구역 지정
›
중앙연립2026-08-25 · 소규모재건축 · 군포시[변경] 중앙연립 소규모재건축사업 사업시행계획[관리처분계획](변경)인가 고시문
관리처분 인가 변경
›
중화산동 485-30일원2026-08-24 · 소규모재건축 · 전북특별자치도 전주시[신규] 중화산동 485-30일원 소규모재건축사업 사업시행계획인가 고시
사업시행 인가
›
신우연립2026-08-24 · 가로주택정비 · 의왕시[변경] 의왕 신우연립 및 주변 가로주택정비사업 조합설립(변경)인가 고시
조합설립 인가 변경
›
청전·시영아파트2026-08-21 · 재건축 · 제천시[변경] 청전·시영아파트 재건축정비사업 정비계획 결정 및 정비구역 지정 변경(경미한 사항) 고시
정비구역 지정 변경
›
장암6구역2026-08-21 · 재개발 · 의정부시[변경] 장암6구역 재개발정비사업 정비구역 지정 및 정비계획 변경(경미한 변경).지형도면 고시
정비구역 지정 변경
›
퇴계원2구역2026-08-20 · 재개발 · 남양주시[변경] 퇴계원2구역 재개발정비사업 사업시행계획인가 변경 고시
사업시행 인가 변경
›
모아타운 [제2-1구역]2026-08-19 · 가로주택정비 · 서울특별시 강서구 균형발전도시국 도시전략과[신규] 등촌동 520-3 일대 모아타운 [제2-1구역] 가로주택정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
원종3-2구역2026-08-18 · 재건축 · 경기도 부천시[신규] 원종3-2구역 재건축 정비계획 결정 및 정비구역 지정, 지형도면 고시
정비구역 지정
›
장암생활권3구역2026-08-18 · 재개발 · 의정부시[변경] 의정부 장암생활권3구역 주택재개발정비사업 관리처분계획(경미한 변경)인가 고시
관리처분 인가 변경
›
대흥2구역2026-08-18 · 재개발 · 대전광역시 중구 도시국 도시과[신규] 대흥2구역 재개발 정비사업 관련 도시계획시설(도로)(중로2-2) 사업시행자지정·실시계획인가 및 사업인정(의제) 고시
사업시행 인가
›
을지로3가 도시정비형 재개발구역 제12지구2026-08-14 · 재개발 · 서울특별시 중구 도시관리국 도심정비과[변경] 을지로3가 도시정비형 재개발구역 제12지구 정비계획 (경미한)변경 결정 및 지형도면 고시
정비계획 변경
›
신월1동 99-1번지2026-08-13 · 가로주택정비 · 서울특별시 양천구 도시주택국 재건축사업과[신규] 신월1동 99-1번지 일원 가로주택정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
온천42026-08-12 · 재개발 · 부산광역시[변경] 온천4 재개발사업 정비계획 및 정비구역 변경지정 고시
정비구역 지정 변경
›
금정역 역세권2026-08-11 · 재개발 · 군포시[변경] 군포시 금정역 역세권 재개발사업 정비계획 변경 결정(경미한 사항) 및 지형도면 고시(안)
정비계획 변경
›
내손라구역2026-08-11 · 재개발 · 의왕시[변경] 의왕 내손라구역 재개발정비사업 정비계획 변경 결정 및 지형도면 고시
정비계획 변경
›
백조아파트2026-08-10 · 소규모재건축 · 인천광역시 부평구[신규] 백조아파트 소규모재건축사업 준공인가 및 공사완료 고시
준공 인가
›
고잔연립9구역2026-08-07 · 재건축 · 안산시[신규] 고잔연립9구역 주택재건축정비사업 준공인가 고시
준공 인가
›
산본1동1지구2026-08-07 · 재개발 · 군포시[신규] 산본1동1지구 재개발사업 사업시행계획인가 고시
사업시행 인가
›
고천나구역2026-08-06 · 재개발 · 의왕시[변경] 의왕 고천나구역 재개발사업 사업시행계획변경인가 고시
사업시행 인가 변경
›
덕소4구역2026-08-06 · 재개발 · 남양주시[신규] 덕소4구역 재개발정비사업 관리처분계획인가 고시
관리처분 인가
›
오목교역 역세권 활성화사업2026-08-06 · 재개발 · 서울특별시 양천구 도시주택국 도시계획과[신규] 오목교역 역세권 활성화사업(도시정비형재개발) 정비구역 지정 및 정비계획 결정, 지구단위계획 결정 지형도면 고시
정비구역 지정
›
새절역세권 장기전세주택2026-08-06 · 재개발 · 서울특별시 은평구 공간혁신국 공간계획과[변경] 새절역세권 장기전세주택 도시정비형 재개발사업 정비계획 결정 및 정비구역 지정(경미한 변경), 지구단위계획 결정(변경) 및 지형도면 고…
정비구역 지정 변경
›
연산152026-08-05 · 재개발 · 부산광역시 주택건축국 도시정비과[신규] 연산15 재개발사업 정비계획 결정 및 정비구역 지정 고시
정비구역 지정
›
충현2구역2026-08-05 · 재개발 · 서울특별시 서대문구 도시정비국 도시계획과[변경] 충현2구역 도시정비형 재개발사업 정비계획(충현 지구단위계획구역내 특별계획구역② 세부개발계획) 결정(경미한 변경) 및 지형도면 고시
정비계획 변경
›
오전나구역2026-08-04 · 재개발 · 의왕시[변경] 오전나구역 주택재개발 정비계획(경미한 사항) 변경 고시
정비계획 변경
›
가양동3구역2026-07-31 · 재개발 · 대전광역시[신규] 가양동3구역 재개발사업 정비계획 결정 및 정비구역 지정, 지형도면 정정고시
정비구역 지정
›
삼신8차 (단지)2026-07-31 · 가로주택정비 · 의왕시[신규] 사업시행계획인가 고시[삼신8차아파트 가로주택정비사업 ]
사업시행 인가
›
온수동 18-1번지2026-07-30 · 소규모재개발 · 서울특별시 구로구 주택정책국 도시개발과[신규] 온수동 18-1번지 일원 소규모재개발사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
천호우성아파트2026-07-29 · 재건축 · 서울특별시 강동구 도시관리국 재건축재개발과[신규] 천호우성아파트 재건축정비사업 정비계획 (경미한)변경 결정, 지구단위계획(변경) 결정 및 지형도면 고시
정비계획 변경
›
와동연립3구역2026-07-29 · 재건축 · 안산시[신규] 와동연립3구역 재건축사업 정비계획 수립, 정비구역 지정 및 지형도면고시
정비구역 지정
›
성포연립1구역2026-07-29 · 재건축 · 안산시[신규] 성포연립1구역 재건축사업 정비계획 수립, 정비구역 지정 및 지형도면고시
정비구역 지정
›
수영22026-07-29 · 재개발 · 부산광역시[신규] 수영2 재개발사업 정비계획 결정 및 정비구역 지정 고시
정비구역 지정
›
광안62026-07-29 · 재개발 · 부산광역시[신규] 광안6 재개발사업 정비계획 결정 및 정비구역 지정 고시
정비구역 지정
›
거제동 40-96번지2026-07-29 · 가로주택정비 · 부산광역시 연제구[신규] 거제동 40-96번지 일원 가로주택정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
용운고층주공아파트2026-07-27 · 재건축 · 대전광역시[신규] 용운고층주공아파트 재건축사업 정비계획 결정 및 정비구역, 지형도면 고시
정비계획
›
가양동3구역2026-07-27 · 재개발 · 대전광역시[변경] 가양동3구역 재개발사업 정비계획 결정 및 정비구역 지정, 지형도면 정정고시
정비구역 지정 변경
›
철산주공12단지2026-07-24 · 재건축 · 광명시[변경] 철산주공12단지 재건축정비사업 정비구역 및 정비계획 (경미한) 변경 결정 및 지형도면 고시
정비구역 지정 변경
›
금산주공 (단지)2026-07-24 · 재건축 · 안성시[신규] 안성 금산주공아파트 재건축정비계획 결정 및 정비구역 지정 고시 및 지형도면 고시
정비구역 지정
›
크로바아파트2026-07-24 · 소규모재건축 · 대구광역시 수성구[신규] 범어동 크로바아파트 소규모재건축사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
산성동1구역2026-07-24 · 재개발 · 대전광역시[변경] 산성동1구역 재개발사업 정비계획 결정(경미한 변경) 및 지형도면 고시
정비계획 변경
›
작전역 인근구역2026-07-24 · 재개발 · 인천광역시 계양구[신규] 작전역 인근구역 재개발사업 조합설립추진위원회 승인 고시
추진위원회 승인
›
명일우성 (단지)2026-07-23 · 재건축 · 서울특별시 강동구 도시관리국 재건축재개발과[신규] 명일우성아파트 재건축사업 정비구역 지정 및 정비계획 결정, 고덕택지 지구단위계획구역 지정 및 지구단위계획(변경) 결정·지형도면 고시
정비구역 지정
›
공릉동 240-1432026-07-23 · 소규모재건축 · 서울특별시 노원구 도시계획국 재건축사업과[신규] 공릉동 240-143 일원 소규모재건축정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
안락12026-07-22 · 재건축 · 부산광역시 동래구[변경] 안락1 재건축사업 관리처분계획(변경)인가 고시
관리처분 인가 변경
›
가양동3구역2026-07-22 · 재개발 · 대전광역시[신규] 가양동3구역 재개발사업 정비계획 결정 및 정비구역 지정, 지형도면 고시
정비구역 지정
›
광명제12R구역2026-07-21 · 재개발 · 광명시[변경] 광명제12R구역 주택재개발정비사업 사업시행인가(경미한) 변경인가 고시
사업시행 인가 변경
›
유천동2구역2026-07-21 · 재개발 · 대전광역시[신규] 유천동2구역 재개발사업 정비계획 결정 및 정비구역 지정, 지형도면 고시
정비구역 지정
›
삼성6구역2026-07-20 · 재개발 · 대전광역시 도시주택국 도시계획과[변경] 삼성6구역 재개발사업 정비계획 결정(변경)(경미한 사항) 및 지형도면 고시
정비계획 변경
›
수성1지구2026-07-20 · 재개발 · 대구광역시[변경] 수성1지구 재개발사업 정비구역 변경지정 및 지형도면 고시
정비구역 지정 변경
›
금정역남측구역2026-07-16 · 재개발 · 군포시[신규] 금정역남측구역 재개발사업 사업시행자(지정개발자) 지정 고시
사업시행 인가
›
신현동287-58번지일원2026-07-16 · 재개발 · 인천광역시[신규] 신현동287-58번지일원 재개발사업 정비계획 결정 및 정비구역 지정과 지형도면 고시
정비구역 지정
›
계산역임학역일원구역2026-07-16 · 재개발 · 인천광역시 계양구[신규] 계산역임학역일원구역 재개발사업 조합설립추진위원회 승인 고시
추진위원회 승인
›
반도보라 (단지)2026-07-15 · 소규모재건축 · 부산광역시 동래구[변경] 수안동 반도보라맨션 소규모재건축사업 사업시행계획(변경)인가 고시
사업시행 인가 변경
›
거제12026-07-15 · 재건축 · 부산광역시 주택건축국 도시정비과[변경] 거제1 재건축사업 정비계획 및 정비구역 변경 지정 고시
정비구역 지정 변경
›
신월2구역2026-07-15 · 재건축 · 창원시[변경] 신월2구역 재건축정비사업 사업시행계획(경미한 변경) 인가 고시
사업시행 인가 변경
›
중동2구역2026-07-15 · 재건축 · 부산광역시 해운대구[변경] 도시관리계획(중동2구역 재건축 지구단위계획구역 및 지구단위계획) 결정(변경) 및 지형도면 고시
기타 고시 변경
›
시민공원주변 재정비촉진4구역2026-07-15 · 재개발 · 부산광역시 부산진구[변경] 시민공원주변 재정비촉진지구 재정비촉진4구역 주택정비형 재개발사업 사업시행계획(경미한 변경)인가
사업시행 인가 변경
›
연지1-2구역2026-07-15 · 재개발 · 부산광역시 부산진구[신규] 연지1-2구역 주택재개발정비사업 준공인가 고시
준공 인가
›
장미연립2026-07-10 · 소규모재건축 · 인천광역시 계양구[변경] 장미연립 소규모주택 재건축사업 조합설립(경미한변경)인가 고시
조합설립 인가 변경
›
과천주공8·9단지2026-07-09 · 재건축 · 과천시[변경] 과천주공8·9단지 주택재건축정비사업 정비계획(경미한사항) 변경 및 지형도면 고시
정비계획 변경
›
과천주공10단지2026-07-09 · 재건축 · 과천시[변경] 과천주공10단지 주택재건축정비사업 정비계획 결정(경미한 변경) 및 지형도면 고시
정비계획 변경
›
신월7동 1구역2026-07-09 · 재개발 · 서울특별시 양천구 도시주택국 도시계획과[변경] 신월7동 1구역 주택정비형 재개발사업 정비계획 변경(경미한 변경) 결정, 지구단위계획 변경(경미한 변경) 및 지형도면 고시
정비계획 변경
›
용두동2구역2026-07-09 · 재개발 · 대전광역시[변경] 용두동2구역 재개발사업 기본계획(변경)·정비계획 결정(경미한 변경) 및 지형도면 고시
정비계획 변경
›
고잔연립7구역2026-07-08 · 재건축 · 안산시[신규] 고잔연립7구역 주택재건축사업 사업시행계획인가 고시
사업시행 인가
›
온천42026-07-08 · 재개발 · 부산광역시 동래구[신규] 온천4 재개발사업 준공인가 고시
준공 인가
›
대연92026-07-08 · 재개발 · 부산광역시 남구[신규] 대연9 재개발사업 정비계획 결정 및 정비구역 지정 고시
정비구역 지정
›
광안2구역2026-07-08 · 재개발 · 부산광역시 수영구[신규] 광안2구역 주택재개발정비사업 준공인가 고시
준공 인가
›
개금2구역2026-07-08 · 재개발 · 부산광역시 부산진구[변경] 개금2구역 주택재개발정비사업 사업시행계획(변경)인가 고시
사업시행 인가 변경
›
만덕12026-07-08 · 재개발 · 부산광역시 북구[신규] 만덕1 재개발사업 정비계획 결정 및 정비구역 지정 고시
정비구역 지정
›
당리52026-07-08 · 재개발 · 부산광역시[신규] 당리5 재개발사업 정비계획 결정 및 정비구역 지정 고시
정비구역 지정
›
만덕12026-07-08 · 재개발 · 부산광역시[신규] 만덕1 재개발사업 정비계획 결정 및 정비구역 지정 고시
정비구역 지정
›
건건동 660-14번지일원2026-07-08 · 가로주택정비 · 안산시[신규] 건건동 660-14번지일원 가로주택정비사업 사업시행계획인가 고시
사업시행 인가
›
기주공2026-07-07 · 재건축 · 전북특별자치도 정읍시[신규] 정읍시기주공 재건축정비사업 정비계획 결정 및 정비구역 지정 고시
정비구역 지정
›
황성주공1차 (단지)2026-07-03 · 재건축 · 경주시[신규] 황성주공1차아파트 재건축사업 사업시행계획인가 고시
사업시행 인가
›
삼천주공32026-07-03 · 재건축 · 전북특별자치도 전주시[변경] 삼천주공3 재건축정비사업 정비계획 및 정비구역 변경(경미) 지정 고시
정비구역 지정 변경
›
수정 (단지)2026-07-02 · 재건축 · 서울특별시 양천구 도시주택국 재건축사업과[변경] 수정아파트 재건축사업 정비계획 변경(경미한 변경) 지구단위계획 결정(변경) 및 지형도면 고시
정비계획 변경
›
지금·도농1-1구역2026-07-02 · 재개발 · 남양주시[변경] 지금·도농1-1구역 재개발정비사업사업시행(경미한)변경인가 고시
사업시행 인가 변경
›
남천2구역2026-07-01 · 재건축 · 부산광역시 수영구[변경] 남천2구역(제3지구:삼익비치) 재건축정비사업 사업시행계획변경인가 고시
사업시행 인가 변경
›
연산5구역2026-07-01 · 재개발 · 부산광역시 연제구[신규] 연산5구역 재개발정비사업 부분 준공인가 고시
준공 인가
›
동성2026-07-01 · 가로주택정비 · 서울특별시 강서구 균형발전도시국 도시개발과[신규] 동성 가로주택정비사업 조합설립(변경)인가 및 지형도면 고시
조합설립 인가 변경
›
봉래동2가 75-1번지2026-07-01 · 가로주택정비 · 부산광역시 영도구[신규] 봉래동2가 75-1번지 일원 가로주택정비사업 조합설립(경미)변경인가 및 지형도면 고시
조합설립 인가 변경
›
대우 (단지)2026-07-01 · 가로주택정비 · 경기도 시흥시[신규] 은행동 대우아파트 가로주택정비사업 지형도면 고시
기타 고시
›
철산주공10,11단지2026-06-30 · 재건축 · 광명시[변경] 철산주공10,11단지 주택재건축정비사업 관리처분계획(변경)인가 고시
관리처분 인가 변경
›
신세계아파트2026-06-29 · 재건축 · 인천광역시[신규] 신세계아파트 재건축사업 정비계획 결정 및 정비구역 지정과 지형도면 고시
정비구역 지정
›
경동구역2026-06-29 · 재개발 · 인천광역시 중구[변경] 경동구역 재개발정비사업 사업시행계획인가 고시
사업시행 인가 변경
›
금강맨션2026-06-29 · 가로주택정비 · 부천시[신규] 역곡동 금강맨션 일원 가로주택정비사업 사업대행개시결정 고시
기타 고시
›
새보미 (단지)2026-06-29 · 가로주택정비 · 부천시[신규] 새보미아파트 가로주택정비사업 조합설립인가 취소 고시
조합설립 인가 취소
›
풍년연립2026-06-26 · 소규모재건축 · 전북특별자치도 전주시[변경] 풍년연립 소규모 재건축정비사업 사업시행계획인가 고시
사업시행 인가 변경
›
원동나래지구2026-06-26 · 재개발 · 강원특별자치도 원주시[변경] 원동나래지구 주택재개발정비사업 정비계획 결정 및 정비구역(경미한)
정비계획 변경
›
우성4차아파트 및 주변2026-06-26 · 가로주택정비 · 의왕시[변경] 우성4차아파트 및 주변 가로주택정비업 사업시행계획(변경)인가 고시
사업시행 인가 변경
›
기린동산빌라2026-06-25 · 소규모재건축 · 서울특별시 마포구 도시관리국 도시계획과[변경] 동교동 기린동산빌라 소규모재건축정비사업 사업시행자 (변경)지정 및 지형도면 고시
사업시행 인가 변경
›
봉천 제14구역2026-06-25 · 재개발 · 서울특별시 주택실 건축기획관 주거정비과[변경] 봉천 제14구역 주택정비형 재개발구역 정비구역(계획) 결정(변경) / 지구단위계획 결정(변경) 및 지형도면 고시
정비계획 변경
›
산본1동2지구2026-06-25 · 재개발 · 군포시[신규] 금정역 산본1동2지구 재개발사업 사업시행계획인가 고시
사업시행 인가
›
현대빌라2026-06-25 · 가로주택정비 · 서울특별시 양천구 도시주택국 재건축사업과[신규] 현대빌라 일원 가로주택정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
은하 (단지)2026-06-25 · 가로주택정비 · 인천광역시 남동구[신규] 은하아파트 가로주택정비사업 조합설립(변경)인가 고시
조합설립 인가 변경
›
하단12026-06-24 · 재건축 · 부산광역시 주택건축국 도시정비과[변경] 하단1 재건축사업 정비계획 및 정비구역 변경 지정 고시
정비구역 지정 변경
›
남양1구역2026-06-24 · 재건축 · 경상남도 창원시[신규] 남양1구역 재건축사업 정비구역 및 사업시행자 지정, 지형도면 고시
사업시행 인가
›
홍은제13구역2026-06-24 · 재개발 · 서울특별시 서대문구 도시정비국 주거정비과[변경] 홍은제13구역 주택재개발정비사업 정비계획 변경 (경미한 사항) 고시
정비계획 변경
›
연산5구역2026-06-24 · 재개발 · 부산광역시 연제구[변경] 연산5구역 재개발정비사업 사업시행계획인가 고시
사업시행 인가 변경
›
민락22026-06-24 · 재개발 · 부산광역시[변경] 민락2 재개발사업 정비계획 및 정비구역 변경 지정고시
정비구역 지정 변경
›
부흥연립2026-06-24 · 가로주택정비 · 인천광역시 부평구[신규] 부흥연립 가로주택정비사업 사업시행계획(변경)인가 고시
사업시행 인가 변경
›
덕천동 365-26번지2026-06-24 · 가로주택정비 · 부산광역시 북구[신규] 덕천동 365-26번지 가로주택정비사업 사업시행계획인가 고시
사업시행 인가
›
중앙연립2026-06-22 · 소규모재건축 · 군포시[변경] 중앙연립 소규모재건축사업 조합설립(변경)인가 및 지형도면(변경) 고시
조합설립 인가 변경
›
지산목련아파트2026-06-22 · 재건축 · 대구광역시 수성구[신규] 지산목련아파트 재건축사업 정비기본계획 변경, 정비구역 지정 및 지형도면 고시
정비구역 지정
›
라이프아파트2026-06-22 · 가로주택정비 · 부천시[변경] 라이프아파트 일원 가로주택정비사업 조합설립변경인가 고시
조합설립 인가 변경
›
대구방촌2026-06-22 · 가로주택정비 · 대구광역시 동구[변경] 대구방촌 LH참여형 가로주택정비사업 사업시행계획(변경)인가 고시
사업시행 인가 변경
›
영남아파트2026-06-18 · 재건축 · 경기도 시흥시[변경] 시흥대야3 영남아파트 재건축 정비사업 정비구역 및 정비계획 (경미한)변경 정정고시
정비구역 지정 변경
›
영남아파트2026-06-18 · 재건축 · 경기도 시흥시 균형발전과 균형개발과[신규] 시흥대야3 영남아파트 재건축정비사업 준공인가 고시
준공 인가
›
퇴계원4구역2026-06-18 · 재개발 · 남양주시[변경] 퇴계원4구역 재개발정비사업정비계획(경미한 변경) 결정 및 지형도면 고시
정비계획 변경
›
복산1구역2026-06-18 · 재개발 · 울산광역시[신규] 중구 복산1구역 재개발사업 정비구역 지정 및 정비계획 결정 지형도면고시
정비구역 지정
›
장위11-2구역2026-06-18 · 가로주택정비 · 서울특별시 성북구 도시관리국 신속도시정비과[신규] 「장위11-2구역 가로주택정비사업」 지형도면 고시
기타 고시
›
우성주택2026-06-17 · 소규모재건축 · 서울특별시 강서구 균형발전도시국 도시개발과[신규] 우성주택 소규모재건축사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
강남연립2026-06-17 · 소규모재건축 · 서울특별시 강서구 균형발전도시국 도시개발과[신규] 강남연립 소규모재건축사업 조합설립(변경)인가 고시
조합설립 인가 변경
›
일동파크맨션 (단지)2026-06-17 · 소규모재건축 · 부산광역시 북구[신규] 덕천동 일동파크맨션 소규모 재건축 정비사업 사업시행인가 고시
사업시행 인가
›
우암22026-06-17 · 재개발 · 부산광역시 남구[변경] 우암2구역 재개발사업 사업시행계획변경인가 고시
사업시행 인가 변경
›
사직22026-06-17 · 재개발 · 부산광역시 주택건축국 도시정비과[변경] 사직2 재개발사업 정비계획 및 정비구역 변경 지정 고시
정비구역 지정 변경
›
광안2구역2026-06-17 · 재개발 · 부산광역시 수영구[변경] 광안2구역 재개발정비사업 사업시행계획(변경)인가 고시
사업시행 인가 변경
›
산본1동2지구2026-06-17 · 재개발 · 군포시[변경] 금정역 산본1동2지구 재개발사업 정비계획 변경 결정(경미한 사항) 및 지형도면 고시
정비계획 변경
›
봉래동1가 111-1번지2026-06-17 · 가로주택정비 · 부산광역시 영도구[신규] 봉래동1가 111-1번지 일원 가로주택정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
건우 (단지)2026-06-16 · 소규모재건축 · 인천광역시 부평구[신규] 건우아파트 소규모재건축 정비사업 조합설립변경인가 고시
조합설립 인가 변경
›
철산주공 8.9단지아파트2026-06-15 · 재건축 · 광명시[변경] 철산주공 8.9단지아파트 주택재건축 정비구역 및 정비계획변경(경미한 사항) 고시
정비계획 변경
›
대야구역2026-06-15 · 재개발 · 창원시[변경] 대야구역 재개발사업 정비계획 결정·정비구역 지정(경미한 변경) 및 지형도면 고시
정비구역 지정 변경
›
소사본1-1구역2026-06-15 · 재개발 · 부천시[변경] 소사본1-1구역 재개발사업 사업시행계획(변경)인가 고시
사업시행 인가 변경
›
성산주택2026-06-15 · 가로주택정비 · 부천시[변경] 성산주택 가로주택정비사업 사업시행계획변경인가(관리처분계획 포함) 고시
관리처분 인가 변경
›
용해2단지아파트2026-06-12 · 재건축 · 목포시[신규] 용해2단지아파트 주택재건축 정비사업 사업시행계획인가 고시
사업시행 인가
›
A3구역2026-06-12 · 가로주택정비 · 경기도 고양시[신규] 일산동 A3구역 가로주택정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
신반포26차아파트2026-06-11 · 소규모재건축 · 서울특별시 서초구 도시관리국 재건축사업과[신규] 신반포26차아파트 소규모재건축정비사업 조합설립인가 및 지형도면 고시
조합설립 인가
›
태릉우성아파트 (단지)2026-06-11 · 재건축 · 서울특별시 주택실 건축기획관 공동주택과[신규] 태릉우성아파트 재건축사업 정비구역 지정 및 정비계획 결정 지구단위계획구역 지정·지구단위계획 결정 정정고시
정비구역 지정
›
동구432026-06-10 · 재개발 · 대구광역시 도시주택국 도시정비과[변경] 동구43 재개발사업 정비구역 변경 지정 및 지형도면 고시
정비구역 지정 변경
›
대잠1구역2026-06-10 · 재개발 · 포항시[신규] 대잠1구역 재개발사업 정비계획 결정·정비구역 지정 및 지형도면 고시
정비구역 지정
›
당동 67-8번지2026-06-10 · 가로주택정비 · 군포시[변경] 당동 67-8번지 일원 가로주택정비사업 조합설립(변경)인가 및 지형도면 고시
조합설립 인가 변경
›
소하동2구역2026-06-09 · 가로주택정비 · 광명시[변경] 소하동2구역 가로주택정비사업 사업시행계획(관리처분계획) (변경)인가 고시
관리처분 인가 변경
›
명성연립2026-06-08 · 가로주택정비 · 부천시[신규] 명성연립 일원 가로주택정비사업 사업시행계획인가 고시
사업시행 인가
›
우성타운2026-06-04 · 재건축 · 서울특별시 중랑구 주택도시국 주거개선과[변경] 중화동 우성타운 재건축정비사업 정비계획 (경미한)변경 결정 지구단위계획 (변경) 결정 및 지형도면 고시
정비계획 변경
›
유원제일2차 (단지)2026-06-04 · 재건축 · 서울특별시 영등포구 도시공간국 재건축사업과[변경] 유원제일2차아파트 재건축 정비구역·정비계획 결정(경미한 변경), 지구단위계획 결정(경미한 변경) 및 지형도면 고시
정비계획 변경
›
우동3구역2026-06-03 · 재개발 · 부산광역시 해운대구[변경] 우동3구역 재개발사업 관리처분계획인가 정정 고시
관리처분 인가 변경
›
비산초교주변지구2026-06-02 · 재개발 · 안양시[변경] 비산초교주변지구 재개발사업 사업시행계획(변경)인가 고시
사업시행 인가 변경
›
상록지구2026-06-02 · 재개발 · 안양시[변경] 상록지구 재개발사업 정비계획 결정 및 정비구역 지정 변경(경미한 사항) 고시
정비구역 지정 변경
›
줄을 누르면 토지이음의 고시 원문이 열립니다.
정비사업은 이런 순서로 진행됩니다
- 정비계획 수립·정비구역 지정 — 지자체가 구역을 정하고 계획(용적률·세대수 등)을 결정합니다. 여기서부터 사업이 공식화됩니다.
- 추진위원회 승인 — 조합을 만들기 위한 준비 조직입니다(재개발·재건축).
- 조합설립 인가 — 토지등소유자의 동의를 받아 조합이 법적으로 생깁니다. 이때부터 조합원 지위 양도가 제한되는 경우가 있습니다.
- 사업시행 인가 — 건축 계획이 확정됩니다. 몇 층, 몇 세대를 지을지가 이 단계에서 정해집니다.
- 관리처분 인가 — 조합원이 새 집을 어떻게 나눠 받고 얼마를 더 내는지(분담금)가 정해집니다. 이후 이주·철거가 시작됩니다.
- 착공 → 준공 → 이전고시 — 공사를 마치고 소유권이 새 건물로 넘어가면 사업이 끝납니다.
단계가 뒤로 갈수록 사업이 무산될 가능성은 줄지만, 그만큼 가격에 먼저 반영되는 경향이 있습니다.
‘구역 해제’는 사업이 멈췄다는 뜻입니다.
이 목록은 이렇게 만듭니다
- 국토교통부 토지이음이 모은 전국 지자체 고시 중 재건축·재개발·가로주택정비·소규모주택정비 고시만 모읍니다.
항만·산업단지 재개발처럼 주택 정비사업이 아닌 것은 뺍니다.
- 고시 제목에서 대상·사업 유형·단계를 자동으로 분류하고, 그 분류가 제목의 낱말과 맞는지 다시 확인해
맞지 않는 것은 싣지 않습니다. 분류가 틀린 고시를 싣는 것보다 비워 두는 편이 낫기 때문입니다.
- 단지 이름은 같은 시군구에 같은 이름의 단지가 하나뿐일 때만 표시합니다. 흔한 이름은 다른 단지로 잘못 연결될 수 있어서
고시 제목을 그대로 둡니다.
분류는 참고용입니다. 사업 일정·권리관계는 반드시 고시 원문과 해당 지자체·조합에 확인하세요.
출처: 국토교통부 토지이음 고시정보.
dmFyIFRIRU1FX0lDTz1mdW5jdGlvbih0KXtyZXR1cm4gdD09PSdkYXJrJz8nPHN2ZyBjbGFzcz0idHBoLWkgaWNvLXMiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS43IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSJNMjAgMTQuNUE4LjUgOC41IDAgMCAxIDkuNSA0YTguNSA4LjUgMCAxIDAgMTAuNSAxMC41eiIvPjwvc3ZnPic6dD09PSdsaWdodCc/JzxzdmcgY2xhc3M9InRwaC1pIGljby1zIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuNyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDcuNWE0LjUgNC41IDAgMSAwIDAgOSA0LjUgNC41IDAgMCAwIDAtOXpNMTIgMnYyTTEyIDIwdjJNNC4yIDQuMmwxLjQgMS40TTE4LjQgMTguNGwxLjQgMS40TTIgMTJoMk0yMCAxMmgyTTQuMiAxOS44bDEuNC0xLjRNMTguNCA1LjZsMS40LTEuNCIvPjwvc3ZnPic6JzxzdmcgY2xhc3M9InRwaC1pIGljby1zIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuNyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDNhOSA5IDAgMSAwIDAgMTggOSA5IDAgMCAwIDAtMTh6TTEyIDN2MThhOSA5IDAgMCAwIDAtMTh6Ii8+PC9zdmc+Jzt9OwoKdmFyICQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0cGgtJytpKTt9Owp2YXIgdj1mdW5jdGlvbihpKXt2YXIgZT0kKGkpO3JldHVybiBlPygrZS52YWx1ZXx8MCk6MDt9Owp2YXIgcz1mdW5jdGlvbihpKXt2YXIgZT0kKGkpO3JldHVybiBlP2UudmFsdWU6Jyc7fTsKdmFyIGY9ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9Mb2NhbGVTdHJpbmcoJ2tvLUtSJykrJ+ybkCc7fTsKdmFyIGZkPWZ1bmN0aW9uKG4sZCl7cmV0dXJuIG4udG9Mb2NhbGVTdHJpbmcoJ2tvLUtSJyx7bWF4aW11bUZyYWN0aW9uRGlnaXRzOmR8fDF9KTt9Owp2YXIgY3V0MTA9ZnVuY3Rpb24oeCl7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yb3VuZCh4KS8xMCkqMTA7fTsKdmFyIHNldD1mdW5jdGlvbihpLHQpe3ZhciBlPSQoaSk7aWYoIWUpcmV0dXJuO2lmKGk9PT0nbWFpbicpe2NvdW50VXAoZSx0KTt9ZWxzZXtlLnRleHRDb250ZW50PXQ7fX07CgovKiDslYjsoITtlZwg7KCA7J6l7IaMIOygkeq3vCDigJQg7Iuc7YGs66a/IOuqqOuTnC/ssKjri6gg7ZmY6rK97JeQ7ISc64+EIOyjveyngCDslYrqsowgKi8KdmFyIHN0b3JlPXsKICBnZXQ6ZnVuY3Rpb24oayl7dHJ5e3JldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrKTt9Y2F0Y2goZSl7cmV0dXJuIG51bGw7fX0sCiAgc2V0OmZ1bmN0aW9uKGssdmFsKXt0cnl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oayx2YWwpO31jYXRjaChlKXt9fSwKICBkZWw6ZnVuY3Rpb24oayl7dHJ5e2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGspO31jYXRjaChlKXt9fQp9OwoKdmFyIHRvYXN0PWZ1bmN0aW9uKG1zZyl7CiAgdmFyIHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRwaC10b2FzdCcpOwogIGlmKCF0KXt0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO3QuY2xhc3NOYW1lPSd0cGgtdG9hc3QnO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCk7fQogIHQudGV4dENvbnRlbnQ9bXNnO3QuY2xhc3NMaXN0LmFkZCgnc2hvdycpOwogIGNsZWFyVGltZW91dCh0Ll9oKTt0Ll9oPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTt9LDE5MDApOwp9OwoKLyog7YWM66eIIO2GoOq4gDog7Iuc7Iqk7YWcIOyEpOyglSDihpIg65287J207Yq4IOKGkiDri6Ttgawg7Iic7ZmYICovCmZ1bmN0aW9uIGluaXRUaGVtZShyb290KXsKICB2YXIgSz0ndHBoLXRoZW1lJywgY3VyPXN0b3JlLmdldChLKTsKICBpZihjdXIpIHJvb3Quc2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJyxjdXIpOwogIHZhciBiPSQoJ3RoZW1lJyk7CiAgaWYoIWIpIHJldHVybjsKICB2YXIgbGFiZWw9ZnVuY3Rpb24oKXsKICAgIHZhciB0PXJvb3QuZ2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJyk7CiAgICBiLmlubmVySFRNTD1USEVNRV9JQ08odCkrJyA8c3Bhbj4nKyh0PT09J2RhcmsnPyfri6TtgawnOnQ9PT0nbGlnaHQnPyfrnbzsnbTtirgnOifsnpDrj5knKSsnPC9zcGFuPic7CiAgfTsKICBsYWJlbCgpOwogIGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKCl7CiAgICB2YXIgdD1yb290LmdldEF0dHJpYnV0ZSgnZGF0YS10aGVtZScpOwogICAgdmFyIG54PSF0PydsaWdodCc6dD09PSdsaWdodCc/J2RhcmsnOicnOwogICAgaWYobngpe3Jvb3Quc2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJyxueCk7c3RvcmUuc2V0KEssbngpO30KICAgIGVsc2V7cm9vdC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtdGhlbWUnKTtzdG9yZS5kZWwoSyk7fQogICAgbGFiZWwoKTsKICB9KTsKfQoKLyog7J6F66Cl6rCSIOKGlCBVUkwg7YyM652866+47YSwIOKGlCBsb2NhbFN0b3JhZ2UgKi8KZnVuY3Rpb24gaW5pdFN0YXRlKHNsdWcsIGlkcywgb25jaGFuZ2UpewogIHZhciBLRVk9J3RwaC1pbi0nK3NsdWcsIHE9bmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpLCB1c2VkPWZhbHNlOwogIGlkcy5mb3JFYWNoKGZ1bmN0aW9uKGkpewogICAgdmFyIGU9JChpKTsgaWYoIWUpIHJldHVybjsKICAgIGlmKHEuaGFzKGkpKXsgZS52YWx1ZT1xLmdldChpKTsgdXNlZD10cnVlOyB9CiAgfSk7CiAgaWYoIXVzZWQpewogICAgdmFyIHJhdz1zdG9yZS5nZXQoS0VZKTsKICAgIGlmKHJhdyl7IHRyeXsgdmFyIG89SlNPTi5wYXJzZShyYXcpOwogICAgICBpZHMuZm9yRWFjaChmdW5jdGlvbihpKXsgdmFyIGU9JChpKTsgaWYoZSYmb1tpXSE9PXVuZGVmaW5lZCYmb1tpXSE9PScnKSBlLnZhbHVlPW9baV07IH0pOwogICAgfWNhdGNoKGUpe30gfQogIH0KICB2YXIgc2F2ZT1mdW5jdGlvbigpewogICAgdmFyIG89e307IGlkcy5mb3JFYWNoKGZ1bmN0aW9uKGkpeyB2YXIgZT0kKGkpOyBpZihlKSBvW2ldPWUudmFsdWU7IH0pOwogICAgc3RvcmUuc2V0KEtFWSwgSlNPTi5zdHJpbmdpZnkobykpOwogIH07CiAgdmFyIHNoYXJlPSQoJ3NoYXJlJyk7CiAgaWYoc2hhcmUpIHNoYXJlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbigpewogICAgdmFyIHA9bmV3IFVSTFNlYXJjaFBhcmFtcygpOwogICAgaWRzLmZvckVhY2goZnVuY3Rpb24oaSl7IHZhciBlPSQoaSk7IGlmKGUpIHAuc2V0KGksZS52YWx1ZSk7IH0pOwogICAgdmFyIHVybD1sb2NhdGlvbi5vcmlnaW4rbG9jYXRpb24ucGF0aG5hbWUrJz8nK3AudG9TdHJpbmcoKTsKICAgIHZhciBkb25lPWZ1bmN0aW9uKCl7dG9hc3QoJ+unge2BrOulvCDrs7XsgqztlojsirXri4jri6QnKTt9OwogICAgaWYobmF2aWdhdG9yLmNsaXBib2FyZCYmbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQpewogICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh1cmwpLnRoZW4oZG9uZSxmdW5jdGlvbigpe3Byb21wdCgn7JWE656YIOyjvOyGjOulvCDrs7XsgqztlZjshLjsmpQnLHVybCk7fSk7CiAgICB9IGVsc2UgcHJvbXB0KCfslYTrnpgg7KO87IaM66W8IOuzteyCrO2VmOyEuOyalCcsdXJsKTsKICB9KTsKICB2YXIgY29weT0kKCdjb3B5Jyk7CiAgaWYoY29weSkgY29weS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oKXsKICAgIHZhciBsaW5lcz1bZG9jdW1lbnQudGl0bGUuc3BsaXQoJ3wnKVswXS50cmltKCldOwogICAgaWRzLmZvckVhY2goZnVuY3Rpb24oaSl7CiAgICAgIHZhciBlPSQoaSk7IGlmKCFlKSByZXR1cm47CiAgICAgIHZhciBsYWI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbGFiZWxbZm9yPXRwaC0nK2krJ10nKTsKICAgICAgdmFyIHZhbD1lLnRhZ05hbWU9PT0nU0VMRUNUJz9lLm9wdGlvbnNbZS5zZWxlY3RlZEluZGV4XS50ZXh0OigrZS52YWx1ZXx8MCkudG9Mb2NhbGVTdHJpbmcoJ2tvLUtSJyk7CiAgICAgIGlmKGxhYikgbGluZXMucHVzaCgnwrcgJytsYWIudGV4dENvbnRlbnQudHJpbSgpKyc6ICcrdmFsKTsKICAgIH0pOwogICAgbGluZXMucHVzaCgnJyk7CiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudHBoLXRvdGFsJykuZm9yRWFjaChmdW5jdGlvbih0KXsKICAgICAgdmFyIGw9dC5xdWVyeVNlbGVjdG9yKCcubCcpLCB2YWw9dC5xdWVyeVNlbGVjdG9yKCcudicpOwogICAgICBpZihsJiZ2YWwpIGxpbmVzLnB1c2gobC50ZXh0Q29udGVudC50cmltKCkrJzogJyt2YWwudGV4dENvbnRlbnQudHJpbSgpKTsKICAgIH0pOwogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRwaC1wYWdlIHRhYmxlJykuZm9yRWFjaChmdW5jdGlvbih0Yil7CiAgICAgIHRiLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyJykuZm9yRWFjaChmdW5jdGlvbih0cil7CiAgICAgICAgdmFyIHRkPXRyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkJyk7CiAgICAgICAgaWYodGQubGVuZ3RoPT09MikgbGluZXMucHVzaCgnwrcgJyt0ZFswXS50ZXh0Q29udGVudC50cmltKCkrJzogJyt0ZFsxXS50ZXh0Q29udGVudC50cmltKCkpOwogICAgICB9KTsKICAgIH0pOwogICAgbGluZXMucHVzaCgnJywgbG9jYXRpb24ub3JpZ2luK2xvY2F0aW9uLnBhdGhuYW1lKTsKICAgIHZhciB0eHQ9bGluZXMuam9pbignXG4nKTsKICAgIHZhciBkb25lPWZ1bmN0aW9uKCl7dG9hc3QoJ+qysOqzvOulvCDrs7XsgqztlojsirXri4jri6QnKTt9OwogICAgaWYobmF2aWdhdG9yLmNsaXBib2FyZCYmbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQpIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHR4dCkudGhlbihkb25lLGRvbmUpOwogICAgZWxzZSB7IHZhciB0YT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpOyB0YS52YWx1ZT10eHQ7IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGEpOwogICAgICAgICAgIHRhLnNlbGVjdCgpOyB0cnl7ZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTt9Y2F0Y2goZSl7fSB0YS5yZW1vdmUoKTsgZG9uZSgpOyB9CiAgfSk7CiAgdmFyIHJlc2V0PSQoJ3Jlc2V0Jyk7CiAgaWYocmVzZXQpIHJlc2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbigpewogICAgc3RvcmUuZGVsKEtFWSk7IGxvY2F0aW9uLmhyZWY9bG9jYXRpb24ucGF0aG5hbWU7CiAgfSk7CiAgcmV0dXJuIHNhdmU7Cn0KCi8qIOq4iOyVoSDsnoXroKUg67CRIOu5oOuluCDsobDsoJUg7LmpICovCmZ1bmN0aW9uIGluaXRDaGlwcyhvbmNoYW5nZSl7CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRwaC1jaGlwJykuZm9yRWFjaChmdW5jdGlvbihjKXsKICAgIGMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKCl7CiAgICAgIHZhciBlPSQoYy5kYXRhc2V0LnQpOyBpZighZSkgcmV0dXJuOwogICAgICB2YXIgZD1jLmRhdGFzZXQuZDsKICAgICAgZS52YWx1ZSA9IGQ9PT0nMCcgPyAwIDogTWF0aC5tYXgoMCwoK2UudmFsdWV8fDApKygrZCkpOwogICAgICBvbmNoYW5nZSgpOwogICAgfSk7CiAgfSk7Cn0KCi8qIOyeheugpeqwkuydhCDsgqzrnozsnbQg7J2964qUIOusuOyepeycvOuhnCAoMywwMDAsMDAwIOKGkiAzMDDrp4zsm5ApICovCmZ1bmN0aW9uIGtvck1vbmV5KG4pewogIG49TWF0aC5yb3VuZChuKTsgaWYoIW4pIHJldHVybiAnMOybkCc7CiAgdmFyIGVvaz1NYXRoLmZsb29yKG4vMTAwMDAwMDAwKSwgbWFuPU1hdGguZmxvb3IoKG4lMTAwMDAwMDAwKS8xMDAwMCksIHdvbj1uJTEwMDAwLCBwPVtdOwogIGlmKGVvaykgcC5wdXNoKGVvaysn7Ja1Jyk7CiAgaWYobWFuKSBwLnB1c2gobWFuLnRvTG9jYWxlU3RyaW5nKCdrby1LUicpKyfrp4wnKTsKICBpZih3b24pIHAucHVzaCh3b24udG9Mb2NhbGVTdHJpbmcoJ2tvLUtSJykpOwogIHJldHVybiBwLmpvaW4oJyAnKSsn7JuQJzsKfQpmdW5jdGlvbiBpbml0UmVhZChtYXApewogIE9iamVjdC5rZXlzKG1hcCkuZm9yRWFjaChmdW5jdGlvbihpZCl7CiAgICB2YXIgZT0kKGlkKSwgb3V0PSQobWFwW2lkXSk7IGlmKCFlfHwhb3V0KSByZXR1cm47CiAgICB2YXIgdXBkPWZ1bmN0aW9uKCl7IG91dC50ZXh0Q29udGVudCA9ICgrZS52YWx1ZT4wKSA/IGtvck1vbmV5KCtlLnZhbHVlKSA6ICcnOyB9OwogICAgZS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsdXBkKTsgdXBkKCk7CiAgfSk7Cn0KCgovKiDsiKvsnpAg7Lm07Jq07Yq47JeFIOKAlCDqsrDqs7zqsIAg67CU64CUIOuVjCDrtoDrk5zrn73qsowgKi8KZnVuY3Rpb24gY291bnRVcChlbCwgdGV4dCl7CiAgaWYoIWVsKSByZXR1cm47CiAgdmFyIHByZXY9ZWwuX3Jhd3x8JycsIGN1cj10ZXh0OwogIGVsLl9yYXc9Y3VyOwogIHZhciBwbj1wYXJzZUZsb2F0KFN0cmluZyhwcmV2KS5yZXBsYWNlKC9bXjAtOS4tXS9nLCcnKSk7CiAgdmFyIGNuPXBhcnNlRmxvYXQoU3RyaW5nKGN1cikucmVwbGFjZSgvW14wLTkuLV0vZywnJykpOwogIHZhciByZWR1Y2U9d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKScpLm1hdGNoZXM7CiAgaWYocmVkdWNlfHwhaXNGaW5pdGUocG4pfHwhaXNGaW5pdGUoY24pfHxwbj09PWNufHxNYXRoLmFicyhjbi1wbik8MSl7ZWwudGV4dENvbnRlbnQ9Y3VyO3JldHVybjt9CiAgdmFyIHByZT1jdXIuc2xpY2UoMCxjdXIuc2VhcmNoKC9bMC05LV0vKSk7CiAgdmFyIHBvc3Q9Y3VyLnNsaWNlKGN1ci5zZWFyY2goL1swLTldW14wLTldKiQvKSsxKS5yZXBsYWNlKC9eWzAtOV0vLCcnKTsKICB2YXIgc3VmZml4PWN1ci5yZXBsYWNlKC9eW14wLTktXSovLCcnKS5yZXBsYWNlKC9eWzAtOSwuXC1dKy8sJycpOwogIHZhciB0MD1udWxsLCBkdXI9MzgwOwogIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGVsLl9hZnx8MCk7CiAgZnVuY3Rpb24gc3RlcCh0KXsKICAgIGlmKCF0MCkgdDA9dDsKICAgIHZhciBrPU1hdGgubWluKDEsKHQtdDApL2R1ciksIGU9MS1NYXRoLnBvdygxLWssMyk7CiAgICB2YXIgdmFsPXBuKyhjbi1wbikqZTsKICAgIGVsLnRleHRDb250ZW50PXByZStNYXRoLnJvdW5kKHZhbCkudG9Mb2NhbGVTdHJpbmcoJ2tvLUtSJykrc3VmZml4OwogICAgaWYoazwxKSBlbC5fYWY9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApOyBlbHNlIGVsLnRleHRDb250ZW50PWN1cjsKICB9CiAgZWwuX2FmPXJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTsKfQoKLyog66qo67CU7J28IOqzoOyglSDqsrDqs7zrsJQgKyDrp6gg7JyE66GcICovCmZ1bmN0aW9uIGluaXRTdGlja3kocm9vdCwgbGFiZWwpewogIGlmKCFyb290KSByZXR1cm47CiAgdmFyIG1haW49JCgnbWFpbicpOyBpZighbWFpbikgcmV0dXJuOwogIHZhciBiYXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgYmFyLmNsYXNzTmFtZT0ndHBoLXN0aWNreSc7CiAgYmFyLmlubmVySFRNTD0nPGRpdiBjbGFzcz0ibCI+JytsYWJlbCsnPC9kaXY+PGRpdiBjbGFzcz0idiIgaWQ9InRwaC1zdGlja3l2Ij7igKY8L2Rpdj4nOwogIHJvb3QuYXBwZW5kQ2hpbGQoYmFyKTsKICB2YXIgdG9wPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogIHRvcC50eXBlPSdidXR0b24nOyB0b3AuY2xhc3NOYW1lPSd0cGgtdG9wJzsgdG9wLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsJ+unqCDsnITroZwnKTsKICB0b3AuaW5uZXJIVE1MPSc8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyIDE5VjUiLz48cGF0aCBkPSJNNSAxMmw3LTcgNyA3Ii8+PC9zdmc+JzsKICB0b3AuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKCl7d2luZG93LnNjcm9sbFRvKHt0b3A6MCxiZWhhdmlvcjonc21vb3RoJ30pO30pOwogIHJvb3QuYXBwZW5kQ2hpbGQodG9wKTsKICB2YXIgc3Y9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RwaC1zdGlja3l2Jyk7CiAgdmFyIHN5bmM9ZnVuY3Rpb24oKXsKICAgIGlmKHN2JiZzdi50ZXh0Q29udGVudCE9PW1haW4udGV4dENvbnRlbnQpIHN2LnRleHRDb250ZW50PW1haW4udGV4dENvbnRlbnQ7CiAgICB2YXIgcj1tYWluLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgYmFyLmNsYXNzTGlzdC50b2dnbGUoJ29uJywgci5ib3R0b208NTYpOwogICAgdG9wLmNsYXNzTGlzdC50b2dnbGUoJ29uJywgd2luZG93LnNjcm9sbFk+NTAwKTsKICB9OwogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLHN5bmMse3Bhc3NpdmU6dHJ1ZX0pOwogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLHN5bmMpOwogIGlmKHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyKSBuZXcgTXV0YXRpb25PYnNlcnZlcihzeW5jKS5vYnNlcnZlKG1haW4se2NoaWxkTGlzdDp0cnVlLGNoYXJhY3RlckRhdGE6dHJ1ZSxzdWJ0cmVlOnRydWV9KTsKICBzeW5jKCk7Cn0KCi8qIOKUgOKUgCDssKjtirgg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgIOyDieydgCBDU1Mg67OA7IiYIC0tczEvLS1zMi8tLXMzICjqsoDspp3rkJwg7Lm07YWM6rOg66asIO2MlOugiO2KuCkuCiAgIOqzhOyXtOydtCAy6rCcIOydtOyDgeydtOuptCDrspTroYDrpbwg7ZWt7IOBIOu2meydtOqzoCwg6rCS7J2AIO2RnOyXkOuPhCDqt7jrjIDroZwg7J6I64ukLiAqLwp2YXIgU1ZHTlM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJzsKZnVuY3Rpb24gZWwodCxhKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHTlMsdCk7Zm9yKHZhciBrIGluIGEpZS5zZXRBdHRyaWJ1dGUoayxhW2tdKTtyZXR1cm4gZTt9CgpmdW5jdGlvbiB0aXAoYm94KXsKICB2YXIgdD1ib3gucXVlcnlTZWxlY3RvcignLnRwaC10aXAnKTsKICBpZighdCl7dD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTt0LmNsYXNzTmFtZT0ndHBoLXRpcCc7Ym94LmFwcGVuZENoaWxkKHQpO30KICByZXR1cm4gdDsKfQpmdW5jdGlvbiBzaG93VGlwKGJveCx4LHksaHRtbCl7CiAgdmFyIHQ9dGlwKGJveCk7IHQuaW5uZXJIVE1MPWh0bWw7IHQuc3R5bGUub3BhY2l0eT0nMSc7CiAgdmFyIHc9dC5vZmZzZXRXaWR0aCwgYnc9Ym94LmNsaWVudFdpZHRoOwogIHQuc3R5bGUubGVmdD1NYXRoLm1heCg0LE1hdGgubWluKGJ3LXctNCx4LXcvMikpKydweCc7CiAgdC5zdHlsZS50b3A9TWF0aC5tYXgoMix5LXQub2Zmc2V0SGVpZ2h0LTEwKSsncHgnOwp9CmZ1bmN0aW9uIGhpZGVUaXAoYm94KXt2YXIgdD1ib3gucXVlcnlTZWxlY3RvcignLnRwaC10aXAnKTtpZih0KXQuc3R5bGUub3BhY2l0eT0nMCc7fQoKLyog7IS466GcIOuIhOyggSDrp4nrjIAg4oCUIGNhdHM6W+udvOuyqF0sIHNlcmllczpbe25hbWUsY2xzLGRhdGE6W119XSAqLwpmdW5jdGlvbiBzdGFja0NoYXJ0KGJveElkLCBjYXRzLCBzZXJpZXMsIGZtdCl7CiAgdmFyIGJveD0kKGJveElkKTsgaWYoIWJveCkgcmV0dXJuOwogIGJveC5xdWVyeVNlbGVjdG9yQWxsKCdzdmcsLnRwaC1sZWdlbmQnKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24ucmVtb3ZlKCk7fSk7CiAgdmFyIFc9NjYwLEg9MjM2LFBMPTgsUFI9OCxQVD0xNCxQQj0yNjsKICB2YXIgbj1jYXRzLmxlbmd0aDsgaWYoIW4pIHJldHVybjsKICB2YXIgdG90YWxzPWNhdHMubWFwKGZ1bmN0aW9uKF8saSl7cmV0dXJuIHNlcmllcy5yZWR1Y2UoZnVuY3Rpb24oYSxzKXtyZXR1cm4gYSsocy5kYXRhW2ldfHwwKTt9LDApO30pOwogIHZhciBtYXg9TWF0aC5tYXguYXBwbHkobnVsbCx0b3RhbHMpfHwxOwogIHZhciBpdz1XLVBMLVBSLCBpaD1ILVBULVBCOwogIHZhciBidz1NYXRoLm1heCg2LE1hdGgubWluKDQ2LGl3L24qMC42OCkpLCBzdGVwPWl3L247CiAgdmFyIHN2Zz1lbCgnc3ZnJyx7dmlld0JveDonMCAwICcrVysnICcrSCxyb2xlOidpbWcnfSk7CiAgZm9yKHZhciBnPTA7Zzw9MztnKyspewogICAgdmFyIGd5PVBUK2loKmcvMzsKICAgIHN2Zy5hcHBlbmRDaGlsZChlbCgnbGluZScse3gxOlBMLHkxOmd5LHgyOlctUFIseTI6Z3ksJ2NsYXNzJzonZ2wnfSkpOwogIH0KICBjYXRzLmZvckVhY2goZnVuY3Rpb24oYyxpKXsKICAgIHZhciBjeD1QTCtzdGVwKmkrc3RlcC8yLCB5PVBUK2loLCBhY2M9MDsKICAgIHNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKHMsc2kpewogICAgICB2YXIgdmFsPXMuZGF0YVtpXXx8MDsgaWYodmFsPD0wKSByZXR1cm47CiAgICAgIHZhciBoPXZhbC9tYXgqaWg7IHktPWg7IGFjYys9dmFsOwogICAgICB2YXIgaXNUb3AgPSBzaT09PXNlcmllcy5sZW5ndGgtMSB8fCAhc2VyaWVzLnNsaWNlKHNpKzEpLnNvbWUoZnVuY3Rpb24oeil7cmV0dXJuICh6LmRhdGFbaV18fDApPjA7fSk7CiAgICAgIHZhciByPWVsKCdyZWN0Jyx7eDpjeC1idy8yLHk6eSx3aWR0aDpidyxoZWlnaHQ6TWF0aC5tYXgoMSxoKSwnY2xhc3MnOnMuY2xzLAogICAgICAgICAgICAgICAgICAgICAgIHJ4OmlzVG9wPzQ6MCxyeTppc1RvcD80OjB9KTsKICAgICAgc3ZnLmFwcGVuZENoaWxkKHIpOwogICAgfSk7CiAgICB2YXIgaGl0PWVsKCdyZWN0Jyx7eDpjeC1zdGVwLzIrMSx5OlBULHdpZHRoOnN0ZXAtMixoZWlnaHQ6aWgsJ2NsYXNzJzonaGl0J30pOwogICAgaGl0LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsZnVuY3Rpb24oZXYpewogICAgICB2YXIgYnI9Ym94LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICB2YXIgcm93cz1zZXJpZXMubWFwKGZ1bmN0aW9uKHMpewogICAgICAgIHJldHVybiAnPHNwYW4gc3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjhweDtoZWlnaHQ6OHB4O2JvcmRlci1yYWRpdXM6MnB4OycKICAgICAgICAgICAgICsgJ2JhY2tncm91bmQ6dmFyKC0tJytzLmNscysnKTttYXJnaW4tcmlnaHQ6NnB4Ij48L3NwYW4+JytzLm5hbWUrJyAnK2ZtdChzLmRhdGFbaV18fDApOwogICAgICB9KS5qb2luKCc8YnI+Jyk7CiAgICAgIHNob3dUaXAoYm94LGV2LmNsaWVudFgtYnIubGVmdCxldi5jbGllbnRZLWJyLnRvcCwKICAgICAgICAgICAgICAnPGI+JytjKyc8L2I+PGJyPicrcm93cysnPGJyPu2VqeqzhCAnK2ZtdChhY2MpKTsKICAgIH0pOwogICAgaGl0LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLGZ1bmN0aW9uKCl7aGlkZVRpcChib3gpO30pOwogICAgc3ZnLmFwcGVuZENoaWxkKGhpdCk7CiAgICBpZihuPD0xNHx8aSVNYXRoLmNlaWwobi8xMik9PT0wKQogICAgICBzdmcuYXBwZW5kQ2hpbGQoT2JqZWN0LmFzc2lnbihlbCgndGV4dCcse3g6Y3gseTpILTgsJ2NsYXNzJzonbGInLCd0ZXh0LWFuY2hvcic6J21pZGRsZSd9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RleHRDb250ZW50OmN9KSk7CiAgfSk7CiAgYm94LmFwcGVuZENoaWxkKHN2Zyk7CiAgYm94LmFwcGVuZENoaWxkKGxlZ2VuZChzZXJpZXMpKTsKfQoKLyog6rCA66GcIOuIhOyggSDrp4nrjIAo6rWs7ISxKSDigJQgc2Vnczpbe25hbWUsY2xzLHZhbHVlfV0gwrcg7KeB7KCRIOudvOuyqCAqLwpmdW5jdGlvbiBoU3RhY2soYm94SWQsIHNlZ3MsIGZtdCl7CiAgdmFyIGJveD0kKGJveElkKTsgaWYoIWJveCkgcmV0dXJuOwogIGJveC5xdWVyeVNlbGVjdG9yQWxsKCdzdmcsLnRwaC1sZWdlbmQnKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24ucmVtb3ZlKCk7fSk7CiAgdmFyIHRvdGFsPXNlZ3MucmVkdWNlKGZ1bmN0aW9uKGEscyl7cmV0dXJuIGErTWF0aC5tYXgoMCxzLnZhbHVlKTt9LDApfHwxOwogIHZhciBXPTY2MCxIPTY0LFBMPTgsUFI9OCxCSD0zNCxUWT0xMjsKICB2YXIgc3ZnPWVsKCdzdmcnLHt2aWV3Qm94OicwIDAgJytXKycgJytILHJvbGU6J2ltZyd9KTsKICB2YXIgeD1QTCwgaXc9Vy1QTC1QUjsKICBzZWdzLmZvckVhY2goZnVuY3Rpb24ocyxpKXsKICAgIHZhciB3PU1hdGgubWF4KDAscy52YWx1ZSkvdG90YWwqaXc7IGlmKHc8PTApIHJldHVybjsKICAgIHZhciBmaXJzdD1pPT09MCwgbGFzdD1pPT09c2Vncy5sZW5ndGgtMTsKICAgIHN2Zy5hcHBlbmRDaGlsZChlbCgncmVjdCcse3g6eCx5OlRZLHdpZHRoOncsaGVpZ2h0OkJILCdjbGFzcyc6cy5jbHMsCiAgICAgIHJ4OihmaXJzdHx8bGFzdCk/NDowLHJ5OihmaXJzdHx8bGFzdCk/NDowfSkpOwogICAgdmFyIHBjdD1zLnZhbHVlL3RvdGFsKjEwMDsKICAgIGlmKHBjdD49OSkKICAgICAgc3ZnLmFwcGVuZENoaWxkKE9iamVjdC5hc3NpZ24oZWwoJ3RleHQnLHt4Ongrdy8yLHk6VFkrQkgvMis0LCdjbGFzcyc6J3ZsJywKICAgICAgICAndGV4dC1hbmNob3InOidtaWRkbGUnLGZpbGw6JyNmZmYnfSkse3RleHRDb250ZW50OnBjdC50b0ZpeGVkKDApKyclJ30pKTsKICAgIHZhciBoaXQ9ZWwoJ3JlY3QnLHt4OngseTpUWSx3aWR0aDp3LGhlaWdodDpCSCwnY2xhc3MnOidoaXQnfSk7CiAgICAoZnVuY3Rpb24oc2VnLHB4LHB3KXsKICAgICAgaGl0LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsZnVuY3Rpb24oZXYpewogICAgICAgIHZhciBicj1ib3guZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgc2hvd1RpcChib3gsZXYuY2xpZW50WC1ici5sZWZ0LGV2LmNsaWVudFktYnIudG9wLAogICAgICAgICAgJzxiPicrc2VnLm5hbWUrJzwvYj48YnI+JytmbXQoc2VnLnZhbHVlKSsnIMK3ICcrKHNlZy52YWx1ZS90b3RhbCoxMDApLnRvRml4ZWQoMSkrJyUnKTsKICAgICAgfSk7CiAgICAgIGhpdC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJyxmdW5jdGlvbigpe2hpZGVUaXAoYm94KTt9KTsKICAgIH0pKHMseCx3KTsKICAgIHN2Zy5hcHBlbmRDaGlsZChoaXQpOwogICAgeCs9dzsKICB9KTsKICBib3guYXBwZW5kQ2hpbGQoc3ZnKTsKICBib3guYXBwZW5kQ2hpbGQobGVnZW5kKHNlZ3MubWFwKGZ1bmN0aW9uKHMpe3JldHVybiB7bmFtZTpzLm5hbWUrJyAnK2ZtdChzLnZhbHVlKSxjbHM6cy5jbHN9O30pKSk7Cn0KCi8qIOyEoO2YlSDstpTsnbQg7LCo7Yq4IOKAlCBzZXJpZXM6W3tuYW1lLGNscyxkYXRhOltdfV0sIGNhdHM6W+udvOuyqF0gKi8KZnVuY3Rpb24gbGluZUNoYXJ0KGJveElkLCBjYXRzLCBzZXJpZXMsIGZtdCl7CiAgdmFyIGJveD0kKGJveElkKTsgaWYoIWJveCkgcmV0dXJuOwogIGJveC5xdWVyeVNlbGVjdG9yQWxsKCdzdmcsLnRwaC1sZWdlbmQnKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24ucmVtb3ZlKCk7fSk7CiAgdmFyIG49Y2F0cy5sZW5ndGg7IGlmKG48MikgcmV0dXJuOwogIHZhciBXPTY2MCxIPTI0MCxQTD01NCxQUj0xMixQVD0xNCxQQj0yNjsKICB2YXIgYWxsPVtdOyBzZXJpZXMuZm9yRWFjaChmdW5jdGlvbihzKXthbGw9YWxsLmNvbmNhdChzLmRhdGEuZmlsdGVyKGZ1bmN0aW9uKHYpe3JldHVybiB2IT1udWxsO30pKTt9KTsKICBpZighYWxsLmxlbmd0aCkgcmV0dXJuOwogIHZhciBteD1NYXRoLm1heC5hcHBseShudWxsLGFsbCksIG1uPU1hdGgubWluLmFwcGx5KG51bGwsYWxsKTsKICB2YXIgcGFkPShteC1tbikqMC4xNXx8bXgqMC4wMnx8MTsgbXgrPXBhZDsgbW49TWF0aC5tYXgoMCxtbi1wYWQpOwogIHZhciBpdz1XLVBMLVBSLCBpaD1ILVBULVBCOwogIHZhciBYPWZ1bmN0aW9uKGkpe3JldHVybiBQTCtpdyoobj09PTE/MC41OmkvKG4tMSkpO307CiAgdmFyIFk9ZnVuY3Rpb24odil7cmV0dXJuIFBUK2loKigxLSh2LW1uKS8oKG14LW1uKXx8MSkpO307CiAgdmFyIHN2Zz1lbCgnc3ZnJyx7dmlld0JveDonMCAwICcrVysnICcrSCxyb2xlOidpbWcnfSk7CiAgZm9yKHZhciBnPTA7Zzw9NDtnKyspewogICAgdmFyIGd2PW1uKyhteC1tbikqZy80LCBneT1ZKGd2KTsKICAgIHN2Zy5hcHBlbmRDaGlsZChlbCgnbGluZScse3gxOlBMLHkxOmd5LHgyOlctUFIseTI6Z3ksJ2NsYXNzJzonZ2wnfSkpOwogICAgc3ZnLmFwcGVuZENoaWxkKE9iamVjdC5hc3NpZ24oZWwoJ3RleHQnLHt4OlBMLTgseTpneSs0LCdjbGFzcyc6J2xiJywndGV4dC1hbmNob3InOidlbmQnfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGV4dENvbnRlbnQ6TWF0aC5yb3VuZChndikudG9Mb2NhbGVTdHJpbmcoJ2tvLUtSJyl9KSk7CiAgfQogIHNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKHMpewogICAgdmFyIGQ9JycsIHN0YXJ0ZWQ9ZmFsc2U7CiAgICBzLmRhdGEuZm9yRWFjaChmdW5jdGlvbih2LGkpewogICAgICBpZih2PT1udWxsKSByZXR1cm47CiAgICAgIGQrPShzdGFydGVkPydMJzonTScpK1goaSkudG9GaXhlZCgxKSsnICcrWSh2KS50b0ZpeGVkKDEpKycgJzsgc3RhcnRlZD10cnVlOwogICAgfSk7CiAgICBpZihkKSBzdmcuYXBwZW5kQ2hpbGQoZWwoJ3BhdGgnLHtkOmQsZmlsbDonbm9uZScsJ3N0cm9rZSc6J3ZhcigtLScrcy5jbHMrJyknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cm9rZS13aWR0aCc6Mi4yLCdzdHJva2UtbGluZWpvaW4nOidyb3VuZCcsJ3N0cm9rZS1saW5lY2FwJzoncm91bmQnfSkpOwogICAgdmFyIGxhc3Q9cy5kYXRhLmxlbmd0aC0xOwogICAgaWYocy5kYXRhW2xhc3RdIT1udWxsKQogICAgICBzdmcuYXBwZW5kQ2hpbGQoZWwoJ2NpcmNsZScse2N4OlgobGFzdCksY3k6WShzLmRhdGFbbGFzdF0pLHI6NCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOid2YXIoLS0nK3MuY2xzKycpJyxzdHJva2U6J3ZhcigtLXN1cmZhY2UpJywnc3Ryb2tlLXdpZHRoJzoyfSkpOwogIH0pOwogIGNhdHMuZm9yRWFjaChmdW5jdGlvbihjLGkpewogICAgaWYobj4xMCAmJiBpJU1hdGguY2VpbChuLzcpIT09MCAmJiBpIT09bi0xKSByZXR1cm47CiAgICBzdmcuYXBwZW5kQ2hpbGQoT2JqZWN0LmFzc2lnbihlbCgndGV4dCcse3g6WChpKSx5OkgtOCwnY2xhc3MnOidsYicsJ3RleHQtYW5jaG9yJzonbWlkZGxlJ30pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RleHRDb250ZW50OmN9KSk7CiAgfSk7CiAgZm9yKHZhciBpPTA7aTxuO2krKyl7CiAgICAoZnVuY3Rpb24oaWR4KXsKICAgICAgdmFyIGhpdD1lbCgncmVjdCcse3g6WChpZHgpLWl3LyhuLTEpLzIseTpQVCx3aWR0aDppdy8obi0xKXx8MjAsaGVpZ2h0OmloLCdjbGFzcyc6J2hpdCd9KTsKICAgICAgaGl0LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsZnVuY3Rpb24oZXYpewogICAgICAgIHZhciBicj1ib3guZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgdmFyIHJvd3M9c2VyaWVzLm1hcChmdW5jdGlvbihzKXsKICAgICAgICAgIHJldHVybiAnPHNwYW4gc3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjhweDtoZWlnaHQ6OHB4O2JvcmRlci1yYWRpdXM6MnB4OycKICAgICAgICAgICAgICAgKyAnYmFja2dyb3VuZDp2YXIoLS0nK3MuY2xzKycpO21hcmdpbi1yaWdodDo2cHgiPjwvc3Bhbj4nK3MubmFtZSsnICcKICAgICAgICAgICAgICAgKyAocy5kYXRhW2lkeF09PW51bGw/Jy0nOmZtdChzLmRhdGFbaWR4XSkpOwogICAgICAgIH0pLmpvaW4oJzxicj4nKTsKICAgICAgICBzaG93VGlwKGJveCxldi5jbGllbnRYLWJyLmxlZnQsZXYuY2xpZW50WS1ici50b3AsJzxiPicrY2F0c1tpZHhdKyc8L2I+PGJyPicrcm93cyk7CiAgICAgIH0pOwogICAgICBoaXQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsZnVuY3Rpb24oKXtoaWRlVGlwKGJveCk7fSk7CiAgICAgIHN2Zy5hcHBlbmRDaGlsZChoaXQpOwogICAgfSkoaSk7CiAgfQogIGJveC5hcHBlbmRDaGlsZChzdmcpOwogIGJveC5hcHBlbmRDaGlsZChsZWdlbmQoc2VyaWVzKSk7Cn0KCmZ1bmN0aW9uIGxlZ2VuZChpdGVtcyl7CiAgdmFyIGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IGQuY2xhc3NOYW1lPSd0cGgtbGVnZW5kJzsKICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKHMpewogICAgdmFyIHNwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKICAgIHNwLmlubmVySFRNTD0nPGkgc3R5bGU9ImJhY2tncm91bmQ6dmFyKC0tJytzLmNscysnKSI+PC9pPicrcy5uYW1lOwogICAgZC5hcHBlbmRDaGlsZChzcCk7CiAgfSk7CiAgcmV0dXJuIGQ7Cn0KCi8qIOKYhSDrsKnrrLjsnbzsnYAgKirroZzsu6wg64Kg7KecKirroZwg7KCA7J6l7ZWc64ukLiB0b0lTT1N0cmluZygpIOydgCBVVEMg6528IOyekOyglSDsnbTtm4Qg7ZWY66OoIOuwgOumsOuLpCjsoITshLgg7KeA7YK07J20IOuVjOyZgCDqsJnsnYAg7ZWo7KCVKS4KICAg4piFIOyerOuwqeusuCDsnqXsuZgoMjAyNi0wOS0zMCk6IOyngOuCnCDrsKnrrLgg7J207ZuEIOyDiOuhnCDsmKzrnbzsmKgg6rKDIO2RnOyLnCArIOqzoOuluCDtlYTthLAg6riw7Ja1LgogICDruIzrnbzsmrDsoIDsl5Drp4wg7KCA7J6l7ZWc64ukKOuhnOq3uOyduMK37ISc67KEIOyXhuydjCkuIOyymOydjCDsmKgg7IKs656M7JeQ6rKQIOyVhOustCDtkZzsi5zrj4Qg7JeG64ukLiAqLwpmdW5jdGlvbiBzZWVuSW5pdChrZXksIHJvd1NlbCwgaWRzLCBydW4pewogIHZhciBLPSd0cGgtc2Vlbi0nK2tleSwgRj0ndHBoLWZpbHQtJytrZXksIGxhc3Q9c3RvcmUuZ2V0KEspLCB0b2RheT0oZnVuY3Rpb24oKXt2YXIgZD1uZXcgRGF0ZSgpO2Quc2V0TWludXRlcyhkLmdldE1pbnV0ZXMoKS1kLmdldFRpbWV6b25lT2Zmc2V0KCkpO3JldHVybiBkLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCk7fSkoKSwgbj0wOwogIHRyeXsgdmFyIGY9SlNPTi5wYXJzZShzdG9yZS5nZXQoRil8fCd7fScpOyBpZHMuZm9yRWFjaChmdW5jdGlvbihpKXsgaWYoZltpXSE9bnVsbCAmJiAkKGkpKSAkKGkpLnZhbHVlPWZbaV07IH0pOyB9Y2F0Y2goZSl7fQogIGlmKGxhc3QpewogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChyb3dTZWwpLmZvckVhY2goZnVuY3Rpb24ocil7CiAgICAgIGlmKChyLmRhdGFzZXQuZHR8fCcnKT5sYXN0KXsgbisrOyB2YXIgYj1yLnF1ZXJ5U2VsZWN0b3IoJy5ubSBiJyk7CiAgICAgICAgaWYoYiAmJiAhYi5xdWVyeVNlbGVjdG9yKCcudHBoLW5ldycpKSBiLmluc2VydEFkamFjZW50SFRNTCgnYmVmb3JlZW5kJywnIDxzcGFuIGNsYXNzPSJ0cGgtdGFnIHRwaC1uZXciPk5FVzwvc3Bhbj4nKTsgfQogICAgfSk7CiAgICB2YXIgYm94PSQoa2V5KyduZXcnKTsgaWYoYm94KXsgYm94LmlubmVySFRNTCA9IG4gPyAn7KeA64KcIOuwqeusuCgnK2xhc3QrJykg7J207ZuEIOyDiOuhnCA8Yj4nK24rJ+qxtDwvYj4g4oCUIE5FVyDtkZzsi5wnIDogJ+yngOuCnCDrsKnrrLgoJytsYXN0KycpIOydtO2bhCDsg4jroZwg7Jis65287JioIOqxtCDsl4bsirXri4jri6QnOyB9CiAgfQogIHN0b3JlLnNldChLLCB0b2RheSk7CiAgaWRzLmZvckVhY2goZnVuY3Rpb24oaSl7IHZhciBlPSQoaSk7IGlmKGUpIGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJyxmdW5jdGlvbigpewogICAgdmFyIG89e307IGlkcy5mb3JFYWNoKGZ1bmN0aW9uKGopeyBpZigkKGopKSBvW2pdPSQoaikudmFsdWU7IH0pOyBzdG9yZS5zZXQoRiwgSlNPTi5zdHJpbmdpZnkobykpOyB9KTsgfSk7CiAgcnVuKCk7Cn0KOwpmdW5jdGlvbiBydW4oKXsKICB2YXIgc3Q9JCgncmRzdCcpLnZhbHVlLCBrZD0kKCdyZGtkJykudmFsdWUsIHNkPSQoJ3Jkc2QnKS52YWx1ZSwgbj0wOwogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyN0cGgtcmRsaXN0IC50cGgtcm93JykuZm9yRWFjaChmdW5jdGlvbihyKXsKICAgIHZhciBvaz0oIXN0fHxyLmRhdGFzZXQuc3Q9PT1zdCkmJigha2R8fHIuZGF0YXNldC5rZD09PWtkKSYmKCFzZHx8ci5kYXRhc2V0LnNkPT09c2QpOwogICAgci5zdHlsZS5kaXNwbGF5PW9rPycnOidub25lJzsgaWYob2spIG4rKzsKICB9KTsKICAkKCdyZGNudCcpLnRleHRDb250ZW50PW4rJ+qxtCc7Cn0KWydyZHN0JywncmRrZCcsJ3Jkc2QnXS5mb3JFYWNoKGZ1bmN0aW9uKGkpeyAkKGkpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScscnVuKTsgfSk7CnNlZW5Jbml0KCdyZCcsICcjdHBoLXJkbGlzdCAudHBoLXJvdycsIFsncmRzdCcsJ3Jka2QnLCdyZHNkJ10sIHJ1bik7CmluaXRUaGVtZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudHBoLXBhZ2UnKSk7Cg==