UNICORN3
UNICORN3 질문&답변UNICORN3 테스트게시판UNICORN3 FAQUNICORN3 정식등록 문의
Unicorn 설치 및 FAQ
Unicorn 설치 및 FAQ
Unicorn 설치안내,팁 및 FAQ 게시판 입니다
2014 도로명 전면 시행에 대한 Unicorn3 가이드
GoodBug http://www.jakartaproject.com
이미지 슬라이더 보기
2014 도로명 전면 시행에 대한 Unicorn3 가이드
 
Unicorn3에 도로명을 적용하는 방법을 설명 합니다

1. 도로명 주소란?

2. 도로명 주소 DB구축

3. Unicorn3에서의 도로명 주소 활용
 


1. 도로명 주소란?
 
도로명 주소란 기존의 번지, 통/반으로 표기되던 주소방식을 버리고 새롭게 도로이름과 건물번호로 표기하는 방식을 말합니다
도로명은 대로, 로, 혹은길로 표기됩니다
  • 대로 : 도로폭이 40m를 넘거나, 왕복 8차선 이상이면 '대로'라 표기 합니다
             예) 세종대로, 영동대로
  • 로    : 대로보다 작고 폭이 12m를 넘거나 왕복 2차선 이상의 도로를 '로'로 표기합니다
             예) 중앙로, 학동로
  • 길    : 큰 도로에서 작은 도로가 갈라진 경우 큰 도로명과 함께 숫자를 써서 '반포대로23길' 처럼 표기됩니다
             왼쪽으로 갈라진 도로에는 홀수가, 오른쪽으로 갈라진 도로에는 짝수가 붙습니다



  • 걸물번호 : 건물의 정문과 만나는 도로를 기준으로 번호가 붙습니다
                    도로가 시작하는 곳에서 20m 구간마다 붙여지며 20m 구간안에는 첫번째 건물은 2, 두번째건물은 2-1, 그다음은 2-2..식으로 붙습니다
 
도로명 주소는 다음과 같이 구성 됩니다



 
2. 도로명 주소 DB 구축

(1) 도로명 주소 다운로드
     도로명 주소는 우정사업부에서 다운로드 받으실 수 있으며 매 실시간 변경분은 도로명주소 안내시스템 사이트에서 받으실 수 있습니다
 
     - 도로명 DB 다운로드 : http://www.epost.go.kr/search/zipcode/newAddressDown.jsp
     - 도로명 주소 안내 : http://www.juso.go.kr
 
     다운로드 사이트에서 시도별로 데이터를 다운로드 받습니다
     모두 다운로드 받으시면 대략 600만건 정도 됩니다

(2) 도로명 다운로드 양식
     다운받은 도로명 데이터는 '|' 구분으로 총 24개의 컬럼으로 구성되어있습니다
     
 우편번호|우편일련번호|시도|시도영문|시군구|시군구영문|읍면|읍면영문|도로명코드|도로명|도로명영문|지하여부|건물번호본번|건물번호부번|건물관리번호|다량배달처명|시군구용건물명|법정동코드|법정동명|리|산여부|지번본번|읍면동일련번호|지번부번

    데이터들은 아래와 같이 '|'를 구분으로 구성되어 있습니다
135800|051|서울특별시|Seoul|강남구|Gangnam-gu|||116803122001|개포로|Gaepo-ro|0|410|0|1168010300101550000028226||수도전기공업고등학교|1168010300|개포동||0|155|01|0
135800|051|서울특별시|Seoul|강남구|Gangnam-gu|||116803122001|개포로|Gaepo-ro|0|408|0|1168010300101550000028228||한국외국인학교|1168010300|개포동||0|155|01|0
135800|032|서울특별시|Seoul|강남구|Gangnam-gu|||116803122001|개포로|Gaepo-ro|0|409|0|1168010300101770000019101|현대3차아파트|현대3차아파트|1168010300|개포동||0|177|01|0
135993|002|서울특별시|Seoul|강남구|Gangnam-gu|||116803122001|개포로|Gaepo-ro|0|516|0|1168010300101850000019804|주공아파트|주공아파트|1168010300|개포동||0|185|01|0
135988|007|서울특별시|Seoul|강남구|Gangnam-gu|||116803122001|개포로|Gaepo-ro|0|621|0|1168010300100140005020118|SH공사|SH공사|1168010300|개포동||0|14|01|5
135965|001|서울특별시|Seoul|강남구|Gangnam-gu|||116803122001|개포로|Gaepo-ro|0|239|0|1168010300102590002020432||로얄빌딩|1168010300|개포동||0|1259|01|2
135965|001|서울특별시|Seoul|강남구|Gangnam-gu|||116803122001|개포로|Gaepo-ro|0|251|0|1168010300102590008020415||남강빌딩|1168010300|개포동||0|1259|01|8
  
