You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ro...@apache.org on 2023/03/02 09:58:07 UTC

[cloudstack-cloudmonkey] branch vendor-fix created (now f0493c3)

This is an automated email from the ASF dual-hosted git repository.

rohit pushed a change to branch vendor-fix
in repository https://gitbox.apache.org/repos/asf/cloudstack-cloudmonkey.git


      at f0493c3  vendor: update vendor and gomod

This branch includes the following new commits:

     new f0493c3  vendor: update vendor and gomod

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[cloudstack-cloudmonkey] 01/01: vendor: update vendor and gomod

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch vendor-fix
in repository https://gitbox.apache.org/repos/asf/cloudstack-cloudmonkey.git

commit f0493c3c0046316b675023850259958f17ec5ef1
Author: Rohit Yadav <ro...@shapeblue.com>
AuthorDate: Thu Mar 2 15:26:34 2023 +0530

    vendor: update vendor and gomod
    
    Revert changes from previous commit on
    vendor/github.com/chzyer/readline/complete.go
    
    Signed-off-by: Rohit Yadav <ro...@shapeblue.com>
---
 .github/workflows/build.yml                        |    2 +-
 go.mod                                             |   35 +-
 go.sum                                             |   89 +-
 vendor/github.com/briandowns/spinner/.travis.yml   |    7 +-
 vendor/github.com/briandowns/spinner/Makefile      |   20 +
 vendor/github.com/briandowns/spinner/NOTICE.txt    |    4 +
 vendor/github.com/briandowns/spinner/README.md     |  110 +-
 .../briandowns/spinner/character_sets.go           |   60 +
 vendor/github.com/briandowns/spinner/spinner.go    |  335 +-
 vendor/github.com/chzyer/readline/README.md        |    2 +-
 vendor/github.com/chzyer/readline/complete.go      |   18 +-
 vendor/github.com/chzyer/readline/operation.go     |    6 +
 vendor/github.com/chzyer/readline/readline.go      |   18 +-
 vendor/github.com/chzyer/readline/runebuf.go       |    6 +-
 vendor/github.com/chzyer/readline/runes.go         |    1 +
 vendor/github.com/chzyer/readline/term.go          |    2 +-
 .../{term_solaris.go => term_nosyscall6.go}        |    2 +-
 vendor/github.com/chzyer/readline/terminal.go      |   16 +
 vendor/github.com/chzyer/readline/utils.go         |   34 +
 vendor/github.com/chzyer/readline/utils_unix.go    |    2 +-
 vendor/github.com/fatih/color/.travis.yml          |    5 -
 vendor/github.com/fatih/color/Gopkg.lock           |   27 -
 vendor/github.com/fatih/color/Gopkg.toml           |   30 -
 vendor/github.com/fatih/color/README.md            |   37 +-
 vendor/github.com/fatih/color/color.go             |   59 +-
 vendor/github.com/fatih/color/doc.go               |  139 +-
 vendor/github.com/gofrs/flock/.travis.yml          |    4 +-
 vendor/github.com/gofrs/flock/LICENSE              |    8 +-
 vendor/github.com/gofrs/flock/README.md            |    3 +-
 vendor/github.com/gofrs/flock/appveyor.yml         |    2 +-
 vendor/github.com/gofrs/flock/flock.go             |   29 +-
 vendor/github.com/gofrs/flock/flock_aix.go         |  281 +
 vendor/github.com/gofrs/flock/flock_unix.go        |    4 +-
 vendor/github.com/gofrs/flock/flock_windows.go     |    2 +
 vendor/github.com/google/shlex/shlex.go            |    1 -
 vendor/github.com/mattn/go-colorable/.travis.yml   |    9 -
 vendor/github.com/mattn/go-colorable/README.md     |    6 +-
 .../mattn/go-colorable/colorable_appengine.go      |   15 +-
 .../mattn/go-colorable/colorable_others.go         |   18 +-
 .../mattn/go-colorable/colorable_windows.go        |  321 +-
 vendor/github.com/mattn/go-colorable/go.test.sh    |   12 +
 .../github.com/mattn/go-colorable/noncolorable.go  |   18 +-
 vendor/github.com/mattn/go-isatty/.travis.yml      |   13 -
 vendor/github.com/mattn/go-isatty/README.md        |    2 +-
 vendor/github.com/mattn/go-isatty/go.test.sh       |   12 +
 .../github.com/mattn/go-isatty/isatty_appengine.go |   15 -
 vendor/github.com/mattn/go-isatty/isatty_bsd.go    |   21 +-
 vendor/github.com/mattn/go-isatty/isatty_linux.go  |   18 -
 .../mattn/go-isatty/isatty_linux_ppc64x.go         |   19 -
 vendor/github.com/mattn/go-isatty/isatty_others.go |   12 +-
 vendor/github.com/mattn/go-isatty/isatty_plan9.go  |   23 +
 .../github.com/mattn/go-isatty/isatty_solaris.go   |   15 +-
 vendor/github.com/mattn/go-isatty/isatty_tcgets.go |   19 +
 .../github.com/mattn/go-isatty/isatty_windows.go   |   43 +-
 vendor/github.com/mattn/go-runewidth/.travis.yml   |    8 -
 .../mattn/go-runewidth/{README.mkd => README.md}   |    4 +-
 vendor/github.com/mattn/go-runewidth/runewidth.go  | 1221 +--
 .../mattn/go-runewidth/runewidth_appengine.go      |    9 +
 .../github.com/mattn/go-runewidth/runewidth_js.go  |    3 +-
 .../mattn/go-runewidth/runewidth_posix.go          |    8 +-
 .../mattn/go-runewidth/runewidth_table.go          |  439 +
 .../mattn/go-runewidth/runewidth_windows.go        |    3 +
 vendor/github.com/mitchellh/go-homedir/homedir.go  |   10 +
 .../github.com/olekukonko/tablewriter/.travis.yml  |   14 +-
 vendor/github.com/olekukonko/tablewriter/README.md |  166 +-
 vendor/github.com/olekukonko/tablewriter/table.go  |  228 +-
 .../olekukonko/tablewriter/table_with_color.go     |    2 +
 vendor/github.com/olekukonko/tablewriter/util.go   |    6 +-
 vendor/github.com/rivo/uniseg/LICENSE.txt          |   21 +
 vendor/github.com/rivo/uniseg/README.md            |  157 +
 vendor/github.com/rivo/uniseg/doc.go               |  108 +
 vendor/github.com/rivo/uniseg/eastasianwidth.go    | 2556 ++++++
 vendor/github.com/rivo/uniseg/emojipresentation.go |  285 +
 vendor/github.com/rivo/uniseg/gen_breaktest.go     |  213 +
 vendor/github.com/rivo/uniseg/gen_properties.go    |  256 +
 vendor/github.com/rivo/uniseg/grapheme.go          |  334 +
 .../github.com/rivo/uniseg/graphemeproperties.go   | 1891 ++++
 vendor/github.com/rivo/uniseg/graphemerules.go     |  138 +
 vendor/github.com/rivo/uniseg/line.go              |  134 +
 vendor/github.com/rivo/uniseg/lineproperties.go    | 3513 ++++++++
 vendor/github.com/rivo/uniseg/linerules.go         |  470 +
 vendor/github.com/rivo/uniseg/properties.go        |  168 +
 vendor/github.com/rivo/uniseg/sentence.go          |   90 +
 .../github.com/rivo/uniseg/sentenceproperties.go   | 2815 ++++++
 vendor/github.com/rivo/uniseg/sentencerules.go     |  205 +
 vendor/github.com/rivo/uniseg/step.go              |  246 +
 vendor/github.com/rivo/uniseg/width.go             |   54 +
 vendor/github.com/rivo/uniseg/word.go              |   89 +
 vendor/github.com/rivo/uniseg/wordproperties.go    | 1848 ++++
 vendor/github.com/rivo/uniseg/wordrules.go         |  246 +
 .../x/sys/internal/unsafeheader/unsafeheader.go    |   30 +
 vendor/golang.org/x/sys/plan9/asm.s                |    8 +
 vendor/golang.org/x/sys/plan9/asm_plan9_386.s      |   30 +
 vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s    |   30 +
 vendor/golang.org/x/sys/plan9/asm_plan9_arm.s      |   25 +
 vendor/golang.org/x/sys/plan9/const_plan9.go       |   70 +
 vendor/golang.org/x/sys/plan9/dir_plan9.go         |  212 +
 vendor/golang.org/x/sys/plan9/env_plan9.go         |   31 +
 vendor/golang.org/x/sys/plan9/errors_plan9.go      |   50 +
 vendor/golang.org/x/sys/plan9/mkall.sh             |  150 +
 vendor/golang.org/x/sys/plan9/mkerrors.sh          |  246 +
 vendor/golang.org/x/sys/plan9/mksysnum_plan9.sh    |   23 +
 vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go    |   22 +
 vendor/golang.org/x/sys/plan9/pwd_plan9.go         |   24 +
 vendor/golang.org/x/sys/plan9/race.go              |   31 +
 vendor/golang.org/x/sys/plan9/race0.go             |   26 +
 vendor/golang.org/x/sys/plan9/str.go               |   23 +
 vendor/golang.org/x/sys/plan9/syscall.go           |  110 +
 vendor/golang.org/x/sys/plan9/syscall_plan9.go     |  361 +
 .../golang.org/x/sys/plan9/zsyscall_plan9_386.go   |  285 +
 .../golang.org/x/sys/plan9/zsyscall_plan9_amd64.go |  285 +
 .../golang.org/x/sys/plan9/zsyscall_plan9_arm.go   |  285 +
 vendor/golang.org/x/sys/plan9/zsysnum_plan9.go     |   49 +
 vendor/golang.org/x/sys/unix/gccgo.go              |    4 +-
 vendor/golang.org/x/sys/unix/gccgo_c.c             |    4 +-
 vendor/golang.org/x/sys/unix/ioctl.go              |    4 +-
 vendor/golang.org/x/sys/unix/mkall.sh              |    4 +-
 vendor/golang.org/x/sys/unix/sockcmsg_unix.go      |   14 +
 vendor/golang.org/x/sys/unix/syscall_darwin.go     |    1 +
 vendor/golang.org/x/sys/unix/syscall_dragonfly.go  |    1 +
 vendor/golang.org/x/sys/unix/syscall_freebsd.go    |    1 +
 .../golang.org/x/sys/unix/syscall_freebsd_386.go   |    9 +-
 .../golang.org/x/sys/unix/syscall_freebsd_amd64.go |    9 +-
 .../golang.org/x/sys/unix/syscall_freebsd_arm.go   |    9 +-
 .../golang.org/x/sys/unix/syscall_freebsd_arm64.go |    9 +-
 .../x/sys/unix/syscall_freebsd_riscv64.go          |    9 +-
 vendor/golang.org/x/sys/unix/syscall_hurd.go       |   22 +
 vendor/golang.org/x/sys/unix/syscall_hurd_386.go   |   29 +
 vendor/golang.org/x/sys/unix/syscall_linux.go      |   52 +-
 vendor/golang.org/x/sys/unix/syscall_netbsd.go     |   15 +
 vendor/golang.org/x/sys/unix/syscall_openbsd.go    |    1 +
 .../golang.org/x/sys/unix/syscall_openbsd_libc.go  |    4 +-
 vendor/golang.org/x/sys/unix/syscall_solaris.go    |    1 +
 vendor/golang.org/x/sys/unix/syscall_unix.go       |   57 +-
 vendor/golang.org/x/sys/unix/timestruct.go         |    2 +-
 vendor/golang.org/x/sys/unix/xattr_bsd.go          |    9 +-
 vendor/golang.org/x/sys/unix/zerrors_linux.go      |   30 +-
 vendor/golang.org/x/sys/unix/zerrors_linux_386.go  |    1 +
 .../golang.org/x/sys/unix/zerrors_linux_amd64.go   |    1 +
 vendor/golang.org/x/sys/unix/zerrors_linux_arm.go  |    1 +
 .../golang.org/x/sys/unix/zerrors_linux_arm64.go   |    1 +
 .../golang.org/x/sys/unix/zerrors_linux_loong64.go |    1 +
 vendor/golang.org/x/sys/unix/zerrors_linux_mips.go |    1 +
 .../golang.org/x/sys/unix/zerrors_linux_mips64.go  |    1 +
 .../x/sys/unix/zerrors_linux_mips64le.go           |    1 +
 .../golang.org/x/sys/unix/zerrors_linux_mipsle.go  |    1 +
 vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go  |    1 +
 .../golang.org/x/sys/unix/zerrors_linux_ppc64.go   |    1 +
 .../golang.org/x/sys/unix/zerrors_linux_ppc64le.go |    1 +
 .../golang.org/x/sys/unix/zerrors_linux_riscv64.go |    1 +
 .../golang.org/x/sys/unix/zerrors_linux_s390x.go   |    1 +
 .../golang.org/x/sys/unix/zerrors_linux_sparc64.go |    1 +
 .../golang.org/x/sys/unix/zerrors_openbsd_386.go   |  356 +-
 .../golang.org/x/sys/unix/zerrors_openbsd_amd64.go |  189 +-
 .../golang.org/x/sys/unix/zerrors_openbsd_arm.go   |  348 +-
 .../golang.org/x/sys/unix/zerrors_openbsd_arm64.go |  160 +-
 .../x/sys/unix/zerrors_openbsd_mips64.go           |   95 +-
 .../x/sys/unix/zsyscall_dragonfly_amd64.go         |   10 +
 .../golang.org/x/sys/unix/zsyscall_freebsd_386.go  |   10 +
 .../x/sys/unix/zsyscall_freebsd_amd64.go           |   10 +
 .../golang.org/x/sys/unix/zsyscall_freebsd_arm.go  |   10 +
 .../x/sys/unix/zsyscall_freebsd_arm64.go           |   10 +
 .../x/sys/unix/zsyscall_freebsd_riscv64.go         |   10 +
 vendor/golang.org/x/sys/unix/zsyscall_linux.go     |   11 +
 .../golang.org/x/sys/unix/zsyscall_netbsd_386.go   |   10 +
 .../golang.org/x/sys/unix/zsyscall_netbsd_amd64.go |   10 +
 .../golang.org/x/sys/unix/zsyscall_netbsd_arm.go   |   10 +
 .../golang.org/x/sys/unix/zsyscall_netbsd_arm64.go |   10 +
 .../golang.org/x/sys/unix/zsyscall_openbsd_386.go  |   14 +
 .../golang.org/x/sys/unix/zsyscall_openbsd_386.s   |  137 +-
 .../x/sys/unix/zsyscall_openbsd_amd64.go           |   14 +
 .../golang.org/x/sys/unix/zsyscall_openbsd_amd64.s |  137 +-
 .../golang.org/x/sys/unix/zsyscall_openbsd_arm.go  |   14 +
 .../golang.org/x/sys/unix/zsyscall_openbsd_arm.s   |  137 +-
 .../x/sys/unix/zsyscall_openbsd_arm64.go           |   14 +
 .../golang.org/x/sys/unix/zsyscall_openbsd_arm64.s |  137 +-
 .../x/sys/unix/zsyscall_openbsd_mips64.go          |  812 +-
 ...l_openbsd_amd64.s => zsyscall_openbsd_mips64.s} |  139 +-
 .../x/sys/unix/zsyscall_openbsd_ppc64.go           |   14 +
 .../golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s |    6 +
 .../x/sys/unix/zsyscall_openbsd_riscv64.go         |   14 +
 .../x/sys/unix/zsyscall_openbsd_riscv64.s          |  137 +-
 .../x/sys/unix/zsyscall_solaris_amd64.go           |   13 +
 .../golang.org/x/sys/unix/zsysctl_openbsd_386.go   |   51 +-
 .../golang.org/x/sys/unix/zsysctl_openbsd_amd64.go |   17 +-
 .../golang.org/x/sys/unix/zsysctl_openbsd_arm.go   |   51 +-
 .../golang.org/x/sys/unix/zsysctl_openbsd_arm64.go |   11 +-
 .../x/sys/unix/zsysctl_openbsd_mips64.go           |    3 +-
 .../x/sys/unix/zsysnum_openbsd_mips64.go           |    1 +
 vendor/golang.org/x/sys/unix/ztypes_linux.go       |  217 +-
 vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go  |   84 +
 .../golang.org/x/sys/unix/ztypes_netbsd_amd64.go   |   84 +
 vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go  |   84 +
 .../golang.org/x/sys/unix/ztypes_netbsd_arm64.go   |   84 +
 vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go |   97 +-
 .../golang.org/x/sys/unix/ztypes_openbsd_amd64.go  |   33 +-
 vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go |    9 +-
 .../golang.org/x/sys/unix/ztypes_openbsd_arm64.go  |    9 +-
 .../golang.org/x/sys/unix/ztypes_openbsd_mips64.go |    9 +-
 vendor/golang.org/x/sys/windows/aliases.go         |   13 +
 vendor/golang.org/x/sys/windows/dll_windows.go     |  416 +
 vendor/golang.org/x/sys/windows/empty.s            |    9 +
 vendor/golang.org/x/sys/windows/env_windows.go     |   54 +
 vendor/golang.org/x/sys/windows/eventlog.go        |   21 +
 vendor/golang.org/x/sys/windows/exec_windows.go    |  178 +
 vendor/golang.org/x/sys/windows/memory_windows.go  |   48 +
 vendor/golang.org/x/sys/windows/mkerrors.bash      |   70 +
 .../golang.org/x/sys/windows/mkknownfolderids.bash |   27 +
 vendor/golang.org/x/sys/windows/mksyscall.go       |   10 +
 vendor/golang.org/x/sys/windows/race.go            |   31 +
 vendor/golang.org/x/sys/windows/race0.go           |   26 +
 .../golang.org/x/sys/windows/security_windows.go   | 1444 +++
 vendor/golang.org/x/sys/windows/service.go         |  247 +
 .../golang.org/x/sys/windows/setupapi_windows.go   | 1425 +++
 vendor/golang.org/x/sys/windows/str.go             |   23 +
 vendor/golang.org/x/sys/windows/syscall.go         |  105 +
 vendor/golang.org/x/sys/windows/syscall_windows.go | 1806 ++++
 vendor/golang.org/x/sys/windows/types_windows.go   | 3260 +++++++
 .../golang.org/x/sys/windows/types_windows_386.go  |   35 +
 .../x/sys/windows/types_windows_amd64.go           |   34 +
 .../golang.org/x/sys/windows/types_windows_arm.go  |   35 +
 .../x/sys/windows/types_windows_arm64.go           |   34 +
 vendor/golang.org/x/sys/windows/zerrors_windows.go | 9468 ++++++++++++++++++++
 .../x/sys/windows/zknownfolderids_windows.go       |  149 +
 .../golang.org/x/sys/windows/zsyscall_windows.go   | 4309 +++++++++
 vendor/golang.org/x/term/CONTRIBUTING.md           |   26 +
 vendor/golang.org/x/term/LICENSE                   |   27 +
 vendor/golang.org/x/term/PATENTS                   |   22 +
 vendor/golang.org/x/term/README.md                 |   19 +
 vendor/golang.org/x/term/codereview.cfg            |    1 +
 vendor/golang.org/x/term/term.go                   |   60 +
 vendor/golang.org/x/term/term_plan9.go             |   42 +
 vendor/golang.org/x/term/term_unix.go              |   92 +
 vendor/golang.org/x/term/term_unix_bsd.go          |   13 +
 vendor/golang.org/x/term/term_unix_other.go        |   13 +
 vendor/golang.org/x/term/term_unsupported.go       |   39 +
 vendor/golang.org/x/term/term_windows.go           |   79 +
 vendor/golang.org/x/term/terminal.go               |  986 ++
 vendor/gopkg.in/ini.v1/.editorconfig               |   12 +
 vendor/gopkg.in/ini.v1/.gitignore                  |    1 +
 vendor/gopkg.in/ini.v1/.golangci.yml               |   27 +
 vendor/gopkg.in/ini.v1/.travis.yml                 |   17 -
 vendor/gopkg.in/ini.v1/Makefile                    |    2 +-
 vendor/gopkg.in/ini.v1/README.md                   |   21 +-
 vendor/gopkg.in/ini.v1/codecov.yml                 |   16 +
 vendor/gopkg.in/ini.v1/data_source.go              |   76 +
 vendor/gopkg.in/ini.v1/{error.go => deprecated.go} |   22 +-
 vendor/gopkg.in/ini.v1/error.go                    |   17 +
 vendor/gopkg.in/ini.v1/file.go                     |  223 +-
 vendor/gopkg.in/ini.v1/{error.go => helper.go}     |   24 +-
 vendor/gopkg.in/ini.v1/ini.go                      |  141 +-
 vendor/gopkg.in/ini.v1/key.go                      |  194 +-
 vendor/gopkg.in/ini.v1/parser.go                   |  218 +-
 vendor/gopkg.in/ini.v1/section.go                  |   24 +-
 vendor/gopkg.in/ini.v1/struct.go                   |  379 +-
 vendor/modules.txt                                 |   63 +-
 256 files changed, 49162 insertions(+), 3543 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index a124995..1181762 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -33,7 +33,7 @@ jobs:
     - name: Set up Go
       uses: actions/setup-go@v3
       with:
-        go-version: 1.19.x
+        go-version: 1.20.x
 
     - name: Run Script
       run:  make all
diff --git a/go.mod b/go.mod
index a6dd3f4..2ab0eff 100644
--- a/go.mod
+++ b/go.mod
@@ -17,28 +17,27 @@
 
 module github.com/apache/cloudstack-cloudmonkey
 
+go 1.20
+
 require (
-	github.com/briandowns/spinner v0.0.0-20181029155426-195c31b675a7
-	github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e
-	github.com/gofrs/flock v0.7.0
-	github.com/google/shlex v0.0.0-20150127133951-6f45313302b9
-	github.com/mitchellh/go-homedir v1.0.0
-	github.com/olekukonko/tablewriter v0.0.1
-	gopkg.in/ini.v1 v1.39.0
+	github.com/briandowns/spinner v1.22.0
+	github.com/chzyer/readline v1.5.1
+	github.com/gofrs/flock v0.8.1
+	github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
+	github.com/mitchellh/go-homedir v1.1.0
+	github.com/olekukonko/tablewriter v0.0.5
+	gopkg.in/ini.v1 v1.67.0
 )
 
 require (
-	github.com/chzyer/logex v1.1.10 // indirect
-	github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 // indirect
-	github.com/fatih/color v1.7.0 // indirect
-	github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 // indirect
-	github.com/jtolds/gls v4.2.1+incompatible // indirect
+	github.com/fatih/color v1.14.1 // indirect
 	github.com/kr/pretty v0.1.0 // indirect
-	github.com/mattn/go-colorable v0.0.9 // indirect
-	github.com/mattn/go-isatty v0.0.4 // indirect
-	github.com/mattn/go-runewidth v0.0.3 // indirect
-	github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d // indirect
-	github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a // indirect
-	golang.org/x/sys v0.1.0 // indirect
+	github.com/mattn/go-colorable v0.1.13 // indirect
+	github.com/mattn/go-isatty v0.0.17 // indirect
+	github.com/mattn/go-runewidth v0.0.14 // indirect
+	github.com/rivo/uniseg v0.4.4 // indirect
+	github.com/stretchr/testify v1.8.2 // indirect
+	golang.org/x/sys v0.5.0 // indirect
+	golang.org/x/term v0.5.0 // indirect
 	gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
 )
diff --git a/go.sum b/go.sum
index 0b44273..6a2edfc 100644
--- a/go.sum
+++ b/go.sum
@@ -1,43 +1,60 @@
-github.com/briandowns/spinner v0.0.0-20181029155426-195c31b675a7 h1:IvbBe4mOtBLz3X8n95FV5FzQqGWkrkCrfKdQxj7DkUg=
-github.com/briandowns/spinner v0.0.0-20181029155426-195c31b675a7/go.mod h1:hw/JEQBIE+c/BLI4aKM8UU8v+ZqrD3h7HC27kKt8JQU=
-github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE=
-github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
-github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8=
-github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
-github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8=
-github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
-github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
-github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
-github.com/gofrs/flock v0.7.0 h1:pGFUjl501gafK9HBt1VGL1KCOd/YhIooID+xgyJCf3g=
-github.com/gofrs/flock v0.7.0/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
-github.com/google/shlex v0.0.0-20150127133951-6f45313302b9 h1:JM174NTeGNJ2m/oLH3UOWOvWQQKd+BoL3hcSCUWFLt0=
-github.com/google/shlex v0.0.0-20150127133951-6f45313302b9/go.mod h1:RpwtwJQFrIEPstU94h88MWPXP2ektJZ8cZ0YntAmXiE=
-github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
-github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
-github.com/jtolds/gls v4.2.1+incompatible h1:fSuqC+Gmlu6l/ZYAoZzx2pyucC8Xza35fpRVWLVmUEE=
-github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
+github.com/briandowns/spinner v1.22.0 h1:fJ/7tyeM2q9ebM57kGfjnUSrgPJBsULk+/s61UpMGrw=
+github.com/briandowns/spinner v1.22.0/go.mod h1:rPG4gmXeN3wQV/TsAY4w8lPdIM6RX3yqeBQJSrbXjuE=
+github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM=
+github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ=
+github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI=
+github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk=
+github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04=
+github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w=
+github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg=
+github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw=
+github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
+github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
+github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
 github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4=
-github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
-github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs=
-github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
-github.com/mattn/go-runewidth v0.0.3 h1:a+kO+98RDGEfo6asOGMmpodZq4FNtnGP54yps8BzLR4=
-github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
-github.com/mitchellh/go-homedir v1.0.0 h1:vKb8ShqSby24Yrqr/yDYkuFz8d0WUjys40rvnGC8aR0=
-github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
-github.com/olekukonko/tablewriter v0.0.1 h1:b3iUnf1v+ppJiOfNX4yxxqfWKMQPZR5yoh8urCTFX88=
-github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
-github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
-github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
-github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a h1:JSvGDIbmil4Ui/dDdFBExb7/cmkNjyX5F97oglmvCDo=
-github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s=
-golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=
-golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
+github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
+github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
+github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
+github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
+github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
+github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU=
+github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
+github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
+github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
+github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
+github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
+github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
+github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
+golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
+golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/ini.v1 v1.39.0 h1:Jf2sFGT+sAd7i+4ftUN1Jz90uw8XNH8NXbbOY16taA8=
-gopkg.in/ini.v1 v1.39.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
+gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/vendor/github.com/briandowns/spinner/.travis.yml b/vendor/github.com/briandowns/spinner/.travis.yml
index 2cf02a4..74d205a 100644
--- a/vendor/github.com/briandowns/spinner/.travis.yml
+++ b/vendor/github.com/briandowns/spinner/.travis.yml
@@ -1,7 +1,10 @@
+arch:
+  - amd64
+  - ppc64le
 language: go
 go:
-  - 1.6.3
-  - 1.7.3
+  - 1.16
+  - 1.17.5
 env:
   - GOARCH: amd64
   - GOARCH: 386
diff --git a/vendor/github.com/briandowns/spinner/Makefile b/vendor/github.com/briandowns/spinner/Makefile
new file mode 100644
index 0000000..3cfdeb2
--- /dev/null
+++ b/vendor/github.com/briandowns/spinner/Makefile
@@ -0,0 +1,20 @@
+GO = go
+
+.PHONY: deps
+deps: go.mod
+
+go.mod:
+	go mod init
+	go mod tidy
+
+.PHONY: test
+test:
+	$(GO) test -v -cover ./...
+
+.PHONY: check
+check:
+	if [ -d vendor ]; then cp -r vendor/* ${GOPATH}/src/; fi
+
+.PHONY: clean
+clean:
+	$(GO) clean
diff --git a/vendor/github.com/briandowns/spinner/NOTICE.txt b/vendor/github.com/briandowns/spinner/NOTICE.txt
new file mode 100644
index 0000000..95e2a24
--- /dev/null
+++ b/vendor/github.com/briandowns/spinner/NOTICE.txt
@@ -0,0 +1,4 @@
+Spinner
+Copyright (c) 2022 Brian J. Downs 
+This product is licensed to you under the Apache 2.0 license (the "License").  You may not use this product except in compliance with the Apache 2.0 License.  
+This product may include a number of subcomponents with separate copyright notices and license terms. Your use of these subcomponents is subject to the terms and conditions of the subcomponent's license, as noted in the LICENSE file. 
diff --git a/vendor/github.com/briandowns/spinner/README.md b/vendor/github.com/briandowns/spinner/README.md
index d23f4da..28b024d 100644
--- a/vendor/github.com/briandowns/spinner/README.md
+++ b/vendor/github.com/briandowns/spinner/README.md
@@ -1,6 +1,6 @@
 # Spinner
 
-[![GoDoc](https://godoc.org/github.com/briandowns/spinner?status.svg)](https://godoc.org/github.com/briandowns/spinner) [![Build Status](https://travis-ci.org/briandowns/spinner.svg?branch=master)](https://travis-ci.org/briandowns/spinner)
+[![GoDoc](https://godoc.org/github.com/briandowns/spinner?status.svg)](https://godoc.org/github.com/briandowns/spinner) [![CircleCI](https://circleci.com/gh/briandowns/spinner.svg?style=svg)](https://circleci.com/gh/briandowns/spinner)
 
 spinner is a simple package to add a spinner / progress indicator to any terminal application. Examples can be found below as well as full examples in the examples directory.
 
@@ -15,54 +15,57 @@ go get github.com/briandowns/spinner
 ```
 
 ## Available Character Sets
+
+90 Character Sets. Some examples below:
+
 (Numbered by their slice index)
 
-index | character set | sample gif
-------|---------------|---------------
-0  | ```←↖↑↗→↘↓↙``` | ![Sample Gif](gifs/0.gif)
-1  | ```▁▃▄▅▆▇█▇▆▅▄▃▁``` | ![Sample Gif](gifs/1.gif)
-2  | ```▖▘▝▗``` | ![Sample Gif](gifs/2.gif)
-3  | ```┤┘┴└├┌┬┐``` | ![Sample Gif](gifs/3.gif)
-4  | ```◢◣◤◥``` | ![Sample Gif](gifs/4.gif)
-5  | ```◰◳◲◱``` | ![Sample Gif](gifs/5.gif)
-6  | ```◴◷◶◵``` | ![Sample Gif](gifs/6.gif)
-7  | ```◐◓◑◒``` | ![Sample Gif](gifs/7.gif)
-8  | ```.oO@*``` | ![Sample Gif](gifs/8.gif)
-9  | ```|/-\``` | ![Sample Gif](gifs/9.gif)
-10 | ```◡◡⊙⊙◠◠``` | ![Sample Gif](gifs/10.gif)
-11 | ```⣾⣽⣻⢿⡿⣟⣯⣷``` | ![Sample Gif](gifs/11.gif)
-12 | ```>))'> >))'>  >))'>   >))'>    >))'>   <'((<  <'((< <'((<``` | ![Sample Gif](gifs/12.gif)
-13 | ```⠁⠂⠄⡀⢀⠠⠐⠈``` | ![Sample Gif](gifs/13.gif)
-14 | ```⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏``` | ![Sample Gif](gifs/14.gif)
-15 | ```abcdefghijklmnopqrstuvwxyz``` | ![Sample Gif](gifs/15.gif)
-16 | ```▉▊▋▌▍▎▏▎▍▌▋▊▉``` | ![Sample Gif](gifs/16.gif)
-17 | ```■□▪▫``` | ![Sample Gif](gifs/17.gif)
-18 | ```←↑→↓``` | ![Sample Gif](gifs/18.gif)
-19 | ```╫╪``` | ![Sample Gif](gifs/19.gif)
-20 | ```⇐⇖⇑⇗⇒⇘⇓⇙``` | ![Sample Gif](gifs/20.gif)
-21 | ```⠁⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈⠈``` | ![Sample Gif](gifs/21.gif)
-22 | ```⠈⠉⠋⠓⠒⠐⠐⠒⠖⠦⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈``` | ![Sample Gif](gifs/22.gif)
-23 | ```⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠴⠲⠒⠂⠂⠒⠚⠙⠉⠁``` | ![Sample Gif](gifs/23.gif)
-24 | ```⠋⠙⠚⠒⠂⠂⠒⠲⠴⠦⠖⠒⠐⠐⠒⠓⠋``` | ![Sample Gif](gifs/24.gif)
-25 | ```ヲァィゥェォャュョッアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン``` | ![Sample Gif](gifs/25.gif)
-26 | ```. .. ...``` | ![Sample Gif](gifs/26.gif)
-27 | ```▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▏▎▍▌▋▊▉█▇▆▅▄▃▂▁``` | ![Sample Gif](gifs/27.gif)
-28 | ```.oO°Oo.``` | ![Sample Gif](gifs/28.gif)
-29 | ```+x``` | ![Sample Gif](gifs/29.gif)
-30 | ```v<^>``` | ![Sample Gif](gifs/30.gif)
-31 | ```>>---> >>--->  >>--->   >>--->    >>--->    <---<<    <---<<   <---<<  <---<< <---<<``` | ![Sample Gif](gifs/31.gif)
-32 | ```| || ||| |||| ||||| |||||| ||||| |||| ||| || |``` | ![Sample Gif](gifs/32.gif)
-33 | ```[] [=] [==] [===] [====] [=====] [======] [=======] [========] [=========] [==========]``` | ![Sample Gif](gifs/33.gif)
-34 | ```(*---------) (-*--------) (--*-------) (---*------) (----*-----) (-----*----) (------*---) (-------*--) (--------*-) (---------*)``` | ![Sample Gif](gifs/34.gif)
-35 | ```█▒▒▒▒▒▒▒▒▒ ███▒▒▒▒▒▒▒ █████▒▒▒▒▒ ███████▒▒▒ ██████████``` | ![Sample Gif](gifs/35.gif)
-36 | ```[                    ] [=>                  ] [===>                ] [=====>              ] [======>             ] [========>           ] [==========>         ] [============>       ] [==============>     ] [================>   ] [==================> ] [===================>]``` | ![Sample Gif](gifs/36.gif)
-37 | ```🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛``` | ![Sample Gif](gifs/37.gif)
-38 | ```🕐 🕜 🕑 🕝 🕒 🕞 🕓 🕟 🕔 🕠 🕕 🕡 🕖 🕢 🕗 🕣 🕘 🕤 🕙 🕥 🕚 🕦 🕛 🕧``` | ![Sample Gif](gifs/38.gif)
-39 | ```🌍 🌎 🌏``` | ![Sample Gif](gifs/39.gif)
-40 | ```◜ ◝ ◞ ◟``` | ![Sample Gif](gifs/40.gif)
-41 | ```⬒ ⬔ ⬓ ⬕``` | ![Sample Gif](gifs/41.gif)
-42 | ```⬖ ⬘ ⬗ ⬙``` | ![Sample Gif](gifs/42.gif)
-43 | ```[>>>          >] []>>>>        [] []  >>>>      [] []    >>>>    [] []      >>>>  [] []        >>>>[] [>>          >>]``` | ![Sample Gif](gifs/43.gif)
+| index | character set                                                                                                                                                                                                                                                                             | sample gif                 |
+| ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- |
+| 0     | ```←↖↑↗→↘↓↙```                                                                                                                                                                                                                                                                            | ![Sample Gif](gifs/0.gif)  |
+| 1     | ```▁▃▄▅▆▇█▇▆▅▄▃▁```                                                                                                                                                                                                                                                                       | ![Sample Gif](gifs/1.gif)  |
+| 2     | ```▖▘▝▗```                                                                                                                                                                                                                                                                                | ![Sample Gif](gifs/2.gif)  |
+| 3     | ```┤┘┴└├┌┬┐```                                                                                                                                                                                                                                                                            | ![Sample Gif](gifs/3.gif)  |
+| 4     | ```◢◣◤◥```                                                                                                                                                                                                                                                                                | ![Sample Gif](gifs/4.gif)  |
+| 5     | ```◰◳◲◱```                                                                                                                                                                                                                                                                                | ![Sample Gif](gifs/5.gif)  |
+| 6     | ```◴◷◶◵```                                                                                                                                                                                                                                                                                | ![Sample Gif](gifs/6.gif)  |
+| 7     | ```◐◓◑◒```                                                                                                                                                                                                                                                                                | ![Sample Gif](gifs/7.gif)  |
+| 8     | ```.oO@*```                                                                                                                                                                                                                                                                               | ![Sample Gif](gifs/8.gif)  |
+| 9     | ```\|/-\```                                                                                                                                                                                                                                                                               | ![Sample Gif](gifs/9.gif)  |
+| 10    | ```◡◡⊙⊙◠◠```                                                                                                                                                                                                                                                                              | ![Sample Gif](gifs/10.gif) |
+| 11    | ```⣾⣽⣻⢿⡿⣟⣯⣷```                                                                                                                                                                                                                                                                            | ![Sample Gif](gifs/11.gif) |
+| 12    | ```>))'> >))'>  >))'>   >))'>    >))'>   <'((<  <'((< <'((<```                                                                                                                                                                                                                            | ![Sample Gif](gifs/12.gif) |
+| 13    | ```⠁⠂⠄⡀⢀⠠⠐⠈```                                                                                                                                                                                                                                                                            | ![Sample Gif](gifs/13.gif) |
+| 14    | ```⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏```                                                                                                                                                                                                                                                                          | ![Sample Gif](gifs/14.gif) |
+| 15    | ```abcdefghijklmnopqrstuvwxyz```                                                                                                                                                                                                                                                          | ![Sample Gif](gifs/15.gif) |
+| 16    | ```▉▊▋▌▍▎▏▎▍▌▋▊▉```                                                                                                                                                                                                                                                                       | ![Sample Gif](gifs/16.gif) |
+| 17    | ```■□▪▫```                                                                                                                                                                                                                                                                                | ![Sample Gif](gifs/17.gif) |
+| 18    | ```←↑→↓```                                                                                                                                                                                                                                                                                | ![Sample Gif](gifs/18.gif) |
+| 19    | ```╫╪```                                                                                                                                                                                                                                                                                  | ![Sample Gif](gifs/19.gif) |
+| 20    | ```⇐⇖⇑⇗⇒⇘⇓⇙```                                                                                                                                                                                                                                                                            | ![Sample Gif](gifs/20.gif) |
+| 21    | ```⠁⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈⠈```                                                                                                                                                                                                                                                       | ![Sample Gif](gifs/21.gif) |
+| 22    | ```⠈⠉⠋⠓⠒⠐⠐⠒⠖⠦⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈```                                                                                                                                                                                                                                                            | ![Sample Gif](gifs/22.gif) |
+| 23    | ```⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠴⠲⠒⠂⠂⠒⠚⠙⠉⠁```                                                                                                                                                                                                                                                            | ![Sample Gif](gifs/23.gif) |
+| 24    | ```⠋⠙⠚⠒⠂⠂⠒⠲⠴⠦⠖⠒⠐⠐⠒⠓⠋```                                                                                                                                                                                                                                                                   | ![Sample Gif](gifs/24.gif) |
+| 25    | ```ヲァィゥェォャュョッアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン```                                                                                                                                                                                                                             | ![Sample Gif](gifs/25.gif) |
+| 26    | ```. .. ...```                                                                                                                                                                                                                                                                            | ![Sample Gif](gifs/26.gif) |
+| 27    | ```▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▏▎▍▌▋▊▉█▇▆▅▄▃▂▁```                                                                                                                                                                                                                                                      | ![Sample Gif](gifs/27.gif) |
+| 28    | ```.oO°Oo.```                                                                                                                                                                                                                                                                             | ![Sample Gif](gifs/28.gif) |
+| 29    | ```+x```                                                                                                                                                                                                                                                                                  | ![Sample Gif](gifs/29.gif) |
+| 30    | ```v<^>```                                                                                                                                                                                                                                                                                | ![Sample Gif](gifs/30.gif) |
+| 31    | ```>>---> >>--->  >>--->   >>--->    >>--->    <---<<    <---<<   <---<<  <---<< <---<<```                                                                                                                                                                                                | ![Sample Gif](gifs/31.gif) |
+| 32    | ```\| \|\| \|\|\| \|\|\|\| \|\|\|\|\| \|\|\|\|\|\| \|\|\|\|\| \|\|\|\| \|\|\| \|\| \|```                                                                                                                                                                                                  | ![Sample Gif](gifs/32.gif) |
+| 33    | ```[] [=] [==] [===] [====] [=====] [======] [=======] [========] [=========] [==========]```                                                                                                                                                                                             | ![Sample Gif](gifs/33.gif) |
+| 34    | ```(*---------) (-*--------) (--*-------) (---*------) (----*-----) (-----*----) (------*---) (-------*--) (--------*-) (---------*)```                                                                                                                                                   | ![Sample Gif](gifs/34.gif) |
+| 35    | ```█▒▒▒▒▒▒▒▒▒ ███▒▒▒▒▒▒▒ █████▒▒▒▒▒ ███████▒▒▒ ██████████```                                                                                                                                                                                                                              | ![Sample Gif](gifs/35.gif) |
+| 36    | ```[                    ] [=>                  ] [===>                ] [=====>              ] [======>             ] [========>           ] [==========>         ] [============>       ] [==============>     ] [================>   ] [==================> ] [===================>]``` | ![Sample Gif](gifs/36.gif) |
+| 37    | ```🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛```                                                                                                                                                                                                                                                             | ![Sample Gif](gifs/37.gif) |
+| 38    | ```🕐 🕜 🕑 🕝 🕒 🕞 🕓 🕟 🕔 🕠 🕕 🕡 🕖 🕢 🕗 🕣 🕘 🕤 🕙 🕥 🕚 🕦 🕛 🕧```                                                                                                                                                                                                                                     | ![Sample Gif](gifs/38.gif) |
+| 39    | ```🌍 🌎 🌏```                                                                                                                                                                                                                                                                               | ![Sample Gif](gifs/39.gif) |
+| 40    | ```◜ ◝ ◞ ◟```                                                                                                                                                                                                                                                                             | ![Sample Gif](gifs/40.gif) |
+| 41    | ```⬒ ⬔ ⬓ ⬕```                                                                                                                                                                                                                                                                             | ![Sample Gif](gifs/41.gif) |
+| 42    | ```⬖ ⬘ ⬗ ⬙```                                                                                                                                                                                                                                                                             | ![Sample Gif](gifs/42.gif) |
+| 43    | ```[>>>          >] []>>>>        [] []  >>>>      [] []    >>>>    [] []      >>>>  [] []        >>>>[] [>>          >>]```                                                                                                                                                              | ![Sample Gif](gifs/43.gif) |
 
 ## Features
 
@@ -139,7 +142,7 @@ s.Prefix = "prefixed text: " // Prefix text before the spinner
 s.Suffix = "  :appended text" // Append text after the spinner
 ```
 
-## Set or change the color of the spinner.  Default color is white.  This will restart the spinner with the new color.
+## Set or change the color of the spinner.  Default color is white. The spinner will need to be restarted to pick up the change.
 
 ```Go
 s.Color("red") // Set the spinner color to red
@@ -151,7 +154,7 @@ You can specify both the background and foreground color, as well as additional
 s.Color("red", "bold") // Set the spinner color to a bold red
 ```
 
-Or to set the background to black, the foreground to a bold red:
+To set the background to black, the foreground to a bold red:
 
 ```Go
 s.Color("bgBlack", "bold", "fgRed")
@@ -159,7 +162,7 @@ s.Color("bgBlack", "bold", "fgRed")
 
 Below is the full color and attribute list:
 
-```
+```Go
 // default colors
 red
 black
@@ -240,12 +243,13 @@ fmt.Println(s.Active())
 
 Feature suggested and write up by [dekz](https://github.com/dekz)
 
-Setting the Spinner Writer to Stderr helps show progress to the user, with the enhancement to chain, pipe or redirect the output.
+Setting the Spinner Writer to Stderr helps show progress to the user, with the enhancement to chain, pipe or redirect the output. 
+
+This is the preferred method of setting a Writer at this time.
 
 ```go
-s := spinner.New(spinner.CharSets[11], 100*time.Millisecond)
+s := spinner.New(spinner.CharSets[11], 100*time.Millisecond, spinner.WithWriter(os.Stderr))
 s.Suffix = " Encrypting data..."
-s.Writer = os.Stderr
 s.Start()
 // Encrypt the data into ciphertext
 fmt.Println(os.Stdout, ciphertext)
diff --git a/vendor/github.com/briandowns/spinner/character_sets.go b/vendor/github.com/briandowns/spinner/character_sets.go
index 600ba37..df41a0f 100644
--- a/vendor/github.com/briandowns/spinner/character_sets.go
+++ b/vendor/github.com/briandowns/spinner/character_sets.go
@@ -1,3 +1,17 @@
+// Copyright (c) 2022 Brian J. Downs
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
 package spinner
 
 const (
@@ -25,6 +39,7 @@ var CharSets = map[int][]string{
 	15: {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"},
 	16: {"▉", "▊", "▋", "▌", "▍", "▎", "▏", "▎", "▍", "▌", "▋", "▊", "▉"},
 	17: {"■", "□", "▪", "▫"},
+
 	18: {"←", "↑", "→", "↓"},
 	19: {"╫", "╪"},
 	20: {"⇐", "⇖", "⇑", "⇗", "⇒", "⇘", "⇓", "⇙"},
@@ -51,6 +66,51 @@ var CharSets = map[int][]string{
 	43: {"[>>>          >]", "[]>>>>        []", "[]  >>>>      []", "[]    >>>>    []", "[]      >>>>  []", "[]        >>>>[]", "[>>          >>]"},
 	44: {"♠", "♣", "♥", "♦"},
 	45: {"➞", "➟", "➠", "➡", "➠", "➟"},
+	46: {"  |  ", ` \   `, "_    ", ` \   `, "  |  ", "   / ", "    _", "   / "},
+	47: {"  . . . .", ".   . . .", ". .   . .", ". . .   .", ". . . .  ", ". . . . ."},
+	48: {" |     ", "  /    ", "   _   ", `    \  `, "     | ", `    \  `, "   _   ", "  /    "},
+	49: {"⎺", "⎻", "⎼", "⎽", "⎼", "⎻"},
+	50: {"▹▹▹▹▹", "▸▹▹▹▹", "▹▸▹▹▹", "▹▹▸▹▹", "▹▹▹▸▹", "▹▹▹▹▸"},
+	51: {"[    ]", "[   =]", "[  ==]", "[ ===]", "[====]", "[=== ]", "[==  ]", "[=   ]"},
+	52: {"( ●    )", "(  ●   )", "(   ●  )", "(    ● )", "(     ●)", "(    ● )", "(   ●  )", "(  ●   )", "( ●    )"},
+	53: {"✶", "✸", "✹", "✺", "✹", "✷"},
+	54: {"▐|\\____________▌", "▐_|\\___________▌", "▐__|\\__________▌", "▐___|\\_________▌", "▐____|\\________▌", "▐_____|\\_______▌", "▐______|\\______▌", "▐_______|\\_____▌", "▐________|\\____▌", "▐_________|\\___▌", "▐__________|\\__▌", "▐___________|\\_▌", "▐____________|\\▌", "▐____________/|▌", "▐___________/|_▌", "▐__________/|__▌", "▐_________/|___▌", "▐________/|____▌", "▐_______/|_____▌", "▐______/|______▌", "▐_____/|_______▌", "▐____/|________▌", "▐___/|_________▌", "▐__/|_______ [...]
+	55: {"▐⠂       ▌", "▐⠈       ▌", "▐ ⠂      ▌", "▐ ⠠      ▌", "▐  ⡀     ▌", "▐  ⠠     ▌", "▐   ⠂    ▌", "▐   ⠈    ▌", "▐    ⠂   ▌", "▐    ⠠   ▌", "▐     ⡀  ▌", "▐     ⠠  ▌", "▐      ⠂ ▌", "▐      ⠈ ▌", "▐       ⠂▌", "▐       ⠠▌", "▐       ⡀▌", "▐      ⠠ ▌", "▐      ⠂ ▌", "▐     ⠈  ▌", "▐     ⠂  ▌", "▐    ⠠   ▌", "▐    ⡀   ▌", "▐   ⠠    ▌", "▐   ⠂    ▌", "▐  ⠈     ▌", "▐  ⠂     ▌", "▐ ⠠      ▌", "▐ ⡀      ▌", "▐⠠       ▌"},
+	56: {"¿", "?"},
+	57: {"⢹", "⢺", "⢼", "⣸", "⣇", "⡧", "⡗", "⡏"},
+	58: {"⢄", "⢂", "⢁", "⡁", "⡈", "⡐", "⡠"},
+	59: {".  ", ".. ", "...", " ..", "  .", "   "},
+	60: {".", "o", "O", "°", "O", "o", "."},
+	61: {"▓", "▒", "░"},
+	62: {"▌", "▀", "▐", "▄"},
+	63: {"⊶", "⊷"},
+	64: {"▪", "▫"},
+	65: {"□", "■"},
+	66: {"▮", "▯"},
+	67: {"-", "=", "≡"},
+	68: {"d", "q", "p", "b"},
+	69: {"∙∙∙", "●∙∙", "∙●∙", "∙∙●", "∙∙∙"},
+	70: {"🌑 ", "🌒 ", "🌓 ", "🌔 ", "🌕 ", "🌖 ", "🌗 ", "🌘 "},
+	71: {"☗", "☖"},
+	72: {"⧇", "⧆"},
+	73: {"◉", "◎"},
+	74: {"㊂", "㊀", "㊁"},
+	75: {"⦾", "⦿"},
+	76: {"ဝ", "၀"},
+	77: {"▌", "▀", "▐▄"},
+	78: {"⠈⠁", "⠈⠑", "⠈⠱", "⠈⡱", "⢀⡱", "⢄⡱", "⢄⡱", "⢆⡱", "⢎⡱", "⢎⡰", "⢎⡠", "⢎⡀", "⢎⠁", "⠎⠁", "⠊⠁"},
+	79: {"________", "-_______", "_-______", "__-_____", "___-____", "____-___", "_____-__", "______-_", "_______-", "________", "_______-", "______-_", "_____-__", "____-___", "___-____", "__-_____", "_-______", "-_______", "________"},
+	80: {"|_______", "_/______", "__-_____", "___\\____", "____|___", "_____/__", "______-_", "_______\\", "_______|", "______\\_", "_____-__", "____/___", "___|____", "__\\_____", "_-______"},
+	81: {"□", "◱", "◧", "▣", "■"},
+	82: {"□", "◱", "▨", "▩", "■"},
+	83: {"░", "▒", "▓", "█"},
+	84: {"░", "█"},
+	85: {"⚪", "⚫"},
+	86: {"◯", "⬤"},
+	87: {"▱", "▰"},
+	88: {"➊", "➋", "➌", "➍", "➎", "➏", "➐", "➑", "➒", "➓"},
+	89: {"½", "⅓", "⅔", "¼", "¾", "⅛", "⅜", "⅝", "⅞"},
+	90: {"↞", "↟", "↠", "↡"},
 }
 
 func init() {
diff --git a/vendor/github.com/briandowns/spinner/spinner.go b/vendor/github.com/briandowns/spinner/spinner.go
index d7e315b..7b7b081 100644
--- a/vendor/github.com/briandowns/spinner/spinner.go
+++ b/vendor/github.com/briandowns/spinner/spinner.go
@@ -1,3 +1,5 @@
+// Copyright (c) 2021 Brian J. Downs
+//
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
@@ -14,18 +16,21 @@
 package spinner
 
 import (
-	"encoding/hex"
 	"errors"
 	"fmt"
 	"io"
+	"math"
 	"os"
 	"runtime"
 	"strconv"
+	"strings"
 	"sync"
 	"time"
 	"unicode/utf8"
 
 	"github.com/fatih/color"
+	"github.com/mattn/go-isatty"
+	"golang.org/x/term"
 )
 
 // errInvalidColor is returned when attempting to set an invalid color
@@ -96,6 +101,10 @@ var validColors = map[string]bool{
 	"bgHiWhite":   true,
 }
 
+// returns true if the OS is windows and the WT_SESSION env variable is set.
+var isWindows = runtime.GOOS == "windows"
+var isWindowsTerminalOnWindows = len(os.Getenv("WT_SESSION")) > 0 && isWindows
+
 // returns a valid color's foreground text color attribute
 var colorAttributeMap = map[string]color.Attribute{
 	// default colors for backwards compatibility
@@ -161,40 +170,43 @@ var colorAttributeMap = map[string]color.Attribute{
 	"bgHiWhite":   color.BgHiWhite,
 }
 
-// validColor will make sure the given color is actually allowed
+// validColor will make sure the given color is actually allowed.
 func validColor(c string) bool {
-	valid := false
-	if validColors[c] {
-		valid = true
-	}
-	return valid
+	return validColors[c]
 }
 
-// Spinner struct to hold the provided options
+// Spinner struct to hold the provided options.
 type Spinner struct {
-	Delay      time.Duration                 // Delay is the speed of the indicator
-	chars      []string                      // chars holds the chosen character set
-	Prefix     string                        // Prefix is the text preppended to the indicator
-	Suffix     string                        // Suffix is the text appended to the indicator
-	FinalMSG   string                        // string displayed after Stop() is called
-	lastOutput string                        // last character(set) written
-	color      func(a ...interface{}) string // default color is white
-	lock       *sync.RWMutex                 //
-	Writer     io.Writer                     // to make testing better, exported so users have access
-	active     bool                          // active holds the state of the spinner
-	stopChan   chan struct{}                 // stopChan is a channel used to stop the indicator
-}
-
-// New provides a pointer to an instance of Spinner with the supplied options
+	mu              *sync.RWMutex
+	Delay           time.Duration                 // Delay is the speed of the indicator
+	chars           []string                      // chars holds the chosen character set
+	Prefix          string                        // Prefix is the text preppended to the indicator
+	Suffix          string                        // Suffix is the text appended to the indicator
+	FinalMSG        string                        // string displayed after Stop() is called
+	lastOutputPlain string                        // last character(set) written
+	LastOutput      string                        // last character(set) written with colors
+	color           func(a ...interface{}) string // default color is white
+	Writer          io.Writer                     // to make testing better, exported so users have access. Use `WithWriter` to update after initialization.
+	active          bool                          // active holds the state of the spinner
+	enabled         bool                          // indicates whether the spinner is enabled or not
+	stopChan        chan struct{}                 // stopChan is a channel used to stop the indicator
+	HideCursor      bool                          // hideCursor determines if the cursor is visible
+	PreUpdate       func(s *Spinner)              // will be triggered before every spinner update
+	PostUpdate      func(s *Spinner)              // will be triggered after every spinner update
+}
+
+// New provides a pointer to an instance of Spinner with the supplied options.
 func New(cs []string, d time.Duration, options ...Option) *Spinner {
-	s:= &Spinner{
-		Delay:    d,
-		chars:    cs,
-		color:    color.New(color.FgWhite).SprintFunc(),
-		lock:     &sync.RWMutex{},
-		Writer:   color.Output,
-		active:   false,
-		stopChan: make(chan struct{}, 1),
+	s := &Spinner{
+		Delay:      d,
+		chars:      cs,
+		color:      color.New(color.FgWhite).SprintFunc(),
+		mu:         &sync.RWMutex{},
+		Writer:     color.Output,
+		stopChan:   make(chan struct{}, 1),
+		active:     false,
+		enabled:    true,
+		HideCursor: true,
 	}
 
 	for _, option := range options {
@@ -204,46 +216,101 @@ func New(cs []string, d time.Duration, options ...Option) *Spinner {
 	return s
 }
 
+// Option is a function that takes a spinner and applies
+// a given configuration.
 type Option func(*Spinner)
 
+// Options contains fields to configure the spinner.
 type Options struct {
-	Color string
-	Suffix string
-	FinalMSG string
+	Color      string
+	Suffix     string
+	FinalMSG   string
+	HideCursor bool
 }
 
+// WithColor adds the given color to the spinner.
 func WithColor(color string) Option {
 	return func(s *Spinner) {
 		s.Color(color)
 	}
 }
 
+// WithSuffix adds the given string to the spinner
+// as the suffix.
 func WithSuffix(suffix string) Option {
 	return func(s *Spinner) {
 		s.Suffix = suffix
 	}
 }
 
+// WithFinalMSG adds the given string ot the spinner
+// as the final message to be written.
 func WithFinalMSG(finalMsg string) Option {
 	return func(s *Spinner) {
 		s.FinalMSG = finalMsg
 	}
 }
 
-// Active will return whether or not the spinner is currently active
+// WithHiddenCursor hides the cursor
+// if hideCursor = true given.
+func WithHiddenCursor(hideCursor bool) Option {
+	return func(s *Spinner) {
+		s.HideCursor = hideCursor
+	}
+}
+
+// WithWriter adds the given writer to the spinner. This
+// function should be favored over directly assigning to
+// the struct value.
+func WithWriter(w io.Writer) Option {
+	return func(s *Spinner) {
+		s.mu.Lock()
+		s.Writer = w
+		s.mu.Unlock()
+	}
+}
+
+// Active will return whether or not the spinner is currently active.
 func (s *Spinner) Active() bool {
 	return s.active
 }
 
-// Start will start the indicator
+// Enabled returns whether or not the spinner is enabled.
+func (s *Spinner) Enabled() bool {
+	return s.enabled
+}
+
+// Enable enables and restarts the spinner
+func (s *Spinner) Enable() {
+	s.enabled = true
+	s.Restart()
+}
+
+// Disable stops and disables the spinner
+func (s *Spinner) Disable() {
+	s.enabled = false
+	s.Stop()
+}
+
+// Start will start the indicator.
 func (s *Spinner) Start() {
-	s.lock.Lock()
-	if s.active {
-		s.lock.Unlock()
+	s.mu.Lock()
+	if s.active || !s.enabled || !isRunningInTerminal() {
+		s.mu.Unlock()
 		return
 	}
+	if s.HideCursor && !isWindowsTerminalOnWindows {
+		// hides the cursor
+		fmt.Fprint(s.Writer, "\033[?25l")
+	}
+	// Disable colors for simple Windows CMD or Powershell
+	// as they can not recognize them
+	if isWindows && !isWindowsTerminalOnWindows {
+		color.NoColor = true
+	}
+
 	s.active = true
-	s.lock.Unlock()
+	s.mu.Unlock()
 
 	go func() {
 		for {
@@ -252,24 +319,40 @@ func (s *Spinner) Start() {
 				case <-s.stopChan:
 					return
 				default:
-					s.lock.Lock()
-					s.erase()
+					s.mu.Lock()
+					if !s.active {
+						s.mu.Unlock()
+						return
+					}
+					if !isWindowsTerminalOnWindows {
+						s.erase()
+					}
+
+					if s.PreUpdate != nil {
+						s.PreUpdate(s)
+					}
+
 					var outColor string
-					if runtime.GOOS == "windows" {
+					if isWindows {
 						if s.Writer == os.Stderr {
-							outColor = fmt.Sprintf("\r%s%s%s ", s.Prefix, s.chars[i], s.Suffix)
+							outColor = fmt.Sprintf("\r%s%s%s", s.Prefix, s.chars[i], s.Suffix)
 						} else {
-							outColor = fmt.Sprintf("\r%s%s%s ", s.Prefix, s.color(s.chars[i]), s.Suffix)
+							outColor = fmt.Sprintf("\r%s%s%s", s.Prefix, s.color(s.chars[i]), s.Suffix)
 						}
 					} else {
-						outColor = fmt.Sprintf("%s%s%s ", s.Prefix, s.color(s.chars[i]), s.Suffix)
+						outColor = fmt.Sprintf("\r%s%s%s", s.Prefix, s.color(s.chars[i]), s.Suffix)
 					}
-					outPlain := fmt.Sprintf("%s%s%s ", s.Prefix, s.chars[i], s.Suffix)
+					outPlain := fmt.Sprintf("\r%s%s%s", s.Prefix, s.chars[i], s.Suffix)
 					fmt.Fprint(s.Writer, outColor)
-					s.lastOutput = outPlain
+					s.lastOutputPlain = outPlain
+					s.LastOutput = outColor
 					delay := s.Delay
-					s.lock.Unlock()
 
+					if s.PostUpdate != nil {
+						s.PostUpdate(s)
+					}
+
+					s.mu.Unlock()
 					time.Sleep(delay)
 				}
 			}
@@ -277,38 +360,46 @@ func (s *Spinner) Start() {
 	}()
 }
 
-// Stop stops the indicator
+// Stop stops the indicator.
 func (s *Spinner) Stop() {
-	s.lock.Lock()
-	defer s.lock.Unlock()
+	s.mu.Lock()
+	defer s.mu.Unlock()
 	if s.active {
 		s.active = false
+		if s.HideCursor && !isWindowsTerminalOnWindows {
+			// makes the cursor visible
+			fmt.Fprint(s.Writer, "\033[?25h")
+		}
 		s.erase()
 		if s.FinalMSG != "" {
-			fmt.Fprintf(s.Writer, s.FinalMSG)
+			if isWindowsTerminalOnWindows {
+				fmt.Fprint(s.Writer, "\r", s.FinalMSG)
+			} else {
+				fmt.Fprint(s.Writer, s.FinalMSG)
+			}
 		}
 		s.stopChan <- struct{}{}
 	}
 }
 
-// Restart will stop and start the indicator
+// Restart will stop and start the indicator.
 func (s *Spinner) Restart() {
 	s.Stop()
 	s.Start()
 }
 
-// Reverse will reverse the order of the slice assigned to the indicator
+// Reverse will reverse the order of the slice assigned to the indicator.
 func (s *Spinner) Reverse() {
-	s.lock.Lock()
-	defer s.lock.Unlock()
+	s.mu.Lock()
 	for i, j := 0, len(s.chars)-1; i < j; i, j = i+1, j-1 {
 		s.chars[i], s.chars[j] = s.chars[j], s.chars[i]
 	}
+	s.mu.Unlock()
 }
 
-// Color will set the struct field for the given color to be used
+// Color will set the struct field for the given color to be used. The spinner
+// will need to be explicitly restarted.
 func (s *Spinner) Color(colors ...string) error {
-
 	colorAttributes := make([]color.Attribute, len(colors))
 
 	// Verify colours are valid and place the appropriate attribute in the array
@@ -316,58 +407,72 @@ func (s *Spinner) Color(colors ...string) error {
 		if !validColor(c) {
 			return errInvalidColor
 		}
-
 		colorAttributes[index] = colorAttributeMap[c]
 	}
 
+	s.mu.Lock()
 	s.color = color.New(colorAttributes...).SprintFunc()
-	s.Restart()
+	s.mu.Unlock()
 	return nil
 }
 
-// UpdateSpeed will set the indicator delay to the given value
+// UpdateSpeed will set the indicator delay to the given value.
 func (s *Spinner) UpdateSpeed(d time.Duration) {
-	s.lock.Lock()
-	defer s.lock.Unlock()
+	s.mu.Lock()
 	s.Delay = d
+	s.mu.Unlock()
 }
 
-// UpdateCharSet will change the current character set to the given one
+// UpdateCharSet will change the current character set to the given one.
 func (s *Spinner) UpdateCharSet(cs []string) {
-	s.lock.Lock()
-	defer s.lock.Unlock()
+	s.mu.Lock()
 	s.chars = cs
+	s.mu.Unlock()
 }
 
-// erase deletes written characters
-//
+// erase deletes written characters on the current line.
 // Caller must already hold s.lock.
 func (s *Spinner) erase() {
-	n := utf8.RuneCountInString(s.lastOutput)
-	if runtime.GOOS == "windows" {
-		clearString := "\r"
-		for i := 0; i < n; i++ {
-			clearString += " "
-		}
-		fmt.Fprintf(s.Writer, clearString)
+	n := utf8.RuneCountInString(s.lastOutputPlain)
+	if runtime.GOOS == "windows" && !isWindowsTerminalOnWindows {
+		clearString := "\r" + strings.Repeat(" ", n) + "\r"
+		fmt.Fprint(s.Writer, clearString)
+		s.lastOutputPlain = ""
 		return
 	}
-	del, _ := hex.DecodeString("7f")
-	for _, c := range []string{
-		"\b",
-		string(del),
-		"\b",
-		"\033[K", // for macOS Terminal
-	} {
-		for i := 0; i < n; i++ {
-			fmt.Fprintf(s.Writer, c)
-		}
+
+	numberOfLinesToErase := computeNumberOfLinesNeededToPrintString(s.lastOutputPlain)
+
+	// Taken from https://en.wikipedia.org/wiki/ANSI_escape_code:
+	// \r     - Carriage return - Moves the cursor to column zero
+	// \033[K - Erases part of the line. If n is 0 (or missing), clear from
+	// cursor to the end of the line. If n is 1, clear from cursor to beginning
+	// of the line. If n is 2, clear entire line. Cursor position does not
+	// change.
+	// \033[F - Go to the beginning of previous line
+	eraseCodeString := strings.Builder{}
+	// current position is at the end of the last printed line. Start by erasing current line
+	eraseCodeString.WriteString("\r\033[K") // start by erasing current line
+	for i := 1; i < numberOfLinesToErase; i++ {
+		// For each additional lines, go up one line and erase it.
+		eraseCodeString.WriteString("\033[F\033[K")
 	}
-	s.lastOutput = ""
+	fmt.Fprintf(s.Writer, eraseCodeString.String())
+	s.lastOutputPlain = ""
+}
+
+// Lock allows for manual control to lock the spinner.
+func (s *Spinner) Lock() {
+	s.mu.Lock()
+}
+
+// Unlock allows for manual control to unlock the spinner.
+func (s *Spinner) Unlock() {
+	s.mu.Unlock()
 }
 
 // GenerateNumberSequence will generate a slice of integers at the
-// provided length and convert them each to a string
+// provided length and convert them each to a string.
 func GenerateNumberSequence(length int) []string {
 	numSeq := make([]string, length)
 	for i := 0; i < length; i++ {
@@ -375,3 +480,59 @@ func GenerateNumberSequence(length int) []string {
 	}
 	return numSeq
 }
+
+// isRunningInTerminal check if stdout file descriptor is terminal
+func isRunningInTerminal() bool {
+	return isatty.IsTerminal(os.Stdout.Fd())
+}
+
+func computeNumberOfLinesNeededToPrintString(linePrinted string) int {
+	terminalWidth := math.MaxInt // assume infinity by default to keep behaviour consistent with what we had before
+	if term.IsTerminal(0) {
+		if width, _, err := term.GetSize(0); err == nil {
+			terminalWidth = width
+		}
+	}
+	return computeNumberOfLinesNeededToPrintStringInternal(linePrinted, terminalWidth)
+}
+
+// isAnsiMarker returns if a rune denotes the start of an ANSI sequence
+func isAnsiMarker(r rune) bool {
+	return r == '\x1b'
+}
+
+// isAnsiTerminator returns if a rune denotes the end of an ANSI sequence
+func isAnsiTerminator(r rune) bool {
+	return (r >= 0x40 && r <= 0x5a) || (r == 0x5e) || (r >= 0x60 && r <= 0x7e)
+}
+
+// computeLineWidth returns the displayed width of a line
+func computeLineWidth(line string) int {
+	width := 0
+	ansi := false
+
+	for _, r := range []rune(line) {
+		// increase width only when outside of ANSI escape sequences
+		if ansi || isAnsiMarker(r) {
+			ansi = !isAnsiTerminator(r)
+		} else {
+			width += utf8.RuneLen(r)
+		}
+	}
+
+	return width
+}
+
+func computeNumberOfLinesNeededToPrintStringInternal(linePrinted string, maxLineWidth int) int {
+	lineCount := 0
+	for _, line := range strings.Split(linePrinted, "\n") {
+		lineCount += 1
+
+		lineWidth := computeLineWidth(line)
+		if lineWidth > maxLineWidth {
+			lineCount += int(float64(lineWidth) / float64(maxLineWidth))
+		}
+	}
+
+	return lineCount
+}
diff --git a/vendor/github.com/chzyer/readline/README.md b/vendor/github.com/chzyer/readline/README.md
index fab974b..4b0a5ff 100644
--- a/vendor/github.com/chzyer/readline/README.md
+++ b/vendor/github.com/chzyer/readline/README.md
@@ -11,7 +11,7 @@
 <img src="https://raw.githubusercontent.com/chzyer/readline/assets/logo_f.png" />
 </p>
 
-A powerful readline library in `Linux` `macOS` `Windows` `Solaris`
+A powerful readline library in `Linux` `macOS` `Windows` `Solaris` `AIX`
 
 ## Guide
 
diff --git a/vendor/github.com/chzyer/readline/complete.go b/vendor/github.com/chzyer/readline/complete.go
index c08c994..1c15aed 100644
--- a/vendor/github.com/chzyer/readline/complete.go
+++ b/vendor/github.com/chzyer/readline/complete.go
@@ -45,10 +45,24 @@ func newOpCompleter(w io.Writer, op *Operation, width int) *opCompleter {
 		width: width,
 	}
 }
+func (o *opCompleter) writeRunes(candidate []rune) {
+	detailIndex := len(candidate)
+	spaceFound := false
+	for idx, r := range candidate {
+		if r == ' ' {
+			spaceFound = true
+		}
+		if spaceFound && r == '(' {
+			detailIndex = idx
+			break
+		}
+	}
+	o.op.buf.WriteRunes(candidate[:detailIndex])
+}
 
 func (o *opCompleter) doSelect() {
 	if len(o.candidate) == 1 {
-		o.op.buf.WriteRunes(o.candidate[0])
+		o.writeRunes(o.candidate[0])
 		o.ExitCompleteMode(false)
 		return
 	}
@@ -123,7 +137,7 @@ func (o *opCompleter) HandleCompleteSelect(r rune) bool {
 	switch r {
 	case CharEnter, CharCtrlJ:
 		next = false
-		o.op.buf.WriteRunes(o.op.candidate[o.op.candidateChoise])
+		o.writeRunes(o.op.candidate[o.op.candidateChoise])
 		o.ExitCompleteMode(false)
 	case CharLineStart:
 		num := o.candidateChoise % o.candidateColNum
diff --git a/vendor/github.com/chzyer/readline/operation.go b/vendor/github.com/chzyer/readline/operation.go
index 4c31624..b60939a 100644
--- a/vendor/github.com/chzyer/readline/operation.go
+++ b/vendor/github.com/chzyer/readline/operation.go
@@ -109,10 +109,12 @@ func (o *Operation) ioloop() {
 		keepInSearchMode := false
 		keepInCompleteMode := false
 		r := o.t.ReadRune()
+
 		if o.GetConfig().FuncFilterInputRune != nil {
 			var process bool
 			r, process = o.GetConfig().FuncFilterInputRune(r)
 			if !process {
+				o.t.KickRead()
 				o.buf.Refresh(nil) // to refresh the line
 				continue           // ignore this rune
 			}
@@ -434,6 +436,10 @@ func (o *Operation) Slice() ([]byte, error) {
 }
 
 func (o *Operation) Close() {
+	select {
+	case o.errchan <- io.EOF:
+	default:
+	}
 	o.history.Close()
 }
 
diff --git a/vendor/github.com/chzyer/readline/readline.go b/vendor/github.com/chzyer/readline/readline.go
index 0e7aca0..63b9171 100644
--- a/vendor/github.com/chzyer/readline/readline.go
+++ b/vendor/github.com/chzyer/readline/readline.go
@@ -17,7 +17,9 @@
 //
 package readline
 
-import "io"
+import (
+	"io"
+)
 
 type Instance struct {
 	Config    *Config
@@ -270,14 +272,24 @@ func (i *Instance) ReadSlice() ([]byte, error) {
 }
 
 // we must make sure that call Close() before process exit.
+// if there has a pending reading operation, that reading will be interrupted.
+// so you can capture the signal and call Instance.Close(), it's thread-safe.
 func (i *Instance) Close() error {
+	i.Config.Stdin.Close()
+	i.Operation.Close()
 	if err := i.Terminal.Close(); err != nil {
 		return err
 	}
-	i.Config.Stdin.Close()
-	i.Operation.Close()
 	return nil
 }
+
+// call CaptureExitSignal when you want readline exit gracefully.
+func (i *Instance) CaptureExitSignal() {
+	CaptureExitSignal(func() {
+		i.Close()
+	})
+}
+
 func (i *Instance) Clean() {
 	i.Operation.Clean()
 }
diff --git a/vendor/github.com/chzyer/readline/runebuf.go b/vendor/github.com/chzyer/readline/runebuf.go
index 81d2da5..d95df1e 100644
--- a/vendor/github.com/chzyer/readline/runebuf.go
+++ b/vendor/github.com/chzyer/readline/runebuf.go
@@ -35,7 +35,7 @@ type RuneBuffer struct {
 	sync.Mutex
 }
 
-func (r* RuneBuffer) pushKill(text []rune) {
+func (r *RuneBuffer) pushKill(text []rune) {
 	r.lastKill = append([]rune{}, text...)
 }
 
@@ -221,7 +221,7 @@ func (r *RuneBuffer) DeleteWord() {
 	}
 	for i := init + 1; i < len(r.buf); i++ {
 		if !IsWordBreak(r.buf[i]) && IsWordBreak(r.buf[i-1]) {
-			r.pushKill(r.buf[r.idx:i-1])
+			r.pushKill(r.buf[r.idx : i-1])
 			r.Refresh(func() {
 				r.buf = append(r.buf[:r.idx], r.buf[i-1:]...)
 			})
@@ -350,7 +350,7 @@ func (r *RuneBuffer) Yank() {
 		return
 	}
 	r.Refresh(func() {
-		buf := make([]rune, 0, len(r.buf) + len(r.lastKill))
+		buf := make([]rune, 0, len(r.buf)+len(r.lastKill))
 		buf = append(buf, r.buf[:r.idx]...)
 		buf = append(buf, r.lastKill...)
 		buf = append(buf, r.buf[r.idx:]...)
diff --git a/vendor/github.com/chzyer/readline/runes.go b/vendor/github.com/chzyer/readline/runes.go
index a669bc4..bcf483e 100644
--- a/vendor/github.com/chzyer/readline/runes.go
+++ b/vendor/github.com/chzyer/readline/runes.go
@@ -141,6 +141,7 @@ var doubleWidth = []*unicode.RangeTable{
 	unicode.Hangul,
 	unicode.Hiragana,
 	unicode.Katakana,
+	unicode.So,
 }
 
 func (Runes) Width(r rune) int {
diff --git a/vendor/github.com/chzyer/readline/term.go b/vendor/github.com/chzyer/readline/term.go
index 133993c..ea5db93 100644
--- a/vendor/github.com/chzyer/readline/term.go
+++ b/vendor/github.com/chzyer/readline/term.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux,!appengine netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd linux,!appengine netbsd openbsd os400 solaris
 
 // Package terminal provides support functions for dealing with terminals, as
 // commonly found on UNIX systems.
diff --git a/vendor/github.com/chzyer/readline/term_solaris.go b/vendor/github.com/chzyer/readline/term_nosyscall6.go
similarity index 96%
rename from vendor/github.com/chzyer/readline/term_solaris.go
rename to vendor/github.com/chzyer/readline/term_nosyscall6.go
index 4c27273..df92339 100644
--- a/vendor/github.com/chzyer/readline/term_solaris.go
+++ b/vendor/github.com/chzyer/readline/term_nosyscall6.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build solaris
+// +build aix os400 solaris
 
 package readline
 
diff --git a/vendor/github.com/chzyer/readline/terminal.go b/vendor/github.com/chzyer/readline/terminal.go
index 1078631..38413d0 100644
--- a/vendor/github.com/chzyer/readline/terminal.go
+++ b/vendor/github.com/chzyer/readline/terminal.go
@@ -125,6 +125,7 @@ func (t *Terminal) ioloop() {
 	var (
 		isEscape       bool
 		isEscapeEx     bool
+		isEscapeSS3    bool
 		expectNextChar bool
 	)
 
@@ -152,9 +153,15 @@ func (t *Terminal) ioloop() {
 		if isEscape {
 			isEscape = false
 			if r == CharEscapeEx {
+				// ^][
 				expectNextChar = true
 				isEscapeEx = true
 				continue
+			} else if r == CharO {
+				// ^]O
+				expectNextChar = true
+				isEscapeSS3 = true
+				continue
 			}
 			r = escapeKey(r, buf)
 		} else if isEscapeEx {
@@ -177,6 +184,15 @@ func (t *Terminal) ioloop() {
 				expectNextChar = true
 				continue
 			}
+		} else if isEscapeSS3 {
+			isEscapeSS3 = false
+			if key := readEscKey(r, buf); key != nil {
+				r = escapeSS3Key(key)
+			}
+			if r == 0 {
+				expectNextChar = true
+				continue
+			}
 		}
 
 		expectNextChar = true
diff --git a/vendor/github.com/chzyer/readline/utils.go b/vendor/github.com/chzyer/readline/utils.go
index af4e005..0706dd4 100644
--- a/vendor/github.com/chzyer/readline/utils.go
+++ b/vendor/github.com/chzyer/readline/utils.go
@@ -6,9 +6,11 @@ import (
 	"container/list"
 	"fmt"
 	"os"
+	"os/signal"
 	"strconv"
 	"strings"
 	"sync"
+	"syscall"
 	"time"
 	"unicode"
 )
@@ -41,6 +43,7 @@ const (
 	CharCtrlY     = 25
 	CharCtrlZ     = 26
 	CharEsc       = 27
+	CharO         = 79
 	CharEscapeEx  = 91
 	CharBackspace = 127
 )
@@ -121,6 +124,27 @@ func escapeExKey(key *escapeKeyPair) rune {
 	return r
 }
 
+// translate EscOX SS3 codes for up/down/etc.
+func escapeSS3Key(key *escapeKeyPair) rune {
+	var r rune
+	switch key.typ {
+	case 'D':
+		r = CharBackward
+	case 'C':
+		r = CharForward
+	case 'A':
+		r = CharPrev
+	case 'B':
+		r = CharNext
+	case 'H':
+		r = CharLineStart
+	case 'F':
+		r = CharLineEnd
+	default:
+	}
+	return r
+}
+
 type escapeKeyPair struct {
 	attr string
 	typ  rune
@@ -275,3 +299,13 @@ func Debug(o ...interface{}) {
 	fmt.Fprintln(f, o...)
 	f.Close()
 }
+
+func CaptureExitSignal(f func()) {
+	cSignal := make(chan os.Signal, 1)
+	signal.Notify(cSignal, os.Interrupt, syscall.SIGTERM)
+	go func() {
+		for range cSignal {
+			f()
+		}
+	}()
+}
diff --git a/vendor/github.com/chzyer/readline/utils_unix.go b/vendor/github.com/chzyer/readline/utils_unix.go
index f88dac9..fc49492 100644
--- a/vendor/github.com/chzyer/readline/utils_unix.go
+++ b/vendor/github.com/chzyer/readline/utils_unix.go
@@ -1,4 +1,4 @@
-// +build darwin dragonfly freebsd linux,!appengine netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd linux,!appengine netbsd openbsd os400 solaris
 
 package readline
 
diff --git a/vendor/github.com/fatih/color/.travis.yml b/vendor/github.com/fatih/color/.travis.yml
deleted file mode 100644
index 95f8a1f..0000000
--- a/vendor/github.com/fatih/color/.travis.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-language: go
-go: 
- - 1.8.x
- - tip
-
diff --git a/vendor/github.com/fatih/color/Gopkg.lock b/vendor/github.com/fatih/color/Gopkg.lock
deleted file mode 100644
index 7d879e9..0000000
--- a/vendor/github.com/fatih/color/Gopkg.lock
+++ /dev/null
@@ -1,27 +0,0 @@
-# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
-
-
-[[projects]]
-  name = "github.com/mattn/go-colorable"
-  packages = ["."]
-  revision = "167de6bfdfba052fa6b2d3664c8f5272e23c9072"
-  version = "v0.0.9"
-
-[[projects]]
-  name = "github.com/mattn/go-isatty"
-  packages = ["."]
-  revision = "0360b2af4f38e8d38c7fce2a9f4e702702d73a39"
-  version = "v0.0.3"
-
-[[projects]]
-  branch = "master"
-  name = "golang.org/x/sys"
-  packages = ["unix"]
-  revision = "37707fdb30a5b38865cfb95e5aab41707daec7fd"
-
-[solve-meta]
-  analyzer-name = "dep"
-  analyzer-version = 1
-  inputs-digest = "e8a50671c3cb93ea935bf210b1cd20702876b9d9226129be581ef646d1565cdc"
-  solver-name = "gps-cdcl"
-  solver-version = 1
diff --git a/vendor/github.com/fatih/color/Gopkg.toml b/vendor/github.com/fatih/color/Gopkg.toml
deleted file mode 100644
index ff1617f..0000000
--- a/vendor/github.com/fatih/color/Gopkg.toml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-# Gopkg.toml example
-#
-# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md
-# for detailed Gopkg.toml documentation.
-#
-# required = ["github.com/user/thing/cmd/thing"]
-# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
-#
-# [[constraint]]
-#   name = "github.com/user/project"
-#   version = "1.0.0"
-#
-# [[constraint]]
-#   name = "github.com/user/project2"
-#   branch = "dev"
-#   source = "github.com/myfork/project2"
-#
-# [[override]]
-#  name = "github.com/x/y"
-#  version = "2.4.0"
-
-
-[[constraint]]
-  name = "github.com/mattn/go-colorable"
-  version = "0.0.9"
-
-[[constraint]]
-  name = "github.com/mattn/go-isatty"
-  version = "0.0.3"
diff --git a/vendor/github.com/fatih/color/README.md b/vendor/github.com/fatih/color/README.md
index 3fc9544..be82827 100644
--- a/vendor/github.com/fatih/color/README.md
+++ b/vendor/github.com/fatih/color/README.md
@@ -1,15 +1,11 @@
-# Color [![GoDoc](https://godoc.org/github.com/fatih/color?status.svg)](https://godoc.org/github.com/fatih/color) [![Build Status](https://img.shields.io/travis/fatih/color.svg?style=flat-square)](https://travis-ci.org/fatih/color)
-
-
+# color [![](https://github.com/fatih/color/workflows/build/badge.svg)](https://github.com/fatih/color/actions) [![PkgGoDev](https://pkg.go.dev/badge/github.com/fatih/color)](https://pkg.go.dev/github.com/fatih/color)
 
 Color lets you use colorized outputs in terms of [ANSI Escape
 Codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors) in Go (Golang). It
 has support for Windows too! The API can be used in several ways, pick one that
 suits you.
 
-
-![Color](https://i.imgur.com/c1JI0lA.png)
-
+![Color](https://user-images.githubusercontent.com/438920/96832689-03b3e000-13f4-11eb-9803-46f4c4de3406.jpg)
 
 ## Install
 
@@ -17,9 +13,6 @@ suits you.
 go get github.com/fatih/color
 ```
 
-Note that the `vendor` folder is here for stability. Remove the folder if you
-already have the dependencies in your GOPATH.
-
 ## Examples
 
 ### Standard colors
@@ -84,7 +77,7 @@ notice("Don't forget this...")
 ### Custom fprint functions (FprintFunc)
 
 ```go
-blue := color.New(FgBlue).FprintfFunc()
+blue := color.New(color.FgBlue).FprintfFunc()
 blue(myWriter, "important notice: %s", stars)
 
 // Mix up with multiple attributes
@@ -130,17 +123,19 @@ fmt.Println("All text will now be bold magenta.")
 ```
 
 ### Disable/Enable color
- 
+
 There might be a case where you want to explicitly disable/enable color output. the 
 `go-isatty` package will automatically disable color output for non-tty output streams 
-(for example if the output were piped directly to `less`)
+(for example if the output were piped directly to `less`).
 
-`Color` has support to disable/enable colors both globally and for single color 
-definitions. For example suppose you have a CLI app and a `--no-color` bool flag. You 
-can easily disable the color output with:
+The `color` package also disables color output if the [`NO_COLOR`](https://no-color.org) environment
+variable is set to a non-empty string.
 
-```go
+`Color` has support to disable/enable colors programmatically both globally and
+for single color definitions. For example suppose you have a CLI app and a
+`-no-color` bool flag. You can easily disable the color output with:
 
+```go
 var flagNoColor = flag.Bool("no-color", false, "Disable color output")
 
 if *flagNoColor {
@@ -162,18 +157,20 @@ c.EnableColor()
 c.Println("This prints again cyan...")
 ```
 
+## GitHub Actions
+
+To output color in GitHub Actions (or other CI systems that support ANSI colors), make sure to set `color.NoColor = false` so that it bypasses the check for non-tty output streams. 
+
 ## Todo
 
 * Save/Return previous values
 * Evaluate fmt.Formatter interface
 
-
 ## Credits
 
- * [Fatih Arslan](https://github.com/fatih)
- * Windows support via @mattn: [colorable](https://github.com/mattn/go-colorable)
+* [Fatih Arslan](https://github.com/fatih)
+* Windows support via @mattn: [colorable](https://github.com/mattn/go-colorable)
 
 ## License
 
 The MIT License (MIT) - see [`LICENSE.md`](https://github.com/fatih/color/blob/master/LICENSE.md) for more details
-
diff --git a/vendor/github.com/fatih/color/color.go b/vendor/github.com/fatih/color/color.go
index 91c8e9f..889f9e7 100644
--- a/vendor/github.com/fatih/color/color.go
+++ b/vendor/github.com/fatih/color/color.go
@@ -15,12 +15,14 @@ import (
 var (
 	// NoColor defines if the output is colorized or not. It's dynamically set to
 	// false or true based on the stdout's file descriptor referring to a terminal
-	// or not. This is a global option and affects all colors. For more control
-	// over each color block use the methods DisableColor() individually.
-	NoColor = os.Getenv("TERM") == "dumb" ||
+	// or not. It's also set to true if the NO_COLOR environment variable is
+	// set (regardless of its value). This is a global option and affects all
+	// colors. For more control over each color block use the methods
+	// DisableColor() individually.
+	NoColor = noColorIsSet() || os.Getenv("TERM") == "dumb" ||
 		(!isatty.IsTerminal(os.Stdout.Fd()) && !isatty.IsCygwinTerminal(os.Stdout.Fd()))
 
-	// Output defines the standard output of the print functions. By default
+	// Output defines the standard output of the print functions. By default,
 	// os.Stdout is used.
 	Output = colorable.NewColorableStdout()
 
@@ -33,6 +35,11 @@ var (
 	colorsCacheMu sync.Mutex // protects colorsCache
 )
 
+// noColorIsSet returns true if the environment variable NO_COLOR is set to a non-empty string.
+func noColorIsSet() bool {
+	return os.Getenv("NO_COLOR") != ""
+}
+
 // Color defines a custom color object which is defined by SGR parameters.
 type Color struct {
 	params  []Attribute
@@ -108,7 +115,14 @@ const (
 
 // New returns a newly created color object.
 func New(value ...Attribute) *Color {
-	c := &Color{params: make([]Attribute, 0)}
+	c := &Color{
+		params: make([]Attribute, 0),
+	}
+
+	if noColorIsSet() {
+		c.noColor = boolPtr(true)
+	}
+
 	c.Add(value...)
 	return c
 }
@@ -137,7 +151,7 @@ func (c *Color) Set() *Color {
 		return c
 	}
 
-	fmt.Fprintf(Output, c.format())
+	fmt.Fprint(Output, c.format())
 	return c
 }
 
@@ -149,16 +163,21 @@ func (c *Color) unset() {
 	Unset()
 }
 
-func (c *Color) setWriter(w io.Writer) *Color {
+// SetWriter is used to set the SGR sequence with the given io.Writer. This is
+// a low-level function, and users should use the higher-level functions, such
+// as color.Fprint, color.Print, etc.
+func (c *Color) SetWriter(w io.Writer) *Color {
 	if c.isNoColorSet() {
 		return c
 	}
 
-	fmt.Fprintf(w, c.format())
+	fmt.Fprint(w, c.format())
 	return c
 }
 
-func (c *Color) unsetWriter(w io.Writer) {
+// UnsetWriter resets all escape attributes and clears the output with the give
+// io.Writer. Usually should be called after SetWriter().
+func (c *Color) UnsetWriter(w io.Writer) {
 	if c.isNoColorSet() {
 		return
 	}
@@ -177,20 +196,14 @@ func (c *Color) Add(value ...Attribute) *Color {
 	return c
 }
 
-func (c *Color) prepend(value Attribute) {
-	c.params = append(c.params, 0)
-	copy(c.params[1:], c.params[0:])
-	c.params[0] = value
-}
-
 // Fprint formats using the default formats for its operands and writes to w.
 // Spaces are added between operands when neither is a string.
 // It returns the number of bytes written and any write error encountered.
 // On Windows, users should wrap w with colorable.NewColorable() if w is of
 // type *os.File.
 func (c *Color) Fprint(w io.Writer, a ...interface{}) (n int, err error) {
-	c.setWriter(w)
-	defer c.unsetWriter(w)
+	c.SetWriter(w)
+	defer c.UnsetWriter(w)
 
 	return fmt.Fprint(w, a...)
 }
@@ -212,8 +225,8 @@ func (c *Color) Print(a ...interface{}) (n int, err error) {
 // On Windows, users should wrap w with colorable.NewColorable() if w is of
 // type *os.File.
 func (c *Color) Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) {
-	c.setWriter(w)
-	defer c.unsetWriter(w)
+	c.SetWriter(w)
+	defer c.UnsetWriter(w)
 
 	return fmt.Fprintf(w, format, a...)
 }
@@ -233,8 +246,8 @@ func (c *Color) Printf(format string, a ...interface{}) (n int, err error) {
 // On Windows, users should wrap w with colorable.NewColorable() if w is of
 // type *os.File.
 func (c *Color) Fprintln(w io.Writer, a ...interface{}) (n int, err error) {
-	c.setWriter(w)
-	defer c.unsetWriter(w)
+	c.SetWriter(w)
+	defer c.UnsetWriter(w)
 
 	return fmt.Fprintln(w, a...)
 }
@@ -381,13 +394,13 @@ func (c *Color) DisableColor() {
 }
 
 // EnableColor enables the color output. Use it in conjunction with
-// DisableColor(). Otherwise this method has no side effects.
+// DisableColor(). Otherwise, this method has no side effects.
 func (c *Color) EnableColor() {
 	c.noColor = boolPtr(false)
 }
 
 func (c *Color) isNoColorSet() bool {
-	// check first if we have user setted action
+	// check first if we have user set action
 	if c.noColor != nil {
 		return *c.noColor
 	}
diff --git a/vendor/github.com/fatih/color/doc.go b/vendor/github.com/fatih/color/doc.go
index cf1e965..9491ad5 100644
--- a/vendor/github.com/fatih/color/doc.go
+++ b/vendor/github.com/fatih/color/doc.go
@@ -5,106 +5,105 @@ that suits you.
 
 Use simple and default helper functions with predefined foreground colors:
 
-    color.Cyan("Prints text in cyan.")
+	color.Cyan("Prints text in cyan.")
 
-    // a newline will be appended automatically
-    color.Blue("Prints %s in blue.", "text")
+	// a newline will be appended automatically
+	color.Blue("Prints %s in blue.", "text")
 
-    // More default foreground colors..
-    color.Red("We have red")
-    color.Yellow("Yellow color too!")
-    color.Magenta("And many others ..")
+	// More default foreground colors..
+	color.Red("We have red")
+	color.Yellow("Yellow color too!")
+	color.Magenta("And many others ..")
 
-    // Hi-intensity colors
-    color.HiGreen("Bright green color.")
-    color.HiBlack("Bright black means gray..")
-    color.HiWhite("Shiny white color!")
+	// Hi-intensity colors
+	color.HiGreen("Bright green color.")
+	color.HiBlack("Bright black means gray..")
+	color.HiWhite("Shiny white color!")
 
-However there are times where custom color mixes are required. Below are some
+However, there are times when custom color mixes are required. Below are some
 examples to create custom color objects and use the print functions of each
 separate color object.
 
-    // Create a new color object
-    c := color.New(color.FgCyan).Add(color.Underline)
-    c.Println("Prints cyan text with an underline.")
+	// Create a new color object
+	c := color.New(color.FgCyan).Add(color.Underline)
+	c.Println("Prints cyan text with an underline.")
 
-    // Or just add them to New()
-    d := color.New(color.FgCyan, color.Bold)
-    d.Printf("This prints bold cyan %s\n", "too!.")
+	// Or just add them to New()
+	d := color.New(color.FgCyan, color.Bold)
+	d.Printf("This prints bold cyan %s\n", "too!.")
 
 
-    // Mix up foreground and background colors, create new mixes!
-    red := color.New(color.FgRed)
+	// Mix up foreground and background colors, create new mixes!
+	red := color.New(color.FgRed)
 
-    boldRed := red.Add(color.Bold)
-    boldRed.Println("This will print text in bold red.")
+	boldRed := red.Add(color.Bold)
+	boldRed.Println("This will print text in bold red.")
 
-    whiteBackground := red.Add(color.BgWhite)
-    whiteBackground.Println("Red text with White background.")
+	whiteBackground := red.Add(color.BgWhite)
+	whiteBackground.Println("Red text with White background.")
 
-    // Use your own io.Writer output
-    color.New(color.FgBlue).Fprintln(myWriter, "blue color!")
+	// Use your own io.Writer output
+	color.New(color.FgBlue).Fprintln(myWriter, "blue color!")
 
-    blue := color.New(color.FgBlue)
-    blue.Fprint(myWriter, "This will print text in blue.")
+	blue := color.New(color.FgBlue)
+	blue.Fprint(myWriter, "This will print text in blue.")
 
 You can create PrintXxx functions to simplify even more:
 
-    // Create a custom print function for convenient
-    red := color.New(color.FgRed).PrintfFunc()
-    red("warning")
-    red("error: %s", err)
+	// Create a custom print function for convenient
+	red := color.New(color.FgRed).PrintfFunc()
+	red("warning")
+	red("error: %s", err)
 
-    // Mix up multiple attributes
-    notice := color.New(color.Bold, color.FgGreen).PrintlnFunc()
-    notice("don't forget this...")
+	// Mix up multiple attributes
+	notice := color.New(color.Bold, color.FgGreen).PrintlnFunc()
+	notice("don't forget this...")
 
 You can also FprintXxx functions to pass your own io.Writer:
 
-    blue := color.New(FgBlue).FprintfFunc()
-    blue(myWriter, "important notice: %s", stars)
-
-    // Mix up with multiple attributes
-    success := color.New(color.Bold, color.FgGreen).FprintlnFunc()
-    success(myWriter, don't forget this...")
+	blue := color.New(FgBlue).FprintfFunc()
+	blue(myWriter, "important notice: %s", stars)
 
+	// Mix up with multiple attributes
+	success := color.New(color.Bold, color.FgGreen).FprintlnFunc()
+	success(myWriter, don't forget this...")
 
 Or create SprintXxx functions to mix strings with other non-colorized strings:
 
-    yellow := New(FgYellow).SprintFunc()
-    red := New(FgRed).SprintFunc()
+	yellow := New(FgYellow).SprintFunc()
+	red := New(FgRed).SprintFunc()
 
-    fmt.Printf("this is a %s and this is %s.\n", yellow("warning"), red("error"))
+	fmt.Printf("this is a %s and this is %s.\n", yellow("warning"), red("error"))
 
-    info := New(FgWhite, BgGreen).SprintFunc()
-    fmt.Printf("this %s rocks!\n", info("package"))
+	info := New(FgWhite, BgGreen).SprintFunc()
+	fmt.Printf("this %s rocks!\n", info("package"))
 
 Windows support is enabled by default. All Print functions work as intended.
-However only for color.SprintXXX functions, user should use fmt.FprintXXX and
+However, only for color.SprintXXX functions, user should use fmt.FprintXXX and
 set the output to color.Output:
 
-    fmt.Fprintf(color.Output, "Windows support: %s", color.GreenString("PASS"))
+	fmt.Fprintf(color.Output, "Windows support: %s", color.GreenString("PASS"))
 
-    info := New(FgWhite, BgGreen).SprintFunc()
-    fmt.Fprintf(color.Output, "this %s rocks!\n", info("package"))
+	info := New(FgWhite, BgGreen).SprintFunc()
+	fmt.Fprintf(color.Output, "this %s rocks!\n", info("package"))
 
 Using with existing code is possible. Just use the Set() method to set the
 standard output to the given parameters. That way a rewrite of an existing
 code is not required.
 
-    // Use handy standard colors.
-    color.Set(color.FgYellow)
+	// Use handy standard colors.
+	color.Set(color.FgYellow)
 
-    fmt.Println("Existing text will be now in Yellow")
-    fmt.Printf("This one %s\n", "too")
+	fmt.Println("Existing text will be now in Yellow")
+	fmt.Printf("This one %s\n", "too")
 
-    color.Unset() // don't forget to unset
+	color.Unset() // don't forget to unset
 
-    // You can mix up parameters
-    color.Set(color.FgMagenta, color.Bold)
-    defer color.Unset() // use it in your function
+	// You can mix up parameters
+	color.Set(color.FgMagenta, color.Bold)
+	defer color.Unset() // use it in your function
 
-    fmt.Println("All text will be now bold magenta.")
+	fmt.Println("All text will be now bold magenta.")
 
 There might be a case where you want to disable color output (for example to
 pipe the standard output of your app to somewhere else). `Color` has support to
@@ -112,22 +111,24 @@ disable colors both globally and for single color definition. For example
 suppose you have a CLI app and a `--no-color` bool flag. You can easily disable
 the color output with:
 
-    var flagNoColor = flag.Bool("no-color", false, "Disable color output")
+	var flagNoColor = flag.Bool("no-color", false, "Disable color output")
+
+	if *flagNoColor {
+		color.NoColor = true // disables colorized output
+	}
 
-    if *flagNoColor {
-    	color.NoColor = true // disables colorized output
-    }
+You can also disable the color by setting the NO_COLOR environment variable to any value.
 
 It also has support for single color definitions (local). You can
 disable/enable color output on the fly:
 
-     c := color.New(color.FgCyan)
-     c.Println("Prints cyan text")
+	c := color.New(color.FgCyan)
+	c.Println("Prints cyan text")
 
-     c.DisableColor()
-     c.Println("This is printed without any color")
+	c.DisableColor()
+	c.Println("This is printed without any color")
 
-     c.EnableColor()
-     c.Println("This prints again cyan...")
+	c.EnableColor()
+	c.Println("This prints again cyan...")
 */
 package color
diff --git a/vendor/github.com/gofrs/flock/.travis.yml b/vendor/github.com/gofrs/flock/.travis.yml
index b791a74..b16d040 100644
--- a/vendor/github.com/gofrs/flock/.travis.yml
+++ b/vendor/github.com/gofrs/flock/.travis.yml
@@ -1,7 +1,7 @@
 language: go
 go:
-  - 1.10.x
-  - 1.11.x
+  - 1.14.x
+  - 1.15.x
 script: go test -v -check.vv -race ./...
 sudo: false
 notifications:
diff --git a/vendor/github.com/gofrs/flock/LICENSE b/vendor/github.com/gofrs/flock/LICENSE
index aff7d35..8b8ff36 100644
--- a/vendor/github.com/gofrs/flock/LICENSE
+++ b/vendor/github.com/gofrs/flock/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2015, Tim Heckman
+Copyright (c) 2015-2020, Tim Heckman
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -11,9 +11,9 @@ modification, are permitted provided that the following conditions are met:
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.
 
-* Neither the name of linode-netint nor the names of its
-  contributors may be used to endorse or promote products derived from
-  this software without specific prior written permission.
+* Neither the name of gofrs nor the names of its contributors may be used
+  to endorse or promote products derived from this software without
+  specific prior written permission.
 
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
diff --git a/vendor/github.com/gofrs/flock/README.md b/vendor/github.com/gofrs/flock/README.md
index 42d580f..71ce636 100644
--- a/vendor/github.com/gofrs/flock/README.md
+++ b/vendor/github.com/gofrs/flock/README.md
@@ -1,7 +1,8 @@
 # flock
 [![TravisCI Build Status](https://img.shields.io/travis/gofrs/flock/master.svg?style=flat)](https://travis-ci.org/gofrs/flock)
-[![GoDoc](https://img.shields.io/badge/godoc-go--flock-blue.svg?style=flat)](https://godoc.org/github.com/gofrs/flock)
+[![GoDoc](https://img.shields.io/badge/godoc-flock-blue.svg?style=flat)](https://godoc.org/github.com/gofrs/flock)
 [![License](https://img.shields.io/badge/license-BSD_3--Clause-brightgreen.svg?style=flat)](https://github.com/gofrs/flock/blob/master/LICENSE)
+[![Go Report Card](https://goreportcard.com/badge/github.com/gofrs/flock)](https://goreportcard.com/report/github.com/gofrs/flock)
 
 `flock` implements a thread-safe sync.Locker interface for file locking. It also
 includes a non-blocking TryLock() function to allow locking without blocking execution.
diff --git a/vendor/github.com/gofrs/flock/appveyor.yml b/vendor/github.com/gofrs/flock/appveyor.yml
index 6848e94..909b4bf 100644
--- a/vendor/github.com/gofrs/flock/appveyor.yml
+++ b/vendor/github.com/gofrs/flock/appveyor.yml
@@ -7,7 +7,7 @@ clone_folder: 'c:\gopath\src\github.com\gofrs\flock'
 
 environment:
   GOPATH: 'c:\gopath'
-  GOVERSION: '1.11'
+  GOVERSION: '1.15'
 
 init:
   - git config --global core.autocrlf input
diff --git a/vendor/github.com/gofrs/flock/flock.go b/vendor/github.com/gofrs/flock/flock.go
index 5783a49..95c784c 100644
--- a/vendor/github.com/gofrs/flock/flock.go
+++ b/vendor/github.com/gofrs/flock/flock.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by the BSD 3-Clause
 // license that can be found in the LICENSE file.
 
-// Package flock implements a thread-safe sync.Locker interface for file locking.
+// Package flock implements a thread-safe interface for file locking.
 // It also includes a non-blocking TryLock() function to allow locking
 // without blocking execution.
 //
@@ -13,12 +13,13 @@
 // guaranteed to be the same on each platform. For example, some UNIX-like
 // operating systems will transparently convert a shared lock to an exclusive
 // lock. If you Unlock() the flock from a location where you believe that you
-// have the shared lock, you may accidently drop the exclusive lock.
+// have the shared lock, you may accidentally drop the exclusive lock.
 package flock
 
 import (
 	"context"
 	"os"
+	"runtime"
 	"sync"
 	"time"
 )
@@ -86,17 +87,17 @@ func (f *Flock) String() string {
 // conditions is met: TryLock succeeds, TryLock fails with error, or Context
 // Done channel is closed.
 func (f *Flock) TryLockContext(ctx context.Context, retryDelay time.Duration) (bool, error) {
-	return tryCtx(f.TryLock, ctx, retryDelay)
+	return tryCtx(ctx, f.TryLock, retryDelay)
 }
 
 // TryRLockContext repeatedly tries to take a shared lock until one of the
 // conditions is met: TryRLock succeeds, TryRLock fails with error, or Context
 // Done channel is closed.
 func (f *Flock) TryRLockContext(ctx context.Context, retryDelay time.Duration) (bool, error) {
-	return tryCtx(f.TryRLock, ctx, retryDelay)
+	return tryCtx(ctx, f.TryRLock, retryDelay)
 }
 
-func tryCtx(fn func() (bool, error), ctx context.Context, retryDelay time.Duration) (bool, error) {
+func tryCtx(ctx context.Context, fn func() (bool, error), retryDelay time.Duration) (bool, error) {
 	if ctx.Err() != nil {
 		return false, ctx.Err()
 	}
@@ -116,7 +117,15 @@ func tryCtx(fn func() (bool, error), ctx context.Context, retryDelay time.Durati
 func (f *Flock) setFh() error {
 	// open a new os.File instance
 	// create it if it doesn't exist, and open the file read-only.
-	fh, err := os.OpenFile(f.path, os.O_CREATE|os.O_RDONLY, os.FileMode(0600))
+	flags := os.O_CREATE
+	if runtime.GOOS == "aix" {
+		// AIX cannot preform write-lock (ie exclusive) on a
+		// read-only file.
+		flags |= os.O_RDWR
+	} else {
+		flags |= os.O_RDONLY
+	}
+	fh, err := os.OpenFile(f.path, flags, os.FileMode(0600))
 	if err != nil {
 		return err
 	}
@@ -125,3 +134,11 @@ func (f *Flock) setFh() error {
 	f.fh = fh
 	return nil
 }
+
+// ensure the file handle is closed if no lock is held
+func (f *Flock) ensureFhState() {
+	if !f.l && !f.r && f.fh != nil {
+		f.fh.Close()
+		f.fh = nil
+	}
+}
diff --git a/vendor/github.com/gofrs/flock/flock_aix.go b/vendor/github.com/gofrs/flock/flock_aix.go
new file mode 100644
index 0000000..7277c1b
--- /dev/null
+++ b/vendor/github.com/gofrs/flock/flock_aix.go
@@ -0,0 +1,281 @@
+// Copyright 2019 Tim Heckman. All rights reserved. Use of this source code is
+// governed by the BSD 3-Clause license that can be found in the LICENSE file.
+
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// This code implements the filelock API using POSIX 'fcntl' locks, which attach
+// to an (inode, process) pair rather than a file descriptor. To avoid unlocking
+// files prematurely when the same file is opened through different descriptors,
+// we allow only one read-lock at a time.
+//
+// This code is adapted from the Go package:
+// cmd/go/internal/lockedfile/internal/filelock
+
+//+build aix
+
+package flock
+
+import (
+	"errors"
+	"io"
+	"os"
+	"sync"
+	"syscall"
+
+	"golang.org/x/sys/unix"
+)
+
+type lockType int16
+
+const (
+	readLock  lockType = unix.F_RDLCK
+	writeLock lockType = unix.F_WRLCK
+)
+
+type cmdType int
+
+const (
+	tryLock  cmdType = unix.F_SETLK
+	waitLock cmdType = unix.F_SETLKW
+)
+
+type inode = uint64
+
+type inodeLock struct {
+	owner *Flock
+	queue []<-chan *Flock
+}
+
+var (
+	mu     sync.Mutex
+	inodes = map[*Flock]inode{}
+	locks  = map[inode]inodeLock{}
+)
+
+// Lock is a blocking call to try and take an exclusive file lock. It will wait
+// until it is able to obtain the exclusive file lock. It's recommended that
+// TryLock() be used over this function. This function may block the ability to
+// query the current Locked() or RLocked() status due to a RW-mutex lock.
+//
+// If we are already exclusive-locked, this function short-circuits and returns
+// immediately assuming it can take the mutex lock.
+//
+// If the *Flock has a shared lock (RLock), this may transparently replace the
+// shared lock with an exclusive lock on some UNIX-like operating systems. Be
+// careful when using exclusive locks in conjunction with shared locks
+// (RLock()), because calling Unlock() may accidentally release the exclusive
+// lock that was once a shared lock.
+func (f *Flock) Lock() error {
+	return f.lock(&f.l, writeLock)
+}
+
+// RLock is a blocking call to try and take a shared file lock. It will wait
+// until it is able to obtain the shared file lock. It's recommended that
+// TryRLock() be used over this function. This function may block the ability to
+// query the current Locked() or RLocked() status due to a RW-mutex lock.
+//
+// If we are already shared-locked, this function short-circuits and returns
+// immediately assuming it can take the mutex lock.
+func (f *Flock) RLock() error {
+	return f.lock(&f.r, readLock)
+}
+
+func (f *Flock) lock(locked *bool, flag lockType) error {
+	f.m.Lock()
+	defer f.m.Unlock()
+
+	if *locked {
+		return nil
+	}
+
+	if f.fh == nil {
+		if err := f.setFh(); err != nil {
+			return err
+		}
+		defer f.ensureFhState()
+	}
+
+	if _, err := f.doLock(waitLock, flag, true); err != nil {
+		return err
+	}
+
+	*locked = true
+	return nil
+}
+
+func (f *Flock) doLock(cmd cmdType, lt lockType, blocking bool) (bool, error) {
+	// POSIX locks apply per inode and process, and the lock for an inode is
+	// released when *any* descriptor for that inode is closed. So we need to
+	// synchronize access to each inode internally, and must serialize lock and
+	// unlock calls that refer to the same inode through different descriptors.
+	fi, err := f.fh.Stat()
+	if err != nil {
+		return false, err
+	}
+	ino := inode(fi.Sys().(*syscall.Stat_t).Ino)
+
+	mu.Lock()
+	if i, dup := inodes[f]; dup && i != ino {
+		mu.Unlock()
+		return false, &os.PathError{
+			Path: f.Path(),
+			Err:  errors.New("inode for file changed since last Lock or RLock"),
+		}
+	}
+
+	inodes[f] = ino
+
+	var wait chan *Flock
+	l := locks[ino]
+	if l.owner == f {
+		// This file already owns the lock, but the call may change its lock type.
+	} else if l.owner == nil {
+		// No owner: it's ours now.
+		l.owner = f
+	} else if !blocking {
+		// Already owned: cannot take the lock.
+		mu.Unlock()
+		return false, nil
+	} else {
+		// Already owned: add a channel to wait on.
+		wait = make(chan *Flock)
+		l.queue = append(l.queue, wait)
+	}
+	locks[ino] = l
+	mu.Unlock()
+
+	if wait != nil {
+		wait <- f
+	}
+
+	err = setlkw(f.fh.Fd(), cmd, lt)
+
+	if err != nil {
+		f.doUnlock()
+		if cmd == tryLock && err == unix.EACCES {
+			return false, nil
+		}
+		return false, err
+	}
+
+	return true, nil
+}
+
+func (f *Flock) Unlock() error {
+	f.m.Lock()
+	defer f.m.Unlock()
+
+	// if we aren't locked or if the lockfile instance is nil
+	// just return a nil error because we are unlocked
+	if (!f.l && !f.r) || f.fh == nil {
+		return nil
+	}
+
+	if err := f.doUnlock(); err != nil {
+		return err
+	}
+
+	f.fh.Close()
+
+	f.l = false
+	f.r = false
+	f.fh = nil
+
+	return nil
+}
+
+func (f *Flock) doUnlock() (err error) {
+	var owner *Flock
+	mu.Lock()
+	ino, ok := inodes[f]
+	if ok {
+		owner = locks[ino].owner
+	}
+	mu.Unlock()
+
+	if owner == f {
+		err = setlkw(f.fh.Fd(), waitLock, unix.F_UNLCK)
+	}
+
+	mu.Lock()
+	l := locks[ino]
+	if len(l.queue) == 0 {
+		// No waiters: remove the map entry.
+		delete(locks, ino)
+	} else {
+		// The first waiter is sending us their file now.
+		// Receive it and update the queue.
+		l.owner = <-l.queue[0]
+		l.queue = l.queue[1:]
+		locks[ino] = l
+	}
+	delete(inodes, f)
+	mu.Unlock()
+
+	return err
+}
+
+// TryLock is the preferred function for taking an exclusive file lock. This
+// function takes an RW-mutex lock before it tries to lock the file, so there is
+// the possibility that this function may block for a short time if another
+// goroutine is trying to take any action.
+//
+// The actual file lock is non-blocking. If we are unable to get the exclusive
+// file lock, the function will return false instead of waiting for the lock. If
+// we get the lock, we also set the *Flock instance as being exclusive-locked.
+func (f *Flock) TryLock() (bool, error) {
+	return f.try(&f.l, writeLock)
+}
+
+// TryRLock is the preferred function for taking a shared file lock. This
+// function takes an RW-mutex lock before it tries to lock the file, so there is
+// the possibility that this function may block for a short time if another
+// goroutine is trying to take any action.
+//
+// The actual file lock is non-blocking. If we are unable to get the shared file
+// lock, the function will return false instead of waiting for the lock. If we
+// get the lock, we also set the *Flock instance as being share-locked.
+func (f *Flock) TryRLock() (bool, error) {
+	return f.try(&f.r, readLock)
+}
+
+func (f *Flock) try(locked *bool, flag lockType) (bool, error) {
+	f.m.Lock()
+	defer f.m.Unlock()
+
+	if *locked {
+		return true, nil
+	}
+
+	if f.fh == nil {
+		if err := f.setFh(); err != nil {
+			return false, err
+		}
+		defer f.ensureFhState()
+	}
+
+	haslock, err := f.doLock(tryLock, flag, false)
+	if err != nil {
+		return false, err
+	}
+
+	*locked = haslock
+	return haslock, nil
+}
+
+// setlkw calls FcntlFlock with cmd for the entire file indicated by fd.
+func setlkw(fd uintptr, cmd cmdType, lt lockType) error {
+	for {
+		err := unix.FcntlFlock(fd, int(cmd), &unix.Flock_t{
+			Type:   int16(lt),
+			Whence: io.SeekStart,
+			Start:  0,
+			Len:    0, // All bytes.
+		})
+		if err != unix.EINTR {
+			return err
+		}
+	}
+}
diff --git a/vendor/github.com/gofrs/flock/flock_unix.go b/vendor/github.com/gofrs/flock/flock_unix.go
index 45f71a7..c315a3e 100644
--- a/vendor/github.com/gofrs/flock/flock_unix.go
+++ b/vendor/github.com/gofrs/flock/flock_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by the BSD 3-Clause
 // license that can be found in the LICENSE file.
 
-// +build !windows
+// +build !aix,!windows
 
 package flock
 
@@ -51,6 +51,7 @@ func (f *Flock) lock(locked *bool, flag int) error {
 		if err := f.setFh(); err != nil {
 			return err
 		}
+		defer f.ensureFhState()
 	}
 
 	if err := syscall.Flock(int(f.fh.Fd()), flag); err != nil {
@@ -142,6 +143,7 @@ func (f *Flock) try(locked *bool, flag int) (bool, error) {
 		if err := f.setFh(); err != nil {
 			return false, err
 		}
+		defer f.ensureFhState()
 	}
 
 	var retried bool
diff --git a/vendor/github.com/gofrs/flock/flock_windows.go b/vendor/github.com/gofrs/flock/flock_windows.go
index 9f4a5f1..ddb534c 100644
--- a/vendor/github.com/gofrs/flock/flock_windows.go
+++ b/vendor/github.com/gofrs/flock/flock_windows.go
@@ -46,6 +46,7 @@ func (f *Flock) lock(locked *bool, flag uint32) error {
 		if err := f.setFh(); err != nil {
 			return err
 		}
+		defer f.ensureFhState()
 	}
 
 	if _, errNo := lockFileEx(syscall.Handle(f.fh.Fd()), flag, 0, 1, 0, &syscall.Overlapped{}); errNo > 0 {
@@ -122,6 +123,7 @@ func (f *Flock) try(locked *bool, flag uint32) (bool, error) {
 		if err := f.setFh(); err != nil {
 			return false, err
 		}
+		defer f.ensureFhState()
 	}
 
 	_, errNo := lockFileEx(syscall.Handle(f.fh.Fd()), flag|winLockfileFailImmediately, 0, 1, 0, &syscall.Overlapped{})
diff --git a/vendor/github.com/google/shlex/shlex.go b/vendor/github.com/google/shlex/shlex.go
index 3cb37b7..d98308b 100644
--- a/vendor/github.com/google/shlex/shlex.go
+++ b/vendor/github.com/google/shlex/shlex.go
@@ -253,7 +253,6 @@ func (t *Tokenizer) scanStream() (*Token, error) {
 					}
 				case spaceRuneClass:
 					{
-						t.input.UnreadRune()
 						token := &Token{
 							tokenType: tokenType,
 							value:     string(value)}
diff --git a/vendor/github.com/mattn/go-colorable/.travis.yml b/vendor/github.com/mattn/go-colorable/.travis.yml
deleted file mode 100644
index 98db8f0..0000000
--- a/vendor/github.com/mattn/go-colorable/.travis.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-language: go
-go:
-  - tip
-
-before_install:
-  - go get github.com/mattn/goveralls
-  - go get golang.org/x/tools/cmd/cover
-script:
-  - $HOME/gopath/bin/goveralls -repotoken xnXqRGwgW3SXIguzxf90ZSK1GPYZPaGrw
diff --git a/vendor/github.com/mattn/go-colorable/README.md b/vendor/github.com/mattn/go-colorable/README.md
index 56729a9..ca04837 100644
--- a/vendor/github.com/mattn/go-colorable/README.md
+++ b/vendor/github.com/mattn/go-colorable/README.md
@@ -1,8 +1,8 @@
 # go-colorable
 
-[![Godoc Reference](https://godoc.org/github.com/mattn/go-colorable?status.svg)](http://godoc.org/github.com/mattn/go-colorable)
-[![Build Status](https://travis-ci.org/mattn/go-colorable.svg?branch=master)](https://travis-ci.org/mattn/go-colorable)
-[![Coverage Status](https://coveralls.io/repos/github/mattn/go-colorable/badge.svg?branch=master)](https://coveralls.io/github/mattn/go-colorable?branch=master)
+[![Build Status](https://github.com/mattn/go-colorable/workflows/test/badge.svg)](https://github.com/mattn/go-colorable/actions?query=workflow%3Atest)
+[![Codecov](https://codecov.io/gh/mattn/go-colorable/branch/master/graph/badge.svg)](https://codecov.io/gh/mattn/go-colorable)
+[![GoDoc](https://godoc.org/github.com/mattn/go-colorable?status.svg)](http://godoc.org/github.com/mattn/go-colorable)
 [![Go Report Card](https://goreportcard.com/badge/mattn/go-colorable)](https://goreportcard.com/report/mattn/go-colorable)
 
 Colorable writer for windows.
diff --git a/vendor/github.com/mattn/go-colorable/colorable_appengine.go b/vendor/github.com/mattn/go-colorable/colorable_appengine.go
index 1f28d77..416d1bb 100644
--- a/vendor/github.com/mattn/go-colorable/colorable_appengine.go
+++ b/vendor/github.com/mattn/go-colorable/colorable_appengine.go
@@ -1,3 +1,4 @@
+//go:build appengine
 // +build appengine
 
 package colorable
@@ -9,7 +10,7 @@ import (
 	_ "github.com/mattn/go-isatty"
 )
 
-// NewColorable return new instance of Writer which handle escape sequence.
+// NewColorable returns new instance of Writer which handles escape sequence.
 func NewColorable(file *os.File) io.Writer {
 	if file == nil {
 		panic("nil passed instead of *os.File to NewColorable()")
@@ -18,12 +19,20 @@ func NewColorable(file *os.File) io.Writer {
 	return file
 }
 
-// NewColorableStdout return new instance of Writer which handle escape sequence for stdout.
+// NewColorableStdout returns new instance of Writer which handles escape sequence for stdout.
 func NewColorableStdout() io.Writer {
 	return os.Stdout
 }
 
-// NewColorableStderr return new instance of Writer which handle escape sequence for stderr.
+// NewColorableStderr returns new instance of Writer which handles escape sequence for stderr.
 func NewColorableStderr() io.Writer {
 	return os.Stderr
 }
+
+// EnableColorsStdout enable colors if possible.
+func EnableColorsStdout(enabled *bool) func() {
+	if enabled != nil {
+		*enabled = true
+	}
+	return func() {}
+}
diff --git a/vendor/github.com/mattn/go-colorable/colorable_others.go b/vendor/github.com/mattn/go-colorable/colorable_others.go
index 887f203..766d946 100644
--- a/vendor/github.com/mattn/go-colorable/colorable_others.go
+++ b/vendor/github.com/mattn/go-colorable/colorable_others.go
@@ -1,5 +1,5 @@
-// +build !windows
-// +build !appengine
+//go:build !windows && !appengine
+// +build !windows,!appengine
 
 package colorable
 
@@ -10,7 +10,7 @@ import (
 	_ "github.com/mattn/go-isatty"
 )
 
-// NewColorable return new instance of Writer which handle escape sequence.
+// NewColorable returns new instance of Writer which handles escape sequence.
 func NewColorable(file *os.File) io.Writer {
 	if file == nil {
 		panic("nil passed instead of *os.File to NewColorable()")
@@ -19,12 +19,20 @@ func NewColorable(file *os.File) io.Writer {
 	return file
 }
 
-// NewColorableStdout return new instance of Writer which handle escape sequence for stdout.
+// NewColorableStdout returns new instance of Writer which handles escape sequence for stdout.
 func NewColorableStdout() io.Writer {
 	return os.Stdout
 }
 
-// NewColorableStderr return new instance of Writer which handle escape sequence for stderr.
+// NewColorableStderr returns new instance of Writer which handles escape sequence for stderr.
 func NewColorableStderr() io.Writer {
 	return os.Stderr
 }
+
+// EnableColorsStdout enable colors if possible.
+func EnableColorsStdout(enabled *bool) func() {
+	if enabled != nil {
+		*enabled = true
+	}
+	return func() {}
+}
diff --git a/vendor/github.com/mattn/go-colorable/colorable_windows.go b/vendor/github.com/mattn/go-colorable/colorable_windows.go
index e17a547..1846ad5 100644
--- a/vendor/github.com/mattn/go-colorable/colorable_windows.go
+++ b/vendor/github.com/mattn/go-colorable/colorable_windows.go
@@ -1,5 +1,5 @@
-// +build windows
-// +build !appengine
+//go:build windows && !appengine
+// +build windows,!appengine
 
 package colorable
 
@@ -10,6 +10,7 @@ import (
 	"os"
 	"strconv"
 	"strings"
+	"sync"
 	"syscall"
 	"unsafe"
 
@@ -27,6 +28,18 @@ const (
 	backgroundRed       = 0x40
 	backgroundIntensity = 0x80
 	backgroundMask      = (backgroundRed | backgroundBlue | backgroundGreen | backgroundIntensity)
+	commonLvbUnderscore = 0x8000
+
+	cENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x4
+)
+
+const (
+	genericRead  = 0x80000000
+	genericWrite = 0x40000000
+)
+
+const (
+	consoleTextmodeBuffer = 0x1
 )
 
 type wchar uint16
@@ -69,23 +82,33 @@ var (
 	procGetConsoleCursorInfo       = kernel32.NewProc("GetConsoleCursorInfo")
 	procSetConsoleCursorInfo       = kernel32.NewProc("SetConsoleCursorInfo")
 	procSetConsoleTitle            = kernel32.NewProc("SetConsoleTitleW")
+	procGetConsoleMode             = kernel32.NewProc("GetConsoleMode")
+	procSetConsoleMode             = kernel32.NewProc("SetConsoleMode")
+	procCreateConsoleScreenBuffer  = kernel32.NewProc("CreateConsoleScreenBuffer")
 )
 
-// Writer provide colorable Writer to the console
+// Writer provides colorable Writer to the console
 type Writer struct {
-	out     io.Writer
-	handle  syscall.Handle
-	oldattr word
-	oldpos  coord
+	out       io.Writer
+	handle    syscall.Handle
+	althandle syscall.Handle
+	oldattr   word
+	oldpos    coord
+	rest      bytes.Buffer
+	mutex     sync.Mutex
 }
 
-// NewColorable return new instance of Writer which handle escape sequence from File.
+// NewColorable returns new instance of Writer which handles escape sequence from File.
 func NewColorable(file *os.File) io.Writer {
 	if file == nil {
 		panic("nil passed instead of *os.File to NewColorable()")
 	}
 
 	if isatty.IsTerminal(file.Fd()) {
+		var mode uint32
+		if r, _, _ := procGetConsoleMode.Call(file.Fd(), uintptr(unsafe.Pointer(&mode))); r != 0 && mode&cENABLE_VIRTUAL_TERMINAL_PROCESSING != 0 {
+			return file
+		}
 		var csbi consoleScreenBufferInfo
 		handle := syscall.Handle(file.Fd())
 		procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
@@ -94,12 +117,12 @@ func NewColorable(file *os.File) io.Writer {
 	return file
 }
 
-// NewColorableStdout return new instance of Writer which handle escape sequence for stdout.
+// NewColorableStdout returns new instance of Writer which handles escape sequence for stdout.
 func NewColorableStdout() io.Writer {
 	return NewColorable(os.Stdout)
 }
 
-// NewColorableStderr return new instance of Writer which handle escape sequence for stderr.
+// NewColorableStderr returns new instance of Writer which handles escape sequence for stderr.
 func NewColorableStderr() io.Writer {
 	return NewColorable(os.Stderr)
 }
@@ -402,114 +425,171 @@ func doTitleSequence(er *bytes.Reader) error {
 	return nil
 }
 
-// Write write data on console
+// returns Atoi(s) unless s == "" in which case it returns def
+func atoiWithDefault(s string, def int) (int, error) {
+	if s == "" {
+		return def, nil
+	}
+	return strconv.Atoi(s)
+}
+
+// Write writes data on console
 func (w *Writer) Write(data []byte) (n int, err error) {
+	w.mutex.Lock()
+	defer w.mutex.Unlock()
 	var csbi consoleScreenBufferInfo
 	procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
 
-	er := bytes.NewReader(data)
-	var bw [1]byte
+	handle := w.handle
+
+	var er *bytes.Reader
+	if w.rest.Len() > 0 {
+		var rest bytes.Buffer
+		w.rest.WriteTo(&rest)
+		w.rest.Reset()
+		rest.Write(data)
+		er = bytes.NewReader(rest.Bytes())
+	} else {
+		er = bytes.NewReader(data)
+	}
+	var plaintext bytes.Buffer
 loop:
 	for {
 		c1, err := er.ReadByte()
 		if err != nil {
+			plaintext.WriteTo(w.out)
 			break loop
 		}
 		if c1 != 0x1b {
-			bw[0] = c1
-			w.out.Write(bw[:])
+			plaintext.WriteByte(c1)
 			continue
 		}
+		_, err = plaintext.WriteTo(w.out)
+		if err != nil {
+			break loop
+		}
 		c2, err := er.ReadByte()
 		if err != nil {
 			break loop
 		}
 
-		if c2 == ']' {
-			if err := doTitleSequence(er); err != nil {
+		switch c2 {
+		case '>':
+			continue
+		case ']':
+			w.rest.WriteByte(c1)
+			w.rest.WriteByte(c2)
+			er.WriteTo(&w.rest)
+			if bytes.IndexByte(w.rest.Bytes(), 0x07) == -1 {
+				break loop
+			}
+			er = bytes.NewReader(w.rest.Bytes()[2:])
+			err := doTitleSequence(er)
+			if err != nil {
 				break loop
 			}
+			w.rest.Reset()
 			continue
-		}
-		if c2 != 0x5b {
+		// https://github.com/mattn/go-colorable/issues/27
+		case '7':
+			procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
+			w.oldpos = csbi.cursorPosition
+			continue
+		case '8':
+			procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&w.oldpos)))
+			continue
+		case 0x5b:
+			// execute part after switch
+		default:
 			continue
 		}
 
+		w.rest.WriteByte(c1)
+		w.rest.WriteByte(c2)
+		er.WriteTo(&w.rest)
+
 		var buf bytes.Buffer
 		var m byte
-		for {
-			c, err := er.ReadByte()
-			if err != nil {
-				break loop
-			}
+		for i, c := range w.rest.Bytes()[2:] {
 			if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' {
 				m = c
+				er = bytes.NewReader(w.rest.Bytes()[2+i+1:])
+				w.rest.Reset()
 				break
 			}
 			buf.Write([]byte(string(c)))
 		}
+		if m == 0 {
+			break loop
+		}
 
 		switch m {
 		case 'A':
-			n, err = strconv.Atoi(buf.String())
+			n, err = atoiWithDefault(buf.String(), 1)
 			if err != nil {
 				continue
 			}
-			procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
+			procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
 			csbi.cursorPosition.y -= short(n)
-			procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
+			procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
 		case 'B':
-			n, err = strconv.Atoi(buf.String())
+			n, err = atoiWithDefault(buf.String(), 1)
 			if err != nil {
 				continue
 			}
-			procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
+			procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
 			csbi.cursorPosition.y += short(n)
-			procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
+			procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
 		case 'C':
-			n, err = strconv.Atoi(buf.String())
+			n, err = atoiWithDefault(buf.String(), 1)
 			if err != nil {
 				continue
 			}
-			procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
+			procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
 			csbi.cursorPosition.x += short(n)
-			procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
+			procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
 		case 'D':
-			n, err = strconv.Atoi(buf.String())
+			n, err = atoiWithDefault(buf.String(), 1)
 			if err != nil {
 				continue
 			}
-			procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
+			procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
 			csbi.cursorPosition.x -= short(n)
-			procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
+			if csbi.cursorPosition.x < 0 {
+				csbi.cursorPosition.x = 0
+			}
+			procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
 		case 'E':
 			n, err = strconv.Atoi(buf.String())
 			if err != nil {
 				continue
 			}
-			procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
+			procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
 			csbi.cursorPosition.x = 0
 			csbi.cursorPosition.y += short(n)
-			procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
+			procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
 		case 'F':
 			n, err = strconv.Atoi(buf.String())
 			if err != nil {
 				continue
 			}
-			procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
+			procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
 			csbi.cursorPosition.x = 0
 			csbi.cursorPosition.y -= short(n)
-			procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
+			procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
 		case 'G':
 			n, err = strconv.Atoi(buf.String())
 			if err != nil {
 				continue
 			}
-			procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
+			if n < 1 {
+				n = 1
+			}
+			procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
 			csbi.cursorPosition.x = short(n - 1)
-			procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
+			procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
 		case 'H', 'f':
-			procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
+			procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
 			if buf.Len() > 0 {
 				token := strings.Split(buf.String(), ";")
 				switch len(token) {
@@ -534,7 +614,7 @@ loop:
 			} else {
 				csbi.cursorPosition.y = 0
 			}
-			procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
+			procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
 		case 'J':
 			n := 0
 			if buf.Len() > 0 {
@@ -545,20 +625,20 @@ loop:
 			}
 			var count, written dword
 			var cursor coord
-			procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
+			procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
 			switch n {
 			case 0:
 				cursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y}
-				count = dword(csbi.size.x - csbi.cursorPosition.x + (csbi.size.y-csbi.cursorPosition.y)*csbi.size.x)
+				count = dword(csbi.size.x) - dword(csbi.cursorPosition.x) + dword(csbi.size.y-csbi.cursorPosition.y)*dword(csbi.size.x)
 			case 1:
 				cursor = coord{x: csbi.window.left, y: csbi.window.top}
-				count = dword(csbi.size.x - csbi.cursorPosition.x + (csbi.window.top-csbi.cursorPosition.y)*csbi.size.x)
+				count = dword(csbi.size.x) - dword(csbi.cursorPosition.x) + dword(csbi.window.top-csbi.cursorPosition.y)*dword(csbi.size.x)
 			case 2:
 				cursor = coord{x: csbi.window.left, y: csbi.window.top}
-				count = dword(csbi.size.x - csbi.cursorPosition.x + (csbi.size.y-csbi.cursorPosition.y)*csbi.size.x)
+				count = dword(csbi.size.x) - dword(csbi.cursorPosition.x) + dword(csbi.size.y-csbi.cursorPosition.y)*dword(csbi.size.x)
 			}
-			procFillConsoleOutputCharacter.Call(uintptr(w.handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
-			procFillConsoleOutputAttribute.Call(uintptr(w.handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
+			procFillConsoleOutputCharacter.Call(uintptr(handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
+			procFillConsoleOutputAttribute.Call(uintptr(handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
 		case 'K':
 			n := 0
 			if buf.Len() > 0 {
@@ -567,28 +647,42 @@ loop:
 					continue
 				}
 			}
-			procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
+			procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
 			var cursor coord
 			var count, written dword
 			switch n {
 			case 0:
-				cursor = coord{x: csbi.cursorPosition.x + 1, y: csbi.cursorPosition.y}
-				count = dword(csbi.size.x - csbi.cursorPosition.x - 1)
+				cursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y}
+				count = dword(csbi.size.x - csbi.cursorPosition.x)
 			case 1:
-				cursor = coord{x: csbi.window.left, y: csbi.window.top + csbi.cursorPosition.y}
+				cursor = coord{x: csbi.window.left, y: csbi.cursorPosition.y}
 				count = dword(csbi.size.x - csbi.cursorPosition.x)
 			case 2:
-				cursor = coord{x: csbi.window.left, y: csbi.window.top + csbi.cursorPosition.y}
+				cursor = coord{x: csbi.window.left, y: csbi.cursorPosition.y}
 				count = dword(csbi.size.x)
 			}
-			procFillConsoleOutputCharacter.Call(uintptr(w.handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
-			procFillConsoleOutputAttribute.Call(uintptr(w.handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
+			procFillConsoleOutputCharacter.Call(uintptr(handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
+			procFillConsoleOutputAttribute.Call(uintptr(handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
+		case 'X':
+			n := 0
+			if buf.Len() > 0 {
+				n, err = strconv.Atoi(buf.String())
+				if err != nil {
+					continue
+				}
+			}
+			procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
+			var cursor coord
+			var written dword
+			cursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y}
+			procFillConsoleOutputCharacter.Call(uintptr(handle), uintptr(' '), uintptr(n), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
+			procFillConsoleOutputAttribute.Call(uintptr(handle), uintptr(csbi.attributes), uintptr(n), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
 		case 'm':
-			procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
+			procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
 			attr := csbi.attributes
 			cs := buf.String()
 			if cs == "" {
-				procSetConsoleTextAttribute.Call(uintptr(w.handle), uintptr(w.oldattr))
+				procSetConsoleTextAttribute.Call(uintptr(handle), uintptr(w.oldattr))
 				continue
 			}
 			token := strings.Split(cs, ";")
@@ -598,14 +692,19 @@ loop:
 					switch {
 					case n == 0 || n == 100:
 						attr = w.oldattr
-					case 1 <= n && n <= 5:
-						attr |= foregroundIntensity
-					case n == 7:
-						attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4)
-					case n == 22 || n == 25:
+					case n == 4:
+						attr |= commonLvbUnderscore
+					case (1 <= n && n <= 3) || n == 5:
 						attr |= foregroundIntensity
-					case n == 27:
-						attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4)
+					case n == 7 || n == 27:
+						attr =
+							(attr &^ (foregroundMask | backgroundMask)) |
+								((attr & foregroundMask) << 4) |
+								((attr & backgroundMask) >> 4)
+					case n == 22:
+						attr &^= foregroundIntensity
+					case n == 24:
+						attr &^= commonLvbUnderscore
 					case 30 <= n && n <= 37:
 						attr &= backgroundMask
 						if (n-30)&1 != 0 {
@@ -624,9 +723,24 @@ loop:
 									n256setup()
 								}
 								attr &= backgroundMask
-								attr |= n256foreAttr[n256]
+								attr |= n256foreAttr[n256%len(n256foreAttr)]
 								i += 2
 							}
+						} else if len(token) == 5 && token[i+1] == "2" {
+							var r, g, b int
+							r, _ = strconv.Atoi(token[i+2])
+							g, _ = strconv.Atoi(token[i+3])
+							b, _ = strconv.Atoi(token[i+4])
+							i += 4
+							if r > 127 {
+								attr |= foregroundRed
+							}
+							if g > 127 {
+								attr |= foregroundGreen
+							}
+							if b > 127 {
+								attr |= foregroundBlue
+							}
 						} else {
 							attr = attr & (w.oldattr & backgroundMask)
 						}
@@ -651,9 +765,24 @@ loop:
 									n256setup()
 								}
 								attr &= foregroundMask
-								attr |= n256backAttr[n256]
+								attr |= n256backAttr[n256%len(n256backAttr)]
 								i += 2
 							}
+						} else if len(token) == 5 && token[i+1] == "2" {
+							var r, g, b int
+							r, _ = strconv.Atoi(token[i+2])
+							g, _ = strconv.Atoi(token[i+3])
+							b, _ = strconv.Atoi(token[i+4])
+							i += 4
+							if r > 127 {
+								attr |= backgroundRed
+							}
+							if g > 127 {
+								attr |= backgroundGreen
+							}
+							if b > 127 {
+								attr |= backgroundBlue
+							}
 						} else {
 							attr = attr & (w.oldattr & foregroundMask)
 						}
@@ -685,38 +814,52 @@ loop:
 							attr |= backgroundBlue
 						}
 					}
-					procSetConsoleTextAttribute.Call(uintptr(w.handle), uintptr(attr))
+					procSetConsoleTextAttribute.Call(uintptr(handle), uintptr(attr))
 				}
 			}
 		case 'h':
 			var ci consoleCursorInfo
 			cs := buf.String()
 			if cs == "5>" {
-				procGetConsoleCursorInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&ci)))
+				procGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))
 				ci.visible = 0
-				procSetConsoleCursorInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&ci)))
+				procSetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))
 			} else if cs == "?25" {
-				procGetConsoleCursorInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&ci)))
+				procGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))
 				ci.visible = 1
-				procSetConsoleCursorInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&ci)))
+				procSetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))
+			} else if cs == "?1049" {
+				if w.althandle == 0 {
+					h, _, _ := procCreateConsoleScreenBuffer.Call(uintptr(genericRead|genericWrite), 0, 0, uintptr(consoleTextmodeBuffer), 0, 0)
+					w.althandle = syscall.Handle(h)
+					if w.althandle != 0 {
+						handle = w.althandle
+					}
+				}
 			}
 		case 'l':
 			var ci consoleCursorInfo
 			cs := buf.String()
 			if cs == "5>" {
-				procGetConsoleCursorInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&ci)))
+				procGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))
 				ci.visible = 1
-				procSetConsoleCursorInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&ci)))
+				procSetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))
 			} else if cs == "?25" {
-				procGetConsoleCursorInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&ci)))
+				procGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))
 				ci.visible = 0
-				procSetConsoleCursorInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&ci)))
+				procSetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))
+			} else if cs == "?1049" {
+				if w.althandle != 0 {
+					syscall.CloseHandle(w.althandle)
+					w.althandle = 0
+					handle = w.handle
+				}
 			}
 		case 's':
-			procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
+			procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
 			w.oldpos = csbi.cursorPosition
 		case 'u':
-			procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&w.oldpos)))
+			procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&w.oldpos)))
 		}
 	}
 
@@ -882,3 +1025,23 @@ func n256setup() {
 		n256backAttr[i] = c.backgroundAttr()
 	}
 }
+
+// EnableColorsStdout enable colors if possible.
+func EnableColorsStdout(enabled *bool) func() {
+	var mode uint32
+	h := os.Stdout.Fd()
+	if r, _, _ := procGetConsoleMode.Call(h, uintptr(unsafe.Pointer(&mode))); r != 0 {
+		if r, _, _ = procSetConsoleMode.Call(h, uintptr(mode|cENABLE_VIRTUAL_TERMINAL_PROCESSING)); r != 0 {
+			if enabled != nil {
+				*enabled = true
+			}
+			return func() {
+				procSetConsoleMode.Call(h, uintptr(mode))
+			}
+		}
+	}
+	if enabled != nil {
+		*enabled = true
+	}
+	return func() {}
+}
diff --git a/vendor/github.com/mattn/go-colorable/go.test.sh b/vendor/github.com/mattn/go-colorable/go.test.sh
new file mode 100644
index 0000000..012162b
--- /dev/null
+++ b/vendor/github.com/mattn/go-colorable/go.test.sh
@@ -0,0 +1,12 @@
+#!/usr/bin/env bash
+
+set -e
+echo "" > coverage.txt
+
+for d in $(go list ./... | grep -v vendor); do
+    go test -race -coverprofile=profile.out -covermode=atomic "$d"
+    if [ -f profile.out ]; then
+        cat profile.out >> coverage.txt
+        rm profile.out
+    fi
+done
diff --git a/vendor/github.com/mattn/go-colorable/noncolorable.go b/vendor/github.com/mattn/go-colorable/noncolorable.go
index 9721e16..05d6f74 100644
--- a/vendor/github.com/mattn/go-colorable/noncolorable.go
+++ b/vendor/github.com/mattn/go-colorable/noncolorable.go
@@ -5,31 +5,35 @@ import (
 	"io"
 )
 
-// NonColorable hold writer but remove escape sequence.
+// NonColorable holds writer but removes escape sequence.
 type NonColorable struct {
 	out io.Writer
 }
 
-// NewNonColorable return new instance of Writer which remove escape sequence from Writer.
+// NewNonColorable returns new instance of Writer which removes escape sequence from Writer.
 func NewNonColorable(w io.Writer) io.Writer {
 	return &NonColorable{out: w}
 }
 
-// Write write data on console
+// Write writes data on console
 func (w *NonColorable) Write(data []byte) (n int, err error) {
 	er := bytes.NewReader(data)
-	var bw [1]byte
+	var plaintext bytes.Buffer
 loop:
 	for {
 		c1, err := er.ReadByte()
 		if err != nil {
+			plaintext.WriteTo(w.out)
 			break loop
 		}
 		if c1 != 0x1b {
-			bw[0] = c1
-			w.out.Write(bw[:])
+			plaintext.WriteByte(c1)
 			continue
 		}
+		_, err = plaintext.WriteTo(w.out)
+		if err != nil {
+			break loop
+		}
 		c2, err := er.ReadByte()
 		if err != nil {
 			break loop
@@ -38,7 +42,6 @@ loop:
 			continue
 		}
 
-		var buf bytes.Buffer
 		for {
 			c, err := er.ReadByte()
 			if err != nil {
@@ -47,7 +50,6 @@ loop:
 			if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' {
 				break
 			}
-			buf.Write([]byte(string(c)))
 		}
 	}
 
diff --git a/vendor/github.com/mattn/go-isatty/.travis.yml b/vendor/github.com/mattn/go-isatty/.travis.yml
deleted file mode 100644
index 5597e02..0000000
--- a/vendor/github.com/mattn/go-isatty/.travis.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-language: go
-go:
-  - tip
-
-os:
-  - linux
-  - osx
-
-before_install:
-  - go get github.com/mattn/goveralls
-  - go get golang.org/x/tools/cmd/cover
-script:
-  - $HOME/gopath/bin/goveralls -repotoken 3gHdORO5k5ziZcWMBxnd9LrMZaJs8m9x5
diff --git a/vendor/github.com/mattn/go-isatty/README.md b/vendor/github.com/mattn/go-isatty/README.md
index 1e69004..3841835 100644
--- a/vendor/github.com/mattn/go-isatty/README.md
+++ b/vendor/github.com/mattn/go-isatty/README.md
@@ -1,7 +1,7 @@
 # go-isatty
 
 [![Godoc Reference](https://godoc.org/github.com/mattn/go-isatty?status.svg)](http://godoc.org/github.com/mattn/go-isatty)
-[![Build Status](https://travis-ci.org/mattn/go-isatty.svg?branch=master)](https://travis-ci.org/mattn/go-isatty)
+[![Codecov](https://codecov.io/gh/mattn/go-isatty/branch/master/graph/badge.svg)](https://codecov.io/gh/mattn/go-isatty)
 [![Coverage Status](https://coveralls.io/repos/github/mattn/go-isatty/badge.svg?branch=master)](https://coveralls.io/github/mattn/go-isatty?branch=master)
 [![Go Report Card](https://goreportcard.com/badge/mattn/go-isatty)](https://goreportcard.com/report/mattn/go-isatty)
 
diff --git a/vendor/github.com/mattn/go-isatty/go.test.sh b/vendor/github.com/mattn/go-isatty/go.test.sh
new file mode 100644
index 0000000..012162b
--- /dev/null
+++ b/vendor/github.com/mattn/go-isatty/go.test.sh
@@ -0,0 +1,12 @@
+#!/usr/bin/env bash
+
+set -e
+echo "" > coverage.txt
+
+for d in $(go list ./... | grep -v vendor); do
+    go test -race -coverprofile=profile.out -covermode=atomic "$d"
+    if [ -f profile.out ]; then
+        cat profile.out >> coverage.txt
+        rm profile.out
+    fi
+done
diff --git a/vendor/github.com/mattn/go-isatty/isatty_appengine.go b/vendor/github.com/mattn/go-isatty/isatty_appengine.go
deleted file mode 100644
index 9584a98..0000000
--- a/vendor/github.com/mattn/go-isatty/isatty_appengine.go
+++ /dev/null
@@ -1,15 +0,0 @@
-// +build appengine
-
-package isatty
-
-// IsTerminal returns true if the file descriptor is terminal which
-// is always false on on appengine classic which is a sandboxed PaaS.
-func IsTerminal(fd uintptr) bool {
-	return false
-}
-
-// IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2
-// terminal. This is also always false on this environment.
-func IsCygwinTerminal(fd uintptr) bool {
-	return false
-}
diff --git a/vendor/github.com/mattn/go-isatty/isatty_bsd.go b/vendor/github.com/mattn/go-isatty/isatty_bsd.go
index 42f2514..d569c0c 100644
--- a/vendor/github.com/mattn/go-isatty/isatty_bsd.go
+++ b/vendor/github.com/mattn/go-isatty/isatty_bsd.go
@@ -1,18 +1,19 @@
-// +build darwin freebsd openbsd netbsd dragonfly
+//go:build (darwin || freebsd || openbsd || netbsd || dragonfly || hurd) && !appengine
+// +build darwin freebsd openbsd netbsd dragonfly hurd
 // +build !appengine
 
 package isatty
 
-import (
-	"syscall"
-	"unsafe"
-)
-
-const ioctlReadTermios = syscall.TIOCGETA
+import "golang.org/x/sys/unix"
 
 // IsTerminal return true if the file descriptor is terminal.
 func IsTerminal(fd uintptr) bool {
-	var termios syscall.Termios
-	_, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0)
-	return err == 0
+	_, err := unix.IoctlGetTermios(int(fd), unix.TIOCGETA)
+	return err == nil
+}
+
+// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2
+// terminal. This is also always false on this environment.
+func IsCygwinTerminal(fd uintptr) bool {
+	return false
 }
diff --git a/vendor/github.com/mattn/go-isatty/isatty_linux.go b/vendor/github.com/mattn/go-isatty/isatty_linux.go
deleted file mode 100644
index 7384cf9..0000000
--- a/vendor/github.com/mattn/go-isatty/isatty_linux.go
+++ /dev/null
@@ -1,18 +0,0 @@
-// +build linux
-// +build !appengine,!ppc64,!ppc64le
-
-package isatty
-
-import (
-	"syscall"
-	"unsafe"
-)
-
-const ioctlReadTermios = syscall.TCGETS
-
-// IsTerminal return true if the file descriptor is terminal.
-func IsTerminal(fd uintptr) bool {
-	var termios syscall.Termios
-	_, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0)
-	return err == 0
-}
diff --git a/vendor/github.com/mattn/go-isatty/isatty_linux_ppc64x.go b/vendor/github.com/mattn/go-isatty/isatty_linux_ppc64x.go
deleted file mode 100644
index 44e5d21..0000000
--- a/vendor/github.com/mattn/go-isatty/isatty_linux_ppc64x.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// +build linux
-// +build ppc64 ppc64le
-
-package isatty
-
-import (
-	"unsafe"
-
-	syscall "golang.org/x/sys/unix"
-)
-
-const ioctlReadTermios = syscall.TCGETS
-
-// IsTerminal return true if the file descriptor is terminal.
-func IsTerminal(fd uintptr) bool {
-	var termios syscall.Termios
-	_, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0)
-	return err == 0
-}
diff --git a/vendor/github.com/mattn/go-isatty/isatty_others.go b/vendor/github.com/mattn/go-isatty/isatty_others.go
index 9d8b4a5..3150322 100644
--- a/vendor/github.com/mattn/go-isatty/isatty_others.go
+++ b/vendor/github.com/mattn/go-isatty/isatty_others.go
@@ -1,9 +1,15 @@
-// +build !windows
-// +build !appengine
+//go:build appengine || js || nacl || wasm
+// +build appengine js nacl wasm
 
 package isatty
 
-// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2
+// IsTerminal returns true if the file descriptor is terminal which
+// is always false on js and appengine classic which is a sandboxed PaaS.
+func IsTerminal(fd uintptr) bool {
+	return false
+}
+
+// IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2
 // terminal. This is also always false on this environment.
 func IsCygwinTerminal(fd uintptr) bool {
 	return false
diff --git a/vendor/github.com/mattn/go-isatty/isatty_plan9.go b/vendor/github.com/mattn/go-isatty/isatty_plan9.go
new file mode 100644
index 0000000..bae7f9b
--- /dev/null
+++ b/vendor/github.com/mattn/go-isatty/isatty_plan9.go
@@ -0,0 +1,23 @@
+//go:build plan9
+// +build plan9
+
+package isatty
+
+import (
+	"syscall"
+)
+
+// IsTerminal returns true if the given file descriptor is a terminal.
+func IsTerminal(fd uintptr) bool {
+	path, err := syscall.Fd2path(int(fd))
+	if err != nil {
+		return false
+	}
+	return path == "/dev/cons" || path == "/mnt/term/dev/cons"
+}
+
+// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2
+// terminal. This is also always false on this environment.
+func IsCygwinTerminal(fd uintptr) bool {
+	return false
+}
diff --git a/vendor/github.com/mattn/go-isatty/isatty_solaris.go b/vendor/github.com/mattn/go-isatty/isatty_solaris.go
index 1f0c6bf..0c3acf2 100644
--- a/vendor/github.com/mattn/go-isatty/isatty_solaris.go
+++ b/vendor/github.com/mattn/go-isatty/isatty_solaris.go
@@ -1,5 +1,5 @@
-// +build solaris
-// +build !appengine
+//go:build solaris && !appengine
+// +build solaris,!appengine
 
 package isatty
 
@@ -8,9 +8,14 @@ import (
 )
 
 // IsTerminal returns true if the given file descriptor is a terminal.
-// see: http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libbc/libc/gen/common/isatty.c
+// see: https://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libc/port/gen/isatty.c
 func IsTerminal(fd uintptr) bool {
-	var termio unix.Termio
-	err := unix.IoctlSetTermio(int(fd), unix.TCGETA, &termio)
+	_, err := unix.IoctlGetTermio(int(fd), unix.TCGETA)
 	return err == nil
 }
+
+// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2
+// terminal. This is also always false on this environment.
+func IsCygwinTerminal(fd uintptr) bool {
+	return false
+}
diff --git a/vendor/github.com/mattn/go-isatty/isatty_tcgets.go b/vendor/github.com/mattn/go-isatty/isatty_tcgets.go
new file mode 100644
index 0000000..6778765
--- /dev/null
+++ b/vendor/github.com/mattn/go-isatty/isatty_tcgets.go
@@ -0,0 +1,19 @@
+//go:build (linux || aix || zos) && !appengine
+// +build linux aix zos
+// +build !appengine
+
+package isatty
+
+import "golang.org/x/sys/unix"
+
+// IsTerminal return true if the file descriptor is terminal.
+func IsTerminal(fd uintptr) bool {
+	_, err := unix.IoctlGetTermios(int(fd), unix.TCGETS)
+	return err == nil
+}
+
+// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2
+// terminal. This is also always false on this environment.
+func IsCygwinTerminal(fd uintptr) bool {
+	return false
+}
diff --git a/vendor/github.com/mattn/go-isatty/isatty_windows.go b/vendor/github.com/mattn/go-isatty/isatty_windows.go
index af51cbc..8e3c991 100644
--- a/vendor/github.com/mattn/go-isatty/isatty_windows.go
+++ b/vendor/github.com/mattn/go-isatty/isatty_windows.go
@@ -1,9 +1,10 @@
-// +build windows
-// +build !appengine
+//go:build windows && !appengine
+// +build windows,!appengine
 
 package isatty
 
 import (
+	"errors"
 	"strings"
 	"syscall"
 	"unicode/utf16"
@@ -11,15 +12,18 @@ import (
 )
 
 const (
-	fileNameInfo uintptr = 2
-	fileTypePipe         = 3
+	objectNameInfo uintptr = 1
+	fileNameInfo           = 2
+	fileTypePipe           = 3
 )
 
 var (
 	kernel32                         = syscall.NewLazyDLL("kernel32.dll")
+	ntdll                            = syscall.NewLazyDLL("ntdll.dll")
 	procGetConsoleMode               = kernel32.NewProc("GetConsoleMode")
 	procGetFileInformationByHandleEx = kernel32.NewProc("GetFileInformationByHandleEx")
 	procGetFileType                  = kernel32.NewProc("GetFileType")
+	procNtQueryObject                = ntdll.NewProc("NtQueryObject")
 )
 
 func init() {
@@ -45,7 +49,10 @@ func isCygwinPipeName(name string) bool {
 		return false
 	}
 
-	if token[0] != `\msys` && token[0] != `\cygwin` {
+	if token[0] != `\msys` &&
+		token[0] != `\cygwin` &&
+		token[0] != `\Device\NamedPipe\msys` &&
+		token[0] != `\Device\NamedPipe\cygwin` {
 		return false
 	}
 
@@ -68,11 +75,35 @@ func isCygwinPipeName(name string) bool {
 	return true
 }
 
+// getFileNameByHandle use the undocomented ntdll NtQueryObject to get file full name from file handler
+// since GetFileInformationByHandleEx is not available under windows Vista and still some old fashion
+// guys are using Windows XP, this is a workaround for those guys, it will also work on system from
+// Windows vista to 10
+// see https://stackoverflow.com/a/18792477 for details
+func getFileNameByHandle(fd uintptr) (string, error) {
+	if procNtQueryObject == nil {
+		return "", errors.New("ntdll.dll: NtQueryObject not supported")
+	}
+
+	var buf [4 + syscall.MAX_PATH]uint16
+	var result int
+	r, _, e := syscall.Syscall6(procNtQueryObject.Addr(), 5,
+		fd, objectNameInfo, uintptr(unsafe.Pointer(&buf)), uintptr(2*len(buf)), uintptr(unsafe.Pointer(&result)), 0)
+	if r != 0 {
+		return "", e
+	}
+	return string(utf16.Decode(buf[4 : 4+buf[0]/2])), nil
+}
+
 // IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2
 // terminal.
 func IsCygwinTerminal(fd uintptr) bool {
 	if procGetFileInformationByHandleEx == nil {
-		return false
+		name, err := getFileNameByHandle(fd)
+		if err != nil {
+			return false
+		}
+		return isCygwinPipeName(name)
 	}
 
 	// Cygwin/msys's pty is a pipe.
diff --git a/vendor/github.com/mattn/go-runewidth/.travis.yml b/vendor/github.com/mattn/go-runewidth/.travis.yml
deleted file mode 100644
index 5c9c2a3..0000000
--- a/vendor/github.com/mattn/go-runewidth/.travis.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-language: go
-go:
-  - tip
-before_install:
-  - go get github.com/mattn/goveralls
-  - go get golang.org/x/tools/cmd/cover
-script:
-    - $HOME/gopath/bin/goveralls -repotoken lAKAWPzcGsD3A8yBX3BGGtRUdJ6CaGERL
diff --git a/vendor/github.com/mattn/go-runewidth/README.mkd b/vendor/github.com/mattn/go-runewidth/README.md
similarity index 64%
rename from vendor/github.com/mattn/go-runewidth/README.mkd
rename to vendor/github.com/mattn/go-runewidth/README.md
index 66663a9..5e2cfd9 100644
--- a/vendor/github.com/mattn/go-runewidth/README.mkd
+++ b/vendor/github.com/mattn/go-runewidth/README.md
@@ -1,8 +1,8 @@
 go-runewidth
 ============
 
-[![Build Status](https://travis-ci.org/mattn/go-runewidth.png?branch=master)](https://travis-ci.org/mattn/go-runewidth)
-[![Coverage Status](https://coveralls.io/repos/mattn/go-runewidth/badge.png?branch=HEAD)](https://coveralls.io/r/mattn/go-runewidth?branch=HEAD)
+[![Build Status](https://github.com/mattn/go-runewidth/workflows/test/badge.svg?branch=master)](https://github.com/mattn/go-runewidth/actions?query=workflow%3Atest)
+[![Codecov](https://codecov.io/gh/mattn/go-runewidth/branch/master/graph/badge.svg)](https://codecov.io/gh/mattn/go-runewidth)
 [![GoDoc](https://godoc.org/github.com/mattn/go-runewidth?status.svg)](http://godoc.org/github.com/mattn/go-runewidth)
 [![Go Report Card](https://goreportcard.com/badge/github.com/mattn/go-runewidth)](https://goreportcard.com/report/github.com/mattn/go-runewidth)
 
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth.go b/vendor/github.com/mattn/go-runewidth/runewidth.go
index 82568a1..7dfbb3b 100644
--- a/vendor/github.com/mattn/go-runewidth/runewidth.go
+++ b/vendor/github.com/mattn/go-runewidth/runewidth.go
@@ -1,22 +1,47 @@
 package runewidth
 
-import "os"
+import (
+	"os"
+	"strings"
+
+	"github.com/rivo/uniseg"
+)
+
+//go:generate go run script/generate.go
 
 var (
 	// EastAsianWidth will be set true if the current locale is CJK
 	EastAsianWidth bool
 
+	// StrictEmojiNeutral should be set false if handle broken fonts
+	StrictEmojiNeutral bool = true
+
 	// DefaultCondition is a condition in current locale
-	DefaultCondition = &Condition{EastAsianWidth}
+	DefaultCondition = &Condition{
+		EastAsianWidth:     false,
+		StrictEmojiNeutral: true,
+	}
 )
 
 func init() {
+	handleEnv()
+}
+
+func handleEnv() {
 	env := os.Getenv("RUNEWIDTH_EASTASIAN")
 	if env == "" {
 		EastAsianWidth = IsEastAsian()
 	} else {
 		EastAsianWidth = env == "1"
 	}
+	// update DefaultCondition
+	if DefaultCondition.EastAsianWidth != EastAsianWidth {
+		DefaultCondition.EastAsianWidth = EastAsianWidth
+		if len(DefaultCondition.combinedLut) > 0 {
+			DefaultCondition.combinedLut = DefaultCondition.combinedLut[:0]
+			CreateLUT()
+		}
+	}
 }
 
 type interval struct {
@@ -36,7 +61,6 @@ func inTables(r rune, ts ...table) bool {
 }
 
 func inTable(r rune, t table) bool {
-	// func (t table) IncludesRune(r rune) bool {
 	if r < t[0].first {
 		return false
 	}
@@ -44,7 +68,7 @@ func inTable(r rune, t table) bool {
 	bot := 0
 	top := len(t) - 1
 	for top >= bot {
-		mid := (bot + top) / 2
+		mid := (bot + top) >> 1
 
 		switch {
 		case t[mid].last < r:
@@ -66,1060 +90,103 @@ var private = table{
 var nonprint = table{
 	{0x0000, 0x001F}, {0x007F, 0x009F}, {0x00AD, 0x00AD},
 	{0x070F, 0x070F}, {0x180B, 0x180E}, {0x200B, 0x200F},
-	{0x2028, 0x2029},
-	{0x202A, 0x202E}, {0x206A, 0x206F}, {0xD800, 0xDFFF},
+	{0x2028, 0x202E}, {0x206A, 0x206F}, {0xD800, 0xDFFF},
 	{0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFB}, {0xFFFE, 0xFFFF},
 }
 
-var combining = table{
-	{0x0300, 0x036F}, {0x0483, 0x0489}, {0x0591, 0x05BD},
-	{0x05BF, 0x05BF}, {0x05C1, 0x05C2}, {0x05C4, 0x05C5},
-	{0x05C7, 0x05C7}, {0x0610, 0x061A}, {0x064B, 0x065F},
-	{0x0670, 0x0670}, {0x06D6, 0x06DC}, {0x06DF, 0x06E4},
-	{0x06E7, 0x06E8}, {0x06EA, 0x06ED}, {0x0711, 0x0711},
-	{0x0730, 0x074A}, {0x07A6, 0x07B0}, {0x07EB, 0x07F3},
-	{0x0816, 0x0819}, {0x081B, 0x0823}, {0x0825, 0x0827},
-	{0x0829, 0x082D}, {0x0859, 0x085B}, {0x08D4, 0x08E1},
-	{0x08E3, 0x0903}, {0x093A, 0x093C}, {0x093E, 0x094F},
-	{0x0951, 0x0957}, {0x0962, 0x0963}, {0x0981, 0x0983},
-	{0x09BC, 0x09BC}, {0x09BE, 0x09C4}, {0x09C7, 0x09C8},
-	{0x09CB, 0x09CD}, {0x09D7, 0x09D7}, {0x09E2, 0x09E3},
-	{0x0A01, 0x0A03}, {0x0A3C, 0x0A3C}, {0x0A3E, 0x0A42},
-	{0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, {0x0A51, 0x0A51},
-	{0x0A70, 0x0A71}, {0x0A75, 0x0A75}, {0x0A81, 0x0A83},
-	{0x0ABC, 0x0ABC}, {0x0ABE, 0x0AC5}, {0x0AC7, 0x0AC9},
-	{0x0ACB, 0x0ACD}, {0x0AE2, 0x0AE3}, {0x0B01, 0x0B03},
-	{0x0B3C, 0x0B3C}, {0x0B3E, 0x0B44}, {0x0B47, 0x0B48},
-	{0x0B4B, 0x0B4D}, {0x0B56, 0x0B57}, {0x0B62, 0x0B63},
-	{0x0B82, 0x0B82}, {0x0BBE, 0x0BC2}, {0x0BC6, 0x0BC8},
-	{0x0BCA, 0x0BCD}, {0x0BD7, 0x0BD7}, {0x0C00, 0x0C03},
-	{0x0C3E, 0x0C44}, {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D},
-	{0x0C55, 0x0C56}, {0x0C62, 0x0C63}, {0x0C81, 0x0C83},
-	{0x0CBC, 0x0CBC}, {0x0CBE, 0x0CC4}, {0x0CC6, 0x0CC8},
-	{0x0CCA, 0x0CCD}, {0x0CD5, 0x0CD6}, {0x0CE2, 0x0CE3},
-	{0x0D01, 0x0D03}, {0x0D3E, 0x0D44}, {0x0D46, 0x0D48},
-	{0x0D4A, 0x0D4D}, {0x0D57, 0x0D57}, {0x0D62, 0x0D63},
-	{0x0D82, 0x0D83}, {0x0DCA, 0x0DCA}, {0x0DCF, 0x0DD4},
-	{0x0DD6, 0x0DD6}, {0x0DD8, 0x0DDF}, {0x0DF2, 0x0DF3},
-	{0x0E31, 0x0E31}, {0x0E34, 0x0E3A}, {0x0E47, 0x0E4E},
-	{0x0EB1, 0x0EB1}, {0x0EB4, 0x0EB9}, {0x0EBB, 0x0EBC},
-	{0x0EC8, 0x0ECD}, {0x0F18, 0x0F19}, {0x0F35, 0x0F35},
-	{0x0F37, 0x0F37}, {0x0F39, 0x0F39}, {0x0F3E, 0x0F3F},
-	{0x0F71, 0x0F84}, {0x0F86, 0x0F87}, {0x0F8D, 0x0F97},
-	{0x0F99, 0x0FBC}, {0x0FC6, 0x0FC6}, {0x102B, 0x103E},
-	{0x1056, 0x1059}, {0x105E, 0x1060}, {0x1062, 0x1064},
-	{0x1067, 0x106D}, {0x1071, 0x1074}, {0x1082, 0x108D},
-	{0x108F, 0x108F}, {0x109A, 0x109D}, {0x135D, 0x135F},
-	{0x1712, 0x1714}, {0x1732, 0x1734}, {0x1752, 0x1753},
-	{0x1772, 0x1773}, {0x17B4, 0x17D3}, {0x17DD, 0x17DD},
-	{0x180B, 0x180D}, {0x1885, 0x1886}, {0x18A9, 0x18A9},
-	{0x1920, 0x192B}, {0x1930, 0x193B}, {0x1A17, 0x1A1B},
-	{0x1A55, 0x1A5E}, {0x1A60, 0x1A7C}, {0x1A7F, 0x1A7F},
-	{0x1AB0, 0x1ABE}, {0x1B00, 0x1B04}, {0x1B34, 0x1B44},
-	{0x1B6B, 0x1B73}, {0x1B80, 0x1B82}, {0x1BA1, 0x1BAD},
-	{0x1BE6, 0x1BF3}, {0x1C24, 0x1C37}, {0x1CD0, 0x1CD2},
-	{0x1CD4, 0x1CE8}, {0x1CED, 0x1CED}, {0x1CF2, 0x1CF4},
-	{0x1CF8, 0x1CF9}, {0x1DC0, 0x1DF5}, {0x1DFB, 0x1DFF},
-	{0x20D0, 0x20F0}, {0x2CEF, 0x2CF1}, {0x2D7F, 0x2D7F},
-	{0x2DE0, 0x2DFF}, {0x302A, 0x302F}, {0x3099, 0x309A},
-	{0xA66F, 0xA672}, {0xA674, 0xA67D}, {0xA69E, 0xA69F},
-	{0xA6F0, 0xA6F1}, {0xA802, 0xA802}, {0xA806, 0xA806},
-	{0xA80B, 0xA80B}, {0xA823, 0xA827}, {0xA880, 0xA881},
-	{0xA8B4, 0xA8C5}, {0xA8E0, 0xA8F1}, {0xA926, 0xA92D},
-	{0xA947, 0xA953}, {0xA980, 0xA983}, {0xA9B3, 0xA9C0},
-	{0xA9E5, 0xA9E5}, {0xAA29, 0xAA36}, {0xAA43, 0xAA43},
-	{0xAA4C, 0xAA4D}, {0xAA7B, 0xAA7D}, {0xAAB0, 0xAAB0},
-	{0xAAB2, 0xAAB4}, {0xAAB7, 0xAAB8}, {0xAABE, 0xAABF},
-	{0xAAC1, 0xAAC1}, {0xAAEB, 0xAAEF}, {0xAAF5, 0xAAF6},
-	{0xABE3, 0xABEA}, {0xABEC, 0xABED}, {0xFB1E, 0xFB1E},
-	{0xFE00, 0xFE0F}, {0xFE20, 0xFE2F}, {0x101FD, 0x101FD},
-	{0x102E0, 0x102E0}, {0x10376, 0x1037A}, {0x10A01, 0x10A03},
-	{0x10A05, 0x10A06}, {0x10A0C, 0x10A0F}, {0x10A38, 0x10A3A},
-	{0x10A3F, 0x10A3F}, {0x10AE5, 0x10AE6}, {0x11000, 0x11002},
-	{0x11038, 0x11046}, {0x1107F, 0x11082}, {0x110B0, 0x110BA},
-	{0x11100, 0x11102}, {0x11127, 0x11134}, {0x11173, 0x11173},
-	{0x11180, 0x11182}, {0x111B3, 0x111C0}, {0x111CA, 0x111CC},
-	{0x1122C, 0x11237}, {0x1123E, 0x1123E}, {0x112DF, 0x112EA},
-	{0x11300, 0x11303}, {0x1133C, 0x1133C}, {0x1133E, 0x11344},
-	{0x11347, 0x11348}, {0x1134B, 0x1134D}, {0x11357, 0x11357},
-	{0x11362, 0x11363}, {0x11366, 0x1136C}, {0x11370, 0x11374},
-	{0x11435, 0x11446}, {0x114B0, 0x114C3}, {0x115AF, 0x115B5},
-	{0x115B8, 0x115C0}, {0x115DC, 0x115DD}, {0x11630, 0x11640},
-	{0x116AB, 0x116B7}, {0x1171D, 0x1172B}, {0x11C2F, 0x11C36},
-	{0x11C38, 0x11C3F}, {0x11C92, 0x11CA7}, {0x11CA9, 0x11CB6},
-	{0x16AF0, 0x16AF4}, {0x16B30, 0x16B36}, {0x16F51, 0x16F7E},
-	{0x16F8F, 0x16F92}, {0x1BC9D, 0x1BC9E}, {0x1D165, 0x1D169},
-	{0x1D16D, 0x1D172}, {0x1D17B, 0x1D182}, {0x1D185, 0x1D18B},
-	{0x1D1AA, 0x1D1AD}, {0x1D242, 0x1D244}, {0x1DA00, 0x1DA36},
-	{0x1DA3B, 0x1DA6C}, {0x1DA75, 0x1DA75}, {0x1DA84, 0x1DA84},
-	{0x1DA9B, 0x1DA9F}, {0x1DAA1, 0x1DAAF}, {0x1E000, 0x1E006},
-	{0x1E008, 0x1E018}, {0x1E01B, 0x1E021}, {0x1E023, 0x1E024},
-	{0x1E026, 0x1E02A}, {0x1E8D0, 0x1E8D6}, {0x1E944, 0x1E94A},
-	{0xE0100, 0xE01EF},
-}
-
-var doublewidth = table{
-	{0x1100, 0x115F}, {0x231A, 0x231B}, {0x2329, 0x232A},
-	{0x23E9, 0x23EC}, {0x23F0, 0x23F0}, {0x23F3, 0x23F3},
-	{0x25FD, 0x25FE}, {0x2614, 0x2615}, {0x2648, 0x2653},
-	{0x267F, 0x267F}, {0x2693, 0x2693}, {0x26A1, 0x26A1},
-	{0x26AA, 0x26AB}, {0x26BD, 0x26BE}, {0x26C4, 0x26C5},
-	{0x26CE, 0x26CE}, {0x26D4, 0x26D4}, {0x26EA, 0x26EA},
-	{0x26F2, 0x26F3}, {0x26F5, 0x26F5}, {0x26FA, 0x26FA},
-	{0x26FD, 0x26FD}, {0x2705, 0x2705}, {0x270A, 0x270B},
-	{0x2728, 0x2728}, {0x274C, 0x274C}, {0x274E, 0x274E},
-	{0x2753, 0x2755}, {0x2757, 0x2757}, {0x2795, 0x2797},
-	{0x27B0, 0x27B0}, {0x27BF, 0x27BF}, {0x2B1B, 0x2B1C},
-	{0x2B50, 0x2B50}, {0x2B55, 0x2B55}, {0x2E80, 0x2E99},
-	{0x2E9B, 0x2EF3}, {0x2F00, 0x2FD5}, {0x2FF0, 0x2FFB},
-	{0x3000, 0x303E}, {0x3041, 0x3096}, {0x3099, 0x30FF},
-	{0x3105, 0x312D}, {0x3131, 0x318E}, {0x3190, 0x31BA},
-	{0x31C0, 0x31E3}, {0x31F0, 0x321E}, {0x3220, 0x3247},
-	{0x3250, 0x32FE}, {0x3300, 0x4DBF}, {0x4E00, 0xA48C},
-	{0xA490, 0xA4C6}, {0xA960, 0xA97C}, {0xAC00, 0xD7A3},
-	{0xF900, 0xFAFF}, {0xFE10, 0xFE19}, {0xFE30, 0xFE52},
-	{0xFE54, 0xFE66}, {0xFE68, 0xFE6B}, {0xFF01, 0xFF60},
-	{0xFFE0, 0xFFE6}, {0x16FE0, 0x16FE0}, {0x17000, 0x187EC},
-	{0x18800, 0x18AF2}, {0x1B000, 0x1B001}, {0x1F004, 0x1F004},
-	{0x1F0CF, 0x1F0CF}, {0x1F18E, 0x1F18E}, {0x1F191, 0x1F19A},
-	{0x1F200, 0x1F202}, {0x1F210, 0x1F23B}, {0x1F240, 0x1F248},
-	{0x1F250, 0x1F251}, {0x1F300, 0x1F320}, {0x1F32D, 0x1F335},
-	{0x1F337, 0x1F37C}, {0x1F37E, 0x1F393}, {0x1F3A0, 0x1F3CA},
-	{0x1F3CF, 0x1F3D3}, {0x1F3E0, 0x1F3F0}, {0x1F3F4, 0x1F3F4},
-	{0x1F3F8, 0x1F43E}, {0x1F440, 0x1F440}, {0x1F442, 0x1F4FC},
-	{0x1F4FF, 0x1F53D}, {0x1F54B, 0x1F54E}, {0x1F550, 0x1F567},
-	{0x1F57A, 0x1F57A}, {0x1F595, 0x1F596}, {0x1F5A4, 0x1F5A4},
-	{0x1F5FB, 0x1F64F}, {0x1F680, 0x1F6C5}, {0x1F6CC, 0x1F6CC},
-	{0x1F6D0, 0x1F6D2}, {0x1F6EB, 0x1F6EC}, {0x1F6F4, 0x1F6F6},
-	{0x1F910, 0x1F91E}, {0x1F920, 0x1F927}, {0x1F930, 0x1F930},
-	{0x1F933, 0x1F93E}, {0x1F940, 0x1F94B}, {0x1F950, 0x1F95E},
-	{0x1F980, 0x1F991}, {0x1F9C0, 0x1F9C0}, {0x20000, 0x2FFFD},
-	{0x30000, 0x3FFFD},
-}
-
-var ambiguous = table{
-	{0x00A1, 0x00A1}, {0x00A4, 0x00A4}, {0x00A7, 0x00A8},
-	{0x00AA, 0x00AA}, {0x00AD, 0x00AE}, {0x00B0, 0x00B4},
-	{0x00B6, 0x00BA}, {0x00BC, 0x00BF}, {0x00C6, 0x00C6},
-	{0x00D0, 0x00D0}, {0x00D7, 0x00D8}, {0x00DE, 0x00E1},
-	{0x00E6, 0x00E6}, {0x00E8, 0x00EA}, {0x00EC, 0x00ED},
-	{0x00F0, 0x00F0}, {0x00F2, 0x00F3}, {0x00F7, 0x00FA},
-	{0x00FC, 0x00FC}, {0x00FE, 0x00FE}, {0x0101, 0x0101},
-	{0x0111, 0x0111}, {0x0113, 0x0113}, {0x011B, 0x011B},
-	{0x0126, 0x0127}, {0x012B, 0x012B}, {0x0131, 0x0133},
-	{0x0138, 0x0138}, {0x013F, 0x0142}, {0x0144, 0x0144},
-	{0x0148, 0x014B}, {0x014D, 0x014D}, {0x0152, 0x0153},
-	{0x0166, 0x0167}, {0x016B, 0x016B}, {0x01CE, 0x01CE},
-	{0x01D0, 0x01D0}, {0x01D2, 0x01D2}, {0x01D4, 0x01D4},
-	{0x01D6, 0x01D6}, {0x01D8, 0x01D8}, {0x01DA, 0x01DA},
-	{0x01DC, 0x01DC}, {0x0251, 0x0251}, {0x0261, 0x0261},
-	{0x02C4, 0x02C4}, {0x02C7, 0x02C7}, {0x02C9, 0x02CB},
-	{0x02CD, 0x02CD}, {0x02D0, 0x02D0}, {0x02D8, 0x02DB},
-	{0x02DD, 0x02DD}, {0x02DF, 0x02DF}, {0x0300, 0x036F},
-	{0x0391, 0x03A1}, {0x03A3, 0x03A9}, {0x03B1, 0x03C1},
-	{0x03C3, 0x03C9}, {0x0401, 0x0401}, {0x0410, 0x044F},
-	{0x0451, 0x0451}, {0x2010, 0x2010}, {0x2013, 0x2016},
-	{0x2018, 0x2019}, {0x201C, 0x201D}, {0x2020, 0x2022},
-	{0x2024, 0x2027}, {0x2030, 0x2030}, {0x2032, 0x2033},
-	{0x2035, 0x2035}, {0x203B, 0x203B}, {0x203E, 0x203E},
-	{0x2074, 0x2074}, {0x207F, 0x207F}, {0x2081, 0x2084},
-	{0x20AC, 0x20AC}, {0x2103, 0x2103}, {0x2105, 0x2105},
-	{0x2109, 0x2109}, {0x2113, 0x2113}, {0x2116, 0x2116},
-	{0x2121, 0x2122}, {0x2126, 0x2126}, {0x212B, 0x212B},
-	{0x2153, 0x2154}, {0x215B, 0x215E}, {0x2160, 0x216B},
-	{0x2170, 0x2179}, {0x2189, 0x2189}, {0x2190, 0x2199},
-	{0x21B8, 0x21B9}, {0x21D2, 0x21D2}, {0x21D4, 0x21D4},
-	{0x21E7, 0x21E7}, {0x2200, 0x2200}, {0x2202, 0x2203},
-	{0x2207, 0x2208}, {0x220B, 0x220B}, {0x220F, 0x220F},
-	{0x2211, 0x2211}, {0x2215, 0x2215}, {0x221A, 0x221A},
-	{0x221D, 0x2220}, {0x2223, 0x2223}, {0x2225, 0x2225},
-	{0x2227, 0x222C}, {0x222E, 0x222E}, {0x2234, 0x2237},
-	{0x223C, 0x223D}, {0x2248, 0x2248}, {0x224C, 0x224C},
-	{0x2252, 0x2252}, {0x2260, 0x2261}, {0x2264, 0x2267},
-	{0x226A, 0x226B}, {0x226E, 0x226F}, {0x2282, 0x2283},
-	{0x2286, 0x2287}, {0x2295, 0x2295}, {0x2299, 0x2299},
-	{0x22A5, 0x22A5}, {0x22BF, 0x22BF}, {0x2312, 0x2312},
-	{0x2460, 0x24E9}, {0x24EB, 0x254B}, {0x2550, 0x2573},
-	{0x2580, 0x258F}, {0x2592, 0x2595}, {0x25A0, 0x25A1},
-	{0x25A3, 0x25A9}, {0x25B2, 0x25B3}, {0x25B6, 0x25B7},
-	{0x25BC, 0x25BD}, {0x25C0, 0x25C1}, {0x25C6, 0x25C8},
-	{0x25CB, 0x25CB}, {0x25CE, 0x25D1}, {0x25E2, 0x25E5},
-	{0x25EF, 0x25EF}, {0x2605, 0x2606}, {0x2609, 0x2609},
-	{0x260E, 0x260F}, {0x261C, 0x261C}, {0x261E, 0x261E},
-	{0x2640, 0x2640}, {0x2642, 0x2642}, {0x2660, 0x2661},
-	{0x2663, 0x2665}, {0x2667, 0x266A}, {0x266C, 0x266D},
-	{0x266F, 0x266F}, {0x269E, 0x269F}, {0x26BF, 0x26BF},
-	{0x26C6, 0x26CD}, {0x26CF, 0x26D3}, {0x26D5, 0x26E1},
-	{0x26E3, 0x26E3}, {0x26E8, 0x26E9}, {0x26EB, 0x26F1},
-	{0x26F4, 0x26F4}, {0x26F6, 0x26F9}, {0x26FB, 0x26FC},
-	{0x26FE, 0x26FF}, {0x273D, 0x273D}, {0x2776, 0x277F},
-	{0x2B56, 0x2B59}, {0x3248, 0x324F}, {0xE000, 0xF8FF},
-	{0xFE00, 0xFE0F}, {0xFFFD, 0xFFFD}, {0x1F100, 0x1F10A},
-	{0x1F110, 0x1F12D}, {0x1F130, 0x1F169}, {0x1F170, 0x1F18D},
-	{0x1F18F, 0x1F190}, {0x1F19B, 0x1F1AC}, {0xE0100, 0xE01EF},
-	{0xF0000, 0xFFFFD}, {0x100000, 0x10FFFD},
-}
-
-var emoji = table{
-	{0x1F1E6, 0x1F1FF}, {0x1F321, 0x1F321}, {0x1F324, 0x1F32C},
-	{0x1F336, 0x1F336}, {0x1F37D, 0x1F37D}, {0x1F396, 0x1F397},
-	{0x1F399, 0x1F39B}, {0x1F39E, 0x1F39F}, {0x1F3CB, 0x1F3CE},
-	{0x1F3D4, 0x1F3DF}, {0x1F3F3, 0x1F3F5}, {0x1F3F7, 0x1F3F7},
-	{0x1F43F, 0x1F43F}, {0x1F441, 0x1F441}, {0x1F4FD, 0x1F4FD},
-	{0x1F549, 0x1F54A}, {0x1F56F, 0x1F570}, {0x1F573, 0x1F579},
-	{0x1F587, 0x1F587}, {0x1F58A, 0x1F58D}, {0x1F590, 0x1F590},
-	{0x1F5A5, 0x1F5A5}, {0x1F5A8, 0x1F5A8}, {0x1F5B1, 0x1F5B2},
-	{0x1F5BC, 0x1F5BC}, {0x1F5C2, 0x1F5C4}, {0x1F5D1, 0x1F5D3},
-	{0x1F5DC, 0x1F5DE}, {0x1F5E1, 0x1F5E1}, {0x1F5E3, 0x1F5E3},
-	{0x1F5E8, 0x1F5E8}, {0x1F5EF, 0x1F5EF}, {0x1F5F3, 0x1F5F3},
-	{0x1F5FA, 0x1F5FA}, {0x1F6CB, 0x1F6CF}, {0x1F6E0, 0x1F6E5},
-	{0x1F6E9, 0x1F6E9}, {0x1F6F0, 0x1F6F0}, {0x1F6F3, 0x1F6F3},
-}
-
-var notassigned = table{
-	{0x0378, 0x0379}, {0x0380, 0x0383}, {0x038B, 0x038B},
-	{0x038D, 0x038D}, {0x03A2, 0x03A2}, {0x0530, 0x0530},
-	{0x0557, 0x0558}, {0x0560, 0x0560}, {0x0588, 0x0588},
-	{0x058B, 0x058C}, {0x0590, 0x0590}, {0x05C8, 0x05CF},
-	{0x05EB, 0x05EF}, {0x05F5, 0x05FF}, {0x061D, 0x061D},
-	{0x070E, 0x070E}, {0x074B, 0x074C}, {0x07B2, 0x07BF},
-	{0x07FB, 0x07FF}, {0x082E, 0x082F}, {0x083F, 0x083F},
-	{0x085C, 0x085D}, {0x085F, 0x089F}, {0x08B5, 0x08B5},
-	{0x08BE, 0x08D3}, {0x0984, 0x0984}, {0x098D, 0x098E},
-	{0x0991, 0x0992}, {0x09A9, 0x09A9}, {0x09B1, 0x09B1},
-	{0x09B3, 0x09B5}, {0x09BA, 0x09BB}, {0x09C5, 0x09C6},
-	{0x09C9, 0x09CA}, {0x09CF, 0x09D6}, {0x09D8, 0x09DB},
-	{0x09DE, 0x09DE}, {0x09E4, 0x09E5}, {0x09FC, 0x0A00},
-	{0x0A04, 0x0A04}, {0x0A0B, 0x0A0E}, {0x0A11, 0x0A12},
-	{0x0A29, 0x0A29}, {0x0A31, 0x0A31}, {0x0A34, 0x0A34},
-	{0x0A37, 0x0A37}, {0x0A3A, 0x0A3B}, {0x0A3D, 0x0A3D},
-	{0x0A43, 0x0A46}, {0x0A49, 0x0A4A}, {0x0A4E, 0x0A50},
-	{0x0A52, 0x0A58}, {0x0A5D, 0x0A5D}, {0x0A5F, 0x0A65},
-	{0x0A76, 0x0A80}, {0x0A84, 0x0A84}, {0x0A8E, 0x0A8E},
-	{0x0A92, 0x0A92}, {0x0AA9, 0x0AA9}, {0x0AB1, 0x0AB1},
-	{0x0AB4, 0x0AB4}, {0x0ABA, 0x0ABB}, {0x0AC6, 0x0AC6},
-	{0x0ACA, 0x0ACA}, {0x0ACE, 0x0ACF}, {0x0AD1, 0x0ADF},
-	{0x0AE4, 0x0AE5}, {0x0AF2, 0x0AF8}, {0x0AFA, 0x0B00},
-	{0x0B04, 0x0B04}, {0x0B0D, 0x0B0E}, {0x0B11, 0x0B12},
-	{0x0B29, 0x0B29}, {0x0B31, 0x0B31}, {0x0B34, 0x0B34},
-	{0x0B3A, 0x0B3B}, {0x0B45, 0x0B46}, {0x0B49, 0x0B4A},
-	{0x0B4E, 0x0B55}, {0x0B58, 0x0B5B}, {0x0B5E, 0x0B5E},
-	{0x0B64, 0x0B65}, {0x0B78, 0x0B81}, {0x0B84, 0x0B84},
-	{0x0B8B, 0x0B8D}, {0x0B91, 0x0B91}, {0x0B96, 0x0B98},
-	{0x0B9B, 0x0B9B}, {0x0B9D, 0x0B9D}, {0x0BA0, 0x0BA2},
-	{0x0BA5, 0x0BA7}, {0x0BAB, 0x0BAD}, {0x0BBA, 0x0BBD},
-	{0x0BC3, 0x0BC5}, {0x0BC9, 0x0BC9}, {0x0BCE, 0x0BCF},
-	{0x0BD1, 0x0BD6}, {0x0BD8, 0x0BE5}, {0x0BFB, 0x0BFF},
-	{0x0C04, 0x0C04}, {0x0C0D, 0x0C0D}, {0x0C11, 0x0C11},
-	{0x0C29, 0x0C29}, {0x0C3A, 0x0C3C}, {0x0C45, 0x0C45},
-	{0x0C49, 0x0C49}, {0x0C4E, 0x0C54}, {0x0C57, 0x0C57},
-	{0x0C5B, 0x0C5F}, {0x0C64, 0x0C65}, {0x0C70, 0x0C77},
-	{0x0C84, 0x0C84}, {0x0C8D, 0x0C8D}, {0x0C91, 0x0C91},
-	{0x0CA9, 0x0CA9}, {0x0CB4, 0x0CB4}, {0x0CBA, 0x0CBB},
-	{0x0CC5, 0x0CC5}, {0x0CC9, 0x0CC9}, {0x0CCE, 0x0CD4},
-	{0x0CD7, 0x0CDD}, {0x0CDF, 0x0CDF}, {0x0CE4, 0x0CE5},
-	{0x0CF0, 0x0CF0}, {0x0CF3, 0x0D00}, {0x0D04, 0x0D04},
-	{0x0D0D, 0x0D0D}, {0x0D11, 0x0D11}, {0x0D3B, 0x0D3C},
-	{0x0D45, 0x0D45}, {0x0D49, 0x0D49}, {0x0D50, 0x0D53},
-	{0x0D64, 0x0D65}, {0x0D80, 0x0D81}, {0x0D84, 0x0D84},
-	{0x0D97, 0x0D99}, {0x0DB2, 0x0DB2}, {0x0DBC, 0x0DBC},
-	{0x0DBE, 0x0DBF}, {0x0DC7, 0x0DC9}, {0x0DCB, 0x0DCE},
-	{0x0DD5, 0x0DD5}, {0x0DD7, 0x0DD7}, {0x0DE0, 0x0DE5},
-	{0x0DF0, 0x0DF1}, {0x0DF5, 0x0E00}, {0x0E3B, 0x0E3E},
-	{0x0E5C, 0x0E80}, {0x0E83, 0x0E83}, {0x0E85, 0x0E86},
-	{0x0E89, 0x0E89}, {0x0E8B, 0x0E8C}, {0x0E8E, 0x0E93},
-	{0x0E98, 0x0E98}, {0x0EA0, 0x0EA0}, {0x0EA4, 0x0EA4},
-	{0x0EA6, 0x0EA6}, {0x0EA8, 0x0EA9}, {0x0EAC, 0x0EAC},
-	{0x0EBA, 0x0EBA}, {0x0EBE, 0x0EBF}, {0x0EC5, 0x0EC5},
-	{0x0EC7, 0x0EC7}, {0x0ECE, 0x0ECF}, {0x0EDA, 0x0EDB},
-	{0x0EE0, 0x0EFF}, {0x0F48, 0x0F48}, {0x0F6D, 0x0F70},
-	{0x0F98, 0x0F98}, {0x0FBD, 0x0FBD}, {0x0FCD, 0x0FCD},
-	{0x0FDB, 0x0FFF}, {0x10C6, 0x10C6}, {0x10C8, 0x10CC},
-	{0x10CE, 0x10CF}, {0x1249, 0x1249}, {0x124E, 0x124F},
-	{0x1257, 0x1257}, {0x1259, 0x1259}, {0x125E, 0x125F},
-	{0x1289, 0x1289}, {0x128E, 0x128F}, {0x12B1, 0x12B1},
-	{0x12B6, 0x12B7}, {0x12BF, 0x12BF}, {0x12C1, 0x12C1},
-	{0x12C6, 0x12C7}, {0x12D7, 0x12D7}, {0x1311, 0x1311},
-	{0x1316, 0x1317}, {0x135B, 0x135C}, {0x137D, 0x137F},
-	{0x139A, 0x139F}, {0x13F6, 0x13F7}, {0x13FE, 0x13FF},
-	{0x169D, 0x169F}, {0x16F9, 0x16FF}, {0x170D, 0x170D},
-	{0x1715, 0x171F}, {0x1737, 0x173F}, {0x1754, 0x175F},
-	{0x176D, 0x176D}, {0x1771, 0x1771}, {0x1774, 0x177F},
-	{0x17DE, 0x17DF}, {0x17EA, 0x17EF}, {0x17FA, 0x17FF},
-	{0x180F, 0x180F}, {0x181A, 0x181F}, {0x1878, 0x187F},
-	{0x18AB, 0x18AF}, {0x18F6, 0x18FF}, {0x191F, 0x191F},
-	{0x192C, 0x192F}, {0x193C, 0x193F}, {0x1941, 0x1943},
-	{0x196E, 0x196F}, {0x1975, 0x197F}, {0x19AC, 0x19AF},
-	{0x19CA, 0x19CF}, {0x19DB, 0x19DD}, {0x1A1C, 0x1A1D},
-	{0x1A5F, 0x1A5F}, {0x1A7D, 0x1A7E}, {0x1A8A, 0x1A8F},
-	{0x1A9A, 0x1A9F}, {0x1AAE, 0x1AAF}, {0x1ABF, 0x1AFF},
-	{0x1B4C, 0x1B4F}, {0x1B7D, 0x1B7F}, {0x1BF4, 0x1BFB},
-	{0x1C38, 0x1C3A}, {0x1C4A, 0x1C4C}, {0x1C89, 0x1CBF},
-	{0x1CC8, 0x1CCF}, {0x1CF7, 0x1CF7}, {0x1CFA, 0x1CFF},
-	{0x1DF6, 0x1DFA}, {0x1F16, 0x1F17}, {0x1F1E, 0x1F1F},
-	{0x1F46, 0x1F47}, {0x1F4E, 0x1F4F}, {0x1F58, 0x1F58},
-	{0x1F5A, 0x1F5A}, {0x1F5C, 0x1F5C}, {0x1F5E, 0x1F5E},
-	{0x1F7E, 0x1F7F}, {0x1FB5, 0x1FB5}, {0x1FC5, 0x1FC5},
-	{0x1FD4, 0x1FD5}, {0x1FDC, 0x1FDC}, {0x1FF0, 0x1FF1},
-	{0x1FF5, 0x1FF5}, {0x1FFF, 0x1FFF}, {0x2065, 0x2065},
-	{0x2072, 0x2073}, {0x208F, 0x208F}, {0x209D, 0x209F},
-	{0x20BF, 0x20CF}, {0x20F1, 0x20FF}, {0x218C, 0x218F},
-	{0x23FF, 0x23FF}, {0x2427, 0x243F}, {0x244B, 0x245F},
-	{0x2B74, 0x2B75}, {0x2B96, 0x2B97}, {0x2BBA, 0x2BBC},
-	{0x2BC9, 0x2BC9}, {0x2BD2, 0x2BEB}, {0x2BF0, 0x2BFF},
-	{0x2C2F, 0x2C2F}, {0x2C5F, 0x2C5F}, {0x2CF4, 0x2CF8},
-	{0x2D26, 0x2D26}, {0x2D28, 0x2D2C}, {0x2D2E, 0x2D2F},
-	{0x2D68, 0x2D6E}, {0x2D71, 0x2D7E}, {0x2D97, 0x2D9F},
-	{0x2DA7, 0x2DA7}, {0x2DAF, 0x2DAF}, {0x2DB7, 0x2DB7},
-	{0x2DBF, 0x2DBF}, {0x2DC7, 0x2DC7}, {0x2DCF, 0x2DCF},
-	{0x2DD7, 0x2DD7}, {0x2DDF, 0x2DDF}, {0x2E45, 0x2E7F},
-	{0x2E9A, 0x2E9A}, {0x2EF4, 0x2EFF}, {0x2FD6, 0x2FEF},
-	{0x2FFC, 0x2FFF}, {0x3040, 0x3040}, {0x3097, 0x3098},
-	{0x3100, 0x3104}, {0x312E, 0x3130}, {0x318F, 0x318F},
-	{0x31BB, 0x31BF}, {0x31E4, 0x31EF}, {0x321F, 0x321F},
-	{0x32FF, 0x32FF}, {0x4DB6, 0x4DBF}, {0x9FD6, 0x9FFF},
-	{0xA48D, 0xA48F}, {0xA4C7, 0xA4CF}, {0xA62C, 0xA63F},
-	{0xA6F8, 0xA6FF}, {0xA7AF, 0xA7AF}, {0xA7B8, 0xA7F6},
-	{0xA82C, 0xA82F}, {0xA83A, 0xA83F}, {0xA878, 0xA87F},
-	{0xA8C6, 0xA8CD}, {0xA8DA, 0xA8DF}, {0xA8FE, 0xA8FF},
-	{0xA954, 0xA95E}, {0xA97D, 0xA97F}, {0xA9CE, 0xA9CE},
-	{0xA9DA, 0xA9DD}, {0xA9FF, 0xA9FF}, {0xAA37, 0xAA3F},
-	{0xAA4E, 0xAA4F}, {0xAA5A, 0xAA5B}, {0xAAC3, 0xAADA},
-	{0xAAF7, 0xAB00}, {0xAB07, 0xAB08}, {0xAB0F, 0xAB10},
-	{0xAB17, 0xAB1F}, {0xAB27, 0xAB27}, {0xAB2F, 0xAB2F},
-	{0xAB66, 0xAB6F}, {0xABEE, 0xABEF}, {0xABFA, 0xABFF},
-	{0xD7A4, 0xD7AF}, {0xD7C7, 0xD7CA}, {0xD7FC, 0xD7FF},
-	{0xFA6E, 0xFA6F}, {0xFADA, 0xFAFF}, {0xFB07, 0xFB12},
-	{0xFB18, 0xFB1C}, {0xFB37, 0xFB37}, {0xFB3D, 0xFB3D},
-	{0xFB3F, 0xFB3F}, {0xFB42, 0xFB42}, {0xFB45, 0xFB45},
-	{0xFBC2, 0xFBD2}, {0xFD40, 0xFD4F}, {0xFD90, 0xFD91},
-	{0xFDC8, 0xFDEF}, {0xFDFE, 0xFDFF}, {0xFE1A, 0xFE1F},
-	{0xFE53, 0xFE53}, {0xFE67, 0xFE67}, {0xFE6C, 0xFE6F},
-	{0xFE75, 0xFE75}, {0xFEFD, 0xFEFE}, {0xFF00, 0xFF00},
-	{0xFFBF, 0xFFC1}, {0xFFC8, 0xFFC9}, {0xFFD0, 0xFFD1},
-	{0xFFD8, 0xFFD9}, {0xFFDD, 0xFFDF}, {0xFFE7, 0xFFE7},
-	{0xFFEF, 0xFFF8}, {0xFFFE, 0xFFFF}, {0x1000C, 0x1000C},
-	{0x10027, 0x10027}, {0x1003B, 0x1003B}, {0x1003E, 0x1003E},
-	{0x1004E, 0x1004F}, {0x1005E, 0x1007F}, {0x100FB, 0x100FF},
-	{0x10103, 0x10106}, {0x10134, 0x10136}, {0x1018F, 0x1018F},
-	{0x1019C, 0x1019F}, {0x101A1, 0x101CF}, {0x101FE, 0x1027F},
-	{0x1029D, 0x1029F}, {0x102D1, 0x102DF}, {0x102FC, 0x102FF},
-	{0x10324, 0x1032F}, {0x1034B, 0x1034F}, {0x1037B, 0x1037F},
-	{0x1039E, 0x1039E}, {0x103C4, 0x103C7}, {0x103D6, 0x103FF},
-	{0x1049E, 0x1049F}, {0x104AA, 0x104AF}, {0x104D4, 0x104D7},
-	{0x104FC, 0x104FF}, {0x10528, 0x1052F}, {0x10564, 0x1056E},
-	{0x10570, 0x105FF}, {0x10737, 0x1073F}, {0x10756, 0x1075F},
-	{0x10768, 0x107FF}, {0x10806, 0x10807}, {0x10809, 0x10809},
-	{0x10836, 0x10836}, {0x10839, 0x1083B}, {0x1083D, 0x1083E},
-	{0x10856, 0x10856}, {0x1089F, 0x108A6}, {0x108B0, 0x108DF},
-	{0x108F3, 0x108F3}, {0x108F6, 0x108FA}, {0x1091C, 0x1091E},
-	{0x1093A, 0x1093E}, {0x10940, 0x1097F}, {0x109B8, 0x109BB},
-	{0x109D0, 0x109D1}, {0x10A04, 0x10A04}, {0x10A07, 0x10A0B},
-	{0x10A14, 0x10A14}, {0x10A18, 0x10A18}, {0x10A34, 0x10A37},
-	{0x10A3B, 0x10A3E}, {0x10A48, 0x10A4F}, {0x10A59, 0x10A5F},
-	{0x10AA0, 0x10ABF}, {0x10AE7, 0x10AEA}, {0x10AF7, 0x10AFF},
-	{0x10B36, 0x10B38}, {0x10B56, 0x10B57}, {0x10B73, 0x10B77},
-	{0x10B92, 0x10B98}, {0x10B9D, 0x10BA8}, {0x10BB0, 0x10BFF},
-	{0x10C49, 0x10C7F}, {0x10CB3, 0x10CBF}, {0x10CF3, 0x10CF9},
-	{0x10D00, 0x10E5F}, {0x10E7F, 0x10FFF}, {0x1104E, 0x11051},
-	{0x11070, 0x1107E}, {0x110C2, 0x110CF}, {0x110E9, 0x110EF},
-	{0x110FA, 0x110FF}, {0x11135, 0x11135}, {0x11144, 0x1114F},
-	{0x11177, 0x1117F}, {0x111CE, 0x111CF}, {0x111E0, 0x111E0},
-	{0x111F5, 0x111FF}, {0x11212, 0x11212}, {0x1123F, 0x1127F},
-	{0x11287, 0x11287}, {0x11289, 0x11289}, {0x1128E, 0x1128E},
-	{0x1129E, 0x1129E}, {0x112AA, 0x112AF}, {0x112EB, 0x112EF},
-	{0x112FA, 0x112FF}, {0x11304, 0x11304}, {0x1130D, 0x1130E},
-	{0x11311, 0x11312}, {0x11329, 0x11329}, {0x11331, 0x11331},
-	{0x11334, 0x11334}, {0x1133A, 0x1133B}, {0x11345, 0x11346},
-	{0x11349, 0x1134A}, {0x1134E, 0x1134F}, {0x11351, 0x11356},
-	{0x11358, 0x1135C}, {0x11364, 0x11365}, {0x1136D, 0x1136F},
-	{0x11375, 0x113FF}, {0x1145A, 0x1145A}, {0x1145C, 0x1145C},
-	{0x1145E, 0x1147F}, {0x114C8, 0x114CF}, {0x114DA, 0x1157F},
-	{0x115B6, 0x115B7}, {0x115DE, 0x115FF}, {0x11645, 0x1164F},
-	{0x1165A, 0x1165F}, {0x1166D, 0x1167F}, {0x116B8, 0x116BF},
-	{0x116CA, 0x116FF}, {0x1171A, 0x1171C}, {0x1172C, 0x1172F},
-	{0x11740, 0x1189F}, {0x118F3, 0x118FE}, {0x11900, 0x11ABF},
-	{0x11AF9, 0x11BFF}, {0x11C09, 0x11C09}, {0x11C37, 0x11C37},
-	{0x11C46, 0x11C4F}, {0x11C6D, 0x11C6F}, {0x11C90, 0x11C91},
-	{0x11CA8, 0x11CA8}, {0x11CB7, 0x11FFF}, {0x1239A, 0x123FF},
-	{0x1246F, 0x1246F}, {0x12475, 0x1247F}, {0x12544, 0x12FFF},
-	{0x1342F, 0x143FF}, {0x14647, 0x167FF}, {0x16A39, 0x16A3F},
-	{0x16A5F, 0x16A5F}, {0x16A6A, 0x16A6D}, {0x16A70, 0x16ACF},
-	{0x16AEE, 0x16AEF}, {0x16AF6, 0x16AFF}, {0x16B46, 0x16B4F},
-	{0x16B5A, 0x16B5A}, {0x16B62, 0x16B62}, {0x16B78, 0x16B7C},
-	{0x16B90, 0x16EFF}, {0x16F45, 0x16F4F}, {0x16F7F, 0x16F8E},
-	{0x16FA0, 0x16FDF}, {0x16FE1, 0x16FFF}, {0x187ED, 0x187FF},
-	{0x18AF3, 0x1AFFF}, {0x1B002, 0x1BBFF}, {0x1BC6B, 0x1BC6F},
-	{0x1BC7D, 0x1BC7F}, {0x1BC89, 0x1BC8F}, {0x1BC9A, 0x1BC9B},
-	{0x1BCA4, 0x1CFFF}, {0x1D0F6, 0x1D0FF}, {0x1D127, 0x1D128},
-	{0x1D1E9, 0x1D1FF}, {0x1D246, 0x1D2FF}, {0x1D357, 0x1D35F},
-	{0x1D372, 0x1D3FF}, {0x1D455, 0x1D455}, {0x1D49D, 0x1D49D},
-	{0x1D4A0, 0x1D4A1}, {0x1D4A3, 0x1D4A4}, {0x1D4A7, 0x1D4A8},
-	{0x1D4AD, 0x1D4AD}, {0x1D4BA, 0x1D4BA}, {0x1D4BC, 0x1D4BC},
-	{0x1D4C4, 0x1D4C4}, {0x1D506, 0x1D506}, {0x1D50B, 0x1D50C},
-	{0x1D515, 0x1D515}, {0x1D51D, 0x1D51D}, {0x1D53A, 0x1D53A},
-	{0x1D53F, 0x1D53F}, {0x1D545, 0x1D545}, {0x1D547, 0x1D549},
-	{0x1D551, 0x1D551}, {0x1D6A6, 0x1D6A7}, {0x1D7CC, 0x1D7CD},
-	{0x1DA8C, 0x1DA9A}, {0x1DAA0, 0x1DAA0}, {0x1DAB0, 0x1DFFF},
-	{0x1E007, 0x1E007}, {0x1E019, 0x1E01A}, {0x1E022, 0x1E022},
-	{0x1E025, 0x1E025}, {0x1E02B, 0x1E7FF}, {0x1E8C5, 0x1E8C6},
-	{0x1E8D7, 0x1E8FF}, {0x1E94B, 0x1E94F}, {0x1E95A, 0x1E95D},
-	{0x1E960, 0x1EDFF}, {0x1EE04, 0x1EE04}, {0x1EE20, 0x1EE20},
-	{0x1EE23, 0x1EE23}, {0x1EE25, 0x1EE26}, {0x1EE28, 0x1EE28},
-	{0x1EE33, 0x1EE33}, {0x1EE38, 0x1EE38}, {0x1EE3A, 0x1EE3A},
-	{0x1EE3C, 0x1EE41}, {0x1EE43, 0x1EE46}, {0x1EE48, 0x1EE48},
-	{0x1EE4A, 0x1EE4A}, {0x1EE4C, 0x1EE4C}, {0x1EE50, 0x1EE50},
-	{0x1EE53, 0x1EE53}, {0x1EE55, 0x1EE56}, {0x1EE58, 0x1EE58},
-	{0x1EE5A, 0x1EE5A}, {0x1EE5C, 0x1EE5C}, {0x1EE5E, 0x1EE5E},
-	{0x1EE60, 0x1EE60}, {0x1EE63, 0x1EE63}, {0x1EE65, 0x1EE66},
-	{0x1EE6B, 0x1EE6B}, {0x1EE73, 0x1EE73}, {0x1EE78, 0x1EE78},
-	{0x1EE7D, 0x1EE7D}, {0x1EE7F, 0x1EE7F}, {0x1EE8A, 0x1EE8A},
-	{0x1EE9C, 0x1EEA0}, {0x1EEA4, 0x1EEA4}, {0x1EEAA, 0x1EEAA},
-	{0x1EEBC, 0x1EEEF}, {0x1EEF2, 0x1EFFF}, {0x1F02C, 0x1F02F},
-	{0x1F094, 0x1F09F}, {0x1F0AF, 0x1F0B0}, {0x1F0C0, 0x1F0C0},
-	{0x1F0D0, 0x1F0D0}, {0x1F0F6, 0x1F0FF}, {0x1F10D, 0x1F10F},
-	{0x1F12F, 0x1F12F}, {0x1F16C, 0x1F16F}, {0x1F1AD, 0x1F1E5},
-	{0x1F203, 0x1F20F}, {0x1F23C, 0x1F23F}, {0x1F249, 0x1F24F},
-	{0x1F252, 0x1F2FF}, {0x1F6D3, 0x1F6DF}, {0x1F6ED, 0x1F6EF},
-	{0x1F6F7, 0x1F6FF}, {0x1F774, 0x1F77F}, {0x1F7D5, 0x1F7FF},
-	{0x1F80C, 0x1F80F}, {0x1F848, 0x1F84F}, {0x1F85A, 0x1F85F},
-	{0x1F888, 0x1F88F}, {0x1F8AE, 0x1F90F}, {0x1F91F, 0x1F91F},
-	{0x1F928, 0x1F92F}, {0x1F931, 0x1F932}, {0x1F93F, 0x1F93F},
-	{0x1F94C, 0x1F94F}, {0x1F95F, 0x1F97F}, {0x1F992, 0x1F9BF},
-	{0x1F9C1, 0x1FFFF}, {0x2A6D7, 0x2A6FF}, {0x2B735, 0x2B73F},
-	{0x2B81E, 0x2B81F}, {0x2CEA2, 0x2F7FF}, {0x2FA1E, 0xE0000},
-	{0xE0002, 0xE001F}, {0xE0080, 0xE00FF}, {0xE01F0, 0xEFFFF},
-	{0xFFFFE, 0xFFFFF},
-}
-
-var neutral = table{
-	{0x0000, 0x001F}, {0x007F, 0x007F}, {0x0080, 0x009F},
-	{0x00A0, 0x00A0}, {0x00A9, 0x00A9}, {0x00AB, 0x00AB},
-	{0x00B5, 0x00B5}, {0x00BB, 0x00BB}, {0x00C0, 0x00C5},
-	{0x00C7, 0x00CF}, {0x00D1, 0x00D6}, {0x00D9, 0x00DD},
-	{0x00E2, 0x00E5}, {0x00E7, 0x00E7}, {0x00EB, 0x00EB},
-	{0x00EE, 0x00EF}, {0x00F1, 0x00F1}, {0x00F4, 0x00F6},
-	{0x00FB, 0x00FB}, {0x00FD, 0x00FD}, {0x00FF, 0x00FF},
-	{0x0100, 0x0100}, {0x0102, 0x0110}, {0x0112, 0x0112},
-	{0x0114, 0x011A}, {0x011C, 0x0125}, {0x0128, 0x012A},
-	{0x012C, 0x0130}, {0x0134, 0x0137}, {0x0139, 0x013E},
-	{0x0143, 0x0143}, {0x0145, 0x0147}, {0x014C, 0x014C},
-	{0x014E, 0x0151}, {0x0154, 0x0165}, {0x0168, 0x016A},
-	{0x016C, 0x017F}, {0x0180, 0x01BA}, {0x01BB, 0x01BB},
-	{0x01BC, 0x01BF}, {0x01C0, 0x01C3}, {0x01C4, 0x01CD},
-	{0x01CF, 0x01CF}, {0x01D1, 0x01D1}, {0x01D3, 0x01D3},
-	{0x01D5, 0x01D5}, {0x01D7, 0x01D7}, {0x01D9, 0x01D9},
-	{0x01DB, 0x01DB}, {0x01DD, 0x024F}, {0x0250, 0x0250},
-	{0x0252, 0x0260}, {0x0262, 0x0293}, {0x0294, 0x0294},
-	{0x0295, 0x02AF}, {0x02B0, 0x02C1}, {0x02C2, 0x02C3},
-	{0x02C5, 0x02C5}, {0x02C6, 0x02C6}, {0x02C8, 0x02C8},
-	{0x02CC, 0x02CC}, {0x02CE, 0x02CF}, {0x02D1, 0x02D1},
-	{0x02D2, 0x02D7}, {0x02DC, 0x02DC}, {0x02DE, 0x02DE},
-	{0x02E0, 0x02E4}, {0x02E5, 0x02EB}, {0x02EC, 0x02EC},
-	{0x02ED, 0x02ED}, {0x02EE, 0x02EE}, {0x02EF, 0x02FF},
-	{0x0370, 0x0373}, {0x0374, 0x0374}, {0x0375, 0x0375},
-	{0x0376, 0x0377}, {0x037A, 0x037A}, {0x037B, 0x037D},
-	{0x037E, 0x037E}, {0x037F, 0x037F}, {0x0384, 0x0385},
-	{0x0386, 0x0386}, {0x0387, 0x0387}, {0x0388, 0x038A},
-	{0x038C, 0x038C}, {0x038E, 0x0390}, {0x03AA, 0x03B0},
-	{0x03C2, 0x03C2}, {0x03CA, 0x03F5}, {0x03F6, 0x03F6},
-	{0x03F7, 0x03FF}, {0x0400, 0x0400}, {0x0402, 0x040F},
-	{0x0450, 0x0450}, {0x0452, 0x0481}, {0x0482, 0x0482},
-	{0x0483, 0x0487}, {0x0488, 0x0489}, {0x048A, 0x04FF},
-	{0x0500, 0x052F}, {0x0531, 0x0556}, {0x0559, 0x0559},
-	{0x055A, 0x055F}, {0x0561, 0x0587}, {0x0589, 0x0589},
-	{0x058A, 0x058A}, {0x058D, 0x058E}, {0x058F, 0x058F},
-	{0x0591, 0x05BD}, {0x05BE, 0x05BE}, {0x05BF, 0x05BF},
-	{0x05C0, 0x05C0}, {0x05C1, 0x05C2}, {0x05C3, 0x05C3},
-	{0x05C4, 0x05C5}, {0x05C6, 0x05C6}, {0x05C7, 0x05C7},
-	{0x05D0, 0x05EA}, {0x05F0, 0x05F2}, {0x05F3, 0x05F4},
-	{0x0600, 0x0605}, {0x0606, 0x0608}, {0x0609, 0x060A},
-	{0x060B, 0x060B}, {0x060C, 0x060D}, {0x060E, 0x060F},
-	{0x0610, 0x061A}, {0x061B, 0x061B}, {0x061C, 0x061C},
-	{0x061E, 0x061F}, {0x0620, 0x063F}, {0x0640, 0x0640},
-	{0x0641, 0x064A}, {0x064B, 0x065F}, {0x0660, 0x0669},
-	{0x066A, 0x066D}, {0x066E, 0x066F}, {0x0670, 0x0670},
-	{0x0671, 0x06D3}, {0x06D4, 0x06D4}, {0x06D5, 0x06D5},
-	{0x06D6, 0x06DC}, {0x06DD, 0x06DD}, {0x06DE, 0x06DE},
-	{0x06DF, 0x06E4}, {0x06E5, 0x06E6}, {0x06E7, 0x06E8},
-	{0x06E9, 0x06E9}, {0x06EA, 0x06ED}, {0x06EE, 0x06EF},
-	{0x06F0, 0x06F9}, {0x06FA, 0x06FC}, {0x06FD, 0x06FE},
-	{0x06FF, 0x06FF}, {0x0700, 0x070D}, {0x070F, 0x070F},
-	{0x0710, 0x0710}, {0x0711, 0x0711}, {0x0712, 0x072F},
-	{0x0730, 0x074A}, {0x074D, 0x074F}, {0x0750, 0x077F},
-	{0x0780, 0x07A5}, {0x07A6, 0x07B0}, {0x07B1, 0x07B1},
-	{0x07C0, 0x07C9}, {0x07CA, 0x07EA}, {0x07EB, 0x07F3},
-	{0x07F4, 0x07F5}, {0x07F6, 0x07F6}, {0x07F7, 0x07F9},
-	{0x07FA, 0x07FA}, {0x0800, 0x0815}, {0x0816, 0x0819},
-	{0x081A, 0x081A}, {0x081B, 0x0823}, {0x0824, 0x0824},
-	{0x0825, 0x0827}, {0x0828, 0x0828}, {0x0829, 0x082D},
-	{0x0830, 0x083E}, {0x0840, 0x0858}, {0x0859, 0x085B},
-	{0x085E, 0x085E}, {0x08A0, 0x08B4}, {0x08B6, 0x08BD},
-	{0x08D4, 0x08E1}, {0x08E2, 0x08E2}, {0x08E3, 0x08FF},
-	{0x0900, 0x0902}, {0x0903, 0x0903}, {0x0904, 0x0939},
-	{0x093A, 0x093A}, {0x093B, 0x093B}, {0x093C, 0x093C},
-	{0x093D, 0x093D}, {0x093E, 0x0940}, {0x0941, 0x0948},
-	{0x0949, 0x094C}, {0x094D, 0x094D}, {0x094E, 0x094F},
-	{0x0950, 0x0950}, {0x0951, 0x0957}, {0x0958, 0x0961},
-	{0x0962, 0x0963}, {0x0964, 0x0965}, {0x0966, 0x096F},
-	{0x0970, 0x0970}, {0x0971, 0x0971}, {0x0972, 0x097F},
-	{0x0980, 0x0980}, {0x0981, 0x0981}, {0x0982, 0x0983},
-	{0x0985, 0x098C}, {0x098F, 0x0990}, {0x0993, 0x09A8},
-	{0x09AA, 0x09B0}, {0x09B2, 0x09B2}, {0x09B6, 0x09B9},
-	{0x09BC, 0x09BC}, {0x09BD, 0x09BD}, {0x09BE, 0x09C0},
-	{0x09C1, 0x09C4}, {0x09C7, 0x09C8}, {0x09CB, 0x09CC},
-	{0x09CD, 0x09CD}, {0x09CE, 0x09CE}, {0x09D7, 0x09D7},
-	{0x09DC, 0x09DD}, {0x09DF, 0x09E1}, {0x09E2, 0x09E3},
-	{0x09E6, 0x09EF}, {0x09F0, 0x09F1}, {0x09F2, 0x09F3},
-	{0x09F4, 0x09F9}, {0x09FA, 0x09FA}, {0x09FB, 0x09FB},
-	{0x0A01, 0x0A02}, {0x0A03, 0x0A03}, {0x0A05, 0x0A0A},
-	{0x0A0F, 0x0A10}, {0x0A13, 0x0A28}, {0x0A2A, 0x0A30},
-	{0x0A32, 0x0A33}, {0x0A35, 0x0A36}, {0x0A38, 0x0A39},
-	{0x0A3C, 0x0A3C}, {0x0A3E, 0x0A40}, {0x0A41, 0x0A42},
-	{0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, {0x0A51, 0x0A51},
-	{0x0A59, 0x0A5C}, {0x0A5E, 0x0A5E}, {0x0A66, 0x0A6F},
-	{0x0A70, 0x0A71}, {0x0A72, 0x0A74}, {0x0A75, 0x0A75},
-	{0x0A81, 0x0A82}, {0x0A83, 0x0A83}, {0x0A85, 0x0A8D},
-	{0x0A8F, 0x0A91}, {0x0A93, 0x0AA8}, {0x0AAA, 0x0AB0},
-	{0x0AB2, 0x0AB3}, {0x0AB5, 0x0AB9}, {0x0ABC, 0x0ABC},
-	{0x0ABD, 0x0ABD}, {0x0ABE, 0x0AC0}, {0x0AC1, 0x0AC5},
-	{0x0AC7, 0x0AC8}, {0x0AC9, 0x0AC9}, {0x0ACB, 0x0ACC},
-	{0x0ACD, 0x0ACD}, {0x0AD0, 0x0AD0}, {0x0AE0, 0x0AE1},
-	{0x0AE2, 0x0AE3}, {0x0AE6, 0x0AEF}, {0x0AF0, 0x0AF0},
-	{0x0AF1, 0x0AF1}, {0x0AF9, 0x0AF9}, {0x0B01, 0x0B01},
-	{0x0B02, 0x0B03}, {0x0B05, 0x0B0C}, {0x0B0F, 0x0B10},
-	{0x0B13, 0x0B28}, {0x0B2A, 0x0B30}, {0x0B32, 0x0B33},
-	{0x0B35, 0x0B39}, {0x0B3C, 0x0B3C}, {0x0B3D, 0x0B3D},
-	{0x0B3E, 0x0B3E}, {0x0B3F, 0x0B3F}, {0x0B40, 0x0B40},
-	{0x0B41, 0x0B44}, {0x0B47, 0x0B48}, {0x0B4B, 0x0B4C},
-	{0x0B4D, 0x0B4D}, {0x0B56, 0x0B56}, {0x0B57, 0x0B57},
-	{0x0B5C, 0x0B5D}, {0x0B5F, 0x0B61}, {0x0B62, 0x0B63},
-	{0x0B66, 0x0B6F}, {0x0B70, 0x0B70}, {0x0B71, 0x0B71},
-	{0x0B72, 0x0B77}, {0x0B82, 0x0B82}, {0x0B83, 0x0B83},
-	{0x0B85, 0x0B8A}, {0x0B8E, 0x0B90}, {0x0B92, 0x0B95},
-	{0x0B99, 0x0B9A}, {0x0B9C, 0x0B9C}, {0x0B9E, 0x0B9F},
-	{0x0BA3, 0x0BA4}, {0x0BA8, 0x0BAA}, {0x0BAE, 0x0BB9},
-	{0x0BBE, 0x0BBF}, {0x0BC0, 0x0BC0}, {0x0BC1, 0x0BC2},
-	{0x0BC6, 0x0BC8}, {0x0BCA, 0x0BCC}, {0x0BCD, 0x0BCD},
-	{0x0BD0, 0x0BD0}, {0x0BD7, 0x0BD7}, {0x0BE6, 0x0BEF},
-	{0x0BF0, 0x0BF2}, {0x0BF3, 0x0BF8}, {0x0BF9, 0x0BF9},
-	{0x0BFA, 0x0BFA}, {0x0C00, 0x0C00}, {0x0C01, 0x0C03},
-	{0x0C05, 0x0C0C}, {0x0C0E, 0x0C10}, {0x0C12, 0x0C28},
-	{0x0C2A, 0x0C39}, {0x0C3D, 0x0C3D}, {0x0C3E, 0x0C40},
-	{0x0C41, 0x0C44}, {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D},
-	{0x0C55, 0x0C56}, {0x0C58, 0x0C5A}, {0x0C60, 0x0C61},
-	{0x0C62, 0x0C63}, {0x0C66, 0x0C6F}, {0x0C78, 0x0C7E},
-	{0x0C7F, 0x0C7F}, {0x0C80, 0x0C80}, {0x0C81, 0x0C81},
-	{0x0C82, 0x0C83}, {0x0C85, 0x0C8C}, {0x0C8E, 0x0C90},
-	{0x0C92, 0x0CA8}, {0x0CAA, 0x0CB3}, {0x0CB5, 0x0CB9},
-	{0x0CBC, 0x0CBC}, {0x0CBD, 0x0CBD}, {0x0CBE, 0x0CBE},
-	{0x0CBF, 0x0CBF}, {0x0CC0, 0x0CC4}, {0x0CC6, 0x0CC6},
-	{0x0CC7, 0x0CC8}, {0x0CCA, 0x0CCB}, {0x0CCC, 0x0CCD},
-	{0x0CD5, 0x0CD6}, {0x0CDE, 0x0CDE}, {0x0CE0, 0x0CE1},
-	{0x0CE2, 0x0CE3}, {0x0CE6, 0x0CEF}, {0x0CF1, 0x0CF2},
-	{0x0D01, 0x0D01}, {0x0D02, 0x0D03}, {0x0D05, 0x0D0C},
-	{0x0D0E, 0x0D10}, {0x0D12, 0x0D3A}, {0x0D3D, 0x0D3D},
-	{0x0D3E, 0x0D40}, {0x0D41, 0x0D44}, {0x0D46, 0x0D48},
-	{0x0D4A, 0x0D4C}, {0x0D4D, 0x0D4D}, {0x0D4E, 0x0D4E},
-	{0x0D4F, 0x0D4F}, {0x0D54, 0x0D56}, {0x0D57, 0x0D57},
-	{0x0D58, 0x0D5E}, {0x0D5F, 0x0D61}, {0x0D62, 0x0D63},
-	{0x0D66, 0x0D6F}, {0x0D70, 0x0D78}, {0x0D79, 0x0D79},
-	{0x0D7A, 0x0D7F}, {0x0D82, 0x0D83}, {0x0D85, 0x0D96},
-	{0x0D9A, 0x0DB1}, {0x0DB3, 0x0DBB}, {0x0DBD, 0x0DBD},
-	{0x0DC0, 0x0DC6}, {0x0DCA, 0x0DCA}, {0x0DCF, 0x0DD1},
-	{0x0DD2, 0x0DD4}, {0x0DD6, 0x0DD6}, {0x0DD8, 0x0DDF},
-	{0x0DE6, 0x0DEF}, {0x0DF2, 0x0DF3}, {0x0DF4, 0x0DF4},
-	{0x0E01, 0x0E30}, {0x0E31, 0x0E31}, {0x0E32, 0x0E33},
-	{0x0E34, 0x0E3A}, {0x0E3F, 0x0E3F}, {0x0E40, 0x0E45},
-	{0x0E46, 0x0E46}, {0x0E47, 0x0E4E}, {0x0E4F, 0x0E4F},
-	{0x0E50, 0x0E59}, {0x0E5A, 0x0E5B}, {0x0E81, 0x0E82},
-	{0x0E84, 0x0E84}, {0x0E87, 0x0E88}, {0x0E8A, 0x0E8A},
-	{0x0E8D, 0x0E8D}, {0x0E94, 0x0E97}, {0x0E99, 0x0E9F},
-	{0x0EA1, 0x0EA3}, {0x0EA5, 0x0EA5}, {0x0EA7, 0x0EA7},
-	{0x0EAA, 0x0EAB}, {0x0EAD, 0x0EB0}, {0x0EB1, 0x0EB1},
-	{0x0EB2, 0x0EB3}, {0x0EB4, 0x0EB9}, {0x0EBB, 0x0EBC},
-	{0x0EBD, 0x0EBD}, {0x0EC0, 0x0EC4}, {0x0EC6, 0x0EC6},
-	{0x0EC8, 0x0ECD}, {0x0ED0, 0x0ED9}, {0x0EDC, 0x0EDF},
-	{0x0F00, 0x0F00}, {0x0F01, 0x0F03}, {0x0F04, 0x0F12},
-	{0x0F13, 0x0F13}, {0x0F14, 0x0F14}, {0x0F15, 0x0F17},
-	{0x0F18, 0x0F19}, {0x0F1A, 0x0F1F}, {0x0F20, 0x0F29},
-	{0x0F2A, 0x0F33}, {0x0F34, 0x0F34}, {0x0F35, 0x0F35},
-	{0x0F36, 0x0F36}, {0x0F37, 0x0F37}, {0x0F38, 0x0F38},
-	{0x0F39, 0x0F39}, {0x0F3A, 0x0F3A}, {0x0F3B, 0x0F3B},
-	{0x0F3C, 0x0F3C}, {0x0F3D, 0x0F3D}, {0x0F3E, 0x0F3F},
-	{0x0F40, 0x0F47}, {0x0F49, 0x0F6C}, {0x0F71, 0x0F7E},
-	{0x0F7F, 0x0F7F}, {0x0F80, 0x0F84}, {0x0F85, 0x0F85},
-	{0x0F86, 0x0F87}, {0x0F88, 0x0F8C}, {0x0F8D, 0x0F97},
-	{0x0F99, 0x0FBC}, {0x0FBE, 0x0FC5}, {0x0FC6, 0x0FC6},
-	{0x0FC7, 0x0FCC}, {0x0FCE, 0x0FCF}, {0x0FD0, 0x0FD4},
-	{0x0FD5, 0x0FD8}, {0x0FD9, 0x0FDA}, {0x1000, 0x102A},
-	{0x102B, 0x102C}, {0x102D, 0x1030}, {0x1031, 0x1031},
-	{0x1032, 0x1037}, {0x1038, 0x1038}, {0x1039, 0x103A},
-	{0x103B, 0x103C}, {0x103D, 0x103E}, {0x103F, 0x103F},
-	{0x1040, 0x1049}, {0x104A, 0x104F}, {0x1050, 0x1055},
-	{0x1056, 0x1057}, {0x1058, 0x1059}, {0x105A, 0x105D},
-	{0x105E, 0x1060}, {0x1061, 0x1061}, {0x1062, 0x1064},
-	{0x1065, 0x1066}, {0x1067, 0x106D}, {0x106E, 0x1070},
-	{0x1071, 0x1074}, {0x1075, 0x1081}, {0x1082, 0x1082},
-	{0x1083, 0x1084}, {0x1085, 0x1086}, {0x1087, 0x108C},
-	{0x108D, 0x108D}, {0x108E, 0x108E}, {0x108F, 0x108F},
-	{0x1090, 0x1099}, {0x109A, 0x109C}, {0x109D, 0x109D},
-	{0x109E, 0x109F}, {0x10A0, 0x10C5}, {0x10C7, 0x10C7},
-	{0x10CD, 0x10CD}, {0x10D0, 0x10FA}, {0x10FB, 0x10FB},
-	{0x10FC, 0x10FC}, {0x10FD, 0x10FF}, {0x1160, 0x11FF},
-	{0x1200, 0x1248}, {0x124A, 0x124D}, {0x1250, 0x1256},
-	{0x1258, 0x1258}, {0x125A, 0x125D}, {0x1260, 0x1288},
-	{0x128A, 0x128D}, {0x1290, 0x12B0}, {0x12B2, 0x12B5},
-	{0x12B8, 0x12BE}, {0x12C0, 0x12C0}, {0x12C2, 0x12C5},
-	{0x12C8, 0x12D6}, {0x12D8, 0x1310}, {0x1312, 0x1315},
-	{0x1318, 0x135A}, {0x135D, 0x135F}, {0x1360, 0x1368},
-	{0x1369, 0x137C}, {0x1380, 0x138F}, {0x1390, 0x1399},
-	{0x13A0, 0x13F5}, {0x13F8, 0x13FD}, {0x1400, 0x1400},
-	{0x1401, 0x166C}, {0x166D, 0x166E}, {0x166F, 0x167F},
-	{0x1680, 0x1680}, {0x1681, 0x169A}, {0x169B, 0x169B},
-	{0x169C, 0x169C}, {0x16A0, 0x16EA}, {0x16EB, 0x16ED},
-	{0x16EE, 0x16F0}, {0x16F1, 0x16F8}, {0x1700, 0x170C},
-	{0x170E, 0x1711}, {0x1712, 0x1714}, {0x1720, 0x1731},
-	{0x1732, 0x1734}, {0x1735, 0x1736}, {0x1740, 0x1751},
-	{0x1752, 0x1753}, {0x1760, 0x176C}, {0x176E, 0x1770},
-	{0x1772, 0x1773}, {0x1780, 0x17B3}, {0x17B4, 0x17B5},
-	{0x17B6, 0x17B6}, {0x17B7, 0x17BD}, {0x17BE, 0x17C5},
-	{0x17C6, 0x17C6}, {0x17C7, 0x17C8}, {0x17C9, 0x17D3},
-	{0x17D4, 0x17D6}, {0x17D7, 0x17D7}, {0x17D8, 0x17DA},
-	{0x17DB, 0x17DB}, {0x17DC, 0x17DC}, {0x17DD, 0x17DD},
-	{0x17E0, 0x17E9}, {0x17F0, 0x17F9}, {0x1800, 0x1805},
-	{0x1806, 0x1806}, {0x1807, 0x180A}, {0x180B, 0x180D},
-	{0x180E, 0x180E}, {0x1810, 0x1819}, {0x1820, 0x1842},
-	{0x1843, 0x1843}, {0x1844, 0x1877}, {0x1880, 0x1884},
-	{0x1885, 0x1886}, {0x1887, 0x18A8}, {0x18A9, 0x18A9},
-	{0x18AA, 0x18AA}, {0x18B0, 0x18F5}, {0x1900, 0x191E},
-	{0x1920, 0x1922}, {0x1923, 0x1926}, {0x1927, 0x1928},
-	{0x1929, 0x192B}, {0x1930, 0x1931}, {0x1932, 0x1932},
-	{0x1933, 0x1938}, {0x1939, 0x193B}, {0x1940, 0x1940},
-	{0x1944, 0x1945}, {0x1946, 0x194F}, {0x1950, 0x196D},
-	{0x1970, 0x1974}, {0x1980, 0x19AB}, {0x19B0, 0x19C9},
-	{0x19D0, 0x19D9}, {0x19DA, 0x19DA}, {0x19DE, 0x19DF},
-	{0x19E0, 0x19FF}, {0x1A00, 0x1A16}, {0x1A17, 0x1A18},
-	{0x1A19, 0x1A1A}, {0x1A1B, 0x1A1B}, {0x1A1E, 0x1A1F},
-	{0x1A20, 0x1A54}, {0x1A55, 0x1A55}, {0x1A56, 0x1A56},
-	{0x1A57, 0x1A57}, {0x1A58, 0x1A5E}, {0x1A60, 0x1A60},
-	{0x1A61, 0x1A61}, {0x1A62, 0x1A62}, {0x1A63, 0x1A64},
-	{0x1A65, 0x1A6C}, {0x1A6D, 0x1A72}, {0x1A73, 0x1A7C},
-	{0x1A7F, 0x1A7F}, {0x1A80, 0x1A89}, {0x1A90, 0x1A99},
-	{0x1AA0, 0x1AA6}, {0x1AA7, 0x1AA7}, {0x1AA8, 0x1AAD},
-	{0x1AB0, 0x1ABD}, {0x1ABE, 0x1ABE}, {0x1B00, 0x1B03},
-	{0x1B04, 0x1B04}, {0x1B05, 0x1B33}, {0x1B34, 0x1B34},
-	{0x1B35, 0x1B35}, {0x1B36, 0x1B3A}, {0x1B3B, 0x1B3B},
-	{0x1B3C, 0x1B3C}, {0x1B3D, 0x1B41}, {0x1B42, 0x1B42},
-	{0x1B43, 0x1B44}, {0x1B45, 0x1B4B}, {0x1B50, 0x1B59},
-	{0x1B5A, 0x1B60}, {0x1B61, 0x1B6A}, {0x1B6B, 0x1B73},
-	{0x1B74, 0x1B7C}, {0x1B80, 0x1B81}, {0x1B82, 0x1B82},
-	{0x1B83, 0x1BA0}, {0x1BA1, 0x1BA1}, {0x1BA2, 0x1BA5},
-	{0x1BA6, 0x1BA7}, {0x1BA8, 0x1BA9}, {0x1BAA, 0x1BAA},
-	{0x1BAB, 0x1BAD}, {0x1BAE, 0x1BAF}, {0x1BB0, 0x1BB9},
-	{0x1BBA, 0x1BBF}, {0x1BC0, 0x1BE5}, {0x1BE6, 0x1BE6},
-	{0x1BE7, 0x1BE7}, {0x1BE8, 0x1BE9}, {0x1BEA, 0x1BEC},
-	{0x1BED, 0x1BED}, {0x1BEE, 0x1BEE}, {0x1BEF, 0x1BF1},
-	{0x1BF2, 0x1BF3}, {0x1BFC, 0x1BFF}, {0x1C00, 0x1C23},
-	{0x1C24, 0x1C2B}, {0x1C2C, 0x1C33}, {0x1C34, 0x1C35},
-	{0x1C36, 0x1C37}, {0x1C3B, 0x1C3F}, {0x1C40, 0x1C49},
-	{0x1C4D, 0x1C4F}, {0x1C50, 0x1C59}, {0x1C5A, 0x1C77},
-	{0x1C78, 0x1C7D}, {0x1C7E, 0x1C7F}, {0x1C80, 0x1C88},
-	{0x1CC0, 0x1CC7}, {0x1CD0, 0x1CD2}, {0x1CD3, 0x1CD3},
-	{0x1CD4, 0x1CE0}, {0x1CE1, 0x1CE1}, {0x1CE2, 0x1CE8},
-	{0x1CE9, 0x1CEC}, {0x1CED, 0x1CED}, {0x1CEE, 0x1CF1},
-	{0x1CF2, 0x1CF3}, {0x1CF4, 0x1CF4}, {0x1CF5, 0x1CF6},
-	{0x1CF8, 0x1CF9}, {0x1D00, 0x1D2B}, {0x1D2C, 0x1D6A},
-	{0x1D6B, 0x1D77}, {0x1D78, 0x1D78}, {0x1D79, 0x1D7F},
-	{0x1D80, 0x1D9A}, {0x1D9B, 0x1DBF}, {0x1DC0, 0x1DF5},
-	{0x1DFB, 0x1DFF}, {0x1E00, 0x1EFF}, {0x1F00, 0x1F15},
-	{0x1F18, 0x1F1D}, {0x1F20, 0x1F45}, {0x1F48, 0x1F4D},
-	{0x1F50, 0x1F57}, {0x1F59, 0x1F59}, {0x1F5B, 0x1F5B},
-	{0x1F5D, 0x1F5D}, {0x1F5F, 0x1F7D}, {0x1F80, 0x1FB4},
-	{0x1FB6, 0x1FBC}, {0x1FBD, 0x1FBD}, {0x1FBE, 0x1FBE},
-	{0x1FBF, 0x1FC1}, {0x1FC2, 0x1FC4}, {0x1FC6, 0x1FCC},
-	{0x1FCD, 0x1FCF}, {0x1FD0, 0x1FD3}, {0x1FD6, 0x1FDB},
-	{0x1FDD, 0x1FDF}, {0x1FE0, 0x1FEC}, {0x1FED, 0x1FEF},
-	{0x1FF2, 0x1FF4}, {0x1FF6, 0x1FFC}, {0x1FFD, 0x1FFE},
-	{0x2000, 0x200A}, {0x200B, 0x200F}, {0x2011, 0x2012},
-	{0x2017, 0x2017}, {0x201A, 0x201A}, {0x201B, 0x201B},
-	{0x201E, 0x201E}, {0x201F, 0x201F}, {0x2023, 0x2023},
-	{0x2028, 0x2028}, {0x2029, 0x2029}, {0x202A, 0x202E},
-	{0x202F, 0x202F}, {0x2031, 0x2031}, {0x2034, 0x2034},
-	{0x2036, 0x2038}, {0x2039, 0x2039}, {0x203A, 0x203A},
-	{0x203C, 0x203D}, {0x203F, 0x2040}, {0x2041, 0x2043},
-	{0x2044, 0x2044}, {0x2045, 0x2045}, {0x2046, 0x2046},
-	{0x2047, 0x2051}, {0x2052, 0x2052}, {0x2053, 0x2053},
-	{0x2054, 0x2054}, {0x2055, 0x205E}, {0x205F, 0x205F},
-	{0x2060, 0x2064}, {0x2066, 0x206F}, {0x2070, 0x2070},
-	{0x2071, 0x2071}, {0x2075, 0x2079}, {0x207A, 0x207C},
-	{0x207D, 0x207D}, {0x207E, 0x207E}, {0x2080, 0x2080},
-	{0x2085, 0x2089}, {0x208A, 0x208C}, {0x208D, 0x208D},
-	{0x208E, 0x208E}, {0x2090, 0x209C}, {0x20A0, 0x20A8},
-	{0x20AA, 0x20AB}, {0x20AD, 0x20BE}, {0x20D0, 0x20DC},
-	{0x20DD, 0x20E0}, {0x20E1, 0x20E1}, {0x20E2, 0x20E4},
-	{0x20E5, 0x20F0}, {0x2100, 0x2101}, {0x2102, 0x2102},
-	{0x2104, 0x2104}, {0x2106, 0x2106}, {0x2107, 0x2107},
-	{0x2108, 0x2108}, {0x210A, 0x2112}, {0x2114, 0x2114},
-	{0x2115, 0x2115}, {0x2117, 0x2117}, {0x2118, 0x2118},
-	{0x2119, 0x211D}, {0x211E, 0x2120}, {0x2123, 0x2123},
-	{0x2124, 0x2124}, {0x2125, 0x2125}, {0x2127, 0x2127},
-	{0x2128, 0x2128}, {0x2129, 0x2129}, {0x212A, 0x212A},
-	{0x212C, 0x212D}, {0x212E, 0x212E}, {0x212F, 0x2134},
-	{0x2135, 0x2138}, {0x2139, 0x2139}, {0x213A, 0x213B},
-	{0x213C, 0x213F}, {0x2140, 0x2144}, {0x2145, 0x2149},
-	{0x214A, 0x214A}, {0x214B, 0x214B}, {0x214C, 0x214D},
-	{0x214E, 0x214E}, {0x214F, 0x214F}, {0x2150, 0x2152},
-	{0x2155, 0x215A}, {0x215F, 0x215F}, {0x216C, 0x216F},
-	{0x217A, 0x2182}, {0x2183, 0x2184}, {0x2185, 0x2188},
-	{0x218A, 0x218B}, {0x219A, 0x219B}, {0x219C, 0x219F},
-	{0x21A0, 0x21A0}, {0x21A1, 0x21A2}, {0x21A3, 0x21A3},
-	{0x21A4, 0x21A5}, {0x21A6, 0x21A6}, {0x21A7, 0x21AD},
-	{0x21AE, 0x21AE}, {0x21AF, 0x21B7}, {0x21BA, 0x21CD},
-	{0x21CE, 0x21CF}, {0x21D0, 0x21D1}, {0x21D3, 0x21D3},
-	{0x21D5, 0x21E6}, {0x21E8, 0x21F3}, {0x21F4, 0x21FF},
-	{0x2201, 0x2201}, {0x2204, 0x2206}, {0x2209, 0x220A},
-	{0x220C, 0x220E}, {0x2210, 0x2210}, {0x2212, 0x2214},
-	{0x2216, 0x2219}, {0x221B, 0x221C}, {0x2221, 0x2222},
-	{0x2224, 0x2224}, {0x2226, 0x2226}, {0x222D, 0x222D},
-	{0x222F, 0x2233}, {0x2238, 0x223B}, {0x223E, 0x2247},
-	{0x2249, 0x224B}, {0x224D, 0x2251}, {0x2253, 0x225F},
-	{0x2262, 0x2263}, {0x2268, 0x2269}, {0x226C, 0x226D},
-	{0x2270, 0x2281}, {0x2284, 0x2285}, {0x2288, 0x2294},
-	{0x2296, 0x2298}, {0x229A, 0x22A4}, {0x22A6, 0x22BE},
-	{0x22C0, 0x22FF}, {0x2300, 0x2307}, {0x2308, 0x2308},
-	{0x2309, 0x2309}, {0x230A, 0x230A}, {0x230B, 0x230B},
-	{0x230C, 0x2311}, {0x2313, 0x2319}, {0x231C, 0x231F},
-	{0x2320, 0x2321}, {0x2322, 0x2328}, {0x232B, 0x237B},
-	{0x237C, 0x237C}, {0x237D, 0x239A}, {0x239B, 0x23B3},
-	{0x23B4, 0x23DB}, {0x23DC, 0x23E1}, {0x23E2, 0x23E8},
-	{0x23ED, 0x23EF}, {0x23F1, 0x23F2}, {0x23F4, 0x23FE},
-	{0x2400, 0x2426}, {0x2440, 0x244A}, {0x24EA, 0x24EA},
-	{0x254C, 0x254F}, {0x2574, 0x257F}, {0x2590, 0x2591},
-	{0x2596, 0x259F}, {0x25A2, 0x25A2}, {0x25AA, 0x25B1},
-	{0x25B4, 0x25B5}, {0x25B8, 0x25BB}, {0x25BE, 0x25BF},
-	{0x25C2, 0x25C5}, {0x25C9, 0x25CA}, {0x25CC, 0x25CD},
-	{0x25D2, 0x25E1}, {0x25E6, 0x25EE}, {0x25F0, 0x25F7},
-	{0x25F8, 0x25FC}, {0x25FF, 0x25FF}, {0x2600, 0x2604},
-	{0x2607, 0x2608}, {0x260A, 0x260D}, {0x2610, 0x2613},
-	{0x2616, 0x261B}, {0x261D, 0x261D}, {0x261F, 0x263F},
-	{0x2641, 0x2641}, {0x2643, 0x2647}, {0x2654, 0x265F},
-	{0x2662, 0x2662}, {0x2666, 0x2666}, {0x266B, 0x266B},
-	{0x266E, 0x266E}, {0x2670, 0x267E}, {0x2680, 0x2692},
-	{0x2694, 0x269D}, {0x26A0, 0x26A0}, {0x26A2, 0x26A9},
-	{0x26AC, 0x26BC}, {0x26C0, 0x26C3}, {0x26E2, 0x26E2},
-	{0x26E4, 0x26E7}, {0x2700, 0x2704}, {0x2706, 0x2709},
-	{0x270C, 0x2727}, {0x2729, 0x273C}, {0x273E, 0x274B},
-	{0x274D, 0x274D}, {0x274F, 0x2752}, {0x2756, 0x2756},
-	{0x2758, 0x2767}, {0x2768, 0x2768}, {0x2769, 0x2769},
-	{0x276A, 0x276A}, {0x276B, 0x276B}, {0x276C, 0x276C},
-	{0x276D, 0x276D}, {0x276E, 0x276E}, {0x276F, 0x276F},
-	{0x2770, 0x2770}, {0x2771, 0x2771}, {0x2772, 0x2772},
-	{0x2773, 0x2773}, {0x2774, 0x2774}, {0x2775, 0x2775},
-	{0x2780, 0x2793}, {0x2794, 0x2794}, {0x2798, 0x27AF},
-	{0x27B1, 0x27BE}, {0x27C0, 0x27C4}, {0x27C5, 0x27C5},
-	{0x27C6, 0x27C6}, {0x27C7, 0x27E5}, {0x27EE, 0x27EE},
-	{0x27EF, 0x27EF}, {0x27F0, 0x27FF}, {0x2800, 0x28FF},
-	{0x2900, 0x297F}, {0x2980, 0x2982}, {0x2983, 0x2983},
-	{0x2984, 0x2984}, {0x2987, 0x2987}, {0x2988, 0x2988},
-	{0x2989, 0x2989}, {0x298A, 0x298A}, {0x298B, 0x298B},
-	{0x298C, 0x298C}, {0x298D, 0x298D}, {0x298E, 0x298E},
-	{0x298F, 0x298F}, {0x2990, 0x2990}, {0x2991, 0x2991},
-	{0x2992, 0x2992}, {0x2993, 0x2993}, {0x2994, 0x2994},
-	{0x2995, 0x2995}, {0x2996, 0x2996}, {0x2997, 0x2997},
-	{0x2998, 0x2998}, {0x2999, 0x29D7}, {0x29D8, 0x29D8},
-	{0x29D9, 0x29D9}, {0x29DA, 0x29DA}, {0x29DB, 0x29DB},
-	{0x29DC, 0x29FB}, {0x29FC, 0x29FC}, {0x29FD, 0x29FD},
-	{0x29FE, 0x29FF}, {0x2A00, 0x2AFF}, {0x2B00, 0x2B1A},
-	{0x2B1D, 0x2B2F}, {0x2B30, 0x2B44}, {0x2B45, 0x2B46},
-	{0x2B47, 0x2B4C}, {0x2B4D, 0x2B4F}, {0x2B51, 0x2B54},
-	{0x2B5A, 0x2B73}, {0x2B76, 0x2B95}, {0x2B98, 0x2BB9},
-	{0x2BBD, 0x2BC8}, {0x2BCA, 0x2BD1}, {0x2BEC, 0x2BEF},
-	{0x2C00, 0x2C2E}, {0x2C30, 0x2C5E}, {0x2C60, 0x2C7B},
-	{0x2C7C, 0x2C7D}, {0x2C7E, 0x2C7F}, {0x2C80, 0x2CE4},
-	{0x2CE5, 0x2CEA}, {0x2CEB, 0x2CEE}, {0x2CEF, 0x2CF1},
-	{0x2CF2, 0x2CF3}, {0x2CF9, 0x2CFC}, {0x2CFD, 0x2CFD},
-	{0x2CFE, 0x2CFF}, {0x2D00, 0x2D25}, {0x2D27, 0x2D27},
-	{0x2D2D, 0x2D2D}, {0x2D30, 0x2D67}, {0x2D6F, 0x2D6F},
-	{0x2D70, 0x2D70}, {0x2D7F, 0x2D7F}, {0x2D80, 0x2D96},
-	{0x2DA0, 0x2DA6}, {0x2DA8, 0x2DAE}, {0x2DB0, 0x2DB6},
-	{0x2DB8, 0x2DBE}, {0x2DC0, 0x2DC6}, {0x2DC8, 0x2DCE},
-	{0x2DD0, 0x2DD6}, {0x2DD8, 0x2DDE}, {0x2DE0, 0x2DFF},
-	{0x2E00, 0x2E01}, {0x2E02, 0x2E02}, {0x2E03, 0x2E03},
-	{0x2E04, 0x2E04}, {0x2E05, 0x2E05}, {0x2E06, 0x2E08},
-	{0x2E09, 0x2E09}, {0x2E0A, 0x2E0A}, {0x2E0B, 0x2E0B},
-	{0x2E0C, 0x2E0C}, {0x2E0D, 0x2E0D}, {0x2E0E, 0x2E16},
-	{0x2E17, 0x2E17}, {0x2E18, 0x2E19}, {0x2E1A, 0x2E1A},
-	{0x2E1B, 0x2E1B}, {0x2E1C, 0x2E1C}, {0x2E1D, 0x2E1D},
-	{0x2E1E, 0x2E1F}, {0x2E20, 0x2E20}, {0x2E21, 0x2E21},
-	{0x2E22, 0x2E22}, {0x2E23, 0x2E23}, {0x2E24, 0x2E24},
-	{0x2E25, 0x2E25}, {0x2E26, 0x2E26}, {0x2E27, 0x2E27},
-	{0x2E28, 0x2E28}, {0x2E29, 0x2E29}, {0x2E2A, 0x2E2E},
-	{0x2E2F, 0x2E2F}, {0x2E30, 0x2E39}, {0x2E3A, 0x2E3B},
-	{0x2E3C, 0x2E3F}, {0x2E40, 0x2E40}, {0x2E41, 0x2E41},
-	{0x2E42, 0x2E42}, {0x2E43, 0x2E44}, {0x303F, 0x303F},
-	{0x4DC0, 0x4DFF}, {0xA4D0, 0xA4F7}, {0xA4F8, 0xA4FD},
-	{0xA4FE, 0xA4FF}, {0xA500, 0xA60B}, {0xA60C, 0xA60C},
-	{0xA60D, 0xA60F}, {0xA610, 0xA61F}, {0xA620, 0xA629},
-	{0xA62A, 0xA62B}, {0xA640, 0xA66D}, {0xA66E, 0xA66E},
-	{0xA66F, 0xA66F}, {0xA670, 0xA672}, {0xA673, 0xA673},
-	{0xA674, 0xA67D}, {0xA67E, 0xA67E}, {0xA67F, 0xA67F},
-	{0xA680, 0xA69B}, {0xA69C, 0xA69D}, {0xA69E, 0xA69F},
-	{0xA6A0, 0xA6E5}, {0xA6E6, 0xA6EF}, {0xA6F0, 0xA6F1},
-	{0xA6F2, 0xA6F7}, {0xA700, 0xA716}, {0xA717, 0xA71F},
-	{0xA720, 0xA721}, {0xA722, 0xA76F}, {0xA770, 0xA770},
-	{0xA771, 0xA787}, {0xA788, 0xA788}, {0xA789, 0xA78A},
-	{0xA78B, 0xA78E}, {0xA78F, 0xA78F}, {0xA790, 0xA7AE},
-	{0xA7B0, 0xA7B7}, {0xA7F7, 0xA7F7}, {0xA7F8, 0xA7F9},
-	{0xA7FA, 0xA7FA}, {0xA7FB, 0xA7FF}, {0xA800, 0xA801},
-	{0xA802, 0xA802}, {0xA803, 0xA805}, {0xA806, 0xA806},
-	{0xA807, 0xA80A}, {0xA80B, 0xA80B}, {0xA80C, 0xA822},
-	{0xA823, 0xA824}, {0xA825, 0xA826}, {0xA827, 0xA827},
-	{0xA828, 0xA82B}, {0xA830, 0xA835}, {0xA836, 0xA837},
-	{0xA838, 0xA838}, {0xA839, 0xA839}, {0xA840, 0xA873},
-	{0xA874, 0xA877}, {0xA880, 0xA881}, {0xA882, 0xA8B3},
-	{0xA8B4, 0xA8C3}, {0xA8C4, 0xA8C5}, {0xA8CE, 0xA8CF},
-	{0xA8D0, 0xA8D9}, {0xA8E0, 0xA8F1}, {0xA8F2, 0xA8F7},
-	{0xA8F8, 0xA8FA}, {0xA8FB, 0xA8FB}, {0xA8FC, 0xA8FC},
-	{0xA8FD, 0xA8FD}, {0xA900, 0xA909}, {0xA90A, 0xA925},
-	{0xA926, 0xA92D}, {0xA92E, 0xA92F}, {0xA930, 0xA946},
-	{0xA947, 0xA951}, {0xA952, 0xA953}, {0xA95F, 0xA95F},
-	{0xA980, 0xA982}, {0xA983, 0xA983}, {0xA984, 0xA9B2},
-	{0xA9B3, 0xA9B3}, {0xA9B4, 0xA9B5}, {0xA9B6, 0xA9B9},
-	{0xA9BA, 0xA9BB}, {0xA9BC, 0xA9BC}, {0xA9BD, 0xA9C0},
-	{0xA9C1, 0xA9CD}, {0xA9CF, 0xA9CF}, {0xA9D0, 0xA9D9},
-	{0xA9DE, 0xA9DF}, {0xA9E0, 0xA9E4}, {0xA9E5, 0xA9E5},
-	{0xA9E6, 0xA9E6}, {0xA9E7, 0xA9EF}, {0xA9F0, 0xA9F9},
-	{0xA9FA, 0xA9FE}, {0xAA00, 0xAA28}, {0xAA29, 0xAA2E},
-	{0xAA2F, 0xAA30}, {0xAA31, 0xAA32}, {0xAA33, 0xAA34},
-	{0xAA35, 0xAA36}, {0xAA40, 0xAA42}, {0xAA43, 0xAA43},
-	{0xAA44, 0xAA4B}, {0xAA4C, 0xAA4C}, {0xAA4D, 0xAA4D},
-	{0xAA50, 0xAA59}, {0xAA5C, 0xAA5F}, {0xAA60, 0xAA6F},
-	{0xAA70, 0xAA70}, {0xAA71, 0xAA76}, {0xAA77, 0xAA79},
-	{0xAA7A, 0xAA7A}, {0xAA7B, 0xAA7B}, {0xAA7C, 0xAA7C},
-	{0xAA7D, 0xAA7D}, {0xAA7E, 0xAA7F}, {0xAA80, 0xAAAF},
-	{0xAAB0, 0xAAB0}, {0xAAB1, 0xAAB1}, {0xAAB2, 0xAAB4},
-	{0xAAB5, 0xAAB6}, {0xAAB7, 0xAAB8}, {0xAAB9, 0xAABD},
-	{0xAABE, 0xAABF}, {0xAAC0, 0xAAC0}, {0xAAC1, 0xAAC1},
-	{0xAAC2, 0xAAC2}, {0xAADB, 0xAADC}, {0xAADD, 0xAADD},
-	{0xAADE, 0xAADF}, {0xAAE0, 0xAAEA}, {0xAAEB, 0xAAEB},
-	{0xAAEC, 0xAAED}, {0xAAEE, 0xAAEF}, {0xAAF0, 0xAAF1},
-	{0xAAF2, 0xAAF2}, {0xAAF3, 0xAAF4}, {0xAAF5, 0xAAF5},
-	{0xAAF6, 0xAAF6}, {0xAB01, 0xAB06}, {0xAB09, 0xAB0E},
-	{0xAB11, 0xAB16}, {0xAB20, 0xAB26}, {0xAB28, 0xAB2E},
-	{0xAB30, 0xAB5A}, {0xAB5B, 0xAB5B}, {0xAB5C, 0xAB5F},
-	{0xAB60, 0xAB65}, {0xAB70, 0xABBF}, {0xABC0, 0xABE2},
-	{0xABE3, 0xABE4}, {0xABE5, 0xABE5}, {0xABE6, 0xABE7},
-	{0xABE8, 0xABE8}, {0xABE9, 0xABEA}, {0xABEB, 0xABEB},
-	{0xABEC, 0xABEC}, {0xABED, 0xABED}, {0xABF0, 0xABF9},
-	{0xD7B0, 0xD7C6}, {0xD7CB, 0xD7FB}, {0xD800, 0xDB7F},
-	{0xDB80, 0xDBFF}, {0xDC00, 0xDFFF}, {0xFB00, 0xFB06},
-	{0xFB13, 0xFB17}, {0xFB1D, 0xFB1D}, {0xFB1E, 0xFB1E},
-	{0xFB1F, 0xFB28}, {0xFB29, 0xFB29}, {0xFB2A, 0xFB36},
-	{0xFB38, 0xFB3C}, {0xFB3E, 0xFB3E}, {0xFB40, 0xFB41},
-	{0xFB43, 0xFB44}, {0xFB46, 0xFB4F}, {0xFB50, 0xFBB1},
-	{0xFBB2, 0xFBC1}, {0xFBD3, 0xFD3D}, {0xFD3E, 0xFD3E},
-	{0xFD3F, 0xFD3F}, {0xFD50, 0xFD8F}, {0xFD92, 0xFDC7},
-	{0xFDF0, 0xFDFB}, {0xFDFC, 0xFDFC}, {0xFDFD, 0xFDFD},
-	{0xFE20, 0xFE2F}, {0xFE70, 0xFE74}, {0xFE76, 0xFEFC},
-	{0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFB}, {0xFFFC, 0xFFFC},
-	{0x10000, 0x1000B}, {0x1000D, 0x10026}, {0x10028, 0x1003A},
-	{0x1003C, 0x1003D}, {0x1003F, 0x1004D}, {0x10050, 0x1005D},
-	{0x10080, 0x100FA}, {0x10100, 0x10102}, {0x10107, 0x10133},
-	{0x10137, 0x1013F}, {0x10140, 0x10174}, {0x10175, 0x10178},
-	{0x10179, 0x10189}, {0x1018A, 0x1018B}, {0x1018C, 0x1018E},
-	{0x10190, 0x1019B}, {0x101A0, 0x101A0}, {0x101D0, 0x101FC},
-	{0x101FD, 0x101FD}, {0x10280, 0x1029C}, {0x102A0, 0x102D0},
-	{0x102E0, 0x102E0}, {0x102E1, 0x102FB}, {0x10300, 0x1031F},
-	{0x10320, 0x10323}, {0x10330, 0x10340}, {0x10341, 0x10341},
-	{0x10342, 0x10349}, {0x1034A, 0x1034A}, {0x10350, 0x10375},
-	{0x10376, 0x1037A}, {0x10380, 0x1039D}, {0x1039F, 0x1039F},
-	{0x103A0, 0x103C3}, {0x103C8, 0x103CF}, {0x103D0, 0x103D0},
-	{0x103D1, 0x103D5}, {0x10400, 0x1044F}, {0x10450, 0x1047F},
-	{0x10480, 0x1049D}, {0x104A0, 0x104A9}, {0x104B0, 0x104D3},
-	{0x104D8, 0x104FB}, {0x10500, 0x10527}, {0x10530, 0x10563},
-	{0x1056F, 0x1056F}, {0x10600, 0x10736}, {0x10740, 0x10755},
-	{0x10760, 0x10767}, {0x10800, 0x10805}, {0x10808, 0x10808},
-	{0x1080A, 0x10835}, {0x10837, 0x10838}, {0x1083C, 0x1083C},
-	{0x1083F, 0x1083F}, {0x10840, 0x10855}, {0x10857, 0x10857},
-	{0x10858, 0x1085F}, {0x10860, 0x10876}, {0x10877, 0x10878},
-	{0x10879, 0x1087F}, {0x10880, 0x1089E}, {0x108A7, 0x108AF},
-	{0x108E0, 0x108F2}, {0x108F4, 0x108F5}, {0x108FB, 0x108FF},
-	{0x10900, 0x10915}, {0x10916, 0x1091B}, {0x1091F, 0x1091F},
-	{0x10920, 0x10939}, {0x1093F, 0x1093F}, {0x10980, 0x1099F},
-	{0x109A0, 0x109B7}, {0x109BC, 0x109BD}, {0x109BE, 0x109BF},
-	{0x109C0, 0x109CF}, {0x109D2, 0x109FF}, {0x10A00, 0x10A00},
-	{0x10A01, 0x10A03}, {0x10A05, 0x10A06}, {0x10A0C, 0x10A0F},
-	{0x10A10, 0x10A13}, {0x10A15, 0x10A17}, {0x10A19, 0x10A33},
-	{0x10A38, 0x10A3A}, {0x10A3F, 0x10A3F}, {0x10A40, 0x10A47},
-	{0x10A50, 0x10A58}, {0x10A60, 0x10A7C}, {0x10A7D, 0x10A7E},
-	{0x10A7F, 0x10A7F}, {0x10A80, 0x10A9C}, {0x10A9D, 0x10A9F},
-	{0x10AC0, 0x10AC7}, {0x10AC8, 0x10AC8}, {0x10AC9, 0x10AE4},
-	{0x10AE5, 0x10AE6}, {0x10AEB, 0x10AEF}, {0x10AF0, 0x10AF6},
-	{0x10B00, 0x10B35}, {0x10B39, 0x10B3F}, {0x10B40, 0x10B55},
-	{0x10B58, 0x10B5F}, {0x10B60, 0x10B72}, {0x10B78, 0x10B7F},
-	{0x10B80, 0x10B91}, {0x10B99, 0x10B9C}, {0x10BA9, 0x10BAF},
-	{0x10C00, 0x10C48}, {0x10C80, 0x10CB2}, {0x10CC0, 0x10CF2},
-	{0x10CFA, 0x10CFF}, {0x10E60, 0x10E7E}, {0x11000, 0x11000},
-	{0x11001, 0x11001}, {0x11002, 0x11002}, {0x11003, 0x11037},
-	{0x11038, 0x11046}, {0x11047, 0x1104D}, {0x11052, 0x11065},
-	{0x11066, 0x1106F}, {0x1107F, 0x1107F}, {0x11080, 0x11081},
-	{0x11082, 0x11082}, {0x11083, 0x110AF}, {0x110B0, 0x110B2},
-	{0x110B3, 0x110B6}, {0x110B7, 0x110B8}, {0x110B9, 0x110BA},
-	{0x110BB, 0x110BC}, {0x110BD, 0x110BD}, {0x110BE, 0x110C1},
-	{0x110D0, 0x110E8}, {0x110F0, 0x110F9}, {0x11100, 0x11102},
-	{0x11103, 0x11126}, {0x11127, 0x1112B}, {0x1112C, 0x1112C},
-	{0x1112D, 0x11134}, {0x11136, 0x1113F}, {0x11140, 0x11143},
-	{0x11150, 0x11172}, {0x11173, 0x11173}, {0x11174, 0x11175},
-	{0x11176, 0x11176}, {0x11180, 0x11181}, {0x11182, 0x11182},
-	{0x11183, 0x111B2}, {0x111B3, 0x111B5}, {0x111B6, 0x111BE},
-	{0x111BF, 0x111C0}, {0x111C1, 0x111C4}, {0x111C5, 0x111C9},
-	{0x111CA, 0x111CC}, {0x111CD, 0x111CD}, {0x111D0, 0x111D9},
-	{0x111DA, 0x111DA}, {0x111DB, 0x111DB}, {0x111DC, 0x111DC},
-	{0x111DD, 0x111DF}, {0x111E1, 0x111F4}, {0x11200, 0x11211},
-	{0x11213, 0x1122B}, {0x1122C, 0x1122E}, {0x1122F, 0x11231},
-	{0x11232, 0x11233}, {0x11234, 0x11234}, {0x11235, 0x11235},
-	{0x11236, 0x11237}, {0x11238, 0x1123D}, {0x1123E, 0x1123E},
-	{0x11280, 0x11286}, {0x11288, 0x11288}, {0x1128A, 0x1128D},
-	{0x1128F, 0x1129D}, {0x1129F, 0x112A8}, {0x112A9, 0x112A9},
-	{0x112B0, 0x112DE}, {0x112DF, 0x112DF}, {0x112E0, 0x112E2},
-	{0x112E3, 0x112EA}, {0x112F0, 0x112F9}, {0x11300, 0x11301},
-	{0x11302, 0x11303}, {0x11305, 0x1130C}, {0x1130F, 0x11310},
-	{0x11313, 0x11328}, {0x1132A, 0x11330}, {0x11332, 0x11333},
-	{0x11335, 0x11339}, {0x1133C, 0x1133C}, {0x1133D, 0x1133D},
-	{0x1133E, 0x1133F}, {0x11340, 0x11340}, {0x11341, 0x11344},
-	{0x11347, 0x11348}, {0x1134B, 0x1134D}, {0x11350, 0x11350},
-	{0x11357, 0x11357}, {0x1135D, 0x11361}, {0x11362, 0x11363},
-	{0x11366, 0x1136C}, {0x11370, 0x11374}, {0x11400, 0x11434},
-	{0x11435, 0x11437}, {0x11438, 0x1143F}, {0x11440, 0x11441},
-	{0x11442, 0x11444}, {0x11445, 0x11445}, {0x11446, 0x11446},
-	{0x11447, 0x1144A}, {0x1144B, 0x1144F}, {0x11450, 0x11459},
-	{0x1145B, 0x1145B}, {0x1145D, 0x1145D}, {0x11480, 0x114AF},
-	{0x114B0, 0x114B2}, {0x114B3, 0x114B8}, {0x114B9, 0x114B9},
-	{0x114BA, 0x114BA}, {0x114BB, 0x114BE}, {0x114BF, 0x114C0},
-	{0x114C1, 0x114C1}, {0x114C2, 0x114C3}, {0x114C4, 0x114C5},
-	{0x114C6, 0x114C6}, {0x114C7, 0x114C7}, {0x114D0, 0x114D9},
-	{0x11580, 0x115AE}, {0x115AF, 0x115B1}, {0x115B2, 0x115B5},
-	{0x115B8, 0x115BB}, {0x115BC, 0x115BD}, {0x115BE, 0x115BE},
-	{0x115BF, 0x115C0}, {0x115C1, 0x115D7}, {0x115D8, 0x115DB},
-	{0x115DC, 0x115DD}, {0x11600, 0x1162F}, {0x11630, 0x11632},
-	{0x11633, 0x1163A}, {0x1163B, 0x1163C}, {0x1163D, 0x1163D},
-	{0x1163E, 0x1163E}, {0x1163F, 0x11640}, {0x11641, 0x11643},
-	{0x11644, 0x11644}, {0x11650, 0x11659}, {0x11660, 0x1166C},
-	{0x11680, 0x116AA}, {0x116AB, 0x116AB}, {0x116AC, 0x116AC},
-	{0x116AD, 0x116AD}, {0x116AE, 0x116AF}, {0x116B0, 0x116B5},
-	{0x116B6, 0x116B6}, {0x116B7, 0x116B7}, {0x116C0, 0x116C9},
-	{0x11700, 0x11719}, {0x1171D, 0x1171F}, {0x11720, 0x11721},
-	{0x11722, 0x11725}, {0x11726, 0x11726}, {0x11727, 0x1172B},
-	{0x11730, 0x11739}, {0x1173A, 0x1173B}, {0x1173C, 0x1173E},
-	{0x1173F, 0x1173F}, {0x118A0, 0x118DF}, {0x118E0, 0x118E9},
-	{0x118EA, 0x118F2}, {0x118FF, 0x118FF}, {0x11AC0, 0x11AF8},
-	{0x11C00, 0x11C08}, {0x11C0A, 0x11C2E}, {0x11C2F, 0x11C2F},
-	{0x11C30, 0x11C36}, {0x11C38, 0x11C3D}, {0x11C3E, 0x11C3E},
-	{0x11C3F, 0x11C3F}, {0x11C40, 0x11C40}, {0x11C41, 0x11C45},
-	{0x11C50, 0x11C59}, {0x11C5A, 0x11C6C}, {0x11C70, 0x11C71},
-	{0x11C72, 0x11C8F}, {0x11C92, 0x11CA7}, {0x11CA9, 0x11CA9},
-	{0x11CAA, 0x11CB0}, {0x11CB1, 0x11CB1}, {0x11CB2, 0x11CB3},
-	{0x11CB4, 0x11CB4}, {0x11CB5, 0x11CB6}, {0x12000, 0x12399},
-	{0x12400, 0x1246E}, {0x12470, 0x12474}, {0x12480, 0x12543},
-	{0x13000, 0x1342E}, {0x14400, 0x14646}, {0x16800, 0x16A38},
-	{0x16A40, 0x16A5E}, {0x16A60, 0x16A69}, {0x16A6E, 0x16A6F},
-	{0x16AD0, 0x16AED}, {0x16AF0, 0x16AF4}, {0x16AF5, 0x16AF5},
-	{0x16B00, 0x16B2F}, {0x16B30, 0x16B36}, {0x16B37, 0x16B3B},
-	{0x16B3C, 0x16B3F}, {0x16B40, 0x16B43}, {0x16B44, 0x16B44},
-	{0x16B45, 0x16B45}, {0x16B50, 0x16B59}, {0x16B5B, 0x16B61},
-	{0x16B63, 0x16B77}, {0x16B7D, 0x16B8F}, {0x16F00, 0x16F44},
-	{0x16F50, 0x16F50}, {0x16F51, 0x16F7E}, {0x16F8F, 0x16F92},
-	{0x16F93, 0x16F9F}, {0x1BC00, 0x1BC6A}, {0x1BC70, 0x1BC7C},
-	{0x1BC80, 0x1BC88}, {0x1BC90, 0x1BC99}, {0x1BC9C, 0x1BC9C},
-	{0x1BC9D, 0x1BC9E}, {0x1BC9F, 0x1BC9F}, {0x1BCA0, 0x1BCA3},
-	{0x1D000, 0x1D0F5}, {0x1D100, 0x1D126}, {0x1D129, 0x1D164},
-	{0x1D165, 0x1D166}, {0x1D167, 0x1D169}, {0x1D16A, 0x1D16C},
-	{0x1D16D, 0x1D172}, {0x1D173, 0x1D17A}, {0x1D17B, 0x1D182},
-	{0x1D183, 0x1D184}, {0x1D185, 0x1D18B}, {0x1D18C, 0x1D1A9},
-	{0x1D1AA, 0x1D1AD}, {0x1D1AE, 0x1D1E8}, {0x1D200, 0x1D241},
-	{0x1D242, 0x1D244}, {0x1D245, 0x1D245}, {0x1D300, 0x1D356},
-	{0x1D360, 0x1D371}, {0x1D400, 0x1D454}, {0x1D456, 0x1D49C},
-	{0x1D49E, 0x1D49F}, {0x1D4A2, 0x1D4A2}, {0x1D4A5, 0x1D4A6},
-	{0x1D4A9, 0x1D4AC}, {0x1D4AE, 0x1D4B9}, {0x1D4BB, 0x1D4BB},
-	{0x1D4BD, 0x1D4C3}, {0x1D4C5, 0x1D505}, {0x1D507, 0x1D50A},
-	{0x1D50D, 0x1D514}, {0x1D516, 0x1D51C}, {0x1D51E, 0x1D539},
-	{0x1D53B, 0x1D53E}, {0x1D540, 0x1D544}, {0x1D546, 0x1D546},
-	{0x1D54A, 0x1D550}, {0x1D552, 0x1D6A5}, {0x1D6A8, 0x1D6C0},
-	{0x1D6C1, 0x1D6C1}, {0x1D6C2, 0x1D6DA}, {0x1D6DB, 0x1D6DB},
-	{0x1D6DC, 0x1D6FA}, {0x1D6FB, 0x1D6FB}, {0x1D6FC, 0x1D714},
-	{0x1D715, 0x1D715}, {0x1D716, 0x1D734}, {0x1D735, 0x1D735},
-	{0x1D736, 0x1D74E}, {0x1D74F, 0x1D74F}, {0x1D750, 0x1D76E},
-	{0x1D76F, 0x1D76F}, {0x1D770, 0x1D788}, {0x1D789, 0x1D789},
-	{0x1D78A, 0x1D7A8}, {0x1D7A9, 0x1D7A9}, {0x1D7AA, 0x1D7C2},
-	{0x1D7C3, 0x1D7C3}, {0x1D7C4, 0x1D7CB}, {0x1D7CE, 0x1D7FF},
-	{0x1D800, 0x1D9FF}, {0x1DA00, 0x1DA36}, {0x1DA37, 0x1DA3A},
-	{0x1DA3B, 0x1DA6C}, {0x1DA6D, 0x1DA74}, {0x1DA75, 0x1DA75},
-	{0x1DA76, 0x1DA83}, {0x1DA84, 0x1DA84}, {0x1DA85, 0x1DA86},
-	{0x1DA87, 0x1DA8B}, {0x1DA9B, 0x1DA9F}, {0x1DAA1, 0x1DAAF},
-	{0x1E000, 0x1E006}, {0x1E008, 0x1E018}, {0x1E01B, 0x1E021},
-	{0x1E023, 0x1E024}, {0x1E026, 0x1E02A}, {0x1E800, 0x1E8C4},
-	{0x1E8C7, 0x1E8CF}, {0x1E8D0, 0x1E8D6}, {0x1E900, 0x1E943},
-	{0x1E944, 0x1E94A}, {0x1E950, 0x1E959}, {0x1E95E, 0x1E95F},
-	{0x1EE00, 0x1EE03}, {0x1EE05, 0x1EE1F}, {0x1EE21, 0x1EE22},
-	{0x1EE24, 0x1EE24}, {0x1EE27, 0x1EE27}, {0x1EE29, 0x1EE32},
-	{0x1EE34, 0x1EE37}, {0x1EE39, 0x1EE39}, {0x1EE3B, 0x1EE3B},
-	{0x1EE42, 0x1EE42}, {0x1EE47, 0x1EE47}, {0x1EE49, 0x1EE49},
-	{0x1EE4B, 0x1EE4B}, {0x1EE4D, 0x1EE4F}, {0x1EE51, 0x1EE52},
-	{0x1EE54, 0x1EE54}, {0x1EE57, 0x1EE57}, {0x1EE59, 0x1EE59},
-	{0x1EE5B, 0x1EE5B}, {0x1EE5D, 0x1EE5D}, {0x1EE5F, 0x1EE5F},
-	{0x1EE61, 0x1EE62}, {0x1EE64, 0x1EE64}, {0x1EE67, 0x1EE6A},
-	{0x1EE6C, 0x1EE72}, {0x1EE74, 0x1EE77}, {0x1EE79, 0x1EE7C},
-	{0x1EE7E, 0x1EE7E}, {0x1EE80, 0x1EE89}, {0x1EE8B, 0x1EE9B},
-	{0x1EEA1, 0x1EEA3}, {0x1EEA5, 0x1EEA9}, {0x1EEAB, 0x1EEBB},
-	{0x1EEF0, 0x1EEF1}, {0x1F000, 0x1F003}, {0x1F005, 0x1F02B},
-	{0x1F030, 0x1F093}, {0x1F0A0, 0x1F0AE}, {0x1F0B1, 0x1F0BF},
-	{0x1F0C1, 0x1F0CE}, {0x1F0D1, 0x1F0F5}, {0x1F10B, 0x1F10C},
-	{0x1F12E, 0x1F12E}, {0x1F16A, 0x1F16B}, {0x1F1E6, 0x1F1FF},
-	{0x1F321, 0x1F32C}, {0x1F336, 0x1F336}, {0x1F37D, 0x1F37D},
-	{0x1F394, 0x1F39F}, {0x1F3CB, 0x1F3CE}, {0x1F3D4, 0x1F3DF},
-	{0x1F3F1, 0x1F3F3}, {0x1F3F5, 0x1F3F7}, {0x1F43F, 0x1F43F},
-	{0x1F441, 0x1F441}, {0x1F4FD, 0x1F4FE}, {0x1F53E, 0x1F54A},
-	{0x1F54F, 0x1F54F}, {0x1F568, 0x1F579}, {0x1F57B, 0x1F594},
-	{0x1F597, 0x1F5A3}, {0x1F5A5, 0x1F5FA}, {0x1F650, 0x1F67F},
-	{0x1F6C6, 0x1F6CB}, {0x1F6CD, 0x1F6CF}, {0x1F6E0, 0x1F6EA},
-	{0x1F6F0, 0x1F6F3}, {0x1F700, 0x1F773}, {0x1F780, 0x1F7D4},
-	{0x1F800, 0x1F80B}, {0x1F810, 0x1F847}, {0x1F850, 0x1F859},
-	{0x1F860, 0x1F887}, {0x1F890, 0x1F8AD}, {0xE0001, 0xE0001},
-	{0xE0020, 0xE007F},
-}
-
 // Condition have flag EastAsianWidth whether the current locale is CJK or not.
 type Condition struct {
-	EastAsianWidth bool
+	combinedLut        []byte
+	EastAsianWidth     bool
+	StrictEmojiNeutral bool
 }
 
 // NewCondition return new instance of Condition which is current locale.
 func NewCondition() *Condition {
-	return &Condition{EastAsianWidth}
+	return &Condition{
+		EastAsianWidth:     EastAsianWidth,
+		StrictEmojiNeutral: StrictEmojiNeutral,
+	}
 }
 
 // RuneWidth returns the number of cells in r.
 // See http://www.unicode.org/reports/tr11/
 func (c *Condition) RuneWidth(r rune) int {
-	switch {
-	case r < 0 || r > 0x10FFFF ||
-		inTables(r, nonprint, combining, notassigned):
+	if r < 0 || r > 0x10FFFF {
 		return 0
-	case (c.EastAsianWidth && IsAmbiguousWidth(r)) ||
-		inTables(r, doublewidth, emoji):
-		return 2
-	default:
-		return 1
 	}
+	if len(c.combinedLut) > 0 {
+		return int(c.combinedLut[r>>1]>>(uint(r&1)*4)) & 3
+	}
+	// optimized version, verified by TestRuneWidthChecksums()
+	if !c.EastAsianWidth {
+		switch {
+		case r < 0x20:
+			return 0
+		case (r >= 0x7F && r <= 0x9F) || r == 0xAD: // nonprint
+			return 0
+		case r < 0x300:
+			return 1
+		case inTable(r, narrow):
+			return 1
+		case inTables(r, nonprint, combining):
+			return 0
+		case inTable(r, doublewidth):
+			return 2
+		default:
+			return 1
+		}
+	} else {
+		switch {
+		case inTables(r, nonprint, combining):
+			return 0
+		case inTable(r, narrow):
+			return 1
+		case inTables(r, ambiguous, doublewidth):
+			return 2
+		case !c.StrictEmojiNeutral && inTables(r, ambiguous, emoji, narrow):
+			return 2
+		default:
+			return 1
+		}
+	}
+}
+
+// CreateLUT will create an in-memory lookup table of 557056 bytes for faster operation.
+// This should not be called concurrently with other operations on c.
+// If options in c is changed, CreateLUT should be called again.
+func (c *Condition) CreateLUT() {
+	const max = 0x110000
+	lut := c.combinedLut
+	if len(c.combinedLut) != 0 {
+		// Remove so we don't use it.
+		c.combinedLut = nil
+	} else {
+		lut = make([]byte, max/2)
+	}
+	for i := range lut {
+		i32 := int32(i * 2)
+		x0 := c.RuneWidth(i32)
+		x1 := c.RuneWidth(i32 + 1)
+		lut[i] = uint8(x0) | uint8(x1)<<4
+	}
+	c.combinedLut = lut
 }
 
 // StringWidth return width as you can see
 func (c *Condition) StringWidth(s string) (width int) {
-	for _, r := range []rune(s) {
-		width += c.RuneWidth(r)
+	g := uniseg.NewGraphemes(s)
+	for g.Next() {
+		var chWidth int
+		for _, r := range g.Runes() {
+			chWidth = c.RuneWidth(r)
+			if chWidth > 0 {
+				break // Our best guess at this point is to use the width of the first non-zero-width rune.
+			}
+		}
+		width += chWidth
 	}
-	return width
+	return
 }
 
 // Truncate return string truncated with w cells
@@ -1127,27 +194,69 @@ func (c *Condition) Truncate(s string, w int, tail string) string {
 	if c.StringWidth(s) <= w {
 		return s
 	}
-	r := []rune(s)
-	tw := c.StringWidth(tail)
-	w -= tw
-	width := 0
-	i := 0
-	for ; i < len(r); i++ {
-		cw := c.RuneWidth(r[i])
-		if width+cw > w {
+	w -= c.StringWidth(tail)
+	var width int
+	pos := len(s)
+	g := uniseg.NewGraphemes(s)
+	for g.Next() {
+		var chWidth int
+		for _, r := range g.Runes() {
+			chWidth = c.RuneWidth(r)
+			if chWidth > 0 {
+				break // See StringWidth() for details.
+			}
+		}
+		if width+chWidth > w {
+			pos, _ = g.Positions()
 			break
 		}
-		width += cw
+		width += chWidth
 	}
-	return string(r[0:i]) + tail
+	return s[:pos] + tail
+}
+
+// TruncateLeft cuts w cells from the beginning of the `s`.
+func (c *Condition) TruncateLeft(s string, w int, prefix string) string {
+	if c.StringWidth(s) <= w {
+		return prefix
+	}
+
+	var width int
+	pos := len(s)
+
+	g := uniseg.NewGraphemes(s)
+	for g.Next() {
+		var chWidth int
+		for _, r := range g.Runes() {
+			chWidth = c.RuneWidth(r)
+			if chWidth > 0 {
+				break // See StringWidth() for details.
+			}
+		}
+
+		if width+chWidth > w {
+			if width < w {
+				_, pos = g.Positions()
+				prefix += strings.Repeat(" ", width+chWidth-w)
+			} else {
+				pos, _ = g.Positions()
+			}
+
+			break
+		}
+
+		width += chWidth
+	}
+
+	return prefix + s[pos:]
 }
 
 // Wrap return string wrapped with w cells
 func (c *Condition) Wrap(s string, w int) string {
 	width := 0
 	out := ""
-	for _, r := range []rune(s) {
-		cw := RuneWidth(r)
+	for _, r := range s {
+		cw := c.RuneWidth(r)
 		if r == '\n' {
 			out += string(r)
 			width = 0
@@ -1219,6 +328,11 @@ func Truncate(s string, w int, tail string) string {
 	return DefaultCondition.Truncate(s, w, tail)
 }
 
+// TruncateLeft cuts w cells from the beginning of the `s`.
+func TruncateLeft(s string, w int, prefix string) string {
+	return DefaultCondition.TruncateLeft(s, w, prefix)
+}
+
 // Wrap return string wrapped with w cells
 func Wrap(s string, w int) string {
 	return DefaultCondition.Wrap(s, w)
@@ -1233,3 +347,12 @@ func FillLeft(s string, w int) string {
 func FillRight(s string, w int) string {
 	return DefaultCondition.FillRight(s, w)
 }
+
+// CreateLUT will create an in-memory lookup table of 557055 bytes for faster operation.
+// This should not be called concurrently with other operations.
+func CreateLUT() {
+	if len(DefaultCondition.combinedLut) > 0 {
+		return
+	}
+	DefaultCondition.CreateLUT()
+}
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_appengine.go b/vendor/github.com/mattn/go-runewidth/runewidth_appengine.go
new file mode 100644
index 0000000..84b6528
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_appengine.go
@@ -0,0 +1,9 @@
+//go:build appengine
+// +build appengine
+
+package runewidth
+
+// IsEastAsian return true if the current locale is CJK
+func IsEastAsian() bool {
+	return false
+}
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_js.go b/vendor/github.com/mattn/go-runewidth/runewidth_js.go
index 0ce32c5..c2abbc2 100644
--- a/vendor/github.com/mattn/go-runewidth/runewidth_js.go
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_js.go
@@ -1,4 +1,5 @@
-// +build js
+//go:build js && !appengine
+// +build js,!appengine
 
 package runewidth
 
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_posix.go b/vendor/github.com/mattn/go-runewidth/runewidth_posix.go
index c579e9a..5a31d73 100644
--- a/vendor/github.com/mattn/go-runewidth/runewidth_posix.go
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_posix.go
@@ -1,4 +1,5 @@
-// +build !windows,!js
+//go:build !windows && !js && !appengine
+// +build !windows,!js,!appengine
 
 package runewidth
 
@@ -60,7 +61,10 @@ func isEastAsian(locale string) bool {
 
 // IsEastAsian return true if the current locale is CJK
 func IsEastAsian() bool {
-	locale := os.Getenv("LC_CTYPE")
+	locale := os.Getenv("LC_ALL")
+	if locale == "" {
+		locale = os.Getenv("LC_CTYPE")
+	}
 	if locale == "" {
 		locale = os.Getenv("LANG")
 	}
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_table.go b/vendor/github.com/mattn/go-runewidth/runewidth_table.go
new file mode 100644
index 0000000..e5d890c
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_table.go
@@ -0,0 +1,439 @@
+// Code generated by script/generate.go. DO NOT EDIT.
+
+package runewidth
+
+var combining = table{
+	{0x0300, 0x036F}, {0x0483, 0x0489}, {0x07EB, 0x07F3},
+	{0x0C00, 0x0C00}, {0x0C04, 0x0C04}, {0x0D00, 0x0D01},
+	{0x135D, 0x135F}, {0x1A7F, 0x1A7F}, {0x1AB0, 0x1AC0},
+	{0x1B6B, 0x1B73}, {0x1DC0, 0x1DF9}, {0x1DFB, 0x1DFF},
+	{0x20D0, 0x20F0}, {0x2CEF, 0x2CF1}, {0x2DE0, 0x2DFF},
+	{0x3099, 0x309A}, {0xA66F, 0xA672}, {0xA674, 0xA67D},
+	{0xA69E, 0xA69F}, {0xA6F0, 0xA6F1}, {0xA8E0, 0xA8F1},
+	{0xFE20, 0xFE2F}, {0x101FD, 0x101FD}, {0x10376, 0x1037A},
+	{0x10EAB, 0x10EAC}, {0x10F46, 0x10F50}, {0x11300, 0x11301},
+	{0x1133B, 0x1133C}, {0x11366, 0x1136C}, {0x11370, 0x11374},
+	{0x16AF0, 0x16AF4}, {0x1D165, 0x1D169}, {0x1D16D, 0x1D172},
+	{0x1D17B, 0x1D182}, {0x1D185, 0x1D18B}, {0x1D1AA, 0x1D1AD},
+	{0x1D242, 0x1D244}, {0x1E000, 0x1E006}, {0x1E008, 0x1E018},
+	{0x1E01B, 0x1E021}, {0x1E023, 0x1E024}, {0x1E026, 0x1E02A},
+	{0x1E8D0, 0x1E8D6},
+}
+
+var doublewidth = table{
+	{0x1100, 0x115F}, {0x231A, 0x231B}, {0x2329, 0x232A},
+	{0x23E9, 0x23EC}, {0x23F0, 0x23F0}, {0x23F3, 0x23F3},
+	{0x25FD, 0x25FE}, {0x2614, 0x2615}, {0x2648, 0x2653},
+	{0x267F, 0x267F}, {0x2693, 0x2693}, {0x26A1, 0x26A1},
+	{0x26AA, 0x26AB}, {0x26BD, 0x26BE}, {0x26C4, 0x26C5},
+	{0x26CE, 0x26CE}, {0x26D4, 0x26D4}, {0x26EA, 0x26EA},
+	{0x26F2, 0x26F3}, {0x26F5, 0x26F5}, {0x26FA, 0x26FA},
+	{0x26FD, 0x26FD}, {0x2705, 0x2705}, {0x270A, 0x270B},
+	{0x2728, 0x2728}, {0x274C, 0x274C}, {0x274E, 0x274E},
+	{0x2753, 0x2755}, {0x2757, 0x2757}, {0x2795, 0x2797},
+	{0x27B0, 0x27B0}, {0x27BF, 0x27BF}, {0x2B1B, 0x2B1C},
+	{0x2B50, 0x2B50}, {0x2B55, 0x2B55}, {0x2E80, 0x2E99},
+	{0x2E9B, 0x2EF3}, {0x2F00, 0x2FD5}, {0x2FF0, 0x2FFB},
+	{0x3000, 0x303E}, {0x3041, 0x3096}, {0x3099, 0x30FF},
+	{0x3105, 0x312F}, {0x3131, 0x318E}, {0x3190, 0x31E3},
+	{0x31F0, 0x321E}, {0x3220, 0x3247}, {0x3250, 0x4DBF},
+	{0x4E00, 0xA48C}, {0xA490, 0xA4C6}, {0xA960, 0xA97C},
+	{0xAC00, 0xD7A3}, {0xF900, 0xFAFF}, {0xFE10, 0xFE19},
+	{0xFE30, 0xFE52}, {0xFE54, 0xFE66}, {0xFE68, 0xFE6B},
+	{0xFF01, 0xFF60}, {0xFFE0, 0xFFE6}, {0x16FE0, 0x16FE4},
+	{0x16FF0, 0x16FF1}, {0x17000, 0x187F7}, {0x18800, 0x18CD5},
+	{0x18D00, 0x18D08}, {0x1B000, 0x1B11E}, {0x1B150, 0x1B152},
+	{0x1B164, 0x1B167}, {0x1B170, 0x1B2FB}, {0x1F004, 0x1F004},
+	{0x1F0CF, 0x1F0CF}, {0x1F18E, 0x1F18E}, {0x1F191, 0x1F19A},
+	{0x1F200, 0x1F202}, {0x1F210, 0x1F23B}, {0x1F240, 0x1F248},
+	{0x1F250, 0x1F251}, {0x1F260, 0x1F265}, {0x1F300, 0x1F320},
+	{0x1F32D, 0x1F335}, {0x1F337, 0x1F37C}, {0x1F37E, 0x1F393},
+	{0x1F3A0, 0x1F3CA}, {0x1F3CF, 0x1F3D3}, {0x1F3E0, 0x1F3F0},
+	{0x1F3F4, 0x1F3F4}, {0x1F3F8, 0x1F43E}, {0x1F440, 0x1F440},
+	{0x1F442, 0x1F4FC}, {0x1F4FF, 0x1F53D}, {0x1F54B, 0x1F54E},
+	{0x1F550, 0x1F567}, {0x1F57A, 0x1F57A}, {0x1F595, 0x1F596},
+	{0x1F5A4, 0x1F5A4}, {0x1F5FB, 0x1F64F}, {0x1F680, 0x1F6C5},
+	{0x1F6CC, 0x1F6CC}, {0x1F6D0, 0x1F6D2}, {0x1F6D5, 0x1F6D7},
+	{0x1F6EB, 0x1F6EC}, {0x1F6F4, 0x1F6FC}, {0x1F7E0, 0x1F7EB},
+	{0x1F90C, 0x1F93A}, {0x1F93C, 0x1F945}, {0x1F947, 0x1F978},
+	{0x1F97A, 0x1F9CB}, {0x1F9CD, 0x1F9FF}, {0x1FA70, 0x1FA74},
+	{0x1FA78, 0x1FA7A}, {0x1FA80, 0x1FA86}, {0x1FA90, 0x1FAA8},
+	{0x1FAB0, 0x1FAB6}, {0x1FAC0, 0x1FAC2}, {0x1FAD0, 0x1FAD6},
+	{0x20000, 0x2FFFD}, {0x30000, 0x3FFFD},
+}
+
+var ambiguous = table{
+	{0x00A1, 0x00A1}, {0x00A4, 0x00A4}, {0x00A7, 0x00A8},
+	{0x00AA, 0x00AA}, {0x00AD, 0x00AE}, {0x00B0, 0x00B4},
+	{0x00B6, 0x00BA}, {0x00BC, 0x00BF}, {0x00C6, 0x00C6},
+	{0x00D0, 0x00D0}, {0x00D7, 0x00D8}, {0x00DE, 0x00E1},
+	{0x00E6, 0x00E6}, {0x00E8, 0x00EA}, {0x00EC, 0x00ED},
+	{0x00F0, 0x00F0}, {0x00F2, 0x00F3}, {0x00F7, 0x00FA},
+	{0x00FC, 0x00FC}, {0x00FE, 0x00FE}, {0x0101, 0x0101},
+	{0x0111, 0x0111}, {0x0113, 0x0113}, {0x011B, 0x011B},
+	{0x0126, 0x0127}, {0x012B, 0x012B}, {0x0131, 0x0133},
+	{0x0138, 0x0138}, {0x013F, 0x0142}, {0x0144, 0x0144},
+	{0x0148, 0x014B}, {0x014D, 0x014D}, {0x0152, 0x0153},
+	{0x0166, 0x0167}, {0x016B, 0x016B}, {0x01CE, 0x01CE},
+	{0x01D0, 0x01D0}, {0x01D2, 0x01D2}, {0x01D4, 0x01D4},
+	{0x01D6, 0x01D6}, {0x01D8, 0x01D8}, {0x01DA, 0x01DA},
+	{0x01DC, 0x01DC}, {0x0251, 0x0251}, {0x0261, 0x0261},
+	{0x02C4, 0x02C4}, {0x02C7, 0x02C7}, {0x02C9, 0x02CB},
+	{0x02CD, 0x02CD}, {0x02D0, 0x02D0}, {0x02D8, 0x02DB},
+	{0x02DD, 0x02DD}, {0x02DF, 0x02DF}, {0x0300, 0x036F},
+	{0x0391, 0x03A1}, {0x03A3, 0x03A9}, {0x03B1, 0x03C1},
+	{0x03C3, 0x03C9}, {0x0401, 0x0401}, {0x0410, 0x044F},
+	{0x0451, 0x0451}, {0x2010, 0x2010}, {0x2013, 0x2016},
+	{0x2018, 0x2019}, {0x201C, 0x201D}, {0x2020, 0x2022},
+	{0x2024, 0x2027}, {0x2030, 0x2030}, {0x2032, 0x2033},
+	{0x2035, 0x2035}, {0x203B, 0x203B}, {0x203E, 0x203E},
+	{0x2074, 0x2074}, {0x207F, 0x207F}, {0x2081, 0x2084},
+	{0x20AC, 0x20AC}, {0x2103, 0x2103}, {0x2105, 0x2105},
+	{0x2109, 0x2109}, {0x2113, 0x2113}, {0x2116, 0x2116},
+	{0x2121, 0x2122}, {0x2126, 0x2126}, {0x212B, 0x212B},
+	{0x2153, 0x2154}, {0x215B, 0x215E}, {0x2160, 0x216B},
+	{0x2170, 0x2179}, {0x2189, 0x2189}, {0x2190, 0x2199},
+	{0x21B8, 0x21B9}, {0x21D2, 0x21D2}, {0x21D4, 0x21D4},
+	{0x21E7, 0x21E7}, {0x2200, 0x2200}, {0x2202, 0x2203},
+	{0x2207, 0x2208}, {0x220B, 0x220B}, {0x220F, 0x220F},
+	{0x2211, 0x2211}, {0x2215, 0x2215}, {0x221A, 0x221A},
+	{0x221D, 0x2220}, {0x2223, 0x2223}, {0x2225, 0x2225},
+	{0x2227, 0x222C}, {0x222E, 0x222E}, {0x2234, 0x2237},
+	{0x223C, 0x223D}, {0x2248, 0x2248}, {0x224C, 0x224C},
+	{0x2252, 0x2252}, {0x2260, 0x2261}, {0x2264, 0x2267},
+	{0x226A, 0x226B}, {0x226E, 0x226F}, {0x2282, 0x2283},
+	{0x2286, 0x2287}, {0x2295, 0x2295}, {0x2299, 0x2299},
+	{0x22A5, 0x22A5}, {0x22BF, 0x22BF}, {0x2312, 0x2312},
+	{0x2460, 0x24E9}, {0x24EB, 0x254B}, {0x2550, 0x2573},
+	{0x2580, 0x258F}, {0x2592, 0x2595}, {0x25A0, 0x25A1},
+	{0x25A3, 0x25A9}, {0x25B2, 0x25B3}, {0x25B6, 0x25B7},
+	{0x25BC, 0x25BD}, {0x25C0, 0x25C1}, {0x25C6, 0x25C8},
+	{0x25CB, 0x25CB}, {0x25CE, 0x25D1}, {0x25E2, 0x25E5},
+	{0x25EF, 0x25EF}, {0x2605, 0x2606}, {0x2609, 0x2609},
+	{0x260E, 0x260F}, {0x261C, 0x261C}, {0x261E, 0x261E},
+	{0x2640, 0x2640}, {0x2642, 0x2642}, {0x2660, 0x2661},
+	{0x2663, 0x2665}, {0x2667, 0x266A}, {0x266C, 0x266D},
+	{0x266F, 0x266F}, {0x269E, 0x269F}, {0x26BF, 0x26BF},
+	{0x26C6, 0x26CD}, {0x26CF, 0x26D3}, {0x26D5, 0x26E1},
+	{0x26E3, 0x26E3}, {0x26E8, 0x26E9}, {0x26EB, 0x26F1},
+	{0x26F4, 0x26F4}, {0x26F6, 0x26F9}, {0x26FB, 0x26FC},
+	{0x26FE, 0x26FF}, {0x273D, 0x273D}, {0x2776, 0x277F},
+	{0x2B56, 0x2B59}, {0x3248, 0x324F}, {0xE000, 0xF8FF},
+	{0xFE00, 0xFE0F}, {0xFFFD, 0xFFFD}, {0x1F100, 0x1F10A},
+	{0x1F110, 0x1F12D}, {0x1F130, 0x1F169}, {0x1F170, 0x1F18D},
+	{0x1F18F, 0x1F190}, {0x1F19B, 0x1F1AC}, {0xE0100, 0xE01EF},
+	{0xF0000, 0xFFFFD}, {0x100000, 0x10FFFD},
+}
+var narrow = table{
+	{0x0020, 0x007E}, {0x00A2, 0x00A3}, {0x00A5, 0x00A6},
+	{0x00AC, 0x00AC}, {0x00AF, 0x00AF}, {0x27E6, 0x27ED},
+	{0x2985, 0x2986},
+}
+
+var neutral = table{
+	{0x0000, 0x001F}, {0x007F, 0x00A0}, {0x00A9, 0x00A9},
+	{0x00AB, 0x00AB}, {0x00B5, 0x00B5}, {0x00BB, 0x00BB},
+	{0x00C0, 0x00C5}, {0x00C7, 0x00CF}, {0x00D1, 0x00D6},
+	{0x00D9, 0x00DD}, {0x00E2, 0x00E5}, {0x00E7, 0x00E7},
+	{0x00EB, 0x00EB}, {0x00EE, 0x00EF}, {0x00F1, 0x00F1},
+	{0x00F4, 0x00F6}, {0x00FB, 0x00FB}, {0x00FD, 0x00FD},
+	{0x00FF, 0x0100}, {0x0102, 0x0110}, {0x0112, 0x0112},
+	{0x0114, 0x011A}, {0x011C, 0x0125}, {0x0128, 0x012A},
+	{0x012C, 0x0130}, {0x0134, 0x0137}, {0x0139, 0x013E},
+	{0x0143, 0x0143}, {0x0145, 0x0147}, {0x014C, 0x014C},
+	{0x014E, 0x0151}, {0x0154, 0x0165}, {0x0168, 0x016A},
+	{0x016C, 0x01CD}, {0x01CF, 0x01CF}, {0x01D1, 0x01D1},
+	{0x01D3, 0x01D3}, {0x01D5, 0x01D5}, {0x01D7, 0x01D7},
+	{0x01D9, 0x01D9}, {0x01DB, 0x01DB}, {0x01DD, 0x0250},
+	{0x0252, 0x0260}, {0x0262, 0x02C3}, {0x02C5, 0x02C6},
+	{0x02C8, 0x02C8}, {0x02CC, 0x02CC}, {0x02CE, 0x02CF},
+	{0x02D1, 0x02D7}, {0x02DC, 0x02DC}, {0x02DE, 0x02DE},
+	{0x02E0, 0x02FF}, {0x0370, 0x0377}, {0x037A, 0x037F},
+	{0x0384, 0x038A}, {0x038C, 0x038C}, {0x038E, 0x0390},
+	{0x03AA, 0x03B0}, {0x03C2, 0x03C2}, {0x03CA, 0x0400},
+	{0x0402, 0x040F}, {0x0450, 0x0450}, {0x0452, 0x052F},
+	{0x0531, 0x0556}, {0x0559, 0x058A}, {0x058D, 0x058F},
+	{0x0591, 0x05C7}, {0x05D0, 0x05EA}, {0x05EF, 0x05F4},
+	{0x0600, 0x061C}, {0x061E, 0x070D}, {0x070F, 0x074A},
+	{0x074D, 0x07B1}, {0x07C0, 0x07FA}, {0x07FD, 0x082D},
+	{0x0830, 0x083E}, {0x0840, 0x085B}, {0x085E, 0x085E},
+	{0x0860, 0x086A}, {0x08A0, 0x08B4}, {0x08B6, 0x08C7},
+	{0x08D3, 0x0983}, {0x0985, 0x098C}, {0x098F, 0x0990},
+	{0x0993, 0x09A8}, {0x09AA, 0x09B0}, {0x09B2, 0x09B2},
+	{0x09B6, 0x09B9}, {0x09BC, 0x09C4}, {0x09C7, 0x09C8},
+	{0x09CB, 0x09CE}, {0x09D7, 0x09D7}, {0x09DC, 0x09DD},
+	{0x09DF, 0x09E3}, {0x09E6, 0x09FE}, {0x0A01, 0x0A03},
+	{0x0A05, 0x0A0A}, {0x0A0F, 0x0A10}, {0x0A13, 0x0A28},
+	{0x0A2A, 0x0A30}, {0x0A32, 0x0A33}, {0x0A35, 0x0A36},
+	{0x0A38, 0x0A39}, {0x0A3C, 0x0A3C}, {0x0A3E, 0x0A42},
+	{0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, {0x0A51, 0x0A51},
+	{0x0A59, 0x0A5C}, {0x0A5E, 0x0A5E}, {0x0A66, 0x0A76},
+	{0x0A81, 0x0A83}, {0x0A85, 0x0A8D}, {0x0A8F, 0x0A91},
+	{0x0A93, 0x0AA8}, {0x0AAA, 0x0AB0}, {0x0AB2, 0x0AB3},
+	{0x0AB5, 0x0AB9}, {0x0ABC, 0x0AC5}, {0x0AC7, 0x0AC9},
+	{0x0ACB, 0x0ACD}, {0x0AD0, 0x0AD0}, {0x0AE0, 0x0AE3},
+	{0x0AE6, 0x0AF1}, {0x0AF9, 0x0AFF}, {0x0B01, 0x0B03},
+	{0x0B05, 0x0B0C}, {0x0B0F, 0x0B10}, {0x0B13, 0x0B28},
+	{0x0B2A, 0x0B30}, {0x0B32, 0x0B33}, {0x0B35, 0x0B39},
+	{0x0B3C, 0x0B44}, {0x0B47, 0x0B48}, {0x0B4B, 0x0B4D},
+	{0x0B55, 0x0B57}, {0x0B5C, 0x0B5D}, {0x0B5F, 0x0B63},
+	{0x0B66, 0x0B77}, {0x0B82, 0x0B83}, {0x0B85, 0x0B8A},
+	{0x0B8E, 0x0B90}, {0x0B92, 0x0B95}, {0x0B99, 0x0B9A},
+	{0x0B9C, 0x0B9C}, {0x0B9E, 0x0B9F}, {0x0BA3, 0x0BA4},
+	{0x0BA8, 0x0BAA}, {0x0BAE, 0x0BB9}, {0x0BBE, 0x0BC2},
+	{0x0BC6, 0x0BC8}, {0x0BCA, 0x0BCD}, {0x0BD0, 0x0BD0},
+	{0x0BD7, 0x0BD7}, {0x0BE6, 0x0BFA}, {0x0C00, 0x0C0C},
+	{0x0C0E, 0x0C10}, {0x0C12, 0x0C28}, {0x0C2A, 0x0C39},
+	{0x0C3D, 0x0C44}, {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D},
+	{0x0C55, 0x0C56}, {0x0C58, 0x0C5A}, {0x0C60, 0x0C63},
+	{0x0C66, 0x0C6F}, {0x0C77, 0x0C8C}, {0x0C8E, 0x0C90},
+	{0x0C92, 0x0CA8}, {0x0CAA, 0x0CB3}, {0x0CB5, 0x0CB9},
+	{0x0CBC, 0x0CC4}, {0x0CC6, 0x0CC8}, {0x0CCA, 0x0CCD},
+	{0x0CD5, 0x0CD6}, {0x0CDE, 0x0CDE}, {0x0CE0, 0x0CE3},
+	{0x0CE6, 0x0CEF}, {0x0CF1, 0x0CF2}, {0x0D00, 0x0D0C},
+	{0x0D0E, 0x0D10}, {0x0D12, 0x0D44}, {0x0D46, 0x0D48},
+	{0x0D4A, 0x0D4F}, {0x0D54, 0x0D63}, {0x0D66, 0x0D7F},
+	{0x0D81, 0x0D83}, {0x0D85, 0x0D96}, {0x0D9A, 0x0DB1},
+	{0x0DB3, 0x0DBB}, {0x0DBD, 0x0DBD}, {0x0DC0, 0x0DC6},
+	{0x0DCA, 0x0DCA}, {0x0DCF, 0x0DD4}, {0x0DD6, 0x0DD6},
+	{0x0DD8, 0x0DDF}, {0x0DE6, 0x0DEF}, {0x0DF2, 0x0DF4},
+	{0x0E01, 0x0E3A}, {0x0E3F, 0x0E5B}, {0x0E81, 0x0E82},
+	{0x0E84, 0x0E84}, {0x0E86, 0x0E8A}, {0x0E8C, 0x0EA3},
+	{0x0EA5, 0x0EA5}, {0x0EA7, 0x0EBD}, {0x0EC0, 0x0EC4},
+	{0x0EC6, 0x0EC6}, {0x0EC8, 0x0ECD}, {0x0ED0, 0x0ED9},
+	{0x0EDC, 0x0EDF}, {0x0F00, 0x0F47}, {0x0F49, 0x0F6C},
+	{0x0F71, 0x0F97}, {0x0F99, 0x0FBC}, {0x0FBE, 0x0FCC},
+	{0x0FCE, 0x0FDA}, {0x1000, 0x10C5}, {0x10C7, 0x10C7},
+	{0x10CD, 0x10CD}, {0x10D0, 0x10FF}, {0x1160, 0x1248},
+	{0x124A, 0x124D}, {0x1250, 0x1256}, {0x1258, 0x1258},
+	{0x125A, 0x125D}, {0x1260, 0x1288}, {0x128A, 0x128D},
+	{0x1290, 0x12B0}, {0x12B2, 0x12B5}, {0x12B8, 0x12BE},
+	{0x12C0, 0x12C0}, {0x12C2, 0x12C5}, {0x12C8, 0x12D6},
+	{0x12D8, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x135A},
+	{0x135D, 0x137C}, {0x1380, 0x1399}, {0x13A0, 0x13F5},
+	{0x13F8, 0x13FD}, {0x1400, 0x169C}, {0x16A0, 0x16F8},
+	{0x1700, 0x170C}, {0x170E, 0x1714}, {0x1720, 0x1736},
+	{0x1740, 0x1753}, {0x1760, 0x176C}, {0x176E, 0x1770},
+	{0x1772, 0x1773}, {0x1780, 0x17DD}, {0x17E0, 0x17E9},
+	{0x17F0, 0x17F9}, {0x1800, 0x180E}, {0x1810, 0x1819},
+	{0x1820, 0x1878}, {0x1880, 0x18AA}, {0x18B0, 0x18F5},
+	{0x1900, 0x191E}, {0x1920, 0x192B}, {0x1930, 0x193B},
+	{0x1940, 0x1940}, {0x1944, 0x196D}, {0x1970, 0x1974},
+	{0x1980, 0x19AB}, {0x19B0, 0x19C9}, {0x19D0, 0x19DA},
+	{0x19DE, 0x1A1B}, {0x1A1E, 0x1A5E}, {0x1A60, 0x1A7C},
+	{0x1A7F, 0x1A89}, {0x1A90, 0x1A99}, {0x1AA0, 0x1AAD},
+	{0x1AB0, 0x1AC0}, {0x1B00, 0x1B4B}, {0x1B50, 0x1B7C},
+	{0x1B80, 0x1BF3}, {0x1BFC, 0x1C37}, {0x1C3B, 0x1C49},
+	{0x1C4D, 0x1C88}, {0x1C90, 0x1CBA}, {0x1CBD, 0x1CC7},
+	{0x1CD0, 0x1CFA}, {0x1D00, 0x1DF9}, {0x1DFB, 0x1F15},
+	{0x1F18, 0x1F1D}, {0x1F20, 0x1F45}, {0x1F48, 0x1F4D},
+	{0x1F50, 0x1F57}, {0x1F59, 0x1F59}, {0x1F5B, 0x1F5B},
+	{0x1F5D, 0x1F5D}, {0x1F5F, 0x1F7D}, {0x1F80, 0x1FB4},
+	{0x1FB6, 0x1FC4}, {0x1FC6, 0x1FD3}, {0x1FD6, 0x1FDB},
+	{0x1FDD, 0x1FEF}, {0x1FF2, 0x1FF4}, {0x1FF6, 0x1FFE},
+	{0x2000, 0x200F}, {0x2011, 0x2012}, {0x2017, 0x2017},
+	{0x201A, 0x201B}, {0x201E, 0x201F}, {0x2023, 0x2023},
+	{0x2028, 0x202F}, {0x2031, 0x2031}, {0x2034, 0x2034},
+	{0x2036, 0x203A}, {0x203C, 0x203D}, {0x203F, 0x2064},
+	{0x2066, 0x2071}, {0x2075, 0x207E}, {0x2080, 0x2080},
+	{0x2085, 0x208E}, {0x2090, 0x209C}, {0x20A0, 0x20A8},
+	{0x20AA, 0x20AB}, {0x20AD, 0x20BF}, {0x20D0, 0x20F0},
+	{0x2100, 0x2102}, {0x2104, 0x2104}, {0x2106, 0x2108},
+	{0x210A, 0x2112}, {0x2114, 0x2115}, {0x2117, 0x2120},
+	{0x2123, 0x2125}, {0x2127, 0x212A}, {0x212C, 0x2152},
+	{0x2155, 0x215A}, {0x215F, 0x215F}, {0x216C, 0x216F},
+	{0x217A, 0x2188}, {0x218A, 0x218B}, {0x219A, 0x21B7},
+	{0x21BA, 0x21D1}, {0x21D3, 0x21D3}, {0x21D5, 0x21E6},
+	{0x21E8, 0x21FF}, {0x2201, 0x2201}, {0x2204, 0x2206},
+	{0x2209, 0x220A}, {0x220C, 0x220E}, {0x2210, 0x2210},
+	{0x2212, 0x2214}, {0x2216, 0x2219}, {0x221B, 0x221C},
+	{0x2221, 0x2222}, {0x2224, 0x2224}, {0x2226, 0x2226},
+	{0x222D, 0x222D}, {0x222F, 0x2233}, {0x2238, 0x223B},
+	{0x223E, 0x2247}, {0x2249, 0x224B}, {0x224D, 0x2251},
+	{0x2253, 0x225F}, {0x2262, 0x2263}, {0x2268, 0x2269},
+	{0x226C, 0x226D}, {0x2270, 0x2281}, {0x2284, 0x2285},
+	{0x2288, 0x2294}, {0x2296, 0x2298}, {0x229A, 0x22A4},
+	{0x22A6, 0x22BE}, {0x22C0, 0x2311}, {0x2313, 0x2319},
+	{0x231C, 0x2328}, {0x232B, 0x23E8}, {0x23ED, 0x23EF},
+	{0x23F1, 0x23F2}, {0x23F4, 0x2426}, {0x2440, 0x244A},
+	{0x24EA, 0x24EA}, {0x254C, 0x254F}, {0x2574, 0x257F},
+	{0x2590, 0x2591}, {0x2596, 0x259F}, {0x25A2, 0x25A2},
+	{0x25AA, 0x25B1}, {0x25B4, 0x25B5}, {0x25B8, 0x25BB},
+	{0x25BE, 0x25BF}, {0x25C2, 0x25C5}, {0x25C9, 0x25CA},
+	{0x25CC, 0x25CD}, {0x25D2, 0x25E1}, {0x25E6, 0x25EE},
+	{0x25F0, 0x25FC}, {0x25FF, 0x2604}, {0x2607, 0x2608},
+	{0x260A, 0x260D}, {0x2610, 0x2613}, {0x2616, 0x261B},
+	{0x261D, 0x261D}, {0x261F, 0x263F}, {0x2641, 0x2641},
+	{0x2643, 0x2647}, {0x2654, 0x265F}, {0x2662, 0x2662},
+	{0x2666, 0x2666}, {0x266B, 0x266B}, {0x266E, 0x266E},
+	{0x2670, 0x267E}, {0x2680, 0x2692}, {0x2694, 0x269D},
+	{0x26A0, 0x26A0}, {0x26A2, 0x26A9}, {0x26AC, 0x26BC},
+	{0x26C0, 0x26C3}, {0x26E2, 0x26E2}, {0x26E4, 0x26E7},
+	{0x2700, 0x2704}, {0x2706, 0x2709}, {0x270C, 0x2727},
+	{0x2729, 0x273C}, {0x273E, 0x274B}, {0x274D, 0x274D},
+	{0x274F, 0x2752}, {0x2756, 0x2756}, {0x2758, 0x2775},
+	{0x2780, 0x2794}, {0x2798, 0x27AF}, {0x27B1, 0x27BE},
+	{0x27C0, 0x27E5}, {0x27EE, 0x2984}, {0x2987, 0x2B1A},
+	{0x2B1D, 0x2B4F}, {0x2B51, 0x2B54}, {0x2B5A, 0x2B73},
+	{0x2B76, 0x2B95}, {0x2B97, 0x2C2E}, {0x2C30, 0x2C5E},
+	{0x2C60, 0x2CF3}, {0x2CF9, 0x2D25}, {0x2D27, 0x2D27},
+	{0x2D2D, 0x2D2D}, {0x2D30, 0x2D67}, {0x2D6F, 0x2D70},
+	{0x2D7F, 0x2D96}, {0x2DA0, 0x2DA6}, {0x2DA8, 0x2DAE},
+	{0x2DB0, 0x2DB6}, {0x2DB8, 0x2DBE}, {0x2DC0, 0x2DC6},
+	{0x2DC8, 0x2DCE}, {0x2DD0, 0x2DD6}, {0x2DD8, 0x2DDE},
+	{0x2DE0, 0x2E52}, {0x303F, 0x303F}, {0x4DC0, 0x4DFF},
+	{0xA4D0, 0xA62B}, {0xA640, 0xA6F7}, {0xA700, 0xA7BF},
+	{0xA7C2, 0xA7CA}, {0xA7F5, 0xA82C}, {0xA830, 0xA839},
+	{0xA840, 0xA877}, {0xA880, 0xA8C5}, {0xA8CE, 0xA8D9},
+	{0xA8E0, 0xA953}, {0xA95F, 0xA95F}, {0xA980, 0xA9CD},
+	{0xA9CF, 0xA9D9}, {0xA9DE, 0xA9FE}, {0xAA00, 0xAA36},
+	{0xAA40, 0xAA4D}, {0xAA50, 0xAA59}, {0xAA5C, 0xAAC2},
+	{0xAADB, 0xAAF6}, {0xAB01, 0xAB06}, {0xAB09, 0xAB0E},
+	{0xAB11, 0xAB16}, {0xAB20, 0xAB26}, {0xAB28, 0xAB2E},
+	{0xAB30, 0xAB6B}, {0xAB70, 0xABED}, {0xABF0, 0xABF9},
+	{0xD7B0, 0xD7C6}, {0xD7CB, 0xD7FB}, {0xD800, 0xDFFF},
+	{0xFB00, 0xFB06}, {0xFB13, 0xFB17}, {0xFB1D, 0xFB36},
+	{0xFB38, 0xFB3C}, {0xFB3E, 0xFB3E}, {0xFB40, 0xFB41},
+	{0xFB43, 0xFB44}, {0xFB46, 0xFBC1}, {0xFBD3, 0xFD3F},
+	{0xFD50, 0xFD8F}, {0xFD92, 0xFDC7}, {0xFDF0, 0xFDFD},
+	{0xFE20, 0xFE2F}, {0xFE70, 0xFE74}, {0xFE76, 0xFEFC},
+	{0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFC}, {0x10000, 0x1000B},
+	{0x1000D, 0x10026}, {0x10028, 0x1003A}, {0x1003C, 0x1003D},
+	{0x1003F, 0x1004D}, {0x10050, 0x1005D}, {0x10080, 0x100FA},
+	{0x10100, 0x10102}, {0x10107, 0x10133}, {0x10137, 0x1018E},
+	{0x10190, 0x1019C}, {0x101A0, 0x101A0}, {0x101D0, 0x101FD},
+	{0x10280, 0x1029C}, {0x102A0, 0x102D0}, {0x102E0, 0x102FB},
+	{0x10300, 0x10323}, {0x1032D, 0x1034A}, {0x10350, 0x1037A},
+	{0x10380, 0x1039D}, {0x1039F, 0x103C3}, {0x103C8, 0x103D5},
+	{0x10400, 0x1049D}, {0x104A0, 0x104A9}, {0x104B0, 0x104D3},
+	{0x104D8, 0x104FB}, {0x10500, 0x10527}, {0x10530, 0x10563},
+	{0x1056F, 0x1056F}, {0x10600, 0x10736}, {0x10740, 0x10755},
+	{0x10760, 0x10767}, {0x10800, 0x10805}, {0x10808, 0x10808},
+	{0x1080A, 0x10835}, {0x10837, 0x10838}, {0x1083C, 0x1083C},
+	{0x1083F, 0x10855}, {0x10857, 0x1089E}, {0x108A7, 0x108AF},
+	{0x108E0, 0x108F2}, {0x108F4, 0x108F5}, {0x108FB, 0x1091B},
+	{0x1091F, 0x10939}, {0x1093F, 0x1093F}, {0x10980, 0x109B7},
+	{0x109BC, 0x109CF}, {0x109D2, 0x10A03}, {0x10A05, 0x10A06},
+	{0x10A0C, 0x10A13}, {0x10A15, 0x10A17}, {0x10A19, 0x10A35},
+	{0x10A38, 0x10A3A}, {0x10A3F, 0x10A48}, {0x10A50, 0x10A58},
+	{0x10A60, 0x10A9F}, {0x10AC0, 0x10AE6}, {0x10AEB, 0x10AF6},
+	{0x10B00, 0x10B35}, {0x10B39, 0x10B55}, {0x10B58, 0x10B72},
+	{0x10B78, 0x10B91}, {0x10B99, 0x10B9C}, {0x10BA9, 0x10BAF},
+	{0x10C00, 0x10C48}, {0x10C80, 0x10CB2}, {0x10CC0, 0x10CF2},
+	{0x10CFA, 0x10D27}, {0x10D30, 0x10D39}, {0x10E60, 0x10E7E},
+	{0x10E80, 0x10EA9}, {0x10EAB, 0x10EAD}, {0x10EB0, 0x10EB1},
+	{0x10F00, 0x10F27}, {0x10F30, 0x10F59}, {0x10FB0, 0x10FCB},
+	{0x10FE0, 0x10FF6}, {0x11000, 0x1104D}, {0x11052, 0x1106F},
+	{0x1107F, 0x110C1}, {0x110CD, 0x110CD}, {0x110D0, 0x110E8},
+	{0x110F0, 0x110F9}, {0x11100, 0x11134}, {0x11136, 0x11147},
+	{0x11150, 0x11176}, {0x11180, 0x111DF}, {0x111E1, 0x111F4},
+	{0x11200, 0x11211}, {0x11213, 0x1123E}, {0x11280, 0x11286},
+	{0x11288, 0x11288}, {0x1128A, 0x1128D}, {0x1128F, 0x1129D},
+	{0x1129F, 0x112A9}, {0x112B0, 0x112EA}, {0x112F0, 0x112F9},
+	{0x11300, 0x11303}, {0x11305, 0x1130C}, {0x1130F, 0x11310},
+	{0x11313, 0x11328}, {0x1132A, 0x11330}, {0x11332, 0x11333},
+	{0x11335, 0x11339}, {0x1133B, 0x11344}, {0x11347, 0x11348},
+	{0x1134B, 0x1134D}, {0x11350, 0x11350}, {0x11357, 0x11357},
+	{0x1135D, 0x11363}, {0x11366, 0x1136C}, {0x11370, 0x11374},
+	{0x11400, 0x1145B}, {0x1145D, 0x11461}, {0x11480, 0x114C7},
+	{0x114D0, 0x114D9}, {0x11580, 0x115B5}, {0x115B8, 0x115DD},
+	{0x11600, 0x11644}, {0x11650, 0x11659}, {0x11660, 0x1166C},
+	{0x11680, 0x116B8}, {0x116C0, 0x116C9}, {0x11700, 0x1171A},
+	{0x1171D, 0x1172B}, {0x11730, 0x1173F}, {0x11800, 0x1183B},
+	{0x118A0, 0x118F2}, {0x118FF, 0x11906}, {0x11909, 0x11909},
+	{0x1190C, 0x11913}, {0x11915, 0x11916}, {0x11918, 0x11935},
+	{0x11937, 0x11938}, {0x1193B, 0x11946}, {0x11950, 0x11959},
+	{0x119A0, 0x119A7}, {0x119AA, 0x119D7}, {0x119DA, 0x119E4},
+	{0x11A00, 0x11A47}, {0x11A50, 0x11AA2}, {0x11AC0, 0x11AF8},
+	{0x11C00, 0x11C08}, {0x11C0A, 0x11C36}, {0x11C38, 0x11C45},
+	{0x11C50, 0x11C6C}, {0x11C70, 0x11C8F}, {0x11C92, 0x11CA7},
+	{0x11CA9, 0x11CB6}, {0x11D00, 0x11D06}, {0x11D08, 0x11D09},
+	{0x11D0B, 0x11D36}, {0x11D3A, 0x11D3A}, {0x11D3C, 0x11D3D},
+	{0x11D3F, 0x11D47}, {0x11D50, 0x11D59}, {0x11D60, 0x11D65},
+	{0x11D67, 0x11D68}, {0x11D6A, 0x11D8E}, {0x11D90, 0x11D91},
+	{0x11D93, 0x11D98}, {0x11DA0, 0x11DA9}, {0x11EE0, 0x11EF8},
+	{0x11FB0, 0x11FB0}, {0x11FC0, 0x11FF1}, {0x11FFF, 0x12399},
+	{0x12400, 0x1246E}, {0x12470, 0x12474}, {0x12480, 0x12543},
+	{0x13000, 0x1342E}, {0x13430, 0x13438}, {0x14400, 0x14646},
+	{0x16800, 0x16A38}, {0x16A40, 0x16A5E}, {0x16A60, 0x16A69},
+	{0x16A6E, 0x16A6F}, {0x16AD0, 0x16AED}, {0x16AF0, 0x16AF5},
+	{0x16B00, 0x16B45}, {0x16B50, 0x16B59}, {0x16B5B, 0x16B61},
+	{0x16B63, 0x16B77}, {0x16B7D, 0x16B8F}, {0x16E40, 0x16E9A},
+	{0x16F00, 0x16F4A}, {0x16F4F, 0x16F87}, {0x16F8F, 0x16F9F},
+	{0x1BC00, 0x1BC6A}, {0x1BC70, 0x1BC7C}, {0x1BC80, 0x1BC88},
+	{0x1BC90, 0x1BC99}, {0x1BC9C, 0x1BCA3}, {0x1D000, 0x1D0F5},
+	{0x1D100, 0x1D126}, {0x1D129, 0x1D1E8}, {0x1D200, 0x1D245},
+	{0x1D2E0, 0x1D2F3}, {0x1D300, 0x1D356}, {0x1D360, 0x1D378},
+	{0x1D400, 0x1D454}, {0x1D456, 0x1D49C}, {0x1D49E, 0x1D49F},
+	{0x1D4A2, 0x1D4A2}, {0x1D4A5, 0x1D4A6}, {0x1D4A9, 0x1D4AC},
+	{0x1D4AE, 0x1D4B9}, {0x1D4BB, 0x1D4BB}, {0x1D4BD, 0x1D4C3},
+	{0x1D4C5, 0x1D505}, {0x1D507, 0x1D50A}, {0x1D50D, 0x1D514},
+	{0x1D516, 0x1D51C}, {0x1D51E, 0x1D539}, {0x1D53B, 0x1D53E},
+	{0x1D540, 0x1D544}, {0x1D546, 0x1D546}, {0x1D54A, 0x1D550},
+	{0x1D552, 0x1D6A5}, {0x1D6A8, 0x1D7CB}, {0x1D7CE, 0x1DA8B},
+	{0x1DA9B, 0x1DA9F}, {0x1DAA1, 0x1DAAF}, {0x1E000, 0x1E006},
+	{0x1E008, 0x1E018}, {0x1E01B, 0x1E021}, {0x1E023, 0x1E024},
+	{0x1E026, 0x1E02A}, {0x1E100, 0x1E12C}, {0x1E130, 0x1E13D},
+	{0x1E140, 0x1E149}, {0x1E14E, 0x1E14F}, {0x1E2C0, 0x1E2F9},
+	{0x1E2FF, 0x1E2FF}, {0x1E800, 0x1E8C4}, {0x1E8C7, 0x1E8D6},
+	{0x1E900, 0x1E94B}, {0x1E950, 0x1E959}, {0x1E95E, 0x1E95F},
+	{0x1EC71, 0x1ECB4}, {0x1ED01, 0x1ED3D}, {0x1EE00, 0x1EE03},
+	{0x1EE05, 0x1EE1F}, {0x1EE21, 0x1EE22}, {0x1EE24, 0x1EE24},
+	{0x1EE27, 0x1EE27}, {0x1EE29, 0x1EE32}, {0x1EE34, 0x1EE37},
+	{0x1EE39, 0x1EE39}, {0x1EE3B, 0x1EE3B}, {0x1EE42, 0x1EE42},
+	{0x1EE47, 0x1EE47}, {0x1EE49, 0x1EE49}, {0x1EE4B, 0x1EE4B},
+	{0x1EE4D, 0x1EE4F}, {0x1EE51, 0x1EE52}, {0x1EE54, 0x1EE54},
+	{0x1EE57, 0x1EE57}, {0x1EE59, 0x1EE59}, {0x1EE5B, 0x1EE5B},
+	{0x1EE5D, 0x1EE5D}, {0x1EE5F, 0x1EE5F}, {0x1EE61, 0x1EE62},
+	{0x1EE64, 0x1EE64}, {0x1EE67, 0x1EE6A}, {0x1EE6C, 0x1EE72},
+	{0x1EE74, 0x1EE77}, {0x1EE79, 0x1EE7C}, {0x1EE7E, 0x1EE7E},
+	{0x1EE80, 0x1EE89}, {0x1EE8B, 0x1EE9B}, {0x1EEA1, 0x1EEA3},
+	{0x1EEA5, 0x1EEA9}, {0x1EEAB, 0x1EEBB}, {0x1EEF0, 0x1EEF1},
+	{0x1F000, 0x1F003}, {0x1F005, 0x1F02B}, {0x1F030, 0x1F093},
+	{0x1F0A0, 0x1F0AE}, {0x1F0B1, 0x1F0BF}, {0x1F0C1, 0x1F0CE},
+	{0x1F0D1, 0x1F0F5}, {0x1F10B, 0x1F10F}, {0x1F12E, 0x1F12F},
+	{0x1F16A, 0x1F16F}, {0x1F1AD, 0x1F1AD}, {0x1F1E6, 0x1F1FF},
+	{0x1F321, 0x1F32C}, {0x1F336, 0x1F336}, {0x1F37D, 0x1F37D},
+	{0x1F394, 0x1F39F}, {0x1F3CB, 0x1F3CE}, {0x1F3D4, 0x1F3DF},
+	{0x1F3F1, 0x1F3F3}, {0x1F3F5, 0x1F3F7}, {0x1F43F, 0x1F43F},
+	{0x1F441, 0x1F441}, {0x1F4FD, 0x1F4FE}, {0x1F53E, 0x1F54A},
+	{0x1F54F, 0x1F54F}, {0x1F568, 0x1F579}, {0x1F57B, 0x1F594},
+	{0x1F597, 0x1F5A3}, {0x1F5A5, 0x1F5FA}, {0x1F650, 0x1F67F},
+	{0x1F6C6, 0x1F6CB}, {0x1F6CD, 0x1F6CF}, {0x1F6D3, 0x1F6D4},
+	{0x1F6E0, 0x1F6EA}, {0x1F6F0, 0x1F6F3}, {0x1F700, 0x1F773},
+	{0x1F780, 0x1F7D8}, {0x1F800, 0x1F80B}, {0x1F810, 0x1F847},
+	{0x1F850, 0x1F859}, {0x1F860, 0x1F887}, {0x1F890, 0x1F8AD},
+	{0x1F8B0, 0x1F8B1}, {0x1F900, 0x1F90B}, {0x1F93B, 0x1F93B},
+	{0x1F946, 0x1F946}, {0x1FA00, 0x1FA53}, {0x1FA60, 0x1FA6D},
+	{0x1FB00, 0x1FB92}, {0x1FB94, 0x1FBCA}, {0x1FBF0, 0x1FBF9},
+	{0xE0001, 0xE0001}, {0xE0020, 0xE007F},
+}
+
+var emoji = table{
+	{0x203C, 0x203C}, {0x2049, 0x2049}, {0x2122, 0x2122},
+	{0x2139, 0x2139}, {0x2194, 0x2199}, {0x21A9, 0x21AA},
+	{0x231A, 0x231B}, {0x2328, 0x2328}, {0x2388, 0x2388},
+	{0x23CF, 0x23CF}, {0x23E9, 0x23F3}, {0x23F8, 0x23FA},
+	{0x24C2, 0x24C2}, {0x25AA, 0x25AB}, {0x25B6, 0x25B6},
+	{0x25C0, 0x25C0}, {0x25FB, 0x25FE}, {0x2600, 0x2605},
+	{0x2607, 0x2612}, {0x2614, 0x2685}, {0x2690, 0x2705},
+	{0x2708, 0x2712}, {0x2714, 0x2714}, {0x2716, 0x2716},
+	{0x271D, 0x271D}, {0x2721, 0x2721}, {0x2728, 0x2728},
+	{0x2733, 0x2734}, {0x2744, 0x2744}, {0x2747, 0x2747},
+	{0x274C, 0x274C}, {0x274E, 0x274E}, {0x2753, 0x2755},
+	{0x2757, 0x2757}, {0x2763, 0x2767}, {0x2795, 0x2797},
+	{0x27A1, 0x27A1}, {0x27B0, 0x27B0}, {0x27BF, 0x27BF},
+	{0x2934, 0x2935}, {0x2B05, 0x2B07}, {0x2B1B, 0x2B1C},
+	{0x2B50, 0x2B50}, {0x2B55, 0x2B55}, {0x3030, 0x3030},
+	{0x303D, 0x303D}, {0x3297, 0x3297}, {0x3299, 0x3299},
+	{0x1F000, 0x1F0FF}, {0x1F10D, 0x1F10F}, {0x1F12F, 0x1F12F},
+	{0x1F16C, 0x1F171}, {0x1F17E, 0x1F17F}, {0x1F18E, 0x1F18E},
+	{0x1F191, 0x1F19A}, {0x1F1AD, 0x1F1E5}, {0x1F201, 0x1F20F},
+	{0x1F21A, 0x1F21A}, {0x1F22F, 0x1F22F}, {0x1F232, 0x1F23A},
+	{0x1F23C, 0x1F23F}, {0x1F249, 0x1F3FA}, {0x1F400, 0x1F53D},
+	{0x1F546, 0x1F64F}, {0x1F680, 0x1F6FF}, {0x1F774, 0x1F77F},
+	{0x1F7D5, 0x1F7FF}, {0x1F80C, 0x1F80F}, {0x1F848, 0x1F84F},
+	{0x1F85A, 0x1F85F}, {0x1F888, 0x1F88F}, {0x1F8AE, 0x1F8FF},
+	{0x1F90C, 0x1F93A}, {0x1F93C, 0x1F945}, {0x1F947, 0x1FAFF},
+	{0x1FC00, 0x1FFFD},
+}
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_windows.go b/vendor/github.com/mattn/go-runewidth/runewidth_windows.go
index 0258876..5f987a3 100644
--- a/vendor/github.com/mattn/go-runewidth/runewidth_windows.go
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_windows.go
@@ -1,3 +1,6 @@
+//go:build windows && !appengine
+// +build windows,!appengine
+
 package runewidth
 
 import (
diff --git a/vendor/github.com/mitchellh/go-homedir/homedir.go b/vendor/github.com/mitchellh/go-homedir/homedir.go
index fb87bef..2537853 100644
--- a/vendor/github.com/mitchellh/go-homedir/homedir.go
+++ b/vendor/github.com/mitchellh/go-homedir/homedir.go
@@ -76,6 +76,16 @@ func Expand(path string) (string, error) {
 	return filepath.Join(dir, path[1:]), nil
 }
 
+// Reset clears the cache, forcing the next call to Dir to re-detect
+// the home directory. This generally never has to be called, but can be
+// useful in tests if you're modifying the home directory via the HOME
+// env var or something.
+func Reset() {
+	cacheLock.Lock()
+	defer cacheLock.Unlock()
+	homedirCache = ""
+}
+
 func dirUnix() (string, error) {
 	homeEnv := "HOME"
 	if runtime.GOOS == "plan9" {
diff --git a/vendor/github.com/olekukonko/tablewriter/.travis.yml b/vendor/github.com/olekukonko/tablewriter/.travis.yml
index 9c64270..366d48a 100644
--- a/vendor/github.com/olekukonko/tablewriter/.travis.yml
+++ b/vendor/github.com/olekukonko/tablewriter/.travis.yml
@@ -1,8 +1,8 @@
 language: go
-
+arch:
+   - ppc64le
+   - amd64
 go:
-  - 1.1
-  - 1.2
   - 1.3
   - 1.4
   - 1.5
@@ -12,3 +12,11 @@ go:
   - 1.9
   - "1.10"
   - tip
+jobs:
+  exclude :
+    - arch : ppc64le
+      go :
+       - 1.3
+    - arch : ppc64le
+      go :
+       - 1.4
diff --git a/vendor/github.com/olekukonko/tablewriter/README.md b/vendor/github.com/olekukonko/tablewriter/README.md
index 9c2b139..f06530d 100644
--- a/vendor/github.com/olekukonko/tablewriter/README.md
+++ b/vendor/github.com/olekukonko/tablewriter/README.md
@@ -25,7 +25,7 @@ Generate ASCII table on the fly ...  Installation is simple as
 - Set custom footer support
 - Optional identical cells merging
 - Set custom caption
-- Optional reflowing of paragrpahs in multi-line cells.
+- Optional reflowing of paragraphs in multi-line cells.
 
 #### Example   1 - Basic
 ```go
@@ -78,14 +78,14 @@ table.Render()
 ```
 
     DATE   |       DESCRIPTION        |  CV2  | AMOUNT
-+----------+--------------------------+-------+---------+
+-----------+--------------------------+-------+----------
   1/1/2014 | Domain name              |  2233 | $10.98
   1/1/2014 | January Hosting          |  2233 | $54.95
   1/4/2014 | February Hosting         |  2233 | $51.00
   1/4/2014 | February Extra Bandwidth |  2233 | $30.00
-+----------+--------------------------+-------+---------+
+-----------+--------------------------+-------+----------
                                         TOTAL | $146 93
-                                      +-------+---------+
+                                      --------+----------
 
 ```
 
@@ -197,6 +197,41 @@ table.Render()
 +----------+--------------------------+-------+---------+
 ```
 
+#### Example 7  - Identical cells merging (specify the column index to merge)
+```go
+data := [][]string{
+  []string{"1/1/2014", "Domain name", "1234", "$10.98"},
+  []string{"1/1/2014", "January Hosting", "1234", "$10.98"},
+  []string{"1/4/2014", "February Hosting", "3456", "$51.00"},
+  []string{"1/4/2014", "February Extra Bandwidth", "4567", "$30.00"},
+}
+
+table := tablewriter.NewWriter(os.Stdout)
+table.SetHeader([]string{"Date", "Description", "CV2", "Amount"})
+table.SetFooter([]string{"", "", "Total", "$146.93"})
+table.SetAutoMergeCellsByColumnIndex([]int{2, 3})
+table.SetRowLine(true)
+table.AppendBulk(data)
+table.Render()
+```
+
+##### Output 7
+```
++----------+--------------------------+-------+---------+
+|   DATE   |       DESCRIPTION        |  CV2  | AMOUNT  |
++----------+--------------------------+-------+---------+
+| 1/1/2014 | Domain name              |  1234 | $10.98  |
++----------+--------------------------+       +         +
+| 1/1/2014 | January Hosting          |       |         |
++----------+--------------------------+-------+---------+
+| 1/4/2014 | February Hosting         |  3456 | $51.00  |
++----------+--------------------------+-------+---------+
+| 1/4/2014 | February Extra Bandwidth |  4567 | $30.00  |
++----------+--------------------------+-------+---------+
+|                                       TOTAL | $146.93 |
++----------+--------------------------+-------+---------+
+```
+
 
 #### Table with color
 ```go
@@ -233,7 +268,63 @@ table.Render()
 #### Table with color Output
 ![Table with Color](https://cloud.githubusercontent.com/assets/6460392/21101956/bbc7b356-c0a1-11e6-9f36-dba694746efc.png)
 
-#### Example 6 - Set table caption
+#### Example - 8 Table Cells with Color
+
+Individual Cell Colors from `func Rich` take precedence over Column Colors
+
+```go
+data := [][]string{
+	[]string{"Test1Merge", "HelloCol2 - 1", "HelloCol3 - 1", "HelloCol4 - 1"},
+	[]string{"Test1Merge", "HelloCol2 - 2", "HelloCol3 - 2", "HelloCol4 - 2"},
+	[]string{"Test1Merge", "HelloCol2 - 3", "HelloCol3 - 3", "HelloCol4 - 3"},
+	[]string{"Test2Merge", "HelloCol2 - 4", "HelloCol3 - 4", "HelloCol4 - 4"},
+	[]string{"Test2Merge", "HelloCol2 - 5", "HelloCol3 - 5", "HelloCol4 - 5"},
+	[]string{"Test2Merge", "HelloCol2 - 6", "HelloCol3 - 6", "HelloCol4 - 6"},
+	[]string{"Test2Merge", "HelloCol2 - 7", "HelloCol3 - 7", "HelloCol4 - 7"},
+	[]string{"Test3Merge", "HelloCol2 - 8", "HelloCol3 - 8", "HelloCol4 - 8"},
+	[]string{"Test3Merge", "HelloCol2 - 9", "HelloCol3 - 9", "HelloCol4 - 9"},
+	[]string{"Test3Merge", "HelloCol2 - 10", "HelloCol3 -10", "HelloCol4 - 10"},
+}
+
+table := tablewriter.NewWriter(os.Stdout)
+table.SetHeader([]string{"Col1", "Col2", "Col3", "Col4"})
+table.SetFooter([]string{"", "", "Footer3", "Footer4"})
+table.SetBorder(false)
+
+table.SetHeaderColor(tablewriter.Colors{tablewriter.Bold, tablewriter.BgGreenColor},
+	tablewriter.Colors{tablewriter.FgHiRedColor, tablewriter.Bold, tablewriter.BgBlackColor},
+	tablewriter.Colors{tablewriter.BgRedColor, tablewriter.FgWhiteColor},
+	tablewriter.Colors{tablewriter.BgCyanColor, tablewriter.FgWhiteColor})
+
+table.SetColumnColor(tablewriter.Colors{tablewriter.Bold, tablewriter.FgHiBlackColor},
+	tablewriter.Colors{tablewriter.Bold, tablewriter.FgHiRedColor},
+	tablewriter.Colors{tablewriter.Bold, tablewriter.FgHiBlackColor},
+	tablewriter.Colors{tablewriter.Bold, tablewriter.FgBlackColor})
+
+table.SetFooterColor(tablewriter.Colors{}, tablewriter.Colors{},
+	tablewriter.Colors{tablewriter.Bold},
+	tablewriter.Colors{tablewriter.FgHiRedColor})
+
+colorData1 := []string{"TestCOLOR1Merge", "HelloCol2 - COLOR1", "HelloCol3 - COLOR1", "HelloCol4 - COLOR1"}
+colorData2 := []string{"TestCOLOR2Merge", "HelloCol2 - COLOR2", "HelloCol3 - COLOR2", "HelloCol4 - COLOR2"}
+
+for i, row := range data {
+	if i == 4 {
+		table.Rich(colorData1, []tablewriter.Colors{tablewriter.Colors{}, tablewriter.Colors{tablewriter.Normal, tablewriter.FgCyanColor}, tablewriter.Colors{tablewriter.Bold, tablewriter.FgWhiteColor}, tablewriter.Colors{}})
+		table.Rich(colorData2, []tablewriter.Colors{tablewriter.Colors{tablewriter.Normal, tablewriter.FgMagentaColor}, tablewriter.Colors{}, tablewriter.Colors{tablewriter.Bold, tablewriter.BgRedColor}, tablewriter.Colors{tablewriter.FgHiGreenColor, tablewriter.Italic, tablewriter.BgHiCyanColor}})
+	}
+	table.Append(row)
+}
+
+table.SetAutoMergeCells(true)
+table.Render()
+
+```
+
+##### Table cells with color Output
+![Table cells with Color](https://user-images.githubusercontent.com/9064687/63969376-bcd88d80-ca6f-11e9-9466-c3d954700b25.png)
+
+#### Example 9 - Set table caption
 ```go
 data := [][]string{
     []string{"A", "The Good", "500"},
@@ -254,7 +345,7 @@ table.Render() // Send output
 
 Note: Caption text will wrap with total width of rendered table.
 
-##### Output 6
+##### Output 9
 ```
 +------+-----------------------+--------+
 | NAME |         SIGN          | RATING |
@@ -267,6 +358,69 @@ Note: Caption text will wrap with total width of rendered table.
 Movie ratings.
 ```
 
+#### Example 10 - Set NoWhiteSpace and TablePadding option
+```go
+data := [][]string{
+    {"node1.example.com", "Ready", "compute", "1.11"},
+    {"node2.example.com", "Ready", "compute", "1.11"},
+    {"node3.example.com", "Ready", "compute", "1.11"},
+    {"node4.example.com", "NotReady", "compute", "1.11"},
+}
+
+table := tablewriter.NewWriter(os.Stdout)
+table.SetHeader([]string{"Name", "Status", "Role", "Version"})
+table.SetAutoWrapText(false)
+table.SetAutoFormatHeaders(true)
+table.SetHeaderAlignment(ALIGN_LEFT)
+table.SetAlignment(ALIGN_LEFT)
+table.SetCenterSeparator("")
+table.SetColumnSeparator("")
+table.SetRowSeparator("")
+table.SetHeaderLine(false)
+table.SetBorder(false)
+table.SetTablePadding("\t") // pad with tabs
+table.SetNoWhiteSpace(true)
+table.AppendBulk(data) // Add Bulk Data
+table.Render()
+```
+
+##### Output 10
+```
+NAME             	STATUS  	ROLE   	VERSION 
+node1.example.com	Ready   	compute	1.11   	
+node2.example.com	Ready   	compute	1.11   	
+node3.example.com	Ready   	compute	1.11   	
+node4.example.com	NotReady	compute	1.11   	
+```
+
+#### Render table into a string
+
+Instead of rendering the table to `io.Stdout` you can also render it into a string. Go 1.10 introduced the `strings.Builder` type which implements the `io.Writer` interface and can therefore be used for this task. Example:
+
+```go
+package main
+
+import (
+    "strings"
+    "fmt"
+
+    "github.com/olekukonko/tablewriter"
+)
+
+func main() {
+    tableString := &strings.Builder{}
+    table := tablewriter.NewWriter(tableString)
+
+    /*
+     * Code to fill the table
+     */
+
+    table.Render()
+
+    fmt.Println(tableString.String())
+}
+```
+
 #### TODO
 - ~~Import Directly from CSV~~  - `done`
 - ~~Support for `SetFooter`~~  - `done`
diff --git a/vendor/github.com/olekukonko/tablewriter/table.go b/vendor/github.com/olekukonko/tablewriter/table.go
index dec0385..f913149 100644
--- a/vendor/github.com/olekukonko/tablewriter/table.go
+++ b/vendor/github.com/olekukonko/tablewriter/table.go
@@ -48,37 +48,40 @@ type Border struct {
 }
 
 type Table struct {
-	out            io.Writer
-	rows           [][]string
-	lines          [][][]string
-	cs             map[int]int
-	rs             map[int]int
-	headers        [][]string
-	footers        [][]string
-	caption        bool
-	captionText    string
-	autoFmt        bool
-	autoWrap       bool
-	reflowText     bool
-	mW             int
-	pCenter        string
-	pRow           string
-	pColumn        string
-	tColumn        int
-	tRow           int
-	hAlign         int
-	fAlign         int
-	align          int
-	newLine        string
-	rowLine        bool
-	autoMergeCells bool
-	hdrLine        bool
-	borders        Border
-	colSize        int
-	headerParams   []string
-	columnsParams  []string
-	footerParams   []string
-	columnsAlign   []int
+	out                     io.Writer
+	rows                    [][]string
+	lines                   [][][]string
+	cs                      map[int]int
+	rs                      map[int]int
+	headers                 [][]string
+	footers                 [][]string
+	caption                 bool
+	captionText             string
+	autoFmt                 bool
+	autoWrap                bool
+	reflowText              bool
+	mW                      int
+	pCenter                 string
+	pRow                    string
+	pColumn                 string
+	tColumn                 int
+	tRow                    int
+	hAlign                  int
+	fAlign                  int
+	align                   int
+	newLine                 string
+	rowLine                 bool
+	autoMergeCells          bool
+	columnsToAutoMergeCells map[int]bool
+	noWhiteSpace            bool
+	tablePadding            string
+	hdrLine                 bool
+	borders                 Border
+	colSize                 int
+	headerParams            []string
+	columnsParams           []string
+	footerParams            []string
+	columnsAlign            []int
 }
 
 // Start New Table
@@ -225,6 +228,16 @@ func (t *Table) SetAlignment(align int) {
 	t.align = align
 }
 
+// Set No White Space
+func (t *Table) SetNoWhiteSpace(allow bool) {
+	t.noWhiteSpace = allow
+}
+
+// Set Table Padding
+func (t *Table) SetTablePadding(padding string) {
+	t.tablePadding = padding
+}
+
 func (t *Table) SetColumnAlignment(keys []int) {
 	for _, v := range keys {
 		switch v {
@@ -264,6 +277,21 @@ func (t *Table) SetAutoMergeCells(auto bool) {
 	t.autoMergeCells = auto
 }
 
+// Set Auto Merge Cells By Column Index
+// This would enable / disable the merge of cells with identical values for specific columns
+// If cols is empty, it is the same as `SetAutoMergeCells(true)`.
+func (t *Table) SetAutoMergeCellsByColumnIndex(cols []int) {
+	t.autoMergeCells = true
+
+	if len(cols) > 0 {
+		m := make(map[int]bool)
+		for _, col := range cols {
+			m[col] = true
+		}
+		t.columnsToAutoMergeCells = m
+	}
+}
+
 // Set Table Border
 // This would enable / disable line around the table
 func (t *Table) SetBorder(border bool) {
@@ -296,6 +324,33 @@ func (t *Table) Append(row []string) {
 	t.lines = append(t.lines, line)
 }
 
+// Append row to table with color attributes
+func (t *Table) Rich(row []string, colors []Colors) {
+	rowSize := len(t.headers)
+	if rowSize > t.colSize {
+		t.colSize = rowSize
+	}
+
+	n := len(t.lines)
+	line := [][]string{}
+	for i, v := range row {
+
+		// Detect string  width
+		// Detect String height
+		// Break strings into words
+		out := t.parseDimension(v, i, n)
+
+		if len(colors) > i {
+			color := colors[i]
+			out[0] = format(out[0], color)
+		}
+
+		// Append broken words
+		line = append(line, out)
+	}
+	t.lines = append(t.lines, line)
+}
+
 // Allow Support for Bulk Append
 // Eliminates repeated for loops
 func (t *Table) AppendBulk(rows [][]string) {
@@ -319,16 +374,29 @@ func (t *Table) ClearFooter() {
 	t.footers = [][]string{}
 }
 
+// Center based on position and border.
+func (t *Table) center(i int) string {
+	if i == -1 && !t.borders.Left {
+		return t.pRow
+	}
+
+	if i == len(t.cs)-1 && !t.borders.Right {
+		return t.pRow
+	}
+
+	return t.pCenter
+}
+
 // Print line based on row width
 func (t *Table) printLine(nl bool) {
-	fmt.Fprint(t.out, t.pCenter)
+	fmt.Fprint(t.out, t.center(-1))
 	for i := 0; i < len(t.cs); i++ {
 		v := t.cs[i]
 		fmt.Fprintf(t.out, "%s%s%s%s",
 			t.pRow,
 			strings.Repeat(string(t.pRow), v),
 			t.pRow,
-			t.pCenter)
+			t.center(i))
 	}
 	if nl {
 		fmt.Fprint(t.out, t.newLine)
@@ -398,11 +466,14 @@ func (t *Table) printHeading() {
 	for x := 0; x < max; x++ {
 		// Check if border is set
 		// Replace with space if not set
-		fmt.Fprint(t.out, ConditionString(t.borders.Left, t.pColumn, SPACE))
+		if !t.noWhiteSpace {
+			fmt.Fprint(t.out, ConditionString(t.borders.Left, t.pColumn, SPACE))
+		}
 
 		for y := 0; y <= end; y++ {
 			v := t.cs[y]
 			h := ""
+
 			if y < len(t.headers) && x < len(t.headers[y]) {
 				h = t.headers[y][x]
 			}
@@ -410,15 +481,30 @@ func (t *Table) printHeading() {
 				h = Title(h)
 			}
 			pad := ConditionString((y == end && !t.borders.Left), SPACE, t.pColumn)
-
+			if t.noWhiteSpace {
+				pad = ConditionString((y == end && !t.borders.Left), SPACE, t.tablePadding)
+			}
 			if is_esc_seq {
-				fmt.Fprintf(t.out, " %s %s",
-					format(padFunc(h, SPACE, v),
-						t.headerParams[y]), pad)
+				if !t.noWhiteSpace {
+					fmt.Fprintf(t.out, " %s %s",
+						format(padFunc(h, SPACE, v),
+							t.headerParams[y]), pad)
+				} else {
+					fmt.Fprintf(t.out, "%s %s",
+						format(padFunc(h, SPACE, v),
+							t.headerParams[y]), pad)
+				}
 			} else {
-				fmt.Fprintf(t.out, " %s %s",
-					padFunc(h, SPACE, v),
-					pad)
+				if !t.noWhiteSpace {
+					fmt.Fprintf(t.out, " %s %s",
+						padFunc(h, SPACE, v),
+						pad)
+				} else {
+					// the spaces between breaks the kube formatting
+					fmt.Fprintf(t.out, "%s%s",
+						padFunc(h, SPACE, v),
+						pad)
+				}
 			}
 		}
 		// Next line
@@ -517,6 +603,9 @@ func (t *Table) printFooter() {
 
 		// Print first junction
 		if i == 0 {
+			if length > 0 && !t.borders.Left {
+				center = t.pRow
+			}
 			fmt.Fprint(t.out, center)
 		}
 
@@ -524,16 +613,27 @@ func (t *Table) printFooter() {
 		if length == 0 {
 			pad = SPACE
 		}
-		// Ignore left space of it has printed before
+		// Ignore left space as it has printed before
 		if hasPrinted || t.borders.Left {
 			pad = t.pRow
 			center = t.pCenter
 		}
 
+		// Change Center end position
+		if center != SPACE {
+			if i == end && !t.borders.Right {
+				center = t.pRow
+			}
+		}
+
 		// Change Center start position
 		if center == SPACE {
 			if i < end && len(t.footers[i+1][0]) != 0 {
-				center = t.pCenter
+				if !t.borders.Left {
+					center = t.pRow
+				} else {
+					center = t.pCenter
+				}
 			}
 		}
 
@@ -627,9 +727,11 @@ func (t *Table) printRow(columns [][]string, rowIdx int) {
 		for y := 0; y < total; y++ {
 
 			// Check if border is set
-			fmt.Fprint(t.out, ConditionString((!t.borders.Left && y == 0), SPACE, t.pColumn))
+			if !t.noWhiteSpace {
+				fmt.Fprint(t.out, ConditionString((!t.borders.Left && y == 0), SPACE, t.pColumn))
+				fmt.Fprintf(t.out, SPACE)
+			}
 
-			fmt.Fprintf(t.out, SPACE)
 			str := columns[y][x]
 
 			// Embedding escape sequence with column value
@@ -661,11 +763,17 @@ func (t *Table) printRow(columns [][]string, rowIdx int) {
 
 				}
 			}
-			fmt.Fprintf(t.out, SPACE)
+			if !t.noWhiteSpace {
+				fmt.Fprintf(t.out, SPACE)
+			} else {
+				fmt.Fprintf(t.out, t.tablePadding)
+			}
 		}
 		// Check if border is set
 		// Replace with space if not set
-		fmt.Fprint(t.out, ConditionString(t.borders.Left, t.pColumn, SPACE))
+		if !t.noWhiteSpace {
+			fmt.Fprint(t.out, ConditionString(t.borders.Left, t.pColumn, SPACE))
+		}
 		fmt.Fprint(t.out, t.newLine)
 	}
 
@@ -706,6 +814,11 @@ func (t *Table) printRowMergeCells(writer io.Writer, columns [][]string, rowIdx
 	// Pad Each Height
 	pads := []int{}
 
+	// Checking for ANSI escape sequences for columns
+	is_esc_seq := false
+	if len(t.columnsParams) > 0 {
+		is_esc_seq = true
+	}
 	for i, line := range columns {
 		length := len(line)
 		pad := max - length
@@ -727,10 +840,25 @@ func (t *Table) printRowMergeCells(writer io.Writer, columns [][]string, rowIdx
 
 			str := columns[y][x]
 
+			// Embedding escape sequence with column value
+			if is_esc_seq {
+				str = format(str, t.columnsParams[y])
+			}
+
 			if t.autoMergeCells {
+				var mergeCell bool
+				if t.columnsToAutoMergeCells != nil {
+					// Check to see if the column index is in columnsToAutoMergeCells.
+					if t.columnsToAutoMergeCells[y] {
+						mergeCell = true
+					}
+				} else {
+					// columnsToAutoMergeCells was not set.
+					mergeCell = true
+				}
 				//Store the full line to merge mutli-lines cells
-				fullLine := strings.Join(columns[y], " ")
-				if len(previousLine) > y && fullLine == previousLine[y] && fullLine != "" {
+				fullLine := strings.TrimRight(strings.Join(columns[y], " "), " ")
+				if len(previousLine) > y && fullLine == previousLine[y] && fullLine != "" && mergeCell {
 					// If this cell is identical to the one above but not empty, we don't display the border and keep the cell empty.
 					displayCellBorder = append(displayCellBorder, false)
 					str = ""
@@ -767,7 +895,7 @@ func (t *Table) printRowMergeCells(writer io.Writer, columns [][]string, rowIdx
 	//The new previous line is the current one
 	previousLine = make([]string, total)
 	for y := 0; y < total; y++ {
-		previousLine[y] = strings.Join(columns[y], " ") //Store the full line for multi-lines cells
+		previousLine[y] = strings.TrimRight(strings.Join(columns[y], " "), " ") //Store the full line for multi-lines cells
 	}
 	//Returns the newly added line and wether or not a border should be displayed above.
 	return previousLine, displayCellBorder
diff --git a/vendor/github.com/olekukonko/tablewriter/table_with_color.go b/vendor/github.com/olekukonko/tablewriter/table_with_color.go
index 5a4a53e..ae7a364 100644
--- a/vendor/github.com/olekukonko/tablewriter/table_with_color.go
+++ b/vendor/github.com/olekukonko/tablewriter/table_with_color.go
@@ -89,6 +89,8 @@ func format(s string, codes interface{}) string {
 		seq = v
 	case []int:
 		seq = makeSequence(v)
+	case Colors:
+		seq = makeSequence(v)
 	default:
 		return s
 	}
diff --git a/vendor/github.com/olekukonko/tablewriter/util.go b/vendor/github.com/olekukonko/tablewriter/util.go
index 9e8f0cb..380e7ab 100644
--- a/vendor/github.com/olekukonko/tablewriter/util.go
+++ b/vendor/github.com/olekukonko/tablewriter/util.go
@@ -61,7 +61,7 @@ func Title(name string) string {
 }
 
 // Pad String
-// Attempts to play string in the center
+// Attempts to place string in the center
 func Pad(s, pad string, width int) string {
 	gap := width - DisplayWidth(s)
 	if gap > 0 {
@@ -73,7 +73,7 @@ func Pad(s, pad string, width int) string {
 }
 
 // Pad String Right position
-// This would pace string at the left side fo the screen
+// This would place string at the left side of the screen
 func PadRight(s, pad string, width int) string {
 	gap := width - DisplayWidth(s)
 	if gap > 0 {
@@ -83,7 +83,7 @@ func PadRight(s, pad string, width int) string {
 }
 
 // Pad String Left position
-// This would pace string at the right side fo the screen
+// This would place string at the right side of the screen
 func PadLeft(s, pad string, width int) string {
 	gap := width - DisplayWidth(s)
 	if gap > 0 {
diff --git a/vendor/github.com/rivo/uniseg/LICENSE.txt b/vendor/github.com/rivo/uniseg/LICENSE.txt
new file mode 100644
index 0000000..5040f1e
--- /dev/null
+++ b/vendor/github.com/rivo/uniseg/LICENSE.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 Oliver Kuederle
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/vendor/github.com/rivo/uniseg/README.md b/vendor/github.com/rivo/uniseg/README.md
new file mode 100644
index 0000000..25e9346
--- /dev/null
+++ b/vendor/github.com/rivo/uniseg/README.md
@@ -0,0 +1,157 @@
+# Unicode Text Segmentation for Go
+
+[![Go Reference](https://pkg.go.dev/badge/github.com/rivo/uniseg.svg)](https://pkg.go.dev/github.com/rivo/uniseg)
+[![Go Report](https://img.shields.io/badge/go%20report-A%2B-brightgreen.svg)](https://goreportcard.com/report/github.com/rivo/uniseg)
+
+This Go package implements Unicode Text Segmentation according to [Unicode Standard Annex #29](https://unicode.org/reports/tr29/), Unicode Line Breaking according to [Unicode Standard Annex #14](https://unicode.org/reports/tr14/) (Unicode version 14.0.0), and monospace font string width calculation similar to [wcwidth](https://man7.org/linux/man-pages/man3/wcwidth.3.html).
+
+## Background
+
+### Grapheme Clusters
+
+In Go, [strings are read-only slices of bytes](https://go.dev/blog/strings). They can be turned into Unicode code points using the `for` loop or by casting: `[]rune(str)`. However, multiple code points may be combined into one user-perceived character or what the Unicode specification calls "grapheme cluster". Here are some examples:
+
+|String|Bytes (UTF-8)|Code points (runes)|Grapheme clusters|
+|-|-|-|-|
+|Käse|6 bytes: `4b 61 cc 88 73 65`|5 code points: `4b 61 308 73 65`|4 clusters: `[4b],[61 308],[73],[65]`|
+|🏳️‍🌈|14 bytes: `f0 9f 8f b3 ef b8 8f e2 80 8d f0 9f 8c 88`|4 code points: `1f3f3 fe0f 200d 1f308`|1 cluster: `[1f3f3 fe0f 200d 1f308]`|
+|🇩🇪|8 bytes: `f0 9f 87 a9 f0 9f 87 aa`|2 code points: `1f1e9 1f1ea`|1 cluster: `[1f1e9 1f1ea]`|
+
+This package provides tools to iterate over these grapheme clusters. This may be used to determine the number of user-perceived characters, to split strings in their intended places, or to extract individual characters which form a unit.
+
+### Word Boundaries
+
+Word boundaries are used in a number of different contexts. The most familiar ones are selection (double-click mouse selection), cursor movement ("move to next word" control-arrow keys), and the dialog option "Whole Word Search" for search and replace. They are also used in database queries, to determine whether elements are within a certain number of words of one another. Searching may also use word boundaries in determining matching items. This package provides tools to determine word  [...]
+
+### Sentence Boundaries
+
+Sentence boundaries are often used for triple-click or some other method of selecting or iterating through blocks of text that are larger than single words. They are also used to determine whether words occur within the same sentence in database queries. This package provides tools to determine sentence boundaries within strings.
+
+### Line Breaking
+
+Line breaking, also known as word wrapping, is the process of breaking a section of text into lines such that it will fit in the available width of a page, window or other display area. This package provides tools to determine where a string may or may not be broken and where it must be broken (for example after newline characters).
+
+### Monospace Width
+
+Most terminals or text displays / text editors using a monospace font (for example source code editors) use a fixed width for each character. Some characters such as emojis or characters found in Asian and other languages may take up more than one character cell. This package provides tools to determine the number of cells a string will take up when displayed in a monospace font. See [here](https://pkg.go.dev/github.com/rivo/uniseg#hdr-Monospace_Width) for more information.
+
+## Installation
+
+```bash
+go get github.com/rivo/uniseg
+```
+
+## Examples
+
+### Counting Characters in a String
+
+```go
+n := uniseg.GraphemeClusterCount("🇩🇪🏳️‍🌈")
+fmt.Println(n)
+// 2
+```
+
+### Calculating the Monospace String Width
+
+```go
+width := uniseg.StringWidth("🇩🇪🏳️‍🌈!")
+fmt.Println(width)
+// 5
+```
+
+### Using the [`Graphemes`](https://pkg.go.dev/github.com/rivo/uniseg#Graphemes) Class
+
+This is the most convenient method of iterating over grapheme clusters:
+
+```go
+gr := uniseg.NewGraphemes("👍🏼!")
+for gr.Next() {
+	fmt.Printf("%x ", gr.Runes())
+}
+// [1f44d 1f3fc] [21]
+```
+
+### Using the [`Step`](https://pkg.go.dev/github.com/rivo/uniseg#Step) or [`StepString`](https://pkg.go.dev/github.com/rivo/uniseg#StepString) Function
+
+This is orders of magnitude faster than the `Graphemes` class, but it requires the handling of states and boundaries:
+
+```go
+str := "🇩🇪🏳️‍🌈"
+state := -1
+var c string
+for len(str) > 0 {
+	c, str, _, state = uniseg.StepString(str, state)
+	fmt.Printf("%x ", []rune(c))
+}
+// [1f1e9 1f1ea] [1f3f3 fe0f 200d 1f308]
+```
+
+### Advanced Examples
+
+Breaking into grapheme clusters and evaluating line breaks:
+
+```go
+str := "First line.\nSecond line."
+state := -1
+var (
+	c          string
+	boundaries int
+)
+for len(str) > 0 {
+	c, str, boundaries, state = uniseg.StepString(str, state)
+	fmt.Print(c)
+	if boundaries&uniseg.MaskLine == uniseg.LineCanBreak {
+		fmt.Print("|")
+	} else if boundaries&uniseg.MaskLine == uniseg.LineMustBreak {
+		fmt.Print("‖")
+	}
+}
+// First |line.
+// ‖Second |line.‖
+```
+
+If you're only interested in word segmentation, use [`FirstWord`](https://pkg.go.dev/github.com/rivo/uniseg#FirstWord) or [`FirstWordInString`](https://pkg.go.dev/github.com/rivo/uniseg#FirstWordInString):
+
+```go
+str := "Hello, world!"
+state := -1
+var c string
+for len(str) > 0 {
+	c, str, state = uniseg.FirstWordInString(str, state)
+	fmt.Printf("(%s)\n", c)
+}
+// (Hello)
+// (,)
+// ( )
+// (world)
+// (!)
+```
+
+Similarly, use
+
+- [`FirstGraphemeCluster`](https://pkg.go.dev/github.com/rivo/uniseg#FirstGraphemeCluster) or [`FirstGraphemeClusterInString`](https://pkg.go.dev/github.com/rivo/uniseg#FirstGraphemeClusterInString) for grapheme cluster determination only,
+- [`FirstSentence`](https://pkg.go.dev/github.com/rivo/uniseg#FirstSentence) or [`FirstSentenceInString`](https://pkg.go.dev/github.com/rivo/uniseg#FirstSentenceInString) for sentence segmentation only, and
+- [`FirstLineSegment`](https://pkg.go.dev/github.com/rivo/uniseg#FirstLineSegment) or [`FirstLineSegmentInString`](https://pkg.go.dev/github.com/rivo/uniseg#FirstLineSegmentInString) for line breaking / word wrapping (although using [`Step`](https://pkg.go.dev/github.com/rivo/uniseg#Step) or [`StepString`](https://pkg.go.dev/github.com/rivo/uniseg#StepString) is preferred as it will observe grapheme cluster boundaries).
+
+Finally, if you need to reverse a string while preserving grapheme clusters, use [`ReverseString`](https://pkg.go.dev/github.com/rivo/uniseg#ReverseString):
+
+```go
+fmt.Println(uniseg.ReverseString("🇩🇪🏳️‍🌈"))
+// 🏳️‍🌈🇩🇪
+```
+
+## Documentation
+
+Refer to https://pkg.go.dev/github.com/rivo/uniseg for the package's documentation.
+
+## Dependencies
+
+This package does not depend on any packages outside the standard library.
+
+## Sponsor this Project
+
+[Become a Sponsor on GitHub](https://github.com/sponsors/rivo?metadata_source=uniseg_readme) to support this project!
+
+## Your Feedback
+
+Add your issue here on GitHub, preferably before submitting any PR's. Feel free to get in touch if you have any questions.
\ No newline at end of file
diff --git a/vendor/github.com/rivo/uniseg/doc.go b/vendor/github.com/rivo/uniseg/doc.go
new file mode 100644
index 0000000..11224ae
--- /dev/null
+++ b/vendor/github.com/rivo/uniseg/doc.go
@@ -0,0 +1,108 @@
+/*
+Package uniseg implements Unicode Text Segmentation, Unicode Line Breaking, and
+string width calculation for monospace fonts. Unicode Text Segmentation conforms
+to Unicode Standard Annex #29 (https://unicode.org/reports/tr29/) and Unicode
+Line Breaking conforms to Unicode Standard Annex #14
+(https://unicode.org/reports/tr14/).
+
+In short, using this package, you can split a string into grapheme clusters
+(what people would usually refer to as a "character"), into words, and into
+sentences. Or, in its simplest case, this package allows you to count the number
+of characters in a string, especially when it contains complex characters such
+as emojis, combining characters, or characters from Asian, Arabic, Hebrew, or
+other languages. Additionally, you can use it to implement line breaking (or
+"word wrapping"), that is, to determine where text can be broken over to the
+next line when the width of the line is not big enough to fit the entire text.
+Finally, you can use it to calculate the display width of a string for monospace
+fonts.
+
+# Getting Started
+
+If you just want to count the number of characters in a string, you can use
+[GraphemeClusterCount]. If you want to determine the display width of a string,
+you can use [StringWidth]. If you want to iterate over a string, you can use
+[Step], [StepString], or the [Graphemes] class (more convenient but less
+performant). This will provide you with all information: grapheme clusters,
+word boundaries, sentence boundaries, line breaks, and monospace character
+widths. The specialized functions [FirstGraphemeCluster],
+[FirstGraphemeClusterInString], [FirstWord], [FirstWordInString],
+[FirstSentence], and [FirstSentenceInString] can be used if only one type of
+information is needed.
+
+# Grapheme Clusters
+
+Consider the rainbow flag emoji: 🏳️‍🌈. On most modern systems, it appears as one
+character. But its string representation actually has 14 bytes, so counting
+bytes (or using len("🏳️‍🌈")) will not work as expected. Counting runes won't,
+either: The flag has 4 Unicode code points, thus 4 runes. The stdlib function
+utf8.RuneCountInString("🏳️‍🌈") and len([]rune("🏳️‍🌈")) will both return 4.
+
+The [GraphemeClusterCount] function will return 1 for the rainbow flag emoji.
+The Graphemes class and a variety of functions in this package will allow you to
+split strings into its grapheme clusters.
+
+# Word Boundaries
+
+Word boundaries are used in a number of different contexts. The most familiar
+ones are selection (double-click mouse selection), cursor movement ("move to
+next word" control-arrow keys), and the dialog option "Whole Word Search" for
+search and replace. This package provides methods for determining word
+boundaries.
+
+# Sentence Boundaries
+
+Sentence boundaries are often used for triple-click or some other method of
+selecting or iterating through blocks of text that are larger than single words.
+They are also used to determine whether words occur within the same sentence in
+database queries. This package provides methods for determining sentence
+boundaries.
+
+# Line Breaking
+
+Line breaking, also known as word wrapping, is the process of breaking a section
+of text into lines such that it will fit in the available width of a page,
+window or other display area. This package provides methods to determine the
+positions in a string where a line must be broken, may be broken, or must not be
+broken.
+
+# Monospace Width
+
+Monospace width, as referred to in this package, is the width of a string in a
+monospace font. This is commonly used in terminal user interfaces or text
+displays or editors that don't support proportional fonts. A width of 1
+corresponds to a single character cell. The C function [wcswidth()] and its
+implementation in other programming languages is in widespread use for the same
+purpose. However, there is no standard for the calculation of such widths, and
+this package differs from wcswidth() in a number of ways, presumably to generate
+more visually pleasing results.
+
+To start, we assume that every code point has a width of 1, with the following
+exceptions:
+
+  - Code points with grapheme cluster break properties Control, CR, LF, Extend,
+    and ZWJ have a width of 0.
+  - U+2E3A, Two-Em Dash, has a width of 3.
+  - U+2E3B, Three-Em Dash, has a width of 4.
+  - Characters with the East-Asian Width properties "Fullwidth" (F) and "Wide"
+    (W) have a width of 2. (Properties "Ambiguous" (A) and "Neutral" (N) both
+    have a width of 1.)
+  - Code points with grapheme cluster break property Regional Indicator have a
+    width of 2.
+  - Code points with grapheme cluster break property Extended Pictographic have
+    a width of 2, unless their Emoji Presentation flag is "No", in which case
+    the width is 1.
+
+For Hangul grapheme clusters composed of conjoining Jamo and for Regional
+Indicators (flags), all code points except the first one have a width of 0. For
+grapheme clusters starting with an Extended Pictographic, any additional code
+point will force a total width of 2, except if the Variation Selector-15
+(U+FE0E) is included, in which case the total width is always 1. Grapheme
+clusters ending with Variation Selector-16 (U+FE0F) have a width of 2.
+
+Note that whether these widths appear correct depends on your application's
+render engine, to which extent it conforms to the Unicode Standard, and its
+choice of font.
+
+[wcswidth()]: https://man7.org/linux/man-pages/man3/wcswidth.3.html
+*/
+package uniseg
diff --git a/vendor/github.com/rivo/uniseg/eastasianwidth.go b/vendor/github.com/rivo/uniseg/eastasianwidth.go
new file mode 100644
index 0000000..661934a
--- /dev/null
+++ b/vendor/github.com/rivo/uniseg/eastasianwidth.go
@@ -0,0 +1,2556 @@
+package uniseg
+
+// Code generated via go generate from gen_properties.go. DO NOT EDIT.
+
+// eastAsianWidth are taken from
+// https://www.unicode.org/Public/14.0.0/ucd/EastAsianWidth.txt
+// and
+// https://unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt
+// ("Extended_Pictographic" only)
+// on September 10, 2022. See https://www.unicode.org/license.html for the Unicode
+// license agreement.
+var eastAsianWidth = [][3]int{
+	{0x0000, 0x001F, prN},     // Cc    [32] <control-0000>..<control-001F>
+	{0x0020, 0x0020, prNa},    // Zs         SPACE
+	{0x0021, 0x0023, prNa},    // Po     [3] EXCLAMATION MARK..NUMBER SIGN
+	{0x0024, 0x0024, prNa},    // Sc         DOLLAR SIGN
+	{0x0025, 0x0027, prNa},    // Po     [3] PERCENT SIGN..APOSTROPHE
+	{0x0028, 0x0028, prNa},    // Ps         LEFT PARENTHESIS
+	{0x0029, 0x0029, prNa},    // Pe         RIGHT PARENTHESIS
+	{0x002A, 0x002A, prNa},    // Po         ASTERISK
+	{0x002B, 0x002B, prNa},    // Sm         PLUS SIGN
+	{0x002C, 0x002C, prNa},    // Po         COMMA
+	{0x002D, 0x002D, prNa},    // Pd         HYPHEN-MINUS
+	{0x002E, 0x002F, prNa},    // Po     [2] FULL STOP..SOLIDUS
+	{0x0030, 0x0039, prNa},    // Nd    [10] DIGIT ZERO..DIGIT NINE
+	{0x003A, 0x003B, prNa},    // Po     [2] COLON..SEMICOLON
+	{0x003C, 0x003E, prNa},    // Sm     [3] LESS-THAN SIGN..GREATER-THAN SIGN
+	{0x003F, 0x0040, prNa},    // Po     [2] QUESTION MARK..COMMERCIAL AT
+	{0x0041, 0x005A, prNa},    // Lu    [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+	{0x005B, 0x005B, prNa},    // Ps         LEFT SQUARE BRACKET
+	{0x005C, 0x005C, prNa},    // Po         REVERSE SOLIDUS
+	{0x005D, 0x005D, prNa},    // Pe         RIGHT SQUARE BRACKET
+	{0x005E, 0x005E, prNa},    // Sk         CIRCUMFLEX ACCENT
+	{0x005F, 0x005F, prNa},    // Pc         LOW LINE
+	{0x0060, 0x0060, prNa},    // Sk         GRAVE ACCENT
+	{0x0061, 0x007A, prNa},    // Ll    [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+	{0x007B, 0x007B, prNa},    // Ps         LEFT CURLY BRACKET
+	{0x007C, 0x007C, prNa},    // Sm         VERTICAL LINE
+	{0x007D, 0x007D, prNa},    // Pe         RIGHT CURLY BRACKET
+	{0x007E, 0x007E, prNa},    // Sm         TILDE
+	{0x007F, 0x007F, prN},     // Cc         <control-007F>
+	{0x0080, 0x009F, prN},     // Cc    [32] <control-0080>..<control-009F>
+	{0x00A0, 0x00A0, prN},     // Zs         NO-BREAK SPACE
+	{0x00A1, 0x00A1, prA},     // Po         INVERTED EXCLAMATION MARK
+	{0x00A2, 0x00A3, prNa},    // Sc     [2] CENT SIGN..POUND SIGN
+	{0x00A4, 0x00A4, prA},     // Sc         CURRENCY SIGN
+	{0x00A5, 0x00A5, prNa},    // Sc         YEN SIGN
+	{0x00A6, 0x00A6, prNa},    // So         BROKEN BAR
+	{0x00A7, 0x00A7, prA},     // Po         SECTION SIGN
+	{0x00A8, 0x00A8, prA},     // Sk         DIAERESIS
+	{0x00A9, 0x00A9, prN},     // So         COPYRIGHT SIGN
+	{0x00AA, 0x00AA, prA},     // Lo         FEMININE ORDINAL INDICATOR
+	{0x00AB, 0x00AB, prN},     // Pi         LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+	{0x00AC, 0x00AC, prNa},    // Sm         NOT SIGN
+	{0x00AD, 0x00AD, prA},     // Cf         SOFT HYPHEN
+	{0x00AE, 0x00AE, prA},     // So         REGISTERED SIGN
+	{0x00AF, 0x00AF, prNa},    // Sk         MACRON
+	{0x00B0, 0x00B0, prA},     // So         DEGREE SIGN
+	{0x00B1, 0x00B1, prA},     // Sm         PLUS-MINUS SIGN
+	{0x00B2, 0x00B3, prA},     // No     [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE
+	{0x00B4, 0x00B4, prA},     // Sk         ACUTE ACCENT
+	{0x00B5, 0x00B5, prN},     // Ll         MICRO SIGN
+	{0x00B6, 0x00B7, prA},     // Po     [2] PILCROW SIGN..MIDDLE DOT
+	{0x00B8, 0x00B8, prA},     // Sk         CEDILLA
+	{0x00B9, 0x00B9, prA},     // No         SUPERSCRIPT ONE
+	{0x00BA, 0x00BA, prA},     // Lo         MASCULINE ORDINAL INDICATOR
+	{0x00BB, 0x00BB, prN},     // Pf         RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+	{0x00BC, 0x00BE, prA},     // No     [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
+	{0x00BF, 0x00BF, prA},     // Po         INVERTED QUESTION MARK
+	{0x00C0, 0x00C5, prN},     // Lu     [6] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER A WITH RING ABOVE
+	{0x00C6, 0x00C6, prA},     // Lu         LATIN CAPITAL LETTER AE
+	{0x00C7, 0x00CF, prN},     // Lu     [9] LATIN CAPITAL LETTER C WITH CEDILLA..LATIN CAPITAL LETTER I WITH DIAERESIS
+	{0x00D0, 0x00D0, prA},     // Lu         LATIN CAPITAL LETTER ETH
+	{0x00D1, 0x00D6, prN},     // Lu     [6] LATIN CAPITAL LETTER N WITH TILDE..LATIN CAPITAL LETTER O WITH DIAERESIS
+	{0x00D7, 0x00D7, prA},     // Sm         MULTIPLICATION SIGN
+	{0x00D8, 0x00D8, prA},     // Lu         LATIN CAPITAL LETTER O WITH STROKE
+	{0x00D9, 0x00DD, prN},     // Lu     [5] LATIN CAPITAL LETTER U WITH GRAVE..LATIN CAPITAL LETTER Y WITH ACUTE
+	{0x00DE, 0x00E1, prA},     // L&     [4] LATIN CAPITAL LETTER THORN..LATIN SMALL LETTER A WITH ACUTE
+	{0x00E2, 0x00E5, prN},     // Ll     [4] LATIN SMALL LETTER A WITH CIRCUMFLEX..LATIN SMALL LETTER A WITH RING ABOVE
+	{0x00E6, 0x00E6, prA},     // Ll         LATIN SMALL LETTER AE
+	{0x00E7, 0x00E7, prN},     // Ll         LATIN SMALL LETTER C WITH CEDILLA
+	{0x00E8, 0x00EA, prA},     // Ll     [3] LATIN SMALL LETTER E WITH GRAVE..LATIN SMALL LETTER E WITH CIRCUMFLEX
+	{0x00EB, 0x00EB, prN},     // Ll         LATIN SMALL LETTER E WITH DIAERESIS
+	{0x00EC, 0x00ED, prA},     // Ll     [2] LATIN SMALL LETTER I WITH GRAVE..LATIN SMALL LETTER I WITH ACUTE
+	{0x00EE, 0x00EF, prN},     // Ll     [2] LATIN SMALL LETTER I WITH CIRCUMFLEX..LATIN SMALL LETTER I WITH DIAERESIS
+	{0x00F0, 0x00F0, prA},     // Ll         LATIN SMALL LETTER ETH
+	{0x00F1, 0x00F1, prN},     // Ll         LATIN SMALL LETTER N WITH TILDE
+	{0x00F2, 0x00F3, prA},     // Ll     [2] LATIN SMALL LETTER O WITH GRAVE..LATIN SMALL LETTER O WITH ACUTE
+	{0x00F4, 0x00F6, prN},     // Ll     [3] LATIN SMALL LETTER O WITH CIRCUMFLEX..LATIN SMALL LETTER O WITH DIAERESIS
+	{0x00F7, 0x00F7, prA},     // Sm         DIVISION SIGN
+	{0x00F8, 0x00FA, prA},     // Ll     [3] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER U WITH ACUTE
+	{0x00FB, 0x00FB, prN},     // Ll         LATIN SMALL LETTER U WITH CIRCUMFLEX
+	{0x00FC, 0x00FC, prA},     // Ll         LATIN SMALL LETTER U WITH DIAERESIS
+	{0x00FD, 0x00FD, prN},     // Ll         LATIN SMALL LETTER Y WITH ACUTE
+	{0x00FE, 0x00FE, prA},     // Ll         LATIN SMALL LETTER THORN
+	{0x00FF, 0x00FF, prN},     // Ll         LATIN SMALL LETTER Y WITH DIAERESIS
+	{0x0100, 0x0100, prN},     // Lu         LATIN CAPITAL LETTER A WITH MACRON
+	{0x0101, 0x0101, prA},     // Ll         LATIN SMALL LETTER A WITH MACRON
+	{0x0102, 0x0110, prN},     // L&    [15] LATIN CAPITAL LETTER A WITH BREVE..LATIN CAPITAL LETTER D WITH STROKE
+	{0x0111, 0x0111, prA},     // Ll         LATIN SMALL LETTER D WITH STROKE
+	{0x0112, 0x0112, prN},     // Lu         LATIN CAPITAL LETTER E WITH MACRON
+	{0x0113, 0x0113, prA},     // Ll         LATIN SMALL LETTER E WITH MACRON
+	{0x0114, 0x011A, prN},     // L&     [7] LATIN CAPITAL LETTER E WITH BREVE..LATIN CAPITAL LETTER E WITH CARON
+	{0x011B, 0x011B, prA},     // Ll         LATIN SMALL LETTER E WITH CARON
+	{0x011C, 0x0125, prN},     // L&    [10] LATIN CAPITAL LETTER G WITH CIRCUMFLEX..LATIN SMALL LETTER H WITH CIRCUMFLEX
+	{0x0126, 0x0127, prA},     // L&     [2] LATIN CAPITAL LETTER H WITH STROKE..LATIN SMALL LETTER H WITH STROKE
+	{0x0128, 0x012A, prN},     // L&     [3] LATIN CAPITAL LETTER I WITH TILDE..LATIN CAPITAL LETTER I WITH MACRON
+	{0x012B, 0x012B, prA},     // Ll         LATIN SMALL LETTER I WITH MACRON
+	{0x012C, 0x0130, prN},     // L&     [5] LATIN CAPITAL LETTER I WITH BREVE..LATIN CAPITAL LETTER I WITH DOT ABOVE
+	{0x0131, 0x0133, prA},     // L&     [3] LATIN SMALL LETTER DOTLESS I..LATIN SMALL LIGATURE IJ
+	{0x0134, 0x0137, prN},     // L&     [4] LATIN CAPITAL LETTER J WITH CIRCUMFLEX..LATIN SMALL LETTER K WITH CEDILLA
+	{0x0138, 0x0138, prA},     // Ll         LATIN SMALL LETTER KRA
+	{0x0139, 0x013E, prN},     // L&     [6] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER L WITH CARON
+	{0x013F, 0x0142, prA},     // L&     [4] LATIN CAPITAL LETTER L WITH MIDDLE DOT..LATIN SMALL LETTER L WITH STROKE
+	{0x0143, 0x0143, prN},     // Lu         LATIN CAPITAL LETTER N WITH ACUTE
+	{0x0144, 0x0144, prA},     // Ll         LATIN SMALL LETTER N WITH ACUTE
+	{0x0145, 0x0147, prN},     // L&     [3] LATIN CAPITAL LETTER N WITH CEDILLA..LATIN CAPITAL LETTER N WITH CARON
+	{0x0148, 0x014B, prA},     // L&     [4] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER ENG
+	{0x014C, 0x014C, prN},     // Lu         LATIN CAPITAL LETTER O WITH MACRON
+	{0x014D, 0x014D, prA},     // Ll         LATIN SMALL LETTER O WITH MACRON
+	{0x014E, 0x0151, prN},     // L&     [4] LATIN CAPITAL LETTER O WITH BREVE..LATIN SMALL LETTER O WITH DOUBLE ACUTE
+	{0x0152, 0x0153, prA},     // L&     [2] LATIN CAPITAL LIGATURE OE..LATIN SMALL LIGATURE OE
+	{0x0154, 0x0165, prN},     // L&    [18] LATIN CAPITAL LETTER R WITH ACUTE..LATIN SMALL LETTER T WITH CARON
+	{0x0166, 0x0167, prA},     // L&     [2] LATIN CAPITAL LETTER T WITH STROKE..LATIN SMALL LETTER T WITH STROKE
+	{0x0168, 0x016A, prN},     // L&     [3] LATIN CAPITAL LETTER U WITH TILDE..LATIN CAPITAL LETTER U WITH MACRON
+	{0x016B, 0x016B, prA},     // Ll         LATIN SMALL LETTER U WITH MACRON
+	{0x016C, 0x017F, prN},     // L&    [20] LATIN CAPITAL LETTER U WITH BREVE..LATIN SMALL LETTER LONG S
+	{0x0180, 0x01BA, prN},     // L&    [59] LATIN SMALL LETTER B WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+	{0x01BB, 0x01BB, prN},     // Lo         LATIN LETTER TWO WITH STROKE
+	{0x01BC, 0x01BF, prN},     // L&     [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+	{0x01C0, 0x01C3, prN},     // Lo     [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+	{0x01C4, 0x01CD, prN},     // L&    [10] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER A WITH CARON
+	{0x01CE, 0x01CE, prA},     // Ll         LATIN SMALL LETTER A WITH CARON
+	{0x01CF, 0x01CF, prN},     // Lu         LATIN CAPITAL LETTER I WITH CARON
+	{0x01D0, 0x01D0, prA},     // Ll         LATIN SMALL LETTER I WITH CARON
+	{0x01D1, 0x01D1, prN},     // Lu         LATIN CAPITAL LETTER O WITH CARON
+	{0x01D2, 0x01D2, prA},     // Ll         LATIN SMALL LETTER O WITH CARON
+	{0x01D3, 0x01D3, prN},     // Lu         LATIN CAPITAL LETTER U WITH CARON
+	{0x01D4, 0x01D4, prA},     // Ll         LATIN SMALL LETTER U WITH CARON
+	{0x01D5, 0x01D5, prN},     // Lu         LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+	{0x01D6, 0x01D6, prA},     // Ll         LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+	{0x01D7, 0x01D7, prN},     // Lu         LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+	{0x01D8, 0x01D8, prA},     // Ll         LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+	{0x01D9, 0x01D9, prN},     // Lu         LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+	{0x01DA, 0x01DA, prA},     // Ll         LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+	{0x01DB, 0x01DB, prN},     // Lu         LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+	{0x01DC, 0x01DC, prA},     // Ll         LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+	{0x01DD, 0x024F, prN},     // L&   [115] LATIN SMALL LETTER TURNED E..LATIN SMALL LETTER Y WITH STROKE
+	{0x0250, 0x0250, prN},     // Ll         LATIN SMALL LETTER TURNED A
+	{0x0251, 0x0251, prA},     // Ll         LATIN SMALL LETTER ALPHA
+	{0x0252, 0x0260, prN},     // Ll    [15] LATIN SMALL LETTER TURNED ALPHA..LATIN SMALL LETTER G WITH HOOK
+	{0x0261, 0x0261, prA},     // Ll         LATIN SMALL LETTER SCRIPT G
+	{0x0262, 0x0293, prN},     // Ll    [50] LATIN LETTER SMALL CAPITAL G..LATIN SMALL LETTER EZH WITH CURL
+	{0x0294, 0x0294, prN},     // Lo         LATIN LETTER GLOTTAL STOP
+	{0x0295, 0x02AF, prN},     // Ll    [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+	{0x02B0, 0x02C1, prN},     // Lm    [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+	{0x02C2, 0x02C3, prN},     // Sk     [2] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER RIGHT ARROWHEAD
+	{0x02C4, 0x02C4, prA},     // Sk         MODIFIER LETTER UP ARROWHEAD
+	{0x02C5, 0x02C5, prN},     // Sk         MODIFIER LETTER DOWN ARROWHEAD
+	{0x02C6, 0x02C6, prN},     // Lm         MODIFIER LETTER CIRCUMFLEX ACCENT
+	{0x02C7, 0x02C7, prA},     // Lm         CARON
+	{0x02C8, 0x02C8, prN},     // Lm         MODIFIER LETTER VERTICAL LINE
+	{0x02C9, 0x02CB, prA},     // Lm     [3] MODIFIER LETTER MACRON..MODIFIER LETTER GRAVE ACCENT
+	{0x02CC, 0x02CC, prN},     // Lm         MODIFIER LETTER LOW VERTICAL LINE
+	{0x02CD, 0x02CD, prA},     // Lm         MODIFIER LETTER LOW MACRON
+	{0x02CE, 0x02CF, prN},     // Lm     [2] MODIFIER LETTER LOW GRAVE ACCENT..MODIFIER LETTER LOW ACUTE ACCENT
+	{0x02D0, 0x02D0, prA},     // Lm         MODIFIER LETTER TRIANGULAR COLON
+	{0x02D1, 0x02D1, prN},     // Lm         MODIFIER LETTER HALF TRIANGULAR COLON
+	{0x02D2, 0x02D7, prN},     // Sk     [6] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER MINUS SIGN
+	{0x02D8, 0x02DB, prA},     // Sk     [4] BREVE..OGONEK
+	{0x02DC, 0x02DC, prN},     // Sk         SMALL TILDE
+	{0x02DD, 0x02DD, prA},     // Sk         DOUBLE ACUTE ACCENT
+	{0x02DE, 0x02DE, prN},     // Sk         MODIFIER LETTER RHOTIC HOOK
+	{0x02DF, 0x02DF, prA},     // Sk         MODIFIER LETTER CROSS ACCENT
+	{0x02E0, 0x02E4, prN},     // Lm     [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+	{0x02E5, 0x02EB, prN},     // Sk     [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK
+	{0x02EC, 0x02EC, prN},     // Lm         MODIFIER LETTER VOICING
+	{0x02ED, 0x02ED, prN},     // Sk         MODIFIER LETTER UNASPIRATED
+	{0x02EE, 0x02EE, prN},     // Lm         MODIFIER LETTER DOUBLE APOSTROPHE
+	{0x02EF, 0x02FF, prN},     // Sk    [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
+	{0x0300, 0x036F, prA},     // Mn   [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
+	{0x0370, 0x0373, prN},     // L&     [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+	{0x0374, 0x0374, prN},     // Lm         GREEK NUMERAL SIGN
+	{0x0375, 0x0375, prN},     // Sk         GREEK LOWER NUMERAL SIGN
+	{0x0376, 0x0377, prN},     // L&     [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+	{0x037A, 0x037A, prN},     // Lm         GREEK YPOGEGRAMMENI
+	{0x037B, 0x037D, prN},     // Ll     [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+	{0x037E, 0x037E, prN},     // Po         GREEK QUESTION MARK
+	{0x037F, 0x037F, prN},     // Lu         GREEK CAPITAL LETTER YOT
+	{0x0384, 0x0385, prN},     // Sk     [2] GREEK TONOS..GREEK DIALYTIKA TONOS
+	{0x0386, 0x0386, prN},     // Lu         GREEK CAPITAL LETTER ALPHA WITH TONOS
+	{0x0387, 0x0387, prN},     // Po         GREEK ANO TELEIA
+	{0x0388, 0x038A, prN},     // Lu     [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+	{0x038C, 0x038C, prN},     // Lu         GREEK CAPITAL LETTER OMICRON WITH TONOS
+	{0x038E, 0x0390, prN},     // L&     [3] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+	{0x0391, 0x03A1, prA},     // Lu    [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO
+	{0x03A3, 0x03A9, prA},     // Lu     [7] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER OMEGA
+	{0x03AA, 0x03B0, prN},     // L&     [7] GREEK CAPITAL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+	{0x03B1, 0x03C1, prA},     // Ll    [17] GREEK SMALL LETTER ALPHA..GREEK SMALL LETTER RHO
+	{0x03C2, 0x03C2, prN},     // Ll         GREEK SMALL LETTER FINAL SIGMA
+	{0x03C3, 0x03C9, prA},     // Ll     [7] GREEK SMALL LETTER SIGMA..GREEK SMALL LETTER OMEGA
+	{0x03CA, 0x03F5, prN},     // L&    [44] GREEK SMALL LETTER IOTA WITH DIALYTIKA..GREEK LUNATE EPSILON SYMBOL
+	{0x03F6, 0x03F6, prN},     // Sm         GREEK REVERSED LUNATE EPSILON SYMBOL
+	{0x03F7, 0x03FF, prN},     // L&     [9] GREEK CAPITAL LETTER SHO..GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+	{0x0400, 0x0400, prN},     // Lu         CYRILLIC CAPITAL LETTER IE WITH GRAVE
+	{0x0401, 0x0401, prA},     // Lu         CYRILLIC CAPITAL LETTER IO
+	{0x0402, 0x040F, prN},     // Lu    [14] CYRILLIC CAPITAL LETTER DJE..CYRILLIC CAPITAL LETTER DZHE
+	{0x0410, 0x044F, prA},     // L&    [64] CYRILLIC CAPITAL LETTER A..CYRILLIC SMALL LETTER YA
+	{0x0450, 0x0450, prN},     // Ll         CYRILLIC SMALL LETTER IE WITH GRAVE
+	{0x0451, 0x0451, prA},     // Ll         CYRILLIC SMALL LETTER IO
+	{0x0452, 0x0481, prN},     // L&    [48] CYRILLIC SMALL LETTER DJE..CYRILLIC SMALL LETTER KOPPA
+	{0x0482, 0x0482, prN},     // So         CYRILLIC THOUSANDS SIGN
+	{0x0483, 0x0487, prN},     // Mn     [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
+	{0x0488, 0x0489, prN},     // Me     [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
+	{0x048A, 0x04FF, prN},     // L&   [118] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER HA WITH STROKE
+	{0x0500, 0x052F, prN},     // L&    [48] CYRILLIC CAPITAL LETTER KOMI DE..CYRILLIC SMALL LETTER EL WITH DESCENDER
+	{0x0531, 0x0556, prN},     // Lu    [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+	{0x0559, 0x0559, prN},     // Lm         ARMENIAN MODIFIER LETTER LEFT HALF RING
+	{0x055A, 0x055F, prN},     // Po     [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK
+	{0x0560, 0x0588, prN},     // Ll    [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
+	{0x0589, 0x0589, prN},     // Po         ARMENIAN FULL STOP
+	{0x058A, 0x058A, prN},     // Pd         ARMENIAN HYPHEN
+	{0x058D, 0x058E, prN},     // So     [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN
+	{0x058F, 0x058F, prN},     // Sc         ARMENIAN DRAM SIGN
+	{0x0591, 0x05BD, prN},     // Mn    [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
+	{0x05BE, 0x05BE, prN},     // Pd         HEBREW PUNCTUATION MAQAF
+	{0x05BF, 0x05BF, prN},     // Mn         HEBREW POINT RAFE
+	{0x05C0, 0x05C0, prN},     // Po         HEBREW PUNCTUATION PASEQ
+	{0x05C1, 0x05C2, prN},     // Mn     [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+	{0x05C3, 0x05C3, prN},     // Po         HEBREW PUNCTUATION SOF PASUQ
+	{0x05C4, 0x05C5, prN},     // Mn     [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+	{0x05C6, 0x05C6, prN},     // Po         HEBREW PUNCTUATION NUN HAFUKHA
+	{0x05C7, 0x05C7, prN},     // Mn         HEBREW POINT QAMATS QATAN
+	{0x05D0, 0x05EA, prN},     // Lo    [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+	{0x05EF, 0x05F2, prN},     // Lo     [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD
+	{0x05F3, 0x05F4, prN},     // Po     [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM
+	{0x0600, 0x0605, prN},     // Cf     [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE
+	{0x0606, 0x0608, prN},     // Sm     [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY
+	{0x0609, 0x060A, prN},     // Po     [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN
+	{0x060B, 0x060B, prN},     // Sc         AFGHANI SIGN
+	{0x060C, 0x060D, prN},     // Po     [2] ARABIC COMMA..ARABIC DATE SEPARATOR
+	{0x060E, 0x060F, prN},     // So     [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA
+	{0x0610, 0x061A, prN},     // Mn    [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+	{0x061B, 0x061B, prN},     // Po         ARABIC SEMICOLON
+	{0x061C, 0x061C, prN},     // Cf         ARABIC LETTER MARK
+	{0x061D, 0x061F, prN},     // Po     [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK
+	{0x0620, 0x063F, prN},     // Lo    [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+	{0x0640, 0x0640, prN},     // Lm         ARABIC TATWEEL
+	{0x0641, 0x064A, prN},     // Lo    [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+	{0x064B, 0x065F, prN},     // Mn    [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW
+	{0x0660, 0x0669, prN},     // Nd    [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
+	{0x066A, 0x066D, prN},     // Po     [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR
+	{0x066E, 0x066F, prN},     // Lo     [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+	{0x0670, 0x0670, prN},     // Mn         ARABIC LETTER SUPERSCRIPT ALEF
+	{0x0671, 0x06D3, prN},     // Lo    [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+	{0x06D4, 0x06D4, prN},     // Po         ARABIC FULL STOP
+	{0x06D5, 0x06D5, prN},     // Lo         ARABIC LETTER AE
+	{0x06D6, 0x06DC, prN},     // Mn     [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+	{0x06DD, 0x06DD, prN},     // Cf         ARABIC END OF AYAH
+	{0x06DE, 0x06DE, prN},     // So         ARABIC START OF RUB EL HIZB
+	{0x06DF, 0x06E4, prN},     // Mn     [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
+	{0x06E5, 0x06E6, prN},     // Lm     [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+	{0x06E7, 0x06E8, prN},     // Mn     [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+	{0x06E9, 0x06E9, prN},     // So         ARABIC PLACE OF SAJDAH
+	{0x06EA, 0x06ED, prN},     // Mn     [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
+	{0x06EE, 0x06EF, prN},     // Lo     [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+	{0x06F0, 0x06F9, prN},     // Nd    [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
+	{0x06FA, 0x06FC, prN},     // Lo     [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+	{0x06FD, 0x06FE, prN},     // So     [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN
+	{0x06FF, 0x06FF, prN},     // Lo         ARABIC LETTER HEH WITH INVERTED V
+	{0x0700, 0x070D, prN},     // Po    [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS
+	{0x070F, 0x070F, prN},     // Cf         SYRIAC ABBREVIATION MARK
+	{0x0710, 0x0710, prN},     // Lo         SYRIAC LETTER ALAPH
+	{0x0711, 0x0711, prN},     // Mn         SYRIAC LETTER SUPERSCRIPT ALAPH
+	{0x0712, 0x072F, prN},     // Lo    [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+	{0x0730, 0x074A, prN},     // Mn    [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+	{0x074D, 0x074F, prN},     // Lo     [3] SYRIAC LETTER SOGDIAN ZHAIN..SYRIAC LETTER SOGDIAN FE
+	{0x0750, 0x077F, prN},     // Lo    [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE
+	{0x0780, 0x07A5, prN},     // Lo    [38] THAANA LETTER HAA..THAANA LETTER WAAVU
+	{0x07A6, 0x07B0, prN},     // Mn    [11] THAANA ABAFILI..THAANA SUKUN
+	{0x07B1, 0x07B1, prN},     // Lo         THAANA LETTER NAA
+	{0x07C0, 0x07C9, prN},     // Nd    [10] NKO DIGIT ZERO..NKO DIGIT NINE
+	{0x07CA, 0x07EA, prN},     // Lo    [33] NKO LETTER A..NKO LETTER JONA RA
+	{0x07EB, 0x07F3, prN},     // Mn     [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
+	{0x07F4, 0x07F5, prN},     // Lm     [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+	{0x07F6, 0x07F6, prN},     // So         NKO SYMBOL OO DENNEN
+	{0x07F7, 0x07F9, prN},     // Po     [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK
+	{0x07FA, 0x07FA, prN},     // Lm         NKO LAJANYALAN
+	{0x07FD, 0x07FD, prN},     // Mn         NKO DANTAYALAN
+	{0x07FE, 0x07FF, prN},     // Sc     [2] NKO DOROME SIGN..NKO TAMAN SIGN
+	{0x0800, 0x0815, prN},     // Lo    [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
+	{0x0816, 0x0819, prN},     // Mn     [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
+	{0x081A, 0x081A, prN},     // Lm         SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+	{0x081B, 0x0823, prN},     // Mn     [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
+	{0x0824, 0x0824, prN},     // Lm         SAMARITAN MODIFIER LETTER SHORT A
+	{0x0825, 0x0827, prN},     // Mn     [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
+	{0x0828, 0x0828, prN},     // Lm         SAMARITAN MODIFIER LETTER I
+	{0x0829, 0x082D, prN},     // Mn     [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
+	{0x0830, 0x083E, prN},     // Po    [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU
+	{0x0840, 0x0858, prN},     // Lo    [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
+	{0x0859, 0x085B, prN},     // Mn     [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
+	{0x085E, 0x085E, prN},     // Po         MANDAIC PUNCTUATION
+	{0x0860, 0x086A, prN},     // Lo    [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
+	{0x0870, 0x0887, prN},     // Lo    [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT
+	{0x0888, 0x0888, prN},     // Sk         ARABIC RAISED ROUND DOT
+	{0x0889, 0x088E, prN},     // Lo     [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL
+	{0x0890, 0x0891, prN},     // Cf     [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE
+	{0x0898, 0x089F, prN},     // Mn     [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA
+	{0x08A0, 0x08C8, prN},     // Lo    [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF
+	{0x08C9, 0x08C9, prN},     // Lm         ARABIC SMALL FARSI YEH
+	{0x08CA, 0x08E1, prN},     // Mn    [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA
+	{0x08E2, 0x08E2, prN},     // Cf         ARABIC DISPUTED END OF AYAH
+	{0x08E3, 0x08FF, prN},     // Mn    [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA
+	{0x0900, 0x0902, prN},     // Mn     [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
+	{0x0903, 0x0903, prN},     // Mc         DEVANAGARI SIGN VISARGA
+	{0x0904, 0x0939, prN},     // Lo    [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+	{0x093A, 0x093A, prN},     // Mn         DEVANAGARI VOWEL SIGN OE
+	{0x093B, 0x093B, prN},     // Mc         DEVANAGARI VOWEL SIGN OOE
+	{0x093C, 0x093C, prN},     // Mn         DEVANAGARI SIGN NUKTA
+	{0x093D, 0x093D, prN},     // Lo         DEVANAGARI SIGN AVAGRAHA
+	{0x093E, 0x0940, prN},     // Mc     [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+	{0x0941, 0x0948, prN},     // Mn     [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+	{0x0949, 0x094C, prN},     // Mc     [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+	{0x094D, 0x094D, prN},     // Mn         DEVANAGARI SIGN VIRAMA
+	{0x094E, 0x094F, prN},     // Mc     [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW
+	{0x0950, 0x0950, prN},     // Lo         DEVANAGARI OM
+	{0x0951, 0x0957, prN},     // Mn     [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE
+	{0x0958, 0x0961, prN},     // Lo    [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+	{0x0962, 0x0963, prN},     // Mn     [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+	{0x0964, 0x0965, prN},     // Po     [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
+	{0x0966, 0x096F, prN},     // Nd    [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
+	{0x0970, 0x0970, prN},     // Po         DEVANAGARI ABBREVIATION SIGN
+	{0x0971, 0x0971, prN},     // Lm         DEVANAGARI SIGN HIGH SPACING DOT
+	{0x0972, 0x097F, prN},     // Lo    [14] DEVANAGARI LETTER CANDRA A..DEVANAGARI LETTER BBA
+	{0x0980, 0x0980, prN},     // Lo         BENGALI ANJI
+	{0x0981, 0x0981, prN},     // Mn         BENGALI SIGN CANDRABINDU
+	{0x0982, 0x0983, prN},     // Mc     [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+	{0x0985, 0x098C, prN},     // Lo     [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+	{0x098F, 0x0990, prN},     // Lo     [2] BENGALI LETTER E..BENGALI LETTER AI
+	{0x0993, 0x09A8, prN},     // Lo    [22] BENGALI LETTER O..BENGALI LETTER NA
+	{0x09AA, 0x09B0, prN},     // Lo     [7] BENGALI LETTER PA..BENGALI LETTER RA
+	{0x09B2, 0x09B2, prN},     // Lo         BENGALI LETTER LA
+	{0x09B6, 0x09B9, prN},     // Lo     [4] BENGALI LETTER SHA..BENGALI LETTER HA
+	{0x09BC, 0x09BC, prN},     // Mn         BENGALI SIGN NUKTA
+	{0x09BD, 0x09BD, prN},     // Lo         BENGALI SIGN AVAGRAHA
+	{0x09BE, 0x09C0, prN},     // Mc     [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
+	{0x09C1, 0x09C4, prN},     // Mn     [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+	{0x09C7, 0x09C8, prN},     // Mc     [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+	{0x09CB, 0x09CC, prN},     // Mc     [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+	{0x09CD, 0x09CD, prN},     // Mn         BENGALI SIGN VIRAMA
+	{0x09CE, 0x09CE, prN},     // Lo         BENGALI LETTER KHANDA TA
+	{0x09D7, 0x09D7, prN},     // Mc         BENGALI AU LENGTH MARK
+	{0x09DC, 0x09DD, prN},     // Lo     [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+	{0x09DF, 0x09E1, prN},     // Lo     [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+	{0x09E2, 0x09E3, prN},     // Mn     [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+	{0x09E6, 0x09EF, prN},     // Nd    [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
+	{0x09F0, 0x09F1, prN},     // Lo     [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+	{0x09F2, 0x09F3, prN},     // Sc     [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN
+	{0x09F4, 0x09F9, prN},     // No     [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN
+	{0x09FA, 0x09FA, prN},     // So         BENGALI ISSHAR
+	{0x09FB, 0x09FB, prN},     // Sc         BENGALI GANDA MARK
+	{0x09FC, 0x09FC, prN},     // Lo         BENGALI LETTER VEDIC ANUSVARA
+	{0x09FD, 0x09FD, prN},     // Po         BENGALI ABBREVIATION SIGN
+	{0x09FE, 0x09FE, prN},     // Mn         BENGALI SANDHI MARK
+	{0x0A01, 0x0A02, prN},     // Mn     [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+	{0x0A03, 0x0A03, prN},     // Mc         GURMUKHI SIGN VISARGA
+	{0x0A05, 0x0A0A, prN},     // Lo     [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+	{0x0A0F, 0x0A10, prN},     // Lo     [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+	{0x0A13, 0x0A28, prN},     // Lo    [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+	{0x0A2A, 0x0A30, prN},     // Lo     [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+	{0x0A32, 0x0A33, prN},     // Lo     [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+	{0x0A35, 0x0A36, prN},     // Lo     [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+	{0x0A38, 0x0A39, prN},     // Lo     [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+	{0x0A3C, 0x0A3C, prN},     // Mn         GURMUKHI SIGN NUKTA
+	{0x0A3E, 0x0A40, prN},     // Mc     [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+	{0x0A41, 0x0A42, prN},     // Mn     [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+	{0x0A47, 0x0A48, prN},     // Mn     [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+	{0x0A4B, 0x0A4D, prN},     // Mn     [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
+	{0x0A51, 0x0A51, prN},     // Mn         GURMUKHI SIGN UDAAT
+	{0x0A59, 0x0A5C, prN},     // Lo     [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
+	{0x0A5E, 0x0A5E, prN},     // Lo         GURMUKHI LETTER FA
+	{0x0A66, 0x0A6F, prN},     // Nd    [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
+	{0x0A70, 0x0A71, prN},     // Mn     [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+	{0x0A72, 0x0A74, prN},     // Lo     [3] GURMUKHI IRI..GURMUKHI EK ONKAR
+	{0x0A75, 0x0A75, prN},     // Mn         GURMUKHI SIGN YAKASH
+	{0x0A76, 0x0A76, prN},     // Po         GURMUKHI ABBREVIATION SIGN
+	{0x0A81, 0x0A82, prN},     // Mn     [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+	{0x0A83, 0x0A83, prN},     // Mc         GUJARATI SIGN VISARGA
+	{0x0A85, 0x0A8D, prN},     // Lo     [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
+	{0x0A8F, 0x0A91, prN},     // Lo     [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+	{0x0A93, 0x0AA8, prN},     // Lo    [22] GUJARATI LETTER O..GUJARATI LETTER NA
+	{0x0AAA, 0x0AB0, prN},     // Lo     [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+	{0x0AB2, 0x0AB3, prN},     // Lo     [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+	{0x0AB5, 0x0AB9, prN},     // Lo     [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+	{0x0ABC, 0x0ABC, prN},     // Mn         GUJARATI SIGN NUKTA
+	{0x0ABD, 0x0ABD, prN},     // Lo         GUJARATI SIGN AVAGRAHA
+	{0x0ABE, 0x0AC0, prN},     // Mc     [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
+	{0x0AC1, 0x0AC5, prN},     // Mn     [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+	{0x0AC7, 0x0AC8, prN},     // Mn     [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+	{0x0AC9, 0x0AC9, prN},     // Mc         GUJARATI VOWEL SIGN CANDRA O
+	{0x0ACB, 0x0ACC, prN},     // Mc     [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+	{0x0ACD, 0x0ACD, prN},     // Mn         GUJARATI SIGN VIRAMA
+	{0x0AD0, 0x0AD0, prN},     // Lo         GUJARATI OM
+	{0x0AE0, 0x0AE1, prN},     // Lo     [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
+	{0x0AE2, 0x0AE3, prN},     // Mn     [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+	{0x0AE6, 0x0AEF, prN},     // Nd    [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
+	{0x0AF0, 0x0AF0, prN},     // Po         GUJARATI ABBREVIATION SIGN
+	{0x0AF1, 0x0AF1, prN},     // Sc         GUJARATI RUPEE SIGN
+	{0x0AF9, 0x0AF9, prN},     // Lo         GUJARATI LETTER ZHA
+	{0x0AFA, 0x0AFF, prN},     // Mn     [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
+	{0x0B01, 0x0B01, prN},     // Mn         ORIYA SIGN CANDRABINDU
+	{0x0B02, 0x0B03, prN},     // Mc     [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+	{0x0B05, 0x0B0C, prN},     // Lo     [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+	{0x0B0F, 0x0B10, prN},     // Lo     [2] ORIYA LETTER E..ORIYA LETTER AI
+	{0x0B13, 0x0B28, prN},     // Lo    [22] ORIYA LETTER O..ORIYA LETTER NA
+	{0x0B2A, 0x0B30, prN},     // Lo     [7] ORIYA LETTER PA..ORIYA LETTER RA
+	{0x0B32, 0x0B33, prN},     // Lo     [2] ORIYA LETTER LA..ORIYA LETTER LLA
+	{0x0B35, 0x0B39, prN},     // Lo     [5] ORIYA LETTER VA..ORIYA LETTER HA
+	{0x0B3C, 0x0B3C, prN},     // Mn         ORIYA SIGN NUKTA
+	{0x0B3D, 0x0B3D, prN},     // Lo         ORIYA SIGN AVAGRAHA
+	{0x0B3E, 0x0B3E, prN},     // Mc         ORIYA VOWEL SIGN AA
+	{0x0B3F, 0x0B3F, prN},     // Mn         ORIYA VOWEL SIGN I
+	{0x0B40, 0x0B40, prN},     // Mc         ORIYA VOWEL SIGN II
+	{0x0B41, 0x0B44, prN},     // Mn     [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
+	{0x0B47, 0x0B48, prN},     // Mc     [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+	{0x0B4B, 0x0B4C, prN},     // Mc     [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+	{0x0B4D, 0x0B4D, prN},     // Mn         ORIYA SIGN VIRAMA
+	{0x0B55, 0x0B56, prN},     // Mn     [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
+	{0x0B57, 0x0B57, prN},     // Mc         ORIYA AU LENGTH MARK
+	{0x0B5C, 0x0B5D, prN},     // Lo     [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+	{0x0B5F, 0x0B61, prN},     // Lo     [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+	{0x0B62, 0x0B63, prN},     // Mn     [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+	{0x0B66, 0x0B6F, prN},     // Nd    [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
+	{0x0B70, 0x0B70, prN},     // So         ORIYA ISSHAR
+	{0x0B71, 0x0B71, prN},     // Lo         ORIYA LETTER WA
+	{0x0B72, 0x0B77, prN},     // No     [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS
+	{0x0B82, 0x0B82, prN},     // Mn         TAMIL SIGN ANUSVARA
+	{0x0B83, 0x0B83, prN},     // Lo         TAMIL SIGN VISARGA
+	{0x0B85, 0x0B8A, prN},     // Lo     [6] TAMIL LETTER A..TAMIL LETTER UU
+	{0x0B8E, 0x0B90, prN},     // Lo     [3] TAMIL LETTER E..TAMIL LETTER AI
+	{0x0B92, 0x0B95, prN},     // Lo     [4] TAMIL LETTER O..TAMIL LETTER KA
+	{0x0B99, 0x0B9A, prN},     // Lo     [2] TAMIL LETTER NGA..TAMIL LETTER CA
+	{0x0B9C, 0x0B9C, prN},     // Lo         TAMIL LETTER JA
+	{0x0B9E, 0x0B9F, prN},     // Lo     [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+	{0x0BA3, 0x0BA4, prN},     // Lo     [2] TAMIL LETTER NNA..TAMIL LETTER TA
+	{0x0BA8, 0x0BAA, prN},     // Lo     [3] TAMIL LETTER NA..TAMIL LETTER PA
+	{0x0BAE, 0x0BB9, prN},     // Lo    [12] TAMIL LETTER MA..TAMIL LETTER HA
+	{0x0BBE, 0x0BBF, prN},     // Mc     [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
+	{0x0BC0, 0x0BC0, prN},     // Mn         TAMIL VOWEL SIGN II
+	{0x0BC1, 0x0BC2, prN},     // Mc     [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+	{0x0BC6, 0x0BC8, prN},     // Mc     [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+	{0x0BCA, 0x0BCC, prN},     // Mc     [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+	{0x0BCD, 0x0BCD, prN},     // Mn         TAMIL SIGN VIRAMA
+	{0x0BD0, 0x0BD0, prN},     // Lo         TAMIL OM
+	{0x0BD7, 0x0BD7, prN},     // Mc         TAMIL AU LENGTH MARK
+	{0x0BE6, 0x0BEF, prN},     // Nd    [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
+	{0x0BF0, 0x0BF2, prN},     // No     [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND
+	{0x0BF3, 0x0BF8, prN},     // So     [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN
+	{0x0BF9, 0x0BF9, prN},     // Sc         TAMIL RUPEE SIGN
+	{0x0BFA, 0x0BFA, prN},     // So         TAMIL NUMBER SIGN
+	{0x0C00, 0x0C00, prN},     // Mn         TELUGU SIGN COMBINING CANDRABINDU ABOVE
+	{0x0C01, 0x0C03, prN},     // Mc     [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+	{0x0C04, 0x0C04, prN},     // Mn         TELUGU SIGN COMBINING ANUSVARA ABOVE
+	{0x0C05, 0x0C0C, prN},     // Lo     [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+	{0x0C0E, 0x0C10, prN},     // Lo     [3] TELUGU LETTER E..TELUGU LETTER AI
+	{0x0C12, 0x0C28, prN},     // Lo    [23] TELUGU LETTER O..TELUGU LETTER NA
+	{0x0C2A, 0x0C39, prN},     // Lo    [16] TELUGU LETTER PA..TELUGU LETTER HA
+	{0x0C3C, 0x0C3C, prN},     // Mn         TELUGU SIGN NUKTA
+	{0x0C3D, 0x0C3D, prN},     // Lo         TELUGU SIGN AVAGRAHA
+	{0x0C3E, 0x0C40, prN},     // Mn     [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+	{0x0C41, 0x0C44, prN},     // Mc     [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+	{0x0C46, 0x0C48, prN},     // Mn     [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+	{0x0C4A, 0x0C4D, prN},     // Mn     [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+	{0x0C55, 0x0C56, prN},     // Mn     [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+	{0x0C58, 0x0C5A, prN},     // Lo     [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
+	{0x0C5D, 0x0C5D, prN},     // Lo         TELUGU LETTER NAKAARA POLLU
+	{0x0C60, 0x0C61, prN},     // Lo     [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+	{0x0C62, 0x0C63, prN},     // Mn     [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+	{0x0C66, 0x0C6F, prN},     // Nd    [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
+	{0x0C77, 0x0C77, prN},     // Po         TELUGU SIGN SIDDHAM
+	{0x0C78, 0x0C7E, prN},     // No     [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
+	{0x0C7F, 0x0C7F, prN},     // So         TELUGU SIGN TUUMU
+	{0x0C80, 0x0C80, prN},     // Lo         KANNADA SIGN SPACING CANDRABINDU
+	{0x0C81, 0x0C81, prN},     // Mn         KANNADA SIGN CANDRABINDU
+	{0x0C82, 0x0C83, prN},     // Mc     [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+	{0x0C84, 0x0C84, prN},     // Po         KANNADA SIGN SIDDHAM
+	{0x0C85, 0x0C8C, prN},     // Lo     [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+	{0x0C8E, 0x0C90, prN},     // Lo     [3] KANNADA LETTER E..KANNADA LETTER AI
+	{0x0C92, 0x0CA8, prN},     // Lo    [23] KANNADA LETTER O..KANNADA LETTER NA
+	{0x0CAA, 0x0CB3, prN},     // Lo    [10] KANNADA LETTER PA..KANNADA LETTER LLA
+	{0x0CB5, 0x0CB9, prN},     // Lo     [5] KANNADA LETTER VA..KANNADA LETTER HA
+	{0x0CBC, 0x0CBC, prN},     // Mn         KANNADA SIGN NUKTA
+	{0x0CBD, 0x0CBD, prN},     // Lo         KANNADA SIGN AVAGRAHA
+	{0x0CBE, 0x0CBE, prN},     // Mc         KANNADA VOWEL SIGN AA
+	{0x0CBF, 0x0CBF, prN},     // Mn         KANNADA VOWEL SIGN I
+	{0x0CC0, 0x0CC4, prN},     // Mc     [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
+	{0x0CC6, 0x0CC6, prN},     // Mn         KANNADA VOWEL SIGN E
+	{0x0CC7, 0x0CC8, prN},     // Mc     [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+	{0x0CCA, 0x0CCB, prN},     // Mc     [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+	{0x0CCC, 0x0CCD, prN},     // Mn     [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
+	{0x0CD5, 0x0CD6, prN},     // Mc     [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+	{0x0CDD, 0x0CDE, prN},     // Lo     [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA
+	{0x0CE0, 0x0CE1, prN},     // Lo     [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+	{0x0CE2, 0x0CE3, prN},     // Mn     [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+	{0x0CE6, 0x0CEF, prN},     // Nd    [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
+	{0x0CF1, 0x0CF2, prN},     // Lo     [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
+	{0x0D00, 0x0D01, prN},     // Mn     [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
+	{0x0D02, 0x0D03, prN},     // Mc     [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+	{0x0D04, 0x0D0C, prN},     // Lo     [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
+	{0x0D0E, 0x0D10, prN},     // Lo     [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+	{0x0D12, 0x0D3A, prN},     // Lo    [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
+	{0x0D3B, 0x0D3C, prN},     // Mn     [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
+	{0x0D3D, 0x0D3D, prN},     // Lo         MALAYALAM SIGN AVAGRAHA
+	{0x0D3E, 0x0D40, prN},     // Mc     [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
+	{0x0D41, 0x0D44, prN},     // Mn     [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
+	{0x0D46, 0x0D48, prN},     // Mc     [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+	{0x0D4A, 0x0D4C, prN},     // Mc     [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+	{0x0D4D, 0x0D4D, prN},     // Mn         MALAYALAM SIGN VIRAMA
+	{0x0D4E, 0x0D4E, prN},     // Lo         MALAYALAM LETTER DOT REPH
+	{0x0D4F, 0x0D4F, prN},     // So         MALAYALAM SIGN PARA
+	{0x0D54, 0x0D56, prN},     // Lo     [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
+	{0x0D57, 0x0D57, prN},     // Mc         MALAYALAM AU LENGTH MARK
+	{0x0D58, 0x0D5E, prN},     // No     [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH
+	{0x0D5F, 0x0D61, prN},     // Lo     [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
+	{0x0D62, 0x0D63, prN},     // Mn     [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+	{0x0D66, 0x0D6F, prN},     // Nd    [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
+	{0x0D70, 0x0D78, prN},     // No     [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS
+	{0x0D79, 0x0D79, prN},     // So         MALAYALAM DATE MARK
+	{0x0D7A, 0x0D7F, prN},     // Lo     [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+	{0x0D81, 0x0D81, prN},     // Mn         SINHALA SIGN CANDRABINDU
+	{0x0D82, 0x0D83, prN},     // Mc     [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+	{0x0D85, 0x0D96, prN},     // Lo    [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
+	{0x0D9A, 0x0DB1, prN},     // Lo    [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
+	{0x0DB3, 0x0DBB, prN},     // Lo     [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+	{0x0DBD, 0x0DBD, prN},     // Lo         SINHALA LETTER DANTAJA LAYANNA
+	{0x0DC0, 0x0DC6, prN},     // Lo     [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+	{0x0DCA, 0x0DCA, prN},     // Mn         SINHALA SIGN AL-LAKUNA
+	{0x0DCF, 0x0DD1, prN},     // Mc     [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+	{0x0DD2, 0x0DD4, prN},     // Mn     [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+	{0x0DD6, 0x0DD6, prN},     // Mn         SINHALA VOWEL SIGN DIGA PAA-PILLA
+	{0x0DD8, 0x0DDF, prN},     // Mc     [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
+	{0x0DE6, 0x0DEF, prN},     // Nd    [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE
+	{0x0DF2, 0x0DF3, prN},     // Mc     [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+	{0x0DF4, 0x0DF4, prN},     // Po         SINHALA PUNCTUATION KUNDDALIYA
+	{0x0E01, 0x0E30, prN},     // Lo    [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
+	{0x0E31, 0x0E31, prN},     // Mn         THAI CHARACTER MAI HAN-AKAT
+	{0x0E32, 0x0E33, prN},     // Lo     [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
+	{0x0E34, 0x0E3A, prN},     // Mn     [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+	{0x0E3F, 0x0E3F, prN},     // Sc         THAI CURRENCY SYMBOL BAHT
+	{0x0E40, 0x0E45, prN},     // Lo     [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
+	{0x0E46, 0x0E46, prN},     // Lm         THAI CHARACTER MAIYAMOK
+	{0x0E47, 0x0E4E, prN},     // Mn     [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
+	{0x0E4F, 0x0E4F, prN},     // Po         THAI CHARACTER FONGMAN
+	{0x0E50, 0x0E59, prN},     // Nd    [10] THAI DIGIT ZERO..THAI DIGIT NINE
+	{0x0E5A, 0x0E5B, prN},     // Po     [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT
+	{0x0E81, 0x0E82, prN},     // Lo     [2] LAO LETTER KO..LAO LETTER KHO SUNG
+	{0x0E84, 0x0E84, prN},     // Lo         LAO LETTER KHO TAM
+	{0x0E86, 0x0E8A, prN},     // Lo     [5] LAO LETTER PALI GHA..LAO LETTER SO TAM
+	{0x0E8C, 0x0EA3, prN},     // Lo    [24] LAO LETTER PALI JHA..LAO LETTER LO LING
+	{0x0EA5, 0x0EA5, prN},     // Lo         LAO LETTER LO LOOT
+	{0x0EA7, 0x0EB0, prN},     // Lo    [10] LAO LETTER WO..LAO VOWEL SIGN A
+	{0x0EB1, 0x0EB1, prN},     // Mn         LAO VOWEL SIGN MAI KAN
+	{0x0EB2, 0x0EB3, prN},     // Lo     [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
+	{0x0EB4, 0x0EBC, prN},     // Mn     [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO
+	{0x0EBD, 0x0EBD, prN},     // Lo         LAO SEMIVOWEL SIGN NYO
+	{0x0EC0, 0x0EC4, prN},     // Lo     [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+	{0x0EC6, 0x0EC6, prN},     // Lm         LAO KO LA
+	{0x0EC8, 0x0ECD, prN},     // Mn     [6] LAO TONE MAI EK..LAO NIGGAHITA
+	{0x0ED0, 0x0ED9, prN},     // Nd    [10] LAO DIGIT ZERO..LAO DIGIT NINE
+	{0x0EDC, 0x0EDF, prN},     // Lo     [4] LAO HO NO..LAO LETTER KHMU NYO
+	{0x0F00, 0x0F00, prN},     // Lo         TIBETAN SYLLABLE OM
+	{0x0F01, 0x0F03, prN},     // So     [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
+	{0x0F04, 0x0F12, prN},     // Po    [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD
+	{0x0F13, 0x0F13, prN},     // So         TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
+	{0x0F14, 0x0F14, prN},     // Po         TIBETAN MARK GTER TSHEG
+	{0x0F15, 0x0F17, prN},     // So     [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
+	{0x0F18, 0x0F19, prN},     // Mn     [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+	{0x0F1A, 0x0F1F, prN},     // So     [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG
+	{0x0F20, 0x0F29, prN},     // Nd    [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
+	{0x0F2A, 0x0F33, prN},     // No    [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO
+	{0x0F34, 0x0F34, prN},     // So         TIBETAN MARK BSDUS RTAGS
+	{0x0F35, 0x0F35, prN},     // Mn         TIBETAN MARK NGAS BZUNG NYI ZLA
+	{0x0F36, 0x0F36, prN},     // So         TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
+	{0x0F37, 0x0F37, prN},     // Mn         TIBETAN MARK NGAS BZUNG SGOR RTAGS
+	{0x0F38, 0x0F38, prN},     // So         TIBETAN MARK CHE MGO
+	{0x0F39, 0x0F39, prN},     // Mn         TIBETAN MARK TSA -PHRU
+	{0x0F3A, 0x0F3A, prN},     // Ps         TIBETAN MARK GUG RTAGS GYON
+	{0x0F3B, 0x0F3B, prN},     // Pe         TIBETAN MARK GUG RTAGS GYAS
+	{0x0F3C, 0x0F3C, prN},     // Ps         TIBETAN MARK ANG KHANG GYON
+	{0x0F3D, 0x0F3D, prN},     // Pe         TIBETAN MARK ANG KHANG GYAS
+	{0x0F3E, 0x0F3F, prN},     // Mc     [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
+	{0x0F40, 0x0F47, prN},     // Lo     [8] TIBETAN LETTER KA..TIBETAN LETTER JA
+	{0x0F49, 0x0F6C, prN},     // Lo    [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
+	{0x0F71, 0x0F7E, prN},     // Mn    [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+	{0x0F7F, 0x0F7F, prN},     // Mc         TIBETAN SIGN RNAM BCAD
+	{0x0F80, 0x0F84, prN},     // Mn     [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
+	{0x0F85, 0x0F85, prN},     // Po         TIBETAN MARK PALUTA
+	{0x0F86, 0x0F87, prN},     // Mn     [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+	{0x0F88, 0x0F8C, prN},     // Lo     [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN
+	{0x0F8D, 0x0F97, prN},     // Mn    [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
+	{0x0F99, 0x0FBC, prN},     // Mn    [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+	{0x0FBE, 0x0FC5, prN},     // So     [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE
+	{0x0FC6, 0x0FC6, prN},     // Mn         TIBETAN SYMBOL PADMA GDAN
+	{0x0FC7, 0x0FCC, prN},     // So     [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL
+	{0x0FCE, 0x0FCF, prN},     // So     [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM
+	{0x0FD0, 0x0FD4, prN},     // Po     [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
+	{0x0FD5, 0x0FD8, prN},     // So     [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS
+	{0x0FD9, 0x0FDA, prN},     // Po     [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS
+	{0x1000, 0x102A, prN},     // Lo    [43] MYANMAR LETTER KA..MYANMAR LETTER AU
+	{0x102B, 0x102C, prN},     // Mc     [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
+	{0x102D, 0x1030, prN},     // Mn     [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+	{0x1031, 0x1031, prN},     // Mc         MYANMAR VOWEL SIGN E
+	{0x1032, 0x1037, prN},     // Mn     [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
+	{0x1038, 0x1038, prN},     // Mc         MYANMAR SIGN VISARGA
+	{0x1039, 0x103A, prN},     // Mn     [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
+	{0x103B, 0x103C, prN},     // Mc     [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
+	{0x103D, 0x103E, prN},     // Mn     [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
+	{0x103F, 0x103F, prN},     // Lo         MYANMAR LETTER GREAT SA
+	{0x1040, 0x1049, prN},     // Nd    [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
+	{0x104A, 0x104F, prN},     // Po     [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE
+	{0x1050, 0x1055, prN},     // Lo     [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
+	{0x1056, 0x1057, prN},     // Mc     [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+	{0x1058, 0x1059, prN},     // Mn     [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+	{0x105A, 0x105D, prN},     // Lo     [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
+	{0x105E, 0x1060, prN},     // Mn     [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
+	{0x1061, 0x1061, prN},     // Lo         MYANMAR LETTER SGAW KAREN SHA
+	{0x1062, 0x1064, prN},     // Mc     [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO
+	{0x1065, 0x1066, prN},     // Lo     [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
+	{0x1067, 0x106D, prN},     // Mc     [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5
+	{0x106E, 0x1070, prN},     // Lo     [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
+	{0x1071, 0x1074, prN},     // Mn     [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
+	{0x1075, 0x1081, prN},     // Lo    [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
+	{0x1082, 0x1082, prN},     // Mn         MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+	{0x1083, 0x1084, prN},     // Mc     [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
+	{0x1085, 0x1086, prN},     // Mn     [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
+	{0x1087, 0x108C, prN},     // Mc     [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
+	{0x108D, 0x108D, prN},     // Mn         MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+	{0x108E, 0x108E, prN},     // Lo         MYANMAR LETTER RUMAI PALAUNG FA
+	{0x108F, 0x108F, prN},     // Mc         MYANMAR SIGN RUMAI PALAUNG TONE-5
+	{0x1090, 0x1099, prN},     // Nd    [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE
+	{0x109A, 0x109C, prN},     // Mc     [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A
+	{0x109D, 0x109D, prN},     // Mn         MYANMAR VOWEL SIGN AITON AI
+	{0x109E, 0x109F, prN},     // So     [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION
+	{0x10A0, 0x10C5, prN},     // Lu    [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+	{0x10C7, 0x10C7, prN},     // Lu         GEORGIAN CAPITAL LETTER YN
+	{0x10CD, 0x10CD, prN},     // Lu         GEORGIAN CAPITAL LETTER AEN
+	{0x10D0, 0x10FA, prN},     // Ll    [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+	{0x10FB, 0x10FB, prN},     // Po         GEORGIAN PARAGRAPH SEPARATOR
+	{0x10FC, 0x10FC, prN},     // Lm         MODIFIER LETTER GEORGIAN NAR
+	{0x10FD, 0x10FF, prN},     // Ll     [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+	{0x1100, 0x115F, prW},     // Lo    [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER
+	{0x1160, 0x11FF, prN},     // Lo   [160] HANGUL JUNGSEONG FILLER..HANGUL JONGSEONG SSANGNIEUN
+	{0x1200, 0x1248, prN},     // Lo    [73] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE QWA
+	{0x124A, 0x124D, prN},     // Lo     [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+	{0x1250, 0x1256, prN},     // Lo     [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+	{0x1258, 0x1258, prN},     // Lo         ETHIOPIC SYLLABLE QHWA
+	{0x125A, 0x125D, prN},     // Lo     [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+	{0x1260, 0x1288, prN},     // Lo    [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
+	{0x128A, 0x128D, prN},     // Lo     [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+	{0x1290, 0x12B0, prN},     // Lo    [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
+	{0x12B2, 0x12B5, prN},     // Lo     [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+	{0x12B8, 0x12BE, prN},     // Lo     [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+	{0x12C0, 0x12C0, prN},     // Lo         ETHIOPIC SYLLABLE KXWA
+	{0x12C2, 0x12C5, prN},     // Lo     [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+	{0x12C8, 0x12D6, prN},     // Lo    [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
+	{0x12D8, 0x1310, prN},     // Lo    [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
+	{0x1312, 0x1315, prN},     // Lo     [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+	{0x1318, 0x135A, prN},     // Lo    [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
+	{0x135D, 0x135F, prN},     // Mn     [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
+	{0x1360, 0x1368, prN},     // Po     [9] ETHIOPIC SECTION MARK..ETHIOPIC PARAGRAPH SEPARATOR
+	{0x1369, 0x137C, prN},     // No    [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND
+	{0x1380, 0x138F, prN},     // Lo    [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+	{0x1390, 0x1399, prN},     // So    [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT
+	{0x13A0, 0x13F5, prN},     // Lu    [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
+	{0x13F8, 0x13FD, prN},     // Ll     [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+	{0x1400, 0x1400, prN},     // Pd         CANADIAN SYLLABICS HYPHEN
+	{0x1401, 0x166C, prN},     // Lo   [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+	{0x166D, 0x166D, prN},     // So         CANADIAN SYLLABICS CHI SIGN
+	{0x166E, 0x166E, prN},     // Po         CANADIAN SYLLABICS FULL STOP
+	{0x166F, 0x167F, prN},     // Lo    [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
+	{0x1680, 0x1680, prN},     // Zs         OGHAM SPACE MARK
+	{0x1681, 0x169A, prN},     // Lo    [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+	{0x169B, 0x169B, prN},     // Ps         OGHAM FEATHER MARK
+	{0x169C, 0x169C, prN},     // Pe         OGHAM REVERSED FEATHER MARK
+	{0x16A0, 0x16EA, prN},     // Lo    [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+	{0x16EB, 0x16ED, prN},     // Po     [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION
+	{0x16EE, 0x16F0, prN},     // Nl     [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+	{0x16F1, 0x16F8, prN},     // Lo     [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC
+	{0x1700, 0x1711, prN},     // Lo    [18] TAGALOG LETTER A..TAGALOG LETTER HA
+	{0x1712, 0x1714, prN},     // Mn     [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
+	{0x1715, 0x1715, prN},     // Mc         TAGALOG SIGN PAMUDPOD
+	{0x171F, 0x171F, prN},     // Lo         TAGALOG LETTER ARCHAIC RA
+	{0x1720, 0x1731, prN},     // Lo    [18] HANUNOO LETTER A..HANUNOO LETTER HA
+	{0x1732, 0x1733, prN},     // Mn     [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U
+	{0x1734, 0x1734, prN},     // Mc         HANUNOO SIGN PAMUDPOD
+	{0x1735, 0x1736, prN},     // Po     [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
+	{0x1740, 0x1751, prN},     // Lo    [18] BUHID LETTER A..BUHID LETTER HA
+	{0x1752, 0x1753, prN},     // Mn     [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+	{0x1760, 0x176C, prN},     // Lo    [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+	{0x176E, 0x1770, prN},     // Lo     [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+	{0x1772, 0x1773, prN},     // Mn     [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+	{0x1780, 0x17B3, prN},     // Lo    [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
+	{0x17B4, 0x17B5, prN},     // Mn     [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+	{0x17B6, 0x17B6, prN},     // Mc         KHMER VOWEL SIGN AA
+	{0x17B7, 0x17BD, prN},     // Mn     [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+	{0x17BE, 0x17C5, prN},     // Mc     [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
+	{0x17C6, 0x17C6, prN},     // Mn         KHMER SIGN NIKAHIT
+	{0x17C7, 0x17C8, prN},     // Mc     [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+	{0x17C9, 0x17D3, prN},     // Mn    [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+	{0x17D4, 0x17D6, prN},     // Po     [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH
+	{0x17D7, 0x17D7, prN},     // Lm         KHMER SIGN LEK TOO
+	{0x17D8, 0x17DA, prN},     // Po     [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT
+	{0x17DB, 0x17DB, prN},     // Sc         KHMER CURRENCY SYMBOL RIEL
+	{0x17DC, 0x17DC, prN},     // Lo         KHMER SIGN AVAKRAHASANYA
+	{0x17DD, 0x17DD, prN},     // Mn         KHMER SIGN ATTHACAN
+	{0x17E0, 0x17E9, prN},     // Nd    [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
+	{0x17F0, 0x17F9, prN},     // No    [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON
+	{0x1800, 0x1805, prN},     // Po     [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS
+	{0x1806, 0x1806, prN},     // Pd         MONGOLIAN TODO SOFT HYPHEN
+	{0x1807, 0x180A, prN},     // Po     [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU
+	{0x180B, 0x180D, prN},     // Mn     [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+	{0x180E, 0x180E, prN},     // Cf         MONGOLIAN VOWEL SEPARATOR
+	{0x180F, 0x180F, prN},     // Mn         MONGOLIAN FREE VARIATION SELECTOR FOUR
+	{0x1810, 0x1819, prN},     // Nd    [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
+	{0x1820, 0x1842, prN},     // Lo    [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
+	{0x1843, 0x1843, prN},     // Lm         MONGOLIAN LETTER TODO LONG VOWEL SIGN
+	{0x1844, 0x1878, prN},     // Lo    [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS
+	{0x1880, 0x1884, prN},     // Lo     [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+	{0x1885, 0x1886, prN},     // Mn     [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
+	{0x1887, 0x18A8, prN},     // Lo    [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
+	{0x18A9, 0x18A9, prN},     // Mn         MONGOLIAN LETTER ALI GALI DAGALGA
+	{0x18AA, 0x18AA, prN},     // Lo         MONGOLIAN LETTER MANCHU ALI GALI LHA
+	{0x18B0, 0x18F5, prN},     // Lo    [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
+	{0x1900, 0x191E, prN},     // Lo    [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA
+	{0x1920, 0x1922, prN},     // Mn     [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+	{0x1923, 0x1926, prN},     // Mc     [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
+	{0x1927, 0x1928, prN},     // Mn     [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+	{0x1929, 0x192B, prN},     // Mc     [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+	{0x1930, 0x1931, prN},     // Mc     [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+	{0x1932, 0x1932, prN},     // Mn         LIMBU SMALL LETTER ANUSVARA
+	{0x1933, 0x1938, prN},     // Mc     [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+	{0x1939, 0x193B, prN},     // Mn     [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+	{0x1940, 0x1940, prN},     // So         LIMBU SIGN LOO
+	{0x1944, 0x1945, prN},     // Po     [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
+	{0x1946, 0x194F, prN},     // Nd    [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE
+	{0x1950, 0x196D, prN},     // Lo    [30] TAI LE LETTER KA..TAI LE LETTER AI
+	{0x1970, 0x1974, prN},     // Lo     [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+	{0x1980, 0x19AB, prN},     // Lo    [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
+	{0x19B0, 0x19C9, prN},     // Lo    [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2
+	{0x19D0, 0x19D9, prN},     // Nd    [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
+	{0x19DA, 0x19DA, prN},     // No         NEW TAI LUE THAM DIGIT ONE
+	{0x19DE, 0x19DF, prN},     // So     [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV
+	{0x19E0, 0x19FF, prN},     // So    [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC
+	{0x1A00, 0x1A16, prN},     // Lo    [23] BUGINESE LETTER KA..BUGINESE LETTER HA
+	{0x1A17, 0x1A18, prN},     // Mn     [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+	{0x1A19, 0x1A1A, prN},     // Mc     [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O
+	{0x1A1B, 0x1A1B, prN},     // Mn         BUGINESE VOWEL SIGN AE
+	{0x1A1E, 0x1A1F, prN},     // Po     [2] BUGINESE PALLAWA..BUGINESE END OF SECTION
+	{0x1A20, 0x1A54, prN},     // Lo    [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
+	{0x1A55, 0x1A55, prN},     // Mc         TAI THAM CONSONANT SIGN MEDIAL RA
+	{0x1A56, 0x1A56, prN},     // Mn         TAI THAM CONSONANT SIGN MEDIAL LA
+	{0x1A57, 0x1A57, prN},     // Mc         TAI THAM CONSONANT SIGN LA TANG LAI
+	{0x1A58, 0x1A5E, prN},     // Mn     [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
+	{0x1A60, 0x1A60, prN},     // Mn         TAI THAM SIGN SAKOT
+	{0x1A61, 0x1A61, prN},     // Mc         TAI THAM VOWEL SIGN A
+	{0x1A62, 0x1A62, prN},     // Mn         TAI THAM VOWEL SIGN MAI SAT
+	{0x1A63, 0x1A64, prN},     // Mc     [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
+	{0x1A65, 0x1A6C, prN},     // Mn     [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
+	{0x1A6D, 0x1A72, prN},     // Mc     [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
+	{0x1A73, 0x1A7C, prN},     // Mn    [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
+	{0x1A7F, 0x1A7F, prN},     // Mn         TAI THAM COMBINING CRYPTOGRAMMIC DOT
+	{0x1A80, 0x1A89, prN},     // Nd    [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE
+	{0x1A90, 0x1A99, prN},     // Nd    [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE
+	{0x1AA0, 0x1AA6, prN},     // Po     [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA
+	{0x1AA7, 0x1AA7, prN},     // Lm         TAI THAM SIGN MAI YAMOK
+	{0x1AA8, 0x1AAD, prN},     // Po     [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG
+	{0x1AB0, 0x1ABD, prN},     // Mn    [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
+	{0x1ABE, 0x1ABE, prN},     // Me         COMBINING PARENTHESES OVERLAY
+	{0x1ABF, 0x1ACE, prN},     // Mn    [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T
+	{0x1B00, 0x1B03, prN},     // Mn     [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
+	{0x1B04, 0x1B04, prN},     // Mc         BALINESE SIGN BISAH
+	{0x1B05, 0x1B33, prN},     // Lo    [47] BALINESE LETTER AKARA..BALINESE LETTER HA
+	{0x1B34, 0x1B34, prN},     // Mn         BALINESE SIGN REREKAN
+	{0x1B35, 0x1B35, prN},     // Mc         BALINESE VOWEL SIGN TEDUNG
+	{0x1B36, 0x1B3A, prN},     // Mn     [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
+	{0x1B3B, 0x1B3B, prN},     // Mc         BALINESE VOWEL SIGN RA REPA TEDUNG
+	{0x1B3C, 0x1B3C, prN},     // Mn         BALINESE VOWEL SIGN LA LENGA
+	{0x1B3D, 0x1B41, prN},     // Mc     [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+	{0x1B42, 0x1B42, prN},     // Mn         BALINESE VOWEL SIGN PEPET
+	{0x1B43, 0x1B44, prN},     // Mc     [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
+	{0x1B45, 0x1B4C, prN},     // Lo     [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA
+	{0x1B50, 0x1B59, prN},     // Nd    [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE
+	{0x1B5A, 0x1B60, prN},     // Po     [7] BALINESE PANTI..BALINESE PAMENENG
+	{0x1B61, 0x1B6A, prN},     // So    [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE
+	{0x1B6B, 0x1B73, prN},     // Mn     [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
+	{0x1B74, 0x1B7C, prN},     // So     [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
+	{0x1B7D, 0x1B7E, prN},     // Po     [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG
+	{0x1B80, 0x1B81, prN},     // Mn     [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
+	{0x1B82, 0x1B82, prN},     // Mc         SUNDANESE SIGN PANGWISAD
+	{0x1B83, 0x1BA0, prN},     // Lo    [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
+	{0x1BA1, 0x1BA1, prN},     // Mc         SUNDANESE CONSONANT SIGN PAMINGKAL
+	{0x1BA2, 0x1BA5, prN},     // Mn     [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
+	{0x1BA6, 0x1BA7, prN},     // Mc     [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
+	{0x1BA8, 0x1BA9, prN},     // Mn     [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+	{0x1BAA, 0x1BAA, prN},     // Mc         SUNDANESE SIGN PAMAAEH
+	{0x1BAB, 0x1BAD, prN},     // Mn     [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA
+	{0x1BAE, 0x1BAF, prN},     // Lo     [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
+	{0x1BB0, 0x1BB9, prN},     // Nd    [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE
+	{0x1BBA, 0x1BBF, prN},     // Lo     [6] SUNDANESE AVAGRAHA..SUNDANESE LETTER FINAL M
+	{0x1BC0, 0x1BE5, prN},     // Lo    [38] BATAK LETTER A..BATAK LETTER U
+	{0x1BE6, 0x1BE6, prN},     // Mn         BATAK SIGN TOMPI
+	{0x1BE7, 0x1BE7, prN},     // Mc         BATAK VOWEL SIGN E
+	{0x1BE8, 0x1BE9, prN},     // Mn     [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
+	{0x1BEA, 0x1BEC, prN},     // Mc     [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
+	{0x1BED, 0x1BED, prN},     // Mn         BATAK VOWEL SIGN KARO O
+	{0x1BEE, 0x1BEE, prN},     // Mc         BATAK VOWEL SIGN U
+	{0x1BEF, 0x1BF1, prN},     // Mn     [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
+	{0x1BF2, 0x1BF3, prN},     // Mc     [2] BATAK PANGOLAT..BATAK PANONGONAN
+	{0x1BFC, 0x1BFF, prN},     // Po     [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT
+	{0x1C00, 0x1C23, prN},     // Lo    [36] LEPCHA LETTER KA..LEPCHA LETTER A
+	{0x1C24, 0x1C2B, prN},     // Mc     [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
+	{0x1C2C, 0x1C33, prN},     // Mn     [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
+	{0x1C34, 0x1C35, prN},     // Mc     [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
+	{0x1C36, 0x1C37, prN},     // Mn     [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
+	{0x1C3B, 0x1C3F, prN},     // Po     [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK
+	{0x1C40, 0x1C49, prN},     // Nd    [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE
+	{0x1C4D, 0x1C4F, prN},     // Lo     [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
+	{0x1C50, 0x1C59, prN},     // Nd    [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE
+	{0x1C5A, 0x1C77, prN},     // Lo    [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
+	{0x1C78, 0x1C7D, prN},     // Lm     [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+	{0x1C7E, 0x1C7F, prN},     // Po     [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD
+	{0x1C80, 0x1C88, prN},     // Ll     [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
+	{0x1C90, 0x1CBA, prN},     // Lu    [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+	{0x1CBD, 0x1CBF, prN},     // Lu     [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+	{0x1CC0, 0x1CC7, prN},     // Po     [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA
+	{0x1CD0, 0x1CD2, prN},     // Mn     [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
+	{0x1CD3, 0x1CD3, prN},     // Po         VEDIC SIGN NIHSHVASA
+	{0x1CD4, 0x1CE0, prN},     // Mn    [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+	{0x1CE1, 0x1CE1, prN},     // Mc         VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+	{0x1CE2, 0x1CE8, prN},     // Mn     [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+	{0x1CE9, 0x1CEC, prN},     // Lo     [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+	{0x1CED, 0x1CED, prN},     // Mn         VEDIC SIGN TIRYAK
+	{0x1CEE, 0x1CF3, prN},     // Lo     [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA
+	{0x1CF4, 0x1CF4, prN},     // Mn         VEDIC TONE CANDRA ABOVE
+	{0x1CF5, 0x1CF6, prN},     // Lo     [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
+	{0x1CF7, 0x1CF7, prN},     // Mc         VEDIC SIGN ATIKRAMA
+	{0x1CF8, 0x1CF9, prN},     // Mn     [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
+	{0x1CFA, 0x1CFA, prN},     // Lo         VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA
+	{0x1D00, 0x1D2B, prN},     // Ll    [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+	{0x1D2C, 0x1D6A, prN},     // Lm    [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
+	{0x1D6B, 0x1D77, prN},     // Ll    [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
+	{0x1D78, 0x1D78, prN},     // Lm         MODIFIER LETTER CYRILLIC EN
+	{0x1D79, 0x1D7F, prN},     // Ll     [7] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER UPSILON WITH STROKE
+	{0x1D80, 0x1D9A, prN},     // Ll    [27] LATIN SMALL LETTER B WITH PALATAL HOOK..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+	{0x1D9B, 0x1DBF, prN},     // Lm    [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+	{0x1DC0, 0x1DFF, prN},     // Mn    [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+	{0x1E00, 0x1EFF, prN},     // L&   [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP
+	{0x1F00, 0x1F15, prN},     // L&    [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+	{0x1F18, 0x1F1D, prN},     // Lu     [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+	{0x1F20, 0x1F45, prN},     // L&    [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+	{0x1F48, 0x1F4D, prN},     // Lu     [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+	{0x1F50, 0x1F57, prN},     // Ll     [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+	{0x1F59, 0x1F59, prN},     // Lu         GREEK CAPITAL LETTER UPSILON WITH DASIA
+	{0x1F5B, 0x1F5B, prN},     // Lu         GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+	{0x1F5D, 0x1F5D, prN},     // Lu         GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+	{0x1F5F, 0x1F7D, prN},     // L&    [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
+	{0x1F80, 0x1FB4, prN},     // L&    [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+	{0x1FB6, 0x1FBC, prN},     // L&     [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+	{0x1FBD, 0x1FBD, prN},     // Sk         GREEK KORONIS
+	{0x1FBE, 0x1FBE, prN},     // Ll         GREEK PROSGEGRAMMENI
+	{0x1FBF, 0x1FC1, prN},     // Sk     [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
+	{0x1FC2, 0x1FC4, prN},     // Ll     [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+	{0x1FC6, 0x1FCC, prN},     // L&     [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+	{0x1FCD, 0x1FCF, prN},     // Sk     [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+	{0x1FD0, 0x1FD3, prN},     // Ll     [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+	{0x1FD6, 0x1FDB, prN},     // L&     [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
+	{0x1FDD, 0x1FDF, prN},     // Sk     [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+	{0x1FE0, 0x1FEC, prN},     // L&    [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+	{0x1FED, 0x1FEF, prN},     // Sk     [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+	{0x1FF2, 0x1FF4, prN},     // Ll     [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+	{0x1FF6, 0x1FFC, prN},     // L&     [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+	{0x1FFD, 0x1FFE, prN},     // Sk     [2] GREEK OXIA..GREEK DASIA
+	{0x2000, 0x200A, prN},     // Zs    [11] EN QUAD..HAIR SPACE
+	{0x200B, 0x200F, prN},     // Cf     [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK
+	{0x2010, 0x2010, prA},     // Pd         HYPHEN
+	{0x2011, 0x2012, prN},     // Pd     [2] NON-BREAKING HYPHEN..FIGURE DASH
+	{0x2013, 0x2015, prA},     // Pd     [3] EN DASH..HORIZONTAL BAR
+	{0x2016, 0x2016, prA},     // Po         DOUBLE VERTICAL LINE
+	{0x2017, 0x2017, prN},     // Po         DOUBLE LOW LINE
+	{0x2018, 0x2018, prA},     // Pi         LEFT SINGLE QUOTATION MARK
+	{0x2019, 0x2019, prA},     // Pf         RIGHT SINGLE QUOTATION MARK
+	{0x201A, 0x201A, prN},     // Ps         SINGLE LOW-9 QUOTATION MARK
+	{0x201B, 0x201B, prN},     // Pi         SINGLE HIGH-REVERSED-9 QUOTATION MARK
+	{0x201C, 0x201C, prA},     // Pi         LEFT DOUBLE QUOTATION MARK
+	{0x201D, 0x201D, prA},     // Pf         RIGHT DOUBLE QUOTATION MARK
+	{0x201E, 0x201E, prN},     // Ps         DOUBLE LOW-9 QUOTATION MARK
+	{0x201F, 0x201F, prN},     // Pi         DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+	{0x2020, 0x2022, prA},     // Po     [3] DAGGER..BULLET
+	{0x2023, 0x2023, prN},     // Po         TRIANGULAR BULLET
+	{0x2024, 0x2027, prA},     // Po     [4] ONE DOT LEADER..HYPHENATION POINT
+	{0x2028, 0x2028, prN},     // Zl         LINE SEPARATOR
+	{0x2029, 0x2029, prN},     // Zp         PARAGRAPH SEPARATOR
+	{0x202A, 0x202E, prN},     // Cf     [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+	{0x202F, 0x202F, prN},     // Zs         NARROW NO-BREAK SPACE
+	{0x2030, 0x2030, prA},     // Po         PER MILLE SIGN
+	{0x2031, 0x2031, prN},     // Po         PER TEN THOUSAND SIGN
+	{0x2032, 0x2033, prA},     // Po     [2] PRIME..DOUBLE PRIME
+	{0x2034, 0x2034, prN},     // Po         TRIPLE PRIME
+	{0x2035, 0x2035, prA},     // Po         REVERSED PRIME
+	{0x2036, 0x2038, prN},     // Po     [3] REVERSED DOUBLE PRIME..CARET
+	{0x2039, 0x2039, prN},     // Pi         SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+	{0x203A, 0x203A, prN},     // Pf         SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+	{0x203B, 0x203B, prA},     // Po         REFERENCE MARK
+	{0x203C, 0x203D, prN},     // Po     [2] DOUBLE EXCLAMATION MARK..INTERROBANG
+	{0x203E, 0x203E, prA},     // Po         OVERLINE
+	{0x203F, 0x2040, prN},     // Pc     [2] UNDERTIE..CHARACTER TIE
+	{0x2041, 0x2043, prN},     // Po     [3] CARET INSERTION POINT..HYPHEN BULLET
+	{0x2044, 0x2044, prN},     // Sm         FRACTION SLASH
+	{0x2045, 0x2045, prN},     // Ps         LEFT SQUARE BRACKET WITH QUILL
+	{0x2046, 0x2046, prN},     // Pe         RIGHT SQUARE BRACKET WITH QUILL
+	{0x2047, 0x2051, prN},     // Po    [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY
+	{0x2052, 0x2052, prN},     // Sm         COMMERCIAL MINUS SIGN
+	{0x2053, 0x2053, prN},     // Po         SWUNG DASH
+	{0x2054, 0x2054, prN},     // Pc         INVERTED UNDERTIE
+	{0x2055, 0x205E, prN},     // Po    [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS
+	{0x205F, 0x205F, prN},     // Zs         MEDIUM MATHEMATICAL SPACE
+	{0x2060, 0x2064, prN},     // Cf     [5] WORD JOINER..INVISIBLE PLUS
+	{0x2066, 0x206F, prN},     // Cf    [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES
+	{0x2070, 0x2070, prN},     // No         SUPERSCRIPT ZERO
+	{0x2071, 0x2071, prN},     // Lm         SUPERSCRIPT LATIN SMALL LETTER I
+	{0x2074, 0x2074, prA},     // No         SUPERSCRIPT FOUR
+	{0x2075, 0x2079, prN},     // No     [5] SUPERSCRIPT FIVE..SUPERSCRIPT NINE
+	{0x207A, 0x207C, prN},     // Sm     [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN
+	{0x207D, 0x207D, prN},     // Ps         SUPERSCRIPT LEFT PARENTHESIS
+	{0x207E, 0x207E, prN},     // Pe         SUPERSCRIPT RIGHT PARENTHESIS
+	{0x207F, 0x207F, prA},     // Lm         SUPERSCRIPT LATIN SMALL LETTER N
+	{0x2080, 0x2080, prN},     // No         SUBSCRIPT ZERO
+	{0x2081, 0x2084, prA},     // No     [4] SUBSCRIPT ONE..SUBSCRIPT FOUR
+	{0x2085, 0x2089, prN},     // No     [5] SUBSCRIPT FIVE..SUBSCRIPT NINE
+	{0x208A, 0x208C, prN},     // Sm     [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
+	{0x208D, 0x208D, prN},     // Ps         SUBSCRIPT LEFT PARENTHESIS
+	{0x208E, 0x208E, prN},     // Pe         SUBSCRIPT RIGHT PARENTHESIS
+	{0x2090, 0x209C, prN},     // Lm    [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
+	{0x20A0, 0x20A8, prN},     // Sc     [9] EURO-CURRENCY SIGN..RUPEE SIGN
+	{0x20A9, 0x20A9, prH},     // Sc         WON SIGN
+	{0x20AA, 0x20AB, prN},     // Sc     [2] NEW SHEQEL SIGN..DONG SIGN
+	{0x20AC, 0x20AC, prA},     // Sc         EURO SIGN
+	{0x20AD, 0x20C0, prN},     // Sc    [20] KIP SIGN..SOM SIGN
+	{0x20D0, 0x20DC, prN},     // Mn    [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+	{0x20DD, 0x20E0, prN},     // Me     [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
+	{0x20E1, 0x20E1, prN},     // Mn         COMBINING LEFT RIGHT ARROW ABOVE
+	{0x20E2, 0x20E4, prN},     // Me     [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+	{0x20E5, 0x20F0, prN},     // Mn    [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
+	{0x2100, 0x2101, prN},     // So     [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
+	{0x2102, 0x2102, prN},     // Lu         DOUBLE-STRUCK CAPITAL C
+	{0x2103, 0x2103, prA},     // So         DEGREE CELSIUS
+	{0x2104, 0x2104, prN},     // So         CENTRE LINE SYMBOL
+	{0x2105, 0x2105, prA},     // So         CARE OF
+	{0x2106, 0x2106, prN},     // So         CADA UNA
+	{0x2107, 0x2107, prN},     // Lu         EULER CONSTANT
+	{0x2108, 0x2108, prN},     // So         SCRUPLE
+	{0x2109, 0x2109, prA},     // So         DEGREE FAHRENHEIT
+	{0x210A, 0x2112, prN},     // L&     [9] SCRIPT SMALL G..SCRIPT CAPITAL L
+	{0x2113, 0x2113, prA},     // Ll         SCRIPT SMALL L
+	{0x2114, 0x2114, prN},     // So         L B BAR SYMBOL
+	{0x2115, 0x2115, prN},     // Lu         DOUBLE-STRUCK CAPITAL N
+	{0x2116, 0x2116, prA},     // So         NUMERO SIGN
+	{0x2117, 0x2117, prN},     // So         SOUND RECORDING COPYRIGHT
+	{0x2118, 0x2118, prN},     // Sm         SCRIPT CAPITAL P
+	{0x2119, 0x211D, prN},     // Lu     [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+	{0x211E, 0x2120, prN},     // So     [3] PRESCRIPTION TAKE..SERVICE MARK
+	{0x2121, 0x2122, prA},     // So     [2] TELEPHONE SIGN..TRADE MARK SIGN
+	{0x2123, 0x2123, prN},     // So         VERSICLE
+	{0x2124, 0x2124, prN},     // Lu         DOUBLE-STRUCK CAPITAL Z
+	{0x2125, 0x2125, prN},     // So         OUNCE SIGN
+	{0x2126, 0x2126, prA},     // Lu         OHM SIGN
+	{0x2127, 0x2127, prN},     // So         INVERTED OHM SIGN
+	{0x2128, 0x2128, prN},     // Lu         BLACK-LETTER CAPITAL Z
+	{0x2129, 0x2129, prN},     // So         TURNED GREEK SMALL LETTER IOTA
+	{0x212A, 0x212A, prN},     // Lu         KELVIN SIGN
+	{0x212B, 0x212B, prA},     // Lu         ANGSTROM SIGN
+	{0x212C, 0x212D, prN},     // Lu     [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C
+	{0x212E, 0x212E, prN},     // So         ESTIMATED SYMBOL
+	{0x212F, 0x2134, prN},     // L&     [6] SCRIPT SMALL E..SCRIPT SMALL O
+	{0x2135, 0x2138, prN},     // Lo     [4] ALEF SYMBOL..DALET SYMBOL
+	{0x2139, 0x2139, prN},     // Ll         INFORMATION SOURCE
+	{0x213A, 0x213B, prN},     // So     [2] ROTATED CAPITAL Q..FACSIMILE SIGN
+	{0x213C, 0x213F, prN},     // L&     [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+	{0x2140, 0x2144, prN},     // Sm     [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y
+	{0x2145, 0x2149, prN},     // L&     [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+	{0x214A, 0x214A, prN},     // So         PROPERTY LINE
+	{0x214B, 0x214B, prN},     // Sm         TURNED AMPERSAND
+	{0x214C, 0x214D, prN},     // So     [2] PER SIGN..AKTIESELSKAB
+	{0x214E, 0x214E, prN},     // Ll         TURNED SMALL F
+	{0x214F, 0x214F, prN},     // So         SYMBOL FOR SAMARITAN SOURCE
+	{0x2150, 0x2152, prN},     // No     [3] VULGAR FRACTION ONE SEVENTH..VULGAR FRACTION ONE TENTH
+	{0x2153, 0x2154, prA},     // No     [2] VULGAR FRACTION ONE THIRD..VULGAR FRACTION TWO THIRDS
+	{0x2155, 0x215A, prN},     // No     [6] VULGAR FRACTION ONE FIFTH..VULGAR FRACTION FIVE SIXTHS
+	{0x215B, 0x215E, prA},     // No     [4] VULGAR FRACTION ONE EIGHTH..VULGAR FRACTION SEVEN EIGHTHS
+	{0x215F, 0x215F, prN},     // No         FRACTION NUMERATOR ONE
+	{0x2160, 0x216B, prA},     // Nl    [12] ROMAN NUMERAL ONE..ROMAN NUMERAL TWELVE
+	{0x216C, 0x216F, prN},     // Nl     [4] ROMAN NUMERAL FIFTY..ROMAN NUMERAL ONE THOUSAND
+	{0x2170, 0x2179, prA},     // Nl    [10] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL TEN
+	{0x217A, 0x2182, prN},     // Nl     [9] SMALL ROMAN NUMERAL ELEVEN..ROMAN NUMERAL TEN THOUSAND
+	{0x2183, 0x2184, prN},     // L&     [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
+	{0x2185, 0x2188, prN},     // Nl     [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
+	{0x2189, 0x2189, prA},     // No         VULGAR FRACTION ZERO THIRDS
+	{0x218A, 0x218B, prN},     // So     [2] TURNED DIGIT TWO..TURNED DIGIT THREE
+	{0x2190, 0x2194, prA},     // Sm     [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
+	{0x2195, 0x2199, prA},     // So     [5] UP DOWN ARROW..SOUTH WEST ARROW
+	{0x219A, 0x219B, prN},     // Sm     [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+	{0x219C, 0x219F, prN},     // So     [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
+	{0x21A0, 0x21A0, prN},     // Sm         RIGHTWARDS TWO HEADED ARROW
+	{0x21A1, 0x21A2, prN},     // So     [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
+	{0x21A3, 0x21A3, prN},     // Sm         RIGHTWARDS ARROW WITH TAIL
+	{0x21A4, 0x21A5, prN},     // So     [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
+	{0x21A6, 0x21A6, prN},     // Sm         RIGHTWARDS ARROW FROM BAR
+	{0x21A7, 0x21AD, prN},     // So     [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW
+	{0x21AE, 0x21AE, prN},     // Sm         LEFT RIGHT ARROW WITH STROKE
+	{0x21AF, 0x21B7, prN},     // So     [9] DOWNWARDS ZIGZAG ARROW..CLOCKWISE TOP SEMICIRCLE ARROW
+	{0x21B8, 0x21B9, prA},     // So     [2] NORTH WEST ARROW TO LONG BAR..LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
+	{0x21BA, 0x21CD, prN},     // So    [20] ANTICLOCKWISE OPEN CIRCLE ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE
+	{0x21CE, 0x21CF, prN},     // Sm     [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+	{0x21D0, 0x21D1, prN},     // So     [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
+	{0x21D2, 0x21D2, prA},     // Sm         RIGHTWARDS DOUBLE ARROW
+	{0x21D3, 0x21D3, prN},     // So         DOWNWARDS DOUBLE ARROW
+	{0x21D4, 0x21D4, prA},     // Sm         LEFT RIGHT DOUBLE ARROW
+	{0x21D5, 0x21E6, prN},     // So    [18] UP DOWN DOUBLE ARROW..LEFTWARDS WHITE ARROW
+	{0x21E7, 0x21E7, prA},     // So         UPWARDS WHITE ARROW
+	{0x21E8, 0x21F3, prN},     // So    [12] RIGHTWARDS WHITE ARROW..UP DOWN WHITE ARROW
+	{0x21F4, 0x21FF, prN},     // Sm    [12] RIGHT ARROW WITH SMALL CIRCLE..LEFT RIGHT OPEN-HEADED ARROW
+	{0x2200, 0x2200, prA},     // Sm         FOR ALL
+	{0x2201, 0x2201, prN},     // Sm         COMPLEMENT
+	{0x2202, 0x2203, prA},     // Sm     [2] PARTIAL DIFFERENTIAL..THERE EXISTS
+	{0x2204, 0x2206, prN},     // Sm     [3] THERE DOES NOT EXIST..INCREMENT
+	{0x2207, 0x2208, prA},     // Sm     [2] NABLA..ELEMENT OF
+	{0x2209, 0x220A, prN},     // Sm     [2] NOT AN ELEMENT OF..SMALL ELEMENT OF
+	{0x220B, 0x220B, prA},     // Sm         CONTAINS AS MEMBER
+	{0x220C, 0x220E, prN},     // Sm     [3] DOES NOT CONTAIN AS MEMBER..END OF PROOF
+	{0x220F, 0x220F, prA},     // Sm         N-ARY PRODUCT
+	{0x2210, 0x2210, prN},     // Sm         N-ARY COPRODUCT
+	{0x2211, 0x2211, prA},     // Sm         N-ARY SUMMATION
+	{0x2212, 0x2214, prN},     // Sm     [3] MINUS SIGN..DOT PLUS
+	{0x2215, 0x2215, prA},     // Sm         DIVISION SLASH
+	{0x2216, 0x2219, prN},     // Sm     [4] SET MINUS..BULLET OPERATOR
+	{0x221A, 0x221A, prA},     // Sm         SQUARE ROOT
+	{0x221B, 0x221C, prN},     // Sm     [2] CUBE ROOT..FOURTH ROOT
+	{0x221D, 0x2220, prA},     // Sm     [4] PROPORTIONAL TO..ANGLE
+	{0x2221, 0x2222, prN},     // Sm     [2] MEASURED ANGLE..SPHERICAL ANGLE
+	{0x2223, 0x2223, prA},     // Sm         DIVIDES
+	{0x2224, 0x2224, prN},     // Sm         DOES NOT DIVIDE
+	{0x2225, 0x2225, prA},     // Sm         PARALLEL TO
+	{0x2226, 0x2226, prN},     // Sm         NOT PARALLEL TO
+	{0x2227, 0x222C, prA},     // Sm     [6] LOGICAL AND..DOUBLE INTEGRAL
+	{0x222D, 0x222D, prN},     // Sm         TRIPLE INTEGRAL
+	{0x222E, 0x222E, prA},     // Sm         CONTOUR INTEGRAL
+	{0x222F, 0x2233, prN},     // Sm     [5] SURFACE INTEGRAL..ANTICLOCKWISE CONTOUR INTEGRAL
+	{0x2234, 0x2237, prA},     // Sm     [4] THEREFORE..PROPORTION
+	{0x2238, 0x223B, prN},     // Sm     [4] DOT MINUS..HOMOTHETIC
+	{0x223C, 0x223D, prA},     // Sm     [2] TILDE OPERATOR..REVERSED TILDE
+	{0x223E, 0x2247, prN},     // Sm    [10] INVERTED LAZY S..NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+	{0x2248, 0x2248, prA},     // Sm         ALMOST EQUAL TO
+	{0x2249, 0x224B, prN},     // Sm     [3] NOT ALMOST EQUAL TO..TRIPLE TILDE
+	{0x224C, 0x224C, prA},     // Sm         ALL EQUAL TO
+	{0x224D, 0x2251, prN},     // Sm     [5] EQUIVALENT TO..GEOMETRICALLY EQUAL TO
+	{0x2252, 0x2252, prA},     // Sm         APPROXIMATELY EQUAL TO OR THE IMAGE OF
+	{0x2253, 0x225F, prN},     // Sm    [13] IMAGE OF OR APPROXIMATELY EQUAL TO..QUESTIONED EQUAL TO
+	{0x2260, 0x2261, prA},     // Sm     [2] NOT EQUAL TO..IDENTICAL TO
+	{0x2262, 0x2263, prN},     // Sm     [2] NOT IDENTICAL TO..STRICTLY EQUIVALENT TO
+	{0x2264, 0x2267, prA},     // Sm     [4] LESS-THAN OR EQUAL TO..GREATER-THAN OVER EQUAL TO
+	{0x2268, 0x2269, prN},     // Sm     [2] LESS-THAN BUT NOT EQUAL TO..GREATER-THAN BUT NOT EQUAL TO
+	{0x226A, 0x226B, prA},     // Sm     [2] MUCH LESS-THAN..MUCH GREATER-THAN
+	{0x226C, 0x226D, prN},     // Sm     [2] BETWEEN..NOT EQUIVALENT TO
+	{0x226E, 0x226F, prA},     // Sm     [2] NOT LESS-THAN..NOT GREATER-THAN
+	{0x2270, 0x2281, prN},     // Sm    [18] NEITHER LESS-THAN NOR EQUAL TO..DOES NOT SUCCEED
+	{0x2282, 0x2283, prA},     // Sm     [2] SUBSET OF..SUPERSET OF
+	{0x2284, 0x2285, prN},     // Sm     [2] NOT A SUBSET OF..NOT A SUPERSET OF
+	{0x2286, 0x2287, prA},     // Sm     [2] SUBSET OF OR EQUAL TO..SUPERSET OF OR EQUAL TO
+	{0x2288, 0x2294, prN},     // Sm    [13] NEITHER A SUBSET OF NOR EQUAL TO..SQUARE CUP
+	{0x2295, 0x2295, prA},     // Sm         CIRCLED PLUS
+	{0x2296, 0x2298, prN},     // Sm     [3] CIRCLED MINUS..CIRCLED DIVISION SLASH
+	{0x2299, 0x2299, prA},     // Sm         CIRCLED DOT OPERATOR
+	{0x229A, 0x22A4, prN},     // Sm    [11] CIRCLED RING OPERATOR..DOWN TACK
+	{0x22A5, 0x22A5, prA},     // Sm         UP TACK
+	{0x22A6, 0x22BE, prN},     // Sm    [25] ASSERTION..RIGHT ANGLE WITH ARC
+	{0x22BF, 0x22BF, prA},     // Sm         RIGHT TRIANGLE
+	{0x22C0, 0x22FF, prN},     // Sm    [64] N-ARY LOGICAL AND..Z NOTATION BAG MEMBERSHIP
+	{0x2300, 0x2307, prN},     // So     [8] DIAMETER SIGN..WAVY LINE
+	{0x2308, 0x2308, prN},     // Ps         LEFT CEILING
+	{0x2309, 0x2309, prN},     // Pe         RIGHT CEILING
+	{0x230A, 0x230A, prN},     // Ps         LEFT FLOOR
+	{0x230B, 0x230B, prN},     // Pe         RIGHT FLOOR
+	{0x230C, 0x2311, prN},     // So     [6] BOTTOM RIGHT CROP..SQUARE LOZENGE
+	{0x2312, 0x2312, prA},     // So         ARC
+	{0x2313, 0x2319, prN},     // So     [7] SEGMENT..TURNED NOT SIGN
+	{0x231A, 0x231B, prW},     // So     [2] WATCH..HOURGLASS
+	{0x231C, 0x231F, prN},     // So     [4] TOP LEFT CORNER..BOTTOM RIGHT CORNER
+	{0x2320, 0x2321, prN},     // Sm     [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
+	{0x2322, 0x2328, prN},     // So     [7] FROWN..KEYBOARD
+	{0x2329, 0x2329, prW},     // Ps         LEFT-POINTING ANGLE BRACKET
+	{0x232A, 0x232A, prW},     // Pe         RIGHT-POINTING ANGLE BRACKET
+	{0x232B, 0x237B, prN},     // So    [81] ERASE TO THE LEFT..NOT CHECK MARK
+	{0x237C, 0x237C, prN},     // Sm         RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+	{0x237D, 0x239A, prN},     // So    [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL
+	{0x239B, 0x23B3, prN},     // Sm    [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
+	{0x23B4, 0x23DB, prN},     // So    [40] TOP SQUARE BRACKET..FUSE
+	{0x23DC, 0x23E1, prN},     // Sm     [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
+	{0x23E2, 0x23E8, prN},     // So     [7] WHITE TRAPEZIUM..DECIMAL EXPONENT SYMBOL
+	{0x23E9, 0x23EC, prW},     // So     [4] BLACK RIGHT-POINTING DOUBLE TRIANGLE..BLACK DOWN-POINTING DOUBLE TRIANGLE
+	{0x23ED, 0x23EF, prN},     // So     [3] BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR..BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR
+	{0x23F0, 0x23F0, prW},     // So         ALARM CLOCK
+	{0x23F1, 0x23F2, prN},     // So     [2] STOPWATCH..TIMER CLOCK
+	{0x23F3, 0x23F3, prW},     // So         HOURGLASS WITH FLOWING SAND
+	{0x23F4, 0x23FF, prN},     // So    [12] BLACK MEDIUM LEFT-POINTING TRIANGLE..OBSERVER EYE SYMBOL
+	{0x2400, 0x2426, prN},     // So    [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
+	{0x2440, 0x244A, prN},     // So    [11] OCR HOOK..OCR DOUBLE BACKSLASH
+	{0x2460, 0x249B, prA},     // No    [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
+	{0x249C, 0x24E9, prA},     // So    [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+	{0x24EA, 0x24EA, prN},     // No         CIRCLED DIGIT ZERO
+	{0x24EB, 0x24FF, prA},     // No    [21] NEGATIVE CIRCLED NUMBER ELEVEN..NEGATIVE CIRCLED DIGIT ZERO
+	{0x2500, 0x254B, prA},     // So    [76] BOX DRAWINGS LIGHT HORIZONTAL..BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+	{0x254C, 0x254F, prN},     // So     [4] BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL..BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
+	{0x2550, 0x2573, prA},     // So    [36] BOX DRAWINGS DOUBLE HORIZONTAL..BOX DRAWINGS LIGHT DIAGONAL CROSS
+	{0x2574, 0x257F, prN},     // So    [12] BOX DRAWINGS LIGHT LEFT..BOX DRAWINGS HEAVY UP AND LIGHT DOWN
+	{0x2580, 0x258F, prA},     // So    [16] UPPER HALF BLOCK..LEFT ONE EIGHTH BLOCK
+	{0x2590, 0x2591, prN},     // So     [2] RIGHT HALF BLOCK..LIGHT SHADE
+	{0x2592, 0x2595, prA},     // So     [4] MEDIUM SHADE..RIGHT ONE EIGHTH BLOCK
+	{0x2596, 0x259F, prN},     // So    [10] QUADRANT LOWER LEFT..QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT
+	{0x25A0, 0x25A1, prA},     // So     [2] BLACK SQUARE..WHITE SQUARE
+	{0x25A2, 0x25A2, prN},     // So         WHITE SQUARE WITH ROUNDED CORNERS
+	{0x25A3, 0x25A9, prA},     // So     [7] WHITE SQUARE CONTAINING BLACK SMALL SQUARE..SQUARE WITH DIAGONAL CROSSHATCH FILL
+	{0x25AA, 0x25B1, prN},     // So     [8] BLACK SMALL SQUARE..WHITE PARALLELOGRAM
+	{0x25B2, 0x25B3, prA},     // So     [2] BLACK UP-POINTING TRIANGLE..WHITE UP-POINTING TRIANGLE
+	{0x25B4, 0x25B5, prN},     // So     [2] BLACK UP-POINTING SMALL TRIANGLE..WHITE UP-POINTING SMALL TRIANGLE
+	{0x25B6, 0x25B6, prA},     // So         BLACK RIGHT-POINTING TRIANGLE
+	{0x25B7, 0x25B7, prA},     // Sm         WHITE RIGHT-POINTING TRIANGLE
+	{0x25B8, 0x25BB, prN},     // So     [4] BLACK RIGHT-POINTING SMALL TRIANGLE..WHITE RIGHT-POINTING POINTER
+	{0x25BC, 0x25BD, prA},     // So     [2] BLACK DOWN-POINTING TRIANGLE..WHITE DOWN-POINTING TRIANGLE
+	{0x25BE, 0x25BF, prN},     // So     [2] BLACK DOWN-POINTING SMALL TRIANGLE..WHITE DOWN-POINTING SMALL TRIANGLE
+	{0x25C0, 0x25C0, prA},     // So         BLACK LEFT-POINTING TRIANGLE
+	{0x25C1, 0x25C1, prA},     // Sm         WHITE LEFT-POINTING TRIANGLE
+	{0x25C2, 0x25C5, prN},     // So     [4] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE LEFT-POINTING POINTER
+	{0x25C6, 0x25C8, prA},     // So     [3] BLACK DIAMOND..WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
+	{0x25C9, 0x25CA, prN},     // So     [2] FISHEYE..LOZENGE
+	{0x25CB, 0x25CB, prA},     // So         WHITE CIRCLE
+	{0x25CC, 0x25CD, prN},     // So     [2] DOTTED CIRCLE..CIRCLE WITH VERTICAL FILL
+	{0x25CE, 0x25D1, prA},     // So     [4] BULLSEYE..CIRCLE WITH RIGHT HALF BLACK
+	{0x25D2, 0x25E1, prN},     // So    [16] CIRCLE WITH LOWER HALF BLACK..LOWER HALF CIRCLE
+	{0x25E2, 0x25E5, prA},     // So     [4] BLACK LOWER RIGHT TRIANGLE..BLACK UPPER RIGHT TRIANGLE
+	{0x25E6, 0x25EE, prN},     // So     [9] WHITE BULLET..UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
+	{0x25EF, 0x25EF, prA},     // So         LARGE CIRCLE
+	{0x25F0, 0x25F7, prN},     // So     [8] WHITE SQUARE WITH UPPER LEFT QUADRANT..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+	{0x25F8, 0x25FC, prN},     // Sm     [5] UPPER LEFT TRIANGLE..BLACK MEDIUM SQUARE
+	{0x25FD, 0x25FE, prW},     // Sm     [2] WHITE MEDIUM SMALL SQUARE..BLACK MEDIUM SMALL SQUARE
+	{0x25FF, 0x25FF, prN},     // Sm         LOWER RIGHT TRIANGLE
+	{0x2600, 0x2604, prN},     // So     [5] BLACK SUN WITH RAYS..COMET
+	{0x2605, 0x2606, prA},     // So     [2] BLACK STAR..WHITE STAR
+	{0x2607, 0x2608, prN},     // So     [2] LIGHTNING..THUNDERSTORM
+	{0x2609, 0x2609, prA},     // So         SUN
+	{0x260A, 0x260D, prN},     // So     [4] ASCENDING NODE..OPPOSITION
+	{0x260E, 0x260F, prA},     // So     [2] BLACK TELEPHONE..WHITE TELEPHONE
+	{0x2610, 0x2613, prN},     // So     [4] BALLOT BOX..SALTIRE
+	{0x2614, 0x2615, prW},     // So     [2] UMBRELLA WITH RAIN DROPS..HOT BEVERAGE
+	{0x2616, 0x261B, prN},     // So     [6] WHITE SHOGI PIECE..BLACK RIGHT POINTING INDEX
+	{0x261C, 0x261C, prA},     // So         WHITE LEFT POINTING INDEX
+	{0x261D, 0x261D, prN},     // So         WHITE UP POINTING INDEX
+	{0x261E, 0x261E, prA},     // So         WHITE RIGHT POINTING INDEX
+	{0x261F, 0x263F, prN},     // So    [33] WHITE DOWN POINTING INDEX..MERCURY
+	{0x2640, 0x2640, prA},     // So         FEMALE SIGN
+	{0x2641, 0x2641, prN},     // So         EARTH
+	{0x2642, 0x2642, prA},     // So         MALE SIGN
+	{0x2643, 0x2647, prN},     // So     [5] JUPITER..PLUTO
+	{0x2648, 0x2653, prW},     // So    [12] ARIES..PISCES
+	{0x2654, 0x265F, prN},     // So    [12] WHITE CHESS KING..BLACK CHESS PAWN
+	{0x2660, 0x2661, prA},     // So     [2] BLACK SPADE SUIT..WHITE HEART SUIT
+	{0x2662, 0x2662, prN},     // So         WHITE DIAMOND SUIT
+	{0x2663, 0x2665, prA},     // So     [3] BLACK CLUB SUIT..BLACK HEART SUIT
+	{0x2666, 0x2666, prN},     // So         BLACK DIAMOND SUIT
+	{0x2667, 0x266A, prA},     // So     [4] WHITE CLUB SUIT..EIGHTH NOTE
+	{0x266B, 0x266B, prN},     // So         BEAMED EIGHTH NOTES
+	{0x266C, 0x266D, prA},     // So     [2] BEAMED SIXTEENTH NOTES..MUSIC FLAT SIGN
+	{0x266E, 0x266E, prN},     // So         MUSIC NATURAL SIGN
+	{0x266F, 0x266F, prA},     // Sm         MUSIC SHARP SIGN
+	{0x2670, 0x267E, prN},     // So    [15] WEST SYRIAC CROSS..PERMANENT PAPER SIGN
+	{0x267F, 0x267F, prW},     // So         WHEELCHAIR SYMBOL
+	{0x2680, 0x2692, prN},     // So    [19] DIE FACE-1..HAMMER AND PICK
+	{0x2693, 0x2693, prW},     // So         ANCHOR
+	{0x2694, 0x269D, prN},     // So    [10] CROSSED SWORDS..OUTLINED WHITE STAR
+	{0x269E, 0x269F, prA},     // So     [2] THREE LINES CONVERGING RIGHT..THREE LINES CONVERGING LEFT
+	{0x26A0, 0x26A0, prN},     // So         WARNING SIGN
+	{0x26A1, 0x26A1, prW},     // So         HIGH VOLTAGE SIGN
+	{0x26A2, 0x26A9, prN},     // So     [8] DOUBLED FEMALE SIGN..HORIZONTAL MALE WITH STROKE SIGN
+	{0x26AA, 0x26AB, prW},     // So     [2] MEDIUM WHITE CIRCLE..MEDIUM BLACK CIRCLE
+	{0x26AC, 0x26BC, prN},     // So    [17] MEDIUM SMALL WHITE CIRCLE..SESQUIQUADRATE
+	{0x26BD, 0x26BE, prW},     // So     [2] SOCCER BALL..BASEBALL
+	{0x26BF, 0x26BF, prA},     // So         SQUARED KEY
+	{0x26C0, 0x26C3, prN},     // So     [4] WHITE DRAUGHTS MAN..BLACK DRAUGHTS KING
+	{0x26C4, 0x26C5, prW},     // So     [2] SNOWMAN WITHOUT SNOW..SUN BEHIND CLOUD
+	{0x26C6, 0x26CD, prA},     // So     [8] RAIN..DISABLED CAR
+	{0x26CE, 0x26CE, prW},     // So         OPHIUCHUS
+	{0x26CF, 0x26D3, prA},     // So     [5] PICK..CHAINS
+	{0x26D4, 0x26D4, prW},     // So         NO ENTRY
+	{0x26D5, 0x26E1, prA},     // So    [13] ALTERNATE ONE-WAY LEFT WAY TRAFFIC..RESTRICTED LEFT ENTRY-2
+	{0x26E2, 0x26E2, prN},     // So         ASTRONOMICAL SYMBOL FOR URANUS
+	{0x26E3, 0x26E3, prA},     // So         HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE
+	{0x26E4, 0x26E7, prN},     // So     [4] PENTAGRAM..INVERTED PENTAGRAM
+	{0x26E8, 0x26E9, prA},     // So     [2] BLACK CROSS ON SHIELD..SHINTO SHRINE
+	{0x26EA, 0x26EA, prW},     // So         CHURCH
+	{0x26EB, 0x26F1, prA},     // So     [7] CASTLE..UMBRELLA ON GROUND
+	{0x26F2, 0x26F3, prW},     // So     [2] FOUNTAIN..FLAG IN HOLE
+	{0x26F4, 0x26F4, prA},     // So         FERRY
+	{0x26F5, 0x26F5, prW},     // So         SAILBOAT
+	{0x26F6, 0x26F9, prA},     // So     [4] SQUARE FOUR CORNERS..PERSON WITH BALL
+	{0x26FA, 0x26FA, prW},     // So         TENT
+	{0x26FB, 0x26FC, prA},     // So     [2] JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL
+	{0x26FD, 0x26FD, prW},     // So         FUEL PUMP
+	{0x26FE, 0x26FF, prA},     // So     [2] CUP ON BLACK SQUARE..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
+	{0x2700, 0x2704, prN},     // So     [5] BLACK SAFETY SCISSORS..WHITE SCISSORS
+	{0x2705, 0x2705, prW},     // So         WHITE HEAVY CHECK MARK
+	{0x2706, 0x2709, prN},     // So     [4] TELEPHONE LOCATION SIGN..ENVELOPE
+	{0x270A, 0x270B, prW},     // So     [2] RAISED FIST..RAISED HAND
+	{0x270C, 0x2727, prN},     // So    [28] VICTORY HAND..WHITE FOUR POINTED STAR
+	{0x2728, 0x2728, prW},     // So         SPARKLES
+	{0x2729, 0x273C, prN},     // So    [20] STRESS OUTLINED WHITE STAR..OPEN CENTRE TEARDROP-SPOKED ASTERISK
+	{0x273D, 0x273D, prA},     // So         HEAVY TEARDROP-SPOKED ASTERISK
+	{0x273E, 0x274B, prN},     // So    [14] SIX PETALLED BLACK AND WHITE FLORETTE..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+	{0x274C, 0x274C, prW},     // So         CROSS MARK
+	{0x274D, 0x274D, prN},     // So         SHADOWED WHITE CIRCLE
+	{0x274E, 0x274E, prW},     // So         NEGATIVE SQUARED CROSS MARK
+	{0x274F, 0x2752, prN},     // So     [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE
+	{0x2753, 0x2755, prW},     // So     [3] BLACK QUESTION MARK ORNAMENT..WHITE EXCLAMATION MARK ORNAMENT
+	{0x2756, 0x2756, prN},     // So         BLACK DIAMOND MINUS WHITE X
+	{0x2757, 0x2757, prW},     // So         HEAVY EXCLAMATION MARK SYMBOL
+	{0x2758, 0x2767, prN},     // So    [16] LIGHT VERTICAL BAR..ROTATED FLORAL HEART BULLET
+	{0x2768, 0x2768, prN},     // Ps         MEDIUM LEFT PARENTHESIS ORNAMENT
+	{0x2769, 0x2769, prN},     // Pe         MEDIUM RIGHT PARENTHESIS ORNAMENT
+	{0x276A, 0x276A, prN},     // Ps         MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+	{0x276B, 0x276B, prN},     // Pe         MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+	{0x276C, 0x276C, prN},     // Ps         MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+	{0x276D, 0x276D, prN},     // Pe         MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+	{0x276E, 0x276E, prN},     // Ps         HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+	{0x276F, 0x276F, prN},     // Pe         HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+	{0x2770, 0x2770, prN},     // Ps         HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+	{0x2771, 0x2771, prN},     // Pe         HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+	{0x2772, 0x2772, prN},     // Ps         LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+	{0x2773, 0x2773, prN},     // Pe         LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+	{0x2774, 0x2774, prN},     // Ps         MEDIUM LEFT CURLY BRACKET ORNAMENT
+	{0x2775, 0x2775, prN},     // Pe         MEDIUM RIGHT CURLY BRACKET ORNAMENT
+	{0x2776, 0x277F, prA},     // No    [10] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED NUMBER TEN
+	{0x2780, 0x2793, prN},     // No    [20] DINGBAT CIRCLED SANS-SERIF DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
+	{0x2794, 0x2794, prN},     // So         HEAVY WIDE-HEADED RIGHTWARDS ARROW
+	{0x2795, 0x2797, prW},     // So     [3] HEAVY PLUS SIGN..HEAVY DIVISION SIGN
+	{0x2798, 0x27AF, prN},     // So    [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+	{0x27B0, 0x27B0, prW},     // So         CURLY LOOP
+	{0x27B1, 0x27BE, prN},     // So    [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW
+	{0x27BF, 0x27BF, prW},     // So         DOUBLE CURLY LOOP
+	{0x27C0, 0x27C4, prN},     // Sm     [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
+	{0x27C5, 0x27C5, prN},     // Ps         LEFT S-SHAPED BAG DELIMITER
+	{0x27C6, 0x27C6, prN},     // Pe         RIGHT S-SHAPED BAG DELIMITER
+	{0x27C7, 0x27E5, prN},     // Sm    [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK
+	{0x27E6, 0x27E6, prNa},    // Ps         MATHEMATICAL LEFT WHITE SQUARE BRACKET
+	{0x27E7, 0x27E7, prNa},    // Pe         MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+	{0x27E8, 0x27E8, prNa},    // Ps         MATHEMATICAL LEFT ANGLE BRACKET
+	{0x27E9, 0x27E9, prNa},    // Pe         MATHEMATICAL RIGHT ANGLE BRACKET
+	{0x27EA, 0x27EA, prNa},    // Ps         MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+	{0x27EB, 0x27EB, prNa},    // Pe         MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+	{0x27EC, 0x27EC, prNa},    // Ps         MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+	{0x27ED, 0x27ED, prNa},    // Pe         MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+	{0x27EE, 0x27EE, prN},     // Ps         MATHEMATICAL LEFT FLATTENED PARENTHESIS
+	{0x27EF, 0x27EF, prN},     // Pe         MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+	{0x27F0, 0x27FF, prN},     // Sm    [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
+	{0x2800, 0x28FF, prN},     // So   [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678
+	{0x2900, 0x297F, prN},     // Sm   [128] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..DOWN FISH TAIL
+	{0x2980, 0x2982, prN},     // Sm     [3] TRIPLE VERTICAL BAR DELIMITER..Z NOTATION TYPE COLON
+	{0x2983, 0x2983, prN},     // Ps         LEFT WHITE CURLY BRACKET
+	{0x2984, 0x2984, prN},     // Pe         RIGHT WHITE CURLY BRACKET
+	{0x2985, 0x2985, prNa},    // Ps         LEFT WHITE PARENTHESIS
+	{0x2986, 0x2986, prNa},    // Pe         RIGHT WHITE PARENTHESIS
+	{0x2987, 0x2987, prN},     // Ps         Z NOTATION LEFT IMAGE BRACKET
+	{0x2988, 0x2988, prN},     // Pe         Z NOTATION RIGHT IMAGE BRACKET
+	{0x2989, 0x2989, prN},     // Ps         Z NOTATION LEFT BINDING BRACKET
+	{0x298A, 0x298A, prN},     // Pe         Z NOTATION RIGHT BINDING BRACKET
+	{0x298B, 0x298B, prN},     // Ps         LEFT SQUARE BRACKET WITH UNDERBAR
+	{0x298C, 0x298C, prN},     // Pe         RIGHT SQUARE BRACKET WITH UNDERBAR
+	{0x298D, 0x298D, prN},     // Ps         LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+	{0x298E, 0x298E, prN},     // Pe         RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+	{0x298F, 0x298F, prN},     // Ps         LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+	{0x2990, 0x2990, prN},     // Pe         RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+	{0x2991, 0x2991, prN},     // Ps         LEFT ANGLE BRACKET WITH DOT
+	{0x2992, 0x2992, prN},     // Pe         RIGHT ANGLE BRACKET WITH DOT
+	{0x2993, 0x2993, prN},     // Ps         LEFT ARC LESS-THAN BRACKET
+	{0x2994, 0x2994, prN},     // Pe         RIGHT ARC GREATER-THAN BRACKET
+	{0x2995, 0x2995, prN},     // Ps         DOUBLE LEFT ARC GREATER-THAN BRACKET
+	{0x2996, 0x2996, prN},     // Pe         DOUBLE RIGHT ARC LESS-THAN BRACKET
+	{0x2997, 0x2997, prN},     // Ps         LEFT BLACK TORTOISE SHELL BRACKET
+	{0x2998, 0x2998, prN},     // Pe         RIGHT BLACK TORTOISE SHELL BRACKET
+	{0x2999, 0x29D7, prN},     // Sm    [63] DOTTED FENCE..BLACK HOURGLASS
+	{0x29D8, 0x29D8, prN},     // Ps         LEFT WIGGLY FENCE
+	{0x29D9, 0x29D9, prN},     // Pe         RIGHT WIGGLY FENCE
+	{0x29DA, 0x29DA, prN},     // Ps         LEFT DOUBLE WIGGLY FENCE
+	{0x29DB, 0x29DB, prN},     // Pe         RIGHT DOUBLE WIGGLY FENCE
+	{0x29DC, 0x29FB, prN},     // Sm    [32] INCOMPLETE INFINITY..TRIPLE PLUS
+	{0x29FC, 0x29FC, prN},     // Ps         LEFT-POINTING CURVED ANGLE BRACKET
+	{0x29FD, 0x29FD, prN},     // Pe         RIGHT-POINTING CURVED ANGLE BRACKET
+	{0x29FE, 0x29FF, prN},     // Sm     [2] TINY..MINY
+	{0x2A00, 0x2AFF, prN},     // Sm   [256] N-ARY CIRCLED DOT OPERATOR..N-ARY WHITE VERTICAL BAR
+	{0x2B00, 0x2B1A, prN},     // So    [27] NORTH EAST WHITE ARROW..DOTTED SQUARE
+	{0x2B1B, 0x2B1C, prW},     // So     [2] BLACK LARGE SQUARE..WHITE LARGE SQUARE
+	{0x2B1D, 0x2B2F, prN},     // So    [19] BLACK VERY SMALL SQUARE..WHITE VERTICAL ELLIPSE
+	{0x2B30, 0x2B44, prN},     // Sm    [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET
+	{0x2B45, 0x2B46, prN},     // So     [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW
+	{0x2B47, 0x2B4C, prN},     // Sm     [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+	{0x2B4D, 0x2B4F, prN},     // So     [3] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..SHORT BACKSLANTED SOUTH ARROW
+	{0x2B50, 0x2B50, prW},     // So         WHITE MEDIUM STAR
+	{0x2B51, 0x2B54, prN},     // So     [4] BLACK SMALL STAR..WHITE RIGHT-POINTING PENTAGON
+	{0x2B55, 0x2B55, prW},     // So         HEAVY LARGE CIRCLE
+	{0x2B56, 0x2B59, prA},     // So     [4] HEAVY OVAL WITH OVAL INSIDE..HEAVY CIRCLED SALTIRE
+	{0x2B5A, 0x2B73, prN},     // So    [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
+	{0x2B76, 0x2B95, prN},     // So    [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
+	{0x2B97, 0x2BFF, prN},     // So   [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL
+	{0x2C00, 0x2C5F, prN},     // L&    [96] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI
+	{0x2C60, 0x2C7B, prN},     // L&    [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E
+	{0x2C7C, 0x2C7D, prN},     // Lm     [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
+	{0x2C7E, 0x2C7F, prN},     // Lu     [2] LATIN CAPITAL LETTER S WITH SWASH TAIL..LATIN CAPITAL LETTER Z WITH SWASH TAIL
+	{0x2C80, 0x2CE4, prN},     // L&   [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI
+	{0x2CE5, 0x2CEA, prN},     // So     [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA
+	{0x2CEB, 0x2CEE, prN},     // L&     [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+	{0x2CEF, 0x2CF1, prN},     // Mn     [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
+	{0x2CF2, 0x2CF3, prN},     // L&     [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI
+	{0x2CF9, 0x2CFC, prN},     // Po     [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER
+	{0x2CFD, 0x2CFD, prN},     // No         COPTIC FRACTION ONE HALF
+	{0x2CFE, 0x2CFF, prN},     // Po     [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER
+	{0x2D00, 0x2D25, prN},     // Ll    [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+	{0x2D27, 0x2D27, prN},     // Ll         GEORGIAN SMALL LETTER YN
+	{0x2D2D, 0x2D2D, prN},     // Ll         GEORGIAN SMALL LETTER AEN
+	{0x2D30, 0x2D67, prN},     // Lo    [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO
+	{0x2D6F, 0x2D6F, prN},     // Lm         TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+	{0x2D70, 0x2D70, prN},     // Po         TIFINAGH SEPARATOR MARK
+	{0x2D7F, 0x2D7F, prN},     // Mn         TIFINAGH CONSONANT JOINER
+	{0x2D80, 0x2D96, prN},     // Lo    [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+	{0x2DA0, 0x2DA6, prN},     // Lo     [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+	{0x2DA8, 0x2DAE, prN},     // Lo     [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+	{0x2DB0, 0x2DB6, prN},     // Lo     [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+	{0x2DB8, 0x2DBE, prN},     // Lo     [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+	{0x2DC0, 0x2DC6, prN},     // Lo     [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+	{0x2DC8, 0x2DCE, prN},     // Lo     [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+	{0x2DD0, 0x2DD6, prN},     // Lo     [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+	{0x2DD8, 0x2DDE, prN},     // Lo     [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+	{0x2DE0, 0x2DFF, prN},     // Mn    [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+	{0x2E00, 0x2E01, prN},     // Po     [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+	{0x2E02, 0x2E02, prN},     // Pi         LEFT SUBSTITUTION BRACKET
+	{0x2E03, 0x2E03, prN},     // Pf         RIGHT SUBSTITUTION BRACKET
+	{0x2E04, 0x2E04, prN},     // Pi         LEFT DOTTED SUBSTITUTION BRACKET
+	{0x2E05, 0x2E05, prN},     // Pf         RIGHT DOTTED SUBSTITUTION BRACKET
+	{0x2E06, 0x2E08, prN},     // Po     [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER
+	{0x2E09, 0x2E09, prN},     // Pi         LEFT TRANSPOSITION BRACKET
+	{0x2E0A, 0x2E0A, prN},     // Pf         RIGHT TRANSPOSITION BRACKET
+	{0x2E0B, 0x2E0B, prN},     // Po         RAISED SQUARE
+	{0x2E0C, 0x2E0C, prN},     // Pi         LEFT RAISED OMISSION BRACKET
+	{0x2E0D, 0x2E0D, prN},     // Pf         RIGHT RAISED OMISSION BRACKET
+	{0x2E0E, 0x2E16, prN},     // Po     [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE
+	{0x2E17, 0x2E17, prN},     // Pd         DOUBLE OBLIQUE HYPHEN
+	{0x2E18, 0x2E19, prN},     // Po     [2] INVERTED INTERROBANG..PALM BRANCH
+	{0x2E1A, 0x2E1A, prN},     // Pd         HYPHEN WITH DIAERESIS
+	{0x2E1B, 0x2E1B, prN},     // Po         TILDE WITH RING ABOVE
+	{0x2E1C, 0x2E1C, prN},     // Pi         LEFT LOW PARAPHRASE BRACKET
+	{0x2E1D, 0x2E1D, prN},     // Pf         RIGHT LOW PARAPHRASE BRACKET
+	{0x2E1E, 0x2E1F, prN},     // Po     [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW
+	{0x2E20, 0x2E20, prN},     // Pi         LEFT VERTICAL BAR WITH QUILL
+	{0x2E21, 0x2E21, prN},     // Pf         RIGHT VERTICAL BAR WITH QUILL
+	{0x2E22, 0x2E22, prN},     // Ps         TOP LEFT HALF BRACKET
+	{0x2E23, 0x2E23, prN},     // Pe         TOP RIGHT HALF BRACKET
+	{0x2E24, 0x2E24, prN},     // Ps         BOTTOM LEFT HALF BRACKET
+	{0x2E25, 0x2E25, prN},     // Pe         BOTTOM RIGHT HALF BRACKET
+	{0x2E26, 0x2E26, prN},     // Ps         LEFT SIDEWAYS U BRACKET
+	{0x2E27, 0x2E27, prN},     // Pe         RIGHT SIDEWAYS U BRACKET
+	{0x2E28, 0x2E28, prN},     // Ps         LEFT DOUBLE PARENTHESIS
+	{0x2E29, 0x2E29, prN},     // Pe         RIGHT DOUBLE PARENTHESIS
+	{0x2E2A, 0x2E2E, prN},     // Po     [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK
+	{0x2E2F, 0x2E2F, prN},     // Lm         VERTICAL TILDE
+	{0x2E30, 0x2E39, prN},     // Po    [10] RING POINT..TOP HALF SECTION SIGN
+	{0x2E3A, 0x2E3B, prN},     // Pd     [2] TWO-EM DASH..THREE-EM DASH
+	{0x2E3C, 0x2E3F, prN},     // Po     [4] STENOGRAPHIC FULL STOP..CAPITULUM
+	{0x2E40, 0x2E40, prN},     // Pd         DOUBLE HYPHEN
+	{0x2E41, 0x2E41, prN},     // Po         REVERSED COMMA
+	{0x2E42, 0x2E42, prN},     // Ps         DOUBLE LOW-REVERSED-9 QUOTATION MARK
+	{0x2E43, 0x2E4F, prN},     // Po    [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER
+	{0x2E50, 0x2E51, prN},     // So     [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR
+	{0x2E52, 0x2E54, prN},     // Po     [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK
+	{0x2E55, 0x2E55, prN},     // Ps         LEFT SQUARE BRACKET WITH STROKE
+	{0x2E56, 0x2E56, prN},     // Pe         RIGHT SQUARE BRACKET WITH STROKE
+	{0x2E57, 0x2E57, prN},     // Ps         LEFT SQUARE BRACKET WITH DOUBLE STROKE
+	{0x2E58, 0x2E58, prN},     // Pe         RIGHT SQUARE BRACKET WITH DOUBLE STROKE
+	{0x2E59, 0x2E59, prN},     // Ps         TOP HALF LEFT PARENTHESIS
+	{0x2E5A, 0x2E5A, prN},     // Pe         TOP HALF RIGHT PARENTHESIS
+	{0x2E5B, 0x2E5B, prN},     // Ps         BOTTOM HALF LEFT PARENTHESIS
+	{0x2E5C, 0x2E5C, prN},     // Pe         BOTTOM HALF RIGHT PARENTHESIS
+	{0x2E5D, 0x2E5D, prN},     // Pd         OBLIQUE HYPHEN
+	{0x2E80, 0x2E99, prW},     // So    [26] CJK RADICAL REPEAT..CJK RADICAL RAP
+	{0x2E9B, 0x2EF3, prW},     // So    [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
+	{0x2F00, 0x2FD5, prW},     // So   [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
+	{0x2FF0, 0x2FFB, prW},     // So    [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+	{0x3000, 0x3000, prF},     // Zs         IDEOGRAPHIC SPACE
+	{0x3001, 0x3003, prW},     // Po     [3] IDEOGRAPHIC COMMA..DITTO MARK
+	{0x3004, 0x3004, prW},     // So         JAPANESE INDUSTRIAL STANDARD SYMBOL
+	{0x3005, 0x3005, prW},     // Lm         IDEOGRAPHIC ITERATION MARK
+	{0x3006, 0x3006, prW},     // Lo         IDEOGRAPHIC CLOSING MARK
+	{0x3007, 0x3007, prW},     // Nl         IDEOGRAPHIC NUMBER ZERO
+	{0x3008, 0x3008, prW},     // Ps         LEFT ANGLE BRACKET
+	{0x3009, 0x3009, prW},     // Pe         RIGHT ANGLE BRACKET
+	{0x300A, 0x300A, prW},     // Ps         LEFT DOUBLE ANGLE BRACKET
+	{0x300B, 0x300B, prW},     // Pe         RIGHT DOUBLE ANGLE BRACKET
+	{0x300C, 0x300C, prW},     // Ps         LEFT CORNER BRACKET
+	{0x300D, 0x300D, prW},     // Pe         RIGHT CORNER BRACKET
+	{0x300E, 0x300E, prW},     // Ps         LEFT WHITE CORNER BRACKET
+	{0x300F, 0x300F, prW},     // Pe         RIGHT WHITE CORNER BRACKET
+	{0x3010, 0x3010, prW},     // Ps         LEFT BLACK LENTICULAR BRACKET
+	{0x3011, 0x3011, prW},     // Pe         RIGHT BLACK LENTICULAR BRACKET
+	{0x3012, 0x3013, prW},     // So     [2] POSTAL MARK..GETA MARK
+	{0x3014, 0x3014, prW},     // Ps         LEFT TORTOISE SHELL BRACKET
+	{0x3015, 0x3015, prW},     // Pe         RIGHT TORTOISE SHELL BRACKET
+	{0x3016, 0x3016, prW},     // Ps         LEFT WHITE LENTICULAR BRACKET
+	{0x3017, 0x3017, prW},     // Pe         RIGHT WHITE LENTICULAR BRACKET
+	{0x3018, 0x3018, prW},     // Ps         LEFT WHITE TORTOISE SHELL BRACKET
+	{0x3019, 0x3019, prW},     // Pe         RIGHT WHITE TORTOISE SHELL BRACKET
+	{0x301A, 0x301A, prW},     // Ps         LEFT WHITE SQUARE BRACKET
+	{0x301B, 0x301B, prW},     // Pe         RIGHT WHITE SQUARE BRACKET
+	{0x301C, 0x301C, prW},     // Pd         WAVE DASH
+	{0x301D, 0x301D, prW},     // Ps         REVERSED DOUBLE PRIME QUOTATION MARK
+	{0x301E, 0x301F, prW},     // Pe     [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
+	{0x3020, 0x3020, prW},     // So         POSTAL MARK FACE
+	{0x3021, 0x3029, prW},     // Nl     [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+	{0x302A, 0x302D, prW},     // Mn     [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
+	{0x302E, 0x302F, prW},     // Mc     [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
+	{0x3030, 0x3030, prW},     // Pd         WAVY DASH
+	{0x3031, 0x3035, prW},     // Lm     [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+	{0x3036, 0x3037, prW},     // So     [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+	{0x3038, 0x303A, prW},     // Nl     [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+	{0x303B, 0x303B, prW},     // Lm         VERTICAL IDEOGRAPHIC ITERATION MARK
+	{0x303C, 0x303C, prW},     // Lo         MASU MARK
+	{0x303D, 0x303D, prW},     // Po         PART ALTERNATION MARK
+	{0x303E, 0x303E, prW},     // So         IDEOGRAPHIC VARIATION INDICATOR
+	{0x303F, 0x303F, prN},     // So         IDEOGRAPHIC HALF FILL SPACE
+	{0x3041, 0x3096, prW},     // Lo    [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
+	{0x3099, 0x309A, prW},     // Mn     [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+	{0x309B, 0x309C, prW},     // Sk     [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+	{0x309D, 0x309E, prW},     // Lm     [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+	{0x309F, 0x309F, prW},     // Lo         HIRAGANA DIGRAPH YORI
+	{0x30A0, 0x30A0, prW},     // Pd         KATAKANA-HIRAGANA DOUBLE HYPHEN
+	{0x30A1, 0x30FA, prW},     // Lo    [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
+	{0x30FB, 0x30FB, prW},     // Po         KATAKANA MIDDLE DOT
+	{0x30FC, 0x30FE, prW},     // Lm     [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+	{0x30FF, 0x30FF, prW},     // Lo         KATAKANA DIGRAPH KOTO
+	{0x3105, 0x312F, prW},     // Lo    [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
+	{0x3131, 0x318E, prW},     // Lo    [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+	{0x3190, 0x3191, prW},     // So     [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
+	{0x3192, 0x3195, prW},     // No     [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
+	{0x3196, 0x319F, prW},     // So    [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
+	{0x31A0, 0x31BF, prW},     // Lo    [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
+	{0x31C0, 0x31E3, prW},     // So    [36] CJK STROKE T..CJK STROKE Q
+	{0x31F0, 0x31FF, prW},     // Lo    [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+	{0x3200, 0x321E, prW},     // So    [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
+	{0x3220, 0x3229, prW},     // No    [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
+	{0x322A, 0x3247, prW},     // So    [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO
+	{0x3248, 0x324F, prA},     // No     [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE
+	{0x3250, 0x3250, prW},     // So         PARTNERSHIP SIGN
+	{0x3251, 0x325F, prW},     // No    [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
+	{0x3260, 0x327F, prW},     // So    [32] CIRCLED HANGUL KIYEOK..KOREAN STANDARD SYMBOL
+	{0x3280, 0x3289, prW},     // No    [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
+	{0x328A, 0x32B0, prW},     // So    [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
+	{0x32B1, 0x32BF, prW},     // No    [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
+	{0x32C0, 0x32FF, prW},     // So    [64] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE ERA NAME REIWA
+	{0x3300, 0x33FF, prW},     // So   [256] SQUARE APAATO..SQUARE GAL
+	{0x3400, 0x4DBF, prW},     // Lo  [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+	{0x4DC0, 0x4DFF, prN},     // So    [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
+	{0x4E00, 0x9FFF, prW},     // Lo [20992] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFF
+	{0xA000, 0xA014, prW},     // Lo    [21] YI SYLLABLE IT..YI SYLLABLE E
+	{0xA015, 0xA015, prW},     // Lm         YI SYLLABLE WU
+	{0xA016, 0xA48C, prW},     // Lo  [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
+	{0xA490, 0xA4C6, prW},     // So    [55] YI RADICAL QOT..YI RADICAL KE
+	{0xA4D0, 0xA4F7, prN},     // Lo    [40] LISU LETTER BA..LISU LETTER OE
+	{0xA4F8, 0xA4FD, prN},     // Lm     [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
+	{0xA4FE, 0xA4FF, prN},     // Po     [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP
+	{0xA500, 0xA60B, prN},     // Lo   [268] VAI SYLLABLE EE..VAI SYLLABLE NG
+	{0xA60C, 0xA60C, prN},     // Lm         VAI SYLLABLE LENGTHENER
+	{0xA60D, 0xA60F, prN},     // Po     [3] VAI COMMA..VAI QUESTION MARK
+	{0xA610, 0xA61F, prN},     // Lo    [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
+	{0xA620, 0xA629, prN},     // Nd    [10] VAI DIGIT ZERO..VAI DIGIT NINE
+	{0xA62A, 0xA62B, prN},     // Lo     [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
+	{0xA640, 0xA66D, prN},     // L&    [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+	{0xA66E, 0xA66E, prN},     // Lo         CYRILLIC LETTER MULTIOCULAR O
+	{0xA66F, 0xA66F, prN},     // Mn         COMBINING CYRILLIC VZMET
+	{0xA670, 0xA672, prN},     // Me     [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
+	{0xA673, 0xA673, prN},     // Po         SLAVONIC ASTERISK
+	{0xA674, 0xA67D, prN},     // Mn    [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK
+	{0xA67E, 0xA67E, prN},     // Po         CYRILLIC KAVYKA
+	{0xA67F, 0xA67F, prN},     // Lm         CYRILLIC PAYEROK
+	{0xA680, 0xA69B, prN},     // L&    [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O
+	{0xA69C, 0xA69D, prN},     // Lm     [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
+	{0xA69E, 0xA69F, prN},     // Mn     [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
+	{0xA6A0, 0xA6E5, prN},     // Lo    [70] BAMUM LETTER A..BAMUM LETTER KI
+	{0xA6E6, 0xA6EF, prN},     // Nl    [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
+	{0xA6F0, 0xA6F1, prN},     // Mn     [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
+	{0xA6F2, 0xA6F7, prN},     // Po     [6] BAMUM NJAEMLI..BAMUM QUESTION MARK
+	{0xA700, 0xA716, prN},     // Sk    [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+	{0xA717, 0xA71F, prN},     // Lm     [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+	{0xA720, 0xA721, prN},     // Sk     [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
+	{0xA722, 0xA76F, prN},     // L&    [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
+	{0xA770, 0xA770, prN},     // Lm         MODIFIER LETTER US
+	{0xA771, 0xA787, prN},     // L&    [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
+	{0xA788, 0xA788, prN},     // Lm         MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+	{0xA789, 0xA78A, prN},     // Sk     [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN
+	{0xA78B, 0xA78E, prN},     // L&     [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
+	{0xA78F, 0xA78F, prN},     // Lo         LATIN LETTER SINOLOGICAL DOT
+	{0xA790, 0xA7CA, prN},     // L&    [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+	{0xA7D0, 0xA7D1, prN},     // L&     [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G
+	{0xA7D3, 0xA7D3, prN},     // Ll         LATIN SMALL LETTER DOUBLE THORN
+	{0xA7D5, 0xA7D9, prN},     // L&     [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S
+	{0xA7F2, 0xA7F4, prN},     // Lm     [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q
+	{0xA7F5, 0xA7F6, prN},     // L&     [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
+	{0xA7F7, 0xA7F7, prN},     // Lo         LATIN EPIGRAPHIC LETTER SIDEWAYS I
+	{0xA7F8, 0xA7F9, prN},     // Lm     [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
+	{0xA7FA, 0xA7FA, prN},     // Ll         LATIN LETTER SMALL CAPITAL TURNED M
+	{0xA7FB, 0xA7FF, prN},     // Lo     [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M
+	{0xA800, 0xA801, prN},     // Lo     [2] SYLOTI NAGRI LETTER A..SYLOTI NAGRI LETTER I
+	{0xA802, 0xA802, prN},     // Mn         SYLOTI NAGRI SIGN DVISVARA
+	{0xA803, 0xA805, prN},     // Lo     [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
+	{0xA806, 0xA806, prN},     // Mn         SYLOTI NAGRI SIGN HASANTA
+	{0xA807, 0xA80A, prN},     // Lo     [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
+	{0xA80B, 0xA80B, prN},     // Mn         SYLOTI NAGRI SIGN ANUSVARA
+	{0xA80C, 0xA822, prN},     // Lo    [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
+	{0xA823, 0xA824, prN},     // Mc     [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+	{0xA825, 0xA826, prN},     // Mn     [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+	{0xA827, 0xA827, prN},     // Mc         SYLOTI NAGRI VOWEL SIGN OO
+	{0xA828, 0xA82B, prN},     // So     [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
+	{0xA82C, 0xA82C, prN},     // Mn         SYLOTI NAGRI SIGN ALTERNATE HASANTA
+	{0xA830, 0xA835, prN},     // No     [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS
+	{0xA836, 0xA837, prN},     // So     [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK
+	{0xA838, 0xA838, prN},     // Sc         NORTH INDIC RUPEE MARK
+	{0xA839, 0xA839, prN},     // So         NORTH INDIC QUANTITY MARK
+	{0xA840, 0xA873, prN},     // Lo    [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
+	{0xA874, 0xA877, prN},     // Po     [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD
+	{0xA880, 0xA881, prN},     // Mc     [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
+	{0xA882, 0xA8B3, prN},     // Lo    [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
+	{0xA8B4, 0xA8C3, prN},     // Mc    [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
+	{0xA8C4, 0xA8C5, prN},     // Mn     [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
+	{0xA8CE, 0xA8CF, prN},     // Po     [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA
+	{0xA8D0, 0xA8D9, prN},     // Nd    [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE
+	{0xA8E0, 0xA8F1, prN},     // Mn    [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
+	{0xA8F2, 0xA8F7, prN},     // Lo     [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+	{0xA8F8, 0xA8FA, prN},     // Po     [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
+	{0xA8FB, 0xA8FB, prN},     // Lo         DEVANAGARI HEADSTROKE
+	{0xA8FC, 0xA8FC, prN},     // Po         DEVANAGARI SIGN SIDDHAM
+	{0xA8FD, 0xA8FE, prN},     // Lo     [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY
+	{0xA8FF, 0xA8FF, prN},     // Mn         DEVANAGARI VOWEL SIGN AY
+	{0xA900, 0xA909, prN},     // Nd    [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE
+	{0xA90A, 0xA925, prN},     // Lo    [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
+	{0xA926, 0xA92D, prN},     // Mn     [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
+	{0xA92E, 0xA92F, prN},     // Po     [2] KAYAH LI SIGN CWI..KAYAH LI SIGN SHYA
+	{0xA930, 0xA946, prN},     // Lo    [23] REJANG LETTER KA..REJANG LETTER A
+	{0xA947, 0xA951, prN},     // Mn    [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
+	{0xA952, 0xA953, prN},     // Mc     [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
+	{0xA95F, 0xA95F, prN},     // Po         REJANG SECTION MARK
+	{0xA960, 0xA97C, prW},     // Lo    [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
+	{0xA980, 0xA982, prN},     // Mn     [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
+	{0xA983, 0xA983, prN},     // Mc         JAVANESE SIGN WIGNYAN
+	{0xA984, 0xA9B2, prN},     // Lo    [47] JAVANESE LETTER A..JAVANESE LETTER HA
+	{0xA9B3, 0xA9B3, prN},     // Mn         JAVANESE SIGN CECAK TELU
+	{0xA9B4, 0xA9B5, prN},     // Mc     [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
+	{0xA9B6, 0xA9B9, prN},     // Mn     [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
+	{0xA9BA, 0xA9BB, prN},     // Mc     [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
+	{0xA9BC, 0xA9BD, prN},     // Mn     [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET
+	{0xA9BE, 0xA9C0, prN},     // Mc     [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON
+	{0xA9C1, 0xA9CD, prN},     // Po    [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH
+	{0xA9CF, 0xA9CF, prN},     // Lm         JAVANESE PANGRANGKEP
+	{0xA9D0, 0xA9D9, prN},     // Nd    [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE
+	{0xA9DE, 0xA9DF, prN},     // Po     [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN
+	{0xA9E0, 0xA9E4, prN},     // Lo     [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA
+	{0xA9E5, 0xA9E5, prN},     // Mn         MYANMAR SIGN SHAN SAW
+	{0xA9E6, 0xA9E6, prN},     // Lm         MYANMAR MODIFIER LETTER SHAN REDUPLICATION
+	{0xA9E7, 0xA9EF, prN},     // Lo     [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA
+	{0xA9F0, 0xA9F9, prN},     // Nd    [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE
+	{0xA9FA, 0xA9FE, prN},     // Lo     [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA
+	{0xAA00, 0xAA28, prN},     // Lo    [41] CHAM LETTER A..CHAM LETTER HA
+	{0xAA29, 0xAA2E, prN},     // Mn     [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
+	{0xAA2F, 0xAA30, prN},     // Mc     [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
+	{0xAA31, 0xAA32, prN},     // Mn     [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
+	{0xAA33, 0xAA34, prN},     // Mc     [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
+	{0xAA35, 0xAA36, prN},     // Mn     [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
+	{0xAA40, 0xAA42, prN},     // Lo     [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
+	{0xAA43, 0xAA43, prN},     // Mn         CHAM CONSONANT SIGN FINAL NG
+	{0xAA44, 0xAA4B, prN},     // Lo     [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
+	{0xAA4C, 0xAA4C, prN},     // Mn         CHAM CONSONANT SIGN FINAL M
+	{0xAA4D, 0xAA4D, prN},     // Mc         CHAM CONSONANT SIGN FINAL H
+	{0xAA50, 0xAA59, prN},     // Nd    [10] CHAM DIGIT ZERO..CHAM DIGIT NINE
+	{0xAA5C, 0xAA5F, prN},     // Po     [4] CHAM PUNCTUATION SPIRAL..CHAM PUNCTUATION TRIPLE DANDA
+	{0xAA60, 0xAA6F, prN},     // Lo    [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
+	{0xAA70, 0xAA70, prN},     // Lm         MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+	{0xAA71, 0xAA76, prN},     // Lo     [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
+	{0xAA77, 0xAA79, prN},     // So     [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO
+	{0xAA7A, 0xAA7A, prN},     // Lo         MYANMAR LETTER AITON RA
+	{0xAA7B, 0xAA7B, prN},     // Mc         MYANMAR SIGN PAO KAREN TONE
+	{0xAA7C, 0xAA7C, prN},     // Mn         MYANMAR SIGN TAI LAING TONE-2
+	{0xAA7D, 0xAA7D, prN},     // Mc         MYANMAR SIGN TAI LAING TONE-5
+	{0xAA7E, 0xAA7F, prN},     // Lo     [2] MYANMAR LETTER SHWE PALAUNG CHA..MYANMAR LETTER SHWE PALAUNG SHA
+	{0xAA80, 0xAAAF, prN},     // Lo    [48] TAI VIET LETTER LOW KO..TAI VIET LETTER HIGH O
+	{0xAAB0, 0xAAB0, prN},     // Mn         TAI VIET MAI KANG
+	{0xAAB1, 0xAAB1, prN},     // Lo         TAI VIET VOWEL AA
+	{0xAAB2, 0xAAB4, prN},     // Mn     [3] TAI VIET VOWEL I..TAI VIET VOWEL U
+	{0xAAB5, 0xAAB6, prN},     // Lo     [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+	{0xAAB7, 0xAAB8, prN},     // Mn     [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
+	{0xAAB9, 0xAABD, prN},     // Lo     [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
+	{0xAABE, 0xAABF, prN},     // Mn     [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
+	{0xAAC0, 0xAAC0, prN},     // Lo         TAI VIET TONE MAI NUENG
+	{0xAAC1, 0xAAC1, prN},     // Mn         TAI VIET TONE MAI THO
+	{0xAAC2, 0xAAC2, prN},     // Lo         TAI VIET TONE MAI SONG
+	{0xAADB, 0xAADC, prN},     // Lo     [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
+	{0xAADD, 0xAADD, prN},     // Lm         TAI VIET SYMBOL SAM
+	{0xAADE, 0xAADF, prN},     // Po     [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI
+	{0xAAE0, 0xAAEA, prN},     // Lo    [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA
+	{0xAAEB, 0xAAEB, prN},     // Mc         MEETEI MAYEK VOWEL SIGN II
+	{0xAAEC, 0xAAED, prN},     // Mn     [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI
+	{0xAAEE, 0xAAEF, prN},     // Mc     [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU
+	{0xAAF0, 0xAAF1, prN},     // Po     [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM
+	{0xAAF2, 0xAAF2, prN},     // Lo         MEETEI MAYEK ANJI
+	{0xAAF3, 0xAAF4, prN},     // Lm     [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
+	{0xAAF5, 0xAAF5, prN},     // Mc         MEETEI MAYEK VOWEL SIGN VISARGA
+	{0xAAF6, 0xAAF6, prN},     // Mn         MEETEI MAYEK VIRAMA
+	{0xAB01, 0xAB06, prN},     // Lo     [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO
+	{0xAB09, 0xAB0E, prN},     // Lo     [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO
+	{0xAB11, 0xAB16, prN},     // Lo     [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
+	{0xAB20, 0xAB26, prN},     // Lo     [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
+	{0xAB28, 0xAB2E, prN},     // Lo     [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
+	{0xAB30, 0xAB5A, prN},     // Ll    [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
+	{0xAB5B, 0xAB5B, prN},     // Sk         MODIFIER BREVE WITH INVERTED BREVE
+	{0xAB5C, 0xAB5F, prN},     // Lm     [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+	{0xAB60, 0xAB68, prN},     // Ll     [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+	{0xAB69, 0xAB69, prN},     // Lm         MODIFIER LETTER SMALL TURNED W
+	{0xAB6A, 0xAB6B, prN},     // Sk     [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK
+	{0xAB70, 0xABBF, prN},     // Ll    [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+	{0xABC0, 0xABE2, prN},     // Lo    [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
+	{0xABE3, 0xABE4, prN},     // Mc     [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
+	{0xABE5, 0xABE5, prN},     // Mn         MEETEI MAYEK VOWEL SIGN ANAP
+	{0xABE6, 0xABE7, prN},     // Mc     [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
+	{0xABE8, 0xABE8, prN},     // Mn         MEETEI MAYEK VOWEL SIGN UNAP
+	{0xABE9, 0xABEA, prN},     // Mc     [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
+	{0xABEB, 0xABEB, prN},     // Po         MEETEI MAYEK CHEIKHEI
+	{0xABEC, 0xABEC, prN},     // Mc         MEETEI MAYEK LUM IYEK
+	{0xABED, 0xABED, prN},     // Mn         MEETEI MAYEK APUN IYEK
+	{0xABF0, 0xABF9, prN},     // Nd    [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
+	{0xAC00, 0xD7A3, prW},     // Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+	{0xD7B0, 0xD7C6, prN},     // Lo    [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
+	{0xD7CB, 0xD7FB, prN},     // Lo    [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
+	{0xD800, 0xDB7F, prN},     // Cs   [896] <surrogate-D800>..<surrogate-DB7F>
+	{0xDB80, 0xDBFF, prN},     // Cs   [128] <surrogate-DB80>..<surrogate-DBFF>
+	{0xDC00, 0xDFFF, prN},     // Cs  [1024] <surrogate-DC00>..<surrogate-DFFF>
+	{0xE000, 0xF8FF, prA},     // Co  [6400] <private-use-E000>..<private-use-F8FF>
+	{0xF900, 0xFA6D, prW},     // Lo   [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
+	{0xFA6E, 0xFA6F, prW},     // Cn     [2] <reserved-FA6E>..<reserved-FA6F>
+	{0xFA70, 0xFAD9, prW},     // Lo   [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+	{0xFADA, 0xFAFF, prW},     // Cn    [38] <reserved-FADA>..<reserved-FAFF>
+	{0xFB00, 0xFB06, prN},     // Ll     [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+	{0xFB13, 0xFB17, prN},     // Ll     [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+	{0xFB1D, 0xFB1D, prN},     // Lo         HEBREW LETTER YOD WITH HIRIQ
+	{0xFB1E, 0xFB1E, prN},     // Mn         HEBREW POINT JUDEO-SPANISH VARIKA
+	{0xFB1F, 0xFB28, prN},     // Lo    [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+	{0xFB29, 0xFB29, prN},     // Sm         HEBREW LETTER ALTERNATIVE PLUS SIGN
+	{0xFB2A, 0xFB36, prN},     // Lo    [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+	{0xFB38, 0xFB3C, prN},     // Lo     [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+	{0xFB3E, 0xFB3E, prN},     // Lo         HEBREW LETTER MEM WITH DAGESH
+	{0xFB40, 0xFB41, prN},     // Lo     [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+	{0xFB43, 0xFB44, prN},     // Lo     [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+	{0xFB46, 0xFB4F, prN},     // Lo    [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED
+	{0xFB50, 0xFBB1, prN},     // Lo    [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+	{0xFBB2, 0xFBC2, prN},     // Sk    [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE
+	{0xFBD3, 0xFD3D, prN},     // Lo   [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+	{0xFD3E, 0xFD3E, prN},     // Pe         ORNATE LEFT PARENTHESIS
+	{0xFD3F, 0xFD3F, prN},     // Ps         ORNATE RIGHT PARENTHESIS
+	{0xFD40, 0xFD4F, prN},     // So    [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH
+	{0xFD50, 0xFD8F, prN},     // Lo    [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+	{0xFD92, 0xFDC7, prN},     // Lo    [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+	{0xFDCF, 0xFDCF, prN},     // So         ARABIC LIGATURE SALAAMUHU ALAYNAA
+	{0xFDF0, 0xFDFB, prN},     // Lo    [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+	{0xFDFC, 0xFDFC, prN},     // Sc         RIAL SIGN
+	{0xFDFD, 0xFDFF, prN},     // So     [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL
+	{0xFE00, 0xFE0F, prA},     // Mn    [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+	{0xFE10, 0xFE16, prW},     // Po     [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK
+	{0xFE17, 0xFE17, prW},     // Ps         PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+	{0xFE18, 0xFE18, prW},     // Pe         PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+	{0xFE19, 0xFE19, prW},     // Po         PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+	{0xFE20, 0xFE2F, prN},     // Mn    [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
+	{0xFE30, 0xFE30, prW},     // Po         PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+	{0xFE31, 0xFE32, prW},     // Pd     [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
+	{0xFE33, 0xFE34, prW},     // Pc     [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+	{0xFE35, 0xFE35, prW},     // Ps         PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+	{0xFE36, 0xFE36, prW},     // Pe         PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+	{0xFE37, 0xFE37, prW},     // Ps         PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+	{0xFE38, 0xFE38, prW},     // Pe         PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+	{0xFE39, 0xFE39, prW},     // Ps         PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+	{0xFE3A, 0xFE3A, prW},     // Pe         PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+	{0xFE3B, 0xFE3B, prW},     // Ps         PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+	{0xFE3C, 0xFE3C, prW},     // Pe         PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+	{0xFE3D, 0xFE3D, prW},     // Ps         PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+	{0xFE3E, 0xFE3E, prW},     // Pe         PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+	{0xFE3F, 0xFE3F, prW},     // Ps         PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+	{0xFE40, 0xFE40, prW},     // Pe         PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+	{0xFE41, 0xFE41, prW},     // Ps         PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+	{0xFE42, 0xFE42, prW},     // Pe         PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+	{0xFE43, 0xFE43, prW},     // Ps         PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+	{0xFE44, 0xFE44, prW},     // Pe         PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+	{0xFE45, 0xFE46, prW},     // Po     [2] SESAME DOT..WHITE SESAME DOT
+	{0xFE47, 0xFE47, prW},     // Ps         PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+	{0xFE48, 0xFE48, prW},     // Pe         PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+	{0xFE49, 0xFE4C, prW},     // Po     [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
+	{0xFE4D, 0xFE4F, prW},     // Pc     [3] DASHED LOW LINE..WAVY LOW LINE
+	{0xFE50, 0xFE52, prW},     // Po     [3] SMALL COMMA..SMALL FULL STOP
+	{0xFE54, 0xFE57, prW},     // Po     [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK
+	{0xFE58, 0xFE58, prW},     // Pd         SMALL EM DASH
+	{0xFE59, 0xFE59, prW},     // Ps         SMALL LEFT PARENTHESIS
+	{0xFE5A, 0xFE5A, prW},     // Pe         SMALL RIGHT PARENTHESIS
+	{0xFE5B, 0xFE5B, prW},     // Ps         SMALL LEFT CURLY BRACKET
+	{0xFE5C, 0xFE5C, prW},     // Pe         SMALL RIGHT CURLY BRACKET
+	{0xFE5D, 0xFE5D, prW},     // Ps         SMALL LEFT TORTOISE SHELL BRACKET
+	{0xFE5E, 0xFE5E, prW},     // Pe         SMALL RIGHT TORTOISE SHELL BRACKET
+	{0xFE5F, 0xFE61, prW},     // Po     [3] SMALL NUMBER SIGN..SMALL ASTERISK
+	{0xFE62, 0xFE62, prW},     // Sm         SMALL PLUS SIGN
+	{0xFE63, 0xFE63, prW},     // Pd         SMALL HYPHEN-MINUS
+	{0xFE64, 0xFE66, prW},     // Sm     [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
+	{0xFE68, 0xFE68, prW},     // Po         SMALL REVERSE SOLIDUS
+	{0xFE69, 0xFE69, prW},     // Sc         SMALL DOLLAR SIGN
+	{0xFE6A, 0xFE6B, prW},     // Po     [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT
+	{0xFE70, 0xFE74, prN},     // Lo     [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
+	{0xFE76, 0xFEFC, prN},     // Lo   [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+	{0xFEFF, 0xFEFF, prN},     // Cf         ZERO WIDTH NO-BREAK SPACE
+	{0xFF01, 0xFF03, prF},     // Po     [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN
+	{0xFF04, 0xFF04, prF},     // Sc         FULLWIDTH DOLLAR SIGN
+	{0xFF05, 0xFF07, prF},     // Po     [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE
+	{0xFF08, 0xFF08, prF},     // Ps         FULLWIDTH LEFT PARENTHESIS
+	{0xFF09, 0xFF09, prF},     // Pe         FULLWIDTH RIGHT PARENTHESIS
+	{0xFF0A, 0xFF0A, prF},     // Po         FULLWIDTH ASTERISK
+	{0xFF0B, 0xFF0B, prF},     // Sm         FULLWIDTH PLUS SIGN
+	{0xFF0C, 0xFF0C, prF},     // Po         FULLWIDTH COMMA
+	{0xFF0D, 0xFF0D, prF},     // Pd         FULLWIDTH HYPHEN-MINUS
+	{0xFF0E, 0xFF0F, prF},     // Po     [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS
+	{0xFF10, 0xFF19, prF},     // Nd    [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+	{0xFF1A, 0xFF1B, prF},     // Po     [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON
+	{0xFF1C, 0xFF1E, prF},     // Sm     [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
+	{0xFF1F, 0xFF20, prF},     // Po     [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT
+	{0xFF21, 0xFF3A, prF},     // Lu    [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+	{0xFF3B, 0xFF3B, prF},     // Ps         FULLWIDTH LEFT SQUARE BRACKET
+	{0xFF3C, 0xFF3C, prF},     // Po         FULLWIDTH REVERSE SOLIDUS
+	{0xFF3D, 0xFF3D, prF},     // Pe         FULLWIDTH RIGHT SQUARE BRACKET
+	{0xFF3E, 0xFF3E, prF},     // Sk         FULLWIDTH CIRCUMFLEX ACCENT
+	{0xFF3F, 0xFF3F, prF},     // Pc         FULLWIDTH LOW LINE
+	{0xFF40, 0xFF40, prF},     // Sk         FULLWIDTH GRAVE ACCENT
+	{0xFF41, 0xFF5A, prF},     // Ll    [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+	{0xFF5B, 0xFF5B, prF},     // Ps         FULLWIDTH LEFT CURLY BRACKET
+	{0xFF5C, 0xFF5C, prF},     // Sm         FULLWIDTH VERTICAL LINE
+	{0xFF5D, 0xFF5D, prF},     // Pe         FULLWIDTH RIGHT CURLY BRACKET
+	{0xFF5E, 0xFF5E, prF},     // Sm         FULLWIDTH TILDE
+	{0xFF5F, 0xFF5F, prF},     // Ps         FULLWIDTH LEFT WHITE PARENTHESIS
+	{0xFF60, 0xFF60, prF},     // Pe         FULLWIDTH RIGHT WHITE PARENTHESIS
+	{0xFF61, 0xFF61, prH},     // Po         HALFWIDTH IDEOGRAPHIC FULL STOP
+	{0xFF62, 0xFF62, prH},     // Ps         HALFWIDTH LEFT CORNER BRACKET
+	{0xFF63, 0xFF63, prH},     // Pe         HALFWIDTH RIGHT CORNER BRACKET
+	{0xFF64, 0xFF65, prH},     // Po     [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT
+	{0xFF66, 0xFF6F, prH},     // Lo    [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+	{0xFF70, 0xFF70, prH},     // Lm         HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+	{0xFF71, 0xFF9D, prH},     // Lo    [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+	{0xFF9E, 0xFF9F, prH},     // Lm     [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+	{0xFFA0, 0xFFBE, prH},     // Lo    [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+	{0xFFC2, 0xFFC7, prH},     // Lo     [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+	{0xFFCA, 0xFFCF, prH},     // Lo     [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+	{0xFFD2, 0xFFD7, prH},     // Lo     [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+	{0xFFDA, 0xFFDC, prH},     // Lo     [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+	{0xFFE0, 0xFFE1, prF},     // Sc     [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN
+	{0xFFE2, 0xFFE2, prF},     // Sm         FULLWIDTH NOT SIGN
+	{0xFFE3, 0xFFE3, prF},     // Sk         FULLWIDTH MACRON
+	{0xFFE4, 0xFFE4, prF},     // So         FULLWIDTH BROKEN BAR
+	{0xFFE5, 0xFFE6, prF},     // Sc     [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN
+	{0xFFE8, 0xFFE8, prH},     // So         HALFWIDTH FORMS LIGHT VERTICAL
+	{0xFFE9, 0xFFEC, prH},     // Sm     [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
+	{0xFFED, 0xFFEE, prH},     // So     [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
+	{0xFFF9, 0xFFFB, prN},     // Cf     [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
+	{0xFFFC, 0xFFFC, prN},     // So         OBJECT REPLACEMENT CHARACTER
+	{0xFFFD, 0xFFFD, prA},     // So         REPLACEMENT CHARACTER
+	{0x10000, 0x1000B, prN},   // Lo    [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+	{0x1000D, 0x10026, prN},   // Lo    [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+	{0x10028, 0x1003A, prN},   // Lo    [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+	{0x1003C, 0x1003D, prN},   // Lo     [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+	{0x1003F, 0x1004D, prN},   // Lo    [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+	{0x10050, 0x1005D, prN},   // Lo    [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+	{0x10080, 0x100FA, prN},   // Lo   [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+	{0x10100, 0x10102, prN},   // Po     [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK
+	{0x10107, 0x10133, prN},   // No    [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND
+	{0x10137, 0x1013F, prN},   // So     [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
+	{0x10140, 0x10174, prN},   // Nl    [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+	{0x10175, 0x10178, prN},   // No     [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN
+	{0x10179, 0x10189, prN},   // So    [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
+	{0x1018A, 0x1018B, prN},   // No     [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN
+	{0x1018C, 0x1018E, prN},   // So     [3] GREEK SINUSOID SIGN..NOMISMA SIGN
+	{0x10190, 0x1019C, prN},   // So    [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL
+	{0x101A0, 0x101A0, prN},   // So         GREEK SYMBOL TAU RHO
+	{0x101D0, 0x101FC, prN},   // So    [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
+	{0x101FD, 0x101FD, prN},   // Mn         PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
+	{0x10280, 0x1029C, prN},   // Lo    [29] LYCIAN LETTER A..LYCIAN LETTER X
+	{0x102A0, 0x102D0, prN},   // Lo    [49] CARIAN LETTER A..CARIAN LETTER UUU3
+	{0x102E0, 0x102E0, prN},   // Mn         COPTIC EPACT THOUSANDS MARK
+	{0x102E1, 0x102FB, prN},   // No    [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED
+	{0x10300, 0x1031F, prN},   // Lo    [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS
+	{0x10320, 0x10323, prN},   // No     [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY
+	{0x1032D, 0x1032F, prN},   // Lo     [3] OLD ITALIC LETTER YE..OLD ITALIC LETTER SOUTHERN TSE
+	{0x10330, 0x10340, prN},   // Lo    [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA
+	{0x10341, 0x10341, prN},   // Nl         GOTHIC LETTER NINETY
+	{0x10342, 0x10349, prN},   // Lo     [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
+	{0x1034A, 0x1034A, prN},   // Nl         GOTHIC LETTER NINE HUNDRED
+	{0x10350, 0x10375, prN},   // Lo    [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA
+	{0x10376, 0x1037A, prN},   // Mn     [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII
+	{0x10380, 0x1039D, prN},   // Lo    [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+	{0x1039F, 0x1039F, prN},   // Po         UGARITIC WORD DIVIDER
+	{0x103A0, 0x103C3, prN},   // Lo    [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+	{0x103C8, 0x103CF, prN},   // Lo     [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+	{0x103D0, 0x103D0, prN},   // Po         OLD PERSIAN WORD DIVIDER
+	{0x103D1, 0x103D5, prN},   // Nl     [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+	{0x10400, 0x1044F, prN},   // L&    [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
+	{0x10450, 0x1047F, prN},   // Lo    [48] SHAVIAN LETTER PEEP..SHAVIAN LETTER YEW
+	{0x10480, 0x1049D, prN},   // Lo    [30] OSMANYA LETTER ALEF..OSMANYA LETTER OO
+	{0x104A0, 0x104A9, prN},   // Nd    [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
+	{0x104B0, 0x104D3, prN},   // Lu    [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+	{0x104D8, 0x104FB, prN},   // Ll    [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
+	{0x10500, 0x10527, prN},   // Lo    [40] ELBASAN LETTER A..ELBASAN LETTER KHE
+	{0x10530, 0x10563, prN},   // Lo    [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
+	{0x1056F, 0x1056F, prN},   // Po         CAUCASIAN ALBANIAN CITATION MARK
+	{0x10570, 0x1057A, prN},   // Lu    [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA
+	{0x1057C, 0x1058A, prN},   // Lu    [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE
+	{0x1058C, 0x10592, prN},   // Lu     [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE
+	{0x10594, 0x10595, prN},   // Lu     [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE
+	{0x10597, 0x105A1, prN},   // Ll    [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA
+	{0x105A3, 0x105B1, prN},   // Ll    [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE
+	{0x105B3, 0x105B9, prN},   // Ll     [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE
+	{0x105BB, 0x105BC, prN},   // Ll     [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE
+	{0x10600, 0x10736, prN},   // Lo   [311] LINEAR A SIGN AB001..LINEAR A SIGN A664
+	{0x10740, 0x10755, prN},   // Lo    [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE
+	{0x10760, 0x10767, prN},   // Lo     [8] LINEAR A SIGN A800..LINEAR A SIGN A807
+	{0x10780, 0x10785, prN},   // Lm     [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK
+	{0x10787, 0x107B0, prN},   // Lm    [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK
+	{0x107B2, 0x107BA, prN},   // Lm     [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL
+	{0x10800, 0x10805, prN},   // Lo     [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+	{0x10808, 0x10808, prN},   // Lo         CYPRIOT SYLLABLE JO
+	{0x1080A, 0x10835, prN},   // Lo    [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+	{0x10837, 0x10838, prN},   // Lo     [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+	{0x1083C, 0x1083C, prN},   // Lo         CYPRIOT SYLLABLE ZA
+	{0x1083F, 0x1083F, prN},   // Lo         CYPRIOT SYLLABLE ZO
+	{0x10840, 0x10855, prN},   // Lo    [22] IMPERIAL ARAMAIC LETTER ALEPH..IMPERIAL ARAMAIC LETTER TAW
+	{0x10857, 0x10857, prN},   // Po         IMPERIAL ARAMAIC SECTION SIGN
+	{0x10858, 0x1085F, prN},   // No     [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND
+	{0x10860, 0x10876, prN},   // Lo    [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW
+	{0x10877, 0x10878, prN},   // So     [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON
+	{0x10879, 0x1087F, prN},   // No     [7] PALMYRENE NUMBER ONE..PALMYRENE NUMBER TWENTY
+	{0x10880, 0x1089E, prN},   // Lo    [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW
+	{0x108A7, 0x108AF, prN},   // No     [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED
+	{0x108E0, 0x108F2, prN},   // Lo    [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH
+	{0x108F4, 0x108F5, prN},   // Lo     [2] HATRAN LETTER SHIN..HATRAN LETTER TAW
+	{0x108FB, 0x108FF, prN},   // No     [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED
+	{0x10900, 0x10915, prN},   // Lo    [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
+	{0x10916, 0x1091B, prN},   // No     [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE
+	{0x1091F, 0x1091F, prN},   // Po         PHOENICIAN WORD SEPARATOR
+	{0x10920, 0x10939, prN},   // Lo    [26] LYDIAN LETTER A..LYDIAN LETTER C
+	{0x1093F, 0x1093F, prN},   // Po         LYDIAN TRIANGULAR MARK
+	{0x10980, 0x1099F, prN},   // Lo    [32] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2
+	{0x109A0, 0x109B7, prN},   // Lo    [24] MEROITIC CURSIVE LETTER A..MEROITIC CURSIVE LETTER DA
+	{0x109BC, 0x109BD, prN},   // No     [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF
+	{0x109BE, 0x109BF, prN},   // Lo     [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN
+	{0x109C0, 0x109CF, prN},   // No    [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY
+	{0x109D2, 0x109FF, prN},   // No    [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS
+	{0x10A00, 0x10A00, prN},   // Lo         KHAROSHTHI LETTER A
+	{0x10A01, 0x10A03, prN},   // Mn     [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+	{0x10A05, 0x10A06, prN},   // Mn     [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+	{0x10A0C, 0x10A0F, prN},   // Mn     [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+	{0x10A10, 0x10A13, prN},   // Lo     [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
+	{0x10A15, 0x10A17, prN},   // Lo     [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+	{0x10A19, 0x10A35, prN},   // Lo    [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA
+	{0x10A38, 0x10A3A, prN},   // Mn     [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
+	{0x10A3F, 0x10A3F, prN},   // Mn         KHAROSHTHI VIRAMA
+	{0x10A40, 0x10A48, prN},   // No     [9] KHAROSHTHI DIGIT ONE..KHAROSHTHI FRACTION ONE HALF
+	{0x10A50, 0x10A58, prN},   // Po     [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES
+	{0x10A60, 0x10A7C, prN},   // Lo    [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
+	{0x10A7D, 0x10A7E, prN},   // No     [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY
+	{0x10A7F, 0x10A7F, prN},   // Po         OLD SOUTH ARABIAN NUMERIC INDICATOR
+	{0x10A80, 0x10A9C, prN},   // Lo    [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH
+	{0x10A9D, 0x10A9F, prN},   // No     [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY
+	{0x10AC0, 0x10AC7, prN},   // Lo     [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW
+	{0x10AC8, 0x10AC8, prN},   // So         MANICHAEAN SIGN UD
+	{0x10AC9, 0x10AE4, prN},   // Lo    [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW
+	{0x10AE5, 0x10AE6, prN},   // Mn     [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
+	{0x10AEB, 0x10AEF, prN},   // No     [5] MANICHAEAN NUMBER ONE..MANICHAEAN NUMBER ONE HUNDRED
+	{0x10AF0, 0x10AF6, prN},   // Po     [7] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION LINE FILLER
+	{0x10B00, 0x10B35, prN},   // Lo    [54] AVESTAN LETTER A..AVESTAN LETTER HE
+	{0x10B39, 0x10B3F, prN},   // Po     [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION
+	{0x10B40, 0x10B55, prN},   // Lo    [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
+	{0x10B58, 0x10B5F, prN},   // No     [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND
+	{0x10B60, 0x10B72, prN},   // Lo    [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
+	{0x10B78, 0x10B7F, prN},   // No     [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND
+	{0x10B80, 0x10B91, prN},   // Lo    [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW
+	{0x10B99, 0x10B9C, prN},   // Po     [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT
+	{0x10BA9, 0x10BAF, prN},   // No     [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED
+	{0x10C00, 0x10C48, prN},   // Lo    [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
+	{0x10C80, 0x10CB2, prN},   // Lu    [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
+	{0x10CC0, 0x10CF2, prN},   // Ll    [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
+	{0x10CFA, 0x10CFF, prN},   // No     [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND
+	{0x10D00, 0x10D23, prN},   // Lo    [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
+	{0x10D24, 0x10D27, prN},   // Mn     [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+	{0x10D30, 0x10D39, prN},   // Nd    [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
+	{0x10E60, 0x10E7E, prN},   // No    [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
+	{0x10E80, 0x10EA9, prN},   // Lo    [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+	{0x10EAB, 0x10EAC, prN},   // Mn     [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
+	{0x10EAD, 0x10EAD, prN},   // Pd         YEZIDI HYPHENATION MARK
+	{0x10EB0, 0x10EB1, prN},   // Lo     [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
+	{0x10F00, 0x10F1C, prN},   // Lo    [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
+	{0x10F1D, 0x10F26, prN},   // No    [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
+	{0x10F27, 0x10F27, prN},   // Lo         OLD SOGDIAN LIGATURE AYIN-DALETH
+	{0x10F30, 0x10F45, prN},   // Lo    [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
+	{0x10F46, 0x10F50, prN},   // Mn    [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
+	{0x10F51, 0x10F54, prN},   // No     [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED
+	{0x10F55, 0x10F59, prN},   // Po     [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+	{0x10F70, 0x10F81, prN},   // Lo    [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH
+	{0x10F82, 0x10F85, prN},   // Mn     [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW
+	{0x10F86, 0x10F89, prN},   // Po     [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS
+	{0x10FB0, 0x10FC4, prN},   // Lo    [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
+	{0x10FC5, 0x10FCB, prN},   // No     [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED
+	{0x10FE0, 0x10FF6, prN},   // Lo    [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
+	{0x11000, 0x11000, prN},   // Mc         BRAHMI SIGN CANDRABINDU
+	{0x11001, 0x11001, prN},   // Mn         BRAHMI SIGN ANUSVARA
+	{0x11002, 0x11002, prN},   // Mc         BRAHMI SIGN VISARGA
+	{0x11003, 0x11037, prN},   // Lo    [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
+	{0x11038, 0x11046, prN},   // Mn    [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
+	{0x11047, 0x1104D, prN},   // Po     [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS
+	{0x11052, 0x11065, prN},   // No    [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND
+	{0x11066, 0x1106F, prN},   // Nd    [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE
+	{0x11070, 0x11070, prN},   // Mn         BRAHMI SIGN OLD TAMIL VIRAMA
+	{0x11071, 0x11072, prN},   // Lo     [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O
+	{0x11073, 0x11074, prN},   // Mn     [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O
+	{0x11075, 0x11075, prN},   // Lo         BRAHMI LETTER OLD TAMIL LLA
+	{0x1107F, 0x1107F, prN},   // Mn         BRAHMI NUMBER JOINER
+	{0x11080, 0x11081, prN},   // Mn     [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA
+	{0x11082, 0x11082, prN},   // Mc         KAITHI SIGN VISARGA
+	{0x11083, 0x110AF, prN},   // Lo    [45] KAITHI LETTER A..KAITHI LETTER HA
+	{0x110B0, 0x110B2, prN},   // Mc     [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
+	{0x110B3, 0x110B6, prN},   // Mn     [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
+	{0x110B7, 0x110B8, prN},   // Mc     [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
+	{0x110B9, 0x110BA, prN},   // Mn     [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
+	{0x110BB, 0x110BC, prN},   // Po     [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN
+	{0x110BD, 0x110BD, prN},   // Cf         KAITHI NUMBER SIGN
+	{0x110BE, 0x110C1, prN},   // Po     [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
+	{0x110C2, 0x110C2, prN},   // Mn         KAITHI VOWEL SIGN VOCALIC R
+	{0x110CD, 0x110CD, prN},   // Cf         KAITHI NUMBER SIGN ABOVE
+	{0x110D0, 0x110E8, prN},   // Lo    [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
+	{0x110F0, 0x110F9, prN},   // Nd    [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE
+	{0x11100, 0x11102, prN},   // Mn     [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
+	{0x11103, 0x11126, prN},   // Lo    [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
+	{0x11127, 0x1112B, prN},   // Mn     [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
+	{0x1112C, 0x1112C, prN},   // Mc         CHAKMA VOWEL SIGN E
+	{0x1112D, 0x11134, prN},   // Mn     [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA
+	{0x11136, 0x1113F, prN},   // Nd    [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
+	{0x11140, 0x11143, prN},   // Po     [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
+	{0x11144, 0x11144, prN},   // Lo         CHAKMA LETTER LHAA
+	{0x11145, 0x11146, prN},   // Mc     [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+	{0x11147, 0x11147, prN},   // Lo         CHAKMA LETTER VAA
+	{0x11150, 0x11172, prN},   // Lo    [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
+	{0x11173, 0x11173, prN},   // Mn         MAHAJANI SIGN NUKTA
+	{0x11174, 0x11175, prN},   // Po     [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK
+	{0x11176, 0x11176, prN},   // Lo         MAHAJANI LIGATURE SHRI
+	{0x11180, 0x11181, prN},   // Mn     [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
+	{0x11182, 0x11182, prN},   // Mc         SHARADA SIGN VISARGA
+	{0x11183, 0x111B2, prN},   // Lo    [48] SHARADA LETTER A..SHARADA LETTER HA
+	{0x111B3, 0x111B5, prN},   // Mc     [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
+	{0x111B6, 0x111BE, prN},   // Mn     [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
+	{0x111BF, 0x111C0, prN},   // Mc     [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
+	{0x111C1, 0x111C4, prN},   // Lo     [4] SHARADA SIGN AVAGRAHA..SHARADA OM
+	{0x111C5, 0x111C8, prN},   // Po     [4] SHARADA DANDA..SHARADA SEPARATOR
+	{0x111C9, 0x111CC, prN},   // Mn     [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+	{0x111CD, 0x111CD, prN},   // Po         SHARADA SUTRA MARK
+	{0x111CE, 0x111CE, prN},   // Mc         SHARADA VOWEL SIGN PRISHTHAMATRA E
+	{0x111CF, 0x111CF, prN},   // Mn         SHARADA SIGN INVERTED CANDRABINDU
+	{0x111D0, 0x111D9, prN},   // Nd    [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
+	{0x111DA, 0x111DA, prN},   // Lo         SHARADA EKAM
+	{0x111DB, 0x111DB, prN},   // Po         SHARADA SIGN SIDDHAM
+	{0x111DC, 0x111DC, prN},   // Lo         SHARADA HEADSTROKE
+	{0x111DD, 0x111DF, prN},   // Po     [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2
+	{0x111E1, 0x111F4, prN},   // No    [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND
+	{0x11200, 0x11211, prN},   // Lo    [18] KHOJKI LETTER A..KHOJKI LETTER JJA
+	{0x11213, 0x1122B, prN},   // Lo    [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA
+	{0x1122C, 0x1122E, prN},   // Mc     [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
+	{0x1122F, 0x11231, prN},   // Mn     [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
+	{0x11232, 0x11233, prN},   // Mc     [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
+	{0x11234, 0x11234, prN},   // Mn         KHOJKI SIGN ANUSVARA
+	{0x11235, 0x11235, prN},   // Mc         KHOJKI SIGN VIRAMA
+	{0x11236, 0x11237, prN},   // Mn     [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
+	{0x11238, 0x1123D, prN},   // Po     [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN
+	{0x1123E, 0x1123E, prN},   // Mn         KHOJKI SIGN SUKUN
+	{0x11280, 0x11286, prN},   // Lo     [7] MULTANI LETTER A..MULTANI LETTER GA
+	{0x11288, 0x11288, prN},   // Lo         MULTANI LETTER GHA
+	{0x1128A, 0x1128D, prN},   // Lo     [4] MULTANI LETTER CA..MULTANI LETTER JJA
+	{0x1128F, 0x1129D, prN},   // Lo    [15] MULTANI LETTER NYA..MULTANI LETTER BA
+	{0x1129F, 0x112A8, prN},   // Lo    [10] MULTANI LETTER BHA..MULTANI LETTER RHA
+	{0x112A9, 0x112A9, prN},   // Po         MULTANI SECTION MARK
+	{0x112B0, 0x112DE, prN},   // Lo    [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA
+	{0x112DF, 0x112DF, prN},   // Mn         KHUDAWADI SIGN ANUSVARA
+	{0x112E0, 0x112E2, prN},   // Mc     [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
+	{0x112E3, 0x112EA, prN},   // Mn     [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA
+	{0x112F0, 0x112F9, prN},   // Nd    [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE
+	{0x11300, 0x11301, prN},   // Mn     [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
+	{0x11302, 0x11303, prN},   // Mc     [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
+	{0x11305, 0x1130C, prN},   // Lo     [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L
+	{0x1130F, 0x11310, prN},   // Lo     [2] GRANTHA LETTER EE..GRANTHA LETTER AI
+	{0x11313, 0x11328, prN},   // Lo    [22] GRANTHA LETTER OO..GRANTHA LETTER NA
+	{0x1132A, 0x11330, prN},   // Lo     [7] GRANTHA LETTER PA..GRANTHA LETTER RA
+	{0x11332, 0x11333, prN},   // Lo     [2] GRANTHA LETTER LA..GRANTHA LETTER LLA
+	{0x11335, 0x11339, prN},   // Lo     [5] GRANTHA LETTER VA..GRANTHA LETTER HA
+	{0x1133B, 0x1133C, prN},   // Mn     [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA
+	{0x1133D, 0x1133D, prN},   // Lo         GRANTHA SIGN AVAGRAHA
+	{0x1133E, 0x1133F, prN},   // Mc     [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I
+	{0x11340, 0x11340, prN},   // Mn         GRANTHA VOWEL SIGN II
+	{0x11341, 0x11344, prN},   // Mc     [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR
+	{0x11347, 0x11348, prN},   // Mc     [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
+	{0x1134B, 0x1134D, prN},   // Mc     [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA
+	{0x11350, 0x11350, prN},   // Lo         GRANTHA OM
+	{0x11357, 0x11357, prN},   // Mc         GRANTHA AU LENGTH MARK
+	{0x1135D, 0x11361, prN},   // Lo     [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
+	{0x11362, 0x11363, prN},   // Mc     [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
+	{0x11366, 0x1136C, prN},   // Mn     [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
+	{0x11370, 0x11374, prN},   // Mn     [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
+	{0x11400, 0x11434, prN},   // Lo    [53] NEWA LETTER A..NEWA LETTER HA
+	{0x11435, 0x11437, prN},   // Mc     [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
+	{0x11438, 0x1143F, prN},   // Mn     [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
+	{0x11440, 0x11441, prN},   // Mc     [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
+	{0x11442, 0x11444, prN},   // Mn     [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA
+	{0x11445, 0x11445, prN},   // Mc         NEWA SIGN VISARGA
+	{0x11446, 0x11446, prN},   // Mn         NEWA SIGN NUKTA
+	{0x11447, 0x1144A, prN},   // Lo     [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
+	{0x1144B, 0x1144F, prN},   // Po     [5] NEWA DANDA..NEWA ABBREVIATION SIGN
+	{0x11450, 0x11459, prN},   // Nd    [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
+	{0x1145A, 0x1145B, prN},   // Po     [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK
+	{0x1145D, 0x1145D, prN},   // Po         NEWA INSERTION SIGN
+	{0x1145E, 0x1145E, prN},   // Mn         NEWA SANDHI MARK
+	{0x1145F, 0x11461, prN},   // Lo     [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
+	{0x11480, 0x114AF, prN},   // Lo    [48] TIRHUTA ANJI..TIRHUTA LETTER HA
+	{0x114B0, 0x114B2, prN},   // Mc     [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
+	{0x114B3, 0x114B8, prN},   // Mn     [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
+	{0x114B9, 0x114B9, prN},   // Mc         TIRHUTA VOWEL SIGN E
+	{0x114BA, 0x114BA, prN},   // Mn         TIRHUTA VOWEL SIGN SHORT E
+	{0x114BB, 0x114BE, prN},   // Mc     [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU
+	{0x114BF, 0x114C0, prN},   // Mn     [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA
+	{0x114C1, 0x114C1, prN},   // Mc         TIRHUTA SIGN VISARGA
+	{0x114C2, 0x114C3, prN},   // Mn     [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA
+	{0x114C4, 0x114C5, prN},   // Lo     [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
+	{0x114C6, 0x114C6, prN},   // Po         TIRHUTA ABBREVIATION SIGN
+	{0x114C7, 0x114C7, prN},   // Lo         TIRHUTA OM
+	{0x114D0, 0x114D9, prN},   // Nd    [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE
+	{0x11580, 0x115AE, prN},   // Lo    [47] SIDDHAM LETTER A..SIDDHAM LETTER HA
+	{0x115AF, 0x115B1, prN},   // Mc     [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II
+	{0x115B2, 0x115B5, prN},   // Mn     [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR
+	{0x115B8, 0x115BB, prN},   // Mc     [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU
+	{0x115BC, 0x115BD, prN},   // Mn     [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
+	{0x115BE, 0x115BE, prN},   // Mc         SIDDHAM SIGN VISARGA
+	{0x115BF, 0x115C0, prN},   // Mn     [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA
+	{0x115C1, 0x115D7, prN},   // Po    [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
+	{0x115D8, 0x115DB, prN},   // Lo     [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U
+	{0x115DC, 0x115DD, prN},   // Mn     [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
+	{0x11600, 0x1162F, prN},   // Lo    [48] MODI LETTER A..MODI LETTER LLA
+	{0x11630, 0x11632, prN},   // Mc     [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II
+	{0x11633, 0x1163A, prN},   // Mn     [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI
+	{0x1163B, 0x1163C, prN},   // Mc     [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU
+	{0x1163D, 0x1163D, prN},   // Mn         MODI SIGN ANUSVARA
+	{0x1163E, 0x1163E, prN},   // Mc         MODI SIGN VISARGA
+	{0x1163F, 0x11640, prN},   // Mn     [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA
+	{0x11641, 0x11643, prN},   // Po     [3] MODI DANDA..MODI ABBREVIATION SIGN
+	{0x11644, 0x11644, prN},   // Lo         MODI SIGN HUVA
+	{0x11650, 0x11659, prN},   // Nd    [10] MODI DIGIT ZERO..MODI DIGIT NINE
+	{0x11660, 0x1166C, prN},   // Po    [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT
+	{0x11680, 0x116AA, prN},   // Lo    [43] TAKRI LETTER A..TAKRI LETTER RRA
+	{0x116AB, 0x116AB, prN},   // Mn         TAKRI SIGN ANUSVARA
+	{0x116AC, 0x116AC, prN},   // Mc         TAKRI SIGN VISARGA
+	{0x116AD, 0x116AD, prN},   // Mn         TAKRI VOWEL SIGN AA
+	{0x116AE, 0x116AF, prN},   // Mc     [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
+	{0x116B0, 0x116B5, prN},   // Mn     [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
+	{0x116B6, 0x116B6, prN},   // Mc         TAKRI SIGN VIRAMA
+	{0x116B7, 0x116B7, prN},   // Mn         TAKRI SIGN NUKTA
+	{0x116B8, 0x116B8, prN},   // Lo         TAKRI LETTER ARCHAIC KHA
+	{0x116B9, 0x116B9, prN},   // Po         TAKRI ABBREVIATION SIGN
+	{0x116C0, 0x116C9, prN},   // Nd    [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
+	{0x11700, 0x1171A, prN},   // Lo    [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
+	{0x1171D, 0x1171F, prN},   // Mn     [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
+	{0x11720, 0x11721, prN},   // Mc     [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
+	{0x11722, 0x11725, prN},   // Mn     [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
+	{0x11726, 0x11726, prN},   // Mc         AHOM VOWEL SIGN E
+	{0x11727, 0x1172B, prN},   // Mn     [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
+	{0x11730, 0x11739, prN},   // Nd    [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
+	{0x1173A, 0x1173B, prN},   // No     [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY
+	{0x1173C, 0x1173E, prN},   // Po     [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
+	{0x1173F, 0x1173F, prN},   // So         AHOM SYMBOL VI
+	{0x11740, 0x11746, prN},   // Lo     [7] AHOM LETTER CA..AHOM LETTER LLA
+	{0x11800, 0x1182B, prN},   // Lo    [44] DOGRA LETTER A..DOGRA LETTER RRA
+	{0x1182C, 0x1182E, prN},   // Mc     [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
+	{0x1182F, 0x11837, prN},   // Mn     [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
+	{0x11838, 0x11838, prN},   // Mc         DOGRA SIGN VISARGA
+	{0x11839, 0x1183A, prN},   // Mn     [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+	{0x1183B, 0x1183B, prN},   // Po         DOGRA ABBREVIATION SIGN
+	{0x118A0, 0x118DF, prN},   // L&    [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
+	{0x118E0, 0x118E9, prN},   // Nd    [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
+	{0x118EA, 0x118F2, prN},   // No     [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY
+	{0x118FF, 0x118FF, prN},   // Lo         WARANG CITI OM
+	{0x11900, 0x11906, prN},   // Lo     [7] DIVES AKURU LETTER A..DIVES AKURU LETTER E
+	{0x11909, 0x11909, prN},   // Lo         DIVES AKURU LETTER O
+	{0x1190C, 0x11913, prN},   // Lo     [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+	{0x11915, 0x11916, prN},   // Lo     [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+	{0x11918, 0x1192F, prN},   // Lo    [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+	{0x11930, 0x11935, prN},   // Mc     [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+	{0x11937, 0x11938, prN},   // Mc     [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+	{0x1193B, 0x1193C, prN},   // Mn     [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+	{0x1193D, 0x1193D, prN},   // Mc         DIVES AKURU SIGN HALANTA
+	{0x1193E, 0x1193E, prN},   // Mn         DIVES AKURU VIRAMA
+	{0x1193F, 0x1193F, prN},   // Lo         DIVES AKURU PREFIXED NASAL SIGN
+	{0x11940, 0x11940, prN},   // Mc         DIVES AKURU MEDIAL YA
+	{0x11941, 0x11941, prN},   // Lo         DIVES AKURU INITIAL RA
+	{0x11942, 0x11942, prN},   // Mc         DIVES AKURU MEDIAL RA
+	{0x11943, 0x11943, prN},   // Mn         DIVES AKURU SIGN NUKTA
+	{0x11944, 0x11946, prN},   // Po     [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK
+	{0x11950, 0x11959, prN},   // Nd    [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
+	{0x119A0, 0x119A7, prN},   // Lo     [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
+	{0x119AA, 0x119D0, prN},   // Lo    [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
+	{0x119D1, 0x119D3, prN},   // Mc     [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
+	{0x119D4, 0x119D7, prN},   // Mn     [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
+	{0x119DA, 0x119DB, prN},   // Mn     [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
+	{0x119DC, 0x119DF, prN},   // Mc     [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA
+	{0x119E0, 0x119E0, prN},   // Mn         NANDINAGARI SIGN VIRAMA
+	{0x119E1, 0x119E1, prN},   // Lo         NANDINAGARI SIGN AVAGRAHA
+	{0x119E2, 0x119E2, prN},   // Po         NANDINAGARI SIGN SIDDHAM
+	{0x119E3, 0x119E3, prN},   // Lo         NANDINAGARI HEADSTROKE
+	{0x119E4, 0x119E4, prN},   // Mc         NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
+	{0x11A00, 0x11A00, prN},   // Lo         ZANABAZAR SQUARE LETTER A
+	{0x11A01, 0x11A0A, prN},   // Mn    [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK
+	{0x11A0B, 0x11A32, prN},   // Lo    [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
+	{0x11A33, 0x11A38, prN},   // Mn     [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
+	{0x11A39, 0x11A39, prN},   // Mc         ZANABAZAR SQUARE SIGN VISARGA
+	{0x11A3A, 0x11A3A, prN},   // Lo         ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
+	{0x11A3B, 0x11A3E, prN},   // Mn     [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
+	{0x11A3F, 0x11A46, prN},   // Po     [8] ZANABAZAR SQUARE INITIAL HEAD MARK..ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK
+	{0x11A47, 0x11A47, prN},   // Mn         ZANABAZAR SQUARE SUBJOINER
+	{0x11A50, 0x11A50, prN},   // Lo         SOYOMBO LETTER A
+	{0x11A51, 0x11A56, prN},   // Mn     [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
+	{0x11A57, 0x11A58, prN},   // Mc     [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
+	{0x11A59, 0x11A5B, prN},   // Mn     [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
+	{0x11A5C, 0x11A89, prN},   // Lo    [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA
+	{0x11A8A, 0x11A96, prN},   // Mn    [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
+	{0x11A97, 0x11A97, prN},   // Mc         SOYOMBO SIGN VISARGA
+	{0x11A98, 0x11A99, prN},   // Mn     [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
+	{0x11A9A, 0x11A9C, prN},   // Po     [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD
+	{0x11A9D, 0x11A9D, prN},   // Lo         SOYOMBO MARK PLUTA
+	{0x11A9E, 0x11AA2, prN},   // Po     [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2
+	{0x11AB0, 0x11ABF, prN},   // Lo    [16] CANADIAN SYLLABICS NATTILIK HI..CANADIAN SYLLABICS SPA
+	{0x11AC0, 0x11AF8, prN},   // Lo    [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL
+	{0x11C00, 0x11C08, prN},   // Lo     [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
+	{0x11C0A, 0x11C2E, prN},   // Lo    [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
+	{0x11C2F, 0x11C2F, prN},   // Mc         BHAIKSUKI VOWEL SIGN AA
+	{0x11C30, 0x11C36, prN},   // Mn     [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
+	{0x11C38, 0x11C3D, prN},   // Mn     [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
+	{0x11C3E, 0x11C3E, prN},   // Mc         BHAIKSUKI SIGN VISARGA
+	{0x11C3F, 0x11C3F, prN},   // Mn         BHAIKSUKI SIGN VIRAMA
+	{0x11C40, 0x11C40, prN},   // Lo         BHAIKSUKI SIGN AVAGRAHA
+	{0x11C41, 0x11C45, prN},   // Po     [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2
+	{0x11C50, 0x11C59, prN},   // Nd    [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
+	{0x11C5A, 0x11C6C, prN},   // No    [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK
+	{0x11C70, 0x11C71, prN},   // Po     [2] MARCHEN HEAD MARK..MARCHEN MARK SHAD
+	{0x11C72, 0x11C8F, prN},   // Lo    [30] MARCHEN LETTER KA..MARCHEN LETTER A
+	{0x11C92, 0x11CA7, prN},   // Mn    [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
+	{0x11CA9, 0x11CA9, prN},   // Mc         MARCHEN SUBJOINED LETTER YA
+	{0x11CAA, 0x11CB0, prN},   // Mn     [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
+	{0x11CB1, 0x11CB1, prN},   // Mc         MARCHEN VOWEL SIGN I
+	{0x11CB2, 0x11CB3, prN},   // Mn     [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
+	{0x11CB4, 0x11CB4, prN},   // Mc         MARCHEN VOWEL SIGN O
+	{0x11CB5, 0x11CB6, prN},   // Mn     [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
+	{0x11D00, 0x11D06, prN},   // Lo     [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
+	{0x11D08, 0x11D09, prN},   // Lo     [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
+	{0x11D0B, 0x11D30, prN},   // Lo    [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA
+	{0x11D31, 0x11D36, prN},   // Mn     [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
+	{0x11D3A, 0x11D3A, prN},   // Mn         MASARAM GONDI VOWEL SIGN E
+	{0x11D3C, 0x11D3D, prN},   // Mn     [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
+	{0x11D3F, 0x11D45, prN},   // Mn     [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA
+	{0x11D46, 0x11D46, prN},   // Lo         MASARAM GONDI REPHA
+	{0x11D47, 0x11D47, prN},   // Mn         MASARAM GONDI RA-KARA
+	{0x11D50, 0x11D59, prN},   // Nd    [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
+	{0x11D60, 0x11D65, prN},   // Lo     [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU
+	{0x11D67, 0x11D68, prN},   // Lo     [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI
+	{0x11D6A, 0x11D89, prN},   // Lo    [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
+	{0x11D8A, 0x11D8E, prN},   // Mc     [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
+	{0x11D90, 0x11D91, prN},   // Mn     [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
+	{0x11D93, 0x11D94, prN},   // Mc     [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
+	{0x11D95, 0x11D95, prN},   // Mn         GUNJALA GONDI SIGN ANUSVARA
+	{0x11D96, 0x11D96, prN},   // Mc         GUNJALA GONDI SIGN VISARGA
+	{0x11D97, 0x11D97, prN},   // Mn         GUNJALA GONDI VIRAMA
+	{0x11D98, 0x11D98, prN},   // Lo         GUNJALA GONDI OM
+	{0x11DA0, 0x11DA9, prN},   // Nd    [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE
+	{0x11EE0, 0x11EF2, prN},   // Lo    [19] MAKASAR LETTER KA..MAKASAR ANGKA
+	{0x11EF3, 0x11EF4, prN},   // Mn     [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
+	{0x11EF5, 0x11EF6, prN},   // Mc     [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
+	{0x11EF7, 0x11EF8, prN},   // Po     [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
+	{0x11FB0, 0x11FB0, prN},   // Lo         LISU LETTER YHA
+	{0x11FC0, 0x11FD4, prN},   // No    [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH
+	{0x11FD5, 0x11FDC, prN},   // So     [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI
+	{0x11FDD, 0x11FE0, prN},   // Sc     [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN
+	{0x11FE1, 0x11FF1, prN},   // So    [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA
+	{0x11FFF, 0x11FFF, prN},   // Po         TAMIL PUNCTUATION END OF TEXT
+	{0x12000, 0x12399, prN},   // Lo   [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
+	{0x12400, 0x1246E, prN},   // Nl   [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
+	{0x12470, 0x12474, prN},   // Po     [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
+	{0x12480, 0x12543, prN},   // Lo   [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
+	{0x12F90, 0x12FF0, prN},   // Lo    [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114
+	{0x12FF1, 0x12FF2, prN},   // Po     [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302
+	{0x13000, 0x1342E, prN},   // Lo  [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
+	{0x13430, 0x13438, prN},   // Cf     [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT
+	{0x14400, 0x14646, prN},   // Lo   [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530
+	{0x16800, 0x16A38, prN},   // Lo   [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ
+	{0x16A40, 0x16A5E, prN},   // Lo    [31] MRO LETTER TA..MRO LETTER TEK
+	{0x16A60, 0x16A69, prN},   // Nd    [10] MRO DIGIT ZERO..MRO DIGIT NINE
+	{0x16A6E, 0x16A6F, prN},   // Po     [2] MRO DANDA..MRO DOUBLE DANDA
+	{0x16A70, 0x16ABE, prN},   // Lo    [79] TANGSA LETTER OZ..TANGSA LETTER ZA
+	{0x16AC0, 0x16AC9, prN},   // Nd    [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE
+	{0x16AD0, 0x16AED, prN},   // Lo    [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I
+	{0x16AF0, 0x16AF4, prN},   // Mn     [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
+	{0x16AF5, 0x16AF5, prN},   // Po         BASSA VAH FULL STOP
+	{0x16B00, 0x16B2F, prN},   // Lo    [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU
+	{0x16B30, 0x16B36, prN},   // Mn     [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
+	{0x16B37, 0x16B3B, prN},   // Po     [5] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS FEEM
+	{0x16B3C, 0x16B3F, prN},   // So     [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB
+	{0x16B40, 0x16B43, prN},   // Lm     [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM
+	{0x16B44, 0x16B44, prN},   // Po         PAHAWH HMONG SIGN XAUS
+	{0x16B45, 0x16B45, prN},   // So         PAHAWH HMONG SIGN CIM TSOV ROG
+	{0x16B50, 0x16B59, prN},   // Nd    [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE
+	{0x16B5B, 0x16B61, prN},   // No     [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS
+	{0x16B63, 0x16B77, prN},   // Lo    [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS
+	{0x16B7D, 0x16B8F, prN},   // Lo    [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ
+	{0x16E40, 0x16E7F, prN},   // L&    [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y
+	{0x16E80, 0x16E96, prN},   // No    [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM
+	{0x16E97, 0x16E9A, prN},   // Po     [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH
+	{0x16F00, 0x16F4A, prN},   // Lo    [75] MIAO LETTER PA..MIAO LETTER RTE
+	{0x16F4F, 0x16F4F, prN},   // Mn         MIAO SIGN CONSONANT MODIFIER BAR
+	{0x16F50, 0x16F50, prN},   // Lo         MIAO LETTER NASALIZATION
+	{0x16F51, 0x16F87, prN},   // Mc    [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
+	{0x16F8F, 0x16F92, prN},   // Mn     [4] MIAO TONE RIGHT..MIAO TONE BELOW
+	{0x16F93, 0x16F9F, prN},   // Lm    [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
+	{0x16FE0, 0x16FE1, prW},   // Lm     [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
+	{0x16FE2, 0x16FE2, prW},   // Po         OLD CHINESE HOOK MARK
+	{0x16FE3, 0x16FE3, prW},   // Lm         OLD CHINESE ITERATION MARK
+	{0x16FE4, 0x16FE4, prW},   // Mn         KHITAN SMALL SCRIPT FILLER
+	{0x16FF0, 0x16FF1, prW},   // Mc     [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
+	{0x17000, 0x187F7, prW},   // Lo  [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
+	{0x18800, 0x18AFF, prW},   // Lo   [768] TANGUT COMPONENT-001..TANGUT COMPONENT-768
+	{0x18B00, 0x18CD5, prW},   // Lo   [470] KHITAN SMALL SCRIPT CHARACTER-18B00..KHITAN SMALL SCRIPT CHARACTER-18CD5
+	{0x18D00, 0x18D08, prW},   // Lo     [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
+	{0x1AFF0, 0x1AFF3, prW},   // Lm     [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5
+	{0x1AFF5, 0x1AFFB, prW},   // Lm     [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5
+	{0x1AFFD, 0x1AFFE, prW},   // Lm     [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8
+	{0x1B000, 0x1B0FF, prW},   // Lo   [256] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER RE-2
+	{0x1B100, 0x1B122, prW},   // Lo    [35] HENTAIGANA LETTER RE-3..KATAKANA LETTER ARCHAIC WU
+	{0x1B150, 0x1B152, prW},   // Lo     [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
+	{0x1B164, 0x1B167, prW},   // Lo     [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
+	{0x1B170, 0x1B2FB, prW},   // Lo   [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
+	{0x1BC00, 0x1BC6A, prN},   // Lo   [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
+	{0x1BC70, 0x1BC7C, prN},   // Lo    [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
+	{0x1BC80, 0x1BC88, prN},   // Lo     [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
+	{0x1BC90, 0x1BC99, prN},   // Lo    [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW
+	{0x1BC9C, 0x1BC9C, prN},   // So         DUPLOYAN SIGN O WITH CROSS
+	{0x1BC9D, 0x1BC9E, prN},   // Mn     [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
+	{0x1BC9F, 0x1BC9F, prN},   // Po         DUPLOYAN PUNCTUATION CHINOOK FULL STOP
+	{0x1BCA0, 0x1BCA3, prN},   // Cf     [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
+	{0x1CF00, 0x1CF2D, prN},   // Mn    [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT
+	{0x1CF30, 0x1CF46, prN},   // Mn    [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG
+	{0x1CF50, 0x1CFC3, prN},   // So   [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK
+	{0x1D000, 0x1D0F5, prN},   // So   [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
+	{0x1D100, 0x1D126, prN},   // So    [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2
+	{0x1D129, 0x1D164, prN},   // So    [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+	{0x1D165, 0x1D166, prN},   // Mc     [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+	{0x1D167, 0x1D169, prN},   // Mn     [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+	{0x1D16A, 0x1D16C, prN},   // So     [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3
+	{0x1D16D, 0x1D172, prN},   // Mc     [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
+	{0x1D173, 0x1D17A, prN},   // Cf     [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
+	{0x1D17B, 0x1D182, prN},   // Mn     [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+	{0x1D183, 0x1D184, prN},   // So     [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN
+	{0x1D185, 0x1D18B, prN},   // Mn     [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+	{0x1D18C, 0x1D1A9, prN},   // So    [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
+	{0x1D1AA, 0x1D1AD, prN},   // Mn     [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+	{0x1D1AE, 0x1D1EA, prN},   // So    [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON
+	{0x1D200, 0x1D241, prN},   // So    [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54
+	{0x1D242, 0x1D244, prN},   // Mn     [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
+	{0x1D245, 0x1D245, prN},   // So         GREEK MUSICAL LEIMMA
+	{0x1D2E0, 0x1D2F3, prN},   // No    [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN
+	{0x1D300, 0x1D356, prN},   // So    [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING
+	{0x1D360, 0x1D378, prN},   // No    [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE
+	{0x1D400, 0x1D454, prN},   // L&    [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+	{0x1D456, 0x1D49C, prN},   // L&    [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+	{0x1D49E, 0x1D49F, prN},   // Lu     [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+	{0x1D4A2, 0x1D4A2, prN},   // Lu         MATHEMATICAL SCRIPT CAPITAL G
+	{0x1D4A5, 0x1D4A6, prN},   // Lu     [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+	{0x1D4A9, 0x1D4AC, prN},   // Lu     [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+	{0x1D4AE, 0x1D4B9, prN},   // L&    [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+	{0x1D4BB, 0x1D4BB, prN},   // Ll         MATHEMATICAL SCRIPT SMALL F
+	{0x1D4BD, 0x1D4C3, prN},   // Ll     [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+	{0x1D4C5, 0x1D505, prN},   // L&    [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+	{0x1D507, 0x1D50A, prN},   // Lu     [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+	{0x1D50D, 0x1D514, prN},   // Lu     [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+	{0x1D516, 0x1D51C, prN},   // Lu     [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+	{0x1D51E, 0x1D539, prN},   // L&    [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+	{0x1D53B, 0x1D53E, prN},   // Lu     [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+	{0x1D540, 0x1D544, prN},   // Lu     [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+	{0x1D546, 0x1D546, prN},   // Lu         MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+	{0x1D54A, 0x1D550, prN},   // Lu     [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+	{0x1D552, 0x1D6A5, prN},   // L&   [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+	{0x1D6A8, 0x1D6C0, prN},   // Lu    [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+	{0x1D6C1, 0x1D6C1, prN},   // Sm         MATHEMATICAL BOLD NABLA
+	{0x1D6C2, 0x1D6DA, prN},   // Ll    [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+	{0x1D6DB, 0x1D6DB, prN},   // Sm         MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+	{0x1D6DC, 0x1D6FA, prN},   // L&    [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+	{0x1D6FB, 0x1D6FB, prN},   // Sm         MATHEMATICAL ITALIC NABLA
+	{0x1D6FC, 0x1D714, prN},   // Ll    [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+	{0x1D715, 0x1D715, prN},   // Sm         MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+	{0x1D716, 0x1D734, prN},   // L&    [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+	{0x1D735, 0x1D735, prN},   // Sm         MATHEMATICAL BOLD ITALIC NABLA
+	{0x1D736, 0x1D74E, prN},   // Ll    [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+	{0x1D74F, 0x1D74F, prN},   // Sm         MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+	{0x1D750, 0x1D76E, prN},   // L&    [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+	{0x1D76F, 0x1D76F, prN},   // Sm         MATHEMATICAL SANS-SERIF BOLD NABLA
+	{0x1D770, 0x1D788, prN},   // Ll    [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+	{0x1D789, 0x1D789, prN},   // Sm         MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+	{0x1D78A, 0x1D7A8, prN},   // L&    [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+	{0x1D7A9, 0x1D7A9, prN},   // Sm         MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+	{0x1D7AA, 0x1D7C2, prN},   // Ll    [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+	{0x1D7C3, 0x1D7C3, prN},   // Sm         MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+	{0x1D7C4, 0x1D7CB, prN},   // L&     [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+	{0x1D7CE, 0x1D7FF, prN},   // Nd    [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+	{0x1D800, 0x1D9FF, prN},   // So   [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD
+	{0x1DA00, 0x1DA36, prN},   // Mn    [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN
+	{0x1DA37, 0x1DA3A, prN},   // So     [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE
+	{0x1DA3B, 0x1DA6C, prN},   // Mn    [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT
+	{0x1DA6D, 0x1DA74, prN},   // So     [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING
+	{0x1DA75, 0x1DA75, prN},   // Mn         SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
+	{0x1DA76, 0x1DA83, prN},   // So    [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH
+	{0x1DA84, 0x1DA84, prN},   // Mn         SIGNWRITING LOCATION HEAD NECK
+	{0x1DA85, 0x1DA86, prN},   // So     [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS
+	{0x1DA87, 0x1DA8B, prN},   // Po     [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS
+	{0x1DA9B, 0x1DA9F, prN},   // Mn     [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
+	{0x1DAA1, 0x1DAAF, prN},   // Mn    [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
+	{0x1DF00, 0x1DF09, prN},   // Ll    [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK
+	{0x1DF0A, 0x1DF0A, prN},   // Lo         LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK
+	{0x1DF0B, 0x1DF1E, prN},   // Ll    [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL
+	{0x1E000, 0x1E006, prN},   // Mn     [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
+	{0x1E008, 0x1E018, prN},   // Mn    [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
+	{0x1E01B, 0x1E021, prN},   // Mn     [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
+	{0x1E023, 0x1E024, prN},   // Mn     [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
+	{0x1E026, 0x1E02A, prN},   // Mn     [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
+	{0x1E100, 0x1E12C, prN},   // Lo    [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W
+	{0x1E130, 0x1E136, prN},   // Mn     [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D
+	{0x1E137, 0x1E13D, prN},   // Lm     [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
+	{0x1E140, 0x1E149, prN},   // Nd    [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE
+	{0x1E14E, 0x1E14E, prN},   // Lo         NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
+	{0x1E14F, 0x1E14F, prN},   // So         NYIAKENG PUACHUE HMONG CIRCLED CA
+	{0x1E290, 0x1E2AD, prN},   // Lo    [30] TOTO LETTER PA..TOTO LETTER A
+	{0x1E2AE, 0x1E2AE, prN},   // Mn         TOTO SIGN RISING TONE
+	{0x1E2C0, 0x1E2EB, prN},   // Lo    [44] WANCHO LETTER AA..WANCHO LETTER YIH
+	{0x1E2EC, 0x1E2EF, prN},   // Mn     [4] WANCHO TONE TUP..WANCHO TONE KOINI
+	{0x1E2F0, 0x1E2F9, prN},   // Nd    [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE
+	{0x1E2FF, 0x1E2FF, prN},   // Sc         WANCHO NGUN SIGN
+	{0x1E7E0, 0x1E7E6, prN},   // Lo     [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO
+	{0x1E7E8, 0x1E7EB, prN},   // Lo     [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE
+	{0x1E7ED, 0x1E7EE, prN},   // Lo     [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE
+	{0x1E7F0, 0x1E7FE, prN},   // Lo    [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE
+	{0x1E800, 0x1E8C4, prN},   // Lo   [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
+	{0x1E8C7, 0x1E8CF, prN},   // No     [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE
+	{0x1E8D0, 0x1E8D6, prN},   // Mn     [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
+	{0x1E900, 0x1E943, prN},   // L&    [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
+	{0x1E944, 0x1E94A, prN},   // Mn     [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
+	{0x1E94B, 0x1E94B, prN},   // Lm         ADLAM NASALIZATION MARK
+	{0x1E950, 0x1E959, prN},   // Nd    [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
+	{0x1E95E, 0x1E95F, prN},   // Po     [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK
+	{0x1EC71, 0x1ECAB, prN},   // No    [59] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ NUMBER PREFIXED NINE
+	{0x1ECAC, 0x1ECAC, prN},   // So         INDIC SIYAQ PLACEHOLDER
+	{0x1ECAD, 0x1ECAF, prN},   // No     [3] INDIC SIYAQ FRACTION ONE QUARTER..INDIC SIYAQ FRACTION THREE QUARTERS
+	{0x1ECB0, 0x1ECB0, prN},   // Sc         INDIC SIYAQ RUPEE MARK
+	{0x1ECB1, 0x1ECB4, prN},   // No     [4] INDIC SIYAQ NUMBER ALTERNATE ONE..INDIC SIYAQ ALTERNATE LAKH MARK
+	{0x1ED01, 0x1ED2D, prN},   // No    [45] OTTOMAN SIYAQ NUMBER ONE..OTTOMAN SIYAQ NUMBER NINETY THOUSAND
+	{0x1ED2E, 0x1ED2E, prN},   // So         OTTOMAN SIYAQ MARRATAN
+	{0x1ED2F, 0x1ED3D, prN},   // No    [15] OTTOMAN SIYAQ ALTERNATE NUMBER TWO..OTTOMAN SIYAQ FRACTION ONE SIXTH
+	{0x1EE00, 0x1EE03, prN},   // Lo     [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
+	{0x1EE05, 0x1EE1F, prN},   // Lo    [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
+	{0x1EE21, 0x1EE22, prN},   // Lo     [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
+	{0x1EE24, 0x1EE24, prN},   // Lo         ARABIC MATHEMATICAL INITIAL HEH
+	{0x1EE27, 0x1EE27, prN},   // Lo         ARABIC MATHEMATICAL INITIAL HAH
+	{0x1EE29, 0x1EE32, prN},   // Lo    [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
+	{0x1EE34, 0x1EE37, prN},   // Lo     [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
+	{0x1EE39, 0x1EE39, prN},   // Lo         ARABIC MATHEMATICAL INITIAL DAD
+	{0x1EE3B, 0x1EE3B, prN},   // Lo         ARABIC MATHEMATICAL INITIAL GHAIN
+	{0x1EE42, 0x1EE42, prN},   // Lo         ARABIC MATHEMATICAL TAILED JEEM
+	{0x1EE47, 0x1EE47, prN},   // Lo         ARABIC MATHEMATICAL TAILED HAH
+	{0x1EE49, 0x1EE49, prN},   // Lo         ARABIC MATHEMATICAL TAILED YEH
+	{0x1EE4B, 0x1EE4B, prN},   // Lo         ARABIC MATHEMATICAL TAILED LAM
+	{0x1EE4D, 0x1EE4F, prN},   // Lo     [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
+	{0x1EE51, 0x1EE52, prN},   // Lo     [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
+	{0x1EE54, 0x1EE54, prN},   // Lo         ARABIC MATHEMATICAL TAILED SHEEN
+	{0x1EE57, 0x1EE57, prN},   // Lo         ARABIC MATHEMATICAL TAILED KHAH
+	{0x1EE59, 0x1EE59, prN},   // Lo         ARABIC MATHEMATICAL TAILED DAD
+	{0x1EE5B, 0x1EE5B, prN},   // Lo         ARABIC MATHEMATICAL TAILED GHAIN
+	{0x1EE5D, 0x1EE5D, prN},   // Lo         ARABIC MATHEMATICAL TAILED DOTLESS NOON
+	{0x1EE5F, 0x1EE5F, prN},   // Lo         ARABIC MATHEMATICAL TAILED DOTLESS QAF
+	{0x1EE61, 0x1EE62, prN},   // Lo     [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
+	{0x1EE64, 0x1EE64, prN},   // Lo         ARABIC MATHEMATICAL STRETCHED HEH
+	{0x1EE67, 0x1EE6A, prN},   // Lo     [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
+	{0x1EE6C, 0x1EE72, prN},   // Lo     [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
+	{0x1EE74, 0x1EE77, prN},   // Lo     [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
+	{0x1EE79, 0x1EE7C, prN},   // Lo     [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+	{0x1EE7E, 0x1EE7E, prN},   // Lo         ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+	{0x1EE80, 0x1EE89, prN},   // Lo    [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
+	{0x1EE8B, 0x1EE9B, prN},   // Lo    [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
+	{0x1EEA1, 0x1EEA3, prN},   // Lo     [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+	{0x1EEA5, 0x1EEA9, prN},   // Lo     [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+	{0x1EEAB, 0x1EEBB, prN},   // Lo    [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+	{0x1EEF0, 0x1EEF1, prN},   // Sm     [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
+	{0x1F000, 0x1F003, prN},   // So     [4] MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND
+	{0x1F004, 0x1F004, prW},   // So         MAHJONG TILE RED DRAGON
+	{0x1F005, 0x1F02B, prN},   // So    [39] MAHJONG TILE GREEN DRAGON..MAHJONG TILE BACK
+	{0x1F030, 0x1F093, prN},   // So   [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06
+	{0x1F0A0, 0x1F0AE, prN},   // So    [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES
+	{0x1F0B1, 0x1F0BF, prN},   // So    [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER
+	{0x1F0C1, 0x1F0CE, prN},   // So    [14] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD KING OF DIAMONDS
+	{0x1F0CF, 0x1F0CF, prW},   // So         PLAYING CARD BLACK JOKER
+	{0x1F0D1, 0x1F0F5, prN},   // So    [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
+	{0x1F100, 0x1F10A, prA},   // No    [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA
+	{0x1F10B, 0x1F10C, prN},   // No     [2] DINGBAT CIRCLED SANS-SERIF DIGIT ZERO..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
+	{0x1F10D, 0x1F10F, prN},   // So     [3] CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
+	{0x1F110, 0x1F12D, prA},   // So    [30] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED CD
+	{0x1F12E, 0x1F12F, prN},   // So     [2] CIRCLED WZ..COPYLEFT SYMBOL
+	{0x1F130, 0x1F169, prA},   // So    [58] SQUARED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
+	{0x1F16A, 0x1F16F, prN},   // So     [6] RAISED MC SIGN..CIRCLED HUMAN FIGURE
+	{0x1F170, 0x1F18D, prA},   // So    [30] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED SA
+	{0x1F18E, 0x1F18E, prW},   // So         NEGATIVE SQUARED AB
+	{0x1F18F, 0x1F190, prA},   // So     [2] NEGATIVE SQUARED WC..SQUARE DJ
+	{0x1F191, 0x1F19A, prW},   // So    [10] SQUARED CL..SQUARED VS
+	{0x1F19B, 0x1F1AC, prA},   // So    [18] SQUARED THREE D..SQUARED VOD
+	{0x1F1AD, 0x1F1AD, prN},   // So         MASK WORK SYMBOL
+	{0x1F1E6, 0x1F1FF, prN},   // So    [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
+	{0x1F200, 0x1F202, prW},   // So     [3] SQUARE HIRAGANA HOKA..SQUARED KATAKANA SA
+	{0x1F210, 0x1F23B, prW},   // So    [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
+	{0x1F240, 0x1F248, prW},   // So     [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
+	{0x1F250, 0x1F251, prW},   // So     [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
+	{0x1F260, 0x1F265, prW},   // So     [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI
+	{0x1F300, 0x1F320, prW},   // So    [33] CYCLONE..SHOOTING STAR
+	{0x1F321, 0x1F32C, prN},   // So    [12] THERMOMETER..WIND BLOWING FACE
+	{0x1F32D, 0x1F335, prW},   // So     [9] HOT DOG..CACTUS
+	{0x1F336, 0x1F336, prN},   // So         HOT PEPPER
+	{0x1F337, 0x1F37C, prW},   // So    [70] TULIP..BABY BOTTLE
+	{0x1F37D, 0x1F37D, prN},   // So         FORK AND KNIFE WITH PLATE
+	{0x1F37E, 0x1F393, prW},   // So    [22] BOTTLE WITH POPPING CORK..GRADUATION CAP
+	{0x1F394, 0x1F39F, prN},   // So    [12] HEART WITH TIP ON THE LEFT..ADMISSION TICKETS
+	{0x1F3A0, 0x1F3CA, prW},   // So    [43] CAROUSEL HORSE..SWIMMER
+	{0x1F3CB, 0x1F3CE, prN},   // So     [4] WEIGHT LIFTER..RACING CAR
+	{0x1F3CF, 0x1F3D3, prW},   // So     [5] CRICKET BAT AND BALL..TABLE TENNIS PADDLE AND BALL
+	{0x1F3D4, 0x1F3DF, prN},   // So    [12] SNOW CAPPED MOUNTAIN..STADIUM
+	{0x1F3E0, 0x1F3F0, prW},   // So    [17] HOUSE BUILDING..EUROPEAN CASTLE
+	{0x1F3F1, 0x1F3F3, prN},   // So     [3] WHITE PENNANT..WAVING WHITE FLAG
+	{0x1F3F4, 0x1F3F4, prW},   // So         WAVING BLACK FLAG
+	{0x1F3F5, 0x1F3F7, prN},   // So     [3] ROSETTE..LABEL
+	{0x1F3F8, 0x1F3FA, prW},   // So     [3] BADMINTON RACQUET AND SHUTTLECOCK..AMPHORA
+	{0x1F3FB, 0x1F3FF, prW},   // Sk     [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
+	{0x1F400, 0x1F43E, prW},   // So    [63] RAT..PAW PRINTS
+	{0x1F43F, 0x1F43F, prN},   // So         CHIPMUNK
+	{0x1F440, 0x1F440, prW},   // So         EYES
+	{0x1F441, 0x1F441, prN},   // So         EYE
+	{0x1F442, 0x1F4FC, prW},   // So   [187] EAR..VIDEOCASSETTE
+	{0x1F4FD, 0x1F4FE, prN},   // So     [2] FILM PROJECTOR..PORTABLE STEREO
+	{0x1F4FF, 0x1F53D, prW},   // So    [63] PRAYER BEADS..DOWN-POINTING SMALL RED TRIANGLE
+	{0x1F53E, 0x1F54A, prN},   // So    [13] LOWER RIGHT SHADOWED WHITE CIRCLE..DOVE OF PEACE
+	{0x1F54B, 0x1F54E, prW},   // So     [4] KAABA..MENORAH WITH NINE BRANCHES
+	{0x1F54F, 0x1F54F, prN},   // So         BOWL OF HYGIEIA
+	{0x1F550, 0x1F567, prW},   // So    [24] CLOCK FACE ONE OCLOCK..CLOCK FACE TWELVE-THIRTY
+	{0x1F568, 0x1F579, prN},   // So    [18] RIGHT SPEAKER..JOYSTICK
+	{0x1F57A, 0x1F57A, prW},   // So         MAN DANCING
+	{0x1F57B, 0x1F594, prN},   // So    [26] LEFT HAND TELEPHONE RECEIVER..REVERSED VICTORY HAND
+	{0x1F595, 0x1F596, prW},   // So     [2] REVERSED HAND WITH MIDDLE FINGER EXTENDED..RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS
+	{0x1F597, 0x1F5A3, prN},   // So    [13] WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX
+	{0x1F5A4, 0x1F5A4, prW},   // So         BLACK HEART
+	{0x1F5A5, 0x1F5FA, prN},   // So    [86] DESKTOP COMPUTER..WORLD MAP
+	{0x1F5FB, 0x1F5FF, prW},   // So     [5] MOUNT FUJI..MOYAI
+	{0x1F600, 0x1F64F, prW},   // So    [80] GRINNING FACE..PERSON WITH FOLDED HANDS
+	{0x1F650, 0x1F67F, prN},   // So    [48] NORTH WEST POINTING LEAF..REVERSE CHECKER BOARD
+	{0x1F680, 0x1F6C5, prW},   // So    [70] ROCKET..LEFT LUGGAGE
+	{0x1F6C6, 0x1F6CB, prN},   // So     [6] TRIANGLE WITH ROUNDED CORNERS..COUCH AND LAMP
+	{0x1F6CC, 0x1F6CC, prW},   // So         SLEEPING ACCOMMODATION
+	{0x1F6CD, 0x1F6CF, prN},   // So     [3] SHOPPING BAGS..BED
+	{0x1F6D0, 0x1F6D2, prW},   // So     [3] PLACE OF WORSHIP..SHOPPING TROLLEY
+	{0x1F6D3, 0x1F6D4, prN},   // So     [2] STUPA..PAGODA
+	{0x1F6D5, 0x1F6D7, prW},   // So     [3] HINDU TEMPLE..ELEVATOR
+	{0x1F6DD, 0x1F6DF, prW},   // So     [3] PLAYGROUND SLIDE..RING BUOY
+	{0x1F6E0, 0x1F6EA, prN},   // So    [11] HAMMER AND WRENCH..NORTHEAST-POINTING AIRPLANE
+	{0x1F6EB, 0x1F6EC, prW},   // So     [2] AIRPLANE DEPARTURE..AIRPLANE ARRIVING
+	{0x1F6F0, 0x1F6F3, prN},   // So     [4] SATELLITE..PASSENGER SHIP
+	{0x1F6F4, 0x1F6FC, prW},   // So     [9] SCOOTER..ROLLER SKATE
+	{0x1F700, 0x1F773, prN},   // So   [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
+	{0x1F780, 0x1F7D8, prN},   // So    [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE
+	{0x1F7E0, 0x1F7EB, prW},   // So    [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE
+	{0x1F7F0, 0x1F7F0, prW},   // So         HEAVY EQUALS SIGN
+	{0x1F800, 0x1F80B, prN},   // So    [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
+	{0x1F810, 0x1F847, prN},   // So    [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW
+	{0x1F850, 0x1F859, prN},   // So    [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
+	{0x1F860, 0x1F887, prN},   // So    [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
+	{0x1F890, 0x1F8AD, prN},   // So    [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
+	{0x1F8B0, 0x1F8B1, prN},   // So     [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
+	{0x1F900, 0x1F90B, prN},   // So    [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
+	{0x1F90C, 0x1F93A, prW},   // So    [47] PINCHED FINGERS..FENCER
+	{0x1F93B, 0x1F93B, prN},   // So         MODERN PENTATHLON
+	{0x1F93C, 0x1F945, prW},   // So    [10] WRESTLERS..GOAL NET
+	{0x1F946, 0x1F946, prN},   // So         RIFLE
+	{0x1F947, 0x1F9FF, prW},   // So   [185] FIRST PLACE MEDAL..NAZAR AMULET
+	{0x1FA00, 0x1FA53, prN},   // So    [84] NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP
+	{0x1FA60, 0x1FA6D, prN},   // So    [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
+	{0x1FA70, 0x1FA74, prW},   // So     [5] BALLET SHOES..THONG SANDAL
+	{0x1FA78, 0x1FA7C, prW},   // So     [5] DROP OF BLOOD..CRUTCH
+	{0x1FA80, 0x1FA86, prW},   // So     [7] YO-YO..NESTING DOLLS
+	{0x1FA90, 0x1FAAC, prW},   // So    [29] RINGED PLANET..HAMSA
+	{0x1FAB0, 0x1FABA, prW},   // So    [11] FLY..NEST WITH EGGS
+	{0x1FAC0, 0x1FAC5, prW},   // So     [6] ANATOMICAL HEART..PERSON WITH CROWN
+	{0x1FAD0, 0x1FAD9, prW},   // So    [10] BLUEBERRIES..JAR
+	{0x1FAE0, 0x1FAE7, prW},   // So     [8] MELTING FACE..BUBBLES
+	{0x1FAF0, 0x1FAF6, prW},   // So     [7] HAND WITH INDEX FINGER AND THUMB CROSSED..HEART HANDS
+	{0x1FB00, 0x1FB92, prN},   // So   [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
+	{0x1FB94, 0x1FBCA, prN},   // So    [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON
+	{0x1FBF0, 0x1FBF9, prN},   // Nd    [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
+	{0x20000, 0x2A6DF, prW},   // Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF
+	{0x2A6E0, 0x2A6FF, prW},   // Cn    [32] <reserved-2A6E0>..<reserved-2A6FF>
+	{0x2A700, 0x2B738, prW},   // Lo  [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738
+	{0x2B739, 0x2B73F, prW},   // Cn     [7] <reserved-2B739>..<reserved-2B73F>
+	{0x2B740, 0x2B81D, prW},   // Lo   [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+	{0x2B81E, 0x2B81F, prW},   // Cn     [2] <reserved-2B81E>..<reserved-2B81F>
+	{0x2B820, 0x2CEA1, prW},   // Lo  [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
+	{0x2CEA2, 0x2CEAF, prW},   // Cn    [14] <reserved-2CEA2>..<reserved-2CEAF>
+	{0x2CEB0, 0x2EBE0, prW},   // Lo  [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
+	{0x2EBE1, 0x2F7FF, prW},   // Cn  [3103] <reserved-2EBE1>..<reserved-2F7FF>
+	{0x2F800, 0x2FA1D, prW},   // Lo   [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+	{0x2FA1E, 0x2FA1F, prW},   // Cn     [2] <reserved-2FA1E>..<reserved-2FA1F>
+	{0x2FA20, 0x2FFFD, prW},   // Cn  [1502] <reserved-2FA20>..<reserved-2FFFD>
+	{0x30000, 0x3134A, prW},   // Lo  [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
+	{0x3134B, 0x3FFFD, prW},   // Cn [60595] <reserved-3134B>..<reserved-3FFFD>
+	{0xE0001, 0xE0001, prN},   // Cf         LANGUAGE TAG
+	{0xE0020, 0xE007F, prN},   // Cf    [96] TAG SPACE..CANCEL TAG
+	{0xE0100, 0xE01EF, prA},   // Mn   [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+	{0xF0000, 0xFFFFD, prA},   // Co [65534] <private-use-F0000>..<private-use-FFFFD>
+	{0x100000, 0x10FFFD, prA}, // Co [65534] <private-use-100000>..<private-use-10FFFD>
+}
diff --git a/vendor/github.com/rivo/uniseg/emojipresentation.go b/vendor/github.com/rivo/uniseg/emojipresentation.go
new file mode 100644
index 0000000..fd0f745
--- /dev/null
+++ b/vendor/github.com/rivo/uniseg/emojipresentation.go
@@ -0,0 +1,285 @@
+package uniseg
+
+// Code generated via go generate from gen_properties.go. DO NOT EDIT.
+
+// emojiPresentation are taken from
+//
+// and
+// https://unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt
+// ("Extended_Pictographic" only)
+// on September 10, 2022. See https://www.unicode.org/license.html for the Unicode
+// license agreement.
+var emojiPresentation = [][3]int{
+	{0x231A, 0x231B, prEmojiPresentation},   // E0.6   [2] (⌚..⌛)    watch..hourglass done
+	{0x23E9, 0x23EC, prEmojiPresentation},   // E0.6   [4] (⏩..⏬)    fast-forward button..fast down button
+	{0x23F0, 0x23F0, prEmojiPresentation},   // E0.6   [1] (⏰)       alarm clock
+	{0x23F3, 0x23F3, prEmojiPresentation},   // E0.6   [1] (⏳)       hourglass not done
+	{0x25FD, 0x25FE, prEmojiPresentation},   // E0.6   [2] (◽..◾)    white medium-small square..black medium-small square
+	{0x2614, 0x2615, prEmojiPresentation},   // E0.6   [2] (☔..☕)    umbrella with rain drops..hot beverage
+	{0x2648, 0x2653, prEmojiPresentation},   // E0.6  [12] (♈..♓)    Aries..Pisces
+	{0x267F, 0x267F, prEmojiPresentation},   // E0.6   [1] (♿)       wheelchair symbol
+	{0x2693, 0x2693, prEmojiPresentation},   // E0.6   [1] (⚓)       anchor
+	{0x26A1, 0x26A1, prEmojiPresentation},   // E0.6   [1] (⚡)       high voltage
+	{0x26AA, 0x26AB, prEmojiPresentation},   // E0.6   [2] (⚪..⚫)    white circle..black circle
+	{0x26BD, 0x26BE, prEmojiPresentation},   // E0.6   [2] (⚽..⚾)    soccer ball..baseball
+	{0x26C4, 0x26C5, prEmojiPresentation},   // E0.6   [2] (⛄..⛅)    snowman without snow..sun behind cloud
+	{0x26CE, 0x26CE, prEmojiPresentation},   // E0.6   [1] (⛎)       Ophiuchus
+	{0x26D4, 0x26D4, prEmojiPresentation},   // E0.6   [1] (⛔)       no entry
+	{0x26EA, 0x26EA, prEmojiPresentation},   // E0.6   [1] (⛪)       church
+	{0x26F2, 0x26F3, prEmojiPresentation},   // E0.6   [2] (⛲..⛳)    fountain..flag in hole
+	{0x26F5, 0x26F5, prEmojiPresentation},   // E0.6   [1] (⛵)       sailboat
+	{0x26FA, 0x26FA, prEmojiPresentation},   // E0.6   [1] (⛺)       tent
+	{0x26FD, 0x26FD, prEmojiPresentation},   // E0.6   [1] (⛽)       fuel pump
+	{0x2705, 0x2705, prEmojiPresentation},   // E0.6   [1] (✅)       check mark button
+	{0x270A, 0x270B, prEmojiPresentation},   // E0.6   [2] (✊..✋)    raised fist..raised hand
+	{0x2728, 0x2728, prEmojiPresentation},   // E0.6   [1] (✨)       sparkles
+	{0x274C, 0x274C, prEmojiPresentation},   // E0.6   [1] (❌)       cross mark
+	{0x274E, 0x274E, prEmojiPresentation},   // E0.6   [1] (❎)       cross mark button
+	{0x2753, 0x2755, prEmojiPresentation},   // E0.6   [3] (❓..❕)    red question mark..white exclamation mark
+	{0x2757, 0x2757, prEmojiPresentation},   // E0.6   [1] (❗)       red exclamation mark
+	{0x2795, 0x2797, prEmojiPresentation},   // E0.6   [3] (➕..➗)    plus..divide
+	{0x27B0, 0x27B0, prEmojiPresentation},   // E0.6   [1] (➰)       curly loop
+	{0x27BF, 0x27BF, prEmojiPresentation},   // E1.0   [1] (➿)       double curly loop
+	{0x2B1B, 0x2B1C, prEmojiPresentation},   // E0.6   [2] (⬛..⬜)    black large square..white large square
+	{0x2B50, 0x2B50, prEmojiPresentation},   // E0.6   [1] (⭐)       star
+	{0x2B55, 0x2B55, prEmojiPresentation},   // E0.6   [1] (⭕)       hollow red circle
+	{0x1F004, 0x1F004, prEmojiPresentation}, // E0.6   [1] (🀄)       mahjong red dragon
+	{0x1F0CF, 0x1F0CF, prEmojiPresentation}, // E0.6   [1] (🃏)       joker
+	{0x1F18E, 0x1F18E, prEmojiPresentation}, // E0.6   [1] (🆎)       AB button (blood type)
+	{0x1F191, 0x1F19A, prEmojiPresentation}, // E0.6  [10] (🆑..🆚)    CL button..VS button
+	{0x1F1E6, 0x1F1FF, prEmojiPresentation}, // E0.0  [26] (🇦..🇿)    regional indicator symbol letter a..regional indicator symbol letter z
+	{0x1F201, 0x1F201, prEmojiPresentation}, // E0.6   [1] (🈁)       Japanese “here” button
+	{0x1F21A, 0x1F21A, prEmojiPresentation}, // E0.6   [1] (🈚)       Japanese “free of charge” button
+	{0x1F22F, 0x1F22F, prEmojiPresentation}, // E0.6   [1] (🈯)       Japanese “reserved” button
+	{0x1F232, 0x1F236, prEmojiPresentation}, // E0.6   [5] (🈲..🈶)    Japanese “prohibited” button..Japanese “not free of charge” button
+	{0x1F238, 0x1F23A, prEmojiPresentation}, // E0.6   [3] (🈸..🈺)    Japanese “application” button..Japanese “open for business” button
+	{0x1F250, 0x1F251, prEmojiPresentation}, // E0.6   [2] (🉐..🉑)    Japanese “bargain” button..Japanese “acceptable” button
+	{0x1F300, 0x1F30C, prEmojiPresentation}, // E0.6  [13] (🌀..🌌)    cyclone..milky way
+	{0x1F30D, 0x1F30E, prEmojiPresentation}, // E0.7   [2] (🌍..🌎)    globe showing Europe-Africa..globe showing Americas
+	{0x1F30F, 0x1F30F, prEmojiPresentation}, // E0.6   [1] (🌏)       globe showing Asia-Australia
+	{0x1F310, 0x1F310, prEmojiPresentation}, // E1.0   [1] (🌐)       globe with meridians
+	{0x1F311, 0x1F311, prEmojiPresentation}, // E0.6   [1] (🌑)       new moon
+	{0x1F312, 0x1F312, prEmojiPresentation}, // E1.0   [1] (🌒)       waxing crescent moon
+	{0x1F313, 0x1F315, prEmojiPresentation}, // E0.6   [3] (🌓..🌕)    first quarter moon..full moon
+	{0x1F316, 0x1F318, prEmojiPresentation}, // E1.0   [3] (🌖..🌘)    waning gibbous moon..waning crescent moon
+	{0x1F319, 0x1F319, prEmojiPresentation}, // E0.6   [1] (🌙)       crescent moon
+	{0x1F31A, 0x1F31A, prEmojiPresentation}, // E1.0   [1] (🌚)       new moon face
+	{0x1F31B, 0x1F31B, prEmojiPresentation}, // E0.6   [1] (🌛)       first quarter moon face
+	{0x1F31C, 0x1F31C, prEmojiPresentation}, // E0.7   [1] (🌜)       last quarter moon face
+	{0x1F31D, 0x1F31E, prEmojiPresentation}, // E1.0   [2] (🌝..🌞)    full moon face..sun with face
+	{0x1F31F, 0x1F320, prEmojiPresentation}, // E0.6   [2] (🌟..🌠)    glowing star..shooting star
+	{0x1F32D, 0x1F32F, prEmojiPresentation}, // E1.0   [3] (🌭..🌯)    hot dog..burrito
+	{0x1F330, 0x1F331, prEmojiPresentation}, // E0.6   [2] (🌰..🌱)    chestnut..seedling
+	{0x1F332, 0x1F333, prEmojiPresentation}, // E1.0   [2] (🌲..🌳)    evergreen tree..deciduous tree
+	{0x1F334, 0x1F335, prEmojiPresentation}, // E0.6   [2] (🌴..🌵)    palm tree..cactus
+	{0x1F337, 0x1F34A, prEmojiPresentation}, // E0.6  [20] (🌷..🍊)    tulip..tangerine
+	{0x1F34B, 0x1F34B, prEmojiPresentation}, // E1.0   [1] (🍋)       lemon
+	{0x1F34C, 0x1F34F, prEmojiPresentation}, // E0.6   [4] (🍌..🍏)    banana..green apple
+	{0x1F350, 0x1F350, prEmojiPresentation}, // E1.0   [1] (🍐)       pear
+	{0x1F351, 0x1F37B, prEmojiPresentation}, // E0.6  [43] (🍑..🍻)    peach..clinking beer mugs
+	{0x1F37C, 0x1F37C, prEmojiPresentation}, // E1.0   [1] (🍼)       baby bottle
+	{0x1F37E, 0x1F37F, prEmojiPresentation}, // E1.0   [2] (🍾..🍿)    bottle with popping cork..popcorn
+	{0x1F380, 0x1F393, prEmojiPresentation}, // E0.6  [20] (🎀..🎓)    ribbon..graduation cap
+	{0x1F3A0, 0x1F3C4, prEmojiPresentation}, // E0.6  [37] (🎠..🏄)    carousel horse..person surfing
+	{0x1F3C5, 0x1F3C5, prEmojiPresentation}, // E1.0   [1] (🏅)       sports medal
+	{0x1F3C6, 0x1F3C6, prEmojiPresentation}, // E0.6   [1] (🏆)       trophy
+	{0x1F3C7, 0x1F3C7, prEmojiPresentation}, // E1.0   [1] (🏇)       horse racing
+	{0x1F3C8, 0x1F3C8, prEmojiPresentation}, // E0.6   [1] (🏈)       american football
+	{0x1F3C9, 0x1F3C9, prEmojiPresentation}, // E1.0   [1] (🏉)       rugby football
+	{0x1F3CA, 0x1F3CA, prEmojiPresentation}, // E0.6   [1] (🏊)       person swimming
+	{0x1F3CF, 0x1F3D3, prEmojiPresentation}, // E1.0   [5] (🏏..🏓)    cricket game..ping pong
+	{0x1F3E0, 0x1F3E3, prEmojiPresentation}, // E0.6   [4] (🏠..🏣)    house..Japanese post office
+	{0x1F3E4, 0x1F3E4, prEmojiPresentation}, // E1.0   [1] (🏤)       post office
+	{0x1F3E5, 0x1F3F0, prEmojiPresentation}, // E0.6  [12] (🏥..🏰)    hospital..castle
+	{0x1F3F4, 0x1F3F4, prEmojiPresentation}, // E1.0   [1] (🏴)       black flag
+	{0x1F3F8, 0x1F407, prEmojiPresentation}, // E1.0  [16] (🏸..🐇)    badminton..rabbit
+	{0x1F408, 0x1F408, prEmojiPresentation}, // E0.7   [1] (🐈)       cat
+	{0x1F409, 0x1F40B, prEmojiPresentation}, // E1.0   [3] (🐉..🐋)    dragon..whale
+	{0x1F40C, 0x1F40E, prEmojiPresentation}, // E0.6   [3] (🐌..🐎)    snail..horse
+	{0x1F40F, 0x1F410, prEmojiPresentation}, // E1.0   [2] (🐏..🐐)    ram..goat
+	{0x1F411, 0x1F412, prEmojiPresentation}, // E0.6   [2] (🐑..🐒)    ewe..monkey
+	{0x1F413, 0x1F413, prEmojiPresentation}, // E1.0   [1] (🐓)       rooster
+	{0x1F414, 0x1F414, prEmojiPresentation}, // E0.6   [1] (🐔)       chicken
+	{0x1F415, 0x1F415, prEmojiPresentation}, // E0.7   [1] (🐕)       dog
+	{0x1F416, 0x1F416, prEmojiPresentation}, // E1.0   [1] (🐖)       pig
+	{0x1F417, 0x1F429, prEmojiPresentation}, // E0.6  [19] (🐗..🐩)    boar..poodle
+	{0x1F42A, 0x1F42A, prEmojiPresentation}, // E1.0   [1] (🐪)       camel
+	{0x1F42B, 0x1F43E, prEmojiPresentation}, // E0.6  [20] (🐫..🐾)    two-hump camel..paw prints
+	{0x1F440, 0x1F440, prEmojiPresentation}, // E0.6   [1] (👀)       eyes
+	{0x1F442, 0x1F464, prEmojiPresentation}, // E0.6  [35] (👂..👤)    ear..bust in silhouette
+	{0x1F465, 0x1F465, prEmojiPresentation}, // E1.0   [1] (👥)       busts in silhouette
+	{0x1F466, 0x1F46B, prEmojiPresentation}, // E0.6   [6] (👦..👫)    boy..woman and man holding hands
+	{0x1F46C, 0x1F46D, prEmojiPresentation}, // E1.0   [2] (👬..👭)    men holding hands..women holding hands
+	{0x1F46E, 0x1F4AC, prEmojiPresentation}, // E0.6  [63] (👮..💬)    police officer..speech balloon
+	{0x1F4AD, 0x1F4AD, prEmojiPresentation}, // E1.0   [1] (💭)       thought balloon
+	{0x1F4AE, 0x1F4B5, prEmojiPresentation}, // E0.6   [8] (💮..💵)    white flower..dollar banknote
+	{0x1F4B6, 0x1F4B7, prEmojiPresentation}, // E1.0   [2] (💶..💷)    euro banknote..pound banknote
+	{0x1F4B8, 0x1F4EB, prEmojiPresentation}, // E0.6  [52] (💸..📫)    money with wings..closed mailbox with raised flag
+	{0x1F4EC, 0x1F4ED, prEmojiPresentation}, // E0.7   [2] (📬..📭)    open mailbox with raised flag..open mailbox with lowered flag
+	{0x1F4EE, 0x1F4EE, prEmojiPresentation}, // E0.6   [1] (📮)       postbox
+	{0x1F4EF, 0x1F4EF, prEmojiPresentation}, // E1.0   [1] (📯)       postal horn
+	{0x1F4F0, 0x1F4F4, prEmojiPresentation}, // E0.6   [5] (📰..📴)    newspaper..mobile phone off
+	{0x1F4F5, 0x1F4F5, prEmojiPresentation}, // E1.0   [1] (📵)       no mobile phones
+	{0x1F4F6, 0x1F4F7, prEmojiPresentation}, // E0.6   [2] (📶..📷)    antenna bars..camera
+	{0x1F4F8, 0x1F4F8, prEmojiPresentation}, // E1.0   [1] (📸)       camera with flash
+	{0x1F4F9, 0x1F4FC, prEmojiPresentation}, // E0.6   [4] (📹..📼)    video camera..videocassette
+	{0x1F4FF, 0x1F502, prEmojiPresentation}, // E1.0   [4] (📿..🔂)    prayer beads..repeat single button
+	{0x1F503, 0x1F503, prEmojiPresentation}, // E0.6   [1] (🔃)       clockwise vertical arrows
+	{0x1F504, 0x1F507, prEmojiPresentation}, // E1.0   [4] (🔄..🔇)    counterclockwise arrows button..muted speaker
+	{0x1F508, 0x1F508, prEmojiPresentation}, // E0.7   [1] (🔈)       speaker low volume
+	{0x1F509, 0x1F509, prEmojiPresentation}, // E1.0   [1] (🔉)       speaker medium volume
+	{0x1F50A, 0x1F514, prEmojiPresentation}, // E0.6  [11] (🔊..🔔)    speaker high volume..bell
+	{0x1F515, 0x1F515, prEmojiPresentation}, // E1.0   [1] (🔕)       bell with slash
+	{0x1F516, 0x1F52B, prEmojiPresentation}, // E0.6  [22] (🔖..🔫)    bookmark..water pistol
+	{0x1F52C, 0x1F52D, prEmojiPresentation}, // E1.0   [2] (🔬..🔭)    microscope..telescope
+	{0x1F52E, 0x1F53D, prEmojiPresentation}, // E0.6  [16] (🔮..🔽)    crystal ball..downwards button
+	{0x1F54B, 0x1F54E, prEmojiPresentation}, // E1.0   [4] (🕋..🕎)    kaaba..menorah
+	{0x1F550, 0x1F55B, prEmojiPresentation}, // E0.6  [12] (🕐..🕛)    one o’clock..twelve o’clock
+	{0x1F55C, 0x1F567, prEmojiPresentation}, // E0.7  [12] (🕜..🕧)    one-thirty..twelve-thirty
+	{0x1F57A, 0x1F57A, prEmojiPresentation}, // E3.0   [1] (🕺)       man dancing
+	{0x1F595, 0x1F596, prEmojiPresentation}, // E1.0   [2] (🖕..🖖)    middle finger..vulcan salute
+	{0x1F5A4, 0x1F5A4, prEmojiPresentation}, // E3.0   [1] (🖤)       black heart
+	{0x1F5FB, 0x1F5FF, prEmojiPresentation}, // E0.6   [5] (🗻..🗿)    mount fuji..moai
+	{0x1F600, 0x1F600, prEmojiPresentation}, // E1.0   [1] (😀)       grinning face
+	{0x1F601, 0x1F606, prEmojiPresentation}, // E0.6   [6] (😁..😆)    beaming face with smiling eyes..grinning squinting face
+	{0x1F607, 0x1F608, prEmojiPresentation}, // E1.0   [2] (😇..😈)    smiling face with halo..smiling face with horns
+	{0x1F609, 0x1F60D, prEmojiPresentation}, // E0.6   [5] (😉..😍)    winking face..smiling face with heart-eyes
+	{0x1F60E, 0x1F60E, prEmojiPresentation}, // E1.0   [1] (😎)       smiling face with sunglasses
+	{0x1F60F, 0x1F60F, prEmojiPresentation}, // E0.6   [1] (😏)       smirking face
+	{0x1F610, 0x1F610, prEmojiPresentation}, // E0.7   [1] (😐)       neutral face
+	{0x1F611, 0x1F611, prEmojiPresentation}, // E1.0   [1] (😑)       expressionless face
+	{0x1F612, 0x1F614, prEmojiPresentation}, // E0.6   [3] (😒..😔)    unamused face..pensive face
+	{0x1F615, 0x1F615, prEmojiPresentation}, // E1.0   [1] (😕)       confused face
+	{0x1F616, 0x1F616, prEmojiPresentation}, // E0.6   [1] (😖)       confounded face
+	{0x1F617, 0x1F617, prEmojiPresentation}, // E1.0   [1] (😗)       kissing face
+	{0x1F618, 0x1F618, prEmojiPresentation}, // E0.6   [1] (😘)       face blowing a kiss
+	{0x1F619, 0x1F619, prEmojiPresentation}, // E1.0   [1] (😙)       kissing face with smiling eyes
+	{0x1F61A, 0x1F61A, prEmojiPresentation}, // E0.6   [1] (😚)       kissing face with closed eyes
+	{0x1F61B, 0x1F61B, prEmojiPresentation}, // E1.0   [1] (😛)       face with tongue
+	{0x1F61C, 0x1F61E, prEmojiPresentation}, // E0.6   [3] (😜..😞)    winking face with tongue..disappointed face
+	{0x1F61F, 0x1F61F, prEmojiPresentation}, // E1.0   [1] (😟)       worried face
+	{0x1F620, 0x1F625, prEmojiPresentation}, // E0.6   [6] (😠..😥)    angry face..sad but relieved face
+	{0x1F626, 0x1F627, prEmojiPresentation}, // E1.0   [2] (😦..😧)    frowning face with open mouth..anguished face
+	{0x1F628, 0x1F62B, prEmojiPresentation}, // E0.6   [4] (😨..😫)    fearful face..tired face
+	{0x1F62C, 0x1F62C, prEmojiPresentation}, // E1.0   [1] (😬)       grimacing face
+	{0x1F62D, 0x1F62D, prEmojiPresentation}, // E0.6   [1] (😭)       loudly crying face
+	{0x1F62E, 0x1F62F, prEmojiPresentation}, // E1.0   [2] (😮..😯)    face with open mouth..hushed face
+	{0x1F630, 0x1F633, prEmojiPresentation}, // E0.6   [4] (😰..😳)    anxious face with sweat..flushed face
+	{0x1F634, 0x1F634, prEmojiPresentation}, // E1.0   [1] (😴)       sleeping face
+	{0x1F635, 0x1F635, prEmojiPresentation}, // E0.6   [1] (😵)       face with crossed-out eyes
+	{0x1F636, 0x1F636, prEmojiPresentation}, // E1.0   [1] (😶)       face without mouth
+	{0x1F637, 0x1F640, prEmojiPresentation}, // E0.6  [10] (😷..🙀)    face with medical mask..weary cat
+	{0x1F641, 0x1F644, prEmojiPresentation}, // E1.0   [4] (🙁..🙄)    slightly frowning face..face with rolling eyes
+	{0x1F645, 0x1F64F, prEmojiPresentation}, // E0.6  [11] (🙅..🙏)    person gesturing NO..folded hands
+	{0x1F680, 0x1F680, prEmojiPresentation}, // E0.6   [1] (🚀)       rocket
+	{0x1F681, 0x1F682, prEmojiPresentation}, // E1.0   [2] (🚁..🚂)    helicopter..locomotive
+	{0x1F683, 0x1F685, prEmojiPresentation}, // E0.6   [3] (🚃..🚅)    railway car..bullet train
+	{0x1F686, 0x1F686, prEmojiPresentation}, // E1.0   [1] (🚆)       train
+	{0x1F687, 0x1F687, prEmojiPresentation}, // E0.6   [1] (🚇)       metro
+	{0x1F688, 0x1F688, prEmojiPresentation}, // E1.0   [1] (🚈)       light rail
+	{0x1F689, 0x1F689, prEmojiPresentation}, // E0.6   [1] (🚉)       station
+	{0x1F68A, 0x1F68B, prEmojiPresentation}, // E1.0   [2] (🚊..🚋)    tram..tram car
+	{0x1F68C, 0x1F68C, prEmojiPresentation}, // E0.6   [1] (🚌)       bus
+	{0x1F68D, 0x1F68D, prEmojiPresentation}, // E0.7   [1] (🚍)       oncoming bus
+	{0x1F68E, 0x1F68E, prEmojiPresentation}, // E1.0   [1] (🚎)       trolleybus
+	{0x1F68F, 0x1F68F, prEmojiPresentation}, // E0.6   [1] (🚏)       bus stop
+	{0x1F690, 0x1F690, prEmojiPresentation}, // E1.0   [1] (🚐)       minibus
+	{0x1F691, 0x1F693, prEmojiPresentation}, // E0.6   [3] (🚑..🚓)    ambulance..police car
+	{0x1F694, 0x1F694, prEmojiPresentation}, // E0.7   [1] (🚔)       oncoming police car
+	{0x1F695, 0x1F695, prEmojiPresentation}, // E0.6   [1] (🚕)       taxi
+	{0x1F696, 0x1F696, prEmojiPresentation}, // E1.0   [1] (🚖)       oncoming taxi
+	{0x1F697, 0x1F697, prEmojiPresentation}, // E0.6   [1] (🚗)       automobile
+	{0x1F698, 0x1F698, prEmojiPresentation}, // E0.7   [1] (🚘)       oncoming automobile
+	{0x1F699, 0x1F69A, prEmojiPresentation}, // E0.6   [2] (🚙..🚚)    sport utility vehicle..delivery truck
+	{0x1F69B, 0x1F6A1, prEmojiPresentation}, // E1.0   [7] (🚛..🚡)    articulated lorry..aerial tramway
+	{0x1F6A2, 0x1F6A2, prEmojiPresentation}, // E0.6   [1] (🚢)       ship
+	{0x1F6A3, 0x1F6A3, prEmojiPresentation}, // E1.0   [1] (🚣)       person rowing boat
+	{0x1F6A4, 0x1F6A5, prEmojiPresentation}, // E0.6   [2] (🚤..🚥)    speedboat..horizontal traffic light
+	{0x1F6A6, 0x1F6A6, prEmojiPresentation}, // E1.0   [1] (🚦)       vertical traffic light
+	{0x1F6A7, 0x1F6AD, prEmojiPresentation}, // E0.6   [7] (🚧..🚭)    construction..no smoking
+	{0x1F6AE, 0x1F6B1, prEmojiPresentation}, // E1.0   [4] (🚮..🚱)    litter in bin sign..non-potable water
+	{0x1F6B2, 0x1F6B2, prEmojiPresentation}, // E0.6   [1] (🚲)       bicycle
+	{0x1F6B3, 0x1F6B5, prEmojiPresentation}, // E1.0   [3] (🚳..🚵)    no bicycles..person mountain biking
+	{0x1F6B6, 0x1F6B6, prEmojiPresentation}, // E0.6   [1] (🚶)       person walking
+	{0x1F6B7, 0x1F6B8, prEmojiPresentation}, // E1.0   [2] (🚷..🚸)    no pedestrians..children crossing
+	{0x1F6B9, 0x1F6BE, prEmojiPresentation}, // E0.6   [6] (🚹..🚾)    men’s room..water closet
+	{0x1F6BF, 0x1F6BF, prEmojiPresentation}, // E1.0   [1] (🚿)       shower
+	{0x1F6C0, 0x1F6C0, prEmojiPresentation}, // E0.6   [1] (🛀)       person taking bath
+	{0x1F6C1, 0x1F6C5, prEmojiPresentation}, // E1.0   [5] (🛁..🛅)    bathtub..left luggage
+	{0x1F6CC, 0x1F6CC, prEmojiPresentation}, // E1.0   [1] (🛌)       person in bed
+	{0x1F6D0, 0x1F6D0, prEmojiPresentation}, // E1.0   [1] (🛐)       place of worship
+	{0x1F6D1, 0x1F6D2, prEmojiPresentation}, // E3.0   [2] (🛑..🛒)    stop sign..shopping cart
+	{0x1F6D5, 0x1F6D5, prEmojiPresentation}, // E12.0  [1] (🛕)       hindu temple
+	{0x1F6D6, 0x1F6D7, prEmojiPresentation}, // E13.0  [2] (🛖..🛗)    hut..elevator
+	{0x1F6DD, 0x1F6DF, prEmojiPresentation}, // E14.0  [3] (🛝..🛟)    playground slide..ring buoy
+	{0x1F6EB, 0x1F6EC, prEmojiPresentation}, // E1.0   [2] (🛫..🛬)    airplane departure..airplane arrival
+	{0x1F6F4, 0x1F6F6, prEmojiPresentation}, // E3.0   [3] (🛴..🛶)    kick scooter..canoe
+	{0x1F6F7, 0x1F6F8, prEmojiPresentation}, // E5.0   [2] (🛷..🛸)    sled..flying saucer
+	{0x1F6F9, 0x1F6F9, prEmojiPresentation}, // E11.0  [1] (🛹)       skateboard
+	{0x1F6FA, 0x1F6FA, prEmojiPresentation}, // E12.0  [1] (🛺)       auto rickshaw
+	{0x1F6FB, 0x1F6FC, prEmojiPresentation}, // E13.0  [2] (🛻..🛼)    pickup truck..roller skate
+	{0x1F7E0, 0x1F7EB, prEmojiPresentation}, // E12.0 [12] (🟠..🟫)    orange circle..brown square
+	{0x1F7F0, 0x1F7F0, prEmojiPresentation}, // E14.0  [1] (🟰)       heavy equals sign
+	{0x1F90C, 0x1F90C, prEmojiPresentation}, // E13.0  [1] (🤌)       pinched fingers
+	{0x1F90D, 0x1F90F, prEmojiPresentation}, // E12.0  [3] (🤍..🤏)    white heart..pinching hand
+	{0x1F910, 0x1F918, prEmojiPresentation}, // E1.0   [9] (🤐..🤘)    zipper-mouth face..sign of the horns
+	{0x1F919, 0x1F91E, prEmojiPresentation}, // E3.0   [6] (🤙..🤞)    call me hand..crossed fingers
+	{0x1F91F, 0x1F91F, prEmojiPresentation}, // E5.0   [1] (🤟)       love-you gesture
+	{0x1F920, 0x1F927, prEmojiPresentation}, // E3.0   [8] (🤠..🤧)    cowboy hat face..sneezing face
+	{0x1F928, 0x1F92F, prEmojiPresentation}, // E5.0   [8] (🤨..🤯)    face with raised eyebrow..exploding head
+	{0x1F930, 0x1F930, prEmojiPresentation}, // E3.0   [1] (🤰)       pregnant woman
+	{0x1F931, 0x1F932, prEmojiPresentation}, // E5.0   [2] (🤱..🤲)    breast-feeding..palms up together
+	{0x1F933, 0x1F93A, prEmojiPresentation}, // E3.0   [8] (🤳..🤺)    selfie..person fencing
+	{0x1F93C, 0x1F93E, prEmojiPresentation}, // E3.0   [3] (🤼..🤾)    people wrestling..person playing handball
+	{0x1F93F, 0x1F93F, prEmojiPresentation}, // E12.0  [1] (🤿)       diving mask
+	{0x1F940, 0x1F945, prEmojiPresentation}, // E3.0   [6] (🥀..🥅)    wilted flower..goal net
+	{0x1F947, 0x1F94B, prEmojiPresentation}, // E3.0   [5] (🥇..🥋)    1st place medal..martial arts uniform
+	{0x1F94C, 0x1F94C, prEmojiPresentation}, // E5.0   [1] (🥌)       curling stone
+	{0x1F94D, 0x1F94F, prEmojiPresentation}, // E11.0  [3] (🥍..🥏)    lacrosse..flying disc
+	{0x1F950, 0x1F95E, prEmojiPresentation}, // E3.0  [15] (🥐..🥞)    croissant..pancakes
+	{0x1F95F, 0x1F96B, prEmojiPresentation}, // E5.0  [13] (🥟..🥫)    dumpling..canned food
+	{0x1F96C, 0x1F970, prEmojiPresentation}, // E11.0  [5] (🥬..🥰)    leafy green..smiling face with hearts
+	{0x1F971, 0x1F971, prEmojiPresentation}, // E12.0  [1] (🥱)       yawning face
+	{0x1F972, 0x1F972, prEmojiPresentation}, // E13.0  [1] (🥲)       smiling face with tear
+	{0x1F973, 0x1F976, prEmojiPresentation}, // E11.0  [4] (🥳..🥶)    partying face..cold face
+	{0x1F977, 0x1F978, prEmojiPresentation}, // E13.0  [2] (🥷..🥸)    ninja..disguised face
+	{0x1F979, 0x1F979, prEmojiPresentation}, // E14.0  [1] (🥹)       face holding back tears
+	{0x1F97A, 0x1F97A, prEmojiPresentation}, // E11.0  [1] (🥺)       pleading face
+	{0x1F97B, 0x1F97B, prEmojiPresentation}, // E12.0  [1] (🥻)       sari
+	{0x1F97C, 0x1F97F, prEmojiPresentation}, // E11.0  [4] (🥼..🥿)    lab coat..flat shoe
+	{0x1F980, 0x1F984, prEmojiPresentation}, // E1.0   [5] (🦀..🦄)    crab..unicorn
+	{0x1F985, 0x1F991, prEmojiPresentation}, // E3.0  [13] (🦅..🦑)    eagle..squid
+	{0x1F992, 0x1F997, prEmojiPresentation}, // E5.0   [6] (🦒..🦗)    giraffe..cricket
+	{0x1F998, 0x1F9A2, prEmojiPresentation}, // E11.0 [11] (🦘..🦢)    kangaroo..swan
+	{0x1F9A3, 0x1F9A4, prEmojiPresentation}, // E13.0  [2] (🦣..🦤)    mammoth..dodo
+	{0x1F9A5, 0x1F9AA, prEmojiPresentation}, // E12.0  [6] (🦥..🦪)    sloth..oyster
+	{0x1F9AB, 0x1F9AD, prEmojiPresentation}, // E13.0  [3] (🦫..🦭)    beaver..seal
+	{0x1F9AE, 0x1F9AF, prEmojiPresentation}, // E12.0  [2] (🦮..🦯)    guide dog..white cane
+	{0x1F9B0, 0x1F9B9, prEmojiPresentation}, // E11.0 [10] (🦰..🦹)    red hair..supervillain
+	{0x1F9BA, 0x1F9BF, prEmojiPresentation}, // E12.0  [6] (🦺..🦿)    safety vest..mechanical leg
+	{0x1F9C0, 0x1F9C0, prEmojiPresentation}, // E1.0   [1] (🧀)       cheese wedge
+	{0x1F9C1, 0x1F9C2, prEmojiPresentation}, // E11.0  [2] (🧁..🧂)    cupcake..salt
+	{0x1F9C3, 0x1F9CA, prEmojiPresentation}, // E12.0  [8] (🧃..🧊)    beverage box..ice
+	{0x1F9CB, 0x1F9CB, prEmojiPresentation}, // E13.0  [1] (🧋)       bubble tea
+	{0x1F9CC, 0x1F9CC, prEmojiPresentation}, // E14.0  [1] (🧌)       troll
+	{0x1F9CD, 0x1F9CF, prEmojiPresentation}, // E12.0  [3] (🧍..🧏)    person standing..deaf person
+	{0x1F9D0, 0x1F9E6, prEmojiPresentation}, // E5.0  [23] (🧐..🧦)    face with monocle..socks
+	{0x1F9E7, 0x1F9FF, prEmojiPresentation}, // E11.0 [25] (🧧..🧿)    red envelope..nazar amulet
+	{0x1FA70, 0x1FA73, prEmojiPresentation}, // E12.0  [4] (🩰..🩳)    ballet shoes..shorts
+	{0x1FA74, 0x1FA74, prEmojiPresentation}, // E13.0  [1] (🩴)       thong sandal
+	{0x1FA78, 0x1FA7A, prEmojiPresentation}, // E12.0  [3] (🩸..🩺)    drop of blood..stethoscope
+	{0x1FA7B, 0x1FA7C, prEmojiPresentation}, // E14.0  [2] (🩻..🩼)    x-ray..crutch
+	{0x1FA80, 0x1FA82, prEmojiPresentation}, // E12.0  [3] (🪀..🪂)    yo-yo..parachute
+	{0x1FA83, 0x1FA86, prEmojiPresentation}, // E13.0  [4] (🪃..🪆)    boomerang..nesting dolls
+	{0x1FA90, 0x1FA95, prEmojiPresentation}, // E12.0  [6] (🪐..🪕)    ringed planet..banjo
+	{0x1FA96, 0x1FAA8, prEmojiPresentation}, // E13.0 [19] (🪖..🪨)    military helmet..rock
+	{0x1FAA9, 0x1FAAC, prEmojiPresentation}, // E14.0  [4] (🪩..🪬)    mirror ball..hamsa
+	{0x1FAB0, 0x1FAB6, prEmojiPresentation}, // E13.0  [7] (🪰..🪶)    fly..feather
+	{0x1FAB7, 0x1FABA, prEmojiPresentation}, // E14.0  [4] (🪷..🪺)    lotus..nest with eggs
+	{0x1FAC0, 0x1FAC2, prEmojiPresentation}, // E13.0  [3] (🫀..🫂)    anatomical heart..people hugging
+	{0x1FAC3, 0x1FAC5, prEmojiPresentation}, // E14.0  [3] (🫃..🫅)    pregnant man..person with crown
+	{0x1FAD0, 0x1FAD6, prEmojiPresentation}, // E13.0  [7] (🫐..🫖)    blueberries..teapot
+	{0x1FAD7, 0x1FAD9, prEmojiPresentation}, // E14.0  [3] (🫗..🫙)    pouring liquid..jar
+	{0x1FAE0, 0x1FAE7, prEmojiPresentation}, // E14.0  [8] (🫠..🫧)    melting face..bubbles
+	{0x1FAF0, 0x1FAF6, prEmojiPresentation}, // E14.0  [7] (🫰..🫶)    hand with index finger and thumb crossed..heart hands
+}
diff --git a/vendor/github.com/rivo/uniseg/gen_breaktest.go b/vendor/github.com/rivo/uniseg/gen_breaktest.go
new file mode 100644
index 0000000..e613c4c
--- /dev/null
+++ b/vendor/github.com/rivo/uniseg/gen_breaktest.go
@@ -0,0 +1,213 @@
+//go:build generate
+
+// This program generates a Go containing a slice of test cases based on the
+// Unicode Character Database auxiliary data files. The command line arguments
+// are as follows:
+//
+//   1. The name of the Unicode data file (just the filename, without extension).
+//   2. The name of the locally generated Go file.
+//   3. The name of the slice containing the test cases.
+//   4. The name of the generator, for logging purposes.
+//
+//go:generate go run gen_breaktest.go GraphemeBreakTest graphemebreak_test.go graphemeBreakTestCases graphemes
+//go:generate go run gen_breaktest.go WordBreakTest wordbreak_test.go wordBreakTestCases words
+//go:generate go run gen_breaktest.go SentenceBreakTest sentencebreak_test.go sentenceBreakTestCases sentences
+//go:generate go run gen_breaktest.go LineBreakTest linebreak_test.go lineBreakTestCases lines
+
+package main
+
+import (
+	"bufio"
+	"bytes"
+	"errors"
+	"fmt"
+	"go/format"
+	"io/ioutil"
+	"log"
+	"net/http"
+	"os"
+	"time"
+)
+
+// We want to test against a specific version rather than the latest. When the
+// package is upgraded to a new version, change these to generate new tests.
+const (
+	testCaseURL = `https://www.unicode.org/Public/14.0.0/ucd/auxiliary/%s.txt`
+)
+
+func main() {
+	if len(os.Args) < 5 {
+		fmt.Println("Not enough arguments, see code for details")
+		os.Exit(1)
+	}
+
+	log.SetPrefix("gen_breaktest (" + os.Args[4] + "): ")
+	log.SetFlags(0)
+
+	// Read text of testcases and parse into Go source code.
+	src, err := parse(fmt.Sprintf(testCaseURL, os.Args[1]))
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	// Format the Go code.
+	formatted, err := format.Source(src)
+	if err != nil {
+		log.Fatalln("gofmt:", err)
+	}
+
+	// Write it out.
+	log.Print("Writing to ", os.Args[2])
+	if err := ioutil.WriteFile(os.Args[2], formatted, 0644); err != nil {
+		log.Fatal(err)
+	}
+}
+
+// parse reads a break text file, either from a local file or from a URL. It
+// parses the file data into Go source code representing the test cases.
+func parse(url string) ([]byte, error) {
+	log.Printf("Parsing %s", url)
+	res, err := http.Get(url)
+	if err != nil {
+		return nil, err
+	}
+	body := res.Body
+	defer body.Close()
+
+	buf := new(bytes.Buffer)
+	buf.Grow(120 << 10)
+	buf.WriteString(`package uniseg
+
+// Code generated via go generate from gen_breaktest.go. DO NOT EDIT.
+
+// ` + os.Args[3] + ` are Grapheme testcases taken from
+// ` + url + `
+// on ` + time.Now().Format("January 2, 2006") + `. See
+// https://www.unicode.org/license.html for the Unicode license agreement.
+var ` + os.Args[3] + ` = []testCase {
+`)
+
+	sc := bufio.NewScanner(body)
+	num := 1
+	var line []byte
+	original := make([]byte, 0, 64)
+	expected := make([]byte, 0, 64)
+	for sc.Scan() {
+		num++
+		line = sc.Bytes()
+		if len(line) == 0 || line[0] == '#' {
+			continue
+		}
+		var comment []byte
+		if i := bytes.IndexByte(line, '#'); i >= 0 {
+			comment = bytes.TrimSpace(line[i+1:])
+			line = bytes.TrimSpace(line[:i])
+		}
+		original, expected, err := parseRuneSequence(line, original[:0], expected[:0])
+		if err != nil {
+			return nil, fmt.Errorf(`line %d: %v: %q`, num, err, line)
+		}
+		fmt.Fprintf(buf, "\t{original: \"%s\", expected: %s}, // %s\n", original, expected, comment)
+	}
+	if err := sc.Err(); err != nil {
+		return nil, err
+	}
+
+	// Check for final "# EOF", useful check if we're streaming via HTTP
+	if !bytes.Equal(line, []byte("# EOF")) {
+		return nil, fmt.Errorf(`line %d: exected "# EOF" as final line, got %q`, num, line)
+	}
+	buf.WriteString("}\n")
+	return buf.Bytes(), nil
+}
+
+// Used by parseRuneSequence to match input via bytes.HasPrefix.
+var (
+	prefixBreak     = []byte("÷ ")
+	prefixDontBreak = []byte("× ")
+	breakOk         = []byte("÷")
+	breakNo         = []byte("×")
+)
+
+// parseRuneSequence parses a rune + breaking opportunity sequence from b
+// and appends the Go code for testcase.original to orig
+// and appends the Go code for testcase.expected to exp.
+// It retuns the new orig and exp slices.
+//
+// E.g. for the input b="÷ 0020 × 0308 ÷ 1F1E6 ÷"
+// it will append
+//     "\u0020\u0308\U0001F1E6"
+// and "[][]rune{{0x0020,0x0308},{0x1F1E6},}"
+// to orig and exp respectively.
+//
+// The formatting of exp is expected to be cleaned up by gofmt or format.Source.
+// Note we explicitly require the sequence to start with ÷ and we implicitly
+// require it to end with ÷.
+func parseRuneSequence(b, orig, exp []byte) ([]byte, []byte, error) {
+	// Check for and remove first ÷ or ×.
+	if !bytes.HasPrefix(b, prefixBreak) && !bytes.HasPrefix(b, prefixDontBreak) {
+		return nil, nil, errors.New("expected ÷ or × as first character")
+	}
+	if bytes.HasPrefix(b, prefixBreak) {
+		b = b[len(prefixBreak):]
+	} else {
+		b = b[len(prefixDontBreak):]
+	}
+
+	boundary := true
+	exp = append(exp, "[][]rune{"...)
+	for len(b) > 0 {
+		if boundary {
+			exp = append(exp, '{')
+		}
+		exp = append(exp, "0x"...)
+		// Find end of hex digits.
+		var i int
+		for i = 0; i < len(b) && b[i] != ' '; i++ {
+			if d := b[i]; ('0' <= d || d <= '9') ||
+				('A' <= d || d <= 'F') ||
+				('a' <= d || d <= 'f') {
+				continue
+			}
+			return nil, nil, errors.New("bad hex digit")
+		}
+		switch i {
+		case 4:
+			orig = append(orig, "\\u"...)
+		case 5:
+			orig = append(orig, "\\U000"...)
+		default:
+			return nil, nil, errors.New("unsupport code point hex length")
+		}
+		orig = append(orig, b[:i]...)
+		exp = append(exp, b[:i]...)
+		b = b[i:]
+
+		// Check for space between hex and ÷ or ×.
+		if len(b) < 1 || b[0] != ' ' {
+			return nil, nil, errors.New("bad input")
+		}
+		b = b[1:]
+
+		// Check for next boundary.
+		switch {
+		case bytes.HasPrefix(b, breakOk):
+			boundary = true
+			b = b[len(breakOk):]
+		case bytes.HasPrefix(b, breakNo):
+			boundary = false
+			b = b[len(breakNo):]
+		default:
+			return nil, nil, errors.New("missing ÷ or ×")
+		}
+		if boundary {
+			exp = append(exp, '}')
+		}
+		exp = append(exp, ',')
+		if len(b) > 0 && b[0] == ' ' {
+			b = b[1:]
+		}
+	}
+	exp = append(exp, '}')
+	return orig, exp, nil
+}
diff --git a/vendor/github.com/rivo/uniseg/gen_properties.go b/vendor/github.com/rivo/uniseg/gen_properties.go
new file mode 100644
index 0000000..999d5ef
--- /dev/null
+++ b/vendor/github.com/rivo/uniseg/gen_properties.go
@@ -0,0 +1,256 @@
+//go:build generate
+
+// This program generates a property file in Go file from Unicode Character
+// Database auxiliary data files. The command line arguments are as follows:
+//
+//  1. The name of the Unicode data file (just the filename, without extension).
+//     Can be "-" (to skip) if the emoji flag is included.
+//  2. The name of the locally generated Go file.
+//  3. The name of the slice mapping code points to properties.
+//  4. The name of the generator, for logging purposes.
+//  5. (Optional) Flags, comma-separated. The following flags are available:
+//     - "emojis=<property>": include the specified emoji properties (e.g.
+//     "Extended_Pictographic").
+//     - "gencat": include general category properties.
+//
+//go:generate go run gen_properties.go auxiliary/GraphemeBreakProperty graphemeproperties.go graphemeCodePoints graphemes emojis=Extended_Pictographic
+//go:generate go run gen_properties.go auxiliary/WordBreakProperty wordproperties.go workBreakCodePoints words emojis=Extended_Pictographic
+//go:generate go run gen_properties.go auxiliary/SentenceBreakProperty sentenceproperties.go sentenceBreakCodePoints sentences
+//go:generate go run gen_properties.go LineBreak lineproperties.go lineBreakCodePoints lines gencat
+//go:generate go run gen_properties.go EastAsianWidth eastasianwidth.go eastAsianWidth eastasianwidth
+//go:generate go run gen_properties.go - emojipresentation.go emojiPresentation emojipresentation emojis=Emoji_Presentation
+package main
+
+import (
+	"bufio"
+	"bytes"
+	"errors"
+	"fmt"
+	"go/format"
+	"io/ioutil"
+	"log"
+	"net/http"
+	"os"
+	"regexp"
+	"sort"
+	"strconv"
+	"strings"
+	"time"
+)
+
+// We want to test against a specific version rather than the latest. When the
+// package is upgraded to a new version, change these to generate new tests.
+const (
+	propertyURL = `https://www.unicode.org/Public/14.0.0/ucd/%s.txt`
+	emojiURL    = `https://unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt`
+)
+
+// The regular expression for a line containing a code point range property.
+var propertyPattern = regexp.MustCompile(`^([0-9A-F]{4,6})(\.\.([0-9A-F]{4,6}))?\s*;\s*([A-Za-z0-9_]+)\s*#\s(.+)$`)
+
+func main() {
+	if len(os.Args) < 5 {
+		fmt.Println("Not enough arguments, see code for details")
+		os.Exit(1)
+	}
+
+	log.SetPrefix("gen_properties (" + os.Args[4] + "): ")
+	log.SetFlags(0)
+
+	// Parse flags.
+	flags := make(map[string]string)
+	if len(os.Args) >= 6 {
+		for _, flag := range strings.Split(os.Args[5], ",") {
+			flagFields := strings.Split(flag, "=")
+			if len(flagFields) == 1 {
+				flags[flagFields[0]] = "yes"
+			} else {
+				flags[flagFields[0]] = flagFields[1]
+			}
+		}
+	}
+
+	// Parse the text file and generate Go source code from it.
+	_, includeGeneralCategory := flags["gencat"]
+	var mainURL string
+	if os.Args[1] != "-" {
+		mainURL = fmt.Sprintf(propertyURL, os.Args[1])
+	}
+	src, err := parse(mainURL, flags["emojis"], includeGeneralCategory)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	// Format the Go code.
+	formatted, err := format.Source([]byte(src))
+	if err != nil {
+		log.Fatal("gofmt:", err)
+	}
+
+	// Save it to the (local) target file.
+	log.Print("Writing to ", os.Args[2])
+	if err := ioutil.WriteFile(os.Args[2], formatted, 0644); err != nil {
+		log.Fatal(err)
+	}
+}
+
+// parse parses the Unicode Properties text files located at the given URLs and
+// returns their equivalent Go source code to be used in the uniseg package. If
+// "emojiProperty" is not an empty string, emoji code points for that emoji
+// property (e.g. "Extended_Pictographic") will be included. In those cases, you
+// may pass an empty "propertyURL" to skip parsing the main properties file. If
+// "includeGeneralCategory" is true, the Unicode General Category property will
+// be extracted from the comments and included in the output.
+func parse(propertyURL, emojiProperty string, includeGeneralCategory bool) (string, error) {
+	if propertyURL == "" && emojiProperty == "" {
+		return "", errors.New("no properties to parse")
+	}
+
+	// Temporary buffer to hold properties.
+	var properties [][4]string
+
+	// Open the first URL.
+	if propertyURL != "" {
+		log.Printf("Parsing %s", propertyURL)
+		res, err := http.Get(propertyURL)
+		if err != nil {
+			return "", err
+		}
+		in1 := res.Body
+		defer in1.Close()
+
+		// Parse it.
+		scanner := bufio.NewScanner(in1)
+		num := 0
+		for scanner.Scan() {
+			num++
+			line := strings.TrimSpace(scanner.Text())
+
+			// Skip comments and empty lines.
+			if strings.HasPrefix(line, "#") || line == "" {
+				continue
+			}
+
+			// Everything else must be a code point range, a property and a comment.
+			from, to, property, comment, err := parseProperty(line)
+			if err != nil {
+				return "", fmt.Errorf("%s line %d: %v", os.Args[4], num, err)
+			}
+			properties = append(properties, [4]string{from, to, property, comment})
+		}
+		if err := scanner.Err(); err != nil {
+			return "", err
+		}
+	}
+
+	// Open the second URL.
+	if emojiProperty != "" {
+		log.Printf("Parsing %s", emojiURL)
+		res, err := http.Get(emojiURL)
+		if err != nil {
+			return "", err
+		}
+		in2 := res.Body
+		defer in2.Close()
+
+		// Parse it.
+		scanner := bufio.NewScanner(in2)
+		num := 0
+		for scanner.Scan() {
+			num++
+			line := scanner.Text()
+
+			// Skip comments, empty lines, and everything not containing
+			// "Extended_Pictographic".
+			if strings.HasPrefix(line, "#") || line == "" || !strings.Contains(line, emojiProperty) {
+				continue
+			}
+
+			// Everything else must be a code point range, a property and a comment.
+			from, to, property, comment, err := parseProperty(line)
+			if err != nil {
+				return "", fmt.Errorf("emojis line %d: %v", num, err)
+			}
+			properties = append(properties, [4]string{from, to, property, comment})
+		}
+		if err := scanner.Err(); err != nil {
+			return "", err
+		}
+	}
+
+	// Sort properties.
+	sort.Slice(properties, func(i, j int) bool {
+		left, _ := strconv.ParseUint(properties[i][0], 16, 64)
+		right, _ := strconv.ParseUint(properties[j][0], 16, 64)
+		return left < right
+	})
+
+	// Header.
+	var (
+		buf          bytes.Buffer
+		emojiComment string
+	)
+	columns := 3
+	if includeGeneralCategory {
+		columns = 4
+	}
+	if emojiURL != "" {
+		emojiComment = `
+// and
+// ` + emojiURL + `
+// ("Extended_Pictographic" only)`
+	}
+	buf.WriteString(`package uniseg
+
+// Code generated via go generate from gen_properties.go. DO NOT EDIT.
+
+// ` + os.Args[3] + ` are taken from
+// ` + propertyURL + emojiComment + `
+// on ` + time.Now().Format("January 2, 2006") + `. See https://www.unicode.org/license.html for the Unicode
+// license agreement.
+var ` + os.Args[3] + ` = [][` + strconv.Itoa(columns) + `]int{
+	`)
+
+	// Properties.
+	for _, prop := range properties {
+		if includeGeneralCategory {
+			generalCategory := "gc" + prop[3][:2]
+			if generalCategory == "gcL&" {
+				generalCategory = "gcLC"
+			}
+			prop[3] = prop[3][3:]
+			fmt.Fprintf(&buf, "{0x%s,0x%s,%s,%s}, // %s\n", prop[0], prop[1], translateProperty("pr", prop[2]), generalCategory, prop[3])
+		} else {
+			fmt.Fprintf(&buf, "{0x%s,0x%s,%s}, // %s\n", prop[0], prop[1], translateProperty("pr", prop[2]), prop[3])
+		}
+	}
+
+	// Tail.
+	buf.WriteString("}")
+
+	return buf.String(), nil
+}
+
+// parseProperty parses a line of the Unicode properties text file containing a
+// property for a code point range and returns it along with its comment.
+func parseProperty(line string) (from, to, property, comment string, err error) {
+	fields := propertyPattern.FindStringSubmatch(line)
+	if fields == nil {
+		err = errors.New("no property found")
+		return
+	}
+	from = fields[1]
+	to = fields[3]
+	if to == "" {
+		to = from
+	}
+	property = fields[4]
+	comment = fields[5]
+	return
+}
+
+// translateProperty translates a property name as used in the Unicode data file
+// to a variable used in the Go code.
+func translateProperty(prefix, property string) string {
+	return prefix + strings.ReplaceAll(property, "_", "")
+}
diff --git a/vendor/github.com/rivo/uniseg/grapheme.go b/vendor/github.com/rivo/uniseg/grapheme.go
new file mode 100644
index 0000000..0086fc1
--- /dev/null
+++ b/vendor/github.com/rivo/uniseg/grapheme.go
@@ -0,0 +1,334 @@
+package uniseg
+
+import "unicode/utf8"
+
+// Graphemes implements an iterator over Unicode grapheme clusters, or
+// user-perceived characters. While iterating, it also provides information
+// about word boundaries, sentence boundaries, line breaks, and monospace
+// character widths.
+//
+// After constructing the class via [NewGraphemes] for a given string "str",
+// [Graphemes.Next] is called for every grapheme cluster in a loop until it
+// returns false. Inside the loop, information about the grapheme cluster as
+// well as boundary information and character width is available via the various
+// methods (see examples below).
+//
+// Using this class to iterate over a string is convenient but it is much slower
+// than using this package's [Step] or [StepString] functions or any of the
+// other specialized functions starting with "First".
+type Graphemes struct {
+	// The original string.
+	original string
+
+	// The remaining string to be parsed.
+	remaining string
+
+	// The current grapheme cluster.
+	cluster string
+
+	// The byte offset of the current grapheme cluster relative to the original
+	// string.
+	offset int
+
+	// The current boundary information of the [Step] parser.
+	boundaries int
+
+	// The current state of the [Step] parser.
+	state int
+}
+
+// NewGraphemes returns a new grapheme cluster iterator.
+func NewGraphemes(str string) *Graphemes {
+	return &Graphemes{
+		original:  str,
+		remaining: str,
+		state:     -1,
+	}
+}
+
+// Next advances the iterator by one grapheme cluster and returns false if no
+// clusters are left. This function must be called before the first cluster is
+// accessed.
+func (g *Graphemes) Next() bool {
+	if len(g.remaining) == 0 {
+		// We're already past the end.
+		g.state = -2
+		g.cluster = ""
+		return false
+	}
+	g.offset += len(g.cluster)
+	g.cluster, g.remaining, g.boundaries, g.state = StepString(g.remaining, g.state)
+	return true
+}
+
+// Runes returns a slice of runes (code points) which corresponds to the current
+// grapheme cluster. If the iterator is already past the end or [Graphemes.Next]
+// has not yet been called, nil is returned.
+func (g *Graphemes) Runes() []rune {
+	if g.state < 0 {
+		return nil
+	}
+	return []rune(g.cluster)
+}
+
+// Str returns a substring of the original string which corresponds to the
+// current grapheme cluster. If the iterator is already past the end or
+// [Graphemes.Next] has not yet been called, an empty string is returned.
+func (g *Graphemes) Str() string {
+	return g.cluster
+}
+
+// Bytes returns a byte slice which corresponds to the current grapheme cluster.
+// If the iterator is already past the end or [Graphemes.Next] has not yet been
+// called, nil is returned.
+func (g *Graphemes) Bytes() []byte {
+	if g.state < 0 {
+		return nil
+	}
+	return []byte(g.cluster)
+}
+
+// Positions returns the interval of the current grapheme cluster as byte
+// positions into the original string. The first returned value "from" indexes
+// the first byte and the second returned value "to" indexes the first byte that
+// is not included anymore, i.e. str[from:to] is the current grapheme cluster of
+// the original string "str". If [Graphemes.Next] has not yet been called, both
+// values are 0. If the iterator is already past the end, both values are 1.
+func (g *Graphemes) Positions() (int, int) {
+	if g.state == -1 {
+		return 0, 0
+	} else if g.state == -2 {
+		return 1, 1
+	}
+	return g.offset, g.offset + len(g.cluster)
+}
+
+// IsWordBoundary returns true if a word ends after the current grapheme
+// cluster.
+func (g *Graphemes) IsWordBoundary() bool {
+	if g.state < 0 {
+		return true
+	}
+	return g.boundaries&MaskWord != 0
+}
+
+// IsSentenceBoundary returns true if a sentence ends after the current
+// grapheme cluster.
+func (g *Graphemes) IsSentenceBoundary() bool {
+	if g.state < 0 {
+		return true
+	}
+	return g.boundaries&MaskSentence != 0
+}
+
+// LineBreak returns whether the line can be broken after the current grapheme
+// cluster. A value of [LineDontBreak] means the line may not be broken, a value
+// of [LineMustBreak] means the line must be broken, and a value of
+// [LineCanBreak] means the line may or may not be broken.
+func (g *Graphemes) LineBreak() int {
+	if g.state == -1 {
+		return LineDontBreak
+	}
+	if g.state == -2 {
+		return LineMustBreak
+	}
+	return g.boundaries & MaskLine
+}
+
+// Width returns the monospace width of the current grapheme cluster.
+func (g *Graphemes) Width() int {
+	if g.state < 0 {
+		return 0
+	}
+	return g.boundaries >> ShiftWidth
+}
+
+// Reset puts the iterator into its initial state such that the next call to
+// [Graphemes.Next] sets it to the first grapheme cluster again.
+func (g *Graphemes) Reset() {
+	g.state = -1
+	g.offset = 0
+	g.cluster = ""
+	g.remaining = g.original
+}
+
+// GraphemeClusterCount returns the number of user-perceived characters
+// (grapheme clusters) for the given string.
+func GraphemeClusterCount(s string) (n int) {
+	state := -1
+	for len(s) > 0 {
+		_, s, _, state = FirstGraphemeClusterInString(s, state)
+		n++
+	}
+	return
+}
+
+// ReverseString reverses the given string while observing grapheme cluster
+// boundaries.
+func ReverseString(s string) string {
+	str := []byte(s)
+	reversed := make([]byte, len(str))
+	state := -1
+	index := len(str)
+	for len(str) > 0 {
+		var cluster []byte
+		cluster, str, _, state = FirstGraphemeCluster(str, state)
+		index -= len(cluster)
+		copy(reversed[index:], cluster)
+		if index <= len(str)/2 {
+			break
+		}
+	}
+	return string(reversed)
+}
+
+// The number of bits the grapheme property must be shifted to make place for
+// grapheme states.
... 55557 lines suppressed ...