(3) 도로명 우편번호 테이블 생성
     MySQL 버전으로 설명 드립니다
     Oracle 사용자분들은 참조하셔서 구축 하시면 되겠습니다
     아래와 같이 테이블을 생성 합니다

CREATE TABLE ROAD_POST_T (
    ZIP_CD                    VARCHAR(6),
    ZIP_SEQ                  VARCHAR(50),
    SIDO                       VARCHAR(30),
    ENG_SIDO                VARCHAR(50),
    GUNGU                     VARCHAR(50),
    ENG_GUNGU             VARCHAR(50),
    EUPMYUN                VARCHAR(50),
    ENG_EUPMYUN         VARCHAR(50),
    ROAD_CD                  VARCHAR(50),
    ROAD_NM                 VARCHAR(50),
    ENG_ROAD_NM          VARCHAR(50),
    JIHA_YN                    VARCHAR(10)
    BUILDING_NO             VARCHAR(50),
    BUILDING_DTL_NO      VARCHAR(50),
    BUILDING_MNG_NO     VARCHAR(50),
    BEDAL_NM                VARCHAR(100),
    BUILDING_NM             VARCHAR(100),
    LAWDONG_CD            VARCHAR(50),
    LAWDONG_NM           VARCHAR(100),
    RI                             VARCHAR(100),
    SANJI_YN                  VARCHAR(10)
    JIBUN_NO                  VARCHAR(50),
    EUPMYUN_NO           VARCHAR(50),
    JIBUN_DTL_NO           VARCHAR(50)
)
;


(4) 데이터 import
    테이블 생성 후 MySQL서버에 다운받은 도로명주소를 업로드 합니다
    업로드 경로는 /home/unicorn3/roaddata/  에 다운받았다고 가정합니다

    MySQL에 접속 후 아래와 같이 import 합니다 
    시도별로 다운받은 14개의 파일에 대해서 진행 합니다
 
 mysql> load data infile "/home/unicorn3/roaddata/20131203_서울특별시.txt" into table road_post_t fields terminated by '|' ignore 1 lines; 
 Query OK, 591175 rows affected, 0 warnings (4.01 sec)
 Records : 591175 Deleted : 0 Skipped : 0 Warnings : 0

 
   Oracle인 경우에는 sql loader를 이용하시면 됩니다
   sql loader 이용방법은 생략하겠습니다
 

 
3. Unicorn3에서의 도로명 주소 활용
 
(1) DB 테이블 추가 및 컬럼 추가
     - 도로명 우편번호 테이블은 위에서 생성 했습니다
     - 회원테이블 아래와 같이 컬럼 추가 합니다
        이 컬럼은 사용자가 도로명주소를 쓰는지 지번주소를 쓰는지 구분 입니다
 
 ALTER TABLE USER_T ADD (userRoadZip_yn varchar(1));                    -- 도로명 여부 (지번주소는N, 신도로명주소는 Y)

 UPDATE USER_T SET userRoadZip_yn = 'N';                                       -- 기존 데이터는 전부 지번주소임으로 N으로 update 함

(2) SQL 파일 수정
     /WEB-INF/conf/sql-def.xml 수정 합니다
 
    ① Oracle
      - Oracle SQL영역에 다음과 같이 수정합니다 <!-- ORACLE DATABASE QUERY --> 부터가 Oracle 영역입니다
      - "insert_user" sql에 신규컬럼(userRoadZip_yn) 추가합니다
      - "update_user_07"에 신규컬럼(userRoadZip_yn) 추가합니다
      - "select_user_pk", "select_user_02", "select_user_03", "select_user_06", "select_user_10", "select_user_13" 에 신규컬럼(userRoadZip_yn) 추가합니다
      - "select_post_01" 에 road_post_yn을 추가합니다 (이 구분자는 select시 지번주소인지 도로명주소인지 구분자 입니다)
         아래는 기존 지번주소 테이블 조회임으로 road_post_yn을 'N'으로 조회 합니다
<query name="select_post_01"><sql><![CDATA[
   SELECT road_post_yn 'N', zip_cd, sido, gugun, dong, bunji
   FROM post_t
   WHERE dong LIKE ?
   ORDER BY sido, gugun, dong, bunji
  ]]></sql></query>
 
    - 아래 문장 파일 맨 끝에 추가합니다
      신규 도로명 주소 테이블과 select 문장입니다
  
<query name="create_roadpost"><sql><![CDATA[
 CREATE TABLE ROAD_POST_T (
     ZIP_CD          VARCHAR2(6),
     ZIP_SEQ         VARCHAR2(50),
     SIDO            VARCHAR2(30),
     ENG_SIDO        VARCHAR2(50),
     GUNGU           VARCHAR2(50),
     ENG_GUNGU       VARCHAR2(50),
     EUPMYUN         VARCHAR2(50),
     ENG_EUPMYUN     VARCHAR2(50),
     ROAD_CD         VARCHAR2(50),
     ROAD_NM         VARCHAR2(50),
     ENG_ROAD_NM     VARCHAR2(50),
     JIHA_YN         VARCHAR2(10)
     BUILDING_NO     VARCHAR2(50),
     BUILDING_DTL_NO VARCHAR2(50),
     BUILDING_MNG_NO VARCHAR2(50),
     BEDAL_NM        VARCHAR2(100),
     BUILDING_NM     VARCHAR2(100),
     LAWDONG_CD      VARCHAR2(50),
     LAWDONG_NM      VARCHAR2(100),
     RI              VARCHAR2(100),
     SANJI_YN        VARCHAR2(10)
     JIBUN_NO        VARCHAR2(50),
     EUPMYUN_NO      VARCHAR2(50),
     JIBUN_DTL_NO    VARCHAR2(50)
 )
]]></sql></query>
<query name="select_roadpost_01"><sql><![CDATA[
 SELECT 'Y' road_post_yn, zip_cd, zip_seq, sido, eng_sido, gungu, eng_gungu, eupmyun, eng_eupmyun, road_cd, road_nm, eng_road_nm, jiha_yn, building_no, building_dtl_no, building_mng_no, bedal_nm, building_nm, lawdong_cd, lawdong_nm, ri, sanji_yn, jibun_no, eupmyun_no, jibun_dtl_no
 FROM read_post_t
 WHERE ROAD_NM LIKE ?
 ORDER BY sido, gugun, road_nm
]]></sql></query>


    ② MySQL
    - MySQL 영역에 다음가 같이 수정합니다 <!-- MYSQL DATABASE QUERY --> 부터 <!-- MYSQL DATABASE QUERY --> 까지가 MySql SQL영역입니다
    - "insert_user" sql에 신규컬럼(userRoadZip_yn) 추가합니다
    - "update_user_07"에 신규컬럼(userRoadZip_yn) 추가합니다
    - "select_user_pk", "select_user_02", "select_user_03", "select_user_06", "select_user_10", "select_user_13" 에 신규컬럼(userRoadZip_yn) 추가합니다
    - "select_post_01" 에 road_post_yn을 추가합니다 (이 구분자는 select시 지번주소인지 도로명주소인지 구분자 입니다)
       아래는 기존 지번주소 테이블 조회임으로 road_post_yn을 'N'으로 조회 합니다
<query name="select_post_01"><sql><![CDATA[
   SELECT road_post_yn 'N', zip_cd, sido, gugun, dong, bunji
   FROM post_t
   WHERE dong LIKE ?
   ORDER BY sido, gugun, dong, bunji
  ]]></sql></query>
     
    - 아래문장 <!-- MYSQL DATABASE QUERY --> 문장 위에 추가합니다
      신규 도로명 주소 테이블과 select 문장입니다

<query name="create_roadpost"><sql><![CDATA[
 CREATE TABLE ROAD_POST_T (
     ZIP_CD          VARCHAR(6),
     ZIP_SEQ         VARCHAR(50),
     SIDO            VARCHAR(30),
     ENG_SIDO        VARCHAR(50),
     GUNGU           VARCHAR(50),
     ENG_GUNGU       VARCHAR(50),
     EUPMYUN         VARCHAR(50),
     ENG_EUPMYUN     VARCHAR(50),
     ROAD_CD         VARCHAR(50),
     ROAD_NM         VARCHAR(50),
     ENG_ROAD_NM     VARCHAR(50),
     JIHA_YN         VARCHAR(10)
     BUILDING_NO     VARCHAR(50),
     BUILDING_DTL_NO VARCHAR(50),
     BUILDING_MNG_NO VARCHAR(50),
     BEDAL_NM        VARCHAR(100),
     BUILDING_NM     VARCHAR(100),
     LAWDONG_CD      VARCHAR(50),
     LAWDONG_NM      VARCHAR(100),
     RI              VARCHAR(100),
     SANJI_YN        VARCHAR(10)
     JIBUN_NO        VARCHAR(50),
     EUPMYUN_NO      VARCHAR(50),
     JIBUN_DTL_NO    VARCHAR(50)
 )
]]></sql></query>
<query name="select_roadpost_01"><sql><![CDATA[
 SELECT 'Y' road_post_yn, zip_cd, zip_seq, sido, eng_sido, gungu, eng_gungu, eupmyun, eng_eupmyun, road_cd, road_nm, eng_road_nm, jiha_yn, building_no, building_dtl_no, building_mng_no, bedal_nm, building_nm, lawdong_cd, lawdong_nm, ri, sanji_yn, jibun_no, eupmyun_no, jibun_dtl_no
 FROM read_post_t
 WHERE ROAD_NM LIKE ?

 ORDER BY sido, gugun, road_nm
]]></sql></query>

 

(3) Java 파일 수정
     - UserForm.java : 추가한 신규컬럼 userRoadZip_yn 으로 setter, getter를 만듭니다 (회원가입시 저장 Form)
     - PostVO.java : road_post_t 테이블에 추가된 컬럼으로 setter, getter를 만듭니다, 추가적으로 도로명, 지번주소 구분코드 road_post_yn도 setter, getter를 만듭니다
                            그리고 아래 totalAdress를 가져오는 부분을 아래와 같이 수정합니다

...

public String getTotalAddress() {
  return "Y".equals(road_post_yn)? (validate(sido) + " " + validate(dugun) + " "+validate(road_nm)+" "+validate(building_no) + " ("+validate(lawdong_nm)+")") :  // 도로명주소

                                                 (validate(sido) + " " + validate(gugun) + " " + validate(dong) + " " + validate(bunji));  // 지번주소
 }

...

 
     - PostListAction.java에 다음과 같이 수정합니다
        searchType은 NEW일경우 도로명주소 검색을, OLD일경우 지번주소 검색입니다

....

Collection postVOList = securityDAO.getPostList(resource, forwardForm.getSearchKey(), forwardForm.getSearchType());

....

    
     - SecurityBaseDao.java에 다음 함수 getPostList()를 수정 합니다

public Collection getPostList(ConnectionContext resource, String searchKey, String searchType) throws BaseException {

  ArrayList list = null;
  try {
   if (searchKey != null && searchKey.trim().length() > 0) {
    Query query = new Query(resource);

    // 구분자가 NEW면 로도명주소 검색 그렇지 않으면 기존 지번주소 검색

    if ("NEW".equals(searchType) {
        list = (ArrayList)query.execute("select_roadpost_01", searchKey+"%", new VOListHandler(PostVO.class));

    }

    else {

        list = (ArrayList)query.execute("select_post_01", "%"+searchKey+"%", new VOListHandler(PostVO.class));

     }
   }   
   if (list == null)
    list = new ArrayList();

  } catch (Exception e) {
   logger.error("Error at SecurityDAO.getPostList",e);
   BaseException baseException = new BaseException("errors.sql.problem");
   throw baseException;
  }

  logger.info("SecurityDAO.getPostList was executed");
  return list;
 }

 
        - SecurityBaseDAO.java 에 신규가입 및 신규수정 처리로직에 가입자가 도로명주소를 선택했는지, 지번주소를 선택했는지 구분을 회원 테이블에 저장합니다

public String userInsert(ConnectionContext resource, UserForm userForm) throws BaseException {

   ....

   params.add(userForm.getUserComment());

  params.add(userForm.getUserRoadZip_yn());

   params.add(certifyNo);

   ...

}

 

public void userUpdate(ConnectionContext resource, String userId, UserForm userForm) throws BaseException {

    ....

    params.add(userForm.getUserComment());

   params.add(userForm.getUserRoadZip_yn());

    params.add(new Timestamp(System.currentTimeMillis()));

    ....

}

 
(4) JSP 파일 수정
     - /jsp/board/skin/default/popup_post.jsp
       우편번호 조회 팝업을 아래와 같이 수정합니다
<div id=pop-post>
 <div id=header>
  <fieldset>
   우편번호 검색 <input type=radio name=searchType id=searchType value="NEW" checked>도로명주소 <input type=radio name=searchType id=searchType value="OLD">지번주소
   <input type=text name=searchKey id=searchKey onkeyup="Web.Event.captureEnter(event,'postSearch()')" title="검색할 동">
   <img src=./img/skin/default/i_find.gif class=unc-pnt title="우편번호 찾기" onclick='postSearch()'> <a href="" class=unc-main>검색</a>
  </fieldset>
 </div>
 <iframe> name=pop-list id=pop-list height=330 width=100% frameborder=0 scrolling=no></iframe>>
 <div id=footer>
  <img src=./img/skin/default/btn_close.gif class=unc-pnt onclick=javascript:window.close()>
 </div>
</div>
 
     - /js/board/skin/default/post_list.jsp
<logic:iterate id="list" name="postVOList" scope="request">
   <tr onmouseover=this.className='unc-post-over' onmouseout=this.className='unc-post-out'>
    <td class=address><span class=unc-fnt-out onmouseover=this.className='unc-fnt-over' onmouseout=this.className='unc-fnt-out' onclick="postGet('<bean:write name="list" property="zip_cd"/>', '<bean:write name="list" property="totalAddress"/>', '<bean:wite name="list" property="road_post_yn">')"><bean:write name="list" property="totalAddress"/></span></td>
    <td class=zipcd><bean:write name="list" property="simpleZip_cd"/></td>
   </tr>
  </logic:iterate>

    - /jsp/board/member_join.jsp
      회원가입/수정시 업데이트할 추가된 컬럼을 hidden으로 넣습니다

 <form name=unc-unit id=unc-unit>
 <jsp:include page='<%="/jsp/board/skin/"+request.getAttribute("commonSkin")+"/member_join.jsp"%>' />
 
 <input type=hidden name=mode>
 <input type=hidden name=subId>
 <html:hidden name="userVO" property="userReg_no"/>
 <html:hidden name="userVO" property="userBirth_dt"/>
 <html:hidden name="userVO" property="userWedding_dt"/>
 <html:hidden name="userVO" property="userZip_cd"/>
 <html:hidden name="userVO" property="userIcon"/>
 <html:hidden name="userVO" property="userPhoto"/>
 <html:hidden name="userVO" property="userHobby"/>

 <html:hidden name="userVO" property="userRoadZip_yn"/>
 <html:hidden name="commonVO" property="command"/>
 </form>

 

<form name=unc-cash id=unc-cash>
<html:hidden name="joinVO" property="userReg_no"/>
<html:hidden name="joinVO" property="userName"/>
<html:hidden name="joinVO" property="userIcon"/>
<html:hidden name="joinVO" property="userPhoto"/>
<html:hidden name="joinVO" property="userZip_cd"/>
<html:hidden name="joinVO" property="userAddress"/>
<html:hidden name="joinVO" property="userBirth_dt"/>
<html:hidden name="joinVO" property="userWedding_dt"/>
<html:hidden name="joinVO" property="userTel"/>
<html:hidden name="joinVO" property="userHp"/>
<html:hidden name="joinVO" property="userComment"/>
<html:hidden name="joinVO" property="userHomepage"/>

<html:hidden name="joinVO" property="userHobby"/>
<html:hidden name="userVO" property="userRoadZip_yn"/>

<html:hidden name="userVO" property="userPublic_cd"/>
<html:hidden name="userVO" property="userEmail_yn"/>
<html:hidden name="userVO" property="serialUserHobby"/>
<html:hidden name="userVO" property="login"/>
<html:hidden name="commonVO" property="commonSkin"/>
<html:hidden name="commonVO" property="htmlImage"/>
<html:hidden name="commonVO" property="command"/>
<input type=hidden name=thumbnailSize value=50>
</form>

 
(5) JS 수정
     - /js/user.js의 setPostcd()를 다음과 같이 수정합니다
function setPostcd(zip,addr,roadYn) {
 $fn('unc-unit','userZip1_cd').value = zip.substring(0,3);
 $fn('unc-unit','userZip2_cd').value = zip.substring(4,7);
 $fn('unc-unit','userRoadPostZip_yn').value = roadYn;
 $fn('unc-unit','userAddress').value = addr; 
}

 
(6) 회원가입폼 설정
     - 관리자로그인 > 회원관리 > 회원가입폼 메뉴를 클릭 합니다
     - 우편번호 여부와 주소여부를 "입력사항" 혹은 "입력필수사항"으로 체크 후 저장 합니다

(7) 회원가입폼 확인 및 테스트
     - 신규 회원가입폼에서 우편번호 창을 띄어 확인 합니다
     - 도로명주소를 검색하여 회원가입을 해 봅니다
     - 지번주소를 검색하여 회원가입을 해 봅니다
 
이상 도로명주소를 Unicorn3에 적용하는 방법에 대해 설명하였습니다
 
 
2014-01-02 13:19:44
118.37.69.***

 

좋은생각 ^^

0점 (0명)
덧글 1개 | 태그 1개 | 관련글보기
태그입력
쉽표(,)구분으로 한번에 여러 태그를 입력할수 있습니다
도로명 (1)
루빼
(0) (0)
감사합니다.
116.125.21.*** 2014-01-02 13:19:44
이름 비밀번호
Unicorn 설치 및 FAQ
Unicorn 설치안내,팁 및 FAQ 게시판 입니다
! 카테고리 번호 제목 글쓴이 일자 조회
FAQ 도로명 2014 도로명 전면 시행에 대한 Unicorn3 가이드 1 1 GoodBug 2014-01-01 3,580
FAQ 라이센스 Unicorn 라이센스 설치 안내입니다 1 GoodBug 2010-01-31 7,317
FAQ Unicorn3 Unicorn3 소개 1 1 GoodBug 2010-01-05 20,087
설치 setup Unicorn3 설치 가이드 7 3 GoodBug 2006-09-07 57,448
FAQ 99 기능 문의 tigermale 2015-06-22 911
설치 98 까페24 호스팅에서 FTP 기초문의입니다. 대기업 2013-04-22 1,960
FAQ 97 jdk1.5 JDK 1.5 환경 1 GoodBug 2012-03-21 2,596
FAQ 96 invalid filename 파일 업로드 시 멈춤현상이 발생한 경우 2 GoodBug 2012-03-07 3,437
설치 95 jdk1.4 JDK 1.4 환경 1 GoodBug 2012-02-27 2,496
설치 94 업그레이드 Unicorn v3.23 에서 Unicorn v3.40 으로 업그레이드 시 에러날때 1 GoodBug 2010-02-02 5,113
FAQ 93 Unicorn3 Unicorn3 히스토리 1 GoodBug 2010-01-05 5,629
FAQ 92 browser Unicorn3 V3.3 제약 사항 및 브라우져 지원 현황 1 GoodBug 2009-12-31 4,677
TIP 91 unicorn Unicorn3 주요 UI 기능 2 GoodBug 2009-12-30 15,870
TIP 90 메인화면에 설문조사 달기~! GoodBug 2008-06-10 8,490
FAQ 89 태그클라우드 메인화면(최근글목록,태그크라우드) 및 미니게시판(글5개씩) 만들기 (v3.20 이상) 1 1 GoodBug 2008-04-28 12,799
설치 88 Unicorn 파일서버 설정 및 파일 동기화 기능 설정 방법 3 GoodBug 2008-04-04 9,582
TIP 87 Unicorn3 v3.20 전체 기능 소개 1 GoodBug 2008-04-04 10,121
설치 86 MySQL 서버에 설치시 캐릭터셋 설정 부분에서 에러가 발생한다면 1 GoodBug 2008-04-04 9,354
TIP 85 로그인 다른사이트에서 Unicorn3로 로그인 하기 1 1 GoodBug 2008-02-29 7,697
TIP 84 Unicorn3에 테이블 컬럼 추가하기 GoodBug 2007-10-11 8,327
copyright 2005-2017 by Unicorn